From 0f50cb5d6bd2d8206cb3d1be12ecd04ad64cd90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Thu, 24 Nov 2016 07:53:02 +0100 Subject: [PATCH 001/157] Add a new example Watermark. --- image-watermark/controllers/default.js | 45 +++++++++++++++++++++++++ image-watermark/index.js | 7 ++++ image-watermark/public/empty | 1 + image-watermark/public/upload.jpg | Bin 0 -> 11546 bytes image-watermark/public/watermark.png | Bin 0 -> 5529 bytes image-watermark/readme.md | 8 +++++ image-watermark/views/index.html | 14 ++++++++ image-watermark/views/layout.html | 23 +++++++++++++ 8 files changed, 98 insertions(+) create mode 100644 image-watermark/controllers/default.js create mode 100644 image-watermark/index.js create mode 100644 image-watermark/public/empty create mode 100644 image-watermark/public/upload.jpg create mode 100644 image-watermark/public/watermark.png create mode 100644 image-watermark/readme.md create mode 100644 image-watermark/views/index.html create mode 100644 image-watermark/views/layout.html diff --git a/image-watermark/controllers/default.js b/image-watermark/controllers/default.js new file mode 100644 index 0000000..edaa552 --- /dev/null +++ b/image-watermark/controllers/default.js @@ -0,0 +1,45 @@ +var Path = require('path'); + +exports.install = function() { + F.route('/', view_index); + + // the number is maximum data receive + F.route('/', view_index, ['upload'], 100); // max 100 kB +}; + +function view_index() { + + var self = this; + var model = { info: '...' }; + + var file = self.files[0]; + if (self.files.length === 0 || !file.isImage()) { + self.view('index', model); + return; + } + + // file.isAudio(); + // file.isVideo(); + // file.isImage(); + + model.info = file.filename + ' ({0} kB) - {1}x{2}'.format(Math.floor(file.length / 1024, 2), file.width, file.height); + + // ============================= + // $ brew install graphicsmagick + // ============================= + + var filename = F.path.public('upload.jpg'); + + // Documentation: http://docs.totaljs.com/FrameworkImage/ + var image = file.image(); + + image.watermark(F.path.public('watermark.png'), 20, 80, 100, 40); + + // IMPORTANT: see here https://github.com/petersirka/total.js/tree/master/examples/routing + image.resizeCenter(300, 300).save(filename, function(err) { + console.log(err); + model.url = '
Uploaded image

'.format(U.getName(filename), new Date().getTime()); + self.view('index', model); + }); + +} \ No newline at end of file diff --git a/image-watermark/index.js b/image-watermark/index.js new file mode 100644 index 0000000..d709e87 --- /dev/null +++ b/image-watermark/index.js @@ -0,0 +1,7 @@ +// =================================================== +// IMPORTANT: only for development +// total.js - web application framework for node.js +// http://www.totaljs.com +// =================================================== + +require('total.js').http('debug'); \ No newline at end of file diff --git a/image-watermark/public/empty b/image-watermark/public/empty new file mode 100644 index 0000000..d2606ff --- /dev/null +++ b/image-watermark/public/empty @@ -0,0 +1 @@ +delete this file \ No newline at end of file diff --git a/image-watermark/public/upload.jpg b/image-watermark/public/upload.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32b4e6bf884b28133283e66c52d6028ab00cdee4 GIT binary patch literal 11546 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%0DbL6)E@WQyx8w_Mb55jK~WV)flIGb;gl$C_`Ah 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
  • -sF``hOV0*5!lu{Fv2_bq(Rw8=k+ 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 literal 0 HcmV?d00001 diff --git a/image-watermark/readme.md b/image-watermark/readme.md new file mode 100644 index 0000000..33955ac --- /dev/null +++ b/image-watermark/readme.md @@ -0,0 +1,8 @@ +# Requirements + +- Install GraphicsMagick or ImageMagick + +## Related examples + +- https://github.com/totaljs/examples/tree/master/routing-resize +- https://github.com/totaljs/examples/tree/master/download-file \ No newline at end of file diff --git a/image-watermark/views/index.html b/image-watermark/views/index.html new file mode 100644 index 0000000..e610ff1 --- /dev/null +++ b/image-watermark/views/index.html @@ -0,0 +1,14 @@ +@{meta('Upload example')} + +@{if model.url} + @{!model.url} +@{fi} + +
    + Uploaded: @{model.info} +
    +
    +
    + + +
    \ No newline at end of file diff --git a/image-watermark/views/layout.html b/image-watermark/views/layout.html new file mode 100644 index 0000000..6c4add7 --- /dev/null +++ b/image-watermark/views/layout.html @@ -0,0 +1,23 @@ + + + + @{meta} + + + + + + + + + + @{body} + + + \ No newline at end of file From c6655c77b02572b3f06fb90f6725978faba7ca9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Thu, 24 Nov 2016 08:27:02 +0100 Subject: [PATCH 002/157] Add a new example `workflows`. --- workflows/index.js | 55 ++++++++++++++++++++++++++++++++++++++++ workflows/models/user.js | 36 ++++++++++++++++++++++++++ workflows/workflows | 4 +++ 3 files changed, 95 insertions(+) create mode 100644 workflows/index.js create mode 100644 workflows/models/user.js create mode 100644 workflows/workflows diff --git a/workflows/index.js b/workflows/index.js new file mode 100644 index 0000000..7a01467 --- /dev/null +++ b/workflows/index.js @@ -0,0 +1,55 @@ +// =================================================== +// IMPORTANT: only for development +// total.js - web application framework for node.js +// http://www.totaljs.com +// =================================================== + +// Requirements: Total.js +v2.3.0 +require('total.js').load('debug', ['models', 'workflows']); + +// Async list +var samples = []; + +// Empty instance of User +var user = CREATE('User'); + +samples.push(function(next) { + console.log('---> begin $exec("user-save")'); + user.$exec('user-save', function(err, response) { + console.log('---> end $exec("user-save") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); +}); + +samples.push(function(next) { + console.log('---> begin $exec("array-results")'); + user.$exec('array-results', function(err, response) { + console.log('---> end $exec("array-results") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); +}); + +samples.push(function(next) { + console.log('---> begin $exec("user-query")'); + user.$exec('user-query', function(err, response) { + console.log('---> end $exec("user-query") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); +}); + +samples.push(function(next) { + console.log('---> begin $exec("xml")'); + user.$exec('xml', function(err, response) { + console.log('---> end $exec("xml") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); +}); + +samples.async(function() { + // Kills the app + F.kill(); +}); \ No newline at end of file diff --git a/workflows/models/user.js b/workflows/models/user.js new file mode 100644 index 0000000..aa3d747 --- /dev/null +++ b/workflows/models/user.js @@ -0,0 +1,36 @@ +NEWSCHEMA('User').make(function(schema) { + + schema.define('name', 'String(30)'); + schema.define('email', 'Email'); + + schema.addWorkflow('check', function(error, model, options, callback, controller) { + console.log('User.workflow("check")'); + callback(SUCCESS(true)); + }); + + schema.addWorkflow('confirm', function(error, model, options, callback, controller) { + console.log('User.workflow("confirm")'); + callback(SUCCESS(true)); + }); + + schema.addTransform('xml', function(error, model, options, callback, controller) { + console.log('User.transform("xml")'); + callback(SUCCESS(true)); + }); + + schema.addOperation('blabla', function(error, model, options, callback, controller) { + console.log('User.operation("blabla")'); + callback(SUCCESS(true)); + }); + + schema.setSave(function(error, model, options, callback, controller) { + console.log('User.save()'); + callback(SUCCESS(true)); + }); + + schema.setQuery(function(error, options, callback, controller) { + console.log('User.query()'); + callback(SUCCESS(true)); + }); + +}); \ No newline at end of file diff --git a/workflows/workflows b/workflows/workflows new file mode 100644 index 0000000..450b650 --- /dev/null +++ b/workflows/workflows @@ -0,0 +1,4 @@ +user-save : workflow:'check' --> workflow:'confirm' --> save (response) +array-results : workflow:'check' --> workflow:'confirm' --> save --> operation:'blabla' +user-query : query (response) +xml : transform:'xml' (response) \ No newline at end of file From 1a80142890906423cfba521c0104ac7c00608da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Thu, 15 Dec 2016 23:10:47 +0100 Subject: [PATCH 003/157] New example. --- components/components/contactform.html | 15 +++++++++++++++ components/controllers/default.js | 7 +++++++ components/index.js | 1 + components/views/index.html | 10 ++++++++++ components/views/layout.html | 17 +++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 components/components/contactform.html create mode 100644 components/controllers/default.js create mode 100644 components/index.js create mode 100644 components/views/index.html create mode 100644 components/views/layout.html diff --git a/components/components/contactform.html b/components/components/contactform.html new file mode 100644 index 0000000..62ccac1 --- /dev/null +++ b/components/components/contactform.html @@ -0,0 +1,15 @@ + + +
    + @{model.email} - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum saepe magnam odio minus id temporibus illum doloremque aliquid, consequatur nulla! +
    + + \ No newline at end of file diff --git a/components/controllers/default.js b/components/controllers/default.js new file mode 100644 index 0000000..413121f --- /dev/null +++ b/components/controllers/default.js @@ -0,0 +1,7 @@ +exports.install = function() { + F.route('/', view_index); +}; + +function view_index() { + this.view('index', { name: 'Peter', email: 'petersirka@gmail.com' }); +} \ No newline at end of file diff --git a/components/index.js b/components/index.js new file mode 100644 index 0000000..3c05431 --- /dev/null +++ b/components/index.js @@ -0,0 +1 @@ +require('total.js').http('debug'); \ No newline at end of file diff --git a/components/views/index.html b/components/views/index.html new file mode 100644 index 0000000..78a434a --- /dev/null +++ b/components/views/index.html @@ -0,0 +1,10 @@ +

    Components

    + +

    Contact form 1

    +@{component('contactform')} + +

    Contact form 2

    +@{component('contactform')} + +

    Contact form 3

    +@{component('contactform')} \ No newline at end of file diff --git a/components/views/layout.html b/components/views/layout.html new file mode 100644 index 0000000..3fb8c4a --- /dev/null +++ b/components/views/layout.html @@ -0,0 +1,17 @@ + + + + + + + + + + @{import('head', 'meta', 'components')} + + + +
    @{body}
    + + + \ No newline at end of file From c832ce9c2865401fe037e63033e52fb9e597574a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 16 Dec 2016 09:56:47 +0100 Subject: [PATCH 004/157] Add settings. --- components/components/contactform.html | 2 +- components/views/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/components/contactform.html b/components/components/contactform.html index 62ccac1..dc6edff 100644 --- a/components/components/contactform.html +++ b/components/components/contactform.html @@ -3,7 +3,7 @@
    - @{model.email} - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum saepe magnam odio minus id temporibus illum doloremque aliquid, consequatur nulla! + @{if settings.email}@{model.email}@{fi}Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum saepe magnam odio minus id temporibus illum doloremque aliquid, consequatur nulla!
    \ No newline at end of file diff --git a/components/components/newsletter.js b/components/components/newsletter.js new file mode 100644 index 0000000..c2abaa0 --- /dev/null +++ b/components/components/newsletter.js @@ -0,0 +1,13 @@ +// This is server-side implementaion of component + +exports.install = function() { + F.route('/api/newsletter/', json_newsletter, ['post']); +}; + +function json_newsletter() { + var self = this; + self.body.ip = self.ip; + self.body.created = F.datetime; + NOSQL('newsletter').upsert(self.body); + self.json(SUCCESS(true)); +} \ No newline at end of file diff --git a/components/public/contactform.html b/components/public/contactform.html new file mode 100644 index 0000000..dc6edff --- /dev/null +++ b/components/public/contactform.html @@ -0,0 +1,15 @@ + + +
    + @{if settings.email}@{model.email}@{fi}Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum saepe magnam odio minus id temporibus illum doloremque aliquid, consequatur nulla! +
    + + \ No newline at end of file diff --git a/components/views/index.html b/components/views/index.html index 79cab72..be93af5 100644 --- a/components/views/index.html +++ b/components/views/index.html @@ -3,6 +3,9 @@

    Components

    Contact form 1

    @{component('contactform')} +

    Newlsetter

    +@{component('newsletter')} +

    Contact form 2

    @{component('contactform', { email: true })} diff --git a/components/views/layout.html b/components/views/layout.html index 3fb8c4a..b805580 100644 --- a/components/views/layout.html +++ b/components/views/layout.html @@ -8,6 +8,7 @@ @{import('head', 'meta', 'components')} + From cd588bc1785613226ccd26279b08c1fc04ecb57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 16 Dec 2016 11:13:00 +0100 Subject: [PATCH 006/157] Update example. --- components/components/newsletter.html | 3 ++- components/components/newsletter.js | 2 +- components/views/index.html | 13 +++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/components/components/newsletter.html b/components/components/newsletter.html index 728083f..873b3f8 100644 --- a/components/components/newsletter.html +++ b/components/components/newsletter.html @@ -13,8 +13,9 @@ $(document).on('keypress', '.newsletter-input', function(e) { if (e.keyCode !== 13) return; + var el = $(this).closest('.newsletter'); $.post('/api/newsletter/', { email: this.value }, function(response) { - $('.newsletter').replaceWith(''); + el.replaceWith(''); }); }); \ No newline at end of file diff --git a/components/components/newsletter.js b/components/components/newsletter.js index c2abaa0..c855487 100644 --- a/components/components/newsletter.js +++ b/components/components/newsletter.js @@ -8,6 +8,6 @@ function json_newsletter() { var self = this; self.body.ip = self.ip; self.body.created = F.datetime; - NOSQL('newsletter').upsert(self.body); + NOSQL('newsletter').insert(self.body); self.json(SUCCESS(true)); } \ No newline at end of file diff --git a/components/views/index.html b/components/views/index.html index be93af5..402d143 100644 --- a/components/views/index.html +++ b/components/views/index.html @@ -3,11 +3,20 @@

    Components

    Contact form 1

    @{component('contactform')} -

    Newlsetter

    +

    Newsletter 1

    @{component('newsletter')}

    Contact form 2

    @{component('contactform', { email: true })}

    Contact form 3

    -@{component('contactform')} \ No newline at end of file +@{component('contactform')} + +

    Newsletter 2

    +@{component('newsletter')} + +

    Contact form 4

    +@{component('contactform')} + +

    Newsletter 3

    +@{component('newsletter')} From ea8a5ce207062b35e040531edb5fdaae45113fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 16 Dec 2016 13:47:37 +0100 Subject: [PATCH 007/157] Remove useless file. --- components/public/contactform.html | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 components/public/contactform.html diff --git a/components/public/contactform.html b/components/public/contactform.html deleted file mode 100644 index dc6edff..0000000 --- a/components/public/contactform.html +++ /dev/null @@ -1,15 +0,0 @@ - - -
    - @{if settings.email}@{model.email}@{fi}Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum saepe magnam odio minus id temporibus illum doloremque aliquid, consequatur nulla! -
    - - \ No newline at end of file From fb48b5121e0adab0000f459c40d054c8e9c31406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 16 Dec 2016 15:13:40 +0100 Subject: [PATCH 008/157] Update example. --- components/components/datetime.html | 29 +++++++++++++++++++++++++++++ components/views/index.html | 6 ++++++ 2 files changed, 35 insertions(+) create mode 100644 components/components/datetime.html diff --git a/components/components/datetime.html b/components/components/datetime.html new file mode 100644 index 0000000..3c0a25b --- /dev/null +++ b/components/components/datetime.html @@ -0,0 +1,29 @@ + + + + + +
    + + + \ No newline at end of file diff --git a/components/views/index.html b/components/views/index.html index 402d143..1c30b45 100644 --- a/components/views/index.html +++ b/components/views/index.html @@ -1,5 +1,8 @@

    Components

    +

    DateTime 1

    +@{component('datetime')} +

    Contact form 1

    @{component('contactform')} @@ -20,3 +23,6 @@

    Contact form 4

    Newsletter 3

    @{component('newsletter')} + +

    DateTime 2

    +@{component('datetime')} From 9bcef0848fd17a564bef9740eb6053e7c34938d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Sat, 17 Dec 2016 10:35:56 +0100 Subject: [PATCH 009/157] Fix code. --- components/views/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/views/layout.html b/components/views/layout.html index b805580..440deff 100644 --- a/components/views/layout.html +++ b/components/views/layout.html @@ -7,7 +7,7 @@ - @{import('head', 'meta', 'components')} + @{import('head', 'meta')} From f057f46fe17b3b3291fb62d6cc737e894478d358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Sat, 7 Jan 2017 10:18:34 +0100 Subject: [PATCH 010/157] New example models-nosql. --- models-nosql/controllers/default.js | 8 ++++++++ models-nosql/databases/products.nosql | 5 +++++ models-nosql/index.js | 7 +++++++ models-nosql/models/products.js | 9 +++++++++ 4 files changed, 29 insertions(+) create mode 100644 models-nosql/controllers/default.js create mode 100644 models-nosql/databases/products.nosql create mode 100644 models-nosql/index.js create mode 100644 models-nosql/models/products.js diff --git a/models-nosql/controllers/default.js b/models-nosql/controllers/default.js new file mode 100644 index 0000000..b548e04 --- /dev/null +++ b/models-nosql/controllers/default.js @@ -0,0 +1,8 @@ +exports.install = function() { + F.route('/', json_query, ['*Products']); +}; + +function json_query() { + var self = this; + self.$query(self.query, self.callback()); +} \ No newline at end of file diff --git a/models-nosql/databases/products.nosql b/models-nosql/databases/products.nosql new file mode 100644 index 0000000..dbdb498 --- /dev/null +++ b/models-nosql/databases/products.nosql @@ -0,0 +1,5 @@ +{"name":"Shoes","price":30} +{"name":"T-shirts","price":20} +{"name":"Jeans","price":60} +{"name":"Socks","price":3} +{"name":"Hats","price":6} diff --git a/models-nosql/index.js b/models-nosql/index.js new file mode 100644 index 0000000..d709e87 --- /dev/null +++ b/models-nosql/index.js @@ -0,0 +1,7 @@ +// =================================================== +// IMPORTANT: only for development +// total.js - web application framework for node.js +// http://www.totaljs.com +// =================================================== + +require('total.js').http('debug'); \ No newline at end of file diff --git a/models-nosql/models/products.js b/models-nosql/models/products.js new file mode 100644 index 0000000..868611c --- /dev/null +++ b/models-nosql/models/products.js @@ -0,0 +1,9 @@ +NEWSCHEMA('Products').make(function(schema) { + schema.setQuery(function(error, options, callback, controller) { + NOSQL('products').find().make(function(builder) { + // builder.take(U.parseInt(options.take) || 20); + // builder.skip(U.parseInt(options.skip) || 0); + builder.callback(callback); + }); + }); +}); \ No newline at end of file From 61c1aae43cf036b346a5a79aa7eee7fe3aff2e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Tue, 10 Jan 2017 18:20:45 +0100 Subject: [PATCH 011/157] New example. --- next.js/README.md | 13 +++++++++++++ next.js/config | 1 + next.js/controllers/default.js | 14 ++++++++++++++ next.js/package.json | 11 +++++++++++ next.js/pages/a.js | 1 + next.js/pages/b.js | 1 + next.js/pages/index.js | 9 +++++++++ next.js/server.js | 22 ++++++++++++++++++++++ 8 files changed, 72 insertions(+) create mode 100644 next.js/README.md create mode 100644 next.js/config create mode 100644 next.js/controllers/default.js create mode 100644 next.js/package.json create mode 100644 next.js/pages/a.js create mode 100644 next.js/pages/b.js create mode 100644 next.js/pages/index.js create mode 100644 next.js/server.js diff --git a/next.js/README.md b/next.js/README.md new file mode 100644 index 0000000..4b4af9f --- /dev/null +++ b/next.js/README.md @@ -0,0 +1,13 @@ + +# Total.js example + +This example is Total.js an alternative to [Custom Express Server example](https://github.com/zeit/next.js/tree/master/examples/custom-server-express) for inspiration. + +## How to use it? + +Install it and run: + +```bash +npm install +npm run dev +``` \ No newline at end of file diff --git a/next.js/config b/next.js/config new file mode 100644 index 0000000..056f6c4 --- /dev/null +++ b/next.js/config @@ -0,0 +1 @@ +directory-public-virtual : /pages/ \ No newline at end of file diff --git a/next.js/controllers/default.js b/next.js/controllers/default.js new file mode 100644 index 0000000..49b40c0 --- /dev/null +++ b/next.js/controllers/default.js @@ -0,0 +1,14 @@ +exports.install = function() { + F.route('/a', view_a); + F.route('/b', view_b); +}; + +function view_a() { + var self = this; + self.next('a', self.query); +} + +function view_b() { + var self = this; + self.next('b', self.query); +} \ No newline at end of file diff --git a/next.js/package.json b/next.js/package.json new file mode 100644 index 0000000..c0fd902 --- /dev/null +++ b/next.js/package.json @@ -0,0 +1,11 @@ +{ + "scripts": { + "dev": "node server.js", + "build": "next build", + "start": "NODE_ENV=production node server.js" + }, + "dependencies": { + "total.js": "latest", + "next": "^2.0.0-beta" + } +} diff --git a/next.js/pages/a.js b/next.js/pages/a.js new file mode 100644 index 0000000..16eb989 --- /dev/null +++ b/next.js/pages/a.js @@ -0,0 +1 @@ +export default () =>
    a
    diff --git a/next.js/pages/b.js b/next.js/pages/b.js new file mode 100644 index 0000000..3791f48 --- /dev/null +++ b/next.js/pages/b.js @@ -0,0 +1 @@ +export default () =>
    b
    diff --git a/next.js/pages/index.js b/next.js/pages/index.js new file mode 100644 index 0000000..d044fc1 --- /dev/null +++ b/next.js/pages/index.js @@ -0,0 +1,9 @@ +import React from 'react' +import Link from 'next/link' + +export default () => ( +
      +
    • a
    • +
    • b
    • +
    +) diff --git a/next.js/server.js b/next.js/server.js new file mode 100644 index 0000000..2f89cf2 --- /dev/null +++ b/next.js/server.js @@ -0,0 +1,22 @@ +require('total.js'); + +const release = process.env.NODE_ENV === 'production'; +const next = require('next') +const app = next({ dir: '.', dev: !release }); +const handle = app.getRequestHandler(); + +app.prepare().then(function() { + + Controller.prototype.next = function(name, model) { + this.custom(); + app.render(this.req, this.res, name, model); + return this; + }; + + F.route('/*', function() { + this.custom(); + handle(this.req, this.res); + }); + + F.http(release ? 'release' : 'debug'); +}); \ No newline at end of file From 4c6382db103cff9cbbfa7d999d70975b203c4c6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 3 Feb 2017 12:46:54 +0100 Subject: [PATCH 012/157] Fix sass example. --- external-compile-sass/definitions/sass.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/external-compile-sass/definitions/sass.js b/external-compile-sass/definitions/sass.js index ee0e046..6ea2b27 100644 --- a/external-compile-sass/definitions/sass.js +++ b/external-compile-sass/definitions/sass.js @@ -7,10 +7,9 @@ F.helpers.scss = function(name) { return ''; }; -F.file('*.scss', function(req, res, is) { +F.file(function(req, res, is) { if (is) return req.extension === 'scss'; - F.exists(req, res, 20, function(next, tmp) { var filename = F.path.public(req.url); Fs.readFile(filename, function(err, data) { From 621f9962f0ff18d4777ffe29c113d53c6aa49144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Thu, 9 Feb 2017 12:14:04 +0100 Subject: [PATCH 013/157] Improve example. --- angularjs-websocket/modules/angular.js | 4 ++-- angularjs-websocket/views/layout.html | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/angularjs-websocket/modules/angular.js b/angularjs-websocket/modules/angular.js index c985abb..eb2d180 100644 --- a/angularjs-websocket/modules/angular.js +++ b/angularjs-websocket/modules/angular.js @@ -404,7 +404,7 @@ exports.install = function() { return $script_create(name); }; - framework.on('controller-render-head', event_render_head); + framework.on('controller-render-meta', event_render_head); }; exports.uninstall = function() { @@ -418,7 +418,7 @@ exports.uninstall = function() { delete framework.helpers.ngController; delete framework.helpers.ngLocale; delete framework.helpers.ngCommon; - framework.removeListener('controller-render-head', event_render_head); + framework.removeListener('controller-render-meta', event_render_head); }; function event_render_head(controller) { diff --git a/angularjs-websocket/views/layout.html b/angularjs-websocket/views/layout.html index f3ac08e..ebcaf46 100644 --- a/angularjs-websocket/views/layout.html +++ b/angularjs-websocket/views/layout.html @@ -4,13 +4,12 @@ - @{meta} - @{head} + @{import('meta', 'head')} From 7b7d8a66b8eef5ecc55309f92f8bec6ed0dbdb87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Wed, 15 Feb 2017 18:35:34 +0100 Subject: [PATCH 014/157] Fix session example. --- session/controllers/default.js | 7 ++++--- session/definitions/modules.js | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/session/controllers/default.js b/session/controllers/default.js index d6b8fe8..946d88b 100644 --- a/session/controllers/default.js +++ b/session/controllers/default.js @@ -9,9 +9,10 @@ exports.install = function() { function view_index() { var self = this; - if (typeof(self.session.counter) === 'undefined') - self.session.counter = 0; - self.session.counter++; + if (self.session.counter) + self.session.counter++; + else + self.session.counter = 1; self.view('index'); } \ No newline at end of file diff --git a/session/definitions/modules.js b/session/definitions/modules.js index cfb21f6..0a0f42b 100644 --- a/session/definitions/modules.js +++ b/session/definitions/modules.js @@ -1,2 +1,2 @@ // Install session module -INSTALL('module', 'https://modules.totaljs.com/session/v1.01/session.js'); \ No newline at end of file +INSTALL('module', 'https://modules.totaljs.com/latest/session.js'); \ No newline at end of file From a6a5ccccad93b9022cefc232355f63dd66c26492 Mon Sep 17 00:00:00 2001 From: Martin Smola Date: Sun, 2 Apr 2017 19:33:26 +0200 Subject: [PATCH 015/157] Added Vue.js example --- vue/controllers/default.js | 21 +++++++++++++++++++++ vue/debug.js | 11 +++++++++++ vue/public/assets/app.js | 29 +++++++++++++++++++++++++++++ vue/public/assets/vue.min.js | 8 ++++++++ vue/views/index.html | 13 +++++++++++++ 5 files changed, 82 insertions(+) create mode 100644 vue/controllers/default.js create mode 100644 vue/debug.js create mode 100644 vue/public/assets/app.js create mode 100644 vue/public/assets/vue.min.js create mode 100644 vue/views/index.html diff --git a/vue/controllers/default.js b/vue/controllers/default.js new file mode 100644 index 0000000..7324831 --- /dev/null +++ b/vue/controllers/default.js @@ -0,0 +1,21 @@ +global.Vue = require('vue'); +var renderer = require('vue-server-renderer').createRenderer(); +var app = require(F.path.root('public/assets/app.js'))(); + +exports.install = function() { + F.route('/*', view_index); +}; + +function view_index() { + var self = this; + + renderer.renderToString(app, function(error, html) { + + if (error) { + + self.throw500(error); + } + + self.view('index', html); + }); +} diff --git a/vue/debug.js b/vue/debug.js new file mode 100644 index 0000000..97689f2 --- /dev/null +++ b/vue/debug.js @@ -0,0 +1,11 @@ +var fs = require('fs'); +var options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'total.js' }; +// options.https = { key: fs.readFileSync('keys/agent2-key.pem'), cert: fs.readFileSync('keys/agent2-cert.pem')}; +// options.sleep = 3000; +// options.debugger = 40894; + +function debug(){var framework=require("total.js"),port=parseInt(process.argv[process.argv.length-1]);return isNaN(port)||(options||(options={}),options.port=port),port>0&&!options.port&&(options.port=port||8e3),options.https?framework.https("debug",options):(framework.http("debug",options),void(first?framework.emit("debug-start"):framework.emit("debug-restart")))}function app(){function onFilter(path,isDirectory){return!isDirectory&&path.match(/\/themes\//i)?path.match(/themes(\/|\\)?[a-z0-9_.-]+(\/|\\)?index\.js/gi)?!0:!1:isDirectory?!0:null!==path.match(/\.(js|resource|package)/i)}function onIncrease(clear){clear&&(clearTimeout(pidIncrease),speed=TIME),pidIncrease=setTimeout(function(){speed+=TIME,speed>4e3&&(speed=4e3),onIncrease()},12e4)}function onComplete(f){fs.readdir(directory,function(err,arr){for(var length=arr.length,i=0;length>i;i++){var name=arr[i];"debug.js"!==name&&name.match(/config\-debug|config\-release|config|versions|sitemap|dependencies|\.js|\.resource/i)&&f.push(name)}length=f.length;for(var i=0;length>i;i++){var name=f[i];files[name]||(files[name]=isLoaded?0:null)}refresh()})}function refresh(){for(var filenames=Object.keys(files),length=filenames.length,i=0;length>i;i++){var filename=filenames[i];!function(filename){async.await(function(next){fs.stat(filename,function(err,stat){if(err)delete files[filename],changes.push(prefix+filename.replace(directory,"")+" (removed)"),force=!0;else{var ticks=stat.mtime.getTime();null!==files[filename]&&files[filename]!==ticks&&(changes.push(prefix+filename.replace(directory,"")+(0===files[filename]?" (added)":" (modified)")),force=!0),files[filename]=ticks}next()})})}(filename)}async.complete(function(){if(isLoaded=!0,setTimeout(refresh_directory,speed),onIncrease(),1===status&&force){onIncrease(!0),restart();for(var length=changes.length,i=0;length>i;i++)console.log(changes[i]);changes=[],force=!1}})}function refresh_directory(){utils.ls(directories,onComplete,onFilter)}function restart(){if(null!==app){try{isSkip=!0,process.kill(app.pid)}catch(err){}app=null}var arr=process.argv,port=arr.pop();if(-1!==process.execArgv.indexOf("--debug")){var key="--debug="+(options["debugger"]||40894);-1===process.execArgv.indexOf(key)&&process.execArgv.push(key)}first?first=!1:arr.push("restart"),arr.push("debugging"),arr.push(port),app=fork(path.join(directory,"debug.js"),arr),app.on("message",function(msg){"eaddrinuse"===msg&&process.exit(1)}),app.on("exit",function(){return isSkip===!1?(app=null,void process.exit()):(isSkip=!1,void(255===status&&(app=null)))}),0===status&&app.send("debugging"),status=1}function end(){if(!arguments.callee.isEnd){if(arguments.callee.isEnd=!0,fs.unlink(pid,noop),null===app)return void process.exit(0);isSkip=!0,process.kill(app.pid),app=null,process.exit(0)}}function noop(){}var pidIncrease,fork=require("child_process").fork,utils=require("total.js/utils"),directories=[directory+"/controllers",directory+"/definitions",directory+"/isomorphic",directory+"/modules",directory+"/resources",directory+"/models",directory+"/source",directory+"/workers",directory+"/packages",directory+"/themes"],files={},force=!1,changes=[],app=null,status=0,async=new utils.Async,pid="",pidInterval=null,prefix="----------------------------------------------------> ",isLoaded=!1,isSkip=!1,speed=TIME;process.on("SIGTERM",end),process.on("SIGINT",end),process.on("exit",end),process.pid>0&&(console.log(prefix+"PID: "+process.pid+" (v"+VERSION+")"),pid=path.join(directory,"debug.pid"),fs.writeFileSync(pid,process.pid),pidInterval=setInterval(function(){fs.exists(pid,function(exist){exist||(fs.unlink(pid,noop),null!==app&&(isSkip=!0,process.kill(app.pid)),process.exit(0))})},2e3)),restart(),refresh_directory()}function run(){if(isDebugging)return void debug();var filename=path.join(directory,"debug.pid");return fs.existsSync(filename)?(fs.unlinkSync(filename),void setTimeout(function(){app()},3e3)):void app()}var isDebugging=-1!==process.argv.indexOf("debugging"),directory=process.cwd(),path=require("path"),first=-1===process.argv.indexOf("restart"),VERSION="3.0",TIME=2e3;process.on("uncaughtException",function(e){-1===e.toString().indexOf("ESRCH")&&console.log(e)}),run(); \ No newline at end of file diff --git a/vue/public/assets/app.js b/vue/public/assets/app.js new file mode 100644 index 0000000..547455a --- /dev/null +++ b/vue/public/assets/app.js @@ -0,0 +1,29 @@ + +(function() { + 'use strict'; + var createApp = function() { + + // Main Vue instance must be returned and have a root + // node with the id "app", so that the client-side + // version can take over once it loads. + return new Vue({ + template: '
    You have been here for {{ counter }} seconds.
    ', + data: { + counter: 0 + }, + created: function() { + console.log('CREATED'); + var vm = this; + setInterval(function() { + vm.counter += 1 + }, 1000); + } + }); + + }; + if (typeof module !== 'undefined' && module.exports) { + module.exports = createApp; + } else { + this.app = createApp({ el: '#app' }); + } +}).call(this); diff --git a/vue/public/assets/vue.min.js b/vue/public/assets/vue.min.js new file mode 100644 index 0000000..d079a74 --- /dev/null +++ b/vue/public/assets/vue.min.js @@ -0,0 +1,8 @@ +/*! + * Vue.js v2.2.6 + * (c) 2014-2017 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";function e(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function t(e){var t=parseFloat(e);return isNaN(t)?e:t}function n(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}function i(e,t){return $i.call(e,t)}function o(e){return"string"==typeof e||"number"==typeof e}function a(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function s(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function c(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function u(e,t){for(var n in t)e[n]=t[n];return e}function l(e){return null!==e&&"object"==typeof e}function f(e){return ki.call(e)===Ai}function p(e){for(var t={},n=0;n=0&&co[n].id>e.id;)n--;co.splice(Math.max(n,po)+1,0,e)}else co.push(e);lo||(lo=!0,zi(de))}}function he(e){mo.clear(),me(e,mo)}function me(e,t){var n,r,i=Array.isArray(e);if((i||l(e))&&Object.isExtensible(e)){if(e.__ob__){var o=e.__ob__.dep.id;if(t.has(o))return;t.add(o)}if(i)for(n=e.length;n--;)me(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)me(e[r[n]],t)}}function ge(e,t,n){go.get=function(){return this[t][n]},go.set=function(e){this[t][n]=e},Object.defineProperty(e,n,go)}function ye(e){e._watchers=[];var t=e.$options;t.props&&_e(e,t.props),t.methods&&ke(e,t.methods),t.data?be(e):k(e._data={},!0),t.computed&&we(e,t.computed),t.watch&&Ae(e,t.watch)}function _e(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[],o=!e.$parent;Qi.shouldConvert=o;for(var a in t)!function(o){i.push(o);var a=P(o,t,n,e);A(r,o,a),o in e||ge(e,"_props",o)}(a);Qi.shouldConvert=!0}function be(e){var t=e.$options.data;t=e._data="function"==typeof t?$e(t,e):t||{},f(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&i(r,n[o])||g(n[o])||ge(e,"_data",n[o]);k(t,!0)}function $e(e,t){try{return e.call(t)}catch(e){return U(e,t,"data()"),{}}}function we(e,t){var n=e._computedWatchers=Object.create(null);for(var r in t){var i=t[r],o="function"==typeof i?i:i.get;n[r]=new ho(e,o,d,yo),r in e||xe(e,r,i)}}function xe(e,t,n){"function"==typeof n?(go.get=Ce(t),go.set=d):(go.get=n.get?n.cache!==!1?Ce(t):n.get:d,go.set=n.set?n.set:d),Object.defineProperty(e,t,go)}function Ce(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),qi.target&&t.depend(),t.value}}function ke(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?d:s(t[n],e)}function Ae(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:e instanceof RegExp&&e.test(t)}function ft(e,t){for(var n in e){var r=e[n];if(r){var i=ut(r.componentOptions);i&&!t(i)&&(pt(r),e[n]=null)}}}function pt(e){e&&(e.componentInstance._inactive||fe(e.componentInstance,"deactivated"),e.componentInstance.$destroy())}function dt(e){for(var t=e.data,n=e,r=e;r.componentInstance;)r=r.componentInstance._vnode,r.data&&(t=vt(r.data,t));for(;n=n.parent;)n.data&&(t=vt(t,n.data));return ht(t)}function vt(e,t){return{staticClass:mt(e.staticClass,t.staticClass),class:e.class?[e.class,t.class]:t.class}}function ht(e){var t=e.class,n=e.staticClass;return n||t?mt(n,gt(t)):""}function mt(e,t){return e?t?e+" "+t:e:t||""}function gt(e){var t="";if(!e)return t;if("string"==typeof e)return e;if(Array.isArray(e)){for(var n,r=0,i=e.length;r-1?Zo[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Zo[e]=/HTMLUnknownElement/.test(t.toString())}function bt(e){if("string"==typeof e){var t=document.querySelector(e);return t?t:document.createElement("div")}return e}function $t(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n)}function wt(e,t){return document.createElementNS(zo[e],t)}function xt(e){return document.createTextNode(e)}function Ct(e){return document.createComment(e)}function kt(e,t,n){e.insertBefore(t,n)}function At(e,t){e.removeChild(t)}function Ot(e,t){e.appendChild(t)}function Tt(e){return e.parentNode}function St(e){return e.nextSibling}function Et(e){return e.tagName}function jt(e,t){e.textContent=t}function Nt(e,t,n){e.setAttribute(t,n)}function It(e,t){var n=e.data.ref;if(n){var i=e.context,o=e.componentInstance||e.elm,a=i.$refs;t?Array.isArray(a[n])?r(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function Lt(e){return void 0===e||null===e}function Dt(e){return void 0!==e&&null!==e}function Mt(e){return e===!0}function Pt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&Dt(e.data)===Dt(t.data)&&Rt(e,t)}function Rt(e,t){if("input"!==e.tag)return!0;var n;return(Dt(n=e.data)&&Dt(n=n.attrs)&&n.type)===(Dt(n=t.data)&&Dt(n=n.attrs)&&n.type)}function Ft(e,t,n){var r,i,o={};for(r=t;r<=n;++r)i=e[r].key,Dt(i)&&(o[i]=r);return o}function Ht(e,t){(e.data.directives||t.data.directives)&&Ut(e,t)}function Ut(e,t){var n,r,i,o=e===Qo,a=t===Qo,s=Bt(e.data.directives,e.context),c=Bt(t.data.directives,t.context),u=[],l=[];for(n in c)r=s[n],i=c[n],r?(i.oldValue=r.value,zt(i,"update",t,e),i.def&&i.def.componentUpdated&&l.push(i)):(zt(i,"bind",t,e),i.def&&i.def.inserted&&u.push(i));if(u.length){var f=function(){for(var n=0;n=0&&" "===(m=e.charAt(h));h--);m&&oa.test(m)||(l=!0)}}else void 0===o?(v=i+1,o=e.slice(0,i).trim()):t();if(void 0===o?o=e.slice(0,i).trim():0!==v&&t(),a)for(i=0;i=Oo}function ln(e){return 34===e||39===e}function fn(e){var t=1;for(jo=Eo;!un();)if(e=cn(),ln(e))pn(e);else if(91===e&&t++,93===e&&t--,0===t){No=Eo;break}}function pn(e){for(var t=e;!un()&&(e=cn())!==t;);}function dn(e,t,n){Io=n;var r=t.value,i=t.modifiers,o=e.tag,a=e.attrsMap.type;if("select"===o)mn(e,r,i);else if("input"===o&&"checkbox"===a)vn(e,r,i);else if("input"===o&&"radio"===a)hn(e,r,i);else if("input"===o||"textarea"===o)gn(e,r,i);else if(!Si.isReservedTag(o))return on(e,r,i),!1;return!0}function vn(e,t,n){var r=n&&n.number,i=nn(e,"value")||"null",o=nn(e,"true-value")||"true",a=nn(e,"false-value")||"false";Qt(e,"checked","Array.isArray("+t+")?_i("+t+","+i+")>-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),tn(e,sa,"var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+t+"=$$a.concat($$v))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+t+"=$$c}",null,!0)}function hn(e,t,n){var r=n&&n.number,i=nn(e,"value")||"null";i=r?"_n("+i+")":i,Qt(e,"checked","_q("+t+","+i+")"),tn(e,sa,an(t,i),null,!0)}function mn(e,t,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})",o="var $$selectedVal = "+i+";";o=o+" "+an(t,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),tn(e,"change",o,null,!0)}function gn(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?aa:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=an(t,l);c&&(f="if($event.target.composing)return;"+f),Qt(e,"value","("+t+")"),tn(e,u,f,null,!0),(s||a||"number"===r)&&tn(e,"blur","$forceUpdate()")}function yn(e){var t;e[aa]&&(t=Di?"change":"input",e[t]=[].concat(e[aa],e[t]||[]),delete e[aa]),e[sa]&&(t=Hi?"click":"change",e[t]=[].concat(e[sa],e[t]||[]),delete e[sa])}function _n(e,t,n,r){if(n){var i=t,o=Lo;t=function(n){null!==(1===arguments.length?i(n):i.apply(null,arguments))&&bn(e,t,r,o)}}Lo.addEventListener(e,t,r)}function bn(e,t,n,r){(r||Lo).removeEventListener(e,t,n)}function $n(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};Lo=t.elm,yn(n),K(n,r,_n,bn,t.context)}}function wn(e,t){if(e.data.domProps||t.data.domProps){var n,r,i=t.elm,o=e.data.domProps||{},a=t.data.domProps||{};a.__ob__&&(a=t.data.domProps=u({},a));for(n in o)null==a[n]&&(i[n]="");for(n in a)if(r=a[n],"textContent"!==n&&"innerHTML"!==n||(t.children&&(t.children.length=0),r!==o[n]))if("value"===n){i._value=r;var s=null==r?"":String(r);xn(i,t,s)&&(i.value=s)}else i[n]=r}}function xn(e,t,n){return!e.composing&&("option"===t.tag||Cn(e,n)||kn(e,n))}function Cn(e,t){return document.activeElement!==e&&e.value!==t}function kn(e,n){var r=e.value,i=e._vModifiers;return i&&i.number||"number"===e.type?t(r)!==t(n):i&&i.trim?r.trim()!==n.trim():r!==n}function An(e){var t=On(e.style);return e.staticStyle?u(e.staticStyle,t):t}function On(e){return Array.isArray(e)?p(e):"string"==typeof e?la(e):e}function Tn(e,t){var n,r={};if(t)for(var i=e;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=An(i.data))&&u(r,n);(n=An(e.data))&&u(r,n);for(var o=e;o=o.parent;)o.data&&(n=An(o.data))&&u(r,n);return r}function Sn(e,t){var n=t.data,r=e.data;if(n.staticStyle||n.style||r.staticStyle||r.style){var i,o,a=t.elm,s=e.data.staticStyle,c=e.data.style||{},l=s||c,f=On(t.data.style)||{};t.data.style=f.__ob__?u({},f):f;var p=Tn(t,!0);for(o in l)null==p[o]&&da(a,o,"");for(o in p)(i=p[o])!==l[o]&&da(a,o,null==i?"":i)}}function En(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function jn(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t);else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");e.setAttribute("class",n.trim())}}function Nn(e){if(e){if("object"==typeof e){var t={};return e.css!==!1&&u(t,ga(e.name||"v")),u(t,e),t}return"string"==typeof e?ga(e):void 0}}function In(e){ka(function(){ka(e)})}function Ln(e,t){(e._transitionClasses||(e._transitionClasses=[])).push(t),En(e,t)}function Dn(e,t){e._transitionClasses&&r(e._transitionClasses,t),jn(e,t)}function Mn(e,t,n){var r=Pn(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===_a?wa:Ca,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=_a,l=a,f=o.length):t===ba?u>0&&(n=ba,l=u,f=c.length):(l=Math.max(a,u),n=l>0?a>u?_a:ba:null,f=n?n===_a?o.length:c.length:0),{type:n,timeout:l,propCount:f,hasTransform:n===_a&&Aa.test(r[$a+"Property"])}}function Rn(e,t){for(;e.length1}function zn(e,t){t.data.show||Hn(t)}function Jn(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s-1,a.selected!==o&&(a.selected=o);else if(v(qn(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Kn(e,t){for(var n=0,r=t.length;n=0&&a[i].lowerCasedTag!==s;i--);else i=0;if(i>=0){for(var c=a.length-1;c>=i;c--)t.end&&t.end(a[c].tag,n,r);a.length=i,o=i&&a[i-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,r):"p"===s&&(t.start&&t.start(e,[],!1,n,r),t.end&&t.end(e,n,r))}for(var i,o,a=[],s=t.expectHTML,c=t.isUnaryTag||Oi,u=t.canBeLeftOpenTag||Oi,l=0;e;){if(i=e,o&&ys(o)){var f=o.toLowerCase(),p=_s[f]||(_s[f]=new RegExp("([\\s\\S]*?)(]*>)","i")),d=0,v=e.replace(p,function(e,n,r){return d=r.length,ys(f)||"noscript"===f||(n=n.replace(//g,"$1").replace(//g,"$1")),t.chars&&t.chars(n),""});l+=e.length-v.length,e=v,r(f,l-d,l)}else{var h=e.indexOf("<");if(0===h){if(Ya.test(e)){var m=e.indexOf("-->");if(m>=0){n(m+3);continue}}if(Qa.test(e)){var g=e.indexOf("]>");if(g>=0){n(g+2);continue}}var y=e.match(Ga);if(y){n(y[0].length);continue}var _=e.match(Za);if(_){var b=l;n(_[0].length),r(_[1],b,l);continue}var $=function(){var t=e.match(qa);if(t){var r={tagName:t[1],attrs:[],start:l};n(t[0].length);for(var i,o;!(i=e.match(Wa))&&(o=e.match(Ja));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=l,r}}();if($){!function(e){var n=e.tagName,i=e.unarySlash;s&&("p"===o&&Va(n)&&r(o),u(n)&&o===n&&r(n));for(var l=c(n)||"html"===n&&"head"===o||!!i,f=e.attrs.length,p=new Array(f),d=0;d=0){for(x=e.slice(h);!(Za.test(x)||qa.test(x)||Ya.test(x)||Qa.test(x)||(C=x.indexOf("<",1))<0);)h+=C,x=e.slice(h);w=e.substring(0,h),n(h)}h<0&&(w=e,e=""),t.chars&&w&&t.chars(w)}if(e===i){t.chars&&t.chars(e);break}}r()}function ur(e,t){var n=t?Cs(t):xs;if(n.test(e)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(e);){i=r.index,i>a&&o.push(JSON.stringify(e.slice(a,i)));var s=Wt(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a0,Pi=Li&&Li.indexOf("edge/")>0,Ri=Li&&Li.indexOf("android")>0,Fi=Li&&/iphone|ipad|ipod|ios/.test(Li),Hi=Li&&/chrome\/\d+/.test(Li)&&!Pi,Ui=function(){return void 0===yi&&(yi=!Ii&&"undefined"!=typeof global&&"server"===global.process.env.VUE_ENV),yi},Bi=Ii&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Vi="undefined"!=typeof Symbol&&b(Symbol)&&"undefined"!=typeof Reflect&&b(Reflect.ownKeys),zi=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t1?c(n):n;for(var r=c(arguments,1),i=0,o=n.length;i1&&(t[n[0].trim()]=n[1].trim())}}),t}),fa=/^--/,pa=/\s*!important$/,da=function(e,t,n){fa.test(t)?e.style.setProperty(t,n):pa.test(n)?e.style.setProperty(t,n.replace(pa,""),"important"):e.style[ha(t)]=n},va=["Webkit","Moz","ms"],ha=a(function(e){if(Do=Do||document.createElement("div"),"filter"!==(e=wi(e))&&e in Do.style)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;np?(u=Lt(n[m+1])?null:n[m+1].elm,h(e,u,n,f,m,r)):f>m&&g(e,t,l,p)}function b(e,t,n,r){if(e!==t){if(Mt(t.isStatic)&&Mt(e.isStatic)&&t.key===e.key&&(Mt(t.isCloned)||Mt(t.isOnce)))return t.elm=e.elm,void(t.componentInstance=e.componentInstance);var i,o=t.data;Dt(o)&&Dt(i=o.hook)&&Dt(i=i.prepatch)&&i(e,t);var a=t.elm=e.elm,s=e.children,c=t.children;if(Dt(o)&&p(t)){for(i=0;i',n.innerHTML.indexOf(t)>0}("\n"," "),Ua=n("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Ba=n("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Va=n("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),za=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],Ja=new RegExp("^\\s*"+/([^\s"'<>\/=]+)/.source+"(?:\\s*("+/(?:=)/.source+")\\s*(?:"+za.join("|")+"))?"),Ka="[a-zA-Z_][\\w\\-\\.]*",qa=new RegExp("^<((?:"+Ka+"\\:)?"+Ka+")"),Wa=/^\s*(\/?)>/,Za=new RegExp("^<\\/((?:"+Ka+"\\:)?"+Ka+")[^>]*>"),Ga=/^]+>/i,Ya=/^ ",isLoaded=!1,isSkip=!1,speed=TIME;process.on("SIGTERM",end),process.on("SIGINT",end),process.on("exit",end),process.pid>0&&(console.log(prefix+"PID: "+process.pid+" (v"+VERSION+")"),pid=path.join(directory,"debug.pid"),fs.writeFileSync(pid,process.pid),pidInterval=setInterval(function(){fs.exists(pid,function(exist){exist||(fs.unlink(pid,noop),null!==app&&(isSkip=!0,process.kill(app.pid)),process.exit(0))})},2e3)),restart(),refresh_directory()}function run(){if(isDebugging)return void debug();var filename=path.join(directory,"debug.pid");return fs.existsSync(filename)?(fs.unlinkSync(filename),void setTimeout(function(){app()},3e3)):void app()}var isDebugging=-1!==process.argv.indexOf("debugging"),directory=process.cwd(),path=require("path"),first=-1===process.argv.indexOf("restart"),VERSION="3.0",TIME=2e3;process.on("uncaughtException",function(e){-1===e.toString().indexOf("ESRCH")&&console.log(e)}),run(); \ No newline at end of file diff --git a/vue/index.js b/vue/index.js new file mode 100644 index 0000000..3c05431 --- /dev/null +++ b/vue/index.js @@ -0,0 +1 @@ +require('total.js').http('debug'); \ No newline at end of file From 5d517c930ed097ceb02b3661efc387ac029e2948 Mon Sep 17 00:00:00 2001 From: Varun Batra Date: Sun, 23 Apr 2017 15:26:28 +0530 Subject: [PATCH 026/157] Update index.js - Removes bug that cluster.fork isn't a function. --- session-cluster-redis/index.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/session-cluster-redis/index.js b/session-cluster-redis/index.js index d796113..40d8153 100644 --- a/session-cluster-redis/index.js +++ b/session-cluster-redis/index.js @@ -18,21 +18,21 @@ if (!cluster.isMaster) { F.http('debug'); return; -} - -var numCPUs = os.cpus().length; +}else{ + //Varun Batra Removed bug for cluster.fork is not a function since cluster isn't a master once forked. + var numCPUs = os.cpus().length; -for (var i = 0; i < numCPUs; i++) { + for (var i = 0; i < numCPUs; i++) { - // Run framework - var fork = cluster.fork(); + // Run framework + var fork = cluster.fork(); - fork.on('message', onMessage); + fork.on('message', onMessage); - // Send ID - fork.send({ type: 'id', id: i }); + // Send ID + fork.send({ type: 'id', id: i }); + } } - console.log('The cluster is running.'); function onMessage(message) { @@ -40,4 +40,4 @@ function onMessage(message) { } // Use a terminal for testing: -// $ siege -b -r 10 http://127.0.0.1:8000/ \ No newline at end of file +// $ siege -b -r 10 http://127.0.0.1:8000/ From 9d7d2809215d31b1272b0c11b9832bce941d52aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Mon, 8 May 2017 11:01:17 +0200 Subject: [PATCH 027/157] Fix a problem with sending message. --- websocket/controllers/default.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/websocket/controllers/default.js b/websocket/controllers/default.js index 665c2f8..d9bafb9 100644 --- a/websocket/controllers/default.js +++ b/websocket/controllers/default.js @@ -84,11 +84,11 @@ function socket_homepage() { console.log('Connect / Online:', controller.online); client.send({ message: 'Hello {0}'.format(client.id) }); - controller.send({ message: 'Connect new user: {0}\nOnline: {1}'.format(client.id, controller.online) }, [], [client.id]); + controller.send({ message: 'Connect new user: {0}\nOnline: {1}'.format(client.id, controller.online) }, null, [client.id]); // or /* - controller.send({ message: 'Some message' }, [], function(user) { + controller.send({ message: 'Some message' }, null, function(user) { // filter return user.id === client.id; }); From 561282958f4f655cdad5fba1f02fc60e2e4cc3e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Mon, 15 May 2017 14:25:40 +0200 Subject: [PATCH 028/157] Temporary fix (a bug in `ready` event in the framework). --- workflows/index.js | 86 ++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/workflows/index.js b/workflows/index.js index 7a01467..a03c5df 100644 --- a/workflows/index.js +++ b/workflows/index.js @@ -7,49 +7,53 @@ // Requirements: Total.js +v2.3.0 require('total.js').load('debug', ['models', 'workflows']); -// Async list -var samples = []; - -// Empty instance of User -var user = CREATE('User'); - -samples.push(function(next) { - console.log('---> begin $exec("user-save")'); - user.$exec('user-save', function(err, response) { - console.log('---> end $exec("user-save") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); +setTimeout(function() { + + // Async list + var samples = []; + + // Empty instance of User + var user = CREATE('User'); + + samples.push(function(next) { + console.log('---> begin $exec("user-save")'); + user.$exec('user-save', function(err, response) { + console.log('---> end $exec("user-save") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); + }); + + samples.push(function(next) { + console.log('---> begin $exec("array-results")'); + user.$exec('array-results', function(err, response) { + console.log('---> end $exec("array-results") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); }); -}); - -samples.push(function(next) { - console.log('---> begin $exec("array-results")'); - user.$exec('array-results', function(err, response) { - console.log('---> end $exec("array-results") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); + + samples.push(function(next) { + console.log('---> begin $exec("user-query")'); + user.$exec('user-query', function(err, response) { + console.log('---> end $exec("user-query") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); }); -}); - -samples.push(function(next) { - console.log('---> begin $exec("user-query")'); - user.$exec('user-query', function(err, response) { - console.log('---> end $exec("user-query") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); + + samples.push(function(next) { + console.log('---> begin $exec("xml")'); + user.$exec('xml', function(err, response) { + console.log('---> end $exec("xml") RESPONSE: ' + JSON.stringify(response)); + console.log(); + next(); + }); }); -}); - -samples.push(function(next) { - console.log('---> begin $exec("xml")'); - user.$exec('xml', function(err, response) { - console.log('---> end $exec("xml") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); + + samples.async(function() { + // Kills the app + F.kill(); }); -}); -samples.async(function() { - // Kills the app - F.kill(); -}); \ No newline at end of file +}, 1000); From bddca8cbc12ab18dfcdc62a9632f2c3f0a836b77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 26 May 2017 18:08:02 +0200 Subject: [PATCH 029/157] Update readme. --- readme.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 074b355..8445798 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,15 @@ ## IMPORTANT NOTE: -All examples are customized for `+v2.0.x` version. +All examples are customized for `+v2.6.x` version. --- -> Firstly you must install total.js as global module __npm install -g total.js__ or you must copy __node_modules__ with total.js into each example. \ No newline at end of file +## How to run examples? + +- first you have to install __Total.js framework__ `$ npm install total.js` +- then run each example like this: + +```bash +$ cd workers +$ node index.js +``` From 7df7e6e8de18d4df0170409156a741de8930c885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Tue, 30 May 2017 08:23:14 +0200 Subject: [PATCH 030/157] Update start scripts. --- angularjs-2/index.js | 17 ++++++- angularjs-bootstrap/index.js | 17 +++++-- angularjs-common/index.js | 17 +++++-- angularjs-nedb-rest-resources/index.js | 17 +++++-- angularjs-routing/index.js | 19 +++++--- angularjs-websocket/index.js | 17 +++++-- angularjs/index.js | 17 +++++-- async/index.js | 17 +++++-- authorization-roles/index.js | 17 +++++-- authorization-www-basic/index.js | 17 +++++-- authorization-www-basic/readme.md | 1 + authorization/index.js | 17 +++++-- blocks/index.js | 17 ++++++- bootstrap/index.js | 17 +++++-- cache-http/index.js | 17 +++++-- cache-partial/index.js | 17 +++++-- cache-static-file-refresh/index.js | 16 ++++--- changes/index.js | 17 +++++-- cluster/controllers/default.js | 2 +- cluster/index.js | 45 +++++-------------- components/index.js | 17 ++++++- config-debug-release-test/debug.js | 17 +++++-- config-debug-release-test/release.js | 16 +++++-- contact-form/index.js | 17 +++++-- controller-cancel/index.js | 17 +++++-- controller-mail/index.js | 17 +++++-- controller-memorize/index.js | 17 +++++-- controller-proxy/proxy-products/index.js | 17 +++++-- controller-proxy/proxy-user/index.js | 17 +++++-- controller-proxy/server/index.js | 17 +++++-- controller-transfer/index.js | 17 +++++-- cookies/index.js | 17 +++++-- cors/index.js | 17 +++++-- css-auto-vendor-prefixes/index.js | 17 +++++-- custom-headers/index.js | 17 +++++-- download-file-counter/index.js | 17 +++++-- download-file-database-nosql/index.js | 17 +++++-- download-file-progress/index.js | 17 +++++-- download-file/index.js | 17 +++++-- download-stream/index.js | 17 +++++-- external-compile-sass/index.js | 17 +++++-- external-compile-uglifyjs/index.js | 17 +++++-- font-awesome/index.js | 17 +++++-- forms/index.js | 17 +++++-- framework-business-logic-source/index.js | 17 +++++-- framework-eval/index.js | 17 +++++-- framework-functions/index.js | 17 +++++-- framework-global/index.js | 17 +++++-- .../index.js | 17 +++++-- framework-install-config/index.js | 17 +++++-- framework-modules/index.js | 17 +++++-- framework-stop/index.js | 17 +++++-- framework-usage/index.js | 17 +++++-- generators/index.js | 17 +++++-- heroku/release.js | 16 +++++-- html-appcache-offline/index.js | 17 +++++-- image-middleware-pngquant/index.js | 17 ++++++- image-resize/index.js | 17 +++++-- image-watermark/index.js | 17 +++++-- isomorphic/index.js | 17 ++++++- knockoutjs-todo/index.js | 17 +++++-- localization-resources/index.js | 17 +++++-- logs/index.js | 17 +++++-- middleware/index.js | 17 +++++-- mixedreplace-both/index.js | 17 +++++-- mixedreplace-download/index.js | 17 +++++-- mixedreplace-upload/index.js | 17 +++++-- models-nosql/index.js | 17 +++++-- models/index.js | 17 +++++-- mongodb/index.js | 17 +++++-- mongoose/index.js | 17 +++++-- mysql/index.js | 17 +++++-- pagination/index.js | 17 +++++-- passport.js-bearer-local/index.js | 17 +++++-- passport.js/index.js | 17 +++++-- paypal/index.js | 17 +++++-- polymer/index.js | 17 ++++++- postgresql/index.js | 17 +++++-- problems/index.js | 17 +++++-- redirect-host/index.js | 17 +++++-- request-to-response/index.js | 17 +++++-- routing-flags-roles/index.js | 17 +++++-- routing-flags/index.js | 17 +++++-- routing-generators/index.js | 17 ++++++- routing-resize/index.js | 17 +++++-- routing-subdomain/index.js | 17 +++++-- routing-timeout/index.js | 17 +++++-- routing/index.js | 17 +++++-- scheduler/index.js | 17 +++++-- server-sent-events/index.js | 17 +++++-- session-cluster-redis/controllers/default.js | 15 ------- session-cluster-redis/definitions/session.js | 30 ------------- session-cluster-redis/index.js | 43 ------------------ session-cluster-redis/readme.md | 3 -- session-cluster-redis/views/homepage.html | 16 ------- sitemap/index.js | 17 ++++++- static-crossdomain/index.js | 17 +++++-- static-file-handling/index.js | 17 +++++-- static-file-merge/index.js | 17 +++++-- static-version/index.js | 17 +++++-- themes/index.js | 17 ++++++- upload-multipart/index.js | 17 +++++-- validation/index.js | 17 +++++-- video-streaming/index.js | 17 +++++-- views-custom-helper/index.js | 17 +++++-- views-head/index.js | 17 +++++-- views-javascript-compress/index.js | 17 +++++-- views-meta/index.js | 17 +++++-- views-place-sections/index.js | 17 +++++-- views-websocket/index.js | 17 +++++-- views-xhr/index.js | 17 +++++-- views/index.js | 17 +++++-- vue/index.js | 17 ++++++- webrtc/index.js | 17 +++++-- websocket/index.js | 17 +++++-- workers/index.js | 17 +++++-- xml-sitemap-workers/index.js | 17 +++++-- xml-sitemap/index.js | 17 +++++-- 118 files changed, 1469 insertions(+), 555 deletions(-) delete mode 100644 session-cluster-redis/controllers/default.js delete mode 100644 session-cluster-redis/definitions/session.js delete mode 100644 session-cluster-redis/index.js delete mode 100644 session-cluster-redis/readme.md delete mode 100644 session-cluster-redis/views/homepage.html diff --git a/angularjs-2/index.js b/angularjs-2/index.js index 3c05431..80dfad6 100644 --- a/angularjs-2/index.js +++ b/angularjs-2/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-bootstrap/index.js b/angularjs-bootstrap/index.js index d709e87..80dfad6 100644 --- a/angularjs-bootstrap/index.js +++ b/angularjs-bootstrap/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-common/index.js b/angularjs-common/index.js index d709e87..80dfad6 100644 --- a/angularjs-common/index.js +++ b/angularjs-common/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/index.js b/angularjs-nedb-rest-resources/index.js index d709e87..80dfad6 100644 --- a/angularjs-nedb-rest-resources/index.js +++ b/angularjs-nedb-rest-resources/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-routing/index.js b/angularjs-routing/index.js index 1faab6c..80dfad6 100644 --- a/angularjs-routing/index.js +++ b/angularjs-routing/index.js @@ -1,7 +1,16 @@ - // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com // =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; -require('total.js').http('debug'); \ No newline at end of file +require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-websocket/index.js b/angularjs-websocket/index.js index d709e87..80dfad6 100644 --- a/angularjs-websocket/index.js +++ b/angularjs-websocket/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs/index.js b/angularjs/index.js index d709e87..80dfad6 100644 --- a/angularjs/index.js +++ b/angularjs/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/async/index.js b/async/index.js index d709e87..80dfad6 100644 --- a/async/index.js +++ b/async/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/authorization-roles/index.js b/authorization-roles/index.js index d709e87..80dfad6 100644 --- a/authorization-roles/index.js +++ b/authorization-roles/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/authorization-www-basic/index.js b/authorization-www-basic/index.js index d709e87..80dfad6 100644 --- a/authorization-www-basic/index.js +++ b/authorization-www-basic/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/authorization-www-basic/readme.md b/authorization-www-basic/readme.md index 57e05d7..19ba143 100644 --- a/authorization-www-basic/readme.md +++ b/authorization-www-basic/readme.md @@ -123,6 +123,7 @@ export.uninstall = function() { F.removeListener('service', housekeeping); } ``` + ### Bonus 2: URI authentication The `.baa()` method only checks request HTTP headers for credentials, it doesn't check for credentials in the URI like this: diff --git a/authorization/index.js b/authorization/index.js index d709e87..80dfad6 100644 --- a/authorization/index.js +++ b/authorization/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/blocks/index.js b/blocks/index.js index 3c05431..80dfad6 100644 --- a/blocks/index.js +++ b/blocks/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/bootstrap/index.js b/bootstrap/index.js index d709e87..80dfad6 100644 --- a/bootstrap/index.js +++ b/bootstrap/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/cache-http/index.js b/cache-http/index.js index d709e87..80dfad6 100644 --- a/cache-http/index.js +++ b/cache-http/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/cache-partial/index.js b/cache-partial/index.js index d709e87..80dfad6 100644 --- a/cache-partial/index.js +++ b/cache-partial/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/cache-static-file-refresh/index.js b/cache-static-file-refresh/index.js index 937db11..fe0397b 100644 --- a/cache-static-file-refresh/index.js +++ b/cache-static-file-refresh/index.js @@ -1,9 +1,15 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR PRODUCTION +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -// static cache works in release mode +const options = {}; -require('total.js').http('release'); \ No newline at end of file +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; + +require('total.js').http('release', options); +// require('total.js').cluster.http(5, 'release', options); \ No newline at end of file diff --git a/changes/index.js b/changes/index.js index d709e87..80dfad6 100644 --- a/changes/index.js +++ b/changes/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/cluster/controllers/default.js b/cluster/controllers/default.js index 382fa03..8721591 100644 --- a/cluster/controllers/default.js +++ b/cluster/controllers/default.js @@ -4,6 +4,6 @@ exports.install = function() { function view_homepage() { var self = this; - process.send('Response framework ID: ' + F.id); + console.log('Responded: ' + F.id); self.view('homepage'); } \ No newline at end of file diff --git a/cluster/index.js b/cluster/index.js index 393fd39..18fb1cb 100644 --- a/cluster/index.js +++ b/cluster/index.js @@ -1,41 +1,16 @@ -var http = require('http'); -var cluster = require('cluster'); -var os = require('os'); +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== -var debug = true; +const options = {}; -if (!cluster.isMaster) { +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; - // This code will be executed according the number of CPU - // This code will be using: single process RAM * numCPUs - var F = require('total.js'); - - // Set framework ID - F.on('message', function(message) { - if (message.type === 'id') - framework.id = message.id; - }); - - F.http('debug'); - return; -} - -var numCPUs = os.cpus().length; - -for (var i = 0; i < numCPUs; i++) { - - // Run framework - var fork = cluster.fork(); - - fork.on('message', onMessage); - - // Send ID - fork.send({ type: 'id', id: i }); -} - -function onMessage(message) { - console.log('Message ->', message); -} +require('total.js').cluster.http(5, 'release', options); // Use a terminal for testing: // $ siege -b -r 10 http://127.0.0.1:8000/ \ No newline at end of file diff --git a/components/index.js b/components/index.js index 3c05431..80dfad6 100644 --- a/components/index.js +++ b/components/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/config-debug-release-test/debug.js b/config-debug-release-test/debug.js index d709e87..80dfad6 100644 --- a/config-debug-release-test/debug.js +++ b/config-debug-release-test/debug.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/config-debug-release-test/release.js b/config-debug-release-test/release.js index 3e61168..fe0397b 100644 --- a/config-debug-release-test/release.js +++ b/config-debug-release-test/release.js @@ -1,7 +1,15 @@ // =================================================== -// IMPORTANT: only for production -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR PRODUCTION +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('release'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; + +require('total.js').http('release', options); +// require('total.js').cluster.http(5, 'release', options); \ No newline at end of file diff --git a/contact-form/index.js b/contact-form/index.js index d709e87..80dfad6 100644 --- a/contact-form/index.js +++ b/contact-form/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-cancel/index.js b/controller-cancel/index.js index d709e87..80dfad6 100644 --- a/controller-cancel/index.js +++ b/controller-cancel/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-mail/index.js b/controller-mail/index.js index d709e87..80dfad6 100644 --- a/controller-mail/index.js +++ b/controller-mail/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-memorize/index.js b/controller-memorize/index.js index d709e87..80dfad6 100644 --- a/controller-memorize/index.js +++ b/controller-memorize/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-proxy/proxy-products/index.js b/controller-proxy/proxy-products/index.js index d709e87..80dfad6 100644 --- a/controller-proxy/proxy-products/index.js +++ b/controller-proxy/proxy-products/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-proxy/proxy-user/index.js b/controller-proxy/proxy-user/index.js index d709e87..80dfad6 100644 --- a/controller-proxy/proxy-user/index.js +++ b/controller-proxy/proxy-user/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-proxy/server/index.js b/controller-proxy/server/index.js index d709e87..80dfad6 100644 --- a/controller-proxy/server/index.js +++ b/controller-proxy/server/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-transfer/index.js b/controller-transfer/index.js index d709e87..80dfad6 100644 --- a/controller-transfer/index.js +++ b/controller-transfer/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/cookies/index.js b/cookies/index.js index d709e87..80dfad6 100644 --- a/cookies/index.js +++ b/cookies/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/cors/index.js b/cors/index.js index d709e87..80dfad6 100644 --- a/cors/index.js +++ b/cors/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/css-auto-vendor-prefixes/index.js b/css-auto-vendor-prefixes/index.js index d709e87..80dfad6 100644 --- a/css-auto-vendor-prefixes/index.js +++ b/css-auto-vendor-prefixes/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/custom-headers/index.js b/custom-headers/index.js index d709e87..80dfad6 100644 --- a/custom-headers/index.js +++ b/custom-headers/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/download-file-counter/index.js b/download-file-counter/index.js index d709e87..80dfad6 100644 --- a/download-file-counter/index.js +++ b/download-file-counter/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/download-file-database-nosql/index.js b/download-file-database-nosql/index.js index d709e87..80dfad6 100644 --- a/download-file-database-nosql/index.js +++ b/download-file-database-nosql/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/download-file-progress/index.js b/download-file-progress/index.js index d709e87..80dfad6 100644 --- a/download-file-progress/index.js +++ b/download-file-progress/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/download-file/index.js b/download-file/index.js index d709e87..80dfad6 100644 --- a/download-file/index.js +++ b/download-file/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/download-stream/index.js b/download-stream/index.js index d709e87..80dfad6 100644 --- a/download-stream/index.js +++ b/download-stream/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/external-compile-sass/index.js b/external-compile-sass/index.js index d709e87..80dfad6 100644 --- a/external-compile-sass/index.js +++ b/external-compile-sass/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/external-compile-uglifyjs/index.js b/external-compile-uglifyjs/index.js index d709e87..80dfad6 100644 --- a/external-compile-uglifyjs/index.js +++ b/external-compile-uglifyjs/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/font-awesome/index.js b/font-awesome/index.js index d709e87..80dfad6 100644 --- a/font-awesome/index.js +++ b/font-awesome/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/forms/index.js b/forms/index.js index d709e87..80dfad6 100644 --- a/forms/index.js +++ b/forms/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-business-logic-source/index.js b/framework-business-logic-source/index.js index d709e87..80dfad6 100644 --- a/framework-business-logic-source/index.js +++ b/framework-business-logic-source/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-eval/index.js b/framework-eval/index.js index d709e87..80dfad6 100644 --- a/framework-eval/index.js +++ b/framework-eval/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-functions/index.js b/framework-functions/index.js index d709e87..80dfad6 100644 --- a/framework-functions/index.js +++ b/framework-functions/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-global/index.js b/framework-global/index.js index d709e87..80dfad6 100644 --- a/framework-global/index.js +++ b/framework-global/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-install-business-logic-source/index.js b/framework-install-business-logic-source/index.js index d709e87..80dfad6 100644 --- a/framework-install-business-logic-source/index.js +++ b/framework-install-business-logic-source/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-install-config/index.js b/framework-install-config/index.js index d709e87..80dfad6 100644 --- a/framework-install-config/index.js +++ b/framework-install-config/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-modules/index.js b/framework-modules/index.js index d709e87..80dfad6 100644 --- a/framework-modules/index.js +++ b/framework-modules/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-stop/index.js b/framework-stop/index.js index d709e87..80dfad6 100644 --- a/framework-stop/index.js +++ b/framework-stop/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-usage/index.js b/framework-usage/index.js index d709e87..80dfad6 100644 --- a/framework-usage/index.js +++ b/framework-usage/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/generators/index.js b/generators/index.js index d709e87..80dfad6 100644 --- a/generators/index.js +++ b/generators/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/heroku/release.js b/heroku/release.js index 3e61168..fe0397b 100644 --- a/heroku/release.js +++ b/heroku/release.js @@ -1,7 +1,15 @@ // =================================================== -// IMPORTANT: only for production -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR PRODUCTION +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('release'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; + +require('total.js').http('release', options); +// require('total.js').cluster.http(5, 'release', options); \ No newline at end of file diff --git a/html-appcache-offline/index.js b/html-appcache-offline/index.js index d709e87..80dfad6 100644 --- a/html-appcache-offline/index.js +++ b/html-appcache-offline/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/image-middleware-pngquant/index.js b/image-middleware-pngquant/index.js index 3c05431..80dfad6 100644 --- a/image-middleware-pngquant/index.js +++ b/image-middleware-pngquant/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/image-resize/index.js b/image-resize/index.js index d709e87..80dfad6 100644 --- a/image-resize/index.js +++ b/image-resize/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/image-watermark/index.js b/image-watermark/index.js index d709e87..80dfad6 100644 --- a/image-watermark/index.js +++ b/image-watermark/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/isomorphic/index.js b/isomorphic/index.js index 3c05431..80dfad6 100644 --- a/isomorphic/index.js +++ b/isomorphic/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/knockoutjs-todo/index.js b/knockoutjs-todo/index.js index d709e87..80dfad6 100644 --- a/knockoutjs-todo/index.js +++ b/knockoutjs-todo/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/localization-resources/index.js b/localization-resources/index.js index d709e87..80dfad6 100644 --- a/localization-resources/index.js +++ b/localization-resources/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/logs/index.js b/logs/index.js index d709e87..80dfad6 100644 --- a/logs/index.js +++ b/logs/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/middleware/index.js b/middleware/index.js index d709e87..80dfad6 100644 --- a/middleware/index.js +++ b/middleware/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/mixedreplace-both/index.js b/mixedreplace-both/index.js index d709e87..80dfad6 100755 --- a/mixedreplace-both/index.js +++ b/mixedreplace-both/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/mixedreplace-download/index.js b/mixedreplace-download/index.js index d709e87..80dfad6 100755 --- a/mixedreplace-download/index.js +++ b/mixedreplace-download/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/mixedreplace-upload/index.js b/mixedreplace-upload/index.js index d709e87..80dfad6 100755 --- a/mixedreplace-upload/index.js +++ b/mixedreplace-upload/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/models-nosql/index.js b/models-nosql/index.js index d709e87..80dfad6 100644 --- a/models-nosql/index.js +++ b/models-nosql/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/models/index.js b/models/index.js index d709e87..80dfad6 100644 --- a/models/index.js +++ b/models/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/mongodb/index.js b/mongodb/index.js index d709e87..80dfad6 100644 --- a/mongodb/index.js +++ b/mongodb/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/mongoose/index.js b/mongoose/index.js index d709e87..80dfad6 100644 --- a/mongoose/index.js +++ b/mongoose/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/mysql/index.js b/mysql/index.js index 93f5525..da76fe7 100755 --- a/mysql/index.js +++ b/mysql/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/pagination/index.js b/pagination/index.js index d709e87..80dfad6 100644 --- a/pagination/index.js +++ b/pagination/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/passport.js-bearer-local/index.js b/passport.js-bearer-local/index.js index d709e87..80dfad6 100644 --- a/passport.js-bearer-local/index.js +++ b/passport.js-bearer-local/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/passport.js/index.js b/passport.js/index.js index d709e87..80dfad6 100644 --- a/passport.js/index.js +++ b/passport.js/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/paypal/index.js b/paypal/index.js index d709e87..80dfad6 100644 --- a/paypal/index.js +++ b/paypal/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/polymer/index.js b/polymer/index.js index 3c05431..80dfad6 100644 --- a/polymer/index.js +++ b/polymer/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/postgresql/index.js b/postgresql/index.js index d709e87..80dfad6 100755 --- a/postgresql/index.js +++ b/postgresql/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/problems/index.js b/problems/index.js index d709e87..80dfad6 100644 --- a/problems/index.js +++ b/problems/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/redirect-host/index.js b/redirect-host/index.js index d709e87..80dfad6 100644 --- a/redirect-host/index.js +++ b/redirect-host/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/request-to-response/index.js b/request-to-response/index.js index d709e87..80dfad6 100644 --- a/request-to-response/index.js +++ b/request-to-response/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing-flags-roles/index.js b/routing-flags-roles/index.js index d709e87..80dfad6 100644 --- a/routing-flags-roles/index.js +++ b/routing-flags-roles/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing-flags/index.js b/routing-flags/index.js index d709e87..80dfad6 100644 --- a/routing-flags/index.js +++ b/routing-flags/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing-generators/index.js b/routing-generators/index.js index 3c05431..80dfad6 100644 --- a/routing-generators/index.js +++ b/routing-generators/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing-resize/index.js b/routing-resize/index.js index d709e87..80dfad6 100644 --- a/routing-resize/index.js +++ b/routing-resize/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing-subdomain/index.js b/routing-subdomain/index.js index d709e87..80dfad6 100644 --- a/routing-subdomain/index.js +++ b/routing-subdomain/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing-timeout/index.js b/routing-timeout/index.js index d709e87..80dfad6 100644 --- a/routing-timeout/index.js +++ b/routing-timeout/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/routing/index.js b/routing/index.js index d709e87..80dfad6 100644 --- a/routing/index.js +++ b/routing/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/scheduler/index.js b/scheduler/index.js index d709e87..80dfad6 100644 --- a/scheduler/index.js +++ b/scheduler/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/server-sent-events/index.js b/server-sent-events/index.js index d709e87..80dfad6 100644 --- a/server-sent-events/index.js +++ b/server-sent-events/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/session-cluster-redis/controllers/default.js b/session-cluster-redis/controllers/default.js deleted file mode 100644 index f1a7a8d..0000000 --- a/session-cluster-redis/controllers/default.js +++ /dev/null @@ -1,15 +0,0 @@ -exports.install = function() { - F.route('/', view_homepage, ['#session']); -}; - -function view_homepage() { - var self = this; - - if (self.session.counter === undefined) - self.session.counter = 0; - else - self.session.counter++; - - process.send('Response framework ID: ' + framework.id + ' (' + self.session.counter + ')'); - self.view('homepage'); -} \ No newline at end of file diff --git a/session-cluster-redis/definitions/session.js b/session-cluster-redis/definitions/session.js deleted file mode 100644 index ff6ef67..0000000 --- a/session-cluster-redis/definitions/session.js +++ /dev/null @@ -1,30 +0,0 @@ -var redis = require('redis'); - -// Install session module -INSTALL('module', 'https://modules.totaljs.com/session/v1.01/session.js'); - -// Configure session module with REDIS -F.on('install', function(type, name) { - - if (type !== 'module') - return; - - if (name !== 'session') - return; - - var session = MODULE('session').instance; - - session.onRead = function(id, callback) { - var client = redis.createClient(); - client.get('session_' + id, function(err, reply) { - client.quit(); - callback(err ? {} : reply === null ? {} : JSON.parse(reply.toString())); - }); - }; - - session.onWrite = function(id, value) { - var client = redis.createClient(); - client.set('session_' + id, JSON.stringify(value)); - client.quit(); - }; -}); \ No newline at end of file diff --git a/session-cluster-redis/index.js b/session-cluster-redis/index.js deleted file mode 100644 index 40d8153..0000000 --- a/session-cluster-redis/index.js +++ /dev/null @@ -1,43 +0,0 @@ -var http = require('http'); -var cluster = require('cluster'); -var os = require('os'); - -var debug = true; - -if (!cluster.isMaster) { - - // This code will be executed according the number of CPU - // This code will be using: single process RAM * numCPUs - require('total.js'); - - // Set framework ID - F.on('message', function(message) { - if (message.type === 'id') - F.id = message.id; - }); - - F.http('debug'); - return; -}else{ - //Varun Batra Removed bug for cluster.fork is not a function since cluster isn't a master once forked. - var numCPUs = os.cpus().length; - - for (var i = 0; i < numCPUs; i++) { - - // Run framework - var fork = cluster.fork(); - - fork.on('message', onMessage); - - // Send ID - fork.send({ type: 'id', id: i }); - } -} -console.log('The cluster is running.'); - -function onMessage(message) { - console.log('Message ->', message); -} - -// Use a terminal for testing: -// $ siege -b -r 10 http://127.0.0.1:8000/ diff --git a/session-cluster-redis/readme.md b/session-cluster-redis/readme.md deleted file mode 100644 index 2c3b7ff..0000000 --- a/session-cluster-redis/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -``` -$ npm install redis -``` \ No newline at end of file diff --git a/session-cluster-redis/views/homepage.html b/session-cluster-redis/views/homepage.html deleted file mode 100644 index dff8bbd..0000000 --- a/session-cluster-redis/views/homepage.html +++ /dev/null @@ -1,16 +0,0 @@ -@{layout('')} - - - - - node session + redis + cluster - - - - - - - - Counter: @{session.counter} - - \ No newline at end of file diff --git a/sitemap/index.js b/sitemap/index.js index 3c05431..80dfad6 100644 --- a/sitemap/index.js +++ b/sitemap/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/static-crossdomain/index.js b/static-crossdomain/index.js index d709e87..80dfad6 100644 --- a/static-crossdomain/index.js +++ b/static-crossdomain/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/static-file-handling/index.js b/static-file-handling/index.js index d709e87..80dfad6 100644 --- a/static-file-handling/index.js +++ b/static-file-handling/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/static-file-merge/index.js b/static-file-merge/index.js index d709e87..80dfad6 100644 --- a/static-file-merge/index.js +++ b/static-file-merge/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/static-version/index.js b/static-version/index.js index d709e87..80dfad6 100644 --- a/static-version/index.js +++ b/static-version/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/themes/index.js b/themes/index.js index 3c05431..80dfad6 100644 --- a/themes/index.js +++ b/themes/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/upload-multipart/index.js b/upload-multipart/index.js index d709e87..80dfad6 100644 --- a/upload-multipart/index.js +++ b/upload-multipart/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/validation/index.js b/validation/index.js index d709e87..80dfad6 100644 --- a/validation/index.js +++ b/validation/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/video-streaming/index.js b/video-streaming/index.js index d709e87..80dfad6 100644 --- a/video-streaming/index.js +++ b/video-streaming/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-custom-helper/index.js b/views-custom-helper/index.js index d709e87..80dfad6 100644 --- a/views-custom-helper/index.js +++ b/views-custom-helper/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-head/index.js b/views-head/index.js index d709e87..80dfad6 100644 --- a/views-head/index.js +++ b/views-head/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-javascript-compress/index.js b/views-javascript-compress/index.js index d709e87..80dfad6 100644 --- a/views-javascript-compress/index.js +++ b/views-javascript-compress/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-meta/index.js b/views-meta/index.js index d709e87..80dfad6 100644 --- a/views-meta/index.js +++ b/views-meta/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-place-sections/index.js b/views-place-sections/index.js index d709e87..80dfad6 100644 --- a/views-place-sections/index.js +++ b/views-place-sections/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-websocket/index.js b/views-websocket/index.js index d709e87..80dfad6 100644 --- a/views-websocket/index.js +++ b/views-websocket/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views-xhr/index.js b/views-xhr/index.js index d709e87..80dfad6 100644 --- a/views-xhr/index.js +++ b/views-xhr/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/views/index.js b/views/index.js index d709e87..80dfad6 100644 --- a/views/index.js +++ b/views/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/vue/index.js b/vue/index.js index 3c05431..80dfad6 100644 --- a/vue/index.js +++ b/vue/index.js @@ -1 +1,16 @@ -require('total.js').http('debug'); \ No newline at end of file +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/webrtc/index.js b/webrtc/index.js index d709e87..80dfad6 100644 --- a/webrtc/index.js +++ b/webrtc/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/websocket/index.js b/websocket/index.js index d709e87..80dfad6 100644 --- a/websocket/index.js +++ b/websocket/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/workers/index.js b/workers/index.js index d709e87..80dfad6 100644 --- a/workers/index.js +++ b/workers/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/xml-sitemap-workers/index.js b/xml-sitemap-workers/index.js index d709e87..80dfad6 100644 --- a/xml-sitemap-workers/index.js +++ b/xml-sitemap-workers/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/xml-sitemap/index.js b/xml-sitemap/index.js index d709e87..80dfad6 100644 --- a/xml-sitemap/index.js +++ b/xml-sitemap/index.js @@ -1,7 +1,16 @@ // =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com // =================================================== -require('total.js').http('debug'); \ No newline at end of file +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file From 9dce0cda74de8423fe55bf9bdecac0a1ff3c7204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Fri, 9 Jun 2017 09:50:20 +0200 Subject: [PATCH 031/157] Improve example. --- email-send/index.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/email-send/index.js b/email-send/index.js index cd9c4fa..a43fbc4 100644 --- a/email-send/index.js +++ b/email-send/index.js @@ -1,7 +1,6 @@ -var framework = require('total.js'); -var mail = require('total.js/mail'); +require('total.js'); -var message = new mail.Message('Subject', 'Body'); +var message = new Mail.Message('Subject', 'Body'); message.to('petersirka@gmail.com'); @@ -12,7 +11,7 @@ message.to('petersirka@gmail.com'); message.from('jankohrasko@gmail.com', 'Janko Hrasko'); -mail.on('error', function (err) { +Mail.on('error', function (err) { console.log(err); }); @@ -24,4 +23,4 @@ mail.on('error', function (err) { // message.send('smtp.yourdomain.com', { user: 'ENTER_YOUR_EMAIL', password: 'ENTER_YOUR_PASSWORD' }); // SEND via SMTP -// message.send('smtp.yourdomain.com'); \ No newline at end of file +message.send('smtp.yourdomain.com'); \ No newline at end of file From 8217c7f61021b0e3274cc3a513db3c4530c3ebd0 Mon Sep 17 00:00:00 2001 From: Carlis Liu Date: Fri, 16 Jun 2017 14:41:48 +0800 Subject: [PATCH 032/157] check error first --- workers/workers/xml.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workers/workers/xml.js b/workers/workers/xml.js index 57613a4..049cfc8 100644 --- a/workers/workers/xml.js +++ b/workers/workers/xml.js @@ -5,6 +5,11 @@ F.load('debug', ['config'], '../'); U.download(CONFIG('url'), ['get'], function(err, response) { + if (err) { + console.error(err); + return process.exit(); + } + var data = []; response.on('data', U.streamer('', '', function(item) { From 332131e2475564aa94431f6d7dd40d93e4609681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C5=A0irka?= Date: Thu, 22 Jun 2017 20:04:46 +0200 Subject: [PATCH 033/157] Add package.json. --- external-compile-sass/package.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 external-compile-sass/package.json diff --git a/external-compile-sass/package.json b/external-compile-sass/package.json new file mode 100644 index 0000000..e0c332b --- /dev/null +++ b/external-compile-sass/package.json @@ -0,0 +1,14 @@ +{ + "name": "Example", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "node-sass": "latest", + "total.js": "latest" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Peter Širka", + "license": "MIT" +} From e150c4fc1ab97e232e1a53a81cd9222a8a9b3655 Mon Sep 17 00:00:00 2001 From: ckpiggy Date: Sun, 25 Jun 2017 13:33:57 +0800 Subject: [PATCH 034/157] initialize project and add dependencies --- nuxt-middleware/package.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 nuxt-middleware/package.json diff --git a/nuxt-middleware/package.json b/nuxt-middleware/package.json new file mode 100644 index 0000000..bc30a03 --- /dev/null +++ b/nuxt-middleware/package.json @@ -0,0 +1,20 @@ +{ + "name": "nuxt-middleware", + "version": "1.0.0", + "description": "integrating total.js and nuxt.js", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "total.js", + "nuxt.js", + "vue.js" + ], + "author": "ckpiggy", + "license": "MIT", + "dependencies": { + "nuxt": "^1.0.0-alpha.4", + "total.js": "^2.6.3-3" + } +} From 4940d16a9821d27e252f24704856c7691bbf70e2 Mon Sep 17 00:00:00 2001 From: ckpiggy Date: Sun, 25 Jun 2017 13:50:44 +0800 Subject: [PATCH 035/157] nuxt hello page --- nuxt-middleware/controllers/default.js | 13 +++++++++++++ nuxt-middleware/definitions/nuxt-middleware.js | 7 +++++++ nuxt-middleware/index.js | 2 ++ nuxt-middleware/nuxt.config.js | 3 +++ nuxt-middleware/nuxt/pages/index.vue | 11 +++++++++++ 5 files changed, 36 insertions(+) create mode 100644 nuxt-middleware/controllers/default.js create mode 100644 nuxt-middleware/definitions/nuxt-middleware.js create mode 100644 nuxt-middleware/index.js create mode 100644 nuxt-middleware/nuxt.config.js create mode 100644 nuxt-middleware/nuxt/pages/index.vue diff --git a/nuxt-middleware/controllers/default.js b/nuxt-middleware/controllers/default.js new file mode 100644 index 0000000..16a0390 --- /dev/null +++ b/nuxt-middleware/controllers/default.js @@ -0,0 +1,13 @@ +exports.install = function () { + const reg = /^(?!\/api)[/A-Za-z0-9_.]*$/ + /* + * Test url, if not start with '/api' then use nuxt middleware to handle the request + * */ + F.route((url)=>{ return reg.test(url)}, nuxt, ['#nuxt']) + F.file((url)=>{return reg.test(url.uri.path)}, nuxt, ['#nuxt']) +} + +function nuxt () { + //this should not be execute + throw new Error('nuxt middle ware not working') +} \ No newline at end of file diff --git a/nuxt-middleware/definitions/nuxt-middleware.js b/nuxt-middleware/definitions/nuxt-middleware.js new file mode 100644 index 0000000..19394ec --- /dev/null +++ b/nuxt-middleware/definitions/nuxt-middleware.js @@ -0,0 +1,7 @@ +const Nuxt = require('nuxt') +const options = require('../nuxt.config') +const nuxt = new Nuxt(options) + +nuxt.build().then(function () { + F.middleware('nuxt', nuxt.render) +}) \ No newline at end of file diff --git a/nuxt-middleware/index.js b/nuxt-middleware/index.js new file mode 100644 index 0000000..7d03f03 --- /dev/null +++ b/nuxt-middleware/index.js @@ -0,0 +1,2 @@ +const options = {port: 8000, ip:'127.0.0.1'} +require('total.js').http('debug',options) \ No newline at end of file diff --git a/nuxt-middleware/nuxt.config.js b/nuxt-middleware/nuxt.config.js new file mode 100644 index 0000000..9889627 --- /dev/null +++ b/nuxt-middleware/nuxt.config.js @@ -0,0 +1,3 @@ +module.exports = { + srcDir: 'nuxt/' +} \ No newline at end of file diff --git a/nuxt-middleware/nuxt/pages/index.vue b/nuxt-middleware/nuxt/pages/index.vue new file mode 100644 index 0000000..7cb1268 --- /dev/null +++ b/nuxt-middleware/nuxt/pages/index.vue @@ -0,0 +1,11 @@ + + + \ No newline at end of file From 85a5b32d587c32093232a5790fadb9a01c9e6492 Mon Sep 17 00:00:00 2001 From: ckpiggy Date: Sun, 25 Jun 2017 14:12:02 +0800 Subject: [PATCH 036/157] add vuex to enable react values --- nuxt-middleware/nuxt/pages/index.vue | 28 ++++++++++++++++++++++++++-- nuxt-middleware/nuxt/store/index.js | 23 +++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 nuxt-middleware/nuxt/store/index.js diff --git a/nuxt-middleware/nuxt/pages/index.vue b/nuxt-middleware/nuxt/pages/index.vue index 7cb1268..cb10440 100644 --- a/nuxt-middleware/nuxt/pages/index.vue +++ b/nuxt-middleware/nuxt/pages/index.vue @@ -1,11 +1,35 @@ \ No newline at end of file diff --git a/nuxt-middleware/nuxt/store/index.js b/nuxt-middleware/nuxt/store/index.js new file mode 100644 index 0000000..26a9c93 --- /dev/null +++ b/nuxt-middleware/nuxt/store/index.js @@ -0,0 +1,23 @@ +import Vuex from 'vuex' + +const store = function () { + return new Vuex.Store({ + state: { + msg: '', + counter: 0 + }, + mutations: { + setMsg: function (state, msg){ + state.msg = msg + }, + increase: function (state) { + state.counter += 1 + }, + decrease: function (state) { + state.counter -= 1 + } + } + }) +} + +export default store \ No newline at end of file From 6cb30bdb2dffcacd19892cf60d2d2200a9e0cc2a Mon Sep 17 00:00:00 2001 From: ckpiggy Date: Sun, 25 Jun 2017 14:55:07 +0800 Subject: [PATCH 037/157] fetch server side msg --- nuxt-middleware/controllers/api/default.js | 7 +++++++ nuxt-middleware/nuxt.config.js | 3 +++ nuxt-middleware/nuxt/pages/index.vue | 18 +++++++++++++++--- nuxt-middleware/nuxt/store/index.js | 6 +++++- nuxt-middleware/package.json | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 nuxt-middleware/controllers/api/default.js diff --git a/nuxt-middleware/controllers/api/default.js b/nuxt-middleware/controllers/api/default.js new file mode 100644 index 0000000..7509d68 --- /dev/null +++ b/nuxt-middleware/controllers/api/default.js @@ -0,0 +1,7 @@ +exports.install = function () { + F.route('/api/hello_msg', hello_json) +} + +function hello_json () { + this.json({msg: 'Hello from API'}) +} \ No newline at end of file diff --git a/nuxt-middleware/nuxt.config.js b/nuxt-middleware/nuxt.config.js index 9889627..eeceb37 100644 --- a/nuxt-middleware/nuxt.config.js +++ b/nuxt-middleware/nuxt.config.js @@ -1,3 +1,6 @@ module.exports = { + build:{ + vendor: ['axios'] + }, srcDir: 'nuxt/' } \ No newline at end of file diff --git a/nuxt-middleware/nuxt/pages/index.vue b/nuxt-middleware/nuxt/pages/index.vue index cb10440..68f56c0 100644 --- a/nuxt-middleware/nuxt/pages/index.vue +++ b/nuxt-middleware/nuxt/pages/index.vue @@ -1,7 +1,11 @@ \ No newline at end of file diff --git a/nuxt-generate/nuxt/store/index.js b/nuxt-generate/nuxt/store/index.js new file mode 100644 index 0000000..6b79798 --- /dev/null +++ b/nuxt-generate/nuxt/store/index.js @@ -0,0 +1,27 @@ +import Vuex from 'vuex' + +const store = function () { + return new Vuex.Store({ + state: { + msg: '', + counter: 0, + serverMsg: '' + }, + mutations: { + setMsg: function (state, msg){ + state.msg = msg + }, + increase: function (state) { + state.counter += 1 + }, + decrease: function (state) { + state.counter -= 1 + }, + setServerMsg: function (state, msg) { + state.serverMsg = msg + } + } + }) +} + +export default store \ No newline at end of file diff --git a/nuxt-generate/package.json b/nuxt-generate/package.json new file mode 100644 index 0000000..07ceab2 --- /dev/null +++ b/nuxt-generate/package.json @@ -0,0 +1,22 @@ +{ + "name": "nuxt-generate", + "version": "1.0.0", + "description": "integrating total.js and nuxt.js", + "main": "index.js", + "scripts": { + "generate": "node_modules/.bin/nuxt generate", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "total.js", + "nuxt.js", + "vue.js" + ], + "author": "ckpiggy", + "license": "MIT", + "dependencies": { + "axios": "0.16.2", + "nuxt": "next", + "total.js": "^2.6.3-3" + } +} \ No newline at end of file From 2f6911e497f970d441b7b56c519f07baf2892715 Mon Sep 17 00:00:00 2001 From: Martin Smola Date: Wed, 4 Oct 2017 15:31:54 +0200 Subject: [PATCH 049/157] Added GraphQL example --- graphql/controllers/default.js | 13 +++++++++++++ graphql/index.js | 16 ++++++++++++++++ graphql/models/hello.js | 25 +++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 graphql/controllers/default.js create mode 100644 graphql/index.js create mode 100644 graphql/models/hello.js diff --git a/graphql/controllers/default.js b/graphql/controllers/default.js new file mode 100644 index 0000000..2621525 --- /dev/null +++ b/graphql/controllers/default.js @@ -0,0 +1,13 @@ +exports.install = function() { + + F.route('/api/hello', post_hello, ['post', 'raw']); + +}; + +function post_hello() { + var self = this; + + MODEL('hello').query(self.body).then((response) => { + self.json(response); + }); +}; \ No newline at end of file diff --git a/graphql/index.js b/graphql/index.js new file mode 100644 index 0000000..80dfad6 --- /dev/null +++ b/graphql/index.js @@ -0,0 +1,16 @@ +// =================================================== +// FOR DEVELOPMENT +// Total.js - framework for Node.js platform +// https://www.totaljs.com +// =================================================== + +const options = {}; + +// options.ip = '127.0.0.1'; +// options.port = parseInt(process.argv[2]); +// options.config = { name: 'Total.js' }; +// options.sleep = 3000; +// options.inspector = 9229; +// options.debugger = 40894; + +require('total.js/debug')(options); \ No newline at end of file diff --git a/graphql/models/hello.js b/graphql/models/hello.js new file mode 100644 index 0000000..6a92120 --- /dev/null +++ b/graphql/models/hello.js @@ -0,0 +1,25 @@ +var { graphql, GraphQLSchema, GraphQLObjectType, GraphQLString } = require('graphql'); + +exports.id = 'hello'; + +exports.schema = new GraphQLSchema({ + query: new GraphQLObjectType({ + name: 'RootQueryType', + fields: { + hello: { + type: GraphQLString, + resolve() { + return 'world'; + } + } + } + }) +}); + +exports.root = { hello: () => 'Hello world!' }; + +exports.query = function query(q){ + + return graphql(exports.schema, q, exports.root); + +}; \ No newline at end of file From 963d0bbb0981a6fb63a7215759e31ae942277dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Thu, 7 Dec 2017 22:09:50 +0100 Subject: [PATCH 050/157] Fix loading connection. --- mongodb/definitions/database.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mongodb/definitions/database.js b/mongodb/definitions/database.js index ad34e10..3d9e1a0 100644 --- a/mongodb/definitions/database.js +++ b/mongodb/definitions/database.js @@ -1,10 +1,13 @@ var MC = require('mongodb').MongoClient; var DB = null; +F.wait('database'); + MC.connect(CONFIG('database'), function(err, db) { if (err) throw err; DB = db; + F.wait('database'); }); F.database = function(collection) { From 015e976e2f2ff4b507d3ab003ee8c517ca75f4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Fri, 8 Dec 2017 07:50:29 +0100 Subject: [PATCH 051/157] Fix fucking mongo driver. --- mongodb/definitions/database.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mongodb/definitions/database.js b/mongodb/definitions/database.js index 3d9e1a0..62b47ee 100644 --- a/mongodb/definitions/database.js +++ b/mongodb/definitions/database.js @@ -6,7 +6,8 @@ F.wait('database'); MC.connect(CONFIG('database'), function(err, db) { if (err) throw err; - DB = db; + + DB = db.db('totaldemo'); F.wait('database'); }); From 50199316ff4ac07f1e42904841c11030af0eff73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Tue, 19 Dec 2017 17:14:32 +0100 Subject: [PATCH 052/157] Fix test. --- config-debug-release-test/tests/config.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/config-debug-release-test/tests/config.js b/config-debug-release-test/tests/config.js index bb856aa..9baf895 100644 --- a/config-debug-release-test/tests/config.js +++ b/config-debug-release-test/tests/config.js @@ -1,11 +1,13 @@ -exports.run = function() { - var builder = []; +TEST('config', function() { + var builder = []; - Object.keys(F.config).forEach(function(o) { - var value = F.config[o]; - builder.push('{0} : {1}'.format(o.padRight(30, ' '), value instanceof Array ? value.join(', ') : value)); - }); + Object.keys(F.config).forEach(function(o) { + var value = F.config[o]; + builder.push('{0} : {1}'.format(o.padRight(30, ' '), value instanceof Array ? value.join(', ') : value)); + }); - console.log(builder.join('\n')); - console.log(''); -}; \ No newline at end of file + console.log(builder.join('\n')); + console.log(''); + + OK(true); +}); \ No newline at end of file From 5bdccde3b5d12a203d5251d368bc07e0164f3446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Wed, 17 Jan 2018 18:02:35 +0100 Subject: [PATCH 053/157] Fix old info. --- controller-mail/readme.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/controller-mail/readme.md b/controller-mail/readme.md index 258da01..9ee18d4 100644 --- a/controller-mail/readme.md +++ b/controller-mail/readme.md @@ -2,9 +2,6 @@ This example shows how to create a URL that generates an email and then redirect to another page to display a confirmation message. -> **Note** -> This example is based on the 1.9.x versions of total.js - there are some changes to the mail system in v2.0 and above. - Features covered by this example: * [Controllers](http://docs.totaljs.com/latest/en.html#pages~Controllers) - route URL requests to code @@ -71,11 +68,11 @@ The mail server used by `.mail()` is defined by `key : vlaue` pairs in the `/con ``` // Mail settings -mail.smtp : smtp.gmail.com -mail.smtp.options : {"secure":true,"port":465,"user":"YOUR-GMAIL-EMAIL","password":"YOUR-GMAIL-PASSWORD","timeout":10000} -mail.address.from : petersirka@gmail.com -mail.address.reply : petersirka@gmail.com -mail.address.bcc : +mail-smtp : smtp.gmail.com +mail-smtp-options : {"secure":true,"port":465,"user":"YOUR-GMAIL-EMAIL","password":"YOUR-GMAIL-PASSWORD","timeout":10000} +mail-address-from : petersirka@gmail.com +mail-address-reply : petersirka@gmail.com +mail-address-bcc : ``` ### Templates (Views) From de3cc65a7c75425c36d873f6b263fb886add4dcb Mon Sep 17 00:00:00 2001 From: Pedro Maia Costa Date: Wed, 18 Jul 2018 14:40:38 +0100 Subject: [PATCH 054/157] updated documentation --- authorization/definitions/authorization.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/authorization/definitions/authorization.js b/authorization/definitions/authorization.js index b0fee65..e1a551f 100644 --- a/authorization/definitions/authorization.js +++ b/authorization/definitions/authorization.js @@ -1,5 +1,7 @@ // ================================================ // AUTHORIZATION +// Please note that this method is called for all routes, regardless of flags set. +// For example, if the route is flagged with 'authorize', and the callback return value is false, the response status will be 401. // ================================================ F.onAuthorize = function(req, res, flags, callback) { @@ -34,4 +36,4 @@ F.onAuthorize = function(req, res, flags, callback) { callback(true, response); }); }); -}; \ No newline at end of file +}; From 0ed3631cf42bb169f0d25b1e65ce15b2782f8fc6 Mon Sep 17 00:00:00 2001 From: Pedro Maia Costa Date: Sat, 22 Sep 2018 11:11:42 +0100 Subject: [PATCH 055/157] clarification on unauthorize flag use --- authorization/definitions/authorization.js | 1 + 1 file changed, 1 insertion(+) diff --git a/authorization/definitions/authorization.js b/authorization/definitions/authorization.js index e1a551f..2b52786 100644 --- a/authorization/definitions/authorization.js +++ b/authorization/definitions/authorization.js @@ -2,6 +2,7 @@ // AUTHORIZATION // Please note that this method is called for all routes, regardless of flags set. // For example, if the route is flagged with 'authorize', and the callback return value is false, the response status will be 401. +// Alternatively, beware that if the route is flagged with unauthorize, and the callback return value is false, the response status will be 200 OK. // ================================================ F.onAuthorize = function(req, res, flags, callback) { From f93a57f96a191cd74e56780e9d20ec64b1e6caa3 Mon Sep 17 00:00:00 2001 From: Pedro Maia Costa Date: Sat, 22 Sep 2018 11:12:00 +0100 Subject: [PATCH 056/157] Update authorization.js --- authorization/definitions/authorization.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/authorization/definitions/authorization.js b/authorization/definitions/authorization.js index 2b52786..81bfe60 100644 --- a/authorization/definitions/authorization.js +++ b/authorization/definitions/authorization.js @@ -2,7 +2,7 @@ // AUTHORIZATION // Please note that this method is called for all routes, regardless of flags set. // For example, if the route is flagged with 'authorize', and the callback return value is false, the response status will be 401. -// Alternatively, beware that if the route is flagged with unauthorize, and the callback return value is false, the response status will be 200 OK. +// Alternatively, beware that if the route is flagged with 'unauthorize', and the callback return value is false, the response status will be 200 OK. // ================================================ F.onAuthorize = function(req, res, flags, callback) { From 04f71d0ce3ee69c429a60e84d8c268cb2d32a5a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 3 Nov 2018 10:38:33 +0100 Subject: [PATCH 057/157] Fixed `sass.js`. --- external-compile-sass/definitions/sass.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/external-compile-sass/definitions/sass.js b/external-compile-sass/definitions/sass.js index 6ea2b27..7ac9826 100644 --- a/external-compile-sass/definitions/sass.js +++ b/external-compile-sass/definitions/sass.js @@ -21,13 +21,12 @@ F.file(function(req, res, is) { } var content = F.onCompileStyle(filename, data.toString('utf8')); - if (!F.isDebug) - Fs.writeFile(tmp, content); - F.responseContent(req, res, 200, content, 'text/css', true); + RELEASE && Fs.writeFile(tmp, content); + res.content(200, content, 'text/css', true); }); }); }); F.onCompileStyle = function (filename, content) { - return sass.renderSync({ file: filename, data: content, outputStyle: 'compressed' }).css.toString('utf8'); + return sass.renderSync({ file: filename, data: content, outputStyle: 'compressed' }).css.toString('utf8'); }; \ No newline at end of file From a71c354d9ab8a786941bb6dd0ab38ee0001cba26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 3 Nov 2018 10:39:19 +0100 Subject: [PATCH 058/157] Improved code. --- external-compile-sass/definitions/sass.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/external-compile-sass/definitions/sass.js b/external-compile-sass/definitions/sass.js index 7ac9826..670b502 100644 --- a/external-compile-sass/definitions/sass.js +++ b/external-compile-sass/definitions/sass.js @@ -7,22 +7,20 @@ F.helpers.scss = function(name) { return ''; }; -F.file(function(req, res, is) { +FILE(function(req, res, is) { if (is) return req.extension === 'scss'; F.exists(req, res, 20, function(next, tmp) { var filename = F.path.public(req.url); Fs.readFile(filename, function(err, data) { - if (err) { next(); res.throw404(); - return; + } else { + var content = F.onCompileStyle(filename, data.toString('utf8')); + RELEASE && Fs.writeFile(tmp, content); + res.content(200, content, 'text/css', true); } - - var content = F.onCompileStyle(filename, data.toString('utf8')); - RELEASE && Fs.writeFile(tmp, content); - res.content(200, content, 'text/css', true); }); }); }); From a1c26dfe49003f625b3a00ab10e29c919c82edc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Mon, 10 Dec 2018 08:02:46 +0100 Subject: [PATCH 059/157] Fixed cache. --- external-compile-sass/definitions/sass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external-compile-sass/definitions/sass.js b/external-compile-sass/definitions/sass.js index 670b502..539d3e5 100644 --- a/external-compile-sass/definitions/sass.js +++ b/external-compile-sass/definitions/sass.js @@ -18,7 +18,7 @@ FILE(function(req, res, is) { res.throw404(); } else { var content = F.onCompileStyle(filename, data.toString('utf8')); - RELEASE && Fs.writeFile(tmp, content); + Fs.writeFileSync(tmp, content); res.content(200, content, 'text/css', true); } }); From 3a5c0c69e9adca72760884de43256ad9826d2d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 09:19:49 +0200 Subject: [PATCH 060/157] Removed old examples. --- angularjs-2/controllers/default.js | 3 - angularjs-2/index.js | 16 - angularjs-2/views/index.html | 60 --- angularjs-bootstrap/app/app.js | 1 - angularjs-bootstrap/app/common/empty | 0 angularjs-bootstrap/app/controllers/home.js | 4 - angularjs-bootstrap/app/controllers/user.js | 3 - angularjs-bootstrap/app/css/app.css | 3 - angularjs-bootstrap/app/directives/empty | 0 angularjs-bootstrap/app/filters/empty | 0 angularjs-bootstrap/app/resources/empty | 0 angularjs-bootstrap/app/robots.txt | 2 - angularjs-bootstrap/app/services/empty | 0 angularjs-bootstrap/app/templates/empty | 0 angularjs-bootstrap/app/views/empty | 0 angularjs-bootstrap/controllers/default.js | 8 - angularjs-bootstrap/index.js | 16 - angularjs-bootstrap/modules/angular.js | 428 ------------------ angularjs-bootstrap/readme.md | 15 - angularjs-bootstrap/views/app.html | 20 - angularjs-bootstrap/views/layout.html | 25 - angularjs-common/app/app.js | 1 - .../app/common/angular-route.min.js | 14 - .../app/common/angular-route.min.js.map | 8 - angularjs-common/app/common/angular.min.js | 202 --------- .../app/common/angular.min.js.map | 8 - angularjs-common/app/controllers/home.js | 4 - angularjs-common/app/controllers/user.js | 3 - angularjs-common/app/css/app.css | 3 - angularjs-common/app/directives/empty | 0 angularjs-common/app/filters/empty | 0 .../app/i18n/angular-locale_en-us.min.js | 1 - angularjs-common/app/resources/empty | 0 angularjs-common/app/robots.txt | 2 - angularjs-common/app/services/empty | 0 angularjs-common/app/templates/list.html | 3 - angularjs-common/app/views/empty | 0 angularjs-common/controllers/default.js | 8 - angularjs-common/definitions/angular.js | 7 - angularjs-common/index.js | 16 - angularjs-common/modules/angular.js | 428 ------------------ angularjs-common/readme.md | 15 - angularjs-common/views/app.html | 18 - angularjs-common/views/layout.html | 21 - angularjs-nedb-rest-resources/app/app.js | 1 - .../app/controllers/user.js | 33 -- angularjs-nedb-rest-resources/app/css/app.css | 5 - .../app/resources/user.js | 3 - angularjs-nedb-rest-resources/app/robots.txt | 2 - .../app/templates/form.html | 12 - .../controllers/default.js | 8 - .../controllers/user.js | 60 --- .../databases/users.db | 12 - .../definitions/nedb.js | 47 -- angularjs-nedb-rest-resources/index.js | 16 - .../modules/angular.js | 428 ------------------ angularjs-nedb-rest-resources/readme.md | 19 - angularjs-nedb-rest-resources/views/app.html | 23 - .../views/layout.html | 20 - angularjs-routing/app/app.js | 18 - angularjs-routing/app/controllers/home.js | 3 - angularjs-routing/app/controllers/products.js | 3 - angularjs-routing/app/controllers/users.js | 3 - angularjs-routing/app/css/app.css | 3 - angularjs-routing/app/robots.txt | 2 - angularjs-routing/app/views/home.html | 3 - angularjs-routing/app/views/products.html | 3 - angularjs-routing/app/views/users.html | 3 - angularjs-routing/controllers/default.js | 8 - angularjs-routing/index.js | 16 - angularjs-routing/modules/angular.js | 428 ------------------ angularjs-routing/readme.md | 15 - angularjs-routing/views/app.html | 19 - angularjs-routing/views/layout.html | 22 - angularjs-websocket/app/app.js | 1 - angularjs-websocket/app/common/empty | 0 angularjs-websocket/app/controllers/home.js | 33 -- angularjs-websocket/app/css/app.css | 25 - angularjs-websocket/app/robots.txt | 2 - .../app/services/websocketService.js | 50 -- angularjs-websocket/config-debug | 2 - angularjs-websocket/controllers/default.js | 35 -- angularjs-websocket/index.js | 16 - angularjs-websocket/modules/angular.js | 428 ------------------ angularjs-websocket/readme.md | 15 - angularjs-websocket/views/app.html | 53 --- angularjs-websocket/views/layout.html | 19 - angularjs/app/app.js | 1 - angularjs/app/common/empty | 0 angularjs/app/controllers/home.js | 4 - angularjs/app/controllers/user.js | 3 - angularjs/app/css/app.css | 3 - angularjs/app/directives/empty | 0 angularjs/app/filters/empty | 0 angularjs/app/resources/empty | 0 angularjs/app/robots.txt | 2 - angularjs/app/services/empty | 0 angularjs/app/templates/list.html | 3 - angularjs/app/views/empty | 0 angularjs/controllers/default.js | 8 - angularjs/index.js | 16 - angularjs/modules/angular.js | 428 ------------------ angularjs/readme.md | 15 - angularjs/views/app.html | 18 - angularjs/views/layout.html | 20 - 105 files changed, 3804 deletions(-) delete mode 100644 angularjs-2/controllers/default.js delete mode 100644 angularjs-2/index.js delete mode 100644 angularjs-2/views/index.html delete mode 100644 angularjs-bootstrap/app/app.js delete mode 100644 angularjs-bootstrap/app/common/empty delete mode 100644 angularjs-bootstrap/app/controllers/home.js delete mode 100644 angularjs-bootstrap/app/controllers/user.js delete mode 100644 angularjs-bootstrap/app/css/app.css delete mode 100644 angularjs-bootstrap/app/directives/empty delete mode 100644 angularjs-bootstrap/app/filters/empty delete mode 100644 angularjs-bootstrap/app/resources/empty delete mode 100644 angularjs-bootstrap/app/robots.txt delete mode 100644 angularjs-bootstrap/app/services/empty delete mode 100644 angularjs-bootstrap/app/templates/empty delete mode 100644 angularjs-bootstrap/app/views/empty delete mode 100644 angularjs-bootstrap/controllers/default.js delete mode 100644 angularjs-bootstrap/index.js delete mode 100644 angularjs-bootstrap/modules/angular.js delete mode 100644 angularjs-bootstrap/readme.md delete mode 100644 angularjs-bootstrap/views/app.html delete mode 100644 angularjs-bootstrap/views/layout.html delete mode 100644 angularjs-common/app/app.js delete mode 100644 angularjs-common/app/common/angular-route.min.js delete mode 100644 angularjs-common/app/common/angular-route.min.js.map delete mode 100644 angularjs-common/app/common/angular.min.js delete mode 100644 angularjs-common/app/common/angular.min.js.map delete mode 100644 angularjs-common/app/controllers/home.js delete mode 100644 angularjs-common/app/controllers/user.js delete mode 100644 angularjs-common/app/css/app.css delete mode 100644 angularjs-common/app/directives/empty delete mode 100644 angularjs-common/app/filters/empty delete mode 100644 angularjs-common/app/i18n/angular-locale_en-us.min.js delete mode 100644 angularjs-common/app/resources/empty delete mode 100644 angularjs-common/app/robots.txt delete mode 100644 angularjs-common/app/services/empty delete mode 100644 angularjs-common/app/templates/list.html delete mode 100644 angularjs-common/app/views/empty delete mode 100644 angularjs-common/controllers/default.js delete mode 100644 angularjs-common/definitions/angular.js delete mode 100644 angularjs-common/index.js delete mode 100644 angularjs-common/modules/angular.js delete mode 100644 angularjs-common/readme.md delete mode 100644 angularjs-common/views/app.html delete mode 100644 angularjs-common/views/layout.html delete mode 100644 angularjs-nedb-rest-resources/app/app.js delete mode 100644 angularjs-nedb-rest-resources/app/controllers/user.js delete mode 100644 angularjs-nedb-rest-resources/app/css/app.css delete mode 100644 angularjs-nedb-rest-resources/app/resources/user.js delete mode 100644 angularjs-nedb-rest-resources/app/robots.txt delete mode 100644 angularjs-nedb-rest-resources/app/templates/form.html delete mode 100644 angularjs-nedb-rest-resources/controllers/default.js delete mode 100644 angularjs-nedb-rest-resources/controllers/user.js delete mode 100644 angularjs-nedb-rest-resources/databases/users.db delete mode 100644 angularjs-nedb-rest-resources/definitions/nedb.js delete mode 100644 angularjs-nedb-rest-resources/index.js delete mode 100644 angularjs-nedb-rest-resources/modules/angular.js delete mode 100644 angularjs-nedb-rest-resources/readme.md delete mode 100644 angularjs-nedb-rest-resources/views/app.html delete mode 100644 angularjs-nedb-rest-resources/views/layout.html delete mode 100644 angularjs-routing/app/app.js delete mode 100644 angularjs-routing/app/controllers/home.js delete mode 100644 angularjs-routing/app/controllers/products.js delete mode 100644 angularjs-routing/app/controllers/users.js delete mode 100644 angularjs-routing/app/css/app.css delete mode 100644 angularjs-routing/app/robots.txt delete mode 100644 angularjs-routing/app/views/home.html delete mode 100644 angularjs-routing/app/views/products.html delete mode 100644 angularjs-routing/app/views/users.html delete mode 100644 angularjs-routing/controllers/default.js delete mode 100644 angularjs-routing/index.js delete mode 100644 angularjs-routing/modules/angular.js delete mode 100644 angularjs-routing/readme.md delete mode 100644 angularjs-routing/views/app.html delete mode 100644 angularjs-routing/views/layout.html delete mode 100644 angularjs-websocket/app/app.js delete mode 100644 angularjs-websocket/app/common/empty delete mode 100644 angularjs-websocket/app/controllers/home.js delete mode 100644 angularjs-websocket/app/css/app.css delete mode 100644 angularjs-websocket/app/robots.txt delete mode 100644 angularjs-websocket/app/services/websocketService.js delete mode 100644 angularjs-websocket/config-debug delete mode 100644 angularjs-websocket/controllers/default.js delete mode 100644 angularjs-websocket/index.js delete mode 100644 angularjs-websocket/modules/angular.js delete mode 100644 angularjs-websocket/readme.md delete mode 100644 angularjs-websocket/views/app.html delete mode 100644 angularjs-websocket/views/layout.html delete mode 100644 angularjs/app/app.js delete mode 100644 angularjs/app/common/empty delete mode 100644 angularjs/app/controllers/home.js delete mode 100644 angularjs/app/controllers/user.js delete mode 100644 angularjs/app/css/app.css delete mode 100644 angularjs/app/directives/empty delete mode 100644 angularjs/app/filters/empty delete mode 100644 angularjs/app/resources/empty delete mode 100644 angularjs/app/robots.txt delete mode 100644 angularjs/app/services/empty delete mode 100644 angularjs/app/templates/list.html delete mode 100644 angularjs/app/views/empty delete mode 100644 angularjs/controllers/default.js delete mode 100644 angularjs/index.js delete mode 100644 angularjs/modules/angular.js delete mode 100644 angularjs/readme.md delete mode 100644 angularjs/views/app.html delete mode 100644 angularjs/views/layout.html diff --git a/angularjs-2/controllers/default.js b/angularjs-2/controllers/default.js deleted file mode 100644 index 69ec1c8..0000000 --- a/angularjs-2/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/angularjs-2/index.js b/angularjs-2/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs-2/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-2/views/index.html b/angularjs-2/views/index.html deleted file mode 100644 index f55c488..0000000 --- a/angularjs-2/views/index.html +++ /dev/null @@ -1,60 +0,0 @@ -@{layout('')} - - - - - Angular.js 2.0 - - - - - - - - - - - - - - Loading ... - - - - - diff --git a/angularjs-bootstrap/app/app.js b/angularjs-bootstrap/app/app.js deleted file mode 100644 index 03c24e0..0000000 --- a/angularjs-bootstrap/app/app.js +++ /dev/null @@ -1 +0,0 @@ -var app = angular.module('app', []); diff --git a/angularjs-bootstrap/app/common/empty b/angularjs-bootstrap/app/common/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/app/controllers/home.js b/angularjs-bootstrap/app/controllers/home.js deleted file mode 100644 index ce70023..0000000 --- a/angularjs-bootstrap/app/controllers/home.js +++ /dev/null @@ -1,4 +0,0 @@ -app.controller('HomeCtrl', ['$scope', function($scope) { - $scope.name = 'total.js + angular.js = awesome'; - $scope.users = [{ name: 'Peter', age: 30 }, { name: 'Michal', age: 34 }, { name: 'Lucia', age: 33 }]; -}]) \ No newline at end of file diff --git a/angularjs-bootstrap/app/controllers/user.js b/angularjs-bootstrap/app/controllers/user.js deleted file mode 100644 index 28e23d6..0000000 --- a/angularjs-bootstrap/app/controllers/user.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('UserCtrl', ['$scope', function($scope) { - $scope.name = 'user'; -}]); \ No newline at end of file diff --git a/angularjs-bootstrap/app/css/app.css b/angularjs-bootstrap/app/css/app.css deleted file mode 100644 index a81dce4..0000000 --- a/angularjs-bootstrap/app/css/app.css +++ /dev/null @@ -1,3 +0,0 @@ -/*auto*/ - -body { padding:20px; margin:0; font:normal 12px Arial; } \ No newline at end of file diff --git a/angularjs-bootstrap/app/directives/empty b/angularjs-bootstrap/app/directives/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/app/filters/empty b/angularjs-bootstrap/app/filters/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/app/resources/empty b/angularjs-bootstrap/app/resources/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/app/robots.txt b/angularjs-bootstrap/app/robots.txt deleted file mode 100644 index c2a49f4..0000000 --- a/angularjs-bootstrap/app/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/angularjs-bootstrap/app/services/empty b/angularjs-bootstrap/app/services/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/app/templates/empty b/angularjs-bootstrap/app/templates/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/app/views/empty b/angularjs-bootstrap/app/views/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-bootstrap/controllers/default.js b/angularjs-bootstrap/controllers/default.js deleted file mode 100644 index 71b6bd6..0000000 --- a/angularjs-bootstrap/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - framework.route('/*', view_app); -}; - -function view_app() { - var self = this; - self.view('app'); -} \ No newline at end of file diff --git a/angularjs-bootstrap/index.js b/angularjs-bootstrap/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs-bootstrap/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-bootstrap/modules/angular.js b/angularjs-bootstrap/modules/angular.js deleted file mode 100644 index 6c3d712..0000000 --- a/angularjs-bootstrap/modules/angular.js +++ /dev/null @@ -1,428 +0,0 @@ -// MIT License -// Copyright Peter Širka -// Version 1.0.0 - -exports.name = 'angular.js'; -exports.version = '1.0.0'; -exports.options = { 'angular-version': '1.5.7', 'angular-i18n-version': '1.5.7' }; - -var fs = require('fs'); -var EXTENSION_JS = '.js'; -var REPOSITORY_ANGULAR = '$angular'; -var REPOSITORY_ANGULAR_LOCALE = '$angular-locale'; -var REPOSITORY_ANGULAR_COMMON = '$angular-common'; -var REPOSITORY_ANGULAR_CONTROLLER = '$angular-controller'; -var REPOSITORY_ANGULAR_OTHER = '$angular-other'; - -exports.install = function(options) { - - U.extend(exports.options, options, true); - - /* - Include: Angular.js CDN into the head - @version {String} - @name {String or String Array} :: optional, example: route or resource - return {String} - */ - framework.helpers.ng = function(name) { - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, name[i]); - return ''; - } - - var isCommon = name[0] === '~'; - - if (isCommon) - name = name.substring(1); - - if (name === undefined) - name = 'angular'; - - if (name === 'core' || name === '' || name === 'base' || name === 'main') - name = 'angular'; - - if (name !== 'angular' && name.indexOf('angular-') === -1) - name = 'angular-' + name; - - var output = self.repository[REPOSITORY_ANGULAR] || ''; - var script = $script_create((isCommon ? '/common/' + name + '.min.js' : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-version'] + '/' + name + '.min.js')); - - if (name === 'angular') - output = script + output; - else - output += script; - - self.repository[REPOSITORY_ANGULAR] = output; - return ''; - }; - - - framework.helpers.ngCommon = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngCommon.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_COMMON] || ''; - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var script = $script_create('/common/' + name); - output += script; - - self.repository[REPOSITORY_ANGULAR_COMMON] = output; - return ''; - }; - - framework.helpers.ngLocale = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 2) { - for (var i = 1; i < length; i++) - framework.helpers.ngLocale.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngLocale.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_LOCALE] || ''; - var isLocal = name[0] === '~'; - var extension = ''; - - if (isLocal) - name = name.substring(1); - - if (name.indexOf('angular-locale_') !== -1) - name = name.replace('angular-locale_', ''); - - if (name.lastIndexOf(EXTENSION_JS) === -1) - extension = EXTENSION_JS; - - output += $script_create(isLocal ? '/i18n/angular-locale_' + name + extension : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-i18n-version'] + '/i18n/angular-locale_' + name + extension); - self.repository[REPOSITORY_ANGULAR_LOCALE] = output; - - return ''; - }; - - /* - Include: Controller into the head - @name {String or String Array} - return {String} - */ - framework.helpers.ngController = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/controllers/' + name); - - self.repository[REPOSITORY_ANGULAR_CONTROLLER] = output; - - return ''; - }; - - /* - Include: Content from file into the body - @name {String} - return {String} - */ - framework.helpers.ngTemplate = function(name, id) { - - var self = this; - - if (id === undefined) - id = name; - - if (name.lastIndexOf('.html') === -1) - name += '.html'; - - if (name[0] === '~') - name = name.substring(1); - else if (name[1] !== '/') - name = '/templates/' + name; - - var key = 'ng-' + name; - var tmp = framework.temporary.views[key]; - - if (tmp === undefined) { - var filename = utils.combine(self.config['directory-public-virtual'], name); - - if (fs.existsSync(filename)) - tmp = fs.readFileSync(filename).toString('utf8'); - else - tmp = ''; - - if (!self.isDebug) - framework.temporary.views[key] = tmp; - } - - return ''; - }; - - /* - Include: Directive into the head - @name {String} - return {String} - */ - framework.helpers.ngDirective = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/directives/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - return ''; - }; - - /* - Include: CSS into the head - @name {String} - return {String} - */ - framework.helpers.ngStyle = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf('.css') === -1) - name += '.css'; - - self.head(name); - return ''; - }; - - /* - Include: Service into the head - @name {String} - return {String} - */ - framework.helpers.ngService = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/services/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Filter into the head - @name {String} - return {String} - */ - framework.helpers.ngFilter = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/filters/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Resource into the head - @name {String} - return {String} - */ - framework.helpers.ngResource = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/resources/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - framework.helpers.ngInclude = function(name) { - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - return $script_create(name); - }; - - framework.on('controller-render-meta', event_render_head); -}; - -exports.uninstall = function() { - delete framework.helpers.ng; - delete framework.helpers.ngInclude; - delete framework.helpers.ngResource; - delete framework.helpers.ngFilter; - delete framework.helpers.ngService; - delete framework.helpers.ngDirective; - delete framework.helpers.ngTemplate; - delete framework.helpers.ngController; - delete framework.helpers.ngLocale; - delete framework.helpers.ngCommon; - framework.removeListener('controller-render-meta', event_render_head); -}; - -function event_render_head(controller) { - var self = controller; - var angularBeg = (self.repository[REPOSITORY_ANGULAR] || '') + (self.repository[REPOSITORY_ANGULAR_COMMON] || '') + (self.repository[REPOSITORY_ANGULAR_LOCALE] || ''); - var angularEnd = (angularBeg.length > 0 ? $script_create('/app.js') : '') + (self.repository[REPOSITORY_ANGULAR_OTHER] || '') + (self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''); - self.repository['$head'] += angularBeg + angularEnd; -} - -function $script_create(url) { - return ''; -} \ No newline at end of file diff --git a/angularjs-bootstrap/readme.md b/angularjs-bootstrap/readme.md deleted file mode 100644 index c4621ab..0000000 --- a/angularjs-bootstrap/readme.md +++ /dev/null @@ -1,15 +0,0 @@ -# How to run it? - -## First step - -``` -npm install total.js -``` - -## Second step - -``` -node index -``` - -Open browser: \ No newline at end of file diff --git a/angularjs-bootstrap/views/app.html b/angularjs-bootstrap/views/app.html deleted file mode 100644 index 8603aec..0000000 --- a/angularjs-bootstrap/views/app.html +++ /dev/null @@ -1,20 +0,0 @@ -@{meta('title', 'description', 'keywords')} - - -@{ngStyle('app')} - - -@{ngLocale('en-us')} - - -@{ngController('home', 'user')} - -
    -

    {{ name }}

    -
    -
      -
    • {{ user.name }}
    • -
    -
    - -@{ngTemplate('list')} \ No newline at end of file diff --git a/angularjs-bootstrap/views/layout.html b/angularjs-bootstrap/views/layout.html deleted file mode 100644 index 18d3aeb..0000000 --- a/angularjs-bootstrap/views/layout.html +++ /dev/null @@ -1,25 +0,0 @@ -@{ng('angular', 'resource', 'route')} - - - - - @{meta} - - - - - - - - @{head} - - - @{favicon('favicon.ico')} - - - - - @{body} - - - \ No newline at end of file diff --git a/angularjs-common/app/app.js b/angularjs-common/app/app.js deleted file mode 100644 index 03c24e0..0000000 --- a/angularjs-common/app/app.js +++ /dev/null @@ -1 +0,0 @@ -var app = angular.module('app', []); diff --git a/angularjs-common/app/common/angular-route.min.js b/angularjs-common/app/common/angular-route.min.js deleted file mode 100644 index 62bed89..0000000 --- a/angularjs-common/app/common/angular-route.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - AngularJS v1.2.10 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(h,e,A){'use strict';function u(w,q,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,n){function y(){l&&(l.$destroy(),l=null);g&&(k.leave(g),g=null)}function v(){var b=w.current&&w.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),f=w.current;g=n(b,function(d){k.enter(d,null,g||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||q()});y()});l=f.scope=b;l.$emit("$viewContentLoaded");l.$eval(h)}else y()}var l,g,t=b.autoscroll,h=b.onload||""; -a.$on("$routeChangeSuccess",v);v()}}}function z(e,h,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var n=e(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));n(a)}}}h=e.module("ngRoute",["ng"]).provider("$route",function(){function h(a,c){return e.extend(new (e.extend(function(){},{prototype:a})),c)}function q(a, -e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},h=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&q(a,c));if(a){var b="/"==a[a.length-1]?a.substr(0,a.length- -1):a+"/";k[b]=e.extend({redirectTo:a},q(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,n,q,v,l){function g(){var d=t(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!x)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)x=!1,a.$broadcast("$routeChangeStart",d,m),(r.current= -d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(u(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?n.get(d):n.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=l.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl=b,c=q.get(b, -{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function t(){var a,b;e.forEach(k,function(f,k){var p;if(p=!b){var s=c.path();p=f.keys;var l={};if(f.regexp)if(s=f.regexp.exec(s)){for(var g=1,q=s.length;g").append(b).html();try{return 3===b[0].nodeType?x(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, -function(a,b){return"<"+x(b)})}catch(d){return x(c)}}function Wb(b){try{return decodeURIComponent(b)}catch(a){}}function Xb(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Wb(c[0]),B(d)&&(b=B(c[1])?Wb(c[1]):!0,a[d]?K(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Yb(b){var a=[];q(b,function(b,d){K(b)?q(b,function(b){a.push(wa(d,!0)+(!0===b?"":"="+wa(b,!0)))}):a.push(wa(d,!0)+(!0===b?"":"="+wa(b,!0)))});return a.length?a.join("&"):""}function tb(b){return wa(b, -!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function wa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Tc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(Q.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+ -a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function Zb(b,a){var c=function(){b=A(b);if(b.injector()){var c=b[0]===Q?"document":ga(b);throw Oa("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=$b(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate", -function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(Z&&!d.test(Z.name))return c();Z.name=Z.name.replace(d,"");Ca.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function db(b,a){a=a||"_";return b.replace(Uc,function(b,d){return(d?a:"")+b.toLowerCase()})}function ub(b,a,c){if(!b)throw Oa("areq",a||"?",c||"required");return b}function Qa(b,a,c){c&&K(b)&&(b=b[b.length-1]);ub(L(b),a,"not a function, got "+(b&&"object"==typeof b? -b.constructor.name||"Object":typeof b));return b}function xa(b,a){if("hasOwnProperty"===b)throw Oa("badname",a);}function vb(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f "+b;a.removeChild(a.firstChild);zb(this,a.childNodes);A(Q.createDocumentFragment()).append(this)}else zb(this, -b)}function Ab(b){return b.cloneNode(!0)}function Ea(b){ac(b);var a=0;for(b=b.childNodes||[];a=M?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Fa(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c=== -r&&(c=b.$$hashKey=$a()):c=b;return a+":"+c}function Ta(b){q(b,this.put,this)}function hc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace($c,""),c=c.match(ad),q(c[1].split(bd),function(b){b.replace(cd,function(b,c,d){a.push(d)})})),b.$inject=a):K(b)?(c=b.length-1,Qa(b[c],"fn"),a=b.slice(0,c)):Qa(b,"fn",!0);return a}function $b(b){function a(a){return function(b,c){if(X(b))q(b,Qb(a));else return a(b,c)}}function c(a,b){xa(a,"service");if(L(b)||K(b))b=n.instantiate(b); -if(!b.$get)throw Ua("pget",a);return l[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(D(a))for(c=Va(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,h=d.length;g 4096 bytes)!"));else{if(m.cookie!==J)for(J=m.cookie,d=J.split("; "),V={},g=0;gk&&this.remove(p.key),b},get:function(a){var b=l[a];if(b)return e(b),m[a]},remove:function(a){var b=l[a];b&&(b==n&&(n=b.p),b==p&&(p=b.n),g(b.n,b.p),delete l[a],delete m[a],f--)},removeAll:function(){m={};f=0;l={};n=p=null},destroy:function(){l=h=m=null;delete a[b]},info:function(){return t({},h,{size:f})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]}; -return b}}function hd(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function jc(b,a){var c={},d="Directive",e=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,g=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^(on[a-z]+|formaction)$/;this.directive=function m(a,e){xa(a,"directive");D(a)?(ub(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];q(c[a],function(c,g){try{var f=b.invoke(c);L(f)?f={compile:$(f)}:!f.compile&&f.link&&(f.compile= -$(f.link));f.priority=f.priority||0;f.index=g;f.name=f.name||a;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(m){d(m)}});return e}])),c[a].push(e)):q(a,Qb(m));return this};this.aHrefSanitizationWhitelist=function(b){return B(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate", -"$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,l,n,p,s,C,y,E,u,R,H){function v(a,b,c,d,e){a instanceof A||(a=A(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=A(b).wrap("").parent()[0])});var g=N(a,b,a,c,d,e);ha(a,"ng-scope");return function(b,c,d){ub(b,"scope");var e=c?Ga.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var f=e.length;darguments.length&&(b=a, -a=r);z&&(c=ca);return p(a,b,c)}var I,v,N,u,P,J,ca={},hb;I=c===g?d:Tb(d,new Fb(A(g),d.$attr));v=I.$$element;if(H){var T=/^\s*([@=&])(\??)\s*(\w*)\s*$/;f=A(g);J=e.$new(!0);ia&&ia===H.$$originalDirective?f.data("$isolateScope",J):f.data("$isolateScopeNoTemplate",J);ha(f,"ng-isolate-scope");q(H.scope,function(a,c){var d=a.match(T)||[],g=d[3]||c,f="?"==d[2],d=d[1],m,l,n,p;J.$$isolateBindings[c]=d+g;switch(d){case "@":I.$observe(g,function(a){J[c]=a});I.$$observers[g].$$scope=e;I[g]&&(J[c]=b(I[g])(e)); -break;case "=":if(f&&!I[g])break;l=s(I[g]);p=l.literal?ua:function(a,b){return a===b};n=l.assign||function(){m=J[c]=l(e);throw ja("nonassign",I[g],H.name);};m=J[c]=l(e);J.$watch(function(){var a=l(e);p(a,J[c])||(p(a,m)?n(e,a=J[c]):J[c]=a);return m=a},null,l.literal);break;case "&":l=s(I[g]);J[c]=function(a){return l(e,a)};break;default:throw ja("iscp",H.name,c,a);}})}hb=p&&y;V&&q(V,function(a){var b={$scope:a===H||a.$$isolateScope?J:e,$element:v,$attrs:I,$transclude:hb},c;P=a.controller;"@"==P&&(P= -I[a.name]);c=C(P,b);ca[a.name]=c;z||v.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(N=m.length;fG.priority)break;if(U=G.scope)u=u||G,G.templateUrl||(x("new/isolated scope",H,G,t),X(U)&&(H=G));da=G.name;!G.templateUrl&&G.controller&&(U=G.controller,V=V||{},x("'"+da+"' controller",V[da],G,t),V[da]=G);if(U=G.transclude)T=!0,G.$$tlb||(x("transclusion",p,G,t),p=G),"element"==U?(z=!0,N=G.priority,U=ca(c,Wa,S), -t=d.$$element=A(Q.createComment(" "+da+": "+d[da]+" ")),c=t[0],ib(g,A(va.call(U,0)),c),F=v(U,e,N,f&&f.name,{nonTlbTranscludeDirective:p})):(U=A(Ab(c)).contents(),t.empty(),F=v(U,e));if(G.template)if(x("template",ia,G,t),ia=G,U=L(G.template)?G.template(t,d):G.template,U=Y(U),G.replace){f=G;U=A("
    "+ba(U)+"
    ").contents();c=U[0];if(1!=U.length||1!==c.nodeType)throw ja("tplrt",da,"");ib(g,t,c);na={$attr:{}};U=J(c,[],na);var W=a.splice(M+1,a.length-(M+1));H&&ic(U);a=a.concat(U).concat(W);B(d,na); -na=a.length}else t.html(U);if(G.templateUrl)x("template",ia,G,t),ia=G,G.replace&&(f=G),E=w(a.splice(M,a.length-M),t,d,g,F,m,n,{controllerDirectives:V,newIsolateScopeDirective:H,templateDirective:ia,nonTlbTranscludeDirective:p}),na=a.length;else if(G.compile)try{O=G.compile(t,d,F),L(O)?y(null,O,Wa,S):O&&y(O.pre,O.post,Wa,S)}catch(Z){l(Z,ga(t))}G.terminal&&(E.terminal=!0,N=Math.max(N,G.priority))}E.scope=u&&!0===u.scope;E.transclude=T&&F;return E}function ic(a){for(var b=0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(g)&&(s&&(p=Sb(p,{$$start:s,$$end:n})),b.push(p),k=p)}catch(v){l(v)}}return k}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(ha(e,b),a["class"]=(a["class"]?a["class"]+ -" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function w(a,b,c,d,e,g,f,m){var k=[],s,l,C=b[0],y=a.shift(),v=t({},y,{templateUrl:null,transclude:null,replace:null,$$originalDirective:y}),R=L(y.templateUrl)?y.templateUrl(b,c):y.templateUrl;b.empty();n.get(u.getTrustedResourceUrl(R),{cache:p}).success(function(n){var p,E;n=Y(n);if(y.replace){n=A("
    "+ba(n)+"
    ").contents();p=n[0];if(1!= -n.length||1!==p.nodeType)throw ja("tplrt",y.name,R);n={$attr:{}};ib(d,b,p);var u=J(p,[],n);X(y.scope)&&ic(u);a=u.concat(a);B(c,n)}else p=C,b.html(n);a.unshift(v);s=ia(a,p,c,e,b,y,g,f,m);q(d,function(a,c){a==p&&(d[c]=b[0])});for(l=N(b[0].childNodes,e);k.length;){n=k.shift();E=k.shift();var H=k.shift(),ha=k.shift(),u=b[0];E!==C&&(u=Ab(p),ib(H,A(E),u));E=s.transclude?V(n,s.transclude):ha;s(l,n,u,d,E)}k=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){k?(k.push(b), -k.push(c),k.push(d),k.push(e)):s(l,b,c,d,e)}}function z(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:n.reject(b)}var d={transformRequest:e.transformRequest,transformResponse:e.transformResponse},g=function(a){function b(a){var c;q(a,function(b, -d){L(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=t({},a.headers),g,f,c=t({},c.common,c[x(a.method)]);b(c);b(d);a:for(g in c){a=x(g);for(f in d)if(x(f)===a)continue a;d[g]=c[g]}return d}(a);t(d,a);d.headers=g;d.method=Ia(d.method);(a=Gb(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:r)&&(g[d.xsrfHeaderName||e.xsrfHeaderName]=a);var f=[function(a){g=a.headers;var b=oc(a.data,nc(g),a.transformRequest);z(a.data)&&q(g,function(a,b){"content-type"===x(b)&&delete g[b]});z(a.withCredentials)&& -!z(e.withCredentials)&&(a.withCredentials=e.withCredentials);return C(a,b,g).then(c,c)},r],h=n.when(d);for(q(u,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data,b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function C(b, -c,g){function f(a,b,c){u&&(200<=a&&300>a?u.put(r,[a,b,mc(c)]):u.remove(r));m(b,a,c);d.$$phase||d.$apply()}function m(a,c,d){c=Math.max(c,0);(200<=c&&300>c?p.resolve:p.reject)({data:a,status:c,headers:nc(d),config:b})}function k(){var a=bb(s.pendingRequests,b);-1!==a&&s.pendingRequests.splice(a,1)}var p=n.defer(),C=p.promise,u,q,r=y(b.url,b.params);s.pendingRequests.push(b);C.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(u=X(b.cache)?b.cache:X(e.cache)?e.cache:E);if(u)if(q=u.get(r), -B(q)){if(q.then)return q.then(k,k),q;K(q)?m(q[1],q[0],aa(q[2])):m(q,200,{})}else u.put(r,C);z(q)&&a(b.method,r,c,f,g,b.timeout,b.withCredentials,b.responseType);return C}function y(a,b){if(!b)return a;var c=[];Pc(b,function(a,b){null===a||z(a)||(K(a)||(a=[a]),q(a,function(a){X(a)&&(a=qa(a));c.push(wa(b)+"="+wa(a))}))});return a+(-1==a.indexOf("?")?"?":"&")+c.join("&")}var E=c("$http"),u=[];q(g,function(a){u.unshift(D(a)?p.get(a):p.invoke(a))});q(f,function(a,b){var c=D(a)?p.get(a):p.invoke(a);u.splice(b, -0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});s.pendingRequests=[];(function(a){q(arguments,function(a){s[a]=function(b,c){return s(t(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){s[a]=function(b,c,d){return s(t(d||{},{method:a,url:b,data:c}))}})})("post","put");s.defaults=e;return s}]}function nd(b){return 8>=M&&"patch"===x(b)?new ActiveXObject("Microsoft.XMLHTTP"):new Z.XMLHttpRequest}function od(){this.$get= -["$browser","$window","$document",function(b,a,c){return pd(b,nd,b.defer,a.angular.callbacks,c[0])}]}function pd(b,a,c,d,e){function g(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange=c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;M&&8>=M?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var f=-1;return function(e,m,k,l,n,p,s,C){function y(){u=f; -H&&H();v&&v.abort()}function E(a,d,e,g){r&&c.cancel(r);H=v=null;d=0===d?e?200:404:d;a(1223==d?204:d,e,g);b.$$completeOutstandingRequest(w)}var u;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==x(e)){var R="_"+(d.counter++).toString(36);d[R]=function(a){d[R].data=a};var H=g(m.replace("JSON_CALLBACK","angular.callbacks."+R),function(){d[R].data?E(l,200,d[R].data):E(l,u||-2);d[R]=Ca.noop})}else{var v=a(e);v.open(e,m,!0);q(n,function(a,b){B(a)&&v.setRequestHeader(b,a)});v.onreadystatechange= -function(){if(v&&4==v.readyState){var a=null,b=null;u!==f&&(a=v.getAllResponseHeaders(),b="response"in v?v.response:v.responseText);E(l,u||v.status,b,a)}};s&&(v.withCredentials=!0);C&&(v.responseType=C);v.send(k||null)}if(0=h&&(n.resolve(s),l(p.$$intervalId),delete e[p.$$intervalId]);C||b.$apply()},f);e[p.$$intervalId]=n;return p} -var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function sd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), -SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function qc(b){b=b.split("/");for(var a=b.length;a--;)b[a]= -tb(b[a]);return b.join("/")}function rc(b,a,c){b=ya(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=S(b.port)||td[b.protocol]||null}function sc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ya(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=Xb(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function oa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Xa(b){var a= -b.indexOf("#");return-1==a?b:b.substr(0,a)}function Hb(b){return b.substr(0,Xa(b).lastIndexOf("/")+1)}function tc(b,a){this.$$html5=!0;a=a||"";var c=Hb(b);rc(b,this,b);this.$$parse=function(a){var e=oa(c,a);if(!D(e))throw Ib("ipthprfx",a,c);sc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Yb(this.$$search),b=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=qc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e; -if((e=oa(b,d))!==r)return d=e,(e=oa(a,e))!==r?c+(oa("/",e)||e):b+d;if((e=oa(c,d))!==r)return c+e;if(c==d+"/")return c}}function Jb(b,a){var c=Hb(b);rc(b,this,b);this.$$parse=function(d){var e=oa(b,d)||oa(c,d),e="#"==e.charAt(0)?oa(a,e):this.$$html5?e:"";if(!D(e))throw Ib("ihshprfx",d,a);sc(e,this,b);d=this.$$path;var g=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Yb(this.$$search),e=this.$$hash? -"#"+tb(this.$$hash):"";this.$$url=qc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Xa(b)==Xa(a))return a}}function uc(b,a){this.$$html5=!0;Jb.apply(this,arguments);var c=Hb(b);this.$$rewrite=function(d){var e;if(b==Xa(d))return d;if(e=oa(c,d))return b+a+e;if(c===d+"/")return c}}function jb(b){return function(){return this[b]}}function vc(b,a){return function(c){if(z(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ud(){var b= -"",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode=function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?tc:uc):(m=Xa(k),e=Jb);h=new e(m,"#"+b);h.$$parse(h.$$rewrite(k));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b= -A(a.target);"a"!==x(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return;var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ya(e.animVal).href);var f=h.$$rewrite(e);e&&(!b.attr("target")&&f&&!a.isDefaultPrevented())&&(a.preventDefault(),f!=d.url()&&(h.$$parse(f),c.$apply(),Z.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart", -a,b).defaultPrevented?(h.$$parse(b),d.url(b)):f(b)}),c.$$phase||c.$digest())});var l=0;c.$watch(function(){var a=d.url(),b=h.$$replace;l&&a==h.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),f(a))}));h.$$replace=!1;return l});return h}]}function vd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&& --1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||w;a=!1;try{a=!!e.apply}catch(m){}return a?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ea(b, -a){if("constructor"===b)throw za("isecfld",a);return b}function Ya(b,a){if(b){if(b.constructor===b)throw za("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw za("isecwindow",a);if(b.children&&(b.nodeName||b.on&&b.find))throw za("isecdom",a);}return b}function kb(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1e?wc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,h;do h=wc(d[f++],d[f++],d[f++],d[f++],d[f++],c,a)(b,g),g=r,b=h;while(fa)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f},function(){b(e,d,c)})},$digest:function(){var d,f,g,h,k=this.$$asyncQueue,l=this.$$postDigestQueue,q,v,r=b,N,V=[],J,A,P;m("$digest");c=null;do{v= -!1;for(N=this;k.length;){try{P=k.shift(),P.scope.$eval(P.expression)}catch(B){p.$$phase=null,e(B)}c=null}a:do{if(h=N.$$watchers)for(q=h.length;q--;)try{if(d=h[q])if((f=d.get(N))!==(g=d.last)&&!(d.eq?ua(f,g):"number"==typeof f&&"number"==typeof g&&isNaN(f)&&isNaN(g)))v=!0,c=d,d.last=d.eq?aa(f):f,d.fn(f,g===n?f:g,N),5>r&&(J=4-r,V[J]||(V[J]=[]),A=L(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,A+="; newVal: "+qa(f)+"; oldVal: "+qa(g),V[J].push(A));else if(d===c){v=!1;break a}}catch(t){p.$$phase= -null,e(t)}if(!(h=N.$$childHead||N!==this&&N.$$nextSibling))for(;N!==this&&!(h=N.$$nextSibling);)N=N.$parent}while(N=h);if((v||k.length)&&!r--)throw p.$$phase=null,a("infdig",b,qa(V));}while(v||k.length);for(p.$$phase=null;l.length;)try{l.shift()()}catch(z){e(z)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(q(this.$$listenerCount,cb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&& -(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)}, -$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[bb(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented= -!0},defaultPrevented:!1},m=[h].concat(va.call(arguments,1)),k,l;do{d=f.$$listeners[a]||c;h.currentScope=f;k=0;for(l=d.length;kc.msieDocumentMode)throw sa("iequirks"); -var e=aa(fa);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Ba);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var g=e.parseAs,f=e.getTrusted,h=e.trustAs;q(fa,function(a,b){var c=x(b);e[Ra("parse_as_"+c)]=function(b){return g(a,b)};e[Ra("get_trusted_"+c)]=function(b){return f(a,b)};e[Ra("trust_as_"+c)]=function(b){return h(a, -b)}});return e}]}function Gd(){this.$get=["$window","$document",function(b,a){var c={},d=S((/android (\d+)/.exec(x((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),g=a[0]||{},f=g.documentMode,h,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=g.body&&g.body.style,l=!1,n=!1;if(k){for(var p in k)if(l=m.exec(p)){h=l[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||h+"Transition"in k);n=!!("animation"in k||h+"Animation"in -k);!d||l&&n||(l=D(g.body.style.webkitTransition),n=D(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f||7b;b=Math.abs(b); -var f=b+"",h="",m=[],k=!1;if(-1!==f.indexOf("e")){var l=f.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?f="0":(h=f,k=!0)}if(k)0b)&&(h=b.toFixed(e));else{f=(f.split(Hc)[1]||"").length;z(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e);b=Math.round(b*f)/f;b=(""+b).split(Hc);f=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(l=f.length-n,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Mb(e,a,d)}}function lb(b,a){return function(c,d){var e=c["get"+b](),g=Ia(a?"SHORT"+b:b);return d[g][e]}}function Dc(b){function a(a){var b; -if(b=a.match(c)){a=new Date(0);var g=0,f=0,h=b[8]?a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=S(b[9]+b[10]),f=S(b[9]+b[11]));h.call(a,S(b[1]),S(b[2])-1,S(b[3]));g=S(b[4]||0)-g;f=S(b[5]||0)-f;h=S(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,g,f,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],h,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;D(c)&& -(c=Od.test(c)?S(c):a(c));sb(c)&&(c=new Date(c));if(!La(c))return c;for(;e;)(m=Pd.exec(e))?(f=f.concat(va.call(m,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){h=Qd[a];g+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Kd(){return function(b){return qa(b,!0)}}function Ld(){return function(b,a){if(!K(b)&&!D(b))return b;a=S(a);if(D(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||k()});if(e.hasEvent("paste"))a.on("paste cut",k)}a.on("change",h);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var l=c.ngPattern;l&&((e=l.match(/^\/(.*)\/([gim]*)$/))?(l=RegExp(e[1],e[2]),e=function(a){return pa(d,"pattern",d.$isEmpty(a)||l.test(a),a)}):e=function(c){var e=b.$eval(l);if(!e||!e.test)throw F("ngPattern")("noregexp", -l,e,ga(a));return pa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var n=S(c.ngMinlength);e=function(a){return pa(d,"minlength",d.$isEmpty(a)||a.length>=n,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var p=S(c.ngMaxlength);e=function(a){return pa(d,"maxlength",d.$isEmpty(a)||a.length<=p,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Nb(b,a){b="ngClass"+b;return function(){return{restrict:"AC",link:function(c,d,e){function g(b){if(!0=== -a||c.$index%2===a){var d=f(b||"");h?ua(b,h)||e.$updateClass(d,f(h)):e.$addClass(d)}h=aa(b)}function f(a){if(K(a))return a.join(" ");if(X(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var h;c.$watch(e[b],g,!0);e.$observe("class",function(a){g(c.$eval(e[b]))});"ngClass"!==b&&c.$watch("$index",function(d,g){var h=d&1;if(h!==g&1){var n=f(c.$eval(e[b]));h===a?e.$addClass(n):e.$removeClass(n)}})}}}}var x=function(b){return D(b)?b.toLowerCase():b},Ia=function(b){return D(b)?b.toUpperCase(): -b},M,A,Da,va=[].slice,Rd=[].push,Ma=Object.prototype.toString,Oa=F("ng"),Ca=Z.angular||(Z.angular={}),Va,Ha,ka=["0","0","0"];M=S((/msie (\d+)/.exec(x(navigator.userAgent))||[])[1]);isNaN(M)&&(M=S((/trident\/.*; rv:(\d+)/.exec(x(navigator.userAgent))||[])[1]));w.$inject=[];Ba.$inject=[];var ba=function(){return String.prototype.trim?function(b){return D(b)?b.trim():b}:function(b){return D(b)?b.replace(/^\s\s*/,"").replace(/\s\s*$/,""):b}}();Ha=9>M?function(b){b=b.nodeName?b:b[0];return b.scopeName&& -"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Uc=/[A-Z]/g,Sd={full:"1.2.10",major:1,minor:2,dot:10,codeName:"augmented-serendipity"},Sa=O.cache={},eb=O.expando="ng-"+(new Date).getTime(),Yc=1,Jc=Z.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Bb=Z.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+ -a,c)},Wc=/([\:\-\_]+(.))/g,Xc=/^moz([A-Z])/,yb=F("jqLite"),Ga=O.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===Q.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),O(Z).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?A(this[b]):A(this[this.length+b])},length:0,push:Rd,sort:[].sort,splice:[].splice},gb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){gb[x(b)]= -b});var gc={};q("input select option textarea button form details".split(" "),function(b){gc[Ia(b)]=!0});q({data:cc,inheritedData:fb,scope:function(b){return A(b).data("$scope")||fb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return A(b).data("$isolateScope")||A(b).data("$isolateScopeNoTemplate")},controller:dc,injector:function(b){return fb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Cb,css:function(b,a,c){a=Ra(a);if(B(c))b.style[a]=c;else{var d; -8>=M&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=M&&(d=""===d?r:d);return d}},attr:function(b,a,c){var d=x(a);if(gb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||w).specified?d:r;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?r:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(z(d))return e? -b[e]:"";b[e]=d}var a=[];9>M?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(z(a)){if("SELECT"===Ha(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(z(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))}, -"!":function(a,c,d){return!d(a,c)}},Wd={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Lb=function(a){this.options=a};Lb.prototype={constructor:Lb,lex:function(a){this.text=a;this.index=0;this.ch=r;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "=== -a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw za("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(Za.ZERO,a.fn, -this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=xc(d,this.options,this.text);return t(function(c,d,h){return e(h||a(c,d))},{assign:function(e,f,h){return kb(a(e,h),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return t(function(e,g){var f=a(e,g),h=d(e,g),m;if(!f)return r;(f=Ya(f[h],c.text))&&(f.then&&c.options.unwrapPromises)&&(m=f,"$$v"in f||(m.$$v=r,m.then(function(a){m.$$v= -a})),f=f.$$v);return f},{assign:function(e,g,f){var h=d(e,f);return Ya(a(e,f),c.text)[h]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var h=[],m=c?c(g,f):g,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Mb(Math[0=M&&(c.href||c.name||c.$set("href",""),a.append(Q.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var g="[object SVGAnimatedString]"===Ma.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(g)||a.preventDefault()})}}}),Ob={};q(gb,function(a,c){if("multiple"!=a){var d=ma("ng-"+c);Ob[d]=function(){return{priority:100,link:function(a,g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src","srcset","href"],function(a){var c= -ma("ng-"+a);Ob[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(a,c),M&&e.prop(a,g[a]))})}}}});var ob={$addControl:w,$removeControl:w,$setValidity:w,$setDirty:w,$setPristine:w};Ic.$inject=["$element","$attrs","$scope"];var Kc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Ic,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Jc(e[0], -"submit",h);e.on("$destroy",function(){c(function(){Bb(e[0],"submit",h)},0,!1)})}var m=e.parent().controller("form"),k=g.name||g.ngForm;k&&kb(a,k,f,k);if(m)e.on("$destroy",function(){m.$removeControl(f);k&&kb(a,k,r,k);t(f,ob)})}}}}}]},Yd=Kc(),Zd=Kc(!0),$d=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,ae=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,be=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Lc={text:qb,number:function(a,c,d,e,g,f){qb(a,c,d,e,g,f); -e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||be.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return r});e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return pa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return pa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return pa(e, -"number",e.$isEmpty(a)||sb(a),a)})},url:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);a=function(a){return pa(e,"url",e.$isEmpty(a)||$d.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);a=function(a){return pa(e,"email",e.$isEmpty(a)||ae.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){z(d.name)&&c.attr("name",$a());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked= -d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;D(g)||(g=!0);D(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g};e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:w,button:w,submit:w,reset:w},Mc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", -link:function(d,e,g,f){f&&(Lc[x(g.type)]||Lc.text)(d,e,g,f,c,a)}}}],nb="ng-valid",mb="ng-invalid",Ja="ng-pristine",pb="ng-dirty",ce=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,g){function f(a,c){c=c?"-"+db(c,"-"):"";e.removeClass((a?mb:nb)+c).addClass((a?nb:mb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var h=g(d.ngModel), -m=h.assign;if(!m)throw F("ngModel")("nonassign",d.ngModel,ga(e));this.$render=w;this.$isEmpty=function(a){return z(a)||""===a||null===a||a!==a};var k=e.inheritedData("$formController")||ob,l=0,n=this.$error={};e.addClass(Ja);f(!0);this.$setValidity=function(a,c){n[a]!==!c&&(c?(n[a]&&l--,l||(f(!0),this.$valid=!0,this.$invalid=!1)):(f(!1),this.$invalid=!0,this.$valid=!1,l++),n[a]=!c,f(c,a),k.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(pb).addClass(Ja)}; -this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,e.removeClass(Ja).addClass(pb),k.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,m(a,d),q(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var p=this;a.$watch(function(){var c=h(a);if(p.$modelValue!==c){var d=p.$formatters,e=d.length;for(p.$modelValue=c;e--;)c=d[e](c);p.$viewValue!==c&&(p.$viewValue=c,p.$render())}return c})}],de=function(){return{require:["ngModel", -"^?form"],controller:ce,link:function(a,c,d,e){var g=e[0],f=e[1]||ob;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},ee=$({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Nc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required", -function(){g(e.$viewValue)})}}}},fe=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!z(a)){var c=[];a&&q(a.split(g),function(a){a&&c.push(ba(a))});return c}});e.$formatters.push(function(a){return K(a)?a.join(", "):r});e.$isEmpty=function(a){return!a||!a.length}}}},ge=/^(true|false|\d+)$/,he=function(){return{priority:100,compile:function(a,c){return ge.test(c.ngValue)?function(a,c,g){g.$set("value", -a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},ie=ta(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==r?"":a)})}),je=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],ke=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding", -g.ngBindHtml);var f=c(g.ngBindHtml);d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],le=Nb("",!0),me=Nb("Odd",0),ne=Nb("Even",1),oe=ta({compile:function(a,c){c.$set("ngCloak",r);a.removeClass("ng-cloak")}}),pe=[function(){return{scope:!0,controller:"@",priority:500}}],Oc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ma("ng-"+ -a);Oc[c]=["$parse",function(d){return{compile:function(e,g){var f=d(g[c]);return function(c,d,e){d.on(x(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var qe=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,g,f){var h,m;c.$watch(e.ngIf,function(g){Pa(g)?m||(m=c.$new(),f(m,function(c){c[c.length++]=Q.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(m&&(m.$destroy(),m=null),h&&(a.leave(wb(h.clone)), -h=null))})}}}],re=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ca.noop,compile:function(f,h){var m=h.ngInclude||h.src,k=h.onload||"",l=h.autoscroll;return function(f,h,q,r,y){var A=0,u,t,H=function(){u&&(u.$destroy(),u=null);t&&(e.leave(t),t=null)};f.$watch(g.parseAsResourceUrl(m),function(g){var m=function(){!B(l)||l&&!f.$eval(l)||d()},q=++A;g?(a.get(g,{cache:c}).success(function(a){if(q=== -A){var c=f.$new();r.template=a;a=y(c,function(a){H();e.enter(a,null,h,m)});u=c;t=a;u.$emit("$includeContentLoaded");f.$eval(k)}}).error(function(){q===A&&H()}),f.$emit("$includeContentRequested")):(H(),r.template=null)})}}}}],se=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],te=ta({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),ue=ta({terminal:!0,priority:1E3}),ve=["$locale", -"$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,f){var h=f.count,m=f.$attr.when&&g.attr(f.$attr.when),k=f.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),s=c.endSymbol(),r=/^when(Minus)?(.+)$/;q(f,function(a,c){r.test(c)&&(l[x(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(l,function(a,e){n[e]=c(a.replace(d,p+h+"-"+k+s))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-k));return n[c](e,g,!0)},function(a){g.text(a)})}}}], -we=["$parse","$animate",function(a,c){var d=F("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,g,f,h,m){var k=f.ngRepeat,l=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,s,r,y,t,u={$id:Fa};if(!l)throw d("iexp",k);f=l[1];h=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){t&&(u[t]=a);u[y]=c;u.$index=d;return n(e,u)}):(s=function(a,c){return Fa(c)},r=function(a){return a});l=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp", -f);y=l[3]||l[1];t=l[2];var B={};e.$watchCollection(h,function(a){var f,h,l=g[0],n,u={},z,P,D,x,T,w,F=[];if(rb(a))T=a,n=p||s;else{n=p||r;T=[];for(D in a)a.hasOwnProperty(D)&&"$"!=D.charAt(0)&&T.push(D);T.sort()}z=T.length;h=F.length=T.length;for(f=0;fz;)v.pop().element.remove()}for(;x.length>I;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Fe("iexp", -t,ga(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q=c(k[2]?k[1]:m),A=c(k[7]),w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];y&&(a(y)(e),y.removeClass("ng-scope"),y.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=A(e)||[],d={},h,k,l,p,t,u,v;if(s)for(k=[],p=0,u=x.length;p@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}'); -//# sourceMappingURL=angular.min.js.map diff --git a/angularjs-common/app/common/angular.min.js.map b/angularjs-common/app/common/angular.min.js.map deleted file mode 100644 index ba9d32a..0000000 --- a/angularjs-common/app/common/angular.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular.min.js", -"lineCount":201, -"mappings":"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", -"sources":["angular.js","MINERR_ASSET"], -"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","on","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","csp","securityPolicy","isActive","querySelector","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","attr","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","jqLiteMinErr","div","createElement","innerHTML","removeChild","firstChild","jqLiteAddNodes","childNodes","fragment","createDocumentFragment","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","trim","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","ii","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","angularModule","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","$AnchorScrollProvider","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$BrowserProvider","$document","$CacheFactoryProvider","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$TemplateCacheProvider","$cacheFactory","$CompileProvider","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","directive","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","wrap","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","$node","childScope","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","childTranscludeFn","transclude","createBoundTranscludeFn","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","j","jj","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","directiveName","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","$$element","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","$compileNode","$template","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","childBoundTranscludeFn","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","parentNode","j2","replaceChild","appendChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","oldClasses","tokenDifference","writeAttr","booleanKey","prop","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","$ControllerProvider","CNTRL_REG","register","this.register","expression","identifier","$DocumentProvider","$ExceptionHandlerProvider","exception","cause","parseHeaders","parsed","line","headersGetter","headersObj","transformData","fns","$HttpProvider","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","uppercase","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","ActiveXObject","XMLHttpRequest","$HttpBackendProvider","createHttpBackend","callbacks","$browserDefer","jsonpReq","script","doneWrapper","onreadystatechange","onload","onerror","body","script.onreadystatechange","readyState","script.onerror","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","$InterpolateProvider","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","$IntervalProvider","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","$LocaleProvider","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","urlResolve","$$protocol","protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","$LocationProvider","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","animVal","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","$LogProvider","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","simpleGetterFn1","simpleGetterFn2","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","$ParseProvider","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","$QProvider","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","$RootScopeProvider","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","ChildScope","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","changeDetected","objGetter","internalArray","internalObject","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","expr","$$postDigest","$on","namedListeners","$emit","listenerArgs","array1","currentScope","$$SanitizeUriProvider","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","$SceDelegateProvider","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","$SceProvider","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","$SnifferProvider","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","$TimeoutProvider","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","host","requestUrl","originUrl","$WindowProvider","$FilterProvider","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","predicate","v1","v2","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","validate","ctrl","validatorName","validity","textInputType","composing","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","patternValidator","patternObj","$formatters","$parsers","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","ngClassWatchAction","$index","flattenClasses","classes","old$index","mod","Object","version","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","option","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","prepend","wrapNode","after","newElement","toggleClass","condition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","$animateMinErr","$AnimateProvider","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$timeout","enter","leave","move","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","Parser.ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","htmlAnchorDirective","xlinkHref","ngAttributeAliasDirectives","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formDirective","formElement","action","preventDefaultListener","parentFormCtrl","alias","ngFormDirective","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","inputDirective","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ngModelDirective","ctrls","modelCtrl","formCtrl","ngChangeDirective","ngChange","requiredDirective","required","validator","ngListDirective","ngList","viewValue","CONSTANT_VALUE_REGEXP","ngValueDirective","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBindDirective","ngBind","ngBindWatchAction","ngBindTemplateDirective","ngBindTemplate","ngBindHtmlDirective","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","ngClassDirective","ngClassOddDirective","ngClassEvenDirective","ngCloakDirective","ngControllerDirective","ngEventDirectives","ngIfDirective","$transclude","ngIf","ngIfWatchAction","ngIncludeDirective","$anchorScroll","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","ngIncludeFillContentDirective","$compile","ngInitDirective","ngInit","ngNonBindableDirective","ngPluralizeDirective","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatDirective","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","id","$first","$last","$middle","$odd","$even","ngShowDirective","ngShow","ngShowWatchAction","ngHideDirective","ngHide","ngHideWatchAction","ngStyleDirective","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchDirective","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhenDirective","ngSwitchWhen","ngSwitchDefaultDirective","ngTranscludeDirective","$attrs","scriptDirective","ngOptionsMinErr","ngOptionsDirective","selectDirective","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","optionDirective","nullSelectCtrl","selectCtrlName","interpolateWatchAction","styleDirective","publishExternalAPI","ngModule","$$csp"] -} diff --git a/angularjs-common/app/controllers/home.js b/angularjs-common/app/controllers/home.js deleted file mode 100644 index 66418a6..0000000 --- a/angularjs-common/app/controllers/home.js +++ /dev/null @@ -1,4 +0,0 @@ -app.controller('HomeCtrl', ['$scope', function($scope) { - $scope.name = 'total.js + angular.js = awesome'; - $scope.users = [{ name: 'Peter', age: 30 }, { name: 'Michal', age: 34 }, { name: 'Lucia', age: 33 }]; -}]); \ No newline at end of file diff --git a/angularjs-common/app/controllers/user.js b/angularjs-common/app/controllers/user.js deleted file mode 100644 index 28e23d6..0000000 --- a/angularjs-common/app/controllers/user.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('UserCtrl', ['$scope', function($scope) { - $scope.name = 'user'; -}]); \ No newline at end of file diff --git a/angularjs-common/app/css/app.css b/angularjs-common/app/css/app.css deleted file mode 100644 index a81dce4..0000000 --- a/angularjs-common/app/css/app.css +++ /dev/null @@ -1,3 +0,0 @@ -/*auto*/ - -body { padding:20px; margin:0; font:normal 12px Arial; } \ No newline at end of file diff --git a/angularjs-common/app/directives/empty b/angularjs-common/app/directives/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-common/app/filters/empty b/angularjs-common/app/filters/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-common/app/i18n/angular-locale_en-us.min.js b/angularjs-common/app/i18n/angular-locale_en-us.min.js deleted file mode 100644 index 46c9a36..0000000 --- a/angularjs-common/app/i18n/angular-locale_en-us.min.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";angular.module("ngLocale",[],["$provide",function(a){var b={ZERO:"zero",ONE:"one",TWO:"two",FEW:"few",MANY:"many",OTHER:"other"};a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,macFrac:0,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,macFrac:0,maxFrac:2,minFrac:2,minInt:1,negPre:"(\u00a4",negSuf:")",posPre:"\u00a4",posSuf:""}]},id:"en-us",pluralCat:function(c){if(c==1){return b.ONE}return b.OTHER}})}]); \ No newline at end of file diff --git a/angularjs-common/app/resources/empty b/angularjs-common/app/resources/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-common/app/robots.txt b/angularjs-common/app/robots.txt deleted file mode 100644 index c2a49f4..0000000 --- a/angularjs-common/app/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/angularjs-common/app/services/empty b/angularjs-common/app/services/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-common/app/templates/list.html b/angularjs-common/app/templates/list.html deleted file mode 100644 index fdf85e2..0000000 --- a/angularjs-common/app/templates/list.html +++ /dev/null @@ -1,3 +0,0 @@ -
    {{ user.name }}
    -
    {{ user.age }} years old
    -
    \ No newline at end of file diff --git a/angularjs-common/app/views/empty b/angularjs-common/app/views/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-common/controllers/default.js b/angularjs-common/controllers/default.js deleted file mode 100644 index b7eabf6..0000000 --- a/angularjs-common/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/*', view_app); -}; - -function view_app() { - var self = this; - self.view('app'); -} \ No newline at end of file diff --git a/angularjs-common/definitions/angular.js b/angularjs-common/definitions/angular.js deleted file mode 100644 index 61669d7..0000000 --- a/angularjs-common/definitions/angular.js +++ /dev/null @@ -1,7 +0,0 @@ -var options = {}; - -// www.cdnjs.com -// options['angular-version'] = '1.2.18'; -// options['angular-i18n-version'] = '1.2.15'; - -INSTALL('module', 'https://modules.totaljs.com/angular.js/v1.01/angular.js', options); \ No newline at end of file diff --git a/angularjs-common/index.js b/angularjs-common/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs-common/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-common/modules/angular.js b/angularjs-common/modules/angular.js deleted file mode 100644 index 6c3d712..0000000 --- a/angularjs-common/modules/angular.js +++ /dev/null @@ -1,428 +0,0 @@ -// MIT License -// Copyright Peter Širka -// Version 1.0.0 - -exports.name = 'angular.js'; -exports.version = '1.0.0'; -exports.options = { 'angular-version': '1.5.7', 'angular-i18n-version': '1.5.7' }; - -var fs = require('fs'); -var EXTENSION_JS = '.js'; -var REPOSITORY_ANGULAR = '$angular'; -var REPOSITORY_ANGULAR_LOCALE = '$angular-locale'; -var REPOSITORY_ANGULAR_COMMON = '$angular-common'; -var REPOSITORY_ANGULAR_CONTROLLER = '$angular-controller'; -var REPOSITORY_ANGULAR_OTHER = '$angular-other'; - -exports.install = function(options) { - - U.extend(exports.options, options, true); - - /* - Include: Angular.js CDN into the head - @version {String} - @name {String or String Array} :: optional, example: route or resource - return {String} - */ - framework.helpers.ng = function(name) { - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, name[i]); - return ''; - } - - var isCommon = name[0] === '~'; - - if (isCommon) - name = name.substring(1); - - if (name === undefined) - name = 'angular'; - - if (name === 'core' || name === '' || name === 'base' || name === 'main') - name = 'angular'; - - if (name !== 'angular' && name.indexOf('angular-') === -1) - name = 'angular-' + name; - - var output = self.repository[REPOSITORY_ANGULAR] || ''; - var script = $script_create((isCommon ? '/common/' + name + '.min.js' : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-version'] + '/' + name + '.min.js')); - - if (name === 'angular') - output = script + output; - else - output += script; - - self.repository[REPOSITORY_ANGULAR] = output; - return ''; - }; - - - framework.helpers.ngCommon = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngCommon.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_COMMON] || ''; - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var script = $script_create('/common/' + name); - output += script; - - self.repository[REPOSITORY_ANGULAR_COMMON] = output; - return ''; - }; - - framework.helpers.ngLocale = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 2) { - for (var i = 1; i < length; i++) - framework.helpers.ngLocale.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngLocale.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_LOCALE] || ''; - var isLocal = name[0] === '~'; - var extension = ''; - - if (isLocal) - name = name.substring(1); - - if (name.indexOf('angular-locale_') !== -1) - name = name.replace('angular-locale_', ''); - - if (name.lastIndexOf(EXTENSION_JS) === -1) - extension = EXTENSION_JS; - - output += $script_create(isLocal ? '/i18n/angular-locale_' + name + extension : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-i18n-version'] + '/i18n/angular-locale_' + name + extension); - self.repository[REPOSITORY_ANGULAR_LOCALE] = output; - - return ''; - }; - - /* - Include: Controller into the head - @name {String or String Array} - return {String} - */ - framework.helpers.ngController = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/controllers/' + name); - - self.repository[REPOSITORY_ANGULAR_CONTROLLER] = output; - - return ''; - }; - - /* - Include: Content from file into the body - @name {String} - return {String} - */ - framework.helpers.ngTemplate = function(name, id) { - - var self = this; - - if (id === undefined) - id = name; - - if (name.lastIndexOf('.html') === -1) - name += '.html'; - - if (name[0] === '~') - name = name.substring(1); - else if (name[1] !== '/') - name = '/templates/' + name; - - var key = 'ng-' + name; - var tmp = framework.temporary.views[key]; - - if (tmp === undefined) { - var filename = utils.combine(self.config['directory-public-virtual'], name); - - if (fs.existsSync(filename)) - tmp = fs.readFileSync(filename).toString('utf8'); - else - tmp = ''; - - if (!self.isDebug) - framework.temporary.views[key] = tmp; - } - - return ''; - }; - - /* - Include: Directive into the head - @name {String} - return {String} - */ - framework.helpers.ngDirective = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/directives/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - return ''; - }; - - /* - Include: CSS into the head - @name {String} - return {String} - */ - framework.helpers.ngStyle = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf('.css') === -1) - name += '.css'; - - self.head(name); - return ''; - }; - - /* - Include: Service into the head - @name {String} - return {String} - */ - framework.helpers.ngService = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/services/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Filter into the head - @name {String} - return {String} - */ - framework.helpers.ngFilter = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/filters/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Resource into the head - @name {String} - return {String} - */ - framework.helpers.ngResource = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/resources/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - framework.helpers.ngInclude = function(name) { - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - return $script_create(name); - }; - - framework.on('controller-render-meta', event_render_head); -}; - -exports.uninstall = function() { - delete framework.helpers.ng; - delete framework.helpers.ngInclude; - delete framework.helpers.ngResource; - delete framework.helpers.ngFilter; - delete framework.helpers.ngService; - delete framework.helpers.ngDirective; - delete framework.helpers.ngTemplate; - delete framework.helpers.ngController; - delete framework.helpers.ngLocale; - delete framework.helpers.ngCommon; - framework.removeListener('controller-render-meta', event_render_head); -}; - -function event_render_head(controller) { - var self = controller; - var angularBeg = (self.repository[REPOSITORY_ANGULAR] || '') + (self.repository[REPOSITORY_ANGULAR_COMMON] || '') + (self.repository[REPOSITORY_ANGULAR_LOCALE] || ''); - var angularEnd = (angularBeg.length > 0 ? $script_create('/app.js') : '') + (self.repository[REPOSITORY_ANGULAR_OTHER] || '') + (self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''); - self.repository['$head'] += angularBeg + angularEnd; -} - -function $script_create(url) { - return ''; -} \ No newline at end of file diff --git a/angularjs-common/readme.md b/angularjs-common/readme.md deleted file mode 100644 index c4621ab..0000000 --- a/angularjs-common/readme.md +++ /dev/null @@ -1,15 +0,0 @@ -# How to run it? - -## First step - -``` -npm install total.js -``` - -## Second step - -``` -node index -``` - -Open browser: \ No newline at end of file diff --git a/angularjs-common/views/app.html b/angularjs-common/views/app.html deleted file mode 100644 index 769a79f..0000000 --- a/angularjs-common/views/app.html +++ /dev/null @@ -1,18 +0,0 @@ -@{meta('title', 'description', 'keywords')} - - -@{ngStyle('app')} - - -@{ngLocale('en-us')} - - -@{ngController('home', 'user')} - -
    -
    {{ name }}
    -
    -
    -
    - -@{ngTemplate('list')} \ No newline at end of file diff --git a/angularjs-common/views/layout.html b/angularjs-common/views/layout.html deleted file mode 100644 index 33e1627..0000000 --- a/angularjs-common/views/layout.html +++ /dev/null @@ -1,21 +0,0 @@ - -@{ng('~angular', '~route')} - - - - - @{meta} - - - - - - @{head} - @{favicon('favicon.ico')} - - - - @{body} - - - \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/app/app.js b/angularjs-nedb-rest-resources/app/app.js deleted file mode 100644 index 1a79ba1..0000000 --- a/angularjs-nedb-rest-resources/app/app.js +++ /dev/null @@ -1 +0,0 @@ -var app = angular.module('app', ['ngResource']); diff --git a/angularjs-nedb-rest-resources/app/controllers/user.js b/angularjs-nedb-rest-resources/app/controllers/user.js deleted file mode 100644 index fb6c037..0000000 --- a/angularjs-nedb-rest-resources/app/controllers/user.js +++ /dev/null @@ -1,33 +0,0 @@ -app.controller('UserCtrl', ['$scope', 'User', function($scope, User) { - - $scope.users = User.query(); - $scope.isForm = false; - - $scope.edit = function (_id) { - $scope.user = User.get({ _id: _id }); - $scope.isForm = true; - }; - - $scope.save = function() { - $scope.user.$update({ _id: $scope.user._id }, function () { - $scope.users = User.query(); - }); - $scope.isForm = false; - }; - - $scope.cancel = function() { - $scope.isForm = false; - }; - - $scope.delete = function(_id) { - - User.delete({ _id: _id }, function() { - // Refresh users - $scope.users = User.query(); - alert('User was removed.'); - }); - - $scope.isForm = false; - }; - -}]); \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/app/css/app.css b/angularjs-nedb-rest-resources/app/css/app.css deleted file mode 100644 index 55a22a9..0000000 --- a/angularjs-nedb-rest-resources/app/css/app.css +++ /dev/null @@ -1,5 +0,0 @@ -/*auto*/ - -body { padding:20px; margin:0; font:normal 12px Arial; } -h2 { margin: 0 0 10px 0; padding: 0; font: normal bold 16px Arial; letter-spacing: -1px; } -a { color: #3484EB; } \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/app/resources/user.js b/angularjs-nedb-rest-resources/app/resources/user.js deleted file mode 100644 index 3327b90..0000000 --- a/angularjs-nedb-rest-resources/app/resources/user.js +++ /dev/null @@ -1,3 +0,0 @@ -app.factory('User', function ($resource) { - return $resource('/users/:_id', { _id: '@_id' }, { 'update': { method:'PUT' }}); -}); \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/app/robots.txt b/angularjs-nedb-rest-resources/app/robots.txt deleted file mode 100644 index c2a49f4..0000000 --- a/angularjs-nedb-rest-resources/app/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/angularjs-nedb-rest-resources/app/templates/form.html b/angularjs-nedb-rest-resources/app/templates/form.html deleted file mode 100644 index 65400f6..0000000 --- a/angularjs-nedb-rest-resources/app/templates/form.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -
    -
    -

    Edit user

    -
    -
    Alias:
    -
    -
    -
    E-mail:
    -
    -
    - \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/controllers/default.js b/angularjs-nedb-rest-resources/controllers/default.js deleted file mode 100644 index 5be8fdd..0000000 --- a/angularjs-nedb-rest-resources/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/*', view_app); -}; - -function view_app() { - var self = this; - self.view('app'); -} \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/controllers/user.js b/angularjs-nedb-rest-resources/controllers/user.js deleted file mode 100644 index 5003e06..0000000 --- a/angularjs-nedb-rest-resources/controllers/user.js +++ /dev/null @@ -1,60 +0,0 @@ -exports.install = function() { - F.restful('/users/', [], json_user_query, json_user_get, json_user_save, json_user_delete); - // ... is same as: - // F.route('/users/', json_user_query); - // F.route('/users/{id}/', json_user_get); - // F.route('/users/', json_user_save, ['post']); - // F.route('/users/{id}/', json_user_save, ['put']); - // F.route('/users/{id}/', json_user_delete, ['delete']); -}; - -/* - Description: Get users - Method: GET - Output: JSON -*/ -function json_user_query() { - var self = this; - nedb.users.find({}, self.callback()); -} - -/* - Description: Get user - Method: GET - Output: JSON -*/ -function json_user_get(id) { - var self = this; - nedb.users.findOne({ _id: id }, self.callback()); -} - -/* - Description: Save user - Method: POST - Output: JSON -*/ -function json_user_save(id) { - var self = this; - - console.log('save ->', id); - - // What is it? https://github.com/totaljs/examples/tree/master/changes - self.change('user: save, id: ' + id); - nedb.users.update({_id: id}, self.body, self.callback()); -} - -/* - Description: Delete user - Method: DELETE - Output: JSON -*/ -function json_user_delete(id) { - - var self = this; - - console.log('delete ->', id); - - // What is it? https://github.com/totaljs/examples/tree/master/changes - self.change('user: deleted, id: ' + id); - nedb.users.remove({ '_id': id }, self.callback()); -} \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/databases/users.db b/angularjs-nedb-rest-resources/databases/users.db deleted file mode 100644 index 0c4ca65..0000000 --- a/angularjs-nedb-rest-resources/databases/users.db +++ /dev/null @@ -1,12 +0,0 @@ -{"alias":"Jerrod Zendejas","email":"mail@example.ch","_id":"2FHA9fAo8U3NxfLE"} -{"alias":"Gemma Cusick","email":"mail@example.ch","_id":"6yJCe00nf0W9midW"} -{"alias":"Izola Sage","email":"mail@example.ch","_id":"AGTCYapiLwxkeajr"} -{"alias":"Beth Ramsburg","email":"mail@example.ch","_id":"N8FD1XbOOqeXAEJY"} -{"alias":"Tory Windom","email":"mail@example.ch","_id":"PpPq8KM405rJLqhM"} -{"alias":"Emery Luong","email":"mail@example.ch","_id":"QS8txc2HFLy3W0Xv"} -{"alias":"Hien Schoenborn","email":"mail@example.ch","_id":"RuaOupZPH8sTFS6h"} -{"alias":"Gwyn Mack","email":"mail@example.ch","_id":"ZiBSV0S3dfcOJSoE"} -{"alias":"Sandra Corker","email":"mail@example.ch","_id":"gZedYpRjEOUdURX3"} -{"alias":"Ashlee Headley","email":"mail@example.ch","_id":"qn2MusdyHDv9KW6h"} -{"alias":"Ilona Wetherington","email":"mail@example.ch","_id":"uquKy3cm2xaTnOto"} -{"alias":"Kym Breese","email":"mail@example.ch","_id":"wZrJvHr2509sNF36"} diff --git a/angularjs-nedb-rest-resources/definitions/nedb.js b/angularjs-nedb-rest-resources/definitions/nedb.js deleted file mode 100644 index 50db0b1..0000000 --- a/angularjs-nedb-rest-resources/definitions/nedb.js +++ /dev/null @@ -1,47 +0,0 @@ -var Datastore = require('nedb'); - -db = {}; -db.users = new Datastore(F.path.databases('users.db')); - -db.users.loadDatabase(); -// insert test data -/* -db.users.insert([{ - alias: "Hien Schoenborn", - email: "mail@example.ch" -}, { - alias: "Ashlee Headley", - email: "mail@example.ch" -}, { - alias: "Emery Luong", - email: "mail@example.ch" -}, { - alias: "Jerrod Zendejas", - email: "mail@example.ch" -}, { - alias: "Gwyn Mack", - email: "mail@example.ch" -}, { - alias: "Beth Ramsburg ", - email: "mail@example.ch" -}, { - alias: "Izola Sage", - email: "mail@example.ch" -}, { - alias: "Ilona Wetherington", - email: "mail@example.ch" -}, { - alias: "Kym Breese", - email: "mail@example.ch" -}, { - alias: "Sandra Corker", - email: "mail@example.ch" -}, { - alias: "Gemma Cusick", - email: "mail@example.ch" -}, { - alias: "Tory Windom", - email: "mail@example.ch" -}], F.error()); -*/ -global.nedb = db; \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/index.js b/angularjs-nedb-rest-resources/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs-nedb-rest-resources/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/modules/angular.js b/angularjs-nedb-rest-resources/modules/angular.js deleted file mode 100644 index 6c3d712..0000000 --- a/angularjs-nedb-rest-resources/modules/angular.js +++ /dev/null @@ -1,428 +0,0 @@ -// MIT License -// Copyright Peter Širka -// Version 1.0.0 - -exports.name = 'angular.js'; -exports.version = '1.0.0'; -exports.options = { 'angular-version': '1.5.7', 'angular-i18n-version': '1.5.7' }; - -var fs = require('fs'); -var EXTENSION_JS = '.js'; -var REPOSITORY_ANGULAR = '$angular'; -var REPOSITORY_ANGULAR_LOCALE = '$angular-locale'; -var REPOSITORY_ANGULAR_COMMON = '$angular-common'; -var REPOSITORY_ANGULAR_CONTROLLER = '$angular-controller'; -var REPOSITORY_ANGULAR_OTHER = '$angular-other'; - -exports.install = function(options) { - - U.extend(exports.options, options, true); - - /* - Include: Angular.js CDN into the head - @version {String} - @name {String or String Array} :: optional, example: route or resource - return {String} - */ - framework.helpers.ng = function(name) { - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, name[i]); - return ''; - } - - var isCommon = name[0] === '~'; - - if (isCommon) - name = name.substring(1); - - if (name === undefined) - name = 'angular'; - - if (name === 'core' || name === '' || name === 'base' || name === 'main') - name = 'angular'; - - if (name !== 'angular' && name.indexOf('angular-') === -1) - name = 'angular-' + name; - - var output = self.repository[REPOSITORY_ANGULAR] || ''; - var script = $script_create((isCommon ? '/common/' + name + '.min.js' : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-version'] + '/' + name + '.min.js')); - - if (name === 'angular') - output = script + output; - else - output += script; - - self.repository[REPOSITORY_ANGULAR] = output; - return ''; - }; - - - framework.helpers.ngCommon = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngCommon.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_COMMON] || ''; - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var script = $script_create('/common/' + name); - output += script; - - self.repository[REPOSITORY_ANGULAR_COMMON] = output; - return ''; - }; - - framework.helpers.ngLocale = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 2) { - for (var i = 1; i < length; i++) - framework.helpers.ngLocale.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngLocale.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_LOCALE] || ''; - var isLocal = name[0] === '~'; - var extension = ''; - - if (isLocal) - name = name.substring(1); - - if (name.indexOf('angular-locale_') !== -1) - name = name.replace('angular-locale_', ''); - - if (name.lastIndexOf(EXTENSION_JS) === -1) - extension = EXTENSION_JS; - - output += $script_create(isLocal ? '/i18n/angular-locale_' + name + extension : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-i18n-version'] + '/i18n/angular-locale_' + name + extension); - self.repository[REPOSITORY_ANGULAR_LOCALE] = output; - - return ''; - }; - - /* - Include: Controller into the head - @name {String or String Array} - return {String} - */ - framework.helpers.ngController = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/controllers/' + name); - - self.repository[REPOSITORY_ANGULAR_CONTROLLER] = output; - - return ''; - }; - - /* - Include: Content from file into the body - @name {String} - return {String} - */ - framework.helpers.ngTemplate = function(name, id) { - - var self = this; - - if (id === undefined) - id = name; - - if (name.lastIndexOf('.html') === -1) - name += '.html'; - - if (name[0] === '~') - name = name.substring(1); - else if (name[1] !== '/') - name = '/templates/' + name; - - var key = 'ng-' + name; - var tmp = framework.temporary.views[key]; - - if (tmp === undefined) { - var filename = utils.combine(self.config['directory-public-virtual'], name); - - if (fs.existsSync(filename)) - tmp = fs.readFileSync(filename).toString('utf8'); - else - tmp = ''; - - if (!self.isDebug) - framework.temporary.views[key] = tmp; - } - - return ''; - }; - - /* - Include: Directive into the head - @name {String} - return {String} - */ - framework.helpers.ngDirective = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/directives/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - return ''; - }; - - /* - Include: CSS into the head - @name {String} - return {String} - */ - framework.helpers.ngStyle = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf('.css') === -1) - name += '.css'; - - self.head(name); - return ''; - }; - - /* - Include: Service into the head - @name {String} - return {String} - */ - framework.helpers.ngService = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/services/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Filter into the head - @name {String} - return {String} - */ - framework.helpers.ngFilter = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/filters/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Resource into the head - @name {String} - return {String} - */ - framework.helpers.ngResource = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/resources/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - framework.helpers.ngInclude = function(name) { - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - return $script_create(name); - }; - - framework.on('controller-render-meta', event_render_head); -}; - -exports.uninstall = function() { - delete framework.helpers.ng; - delete framework.helpers.ngInclude; - delete framework.helpers.ngResource; - delete framework.helpers.ngFilter; - delete framework.helpers.ngService; - delete framework.helpers.ngDirective; - delete framework.helpers.ngTemplate; - delete framework.helpers.ngController; - delete framework.helpers.ngLocale; - delete framework.helpers.ngCommon; - framework.removeListener('controller-render-meta', event_render_head); -}; - -function event_render_head(controller) { - var self = controller; - var angularBeg = (self.repository[REPOSITORY_ANGULAR] || '') + (self.repository[REPOSITORY_ANGULAR_COMMON] || '') + (self.repository[REPOSITORY_ANGULAR_LOCALE] || ''); - var angularEnd = (angularBeg.length > 0 ? $script_create('/app.js') : '') + (self.repository[REPOSITORY_ANGULAR_OTHER] || '') + (self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''); - self.repository['$head'] += angularBeg + angularEnd; -} - -function $script_create(url) { - return ''; -} \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/readme.md b/angularjs-nedb-rest-resources/readme.md deleted file mode 100644 index d83e324..0000000 --- a/angularjs-nedb-rest-resources/readme.md +++ /dev/null @@ -1,19 +0,0 @@ -# How to run it? - -## First step - -``` -npm install total.js -npm install nedb -``` - -## Second step - -``` -node index -``` - -Open browser: - -## Documentation und Information about neDB -https://github.com/louischatriot/nedb#compacting-the-database \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/views/app.html b/angularjs-nedb-rest-resources/views/app.html deleted file mode 100644 index b53a2dd..0000000 --- a/angularjs-nedb-rest-resources/views/app.html +++ /dev/null @@ -1,23 +0,0 @@ -@{meta('title', 'description', 'keywords')} - - -@{ngStyle('app')} - -@{ngResource('user')} - - -@{ngLocale('en-us')} - - -@{ngController('user')} - -
    - -

    All users ({{ users.length }})

    - - -
    - -
    \ No newline at end of file diff --git a/angularjs-nedb-rest-resources/views/layout.html b/angularjs-nedb-rest-resources/views/layout.html deleted file mode 100644 index 838aa7b..0000000 --- a/angularjs-nedb-rest-resources/views/layout.html +++ /dev/null @@ -1,20 +0,0 @@ -@{ng('angular', 'resource')} - - - - - @{meta} - - - - - - @{head} - @{favicon('favicon.ico')} - - - - @{body} - - - \ No newline at end of file diff --git a/angularjs-routing/app/app.js b/angularjs-routing/app/app.js deleted file mode 100644 index 2cd239c..0000000 --- a/angularjs-routing/app/app.js +++ /dev/null @@ -1,18 +0,0 @@ -var app = angular.module('app', ['ngRoute']); - -app.config(function($routeProvider, $locationProvider) { - - $locationProvider.html5Mode(true); - - $routeProvider.when('/', { - templateUrl: '/views/home.html', - controller: 'HomeCtrl' - }).when('/users/', { - templateUrl: '/views/users.html', - controller: 'UsersCtrl' - }).when('/products/', { - templateUrl: '/views/products.html', - controller: 'ProductsCtrl' - }).otherwise({ redirectTo: '/' }); - -}); \ No newline at end of file diff --git a/angularjs-routing/app/controllers/home.js b/angularjs-routing/app/controllers/home.js deleted file mode 100644 index b0e2262..0000000 --- a/angularjs-routing/app/controllers/home.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('HomeCtrl', ['$scope', function($scope) { - $scope.name = 'Homepage'; -}]); \ No newline at end of file diff --git a/angularjs-routing/app/controllers/products.js b/angularjs-routing/app/controllers/products.js deleted file mode 100644 index 4b9a115..0000000 --- a/angularjs-routing/app/controllers/products.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('ProductsCtrl', ['$scope', function($scope) { - $scope.name = 'Products'; -}]); \ No newline at end of file diff --git a/angularjs-routing/app/controllers/users.js b/angularjs-routing/app/controllers/users.js deleted file mode 100644 index 3eb924b..0000000 --- a/angularjs-routing/app/controllers/users.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('UsersCtrl', ['$scope', function($scope) { - $scope.name = 'Users'; -}]); \ No newline at end of file diff --git a/angularjs-routing/app/css/app.css b/angularjs-routing/app/css/app.css deleted file mode 100644 index a81dce4..0000000 --- a/angularjs-routing/app/css/app.css +++ /dev/null @@ -1,3 +0,0 @@ -/*auto*/ - -body { padding:20px; margin:0; font:normal 12px Arial; } \ No newline at end of file diff --git a/angularjs-routing/app/robots.txt b/angularjs-routing/app/robots.txt deleted file mode 100644 index c2a49f4..0000000 --- a/angularjs-routing/app/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/angularjs-routing/app/views/home.html b/angularjs-routing/app/views/home.html deleted file mode 100644 index 6721e13..0000000 --- a/angularjs-routing/app/views/home.html +++ /dev/null @@ -1,3 +0,0 @@ -

    HOME VIEW

    -
    -
    Scope: {{ name }}
    \ No newline at end of file diff --git a/angularjs-routing/app/views/products.html b/angularjs-routing/app/views/products.html deleted file mode 100644 index 9734e7a..0000000 --- a/angularjs-routing/app/views/products.html +++ /dev/null @@ -1,3 +0,0 @@ -

    PRODUCTS VIEW

    -
    -
    Scope: {{ name }}
    \ No newline at end of file diff --git a/angularjs-routing/app/views/users.html b/angularjs-routing/app/views/users.html deleted file mode 100644 index 8b9ba3f..0000000 --- a/angularjs-routing/app/views/users.html +++ /dev/null @@ -1,3 +0,0 @@ -

    USERS VIEW

    -
    -
    Scope: {{ name }}
    \ No newline at end of file diff --git a/angularjs-routing/controllers/default.js b/angularjs-routing/controllers/default.js deleted file mode 100644 index d0fcca4..0000000 --- a/angularjs-routing/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - framework.route('/*', view_app); -}; - -function view_app() { - var self = this; - self.view('app'); -} \ No newline at end of file diff --git a/angularjs-routing/index.js b/angularjs-routing/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs-routing/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-routing/modules/angular.js b/angularjs-routing/modules/angular.js deleted file mode 100644 index 6c3d712..0000000 --- a/angularjs-routing/modules/angular.js +++ /dev/null @@ -1,428 +0,0 @@ -// MIT License -// Copyright Peter Širka -// Version 1.0.0 - -exports.name = 'angular.js'; -exports.version = '1.0.0'; -exports.options = { 'angular-version': '1.5.7', 'angular-i18n-version': '1.5.7' }; - -var fs = require('fs'); -var EXTENSION_JS = '.js'; -var REPOSITORY_ANGULAR = '$angular'; -var REPOSITORY_ANGULAR_LOCALE = '$angular-locale'; -var REPOSITORY_ANGULAR_COMMON = '$angular-common'; -var REPOSITORY_ANGULAR_CONTROLLER = '$angular-controller'; -var REPOSITORY_ANGULAR_OTHER = '$angular-other'; - -exports.install = function(options) { - - U.extend(exports.options, options, true); - - /* - Include: Angular.js CDN into the head - @version {String} - @name {String or String Array} :: optional, example: route or resource - return {String} - */ - framework.helpers.ng = function(name) { - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, name[i]); - return ''; - } - - var isCommon = name[0] === '~'; - - if (isCommon) - name = name.substring(1); - - if (name === undefined) - name = 'angular'; - - if (name === 'core' || name === '' || name === 'base' || name === 'main') - name = 'angular'; - - if (name !== 'angular' && name.indexOf('angular-') === -1) - name = 'angular-' + name; - - var output = self.repository[REPOSITORY_ANGULAR] || ''; - var script = $script_create((isCommon ? '/common/' + name + '.min.js' : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-version'] + '/' + name + '.min.js')); - - if (name === 'angular') - output = script + output; - else - output += script; - - self.repository[REPOSITORY_ANGULAR] = output; - return ''; - }; - - - framework.helpers.ngCommon = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngCommon.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_COMMON] || ''; - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var script = $script_create('/common/' + name); - output += script; - - self.repository[REPOSITORY_ANGULAR_COMMON] = output; - return ''; - }; - - framework.helpers.ngLocale = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 2) { - for (var i = 1; i < length; i++) - framework.helpers.ngLocale.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngLocale.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_LOCALE] || ''; - var isLocal = name[0] === '~'; - var extension = ''; - - if (isLocal) - name = name.substring(1); - - if (name.indexOf('angular-locale_') !== -1) - name = name.replace('angular-locale_', ''); - - if (name.lastIndexOf(EXTENSION_JS) === -1) - extension = EXTENSION_JS; - - output += $script_create(isLocal ? '/i18n/angular-locale_' + name + extension : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-i18n-version'] + '/i18n/angular-locale_' + name + extension); - self.repository[REPOSITORY_ANGULAR_LOCALE] = output; - - return ''; - }; - - /* - Include: Controller into the head - @name {String or String Array} - return {String} - */ - framework.helpers.ngController = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/controllers/' + name); - - self.repository[REPOSITORY_ANGULAR_CONTROLLER] = output; - - return ''; - }; - - /* - Include: Content from file into the body - @name {String} - return {String} - */ - framework.helpers.ngTemplate = function(name, id) { - - var self = this; - - if (id === undefined) - id = name; - - if (name.lastIndexOf('.html') === -1) - name += '.html'; - - if (name[0] === '~') - name = name.substring(1); - else if (name[1] !== '/') - name = '/templates/' + name; - - var key = 'ng-' + name; - var tmp = framework.temporary.views[key]; - - if (tmp === undefined) { - var filename = utils.combine(self.config['directory-public-virtual'], name); - - if (fs.existsSync(filename)) - tmp = fs.readFileSync(filename).toString('utf8'); - else - tmp = ''; - - if (!self.isDebug) - framework.temporary.views[key] = tmp; - } - - return ''; - }; - - /* - Include: Directive into the head - @name {String} - return {String} - */ - framework.helpers.ngDirective = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/directives/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - return ''; - }; - - /* - Include: CSS into the head - @name {String} - return {String} - */ - framework.helpers.ngStyle = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf('.css') === -1) - name += '.css'; - - self.head(name); - return ''; - }; - - /* - Include: Service into the head - @name {String} - return {String} - */ - framework.helpers.ngService = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/services/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Filter into the head - @name {String} - return {String} - */ - framework.helpers.ngFilter = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/filters/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Resource into the head - @name {String} - return {String} - */ - framework.helpers.ngResource = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/resources/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - framework.helpers.ngInclude = function(name) { - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - return $script_create(name); - }; - - framework.on('controller-render-meta', event_render_head); -}; - -exports.uninstall = function() { - delete framework.helpers.ng; - delete framework.helpers.ngInclude; - delete framework.helpers.ngResource; - delete framework.helpers.ngFilter; - delete framework.helpers.ngService; - delete framework.helpers.ngDirective; - delete framework.helpers.ngTemplate; - delete framework.helpers.ngController; - delete framework.helpers.ngLocale; - delete framework.helpers.ngCommon; - framework.removeListener('controller-render-meta', event_render_head); -}; - -function event_render_head(controller) { - var self = controller; - var angularBeg = (self.repository[REPOSITORY_ANGULAR] || '') + (self.repository[REPOSITORY_ANGULAR_COMMON] || '') + (self.repository[REPOSITORY_ANGULAR_LOCALE] || ''); - var angularEnd = (angularBeg.length > 0 ? $script_create('/app.js') : '') + (self.repository[REPOSITORY_ANGULAR_OTHER] || '') + (self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''); - self.repository['$head'] += angularBeg + angularEnd; -} - -function $script_create(url) { - return ''; -} \ No newline at end of file diff --git a/angularjs-routing/readme.md b/angularjs-routing/readme.md deleted file mode 100644 index c4621ab..0000000 --- a/angularjs-routing/readme.md +++ /dev/null @@ -1,15 +0,0 @@ -# How to run it? - -## First step - -``` -npm install total.js -``` - -## Second step - -``` -node index -``` - -Open browser: \ No newline at end of file diff --git a/angularjs-routing/views/app.html b/angularjs-routing/views/app.html deleted file mode 100644 index 2d67212..0000000 --- a/angularjs-routing/views/app.html +++ /dev/null @@ -1,19 +0,0 @@ -@{meta('Angular.js routing', 'description', 'keywords')} - - -@{ngStyle('app')} - - -@{ngController('home', 'users', 'products')} - - -
    -
    -
    -
    - -
    \ No newline at end of file diff --git a/angularjs-routing/views/layout.html b/angularjs-routing/views/layout.html deleted file mode 100644 index d89da58..0000000 --- a/angularjs-routing/views/layout.html +++ /dev/null @@ -1,22 +0,0 @@ - -@{ng('angular', 'route')} - - - - - @{meta} - - - - - - - @{head} - @{favicon('favicon.ico')} - - - - @{body} - - - \ No newline at end of file diff --git a/angularjs-websocket/app/app.js b/angularjs-websocket/app/app.js deleted file mode 100644 index 03c24e0..0000000 --- a/angularjs-websocket/app/app.js +++ /dev/null @@ -1 +0,0 @@ -var app = angular.module('app', []); diff --git a/angularjs-websocket/app/common/empty b/angularjs-websocket/app/common/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs-websocket/app/controllers/home.js b/angularjs-websocket/app/controllers/home.js deleted file mode 100644 index 235dd1e..0000000 --- a/angularjs-websocket/app/controllers/home.js +++ /dev/null @@ -1,33 +0,0 @@ -app.controller('HomeCtrl', ['$scope', '$timeout', 'websocketService', function($scope, $timeout, websocketService) { - - $scope.users = []; - $scope.messages = []; - $scope.alias = ''; - $scope.message = ''; - $scope.isLogged = false; - - $scope.$on('websocket', function(e, type, data) { - if (type === 'users') - $scope.users = data; - else - $scope.messages = data; - }); - - $scope.login = function() { - websocketService.login('ws://localhost:8000/', $scope.alias); - $scope.isLogged = true; - }; - - $scope.logoff = function() { - websocketService.logoff(); - $scope.alias = ''; - $scope.isLogged = false; - $scope.message = ''; - }; - - $scope.send = function() { - websocketService.send($scope.message); - $scope.message = ''; - }; - -}]); \ No newline at end of file diff --git a/angularjs-websocket/app/css/app.css b/angularjs-websocket/app/css/app.css deleted file mode 100644 index 44454d1..0000000 --- a/angularjs-websocket/app/css/app.css +++ /dev/null @@ -1,25 +0,0 @@ -/*auto*/ - -body { padding:20px; margin:0; font:normal 12px Arial; background-color: #F0F0F0; } -form { padding: 0; margin: 0; } - -.users { float: left; width: 200px; padding-right: 25px; } -.chat { float: left; width: 550px; border-left: 1px solid #E0E0E0; min-height: 500px; padding-left: 20px; } -.users ul { list-style-type: none; margin: 10px 0 0 0; padding: 0; } -.users li { border-bottom: 1px dotted #E0E0E0; padding: 4px 0; font-size: 11px; } - -.content { width: 800px; border: 1px solid #E0E0E0; margin: 0 auto; padding: 30px; border-radius: 4px; background-color: white; } -input { border: 1px solid #E0E0E0; border-radius: 20px; background-color: white; outline: 0; background-color: #F0F0F0; font: normal normal 12px Arial; padding: 5px 10px; color: #505050; } -input:focus { background-color: white; border: 1px solid silver; } -input:disabled { color: silver; background-color: #E0E0E0; } - -.cl { clear: both; } -.form-description { font-size: 11px; color: #AAB2BD; } - -.logoff { outline: 0; cursor: pointer; padding: 2px 5px; border-radius: 4px; font: normal 11px Arial; color: white; background-color: #EB3F46; border: 0; display: block; width: 50px; margin: 10px 0 0 0; } -.logoff:hover { background-color: #EB4B36; } - -.messages { margin: 0; padding: 0; list-style-type: none; } -.messages li { padding: 14px; border-radius: 4px; font-size: 11px; color: gray; } -.messages li:nth-child(odd) { background-color: #F5F5F5; } -.messages span { display: block; margin-bottom: 4px; font-size: 12px; font-weight: bold; color: #505050; } \ No newline at end of file diff --git a/angularjs-websocket/app/robots.txt b/angularjs-websocket/app/robots.txt deleted file mode 100644 index c2a49f4..0000000 --- a/angularjs-websocket/app/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/angularjs-websocket/app/services/websocketService.js b/angularjs-websocket/app/services/websocketService.js deleted file mode 100644 index cb7a2be..0000000 --- a/angularjs-websocket/app/services/websocketService.js +++ /dev/null @@ -1,50 +0,0 @@ -app.factory('websocketService', ['$rootScope', '$timeout', function($rootScope, $timeout) { - - var _ws; - var _username = ''; - var messages = []; - var users = []; - - function onMessage(e) { - var data = JSON.parse(decodeURIComponent(e.data)); - $rootScope.$apply(function() { - - if (data.type === 'users') { - users = data.message; - $rootScope.$broadcast('websocket', 'users', users); - return; - } - - messages.splice(0, 0, { user: data.user, message: data.message, date: data.date }); - $rootScope.$broadcast('websocket', 'message', messages); - }); - } - - return { - - login: function(url, username) { - - _username = username; - - _ws = new WebSocket(url); - _ws.onmessage = onMessage; - _ws.onopen = function () { - _ws.send(encodeURIComponent(JSON.stringify({ type: 'change', message: _username }))); - }; - - }, - - logoff: function() { - _ws.close(); - _ws = null; - _username = ''; - users = []; - $rootScope.$broadcast('websocket', 'users', users); - }, - - send: function(message) { - _ws.send(encodeURIComponent(JSON.stringify({ type: 'message', message: message }))); - } - }; - -}]); \ No newline at end of file diff --git a/angularjs-websocket/config-debug b/angularjs-websocket/config-debug deleted file mode 100644 index da82e27..0000000 --- a/angularjs-websocket/config-debug +++ /dev/null @@ -1,2 +0,0 @@ -default-ip : localhost -default-port : 8000 \ No newline at end of file diff --git a/angularjs-websocket/controllers/default.js b/angularjs-websocket/controllers/default.js deleted file mode 100644 index 02af69b..0000000 --- a/angularjs-websocket/controllers/default.js +++ /dev/null @@ -1,35 +0,0 @@ -exports.install = function() { - F.route('/*', view_app); - F.websocket('/', socket_chat, ['json']); -}; - -function view_app() { - var self = this; - self.view('app'); -} - -function socket_chat() { - - var self = this; - - // Refreshes online users - var refresh = function() { - var users = []; - self.all(client => users.push(client.alias)); - self.send({ type: 'users', message: users }); - }; - - self.on('message', function(client, message) { - - if (message.type === 'change') { - client.alias = message.message; - refresh(); - return; - } - - self.send({ user: client.alias, type: 'message', message: message.message, date: new Date() }); - - }); - - self.on('close', (client) => refresh()); -} \ No newline at end of file diff --git a/angularjs-websocket/index.js b/angularjs-websocket/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs-websocket/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs-websocket/modules/angular.js b/angularjs-websocket/modules/angular.js deleted file mode 100644 index 6c3d712..0000000 --- a/angularjs-websocket/modules/angular.js +++ /dev/null @@ -1,428 +0,0 @@ -// MIT License -// Copyright Peter Širka -// Version 1.0.0 - -exports.name = 'angular.js'; -exports.version = '1.0.0'; -exports.options = { 'angular-version': '1.5.7', 'angular-i18n-version': '1.5.7' }; - -var fs = require('fs'); -var EXTENSION_JS = '.js'; -var REPOSITORY_ANGULAR = '$angular'; -var REPOSITORY_ANGULAR_LOCALE = '$angular-locale'; -var REPOSITORY_ANGULAR_COMMON = '$angular-common'; -var REPOSITORY_ANGULAR_CONTROLLER = '$angular-controller'; -var REPOSITORY_ANGULAR_OTHER = '$angular-other'; - -exports.install = function(options) { - - U.extend(exports.options, options, true); - - /* - Include: Angular.js CDN into the head - @version {String} - @name {String or String Array} :: optional, example: route or resource - return {String} - */ - framework.helpers.ng = function(name) { - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, name[i]); - return ''; - } - - var isCommon = name[0] === '~'; - - if (isCommon) - name = name.substring(1); - - if (name === undefined) - name = 'angular'; - - if (name === 'core' || name === '' || name === 'base' || name === 'main') - name = 'angular'; - - if (name !== 'angular' && name.indexOf('angular-') === -1) - name = 'angular-' + name; - - var output = self.repository[REPOSITORY_ANGULAR] || ''; - var script = $script_create((isCommon ? '/common/' + name + '.min.js' : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-version'] + '/' + name + '.min.js')); - - if (name === 'angular') - output = script + output; - else - output += script; - - self.repository[REPOSITORY_ANGULAR] = output; - return ''; - }; - - - framework.helpers.ngCommon = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngCommon.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_COMMON] || ''; - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var script = $script_create('/common/' + name); - output += script; - - self.repository[REPOSITORY_ANGULAR_COMMON] = output; - return ''; - }; - - framework.helpers.ngLocale = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 2) { - for (var i = 1; i < length; i++) - framework.helpers.ngLocale.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngLocale.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_LOCALE] || ''; - var isLocal = name[0] === '~'; - var extension = ''; - - if (isLocal) - name = name.substring(1); - - if (name.indexOf('angular-locale_') !== -1) - name = name.replace('angular-locale_', ''); - - if (name.lastIndexOf(EXTENSION_JS) === -1) - extension = EXTENSION_JS; - - output += $script_create(isLocal ? '/i18n/angular-locale_' + name + extension : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-i18n-version'] + '/i18n/angular-locale_' + name + extension); - self.repository[REPOSITORY_ANGULAR_LOCALE] = output; - - return ''; - }; - - /* - Include: Controller into the head - @name {String or String Array} - return {String} - */ - framework.helpers.ngController = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/controllers/' + name); - - self.repository[REPOSITORY_ANGULAR_CONTROLLER] = output; - - return ''; - }; - - /* - Include: Content from file into the body - @name {String} - return {String} - */ - framework.helpers.ngTemplate = function(name, id) { - - var self = this; - - if (id === undefined) - id = name; - - if (name.lastIndexOf('.html') === -1) - name += '.html'; - - if (name[0] === '~') - name = name.substring(1); - else if (name[1] !== '/') - name = '/templates/' + name; - - var key = 'ng-' + name; - var tmp = framework.temporary.views[key]; - - if (tmp === undefined) { - var filename = utils.combine(self.config['directory-public-virtual'], name); - - if (fs.existsSync(filename)) - tmp = fs.readFileSync(filename).toString('utf8'); - else - tmp = ''; - - if (!self.isDebug) - framework.temporary.views[key] = tmp; - } - - return ''; - }; - - /* - Include: Directive into the head - @name {String} - return {String} - */ - framework.helpers.ngDirective = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/directives/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - return ''; - }; - - /* - Include: CSS into the head - @name {String} - return {String} - */ - framework.helpers.ngStyle = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf('.css') === -1) - name += '.css'; - - self.head(name); - return ''; - }; - - /* - Include: Service into the head - @name {String} - return {String} - */ - framework.helpers.ngService = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/services/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Filter into the head - @name {String} - return {String} - */ - framework.helpers.ngFilter = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/filters/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Resource into the head - @name {String} - return {String} - */ - framework.helpers.ngResource = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/resources/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - framework.helpers.ngInclude = function(name) { - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - return $script_create(name); - }; - - framework.on('controller-render-meta', event_render_head); -}; - -exports.uninstall = function() { - delete framework.helpers.ng; - delete framework.helpers.ngInclude; - delete framework.helpers.ngResource; - delete framework.helpers.ngFilter; - delete framework.helpers.ngService; - delete framework.helpers.ngDirective; - delete framework.helpers.ngTemplate; - delete framework.helpers.ngController; - delete framework.helpers.ngLocale; - delete framework.helpers.ngCommon; - framework.removeListener('controller-render-meta', event_render_head); -}; - -function event_render_head(controller) { - var self = controller; - var angularBeg = (self.repository[REPOSITORY_ANGULAR] || '') + (self.repository[REPOSITORY_ANGULAR_COMMON] || '') + (self.repository[REPOSITORY_ANGULAR_LOCALE] || ''); - var angularEnd = (angularBeg.length > 0 ? $script_create('/app.js') : '') + (self.repository[REPOSITORY_ANGULAR_OTHER] || '') + (self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''); - self.repository['$head'] += angularBeg + angularEnd; -} - -function $script_create(url) { - return ''; -} \ No newline at end of file diff --git a/angularjs-websocket/readme.md b/angularjs-websocket/readme.md deleted file mode 100644 index fcbdd12..0000000 --- a/angularjs-websocket/readme.md +++ /dev/null @@ -1,15 +0,0 @@ -# How to run it? - -## First step - -``` -npm install total.js -``` - -## Second step - -``` -node index -``` - -Open browser: \ No newline at end of file diff --git a/angularjs-websocket/views/app.html b/angularjs-websocket/views/app.html deleted file mode 100644 index 592cf8f..0000000 --- a/angularjs-websocket/views/app.html +++ /dev/null @@ -1,53 +0,0 @@ -@{meta('Angular.js WebSocket Chat', 'description', 'keywords')} - - -@{ngService('websocketService')} - - -@{ngStyle('app')} - - -@{ngLocale('en-us')} - - -@{ngController('home')} - -
    - -
    -
    Firstly you must type your username:
    -
    - -
    -
    - -
    -
    -
    -
    Online users ({{ users.length }})
    -
      -
    • {{ user }}
    • -
    -
    -
    -
    -
    Your message:
    -
    - -
    -
    -
    -
      -
    • - {{ message.date | date: 'yyyy-MM-dd HH:mm:ss' }} - {{ message.user }} - {{ message.message }} -
    • -
    -
    -
    - -
     
    - -
    - -@{ngTemplate('list')} \ No newline at end of file diff --git a/angularjs-websocket/views/layout.html b/angularjs-websocket/views/layout.html deleted file mode 100644 index ebcaf46..0000000 --- a/angularjs-websocket/views/layout.html +++ /dev/null @@ -1,19 +0,0 @@ - -@{ng('angular')} - - - - - - - - - - @{import('meta', 'head')} - - - - @{body} - - - \ No newline at end of file diff --git a/angularjs/app/app.js b/angularjs/app/app.js deleted file mode 100644 index 03c24e0..0000000 --- a/angularjs/app/app.js +++ /dev/null @@ -1 +0,0 @@ -var app = angular.module('app', []); diff --git a/angularjs/app/common/empty b/angularjs/app/common/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs/app/controllers/home.js b/angularjs/app/controllers/home.js deleted file mode 100644 index 66418a6..0000000 --- a/angularjs/app/controllers/home.js +++ /dev/null @@ -1,4 +0,0 @@ -app.controller('HomeCtrl', ['$scope', function($scope) { - $scope.name = 'total.js + angular.js = awesome'; - $scope.users = [{ name: 'Peter', age: 30 }, { name: 'Michal', age: 34 }, { name: 'Lucia', age: 33 }]; -}]); \ No newline at end of file diff --git a/angularjs/app/controllers/user.js b/angularjs/app/controllers/user.js deleted file mode 100644 index 28e23d6..0000000 --- a/angularjs/app/controllers/user.js +++ /dev/null @@ -1,3 +0,0 @@ -app.controller('UserCtrl', ['$scope', function($scope) { - $scope.name = 'user'; -}]); \ No newline at end of file diff --git a/angularjs/app/css/app.css b/angularjs/app/css/app.css deleted file mode 100644 index a81dce4..0000000 --- a/angularjs/app/css/app.css +++ /dev/null @@ -1,3 +0,0 @@ -/*auto*/ - -body { padding:20px; margin:0; font:normal 12px Arial; } \ No newline at end of file diff --git a/angularjs/app/directives/empty b/angularjs/app/directives/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs/app/filters/empty b/angularjs/app/filters/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs/app/resources/empty b/angularjs/app/resources/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs/app/robots.txt b/angularjs/app/robots.txt deleted file mode 100644 index c2a49f4..0000000 --- a/angularjs/app/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/angularjs/app/services/empty b/angularjs/app/services/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs/app/templates/list.html b/angularjs/app/templates/list.html deleted file mode 100644 index fdf85e2..0000000 --- a/angularjs/app/templates/list.html +++ /dev/null @@ -1,3 +0,0 @@ -
    {{ user.name }}
    -
    {{ user.age }} years old
    -
    \ No newline at end of file diff --git a/angularjs/app/views/empty b/angularjs/app/views/empty deleted file mode 100644 index e69de29..0000000 diff --git a/angularjs/controllers/default.js b/angularjs/controllers/default.js deleted file mode 100644 index d0fcca4..0000000 --- a/angularjs/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - framework.route('/*', view_app); -}; - -function view_app() { - var self = this; - self.view('app'); -} \ No newline at end of file diff --git a/angularjs/index.js b/angularjs/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/angularjs/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/angularjs/modules/angular.js b/angularjs/modules/angular.js deleted file mode 100644 index 6c3d712..0000000 --- a/angularjs/modules/angular.js +++ /dev/null @@ -1,428 +0,0 @@ -// MIT License -// Copyright Peter Širka -// Version 1.0.0 - -exports.name = 'angular.js'; -exports.version = '1.0.0'; -exports.options = { 'angular-version': '1.5.7', 'angular-i18n-version': '1.5.7' }; - -var fs = require('fs'); -var EXTENSION_JS = '.js'; -var REPOSITORY_ANGULAR = '$angular'; -var REPOSITORY_ANGULAR_LOCALE = '$angular-locale'; -var REPOSITORY_ANGULAR_COMMON = '$angular-common'; -var REPOSITORY_ANGULAR_CONTROLLER = '$angular-controller'; -var REPOSITORY_ANGULAR_OTHER = '$angular-other'; - -exports.install = function(options) { - - U.extend(exports.options, options, true); - - /* - Include: Angular.js CDN into the head - @version {String} - @name {String or String Array} :: optional, example: route or resource - return {String} - */ - framework.helpers.ng = function(name) { - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ng.call(self, name[i]); - return ''; - } - - var isCommon = name[0] === '~'; - - if (isCommon) - name = name.substring(1); - - if (name === undefined) - name = 'angular'; - - if (name === 'core' || name === '' || name === 'base' || name === 'main') - name = 'angular'; - - if (name !== 'angular' && name.indexOf('angular-') === -1) - name = 'angular-' + name; - - var output = self.repository[REPOSITORY_ANGULAR] || ''; - var script = $script_create((isCommon ? '/common/' + name + '.min.js' : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-version'] + '/' + name + '.min.js')); - - if (name === 'angular') - output = script + output; - else - output += script; - - self.repository[REPOSITORY_ANGULAR] = output; - return ''; - }; - - - framework.helpers.ngCommon = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngCommon.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_COMMON] || ''; - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var script = $script_create('/common/' + name); - output += script; - - self.repository[REPOSITORY_ANGULAR_COMMON] = output; - return ''; - }; - - framework.helpers.ngLocale = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 2) { - for (var i = 1; i < length; i++) - framework.helpers.ngLocale.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngLocale.call(self, name[i]); - return ''; - } - - var output = self.repository[REPOSITORY_ANGULAR_LOCALE] || ''; - var isLocal = name[0] === '~'; - var extension = ''; - - if (isLocal) - name = name.substring(1); - - if (name.indexOf('angular-locale_') !== -1) - name = name.replace('angular-locale_', ''); - - if (name.lastIndexOf(EXTENSION_JS) === -1) - extension = EXTENSION_JS; - - output += $script_create(isLocal ? '/i18n/angular-locale_' + name + extension : '//cdnjs.cloudflare.com/ajax/libs/angular.js/' + exports.options['angular-i18n-version'] + '/i18n/angular-locale_' + name + extension); - self.repository[REPOSITORY_ANGULAR_LOCALE] = output; - - return ''; - }; - - /* - Include: Controller into the head - @name {String or String Array} - return {String} - */ - framework.helpers.ngController = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngController.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/controllers/' + name); - - self.repository[REPOSITORY_ANGULAR_CONTROLLER] = output; - - return ''; - }; - - /* - Include: Content from file into the body - @name {String} - return {String} - */ - framework.helpers.ngTemplate = function(name, id) { - - var self = this; - - if (id === undefined) - id = name; - - if (name.lastIndexOf('.html') === -1) - name += '.html'; - - if (name[0] === '~') - name = name.substring(1); - else if (name[1] !== '/') - name = '/templates/' + name; - - var key = 'ng-' + name; - var tmp = framework.temporary.views[key]; - - if (tmp === undefined) { - var filename = utils.combine(self.config['directory-public-virtual'], name); - - if (fs.existsSync(filename)) - tmp = fs.readFileSync(filename).toString('utf8'); - else - tmp = ''; - - if (!self.isDebug) - framework.temporary.views[key] = tmp; - } - - return ''; - }; - - /* - Include: Directive into the head - @name {String} - return {String} - */ - framework.helpers.ngDirective = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngDirective.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/directives/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - return ''; - }; - - /* - Include: CSS into the head - @name {String} - return {String} - */ - framework.helpers.ngStyle = function(name) { - - var self = this; - var length = arguments.length; - - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngStyle.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf('.css') === -1) - name += '.css'; - - self.head(name); - return ''; - }; - - /* - Include: Service into the head - @name {String} - return {String} - */ - framework.helpers.ngService = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngService.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/services/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Filter into the head - @name {String} - return {String} - */ - framework.helpers.ngFilter = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngFilter.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/filters/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - /* - Include: Resource into the head - @name {String} - return {String} - */ - framework.helpers.ngResource = function(name) { - - var self = this; - - var length = arguments.length; - if (length > 1) { - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, arguments[i]); - return ''; - } - - if (name instanceof Array) { - length = name.length; - for (var i = 0; i < length; i++) - framework.helpers.ngResource.call(self, name[i]); - return ''; - } - - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - - var output = self.repository[REPOSITORY_ANGULAR_OTHER] || ''; - var isLocal = name[0] === '~'; - - if (isLocal) - name = name.substring(1); - - output += $script_create('/resources/' + name); - self.repository[REPOSITORY_ANGULAR_OTHER] = output; - - return ''; - }; - - framework.helpers.ngInclude = function(name) { - if (name.lastIndexOf(EXTENSION_JS) === -1) - name += EXTENSION_JS; - return $script_create(name); - }; - - framework.on('controller-render-meta', event_render_head); -}; - -exports.uninstall = function() { - delete framework.helpers.ng; - delete framework.helpers.ngInclude; - delete framework.helpers.ngResource; - delete framework.helpers.ngFilter; - delete framework.helpers.ngService; - delete framework.helpers.ngDirective; - delete framework.helpers.ngTemplate; - delete framework.helpers.ngController; - delete framework.helpers.ngLocale; - delete framework.helpers.ngCommon; - framework.removeListener('controller-render-meta', event_render_head); -}; - -function event_render_head(controller) { - var self = controller; - var angularBeg = (self.repository[REPOSITORY_ANGULAR] || '') + (self.repository[REPOSITORY_ANGULAR_COMMON] || '') + (self.repository[REPOSITORY_ANGULAR_LOCALE] || ''); - var angularEnd = (angularBeg.length > 0 ? $script_create('/app.js') : '') + (self.repository[REPOSITORY_ANGULAR_OTHER] || '') + (self.repository[REPOSITORY_ANGULAR_CONTROLLER] || ''); - self.repository['$head'] += angularBeg + angularEnd; -} - -function $script_create(url) { - return ''; -} \ No newline at end of file diff --git a/angularjs/readme.md b/angularjs/readme.md deleted file mode 100644 index c4621ab..0000000 --- a/angularjs/readme.md +++ /dev/null @@ -1,15 +0,0 @@ -# How to run it? - -## First step - -``` -npm install total.js -``` - -## Second step - -``` -node index -``` - -Open browser: \ No newline at end of file diff --git a/angularjs/views/app.html b/angularjs/views/app.html deleted file mode 100644 index 769a79f..0000000 --- a/angularjs/views/app.html +++ /dev/null @@ -1,18 +0,0 @@ -@{meta('title', 'description', 'keywords')} - - -@{ngStyle('app')} - - -@{ngLocale('en-us')} - - -@{ngController('home', 'user')} - -
    -
    {{ name }}
    -
    -
    -
    - -@{ngTemplate('list')} \ No newline at end of file diff --git a/angularjs/views/layout.html b/angularjs/views/layout.html deleted file mode 100644 index 1252b8f..0000000 --- a/angularjs/views/layout.html +++ /dev/null @@ -1,20 +0,0 @@ -@{ng('angular', 'resource', 'route')} - - - - - @{meta} - - - - - - @{head} - @{favicon('favicon.ico')} - - - - @{body} - - - \ No newline at end of file From 03bae6559a52610202496cc636a0bcf0f187bc89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 09:20:03 +0200 Subject: [PATCH 061/157] Updated example. --- assertion-testing/controllers/default.js | 12 +++--------- assertion-testing/definitions/func.js | 3 +++ assertion-testing/readme.md | 2 +- assertion-testing/tests/default.js | 10 +++++----- 4 files changed, 12 insertions(+), 15 deletions(-) create mode 100644 assertion-testing/definitions/func.js diff --git a/assertion-testing/controllers/default.js b/assertion-testing/controllers/default.js index 790a3b9..742897f 100644 --- a/assertion-testing/controllers/default.js +++ b/assertion-testing/controllers/default.js @@ -1,13 +1,7 @@ exports.install = function() { - F.route('/1/', test1); - F.route('/2/', test2); - F.route('/3/', test3, ['post', 'json']); -}; - -exports.functions = { - increment: function(num) { - return num + 1; - } + ROUTE('/1/', test1); + ROUTE('/2/', test2); + ROUTE('/3/', test3, ['post', 'json']); }; function test1() { diff --git a/assertion-testing/definitions/func.js b/assertion-testing/definitions/func.js new file mode 100644 index 0000000..e987ba7 --- /dev/null +++ b/assertion-testing/definitions/func.js @@ -0,0 +1,3 @@ +FUNC.inc = function(num) { + return num + 1; +}; \ No newline at end of file diff --git a/assertion-testing/readme.md b/assertion-testing/readme.md index e18a52c..050ca96 100644 --- a/assertion-testing/readme.md +++ b/assertion-testing/readme.md @@ -1,4 +1,4 @@ # Unit-Testing -- Total.js `+v2.7.0` +- Total.js `+v3.3.0` - run `$ node test.js` \ No newline at end of file diff --git a/assertion-testing/tests/default.js b/assertion-testing/tests/default.js index e2ce43b..5453880 100644 --- a/assertion-testing/tests/default.js +++ b/assertion-testing/tests/default.js @@ -1,9 +1,9 @@ -TEST('controller.increment()', function() { - FAIL(F.controller('default').functions.increment(1) !== 2); +TEST('FUNC.inc()', function() { + FAIL(FUNC.inc(1) !== 2); }); TEST('Test URL 1', '/1/', function(builder) { - // builder === RESTBuilder + // builder === RESTBuilder builder.get(); builder.exec(function(err, response, output) { FAIL(output.response !== '1'); @@ -11,7 +11,7 @@ TEST('Test URL 1', '/1/', function(builder) { }); TEST('Test URL 2', '/2/', function(builder) { - // builder === RESTBuilder + // builder === RESTBuilder builder.get(); builder.exec(function(err, response, output) { FAIL(output.response !== '2', 'additional description'); @@ -20,7 +20,7 @@ TEST('Test URL 2', '/2/', function(builder) { }); TEST('Test URL 3', '/3/', function(builder) { - // builder === RESTBuilder + // builder === RESTBuilder builder.json({ data: 4 }); builder.exec(function(err, response) { FAIL(response.data !== 3); From e1014e816dd52c5c7e20f5779e5add745667da00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 09:21:16 +0200 Subject: [PATCH 062/157] Updated Total.js version. --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 22c3135..0831506 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ ## IMPORTANT NOTE: -All examples are customized for `+v2.6.x` version. +All examples are optimized for Total.js `+v3.3.x` version. --- From c344f76aa87e413a6f3a55bfd6925296890a6e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 10:20:04 +0200 Subject: [PATCH 063/157] Updated examples. --- async/controllers/default.js | 129 ++------------------- async/views/index.html | 2 +- authorization/config | 5 + authorization/config-debug | 5 - authorization/controllers/default.js | 26 ++--- authorization/databases/users-logs.nosql | 16 --- authorization/databases/users.nosql | 2 +- authorization/definitions/auth.js | 35 ++++++ authorization/definitions/authorization.js | 40 ------- authorization/models/user.js | 32 ----- authorization/readme.md | 12 +- authorization/resources/default.resource | 7 +- authorization/schemas/users.js | 50 ++++++++ authorization/views/homepage.html | 63 +++++----- 14 files changed, 149 insertions(+), 275 deletions(-) create mode 100644 authorization/config delete mode 100644 authorization/config-debug delete mode 100644 authorization/databases/users-logs.nosql create mode 100644 authorization/definitions/auth.js delete mode 100644 authorization/definitions/authorization.js delete mode 100644 authorization/models/user.js create mode 100644 authorization/schemas/users.js diff --git a/async/controllers/default.js b/async/controllers/default.js index f68a36a..edaa419 100644 --- a/async/controllers/default.js +++ b/async/controllers/default.js @@ -1,131 +1,20 @@ exports.install = function() { - F.route('/', json_index); - - // Recommend: - F.route('/array/', json_array); - F.route('/array2/', json_array2); - F.route('/number/', json_number); + ROUTE('/', json_index); }; function json_index() { var self = this; - var response = []; - var async = new U.Async(); - - async.await(function(complete) { - U.request('https://www.google.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.google.com -> ' + output); - complete(); - }); - }); - - async.await(function(complete) { - U.request('http://www.expressjs.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.expressjs.com -> ' + output); - complete(); - }); - }); - - async.await(function(complete) { - U.request('http://www.yahoo.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.yahoo.com -> ' + output); - complete(); - }); - }); - - async.await('partial', function(complete) { - U.request('http://www.totaljs.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.totaljs.com -> ' + output); - complete(); - }); - }); - - // waiting for await('partial') - async.wait('waiting 1', 'partial', function(complete) { - console.log('waiting 1 complete'); - setTimeout(() => complete(), 1000); - }); - - // waiting for wait('waiting') - async.wait('waiting 2', 'waiting 1', function(complete) { - console.log('waiting 2 complete'); - setTimeout(() => complete(), 1000); - }); - - async.run(function() { - if (self.xhr) - return self.json(response); - self.view('index', response); - }); -} - -function json_array() { - var async = []; - var response = []; - var self = this; - - async.push(function(next) { - U.request('https://www.google.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.google.com -> ' + output); - next(); - }); - }); + var model = []; + var url = ['https://www.google.com', 'http://www.expressjs.com', 'http://www.yahoo.com', 'http://www.totaljs.com']; - async.push(function(next) { - U.request('http://www.expressjs.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.expressjs.com -> ' + output); + url.wait(function(url, next) { + RESTBuilder.GET(url).exec(function(err, response, output) { + // "response" can contain only parsed JSON/XML/URLEncoded, so in this case the response will be nullable + model.push({ url: url, length: output.response.length }); next(); }); + }, function() { + self.view('index', model); }); - - async.push(function(next) { - U.request('http://www.yahoo.com', ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push('www.yahoo.com -> ' + output); - next(); - }); - }); - - async.async(() => self.json(response)); -} - -function json_array2() { - var url = ['https://www.google.com', 'http://www.expressjs.com', 'http://www.yahoo.com']; - var response = []; - var self = this; - - url.wait(function(item, next) { - U.request(item, ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push(item + ' -> ' + output); - next(); - }); - }, () => self.json(response)); -} - -function json_number() { - - var self = this; - var response = []; - var url = ['https://www.google.com', 'http://www.expressjs.com', 'http://www.yahoo.com']; - var count = url.length; - - count.async(function(index, next) { - - index -= 1; - - U.request(url[index], ['get'], function(err, data) { - var output = err ? 'error' : data.length.toString(); - response.push(url[index] + ' -> ' + output); - next(); - }); - - }, () => self.json(response)); } \ No newline at end of file diff --git a/async/views/index.html b/async/views/index.html index cf7863a..439aef4 100644 --- a/async/views/index.html +++ b/async/views/index.html @@ -19,7 +19,7 @@ @{foreach m in model} -
    @{m}
    +
    Length of content: @{m.url} - @{m.length.filesize(2)}
    @{end} diff --git a/authorization/config b/authorization/config new file mode 100644 index 0000000..46c31b0 --- /dev/null +++ b/authorization/config @@ -0,0 +1,5 @@ +name : Total.js Auth example + +// IMPORTANT SETTINGS: +cookie : __user +cookie_secret : Total2019 \ No newline at end of file diff --git a/authorization/config-debug b/authorization/config-debug deleted file mode 100644 index d44c4d5..0000000 --- a/authorization/config-debug +++ /dev/null @@ -1,5 +0,0 @@ -name : Total.js -secret : secret-key-for-signature - -// session cookie name -cookie : __user \ No newline at end of file diff --git a/authorization/controllers/default.js b/authorization/controllers/default.js index 5916dac..6cd13e7 100644 --- a/authorization/controllers/default.js +++ b/authorization/controllers/default.js @@ -1,8 +1,13 @@ exports.install = function() { - F.route('/', view_logged, ['authorize']); - F.route('/', view_homepage); - F.route('/', json_login, ['post', '*User']); - F.route('/logout/', logout, ['authorize']); + + // Main routes + ROUTE('GET /', view_logged, ['authorize']); + ROUTE('GET /', view_unlogged); + + // Operations are defined in /schemas/users.js + ROUTE('POST /login/ *Users --> @login', ['unauthorize']); + ROUTE('GET /logout/ *Users --> @logout', ['authorize']); + }; function view_logged() { @@ -10,18 +15,7 @@ function view_logged() { self.plain('You are logged as {0}. To unlogged remove cookie __user or click http://{1}:{2}/logout/'.format(self.user.email, F.ip, F.port)); } -function view_homepage() { +function view_unlogged() { var self = this; self.view('homepage', { email: '@' }); -} - -function json_login() { - var self = this; - self.body.$workflow('login', self, self.callback()); -} - -function logout() { - var self = this; - self.res.cookie(F.config.cookie, '', new Date().add('-1 year')); - self.redirect('/'); } \ No newline at end of file diff --git a/authorization/databases/users-logs.nosql b/authorization/databases/users-logs.nosql deleted file mode 100644 index c6349a2..0000000 --- a/authorization/databases/users-logs.nosql +++ /dev/null @@ -1,16 +0,0 @@ -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-04-07T12:21:50.430Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-05-07T16:07:49.862Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-05-07T16:09:10.382Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-05-17T16:30:12.254Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-06-07T13:47:52.852Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-06-16T08:44:11.911Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-07-13T20:32:59.097Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-12-27T22:33:40.839Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2013-12-27T22:34:38.823Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2014-03-02T08:10:29.987Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2014-05-29T06:01:40.119Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2014-12-22T12:22:08.773Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2014-12-22T12:26:54.301Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2014-12-22T12:33:02.373Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2014-12-22T12:33:31.005Z"} -{"id":1,"email":"petersirka@gmail.com","ip":"127.0.0.1","date":"2015-07-17T20:55:24.303Z"} diff --git a/authorization/databases/users.nosql b/authorization/databases/users.nosql index dbdc34d..c10d6be 100644 --- a/authorization/databases/users.nosql +++ b/authorization/databases/users.nosql @@ -1 +1 @@ -{"id":1,"email":"petersirka@gmail.com","password":"123456"} +{"id":1,"name":"Total.js","email":"info@totaljs.com","password":"123456"} diff --git a/authorization/definitions/auth.js b/authorization/definitions/auth.js new file mode 100644 index 0000000..3b4b164 --- /dev/null +++ b/authorization/definitions/auth.js @@ -0,0 +1,35 @@ +// ================================================ +// AUTHORIZATION +// Please note that this method is called for all routes, regardless of flags set. +// For example, if the route is flagged with 'authorize', and the callback return value is false, the response status will be 401. +// Alternatively, beware that if the route is flagged with 'unauthorize', and the callback return value is false, the response status will be 200 OK. +// ================================================ + +// MAIN is a global shared object (it's part of Total.js) +// We create a session instance +// Why do we use MAIN.session? Because we can access into the session from every place (on server-side) in this application +MAIN.session = SESSION(); + +// Delegate for loading session data +MAIN.session.ondata = function(meta, next) { + // Loads user data from DB + NOSQL('users').one().where('id', meta.id).callback(next); +}; + +AUTH(function($) { + + // This function will be executed for each request with except requests to static files + + // Session options: + var opt = {}; + opt.name = CONF.cookie; // A cookie name + opt.key = CONF.cookie_secret; // An encrypt key + opt.expire = '3 days'; // Optional, after read can be updated expiration + + // opt.removecookie = true; // Removes cookie if isn't valid (default: true) + // opt.extendcookie = true; // Extends cookie expiration (default: true) + // opt.options = {}; // Optional, a cookie options when the the cookie is extended (default: { httponly: true, security: 'lax' }) + + // Reads a cookie and session + MAIN.session.getcookie($, opt, $.done()); +}); \ No newline at end of file diff --git a/authorization/definitions/authorization.js b/authorization/definitions/authorization.js deleted file mode 100644 index 81bfe60..0000000 --- a/authorization/definitions/authorization.js +++ /dev/null @@ -1,40 +0,0 @@ -// ================================================ -// AUTHORIZATION -// Please note that this method is called for all routes, regardless of flags set. -// For example, if the route is flagged with 'authorize', and the callback return value is false, the response status will be 401. -// Alternatively, beware that if the route is flagged with 'unauthorize', and the callback return value is false, the response status will be 200 OK. -// ================================================ - -F.onAuthorize = function(req, res, flags, callback) { - - var cookie = req.cookie(F.config.cookie); - if (!cookie || cookie.length < 10) { - callback(false); - return; - } - - var obj = F.decrypt(cookie, 'user'); - - if (!obj || obj.ip !== req.ip) { - callback(false); - return; - } - - var user = F.cache.read('user_' + obj.id); - if (user) { - req.user = user; - callback(true); - return; - } - - NOSQL('users').find().make(function(builder) { - builder.where('id', obj.id); - builder.first(); - builder.callback(function(err, response) { - if (!response) - return callback(false); - F.cache.add('user_' + response.id, response, '5 minutes'); - callback(true, response); - }); - }); -}; diff --git a/authorization/models/user.js b/authorization/models/user.js deleted file mode 100644 index 1cc6732..0000000 --- a/authorization/models/user.js +++ /dev/null @@ -1,32 +0,0 @@ -NEWSCHEMA('User').make(function(schema) { - - schema.define('email', 'Email', true); - schema.define('password', 'String(30)', true); - - schema.addWorkflow('login', function(error, model, controller, callback) { - - NOSQL('users').find().make(function(builder) { - builder.first(); - builder.where('email', model.email); - builder.where('password', model.password); - builder.callback(function(err, response) { - - if (!response) { - error.push('error-user-404'); - return callback(); - } - - // Writes logs - NOSQL('users-logs').insert({ id: response.id, email: response.email, ip: controller.ip, date: new Date() }); - - // Sets cookies - controller.cookie(F.config.cookie, F.encrypt({ id: response.id, ip: controller.ip }, 'user'), '5 minutes'); - - // Responds - callback(SUCCESS(true)); - - }, error); - }); - }); - -}); \ No newline at end of file diff --git a/authorization/readme.md b/authorization/readme.md index 27b80c2..5fb6fcd 100644 --- a/authorization/readme.md +++ b/authorization/readme.md @@ -1,4 +1,10 @@ -## This is the example +## Auth example -Please use: authorization module for total.js: -https://github.com/totaljs/modules/tree/master/Security/auth \ No newline at end of file +- try to understand how the `AUTH()` delegate works +- this example uses `SESSION()` object +- this example uses jComponent library on client-side + +### Credentials + +- email: `info@totaljs.com` +- password: `123456` \ No newline at end of file diff --git a/authorization/resources/default.resource b/authorization/resources/default.resource index 97a6b51..696b774 100644 --- a/authorization/resources/default.resource +++ b/authorization/resources/default.resource @@ -1,6 +1 @@ -LoginName : please fill login name -LoginPassword : please fill login password -LoginError : your login is not valid -Logged : you are still logged - -error-user-404 : User not found. \ No newline at end of file +error-users-404 : User not found. \ No newline at end of file diff --git a/authorization/schemas/users.js b/authorization/schemas/users.js new file mode 100644 index 0000000..812f948 --- /dev/null +++ b/authorization/schemas/users.js @@ -0,0 +1,50 @@ +NEWSCHEMA('Users', function(schema) { + + schema.define('email', 'Email', true); + schema.define('password', 'String(30)', true); + + // Performs login + schema.addWorkflow('login', function($) { + + var builder = NOSQL('users').one(); + builder.where('email', $.model.email); + builder.where('password', $.model.password); + builder.callback(function(err, user) { + + if (!user) { + $.invalid('error-users-404'); + return; + } + + var opt = {}; + opt.name = CONF.cookie; // A cookie name + opt.key = CONF.cookie_secret; // A cookie secret key + opt.id = user.id; // A user ID + opt.expire = '3 days'; // Expiration + opt.data = user; // A session data + opt.note = ($.headers['user-agent'] || '').parseUA() + ' ({0})'.format($.ip); // A custom note + + // Creates a cookie and session item + MAIN.session.setcookie($, opt, $.done()); + + // Writes audit + AUDIT('users', $, 'login', user.id + ': ' + user.name); + }); + }); + + // Performs logout + schema.addWorkflow('logout', function($) { + + console.log('SOM TU'); + + // Removes session + MAIN.session.remove($.sessionid); + + // Removes auth cookie + $.cookie(CONF.cookie, '', '-1 year'); + + // Performs a redirect + $.redirect('/'); + }); + +}); \ No newline at end of file diff --git a/authorization/views/homepage.html b/authorization/views/homepage.html index d8f6d87..d722075 100644 --- a/authorization/views/homepage.html +++ b/authorization/views/homepage.html @@ -9,50 +9,43 @@ - + + -
    -
    -
    Login name:
    -
    +
    +
    +
    +
    Email address
    +
    Password
    +
    +
    + +
    +
    -
    -
    -
    Login password:
    -
    -
    -
    - -
    - +
    From 3449ada2ed7e3ada132862598702d2d28b210a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 10:29:26 +0200 Subject: [PATCH 064/157] Updated examples. --- authorization-roles/controllers/default.js | 20 ++-- .../definitions/{authorization.js => auth.js} | 14 +-- authorization-roles/views/administrator.html | 2 +- authorization-roles/views/layout.html | 21 ++-- authorization-roles/views/moderator.html | 2 +- .../controllers/default.js | 8 +- authorization-www-basic/readme.md | 108 +++++++++--------- 7 files changed, 89 insertions(+), 86 deletions(-) rename authorization-roles/definitions/{authorization.js => auth.js} (54%) diff --git a/authorization-roles/controllers/default.js b/authorization-roles/controllers/default.js index 2081b1c..5fc53a3 100644 --- a/authorization-roles/controllers/default.js +++ b/authorization-roles/controllers/default.js @@ -1,12 +1,12 @@ exports.install = function() { - F.route('/'); + ROUTE('GET /'); + ROUTE('GET /', view_administrator, ['authorize', '@administrator']); + ROUTE('GET /', view_moderator, ['authorize', '@moderator']); + ROUTE('GET /both/', view_both, ['authorize', '@moderator', '@administrator']); - F.route('/', view_administrator, ['authorize', '@administrator']); - F.route('/', view_moderator, ['authorize', '@moderator']); - F.route('/both/', view_both, ['authorize', '@moderator', '@administrator']); - - F.route('/login/', redirect_login, ['unauthorize']); - F.route('/logoff/', redirect_logoff); + // Login/Logout + ROUTE('GET /login/', redirect_login, ['unauthorize']); + ROUTE('GET /logout/', redirect_logout); }; function view_both() { @@ -29,7 +29,7 @@ function redirect_login() { switch (self.query.user) { case 'administrator': case 'moderator': - self.res.cookie('__user', self.query.user, '1 day'); + self.cookie('__user', self.query.user, '1 day'); self.redirect('/'); break; default: @@ -38,8 +38,8 @@ function redirect_login() { } } -function redirect_logoff() { +function redirect_logout() { var self = this; - self.res.cookie('__user', '', new Date().add('d', -1)); + self.cookie('__user', '', '-1 day'); self.redirect('/'); } \ No newline at end of file diff --git a/authorization-roles/definitions/authorization.js b/authorization-roles/definitions/auth.js similarity index 54% rename from authorization-roles/definitions/authorization.js rename to authorization-roles/definitions/auth.js index 8328a29..275da35 100644 --- a/authorization-roles/definitions/authorization.js +++ b/authorization-roles/definitions/auth.js @@ -2,17 +2,15 @@ // AUTHORIZATION // ================================================ -F.onAuthorize = function(req, res, flags, next) { - - var cookie = req.cookie('__user'); - +AUTH(function($) { + var cookie = $.cookie('__user'); switch (cookie) { case 'administrator': case 'moderator': - flags.push('@' + cookie); - next(true, { name: cookie }); + $.roles(cookie); + $.success({ name: cookie }); return; } - next(false); -}; \ No newline at end of file + $.invalid(); +}); \ No newline at end of file diff --git a/authorization-roles/views/administrator.html b/authorization-roles/views/administrator.html index e48126f..f27a55f 100644 --- a/authorization-roles/views/administrator.html +++ b/authorization-roles/views/administrator.html @@ -1,2 +1,2 @@

    administrator.html: @{user.name}

    - \ No newline at end of file + \ No newline at end of file diff --git a/authorization-roles/views/layout.html b/authorization-roles/views/layout.html index 0f100a6..faf65e0 100644 --- a/authorization-roles/views/layout.html +++ b/authorization-roles/views/layout.html @@ -3,18 +3,17 @@ - Authorization with roles - - - - - - - + Authorization with roles + + + + + + - @{body} + @{body} \ No newline at end of file diff --git a/authorization-roles/views/moderator.html b/authorization-roles/views/moderator.html index 9337c46..6317360 100644 --- a/authorization-roles/views/moderator.html +++ b/authorization-roles/views/moderator.html @@ -1,2 +1,2 @@

    moderator.html: @{user.name}

    - \ No newline at end of file + \ No newline at end of file diff --git a/authorization-www-basic/controllers/default.js b/authorization-www-basic/controllers/default.js index d60f815..aee7970 100644 --- a/authorization-www-basic/controllers/default.js +++ b/authorization-www-basic/controllers/default.js @@ -1,19 +1,21 @@ exports.install = function() { - F.route('/', authorization); + ROUTE('GET /', auth); }; -function authorization() { +function auth() { var self = this; var auth = self.baa(); + // "baa" means "B"asic "A"ccess "A"uthentication + if (auth.empty) { self.baa('This is secured area'); // It sends the response automatically. return; } - if (auth.user !== 'peter' || auth.password !== '123456') { + if (auth.user !== 'totaljs' || auth.password !== '123456') { self.baa('Wrong credentials, this is secured area:'); // or self.view401(); return; diff --git a/authorization-www-basic/readme.md b/authorization-www-basic/readme.md index 19ba143..db2d0ff 100644 --- a/authorization-www-basic/readme.md +++ b/authorization-www-basic/readme.md @@ -1,11 +1,16 @@ ## Example: Basic Access Authentication (BAA) -This example shows how to use [Basic Access Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) to authenticate users. +This example shows how to use [Basic Access Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) to authenticate users. For understanding `controller.baa()` --> `baa` means __`B`asic `A`ccess `A`uthentication__. + +__Default credentials__: + +- user: `totaljs` +- password: `123456` Features covered by this example: -* `controller.baa()` - read login details from request -* `controller.baa('prompt')` - send login prompt on response (ask user to login) +- `controller.baa()` - read login details from request +- `controller.baa('prompt')` - send login prompt on response (ask user to login) See the `/controllers/default.js` for sample code. @@ -17,18 +22,17 @@ To read credentials, use the `.baa()` method in a route handler function: ```javascript function authorization() { - var auth = this.baa(); // this === controller - - // ... + var auth = this.baa(); // this === controller + // ... } ``` This looks for the `Authorization: Basic ` HTTP header in the request, and returns an object containing relevant details: ```javascript -auth.empty // if true, no credentials were found -auth.user // the user name, if found -auth.password // the password, if found +auth.empty; // if true, no credentials were found +auth.user; // the user name, if found +auth.password; // the password, if found ``` ### Requesting credentials @@ -38,14 +42,14 @@ If the user hasn't logged in yet, the `auth.empty` property will be `true` (no u ```javascript function authorization() { - // ... + // ... - if (auth.empty) { // ask user to login - this.baa('Admin Login Required.'); // or whatever prompt you want the user to see - return; - } + if (auth.empty) { // ask user to login + this.baa('Admin Login Required.'); // or whatever prompt you want the user to see + return; + } - // ... + // ... } ``` @@ -64,26 +68,26 @@ The resulting request should include the login credentials, now all we need to d ```javascript function authorization() { - // ... + // ... - // isValidLogin() would be custom function written by you - // that checks whether user exists and also that the password - // is correct for that user - if ( isValidLogin( auth.user, auth.password ) ) { + // isValidLogin() would be custom function written by you + // that checks whether user exists and also that the password + // is correct for that user + if ( isValidLogin( auth.user, auth.password ) ) { - // do authorised stuff + // do authorised stuff - } else { + } else { - // ask them to login again? - this.baa('Admin Login Required.'); - return; + // ask them to login again? + this.baa('Admin Login Required.'); + return; - // or maybe just throw a #401 error? - this.view401('Invalid login details'); - return; + // or maybe just throw a #401 error? + this.view401('Invalid login details'); + return; - } + } } ``` @@ -97,22 +101,22 @@ var baaCache = {}; function authorization() { - // ... + // ... - if ( (baaCache[auth.user] && baaCache[auth.user] === auth.password) || isValidLogin( auth.user, auth.password ) ) { + if ( (baaCache[auth.user] && baaCache[auth.user] === auth.password) || isValidLogin( auth.user, auth.password ) ) { - baaCache[auth.user] = auth.password; // cache + baaCache[auth.user] = auth.password; // cache - // do authorised stuff + // do authorised stuff - } else { - // ... - } + } else { + // ... + } } function housekeeping(tick) { - if (tick % 5 === 0) // every 5 mins clear cache - baaCache = {}; + if (tick % 5 === 0) // every 5 mins clear cache + baaCache = {}; } // add this to export.install() at top of script: @@ -120,7 +124,7 @@ F.on('service', housekeeping) // also add an export.uninstall() to remove the listener export.uninstall = function() { - F.removeListener('service', housekeeping); + F.removeListener('service', housekeeping); } ``` @@ -137,24 +141,24 @@ If you wish to accept credentials in the URI, use `.req.uri.auth`: ```javascript function authorization() { - // ... + // ... - if (auth.empty) { // check for URI auth first, before asking user to login + if (auth.empty) { // check for URI auth first, before asking user to login - if (this.req.uri.auth) { // found credentials on auth, use those instead + if (this.req.uri.auth) { // found credentials on auth, use those instead - let creds = this.req.uri.auth.split(':'); - auth.user = creds[0]; - auth.password = creds[1]; - auth.empty = false; + let creds = this.req.uri.auth.split(':'); + auth.user = creds[0]; + auth.password = creds[1]; + auth.empty = false; - } else { - this.baa('Admin Login Required.'); // or whatever prompt you want the user to see - return; - } + } else { + this.baa('Admin Login Required.'); // or whatever prompt you want the user to see + return; + } - } + } - // ... + // ... } ``` \ No newline at end of file From 501f58e339d6bef114a9ac89c0e26fcb7979102a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 10:40:19 +0200 Subject: [PATCH 065/157] Updated examples. --- blocks/controllers/default.js | 4 +- blocks/definitions/blocks.js | 8 +- blocks/readme.md | 29 +++--- bootstrap/controllers/default.js | 3 - bootstrap/index.js | 16 --- bootstrap/views/index.html | 36 ------- bootstrap/views/layout.html | 33 ------- cache-http/controllers/default.js | 93 ------------------ cache-http/index.js | 16 --- cache-http/views/etag.html | 4 - cache-http/views/modified.html | 7 -- cache-partial/controllers/default.js | 10 +- cache-static-file-refresh/config-release | 2 - .../controllers/default.js | 3 - cache-static-file-refresh/index.js | 15 --- cache-static-file-refresh/public/img/logo.png | Bin 5856 -> 0 bytes cache-static-file-refresh/views/index.html | 29 ------ changes/controllers/default.js | 12 --- changes/definitions/change.js | 13 --- changes/index.js | 16 --- cluster/controllers/default.js | 2 +- components/controllers/default.js | 2 +- 22 files changed, 26 insertions(+), 327 deletions(-) delete mode 100644 bootstrap/controllers/default.js delete mode 100644 bootstrap/index.js delete mode 100644 bootstrap/views/index.html delete mode 100644 bootstrap/views/layout.html delete mode 100644 cache-http/controllers/default.js delete mode 100644 cache-http/index.js delete mode 100644 cache-http/views/etag.html delete mode 100644 cache-http/views/modified.html delete mode 100644 cache-static-file-refresh/config-release delete mode 100644 cache-static-file-refresh/controllers/default.js delete mode 100644 cache-static-file-refresh/index.js delete mode 100644 cache-static-file-refresh/public/img/logo.png delete mode 100644 cache-static-file-refresh/views/index.html delete mode 100644 changes/controllers/default.js delete mode 100644 changes/definitions/change.js delete mode 100644 changes/index.js diff --git a/blocks/controllers/default.js b/blocks/controllers/default.js index 46c9f32..d8fea90 100644 --- a/blocks/controllers/default.js +++ b/blocks/controllers/default.js @@ -1,4 +1,4 @@ exports.install = function() { - F.route('/'); - F.route('/admin/', 'index'); + ROUTE('GET /'); + ROUTE('GET /admin/', 'index'); }; \ No newline at end of file diff --git a/blocks/definitions/blocks.js b/blocks/definitions/blocks.js index e8f3682..111354a 100644 --- a/blocks/definitions/blocks.js +++ b/blocks/definitions/blocks.js @@ -1,9 +1,9 @@ // JavaScript -F.map('/js/admin.js', '/js/script.js#admin'); // --> #admin is defined block +MAP('/js/admin.js', '/js/script.js#admin'); // --> #admin is defined block // CSS -F.map('/css/admin.css', '/css/style.css#admin'); // --> #admin is defined block +MAP('/css/admin.css', '/css/style.css#admin'); // --> #admin is defined block // Others examples with merging: -// F.merge('/css/website.css', 'ui.css#blockB,blockC', 'website.css'); -// F.merge('/css/admin.css', 'ui.css#blockA,blockB,blockC', 'admin.css'); \ No newline at end of file +// MERGE('/css/website.css', 'ui.css#blockB,blockC', 'website.css'); +// MERGE('/css/admin.css', 'ui.css#blockA,blockB,blockC', 'admin.css'); \ No newline at end of file diff --git a/blocks/readme.md b/blocks/readme.md index 2ddb642..fb7a9ef 100644 --- a/blocks/readme.md +++ b/blocks/readme.md @@ -6,7 +6,7 @@ Features covered by this example: * [`@{BLOCK}`](http://docs.totaljs.com/latest/en.html#pages~Blocks%20\(JS%2BCSS%2BHTML\)) and [`@{END}`](http://docs.totaljs.com/latest/en.html#pages~Blocks%20\(JS%2BCSS%2BHTML\)) tags in CSS, JS and HTML files * `@{if}`, `@{fi}`, `@{else}` and [`@{import}`](http://docs.totaljs.com/latest/en.html#api~FrameworkViews~%40%7Bimport) tags in HTML files -* [`F.map()`](http://docs.totaljs.com/latest/en.html#api~Framework~framework.map) method - clone files, enable blocks, merging files +* [`MAP()`](https://docs.totaljs.com/latest/en.html#api~global~MAP) method - clone files, enable blocks, merging files ### Overview @@ -19,43 +19,40 @@ First, let's take a look at how the blocks are defined in the files, then at the If you have a `.js` script that contains some common code, some admin-only code and some user-only code, you could either clone the file and maintain two versions - one for admins, one for users - or you could use blocks like so: ```javascript -alert( 'ADMINS AND USERS' ); +alert('ADMINS AND USERS'); // @{BLOCK admin} -alert( 'ADMIN ONLY' ); +alert('ADMIN ONLY'); // @{END} // @{BLOCK users} -alert( 'USERS ONLY' ); +alert('USERS ONLY'); // @{END} ``` If the file is output without specifying blocks, you'd get: ```javascript -alert( 'ADMINS AND USERS' ); +alert('ADMINS AND USERS'); ``` If it's output with the `admin` blocks, you'd get: ```javascript -alert( 'ADMINS AND USERS' ); +alert('ADMINS AND USERS'); -alert( 'ADMIN ONLY' ); +alert('ADMIN ONLY'); ``` And if it's output with `users` blocks you'd get: ```javascript -alert( 'ADMINS AND USERS' ); +alert('ADMINS AND USERS'); -alert( 'USERS ONLY' ); +alert('USERS ONLY'); ``` -You can see an example script in `/public/js/script.js`. - - -It's also possible to specify multiple conditions per block, for example: +You can see an example script in `/public/js/script.js`. It's also possible to specify multiple conditions per block, for example: ```javascript // @{BLOCK admin, users, visitors} @@ -93,14 +90,14 @@ Regardless of file format, the `@{BLOCK}` and `@{END}` tags must be on separate ### Block selection -To generate alternate versions of a file with one or more blocks enabled, simply use the framework `.map()` method as shown below: +To generate alternate versions of a file with one or more blocks enabled, simply use the framework `MAP()` method as shown below: ```javascript // JS -F.map('/js/admin.js', '/js/script.js#admin'); // --> `admin` block enabled +MAP('/js/admin.js', '/js/script.js#admin'); // --> "admin" block enabled // CSS -F.map('/css/admin.css', '/css/style.css#admin,moderator'); // --> `admin` and `moderator` blocks enabled +MAP('/css/admin.css', '/css/style.css#admin,moderator'); // --> "admin" and "moderator" blocks enabled ``` You can see an example in `/definitions/blocks.js`. diff --git a/bootstrap/controllers/default.js b/bootstrap/controllers/default.js deleted file mode 100644 index 69ec1c8..0000000 --- a/bootstrap/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/bootstrap/index.js b/bootstrap/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/bootstrap/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/bootstrap/views/index.html b/bootstrap/views/index.html deleted file mode 100644 index ad4487f..0000000 --- a/bootstrap/views/index.html +++ /dev/null @@ -1,36 +0,0 @@ -
    -
    - -

    Project name

    -
    -
    -

    Jumbotron heading

    -

    Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

    -

    Sign up today

    -
    -
    -
    -

    Subheading

    -

    Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

    -

    Subheading

    -

    Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.

    -

    Subheading

    -

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    -
    -
    -

    Subheading

    -

    Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

    -

    Subheading

    -

    Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.

    -

    Subheading

    -

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    -
    -
    - -
    \ No newline at end of file diff --git a/bootstrap/views/layout.html b/bootstrap/views/layout.html deleted file mode 100644 index 591ebbf..0000000 --- a/bootstrap/views/layout.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - Bootstrap 101 Template - - - - - - - - - - - - - - - - @{body} - - - - - - - \ No newline at end of file diff --git a/cache-http/controllers/default.js b/cache-http/controllers/default.js deleted file mode 100644 index 7a661f5..0000000 --- a/cache-http/controllers/default.js +++ /dev/null @@ -1,93 +0,0 @@ -exports.install = function() { - F.route('/', view_homepage); - F.route('/dynamic/date/', view_dynamic_modified); - F.route('/dynamic/etag/', view_dynamic_etag); - F.route('/date/', view_modified); - F.route('/etag/', view_etag); -}; - -function view_homepage() { - var self = this; - var builder = []; - builder.push('Run location:'); - builder.push(''); - builder.push(self.req.hostname('/date/')); - builder.push(self.req.hostname('/etag/')); - builder.push(self.req.hostname('/dynamic/date/')); - builder.push(self.req.hostname('/dynamic/etag/')); - self.plain(builder.join('\n')); -} - -function view_dynamic_modified() { - var self = this; - - // Check header - // - // @date {Date} :: optional, default: new Date() - // @strict {Boolean} :: optional, default: false - // - // if @strict === false then header['if-modified-since'] > @date return 304 - // if @strict === true then header['if-modified-since'] === @date return 304 - // - // ifNotModified([date], [strict]) - - if (self.notModified()) - return; - - self.layout(''); - self.view('modified'); -} - -function view_modified() { - - var self = this; - - // Check header - // - // @date {Date} :: optional, default: new Date() - // @strict {Boolean} :: optional, default: false - // - // if @strict === false then header['if-modified-since'] > @date return 304 - // if @strict === true then header['if-modified-since'] === @date return 304 - // - // ifNotModified([date], [strict]) - - if (self.notModified()) - return; - - // if (self.ifNotModified(new Date().add('minute', 5))) - // return; - - // if value == date then framework uses Last-Modified else Etag - // set not modified to 5 minute - self.setModified(new Date().add('minute', 5)); - - // show Firebug and call 3x refresh - self.plain('modified'); -} - - -function view_dynamic_etag() { - var self = this; - - if (self.notModified('123456')) - return; - - self.layout(''); - self.view('etag'); -} - -function view_etag() { - - var self = this; - var etag = 'abc123456'; - - if (self.notModified(etag)) - return; - - // if value == string then framework uses Etag else Last-Modified - self.setModified(etag); - - // show Firebug and call 3x refresh - self.plain('etag'); -} \ No newline at end of file diff --git a/cache-http/index.js b/cache-http/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/cache-http/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/cache-http/views/etag.html b/cache-http/views/etag.html deleted file mode 100644 index 6de1943..0000000 --- a/cache-http/views/etag.html +++ /dev/null @@ -1,4 +0,0 @@ - -@{etag('123456')} - -TEST \ No newline at end of file diff --git a/cache-http/views/modified.html b/cache-http/views/modified.html deleted file mode 100644 index 47ae451..0000000 --- a/cache-http/views/modified.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - -@{modified(new Date().add('hour', 1))} - -TEST \ No newline at end of file diff --git a/cache-partial/controllers/default.js b/cache-partial/controllers/default.js index 9adca64..d7826fd 100644 --- a/cache-partial/controllers/default.js +++ b/cache-partial/controllers/default.js @@ -9,12 +9,12 @@ function view_homepage_cached() { var self = this; var key = 'my-cache-key'; - var item = F.cache.get(key); + var item = CACHE(key); if (!item) { var date = new Date(); item = date.toString(); - F.cache.add(key, item, '5 minutes'); + CACHE(key, item, '5 minutes'); } // press 15x refresh browser @@ -33,12 +33,12 @@ function view_fn_cached() { var self = this; - F.cache.fn('cache-name', function(fnSave) { + F.cache.fn('cache-name', function(set) { var dt = new Date(); // Documentation: http://docs.totaljs.com/FrameworkCache/#framework.cache.fn - fnSave(dt.format('dd.MM.yyyy - HH:mm:ss'), '2 minutes'); + set(dt.format('dd.MM.yyyy - HH:mm:ss'), '2 minutes'); - }, value => self.plain(value)); + }, (value, fromcache, ctrl) => ctrl.plain(value), self); } \ No newline at end of file diff --git a/cache-static-file-refresh/config-release b/cache-static-file-refresh/config-release deleted file mode 100644 index d9394ed..0000000 --- a/cache-static-file-refresh/config-release +++ /dev/null @@ -1,2 +0,0 @@ -// ETAG-VERSION affect all static files -etag-version : 2 \ No newline at end of file diff --git a/cache-static-file-refresh/controllers/default.js b/cache-static-file-refresh/controllers/default.js deleted file mode 100644 index 69ec1c8..0000000 --- a/cache-static-file-refresh/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/cache-static-file-refresh/index.js b/cache-static-file-refresh/index.js deleted file mode 100644 index fe0397b..0000000 --- a/cache-static-file-refresh/index.js +++ /dev/null @@ -1,15 +0,0 @@ -// =================================================== -// FOR PRODUCTION -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; - -require('total.js').http('release', options); -// require('total.js').cluster.http(5, 'release', options); \ No newline at end of file diff --git a/cache-static-file-refresh/public/img/logo.png b/cache-static-file-refresh/public/img/logo.png deleted file mode 100644 index bb067c6c7bb7228c02d301638d755811a3fb9ab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5856 zcmb_gXH-+&wx#zHKnY3!tCH*)43zV0a6M#d_A3Hya^FMa~ zUOH6&r{mvS|6jnmRQ&%gWu625ck*B1C65{YWwb7RKmY`zeU;R|)BcZ`;ALAOYF{bo zQ2odKzjOavmH-GGn?gxcNl-~61MCrB?w*w zK$!o?R!TV#;;E9dDHs38UH%*d^2?ty{U@PXItHixXIUj3*{ewigFuTL)Fptw2>(>8 zlCrCmOd8Nj9M(tTw9_X|V*0h6>trH2)d+-;9(963>ZD2106cxtIBn9HK!_dGA?Tz} z8b$PK5SA#M7J69!#YcE}k9z!|ZtQ?gRG-ct@;HHP9Mz{8+pm*0@yGEW?#9WZ#=fme zFZ;E_do*G`YZ2-&eO&kTsA0;O3F^xqM*=h9t4_+ev15%)#*`@`0D{G({-IN?EJ4Qu zqv+Zw=iLH}AJj`8HzMTd*RG5n(SP|xhaiX=&_(v^JZ+MHHEJ03Su3Ce{-R4QsmkMT}r07MOU@B^VoETU5Q-^J2jgC;a(rsbl$RiLAqG8nnBTdd?gWZZ(t&1zb`6a z{=?U`C(B}YQ)@l55##)P8(&)_+46C29|v7*KE9kUe-~wP-%pO|ENQl(fwe~nr%1CJ zv=_7G^zIXQLMze)!!m4HmMW;Hf*e;ajfUq8T?r5C zUt?k3*<#2pn|S$PLcQ!I-P!`YuC0%g>+wV4y5sfKT8YlBJ0Me?cMNJN*MtJSBPDTy zIc{jhuh+aEIGe}u*eaEc)`><&nZ(It=~vyJxMq7lP%HhXh^Mw~%s?&kk>l|Ba8$8| z)td>TCwIlV@*QR%^g|b5MF`D=)4~tdSW%cYqLAVpe&HD{N0Q7vQ73GsfZeT}cDN$i zN^~wP67N87=w=^BPMxXMr>1lFVZa_x619dwLbRP&(G_RBg46Hq#XETMuQs8v+8f`P2MC!el}w^#Mf&0%kJP zBD9Vt80Z_EB7j=D(z1CGl~=BgT6!ywR;Iu7MK!?Zjc&(Az;PI?o;I9R#>L>$nrD+F z|K)0d)`Bx|D4c6JH~#YGZim7%VT&^AKy@-F=+j6`tT>Wml}4wh9SdpdDqiy5b@n)- zl|g@%R~L2vnjkI&t3tq{-ZbbmYKSa`ZSx&st$;S33j^97fjR-dv35EG>uJAt@1AM5OKoFv5mau6v+YE5 zj`73LPo_W;)c2=P$nw_e4xE9DSk%V(J6a$?B6c1clWFPjmVG`K5xWX?3&6Ho?@(5K zg?@Sp3|eiP(XuXgeDg*gdphLnzI@C#PLKcLJwT4HO_)Jj&cXhec{aovvNN55+<0gV zuK!Fui~YpH-by0)P;qy8sHCJG#pn$*PV)?cay>j{K0RDpzxHz-Y-_LiF{!9%vBEUY zfgT%UGUY@Y2-F?+ZWhLlR}987d^ykucKNR~q6SaoKh)*uOe>8P*ktwI&bps+HSqHt zDRGu)evLZiP+#>M^d)lmg@PKRQ0?Qy&#&e!7h&Va_%V9dVWA{{=Hb$M)VmcX>IFk} zqvxj@v2UPm4PYSzG z+aL>p_}Y9|C>_g7SoH{$OU_orPZtP8NpoC9-g)gKpJngXbb2mGm2uGZDs&Tk`xa~K znnasIHgv^JRbJL+45eY_V`DOkvOFSN=HJ0nc&1#EF9N6nHt!K{=5!I&Y!0`G15p^;taIJF7YTl`pyp#;~YVcWr+{$Cn>^0*}wl4omRF zaTvIFULvWe8n)?6mhax#4<5iGZ!MN8TS$YZ7IQQ9DoLQN-fr7BwT;yWX+%Z_nl(kf zi$RPj9c=b2QLn+m&L2(07MPgg6*(k2aO!&c30h^rHrKwbR=W%<;RIR)eZ~t$m9Ci| zXspoRc{rb8$%HzArLbM`mS=6PA|$P)0Gtli78PBPxr(HGs7Cr} zt0+3$qjT;TtOoV4703hE*L2y99m8}Ri{`a?&-u>~fQdBRxgcAB_jF`4tqg-BQ9}RI z{2tZJb`1Pku8Oxv?A|ekYw3w@E6Ql;ihv7+Y-9JlvQ|qi^yg1Xx8~Dx)f_~91h1nC zr(ew)l?VR!s1n_C0}WzJ-DLi?@gfi4Op}~`*ye&^e|YZ?(K|oFTCC5w&*Abe`b zCEUL(jFpb{^6#kwuW5PBASf+eQ7RutO5K3#7ObWVxDk@B_~zVdRL4cAJTT|->mwj? zjdhBmjV<0Rv07kX5jfMBZ+@b;%hwxL{<^}&#|EWjWOwb

    (rcuk8{KJpcl8a;_gv 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 TiT?VZKToPkTChq5>#+X;5Et1P diff --git a/cache-static-file-refresh/views/index.html b/cache-static-file-refresh/views/index.html deleted file mode 100644 index 48a84dc..0000000 --- a/cache-static-file-refresh/views/index.html +++ /dev/null @@ -1,29 +0,0 @@ -@{layout('')} - - - - - - - - - - - - -

    @{image('logo.png', 535, 181, 'total.js logo')}
    - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/changes/controllers/default.js b/changes/controllers/default.js deleted file mode 100644 index 117ae11..0000000 --- a/changes/controllers/default.js +++ /dev/null @@ -1,12 +0,0 @@ -// Change describes some changes ... -var counter = 0; - -F.route('/', function () { - - var self = this; - counter++; - - self.change('The counter was updated, current state: ' + counter); - self.plain('homepage'); - -}); diff --git a/changes/definitions/change.js b/changes/definitions/change.js deleted file mode 100644 index 8b87535..0000000 --- a/changes/definitions/change.js +++ /dev/null @@ -1,13 +0,0 @@ - -// Change output - -F.on('change', function(message, name, uri, ip) { - - console.log('CHANGE:'); - console.log('message:', message); - console.log('name:', name); - console.log('uri:', uri.href); - console.log('ip:', ip); - console.log(''); - -}); \ No newline at end of file diff --git a/changes/index.js b/changes/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/changes/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/cluster/controllers/default.js b/cluster/controllers/default.js index 8721591..d065d55 100644 --- a/cluster/controllers/default.js +++ b/cluster/controllers/default.js @@ -1,5 +1,5 @@ exports.install = function() { - F.route('/', view_homepage); + ROUTE('GET /', view_homepage); }; function view_homepage() { diff --git a/components/controllers/default.js b/components/controllers/default.js index 413121f..1067f2b 100644 --- a/components/controllers/default.js +++ b/components/controllers/default.js @@ -1,5 +1,5 @@ exports.install = function() { - F.route('/', view_index); + ROUTE('GET /', view_index); }; function view_index() { From d0245e0bfb842438fbd74d5a5083c22a6e36d6e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 10:51:37 +0200 Subject: [PATCH 066/157] Updated examples. --- authorization/views/homepage.html | 1 - .../controllers/default.js | 2 +- contact-form/controllers/default.js | 14 +--- contact-form/definitions/schema.js | 23 ------- contact-form/schemas/forms.js | 19 ++++++ contact-form/views/form.html | 68 ------------------- contact-form/views/index.html | 60 ++++++++++++++++ 7 files changed, 82 insertions(+), 105 deletions(-) delete mode 100644 contact-form/definitions/schema.js create mode 100644 contact-form/schemas/forms.js delete mode 100644 contact-form/views/form.html create mode 100644 contact-form/views/index.html diff --git a/authorization/views/homepage.html b/authorization/views/homepage.html index d722075..028f4f5 100644 --- a/authorization/views/homepage.html +++ b/authorization/views/homepage.html @@ -7,7 +7,6 @@ - diff --git a/config-debug-release-test/controllers/default.js b/config-debug-release-test/controllers/default.js index d85c48b..93968a8 100644 --- a/config-debug-release-test/controllers/default.js +++ b/config-debug-release-test/controllers/default.js @@ -1,5 +1,5 @@ exports.install = function() { - F.route('/', view_index); + ROUTE('GET /', view_index); }; function view_index() { diff --git a/contact-form/controllers/default.js b/contact-form/controllers/default.js index 40d7b25..c5f990b 100644 --- a/contact-form/controllers/default.js +++ b/contact-form/controllers/default.js @@ -1,14 +1,4 @@ exports.install = function() { - F.route('/', view_form); - F.route('/', json_form, ['post', '*ContactForm']); + ROUTE('GET /'); + ROUTE('POST /api/send/ *ContactForms --> @save'); }; - -function view_form() { - this.view('form', GETSCHEMA('ContactForm').create()); -} - -function json_form() { - var self = this; - self.body.Ip = self.ip; - self.body.$save(self.callback()); -} diff --git a/contact-form/definitions/schema.js b/contact-form/definitions/schema.js deleted file mode 100644 index cc46a9a..0000000 --- a/contact-form/definitions/schema.js +++ /dev/null @@ -1,23 +0,0 @@ -NEWSCHEMA('ContactForm').make(function(schema) { - schema.define('Email', 'Email', true); - schema.define('Phone', 'Phone'); - schema.define('Message', 'string(10000)', true); - schema.define('Ip', 'string(60)'); - schema.define('Created', Date); - - schema.setDefault(function(name) { - switch (name) { - case 'Email': - return '@'; - case 'Phone': - return '+421'; - case 'Created': - return new Date(); - } - }); - - schema.setSave(function(error, model, options, callback) { - NOSQL('contactform').insert(model); - callback(SUCCESS(true)); - }); -}) \ No newline at end of file diff --git a/contact-form/schemas/forms.js b/contact-form/schemas/forms.js new file mode 100644 index 0000000..a0f811f --- /dev/null +++ b/contact-form/schemas/forms.js @@ -0,0 +1,19 @@ +NEWSCHEMA('ContactForms', function(schema) { + + schema.define('email', 'Email', true); + schema.define('phone', 'Phone'); + schema.define('message', 'string(10000)', true); + + schema.setSave(function($) { + + var model = $.model; + + // Extends model + model.dtcreated = NOW; + model.ip = $.ip; + model.ua = ($.headers['user-agent'] || '').parseUA(); + + NOSQL('contactforms').insert(model); + $.success(); + }); +}); \ No newline at end of file diff --git a/contact-form/views/form.html b/contact-form/views/form.html deleted file mode 100644 index 9906675..0000000 --- a/contact-form/views/form.html +++ /dev/null @@ -1,68 +0,0 @@ -@{layout('')} - - - - - Contanct form - - - - - - - - - - -

    Contact form

    -
    -
    -
    E-mail:
    -
    @{text('Email')}
    -
    -
    -
    -
    Phone:
    -
    @{text('Phone')}
    -
    -
    -
    -
    Message:
    -
    @{textarea('Message')}
    -
    -
    -
    -
    - - - - - - diff --git a/contact-form/views/index.html b/contact-form/views/index.html new file mode 100644 index 0000000..b1df81c --- /dev/null +++ b/contact-form/views/index.html @@ -0,0 +1,60 @@ +@{layout('')} + + + + + Contanct form + + + + + + + + + + + +
    +
    +
    +
    +
    Email address
    +
    Phone number
    +
    Message
    +
    + +
    + +
    +
    +
    +
    +
    + + + + + + From c8b0c12e24a74aa69d06bd257be4aa27a15effc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 10:55:20 +0200 Subject: [PATCH 067/157] Updated example. --- controller-cancel/controllers/default.js | 4 +- controller-cancel/definitions/cancel.js | 20 ++++----- controller-cancel/readme.md | 56 ++++++++++-------------- 3 files changed, 36 insertions(+), 44 deletions(-) diff --git a/controller-cancel/controllers/default.js b/controller-cancel/controllers/default.js index 0217cd5..d581a13 100644 --- a/controller-cancel/controllers/default.js +++ b/controller-cancel/controllers/default.js @@ -1,6 +1,6 @@ exports.install = function() { - F.route('/', view_index); - F.route('/cancel/', view_cancel); + ROUTE('GET /', view_index); + ROUTE('GET /cancel/', view_cancel); }; function view_index() { diff --git a/controller-cancel/definitions/cancel.js b/controller-cancel/definitions/cancel.js index 3f4b7b4..581990a 100644 --- a/controller-cancel/definitions/cancel.js +++ b/controller-cancel/definitions/cancel.js @@ -1,16 +1,16 @@ -F.on('controller', function(controller, name) { +ON('controller', function(ctrl, name) { - if (controller.url !== '/') - return; + if (ctrl.url !== '/') + return; - // controllers/default.js - cancel the execution of the function: view_index() + // ctrls/default.js - cancel the execution of the function: view_index() - if (!controller.isTransfer) { - controller.cancel(); - controller.transfer('/cancel/'); - } + if (!ctrl.isTransfer) { + ctrl.cancel(); + ctrl.transfer('/cancel/'); + } - // or - // controller.cancel().redirect('/cancel/'); + // or + // ctrl.cancel().redirect('/cancel/'); }); \ No newline at end of file diff --git a/controller-cancel/readme.md b/controller-cancel/readme.md index c83606b..a240272 100644 --- a/controller-cancel/readme.md +++ b/controller-cancel/readme.md @@ -6,8 +6,8 @@ Features covered by this example: * [Controllers](http://docs.totaljs.com/latest/en.html#pages~Controllers) - route URL requests to code * [Definitions](http://docs.totaljs.com/latest/en.html#pages~Definitions) - coded config files -* [`F.route()`](http://docs.totaljs.com/latest/en.html#api~Framework~framework.route) - define a route -* [`F.on('controller')`](http://docs.totaljs.com/latest/en.html#api~Framework~framework.on\('controller') - intercept controller requests +* [`ROUTE()`](http://docs.totaljs.com/latest/en.html#api~Framework~framework.route)) - define a route +* [`ON('controller')`](http://docs.totaljs.com/latest/en.html#api~Framework~ON('controller')) - intercept controller requests * [`controller.cancel()`](http://docs.totaljs.com/latest/en.html#api~FrameworkController~controller.cancel) - cancel a request * [`controller.redirect()`](http://docs.totaljs.com/latest/en.html#api~FrameworkController~controller.redirect) - redirect a request * [`controller.url`](http://docs.totaljs.com/latest/en.html#api~FrameworkController~controller.url) - determine request path @@ -19,8 +19,8 @@ Features covered by this example: The controller (`/controllers/default.js`) defines two routes: ```javascript -F.route( '/' , view_index ); -F.route( '/cancel/', view_cancel ); +ROUTE( '/', view_index); +ROUTE( '/cancel/', view_cancel); ``` We're going to make `/` route to `view_cancel` instead of `view_index`. The hard way (: @@ -31,24 +31,20 @@ We'll put our code in a definition file (`/definitions/cancel.js`) - definitions ![Initialisation Sequence](definitions.png) -First, we need to listen to the framework event for controllers: `F.on('controller')`: +First, we need to listen to the framework event for controllers: `ON('controller')`: ```javascript -F.on( 'controller', function( controller, name ) { - - // this will be triggered on every request to the controller - -} +ON('controller', function(controller, name) { + // this will be triggered on every request to the controller +}); ``` The most simplistic (and disastrous) way to redirect to `/cancel/` is as follows: ```javascript -F.on( 'controller', function( controller, name ) { - - controller.cancel().redirect('/cancel/'); - -} +ON('controller', function( controller, name ) { + controller.cancel().redirect('/cancel/'); +}); ``` This cancels any request in the controller, regardless of route, and then redirects to `/cancel/` ...which is itself a request and so it too will be intercepted, cancelled and redirected to `/cancel/`... over and over again. @@ -56,12 +52,10 @@ This cancels any request in the controller, regardless of route, and then redire Let's fix that: ```javascript -F.on( 'controller', function( controller, name ) { - - if (controller.url === '/') - controller.cancel().redirect('/cancel/'); - -} +ON('controller', function( controller, name ) { + if (controller.url === '/') + controller.cancel().redirect('/cancel/'); +}); ``` Now, only requests to `/` will be redirected to `/cancel/`, and requests to `/cancel/` will be successful. @@ -71,12 +65,10 @@ Now, only requests to `/` will be redirected to `/cancel/`, and requests to `/ca At first glance, transfers work just the same as redirects: ```javascript -F.on( 'controller', function( controller, name ) { - - if ( controller.url === '/' ) - controller.cancel().transfer( '/cancel/' ); - -} +ON('controller', function(controller, name) { + if (controller.url === '/') + controller.cancel().transfer( '/cancel/' ); +}); ``` However, there's a major benefit to using `.transfer()`: You can identify them using `.isTransfer`. @@ -85,10 +77,10 @@ Let's say you wanted to temporarilly cancel any route in your controller, for ex ```javascript -F.on( 'controller', function( controller, name ) { +ON('controller', function( controller, name ) { - if ( !controller.isTransfer ) // <-- exclude existing transfers - controller.cancel().transfer( '/cancel/' ); + if (!controller.isTransfer) // <-- exclude existing transfers + controller.cancel().transfer('/cancel/'); -} -``` +}); +``` \ No newline at end of file From 1dc7fd5d6019151a8e91bc78a458522e5d9396a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 10:57:09 +0200 Subject: [PATCH 068/157] Updated example. --- controller-mail/controllers/default.js | 10 ++++----- controller-mail/readme.md | 31 +++++++++++++------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/controller-mail/controllers/default.js b/controller-mail/controllers/default.js index 48673ad..924abd3 100644 --- a/controller-mail/controllers/default.js +++ b/controller-mail/controllers/default.js @@ -1,6 +1,6 @@ exports.install = function() { - F.route('/', view_homepage); - F.route('/mail/', redirect_mail); + ROUTE('GEt /', view_homepage); + ROUTE('GEt /mail/', redirect_mail); }; function view_homepage() { @@ -11,8 +11,8 @@ function redirect_mail() { var self = this; - // This function automatically reads view: email.html - self.mail('petersirka@gmail.com', 'Test e-mail', '~email', { name: 'MODEL NAME' }); - self.redirect('/?success=1'); + // This function automatically reads view: email.html + MAIL('petersirka@gmail.com', 'Test e-mail', '~email', { name: 'MODEL NAME' }); + self.redirect('/?success=1'); } \ No newline at end of file diff --git a/controller-mail/readme.md b/controller-mail/readme.md index 9ee18d4..a9cf842 100644 --- a/controller-mail/readme.md +++ b/controller-mail/readme.md @@ -7,9 +7,9 @@ Features covered by this example: * [Controllers](http://docs.totaljs.com/latest/en.html#pages~Controllers) - route URL requests to code * [Views](http://docs.totaljs.com/latest/en.html#pages~View%20engine) - HTML template engine * Config - settings (mail server) used by the framework -* [`F.route()`](http://docs.totaljs.com/latest/en.html#api~Framework~framework.route) - define a route +* [`ROUTE()`](http://docs.totaljs.com/latest/en.html#api~Framework~framework.route) - define a route * [`controller.view()`](http://docs.totaljs.com/latest/en.html#api~FrameworkController~controller.view) - render a HTML template -* [`controller.mail()`](http://docs.totaljs.com/latest/en.html#api~FrameworkController~controller.mail) - send an email +* [`MAIL()`](http://docs.totaljs.com/latest/en.html#api~Framework~F.mail) - send an email * [`controller.redirect()`](http://docs.totaljs.com/latest/en.html#api~FrameworkController~controller.redirect) - redirect a request * [`@{layout`](http://docs.totaljs.com/latest/en.html#api~FrameworkViews~%40%7Blayout), `@{if}`, `@{fi}`, [`query.success`](http://docs.totaljs.com/latest/en.html#api~FrameworkViews~%40%7Bquery.customKey%7D) and [`{@model.key}`](http://docs.totaljs.com/latest/en.html#api~FrameworkViews~%40%7Bmodel.customKey%7D) template tags @@ -18,11 +18,11 @@ Features covered by this example: This example will perform the following sequence of events: 1. Requests to the site homepage (`/`) route to the `view_homepage()` function - * `view_homepage()` renders the `homepage.html` "view" back to the browser - * the page contains a link (`/mail/`) to send email + * `view_homepage()` renders the `homepage.html` "view" back to the browser + * the page contains a link (`/mail/`) to send email 2. Requests to `/mail/` route to the `redirect_mail()` function - * `redirect_mail()` renders the `email.html` view and sends it in an email - * the user is then redirected back to the home page + * `redirect_mail()` renders the `email.html` view and sends it in an email + * the user is then redirected back to the home page 3. The homepage template detects a `?success` query string on the URL and outputs a success message ### Routing (Controller) @@ -31,8 +31,8 @@ The routing from URL path to handler function is done by the controller (`/contr ```javascript exports.install = function() { - F.route( '/' , view_homepage ); - F.route( '/mail/', redirect_mail ); + ROUTE( '/', view_homepage); + ROUTE( '/mail/', redirect_mail); }; ``` @@ -52,13 +52,12 @@ The second handler function renders `email.html` to an SMTP server, and then red ```javascript function redirect_mail() { - // send email template '~email' --> '../views/email.html' - // the object in the last parameter is the "model"; it can be accessed in the template - this.mail( 'petersirka@gmail.com', 'Test e-mail', '~email', { name: 'MODEL NAME' } ); - - // redirect to home page - this.redirect('/?success=1'); // <-- note 'success' query string + // send email template '~email' --> '../views/email.html' + // the object in the last parameter is the "model"; it can be accessed in the template + MAIL( 'petersirka@gmail.com', 'Test e-mail', '~email', { name: 'MODEL NAME' } ); + // redirect to home page + this.redirect('/?success=1'); // <-- note 'success' query string } ``` @@ -83,8 +82,8 @@ Now let's take a look at the HTML templates. First, the `/views/homepage.html`: @{layout('')} @{if query.success} -
    E-mail was sent.
    -
    +
    E-mail was sent.
    +
    @{fi} Send e-mail From f9fec16ca874ff90dea694203e74f15bbb210f00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Sat, 22 Jun 2019 17:24:34 +0200 Subject: [PATCH 069/157] Updated examples. --- controller-memorize/controllers/default.js | 6 +- controller-memorize/controllers/users.js | 17 - controller-proxy/proxy-products/config | 1 - .../proxy-products/controllers/default.js | 11 - controller-proxy/proxy-products/index.js | 16 - controller-proxy/proxy-user/config | 1 - .../proxy-user/controllers/default.js | 24 - controller-proxy/proxy-user/index.js | 16 - controller-proxy/server/config | 1 - .../server/controllers/default.js | 75 --- controller-proxy/server/index.js | 16 - controller-transfer/controllers/default.js | 12 +- cookies/controllers/default.js | 12 +- cors/controllers/default.js | 10 +- .../controllers/default.js | 2 +- custom-headers/controllers/default.js | 2 +- download-file-counter/controllers/default.js | 6 +- .../controllers/default.js | 37 +- download-file-progress/controllers/default.js | 48 -- download-file-progress/index.js | 16 - download-file-progress/public/empty | 1 - download-file-progress/readme.md | 7 - download-file-progress/views/homepage.html | 34 -- download-file/controllers/default.js | 4 +- download-stream/controllers/default.js | 6 +- external-compile-sass/controllers/default.js | 3 - external-compile-sass/definitions/sass.js | 30 - external-compile-sass/index.js | 16 - external-compile-sass/package.json | 18 - external-compile-sass/public/css/default.css | 7 - external-compile-sass/public/css/default.scss | 5 - external-compile-sass/readme.md | 3 - external-compile-sass/views/index.html | 27 - .../controllers/default.js | 3 - .../definitions/uglify.js | 6 - external-compile-uglifyjs/index.js | 16 - external-compile-uglifyjs/package.json | 18 - .../public/js/default.js | 8 - external-compile-uglifyjs/readme.md | 3 - external-compile-uglifyjs/views/index.html | 28 - font-awesome/controllers/default.js | 3 - font-awesome/index.js | 16 - font-awesome/public/css/font-awesome.min.css | 4 - font-awesome/public/fonts/FontAwesome.otf | Bin 85908 -> 0 bytes .../public/fonts/fontawesome-webfont.eot | Bin 56006 -> 0 bytes .../public/fonts/fontawesome-webfont.svg | 520 ------------------ .../public/fonts/fontawesome-webfont.ttf | Bin 112160 -> 0 bytes .../public/fonts/fontawesome-webfont.woff | Bin 65452 -> 0 bytes font-awesome/views/index.html | 5 - font-awesome/views/layout.html | 18 - forms/controllers/default.js | 41 -- forms/index.js | 16 - forms/views/layout.html | 23 - forms/views/registration.html | 42 -- forms/views/success.html | 1 - .../controllers/default.js | 19 - framework-business-logic-source/index.js | 16 - .../source/layer.js | 4 - framework-eval/controllers/default.js | 16 - framework-eval/index.js | 16 - framework-eval/views/index.html | 33 -- framework-functions/controllers/default.js | 14 - framework-functions/definitions/functions.js | 8 - framework-functions/index.js | 16 - framework-global/controllers/default.js | 9 - framework-global/definitions/global.js | 3 - framework-global/index.js | 16 - .../controllers/default.js | 12 - .../definitions/install.js | 3 - .../index.js | 16 - .../controllers/default.js | 8 - .../definitions/install.js | 3 - framework-install-config/index.js | 16 - framework-install-controller/index.js | 11 - .../controllers/default.js | 7 - framework-install-definition/index.js | 11 - .../controllers/default.js | 8 - framework-install-model/index.js | 11 - .../controllers/default.js | 8 - framework-install-module/index.js | 11 - framework-modules/controllers/default.js | 17 - framework-modules/index.js | 16 - framework-modules/modules/feedback.js | 64 --- framework-modules/modules/utils.js | 5 - framework-stop/controllers/default.js | 8 - framework-stop/index.js | 16 - framework-usage/controllers/default.js | 13 - framework-usage/index.js | 16 - framework-usage/modules/test.js | 8 - framework-version/index.js | 9 - generators/controllers/default.js | 40 -- generators/index.js | 16 - graphql/controllers/default.js | 13 - graphql/index.js | 16 - graphql/models/hello.js | 25 - heroku/controllers/default.js | 4 +- html-appcache-offline/controllers/default.js | 2 +- .../controllers/default.js | 4 +- image-resize/controllers/default.js | 12 +- image-resize/public/upload.jpg | Bin 0 -> 25368 bytes 100 files changed, 50 insertions(+), 1810 deletions(-) delete mode 100644 controller-memorize/controllers/users.js delete mode 100644 controller-proxy/proxy-products/config delete mode 100644 controller-proxy/proxy-products/controllers/default.js delete mode 100644 controller-proxy/proxy-products/index.js delete mode 100644 controller-proxy/proxy-user/config delete mode 100644 controller-proxy/proxy-user/controllers/default.js delete mode 100644 controller-proxy/proxy-user/index.js delete mode 100644 controller-proxy/server/config delete mode 100644 controller-proxy/server/controllers/default.js delete mode 100644 controller-proxy/server/index.js delete mode 100644 download-file-progress/controllers/default.js delete mode 100644 download-file-progress/index.js delete mode 100644 download-file-progress/public/empty delete mode 100644 download-file-progress/readme.md delete mode 100644 download-file-progress/views/homepage.html delete mode 100644 external-compile-sass/controllers/default.js delete mode 100644 external-compile-sass/definitions/sass.js delete mode 100644 external-compile-sass/index.js delete mode 100644 external-compile-sass/package.json delete mode 100644 external-compile-sass/public/css/default.css delete mode 100644 external-compile-sass/public/css/default.scss delete mode 100644 external-compile-sass/readme.md delete mode 100644 external-compile-sass/views/index.html delete mode 100644 external-compile-uglifyjs/controllers/default.js delete mode 100644 external-compile-uglifyjs/definitions/uglify.js delete mode 100644 external-compile-uglifyjs/index.js delete mode 100644 external-compile-uglifyjs/package.json delete mode 100644 external-compile-uglifyjs/public/js/default.js delete mode 100644 external-compile-uglifyjs/readme.md delete mode 100644 external-compile-uglifyjs/views/index.html delete mode 100644 font-awesome/controllers/default.js delete mode 100644 font-awesome/index.js delete mode 100644 font-awesome/public/css/font-awesome.min.css delete mode 100644 font-awesome/public/fonts/FontAwesome.otf delete mode 100644 font-awesome/public/fonts/fontawesome-webfont.eot delete mode 100644 font-awesome/public/fonts/fontawesome-webfont.svg delete mode 100644 font-awesome/public/fonts/fontawesome-webfont.ttf delete mode 100644 font-awesome/public/fonts/fontawesome-webfont.woff delete mode 100644 font-awesome/views/index.html delete mode 100644 font-awesome/views/layout.html delete mode 100644 forms/controllers/default.js delete mode 100644 forms/index.js delete mode 100644 forms/views/layout.html delete mode 100644 forms/views/registration.html delete mode 100644 forms/views/success.html delete mode 100644 framework-business-logic-source/controllers/default.js delete mode 100644 framework-business-logic-source/index.js delete mode 100644 framework-business-logic-source/source/layer.js delete mode 100644 framework-eval/controllers/default.js delete mode 100644 framework-eval/index.js delete mode 100644 framework-eval/views/index.html delete mode 100644 framework-functions/controllers/default.js delete mode 100644 framework-functions/definitions/functions.js delete mode 100644 framework-functions/index.js delete mode 100644 framework-global/controllers/default.js delete mode 100644 framework-global/definitions/global.js delete mode 100644 framework-global/index.js delete mode 100644 framework-install-business-logic-source/controllers/default.js delete mode 100644 framework-install-business-logic-source/definitions/install.js delete mode 100644 framework-install-business-logic-source/index.js delete mode 100644 framework-install-config/controllers/default.js delete mode 100644 framework-install-config/definitions/install.js delete mode 100644 framework-install-config/index.js delete mode 100644 framework-install-controller/index.js delete mode 100644 framework-install-definition/controllers/default.js delete mode 100644 framework-install-definition/index.js delete mode 100644 framework-install-model/controllers/default.js delete mode 100644 framework-install-model/index.js delete mode 100644 framework-install-module/controllers/default.js delete mode 100644 framework-install-module/index.js delete mode 100644 framework-modules/controllers/default.js delete mode 100644 framework-modules/index.js delete mode 100644 framework-modules/modules/feedback.js delete mode 100644 framework-modules/modules/utils.js delete mode 100644 framework-stop/controllers/default.js delete mode 100644 framework-stop/index.js delete mode 100644 framework-usage/controllers/default.js delete mode 100644 framework-usage/index.js delete mode 100644 framework-usage/modules/test.js delete mode 100644 framework-version/index.js delete mode 100644 generators/controllers/default.js delete mode 100644 generators/index.js delete mode 100644 graphql/controllers/default.js delete mode 100644 graphql/index.js delete mode 100644 graphql/models/hello.js create mode 100644 image-resize/public/upload.jpg diff --git a/controller-memorize/controllers/default.js b/controller-memorize/controllers/default.js index dccb768..6bd8c11 100644 --- a/controller-memorize/controllers/default.js +++ b/controller-memorize/controllers/default.js @@ -1,7 +1,7 @@ exports.install = function() { - F.route('/', view); - F.route('/json/', json); - F.route('/plain/', plain); + ROUTE('GET /', view); + ROUTE('GET /json/', json); + ROUTE('GET /plain/', plain); }; function view() { diff --git a/controller-memorize/controllers/users.js b/controller-memorize/controllers/users.js deleted file mode 100644 index d54ef8b..0000000 --- a/controller-memorize/controllers/users.js +++ /dev/null @@ -1,17 +0,0 @@ -exports.install = function() { - F.route('/users/', view_users); -}; - -exports.models = { - users: ['Peter', 'Lucia', 'Zuzana', 'Veronika'] -}; - -exports.functions = { - exists: function(name) { - return exports.models.users.indexOf(name) > -1; - } -}; - -function view_users() { - this.json(exports.models.users); -} \ No newline at end of file diff --git a/controller-proxy/proxy-products/config b/controller-proxy/proxy-products/config deleted file mode 100644 index a7151e4..0000000 --- a/controller-proxy/proxy-products/config +++ /dev/null @@ -1 +0,0 @@ -default-port : 8002 \ No newline at end of file diff --git a/controller-proxy/proxy-products/controllers/default.js b/controller-proxy/proxy-products/controllers/default.js deleted file mode 100644 index 217889b..0000000 --- a/controller-proxy/proxy-products/controllers/default.js +++ /dev/null @@ -1,11 +0,0 @@ -exports.install = function() { - F.route('/', json_products, ['proxy']); -}; - -function json_products() { - - var self = this; - var products = ['A', 'B', 'C', 'D', 'E', 'F']; - - self.json(products); -}; \ No newline at end of file diff --git a/controller-proxy/proxy-products/index.js b/controller-proxy/proxy-products/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/controller-proxy/proxy-products/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-proxy/proxy-user/config b/controller-proxy/proxy-user/config deleted file mode 100644 index e1888f7..0000000 --- a/controller-proxy/proxy-user/config +++ /dev/null @@ -1 +0,0 @@ -default-port : 8001 \ No newline at end of file diff --git a/controller-proxy/proxy-user/controllers/default.js b/controller-proxy/proxy-user/controllers/default.js deleted file mode 100644 index 076975b..0000000 --- a/controller-proxy/proxy-user/controllers/default.js +++ /dev/null @@ -1,24 +0,0 @@ -exports.install = function() { - F.route('/users/', json_users); - F.route('/', json_users, ['proxy']); -}; - -function json_users() { - - var self = this; - - var users = [ - { name: 'Peter', age: 30 }, - { name: 'Jano', age: 23 }, - { name: 'Lucia', age: 32 }, - { name: 'Igor', age: 34 }, - { name: 'Libor', age: 24 }, - { name: 'Tomas', age: 34 }, - { name: 'Martin', age: 49 }, - { name: 'Ivan', age: 29 } - ]; - - var output = users.where(n => n.age > self.body.age); - self.json(output); - -}; \ No newline at end of file diff --git a/controller-proxy/proxy-user/index.js b/controller-proxy/proxy-user/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/controller-proxy/proxy-user/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-proxy/server/config b/controller-proxy/server/config deleted file mode 100644 index f71d02d..0000000 --- a/controller-proxy/server/config +++ /dev/null @@ -1 +0,0 @@ -default-port : 8000 \ No newline at end of file diff --git a/controller-proxy/server/controllers/default.js b/controller-proxy/server/controllers/default.js deleted file mode 100644 index afa1526..0000000 --- a/controller-proxy/server/controllers/default.js +++ /dev/null @@ -1,75 +0,0 @@ -exports.install = function() { - F.route('/', view_homepage); - F.route('/otherwise/', view_otherwise); -}; - -function view_homepage() { - - var self = this; - - var db = { - products: [], - users: [] - }; - - self.async.await(function(next) { - self.proxy('http://127.0.0.1:8001', { age: 25 }, function(error, data) { - console.log(error, data); - - if (error) - self.error(error); - - db.users = data; - next(); - }); - }); - - self.async.await(function(next) { - self.proxy('http://127.0.0.1:8002', {}, function(error, data) { - - if (error) - self.error(error); - - db.products = data; - next(); - }); - }); - - self.async.run(() => self.json(db)); -} - -function view_otherwise() { - - var self = this; - - var db = { - products: [], - users: [] - }; - - var fn = []; - - fn.push(function(next) { - self.proxy('http://127.0.0.1:8001', { age: 25 }, function(error, data) { - - if (error) - self.error(error); - - db.users = data; - next(); - }); - }); - - fn.push(function(next) { - self.proxy('http://127.0.0.1:8002', {}, function(error, data) { - - if (error) - self.error(error); - - db.products = data; - next(); - }); - }); - - fn.async(() => self.json(db)); -} \ No newline at end of file diff --git a/controller-proxy/server/index.js b/controller-proxy/server/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/controller-proxy/server/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/controller-transfer/controllers/default.js b/controller-transfer/controllers/default.js index 416a45c..d6af664 100644 --- a/controller-transfer/controllers/default.js +++ b/controller-transfer/controllers/default.js @@ -1,13 +1,13 @@ exports.install = function() { - F.route('/', view_index); - F.route('/other/', view_other); - F.route('/other/', view_other_post, ['post']); + ROUTE('GET /', view_index); + ROUTE('GET /other/', view_other); + ROUTE('POST /other/', view_other_post); }; function view_index() { - var self = this; + var self = this; if (!self.transfer('/other/', ['post'])) - return self.throw404(); + return self.throw404(); } function view_other() { @@ -15,5 +15,5 @@ function view_other() { } function view_other_post() { - this.plain('OTHER - POST'); + this.plain('OTHER - POST'); } \ No newline at end of file diff --git a/cookies/controllers/default.js b/cookies/controllers/default.js index a504f82..0884fe2 100644 --- a/cookies/controllers/default.js +++ b/cookies/controllers/default.js @@ -1,18 +1,18 @@ exports.install = function() { - F.route('/read/', cookieRead); - F.route('/write/', cookieWrite); + ROUTE('GET /get/', cookieRead); + ROUTE('GET /set/', cookieWrite); }; function cookieRead() { var self = this; - self.plain('Cookie example\nread test1: ' + (self.req.cookie('test1') || 'null') + '\nread test2: ' + (self.req.cookie('test2') || 'null')); + self.plain('Cookie example\nread test1: ' + (self.cookie('test1') || 'null') + '\nread test2: ' + (self.cookie('test2') || 'null')); } function cookieWrite() { var self = this; - self.res.cookie('test1', 'value 1', '2 days'); - self.res.cookie('test2', 'value 2', new Date().add('day', 1)); + self.cookie('test1', 'value 1', '2 days'); + self.cookie('test2', 'value 2', new Date().add('day', 1)); // options.domain // options.path @@ -21,5 +21,5 @@ function cookieWrite() { // self.res.cookie(name, value, expire, [options]); //self.plain('Cookie example, write: ' + value); - self.redirect('/read/'); + self.redirect('/get/'); } \ No newline at end of file diff --git a/cors/controllers/default.js b/cors/controllers/default.js index eaaf13c..3b8ac4e 100644 --- a/cors/controllers/default.js +++ b/cors/controllers/default.js @@ -1,10 +1,10 @@ exports.install = function() { - F.route('/time/', cors_time, ['cors']); - // is same as: - // F.cors('/time/', ['GET']) + ROUTE('GET /', cors_time); + + // Enables CORS for all requests + CORS(); }; function cors_time() { - var self = this; - self.plain(new Date().toString()); + this.plain(new Date().toString()); } \ No newline at end of file diff --git a/css-auto-vendor-prefixes/controllers/default.js b/css-auto-vendor-prefixes/controllers/default.js index 69ec1c8..b3a4e86 100644 --- a/css-auto-vendor-prefixes/controllers/default.js +++ b/css-auto-vendor-prefixes/controllers/default.js @@ -1,3 +1,3 @@ exports.install = function() { - F.route('/'); + ROUTE('GET /'); }; \ No newline at end of file diff --git a/custom-headers/controllers/default.js b/custom-headers/controllers/default.js index fac9def..28e3747 100644 --- a/custom-headers/controllers/default.js +++ b/custom-headers/controllers/default.js @@ -1,5 +1,5 @@ exports.install = function() { - F.route('/', view_homepage); + ROUTE('GET /', view_homepage); }; function view_homepage() { diff --git a/download-file-counter/controllers/default.js b/download-file-counter/controllers/default.js index 6704f58..a37040d 100644 --- a/download-file-counter/controllers/default.js +++ b/download-file-counter/controllers/default.js @@ -3,10 +3,10 @@ var counter = 0; exports.install = function() { // route index - F.route('/', view_homepage); + ROUTE('/', view_homepage); // file route - F.file('*.pdf', file_download); + FILE('*.pdf', file_download); }; function view_homepage() { @@ -22,5 +22,5 @@ function file_download(req, res) { counter++; // response file - res.file(F.path.public(filename), filename); + res.file(PATH.public(filename), filename); } \ No newline at end of file diff --git a/download-file-database-nosql/controllers/default.js b/download-file-database-nosql/controllers/default.js index 8330c6a..a8eb095 100644 --- a/download-file-database-nosql/controllers/default.js +++ b/download-file-database-nosql/controllers/default.js @@ -5,8 +5,8 @@ exports.install = function() { db.insert({ file: db.binary.insert('logo.png', 'image/png', require('fs').readFileSync('/users/petersirka/desktop/logo.png')) }); */ - F.route('/', view_homepage); - F.file('*.png', static_image); + ROUTE('GET /', view_homepage); + FILE('*.png', static_image); }; function view_homepage() { @@ -16,35 +16,10 @@ function view_homepage() { // Serve image from database products function static_image(req, res) { - - var db = NOSQL('images'); var id = req.uri.pathname.replace('/', '').replace('.png', ''); - - // Check the client cache via etag - // if not modified - framework sends automatically 304 - // id === etag - /* - if (F.notModified(req, res, id)) - return; - */ - - db.binary.read(id, function(err, stream, header) { - - if (err) { - res.throw404(); - return; - } - - // Set HTTP cache via etag - // F.setModified(req, res, id); - - res.image(stream, function(image) { - image.resize('50%'); - image.output('png'); - image.minify(); - }); - - // or - // res.stream('image/png', stream); + res.imagenosql('images', id, function(image) { + image.resize('50%'); + image.output('png'); + image.minify(); }); } \ No newline at end of file diff --git a/download-file-progress/controllers/default.js b/download-file-progress/controllers/default.js deleted file mode 100644 index 99d54f2..0000000 --- a/download-file-progress/controllers/default.js +++ /dev/null @@ -1,48 +0,0 @@ -var fs = require('fs'); -var progress = {}; - -exports.install = function() { - F.route('/', view_homepage); - F.route('/', json_percentage, ['xhr']); - F.route('/download/', file_download); -}; - -/** - * Homepage - */ -function view_homepage() { - var self = this; - self.view('homepage'); -} - -/** - * Get download percentage - */ -function json_percentage() { - var self = this; - var id = (self.req.headers['user-agent'] + self.ip).hash(); - self.json({ percentage: progress[id] || 0 }); -} - -/** - * Download larger file - */ -function file_download() { - - var self = this; - var filename = F.path.public('file.zip'); - var stream = fs.createReadStream(filename); - - var size = fs.statSync(filename).size; - var current = 0; - var id = (self.req.headers['user-agent'] + self.ip).hash(); - - progress[id] = 0; - - stream.on('data', function(buffer) { - current += buffer.length; - progress[id] = Math.floor((current / size) * 100); - }); - - self.stream(U.getContentType('zip'), stream, 'file.zip'); -} diff --git a/download-file-progress/index.js b/download-file-progress/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/download-file-progress/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/download-file-progress/public/empty b/download-file-progress/public/empty deleted file mode 100644 index 0c96d8a..0000000 --- a/download-file-progress/public/empty +++ /dev/null @@ -1 +0,0 @@ -DELETE THIS FILE \ No newline at end of file diff --git a/download-file-progress/readme.md b/download-file-progress/readme.md deleted file mode 100644 index 03de524..0000000 --- a/download-file-progress/readme.md +++ /dev/null @@ -1,7 +0,0 @@ -# Download progress - -- copy some large .zip file into the __/public/file.zip__ (more than 100 MB) -- the filename must have the name: __file.zip__ - -__Please support total.js on GitHub:__ - \ No newline at end of file diff --git a/download-file-progress/views/homepage.html b/download-file-progress/views/homepage.html deleted file mode 100644 index fe73001..0000000 --- a/download-file-progress/views/homepage.html +++ /dev/null @@ -1,34 +0,0 @@ -@{layout('')} - - - - - Download progress - - - - - - - - - - -
    0%
    - - - - - - \ No newline at end of file diff --git a/download-file/controllers/default.js b/download-file/controllers/default.js index cf351a0..fe57012 100644 --- a/download-file/controllers/default.js +++ b/download-file/controllers/default.js @@ -1,6 +1,6 @@ exports.install = function() { - F.route('/', file_download); - F.route('/image/', image_download); + ROUTE('GET /', file_download); + ROUTE('GET /image/', image_download); }; function file_download() { diff --git a/download-stream/controllers/default.js b/download-stream/controllers/default.js index 679a4b7..75aa3c4 100644 --- a/download-stream/controllers/default.js +++ b/download-stream/controllers/default.js @@ -1,10 +1,10 @@ -var fs = require('fs'); +var Fs = require('fs'); exports.install = function() { - F.route('/', file_download); + ROUTE('GET /', file_download); }; function file_download() { var self = this; - self.stream('application/pdf', fs.createReadStream(F.path.public('totaljs.pdf')), 'logo.pdf'); + self.stream('application/pdf', Fs.createReadStream(F.path.public('totaljs.pdf')), 'logo.pdf'); } \ No newline at end of file diff --git a/external-compile-sass/controllers/default.js b/external-compile-sass/controllers/default.js deleted file mode 100644 index 69ec1c8..0000000 --- a/external-compile-sass/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/external-compile-sass/definitions/sass.js b/external-compile-sass/definitions/sass.js deleted file mode 100644 index 539d3e5..0000000 --- a/external-compile-sass/definitions/sass.js +++ /dev/null @@ -1,30 +0,0 @@ -var sass = require('node-sass'); -var Fs = require('fs'); - -F.accept('scss', 'text/css'); - -F.helpers.scss = function(name) { - return ''; -}; - -FILE(function(req, res, is) { - if (is) - return req.extension === 'scss'; - F.exists(req, res, 20, function(next, tmp) { - var filename = F.path.public(req.url); - Fs.readFile(filename, function(err, data) { - if (err) { - next(); - res.throw404(); - } else { - var content = F.onCompileStyle(filename, data.toString('utf8')); - Fs.writeFileSync(tmp, content); - res.content(200, content, 'text/css', true); - } - }); - }); -}); - -F.onCompileStyle = function (filename, content) { - return sass.renderSync({ file: filename, data: content, outputStyle: 'compressed' }).css.toString('utf8'); -}; \ No newline at end of file diff --git a/external-compile-sass/index.js b/external-compile-sass/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/external-compile-sass/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/external-compile-sass/package.json b/external-compile-sass/package.json deleted file mode 100644 index 231bb0b..0000000 --- a/external-compile-sass/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Example", - "main": "index.js", - "version": "1.0.0", - "repository": "totaljs/examples", - "dependencies": { - "total.js": "latest", - "node-sass": "latest" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "total.js" - ], - "author": "Peter Širka", - "license": "MIT" -} diff --git a/external-compile-sass/public/css/default.css b/external-compile-sass/public/css/default.css deleted file mode 100644 index 8dcac57..0000000 --- a/external-compile-sass/public/css/default.css +++ /dev/null @@ -1,7 +0,0 @@ -$blue: #3bbfce; -$margin: 16px; - -.content { - border-color: $blue; - color: darken($blue, 9%); -} \ No newline at end of file diff --git a/external-compile-sass/public/css/default.scss b/external-compile-sass/public/css/default.scss deleted file mode 100644 index c9b5e69..0000000 --- a/external-compile-sass/public/css/default.scss +++ /dev/null @@ -1,5 +0,0 @@ -$blue: #3bbfce; - -.content { - border: 2px solid $blue; -} \ No newline at end of file diff --git a/external-compile-sass/readme.md b/external-compile-sass/readme.md deleted file mode 100644 index 46eb505..0000000 --- a/external-compile-sass/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -You must install sass compiler: - -> npm install node-sass \ No newline at end of file diff --git a/external-compile-sass/views/index.html b/external-compile-sass/views/index.html deleted file mode 100644 index 5db6887..0000000 --- a/external-compile-sass/views/index.html +++ /dev/null @@ -1,27 +0,0 @@ -@{layout('')} - - - - - @{meta} - - - - - - @{css('default.css')} - @{scss('default.scss')} - - - - - - - -
    SASS
    - - - \ No newline at end of file diff --git a/external-compile-uglifyjs/controllers/default.js b/external-compile-uglifyjs/controllers/default.js deleted file mode 100644 index 69ec1c8..0000000 --- a/external-compile-uglifyjs/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/external-compile-uglifyjs/definitions/uglify.js b/external-compile-uglifyjs/definitions/uglify.js deleted file mode 100644 index c22e94e..0000000 --- a/external-compile-uglifyjs/definitions/uglify.js +++ /dev/null @@ -1,6 +0,0 @@ -var uglify = require('uglify-js'); - -F.onCompileScript = function (filename, content) { - // if filename === '' then it is the inline script - return uglify.minify(content, { fromString: true, mangle: true }).code; -}; \ No newline at end of file diff --git a/external-compile-uglifyjs/index.js b/external-compile-uglifyjs/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/external-compile-uglifyjs/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/external-compile-uglifyjs/package.json b/external-compile-uglifyjs/package.json deleted file mode 100644 index 37713fa..0000000 --- a/external-compile-uglifyjs/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "Example", - "main": "index.js", - "version": "1.0.0", - "repository": "totaljs/examples", - "dependencies": { - "total.js": "latest", - "uglify-js": "latest" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "total.js" - ], - "author": "Peter Širka", - "license": "MIT" -} \ No newline at end of file diff --git a/external-compile-uglifyjs/public/js/default.js b/external-compile-uglifyjs/public/js/default.js deleted file mode 100644 index ccc40da..0000000 --- a/external-compile-uglifyjs/public/js/default.js +++ /dev/null @@ -1,8 +0,0 @@ -var obj = { - name: 'Peter', - age: 35 -}; - -function getName() { - return obj.name; -} \ No newline at end of file diff --git a/external-compile-uglifyjs/readme.md b/external-compile-uglifyjs/readme.md deleted file mode 100644 index a237ae7..0000000 --- a/external-compile-uglifyjs/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -You must install UglifyJS: - -> npm install uglify-js \ No newline at end of file diff --git a/external-compile-uglifyjs/views/index.html b/external-compile-uglifyjs/views/index.html deleted file mode 100644 index 49d540f..0000000 --- a/external-compile-uglifyjs/views/index.html +++ /dev/null @@ -1,28 +0,0 @@ -@{layout('')} - - - - - @{meta} - - - - - - @{js('default.js')} - - - - - - - - - - \ No newline at end of file diff --git a/font-awesome/controllers/default.js b/font-awesome/controllers/default.js deleted file mode 100644 index 29469cc..0000000 --- a/font-awesome/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/font-awesome/index.js b/font-awesome/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/font-awesome/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/font-awesome/public/css/font-awesome.min.css b/font-awesome/public/css/font-awesome.min.css deleted file mode 100644 index ec53d4d..0000000 --- a/font-awesome/public/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} \ No newline at end of file diff --git a/font-awesome/public/fonts/FontAwesome.otf b/font-awesome/public/fonts/FontAwesome.otf deleted file mode 100644 index 81c9ad949b47f64afeca5642ee2494b6e3147f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85908 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 uQr82 diff --git a/font-awesome/public/fonts/fontawesome-webfont.eot b/font-awesome/public/fonts/fontawesome-webfont.eot deleted file mode 100644 index 84677bc0c5f37f1fac9d87548c4554b5c91717cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56006 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�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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/font-awesome/public/fonts/fontawesome-webfont.ttf b/font-awesome/public/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 96a3639cdde5e8ab459c6380e3b9524ee81641dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112160 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 zÄ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 V*eEM;|ho{trTA6=?tf diff --git a/font-awesome/public/fonts/fontawesome-webfont.woff b/font-awesome/public/fonts/fontawesome-webfont.woff deleted file mode 100644 index 628b6a52a87e62c6f22426e17c01f6a303aa194e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65452 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 q%u^)w#YX9ZIvhtu?9Cy6YRi6f6G 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 diff --git a/font-awesome/views/index.html b/font-awesome/views/index.html deleted file mode 100644 index 57ef333..0000000 --- a/font-awesome/views/index.html +++ /dev/null @@ -1,5 +0,0 @@ -@{meta('Example: Font Awesome')} - - -
    - diff --git a/font-awesome/views/layout.html b/font-awesome/views/layout.html deleted file mode 100644 index 9515647..0000000 --- a/font-awesome/views/layout.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - @{meta} - - - - - - @{head} - @{css('font-awesome.min.css')} - - - - @{body} - - - \ No newline at end of file diff --git a/forms/controllers/default.js b/forms/controllers/default.js deleted file mode 100644 index ebd400d..0000000 --- a/forms/controllers/default.js +++ /dev/null @@ -1,41 +0,0 @@ -exports.install = function() { - F.route('/', view_registration); - F.route('/', json_registration, ['post']); -}; - -function codelist(controller) { - controller.repository.country = ['', 'SK', 'CZ', 'EN', 'DE', 'AU', 'HU', 'PL', 'FR']; - controller.repository.type = [ - { id: 0, name: '' }, - { id: 1, name: 'Developer' }, - { id: 2, name: 'Webdesigner' }, - { id: 3, name: 'Copywriter' }, - { id: 4, name: 'Consultant' } - ]; -} - -function view_registration() { - var self = this; - - var model = { - type: 0, - name: '', - email: '@', - password: '', - phone: '+421', - country: 'SK', - terms: true - }; - - codelist(self); - self.view('registration', model); -} - -// THIS IS BAD EXAMPLE (SEND FORM VIA XHR) -// METHOD: POST -function json_registration() { - var self = this; - codelist(self); - self.repository.isSuccess = true; - self.view('registration', self.body); -} \ No newline at end of file diff --git a/forms/index.js b/forms/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/forms/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/forms/views/layout.html b/forms/views/layout.html deleted file mode 100644 index 28b9d0e..0000000 --- a/forms/views/layout.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - Registration - - - - - - - - - - - -
    @{body}
    - - - \ No newline at end of file diff --git a/forms/views/registration.html b/forms/views/registration.html deleted file mode 100644 index 40386d6..0000000 --- a/forms/views/registration.html +++ /dev/null @@ -1,42 +0,0 @@ -
    Registration
    -
    - -@{viewToggle(repository.isSuccess, 'success')} - -
    - -
    Registration type:
    -
    - -
    -
    -
    Name:
    -
    @{text('name')}
    -
    -
    E-mail:
    -
    @{text('email')}
    -
    - -
    Phone:
    -
    -
    -
    Password:
    -
    @{password('password')}
    -
    -
    Country:
    -
    - -
    -
    -
    - @{checkbox('terms', 'I agree')} -
    -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/forms/views/success.html b/forms/views/success.html deleted file mode 100644 index 8f8c904..0000000 --- a/forms/views/success.html +++ /dev/null @@ -1 +0,0 @@ -
    SUCCESS
    \ No newline at end of file diff --git a/framework-business-logic-source/controllers/default.js b/framework-business-logic-source/controllers/default.js deleted file mode 100644 index aa2c987..0000000 --- a/framework-business-logic-source/controllers/default.js +++ /dev/null @@ -1,19 +0,0 @@ -exports.install = function() { - F.route('/', view_index); -}; - -function view_index() { - var self = this; - - // This function does the same as require (only adds path to the source directory) - - // INCLUDE == SOURCE are same - - // http://docs.totaljs.com/global/#INCLUDE - var layer_include = INCLUDE('layer'); - - // http://docs.totaljs.com/global/#SOURCE - var layer_source = SOURCE('layer'); - - self.plain('{0}\n{1}'.format(layer_include.hello(), layer_source.hello())); -} \ No newline at end of file diff --git a/framework-business-logic-source/index.js b/framework-business-logic-source/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-business-logic-source/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-business-logic-source/source/layer.js b/framework-business-logic-source/source/layer.js deleted file mode 100644 index ddcba3f..0000000 --- a/framework-business-logic-source/source/layer.js +++ /dev/null @@ -1,4 +0,0 @@ - -exports.hello = function() { - return 'Hello World!'; -}; \ No newline at end of file diff --git a/framework-eval/controllers/default.js b/framework-eval/controllers/default.js deleted file mode 100644 index 6a2ac2e..0000000 --- a/framework-eval/controllers/default.js +++ /dev/null @@ -1,16 +0,0 @@ -exports.install = function() { - F.route('/', view_index); - F.route('/eval/', post_eval, ['post']); - -}; - -function view_index() { - var self = this; - self.view('index', { text: 'console.log(\'from client side ...\');' }); -} - -function post_eval() { - var self = this; - F.eval(self.body.text); - self.json({ r: true }); -} \ No newline at end of file diff --git a/framework-eval/index.js b/framework-eval/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-eval/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-eval/views/index.html b/framework-eval/views/index.html deleted file mode 100644 index df62b84..0000000 --- a/framework-eval/views/index.html +++ /dev/null @@ -1,33 +0,0 @@ -@{layout('')} - - - - - @{meta} - - - - - - @{head} - - - - -
    Show node.js console:
    -
    -
    - @{textarea('text', { style: "width:600px;height:200px;font:normal 12px 'Consolas', 'Courier New'" })} -
    - - - - - - \ No newline at end of file diff --git a/framework-functions/controllers/default.js b/framework-functions/controllers/default.js deleted file mode 100644 index 9422527..0000000 --- a/framework-functions/controllers/default.js +++ /dev/null @@ -1,14 +0,0 @@ -exports.install = function() { - F.route('/', plain_index); -}; - -function plain_index() { - - var self = this; - var now = F.functions.now(); - - // or - - var hello = FUNCTION('hello')(); - self.plain(now.format('dd.MM.yyyy - HH:mm:ss') + ' - ' + hello); -} \ No newline at end of file diff --git a/framework-functions/definitions/functions.js b/framework-functions/definitions/functions.js deleted file mode 100644 index 287e5c0..0000000 --- a/framework-functions/definitions/functions.js +++ /dev/null @@ -1,8 +0,0 @@ - -F.functions.now = function() { - return new Date(); -}; - -F.functions.hello = function() { - return 'Hello world!'; -}; \ No newline at end of file diff --git a/framework-functions/index.js b/framework-functions/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-functions/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-global/controllers/default.js b/framework-global/controllers/default.js deleted file mode 100644 index 3215a49..0000000 --- a/framework-global/controllers/default.js +++ /dev/null @@ -1,9 +0,0 @@ -exports.install = function() { - F.route('/', view_index); -}; - -function view_index() { - var self = this; - // in some view: @{global.name} - self.json(F.global); -} \ No newline at end of file diff --git a/framework-global/definitions/global.js b/framework-global/definitions/global.js deleted file mode 100644 index 6341536..0000000 --- a/framework-global/definitions/global.js +++ /dev/null @@ -1,3 +0,0 @@ -// FRAMEWORK GLOBAL VARIABLE -F.global.name = 'TEST'; -F.global.category = ['A', 'B', 'C']; \ No newline at end of file diff --git a/framework-global/index.js b/framework-global/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-global/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-install-business-logic-source/controllers/default.js b/framework-install-business-logic-source/controllers/default.js deleted file mode 100644 index 96d7e90..0000000 --- a/framework-install-business-logic-source/controllers/default.js +++ /dev/null @@ -1,12 +0,0 @@ -exports.install = function() { - F.route('/', plain_index); -}; - -function plain_index() { - var self = this; - - var layer = SOURCE('test'); - // or INCLUDE('test') - - self.plain(layer.hello()); -} \ No newline at end of file diff --git a/framework-install-business-logic-source/definitions/install.js b/framework-install-business-logic-source/definitions/install.js deleted file mode 100644 index 77b4517..0000000 --- a/framework-install-business-logic-source/definitions/install.js +++ /dev/null @@ -1,3 +0,0 @@ -F.on('load', function() { - F.install('source', 'test', 'https://www.totaljs.com/inject-source.js'); -}); \ No newline at end of file diff --git a/framework-install-business-logic-source/index.js b/framework-install-business-logic-source/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-install-business-logic-source/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-install-config/controllers/default.js b/framework-install-config/controllers/default.js deleted file mode 100644 index 36744d6..0000000 --- a/framework-install-config/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/', plan_index); -}; - -function plan_index() { - var self = this; - self.plain('name : {0}\nversion : {1}\nauthor : {2}'.format(F.config.name, F.config.version, F.config.author)); -} \ No newline at end of file diff --git a/framework-install-config/definitions/install.js b/framework-install-config/definitions/install.js deleted file mode 100644 index aeb6dce..0000000 --- a/framework-install-config/definitions/install.js +++ /dev/null @@ -1,3 +0,0 @@ -F.on('load', function() { - F.install('config', 'https://www.totaljs.com/examples/inject-config.txt'); -}); \ No newline at end of file diff --git a/framework-install-config/index.js b/framework-install-config/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-install-config/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-install-controller/index.js b/framework-install-controller/index.js deleted file mode 100644 index 5492012..0000000 --- a/framework-install-controller/index.js +++ /dev/null @@ -1,11 +0,0 @@ -// =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com -// =================================================== - -require('total.js').http('debug'); - -F.on('load', function() { - F.install('controller', 'https://www.totaljs.com/examples/inject-controller.js'); -}); \ No newline at end of file diff --git a/framework-install-definition/controllers/default.js b/framework-install-definition/controllers/default.js deleted file mode 100644 index e1506f5..0000000 --- a/framework-install-definition/controllers/default.js +++ /dev/null @@ -1,7 +0,0 @@ -exports.install = function() { - F.route('/', plain_index); -}; -function plain_index() { - var self = this; - self.empty(); -} \ No newline at end of file diff --git a/framework-install-definition/index.js b/framework-install-definition/index.js deleted file mode 100644 index 3e7680f..0000000 --- a/framework-install-definition/index.js +++ /dev/null @@ -1,11 +0,0 @@ -// =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com -// =================================================== - -require('total.js').http('debug'); - -F.on('load', function() { - F.install('definition', 'https://www.totaljs.com/examples/inject-definition.js'); -}); \ No newline at end of file diff --git a/framework-install-model/controllers/default.js b/framework-install-model/controllers/default.js deleted file mode 100644 index 162ab99..0000000 --- a/framework-install-model/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/', plain_index); -}; - -function plain_index() { - var self = this; - self.plain(MODEL('user').user()); -} \ No newline at end of file diff --git a/framework-install-model/index.js b/framework-install-model/index.js deleted file mode 100644 index bea7dd1..0000000 --- a/framework-install-model/index.js +++ /dev/null @@ -1,11 +0,0 @@ -// =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com -// =================================================== - -require('total.js').http('debug'); - -F.on('load', function() { - F.install('model', 'https://www.totaljs.com/examples/inject-model.js'); -}); \ No newline at end of file diff --git a/framework-install-module/controllers/default.js b/framework-install-module/controllers/default.js deleted file mode 100644 index 01f06ee..0000000 --- a/framework-install-module/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/', plain_homepage); -}; - -function plain_homepage() { - var self = this; - self.plain(self.module('Test').hello()); -} \ No newline at end of file diff --git a/framework-install-module/index.js b/framework-install-module/index.js deleted file mode 100644 index 4f9cdc9..0000000 --- a/framework-install-module/index.js +++ /dev/null @@ -1,11 +0,0 @@ -// =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com -// =================================================== - -require('total.js').http('debug'); - -F.on('load', function() { - F.install('module', 'https://www.totaljs.com/examples/inject-module.js'); -}); \ No newline at end of file diff --git a/framework-modules/controllers/default.js b/framework-modules/controllers/default.js deleted file mode 100644 index 13c6efe..0000000 --- a/framework-modules/controllers/default.js +++ /dev/null @@ -1,17 +0,0 @@ -exports.install = function() { - F.route('/', view_index); -}; - -function view_index() { - - var self = this; - - // call a module - var now = self.module('utils').now(); - - // or - - var greeting = MODULE('feedback').greeting('Thanks'); - - self.plain('From module utils -> {0} ({1})'.format(now, greeting)); -} \ No newline at end of file diff --git a/framework-modules/index.js b/framework-modules/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-modules/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-modules/modules/feedback.js b/framework-modules/modules/feedback.js deleted file mode 100644 index d45a37c..0000000 --- a/framework-modules/modules/feedback.js +++ /dev/null @@ -1,64 +0,0 @@ -var greeting = ''; - -exports.version = '1.01'; - -exports.install = function(options) { - - F.route('/feedback/', feedback); - - // INSTALL('view', 'feedback-view', 'http://www.some-url.com/some-view.html'); - - // create client side JavaScript - // F.fs.create.js('feedback.js', 'func' + 'tion feedback() { alert("I am feedback"); }'); - - // create client side CSS - // F.fs.create.css('feedback.css', 'feedback { padding:5px; font: normal 20px Arial; }'); - - // create view file (must exists Views directory) - // F.fs.create.view('feedback', '
    VIEW
    '); - - // create resource (must exists Resources directory) - // F.fs.create.resource('feedback', 'hello : welcome in feedback resource'); - - // get directory path - // F.path.public('image.jpg'); - // F.path.logs(); - // F.path.temp(); - // F.path.backup(); - // F.path.root(); - - /* - - F.on('load', function() { - // all controllers and modules is loaded - }); - - F.on('controller', function(controller, name) { - // every request to controller call this event - console.log(controller.req.ip); - }); - */ - -}; - -exports.uninstall = function(options) { - - // routes are removed automatically - - // remove files - // F.fs.rm.css('feedback'); - // F.fs.rm.js('feedback'); - // F.fs.rm.view('feedback'); - // F.fs.rm.resource('feedback'); - -}; - -exports.greeting = function(value) { - console.log('From greeting(): ' + value); - greeting = value; - return value; -}; - -function feedback() { - this.plain('action in module: feedback.js'); -} \ No newline at end of file diff --git a/framework-modules/modules/utils.js b/framework-modules/modules/utils.js deleted file mode 100644 index c233e09..0000000 --- a/framework-modules/modules/utils.js +++ /dev/null @@ -1,5 +0,0 @@ -exports.version = '1.01'; - -exports.now = function now() { - return new Date(); -}; \ No newline at end of file diff --git a/framework-stop/controllers/default.js b/framework-stop/controllers/default.js deleted file mode 100644 index 2a7aaee..0000000 --- a/framework-stop/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/', stop); -}; - -function stop() { - // stop server - F.stop(); -} \ No newline at end of file diff --git a/framework-stop/index.js b/framework-stop/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-stop/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-usage/controllers/default.js b/framework-usage/controllers/default.js deleted file mode 100644 index 82166c9..0000000 --- a/framework-usage/controllers/default.js +++ /dev/null @@ -1,13 +0,0 @@ -exports.install = function() { - F.route('/', json_usage); -}; - -exports.usage = function() { - return 'controller usage'; -}; - -function json_usage() { - var self = this; - // F.usage([detailed:bool default false]) - self.json(F.usage(true), true); -} \ No newline at end of file diff --git a/framework-usage/index.js b/framework-usage/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/framework-usage/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/framework-usage/modules/test.js b/framework-usage/modules/test.js deleted file mode 100644 index 16d91d6..0000000 --- a/framework-usage/modules/test.js +++ /dev/null @@ -1,8 +0,0 @@ - -/* - @detailed {Boolean} - return {String} -*/ -exports.usage = function(detailed) { - return { description: 'test module usage' }; -}; \ No newline at end of file diff --git a/framework-version/index.js b/framework-version/index.js deleted file mode 100644 index a747c7c..0000000 --- a/framework-version/index.js +++ /dev/null @@ -1,9 +0,0 @@ -// =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com -// =================================================== - -require('total.js').http('debug'); - -console.log(F.version); \ No newline at end of file diff --git a/generators/controllers/default.js b/generators/controllers/default.js deleted file mode 100644 index 0744ca0..0000000 --- a/generators/controllers/default.js +++ /dev/null @@ -1,40 +0,0 @@ -var fs = require('fs'); - -exports.install = function() { - F.route('/', view_homepage); -}; - -// EXAMPLE: -// A function with a callback -function custom(a, b, callback) { - // callback(error, result); - callback(null, a + b); -}; - -function *view_homepage() { - - var self = this; - - // Harmony usage - // async(fn)([callback]) - // utils.async(fn)([callback]); - - // Prepare function to async - // sync(fn, [owner/context]) - // utils.sync(fn, [owner/context]); - - var a = yield sync(fs.readFile)(self.path.root('index.js')); - var b = yield sync(fs.readFile)(self.path.root('controllers/default.js')); - - // Example MySQL connection: - // var c = yield sync(connection.query, connection)('SELECT * FROM USER LIMIT 0, 10'); - - // custom function - var c = yield sync(custom)(1, 2); - - self.plain('==== index.js\n\n' + a.toString('utf8') + '\n\n==== controllers/default.js\n\n' + b.toString('utf8') + '\n\n==== custom function\n\n' + c); - - // async(*, [callback/controller]) - // if the async throws an error then controller executes view500(error) - -} \ No newline at end of file diff --git a/generators/index.js b/generators/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/generators/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/graphql/controllers/default.js b/graphql/controllers/default.js deleted file mode 100644 index 2621525..0000000 --- a/graphql/controllers/default.js +++ /dev/null @@ -1,13 +0,0 @@ -exports.install = function() { - - F.route('/api/hello', post_hello, ['post', 'raw']); - -}; - -function post_hello() { - var self = this; - - MODEL('hello').query(self.body).then((response) => { - self.json(response); - }); -}; \ No newline at end of file diff --git a/graphql/index.js b/graphql/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/graphql/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/graphql/models/hello.js b/graphql/models/hello.js deleted file mode 100644 index 6a92120..0000000 --- a/graphql/models/hello.js +++ /dev/null @@ -1,25 +0,0 @@ -var { graphql, GraphQLSchema, GraphQLObjectType, GraphQLString } = require('graphql'); - -exports.id = 'hello'; - -exports.schema = new GraphQLSchema({ - query: new GraphQLObjectType({ - name: 'RootQueryType', - fields: { - hello: { - type: GraphQLString, - resolve() { - return 'world'; - } - } - } - }) -}); - -exports.root = { hello: () => 'Hello world!' }; - -exports.query = function query(q){ - - return graphql(exports.schema, q, exports.root); - -}; \ No newline at end of file diff --git a/heroku/controllers/default.js b/heroku/controllers/default.js index c373a12..bb9bb8c 100644 --- a/heroku/controllers/default.js +++ b/heroku/controllers/default.js @@ -1,8 +1,8 @@ exports.install = function() { - F.route('/', plain_homepage); + ROUTE('GET /', plain_homepage); }; function plain_homepage() { var self = this; - self.plain('total.js on Heroku.'); + self.plain('Total.js Platform on Heroku.'); } \ No newline at end of file diff --git a/html-appcache-offline/controllers/default.js b/html-appcache-offline/controllers/default.js index 29469cc..b3a4e86 100644 --- a/html-appcache-offline/controllers/default.js +++ b/html-appcache-offline/controllers/default.js @@ -1,3 +1,3 @@ exports.install = function() { - F.route('/'); + ROUTE('GET /'); }; \ No newline at end of file diff --git a/image-middleware-pngquant/controllers/default.js b/image-middleware-pngquant/controllers/default.js index cab15f9..01705ad 100755 --- a/image-middleware-pngquant/controllers/default.js +++ b/image-middleware-pngquant/controllers/default.js @@ -1,6 +1,6 @@ exports.install = function() { - F.route('/'); - F.resize('/img/*.png', resizer); + ROUTE('/'); + RESIZE('/img/*.png', resizer); }; function resizer(image) { diff --git a/image-resize/controllers/default.js b/image-resize/controllers/default.js index 922812f..c0d1a10 100644 --- a/image-resize/controllers/default.js +++ b/image-resize/controllers/default.js @@ -1,10 +1,10 @@ var Path = require('path'); exports.install = function() { - F.route('/', view_index); + ROUTE('GET /', view_index); // the number is maximum data receive - F.route('/', view_index, ['upload'], 100); // max 100 kB + ROUTE('POST /', view_index, ['upload'], 100); // max 100 kB }; function view_index() { @@ -28,7 +28,7 @@ function view_index() { // $ brew install graphicsmagick // ============================= - var filename = F.path.public('upload.jpg'); + var filename = PATH.public('upload.jpg'); // Documentation: http://docs.totaljs.com/FrameworkImage/ var image = file.image(); // this is equivalent to require('partail.js/image').init([useImageMagick]); @@ -56,6 +56,12 @@ function view_index() { // IMPORTANT: see here https://github.com/petersirka/total.js/tree/master/examples/routing image.resizeCenter(300, 300).save(filename, function(err) { + + if (err) { + self.throw500(err); + return; + } + model.url = '
    Uploaded image

    '.format(U.getName(filename), new Date().getTime()); self.view('index', model); }); diff --git a/image-resize/public/upload.jpg b/image-resize/public/upload.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25c2342662a3787d672c0e0c7f6b3e840e52b1ab GIT binary patch literal 25368 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 Date: Sat, 22 Jun 2019 17:34:12 +0200 Subject: [PATCH 070/157] Added new changes. --- image-watermark/controllers/default.js | 19 +-- image-watermark/public/upload.jpg | Bin 11546 -> 10081 bytes isomorphic/controllers/default.js | 8 -- isomorphic/definitions/merge.js | 2 - isomorphic/index.js | 16 --- isomorphic/isomorphic/test.js | 6 - isomorphic/views/index.html | 26 ---- knockoutjs-todo/.gitignore | 2 - knockoutjs-todo/README.md | 5 - knockoutjs-todo/controllers/default.js | 3 - knockoutjs-todo/index.js | 16 --- knockoutjs-todo/public/css/default.css | 3 - knockoutjs-todo/public/js/viewmodel.js | 22 ---- knockoutjs-todo/views/index.html | 23 ---- knockoutjs-todo/views/layout.html | 24 ---- localization-resources/controllers/default.js | 6 +- .../definitions/localization.js | 46 +++---- logs/controllers/default.js | 10 -- logs/index.js | 16 --- middleware/controllers/default.js | 8 +- middleware/definitions/middleware.js | 28 ++-- minimal-configuration/index.js | 4 +- mixedreplace-both/1.jpg | Bin 2419 -> 0 bytes mixedreplace-both/2.jpg | Bin 3470 -> 0 bytes mixedreplace-both/3.jpg | Bin 4167 -> 0 bytes mixedreplace-both/4.jpg | Bin 3312 -> 0 bytes mixedreplace-both/5.jpg | Bin 3322 -> 0 bytes mixedreplace-both/controllers/default.js | 36 ------ mixedreplace-both/index.js | 16 --- mixedreplace-both/readme.md | 4 - mixedreplace-both/upload.js | 74 ----------- mixedreplace-both/views/index.html | 16 --- mixedreplace-download/controllers/default.js | 36 ------ mixedreplace-download/index.js | 16 --- mixedreplace-download/public/img/1.jpg | Bin 2419 -> 0 bytes mixedreplace-download/public/img/2.jpg | Bin 3470 -> 0 bytes mixedreplace-download/public/img/3.jpg | Bin 4167 -> 0 bytes mixedreplace-download/public/img/4.jpg | Bin 3312 -> 0 bytes mixedreplace-download/public/img/5.jpg | Bin 3322 -> 0 bytes mixedreplace-download/readme.md | 1 - mixedreplace-download/views/index.html | 16 --- mixedreplace-upload/1.jpg | Bin 2419 -> 0 bytes mixedreplace-upload/2.jpg | Bin 3470 -> 0 bytes mixedreplace-upload/3.jpg | Bin 4167 -> 0 bytes mixedreplace-upload/4.jpg | Bin 3312 -> 0 bytes mixedreplace-upload/5.jpg | Bin 3322 -> 0 bytes mixedreplace-upload/controllers/default.js | 16 --- mixedreplace-upload/index.js | 16 --- mixedreplace-upload/readme.md | 4 - mixedreplace-upload/upload.js | 67 ---------- models-nosql/controllers/default.js | 8 -- models-nosql/databases/products.nosql | 5 - models-nosql/index.js | 16 --- models-nosql/models/products.js | 9 -- models/controllers/default.js | 12 -- models/index.js | 16 --- models/models/user.js | 3 - vue/controllers/default.js | 18 +-- vue/views/index.html | 9 +- waiting/index.js | 2 +- websocket/controllers/default.js | 122 +++++++++--------- workers/controllers/default.js | 6 +- workers/definitions/worker.js | 2 +- workers/workers/xml.js | 10 +- workflows/index.js | 59 --------- workflows/models/user.js | 36 ------ workflows/workflows | 4 - xml-sitemap-workers/controllers/default.js | 6 +- xml-sitemap-workers/public/sitemap.xml | 2 +- xml-sitemap/controllers/default.js | 9 +- 70 files changed, 146 insertions(+), 819 deletions(-) delete mode 100644 isomorphic/controllers/default.js delete mode 100644 isomorphic/definitions/merge.js delete mode 100644 isomorphic/index.js delete mode 100644 isomorphic/isomorphic/test.js delete mode 100644 isomorphic/views/index.html delete mode 100644 knockoutjs-todo/.gitignore delete mode 100644 knockoutjs-todo/README.md delete mode 100644 knockoutjs-todo/controllers/default.js delete mode 100644 knockoutjs-todo/index.js delete mode 100644 knockoutjs-todo/public/css/default.css delete mode 100644 knockoutjs-todo/public/js/viewmodel.js delete mode 100644 knockoutjs-todo/views/index.html delete mode 100644 knockoutjs-todo/views/layout.html delete mode 100644 logs/controllers/default.js delete mode 100644 logs/index.js delete mode 100755 mixedreplace-both/1.jpg delete mode 100755 mixedreplace-both/2.jpg delete mode 100755 mixedreplace-both/3.jpg delete mode 100755 mixedreplace-both/4.jpg delete mode 100755 mixedreplace-both/5.jpg delete mode 100755 mixedreplace-both/controllers/default.js delete mode 100755 mixedreplace-both/index.js delete mode 100755 mixedreplace-both/readme.md delete mode 100755 mixedreplace-both/upload.js delete mode 100755 mixedreplace-both/views/index.html delete mode 100755 mixedreplace-download/controllers/default.js delete mode 100755 mixedreplace-download/index.js delete mode 100755 mixedreplace-download/public/img/1.jpg delete mode 100755 mixedreplace-download/public/img/2.jpg delete mode 100755 mixedreplace-download/public/img/3.jpg delete mode 100755 mixedreplace-download/public/img/4.jpg delete mode 100755 mixedreplace-download/public/img/5.jpg delete mode 100644 mixedreplace-download/readme.md delete mode 100755 mixedreplace-download/views/index.html delete mode 100755 mixedreplace-upload/1.jpg delete mode 100755 mixedreplace-upload/2.jpg delete mode 100755 mixedreplace-upload/3.jpg delete mode 100755 mixedreplace-upload/4.jpg delete mode 100755 mixedreplace-upload/5.jpg delete mode 100755 mixedreplace-upload/controllers/default.js delete mode 100755 mixedreplace-upload/index.js delete mode 100755 mixedreplace-upload/readme.md delete mode 100755 mixedreplace-upload/upload.js delete mode 100644 models-nosql/controllers/default.js delete mode 100644 models-nosql/databases/products.nosql delete mode 100644 models-nosql/index.js delete mode 100644 models-nosql/models/products.js delete mode 100644 models/controllers/default.js delete mode 100644 models/index.js delete mode 100644 models/models/user.js delete mode 100644 workflows/index.js delete mode 100644 workflows/models/user.js delete mode 100644 workflows/workflows diff --git a/image-watermark/controllers/default.js b/image-watermark/controllers/default.js index edaa552..98796ce 100644 --- a/image-watermark/controllers/default.js +++ b/image-watermark/controllers/default.js @@ -1,10 +1,6 @@ -var Path = require('path'); - exports.install = function() { - F.route('/', view_index); - - // the number is maximum data receive - F.route('/', view_index, ['upload'], 100); // max 100 kB + ROUTE('GET /', view_index); + ROUTE('POST /', view_index, ['upload'], 10000); // max 100 kB }; function view_index() { @@ -28,16 +24,21 @@ function view_index() { // $ brew install graphicsmagick // ============================= - var filename = F.path.public('upload.jpg'); + var filename = PATH.public('upload.jpg'); // Documentation: http://docs.totaljs.com/FrameworkImage/ var image = file.image(); - image.watermark(F.path.public('watermark.png'), 20, 80, 100, 40); + image.watermark(PATH.public('watermark.png'), 20, 80, 100, 40); // IMPORTANT: see here https://github.com/petersirka/total.js/tree/master/examples/routing image.resizeCenter(300, 300).save(filename, function(err) { - console.log(err); + + if (err) { + self.throw500(err); + return; + } + model.url = '
    Uploaded image

    '.format(U.getName(filename), new Date().getTime()); self.view('index', model); }); diff --git a/image-watermark/public/upload.jpg b/image-watermark/public/upload.jpg index 32b4e6bf884b28133283e66c52d6028ab00cdee4..15447be1944927174e7ed0eeb89762f2a560d70b 100644 GIT binary patch delta 7546 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 ItmMJ}0_}Mh82|tP delta 9023 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 G;r{_iq)g=i diff --git a/isomorphic/controllers/default.js b/isomorphic/controllers/default.js deleted file mode 100644 index ca22968..0000000 --- a/isomorphic/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/'); - - setTimeout(function() { - // EXAMPLE - console.log(isomorphic.test.getName()); - }, 1000); -}; \ No newline at end of file diff --git a/isomorphic/definitions/merge.js b/isomorphic/definitions/merge.js deleted file mode 100644 index d526e94..0000000 --- a/isomorphic/definitions/merge.js +++ /dev/null @@ -1,2 +0,0 @@ -// EXAMPLE FOR MERGING -// F.merge('/merge.js', '/js/your-script.js', '#test'); // #test is name of isomorphic file \ No newline at end of file diff --git a/isomorphic/index.js b/isomorphic/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/isomorphic/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/isomorphic/isomorphic/test.js b/isomorphic/isomorphic/test.js deleted file mode 100644 index 3dfe42e..0000000 --- a/isomorphic/isomorphic/test.js +++ /dev/null @@ -1,6 +0,0 @@ -exports.url = '/test.js'; - -exports.getName = function() { - // is_server - return 'CODE called from ' + (is_client ? 'client' : 'server'); -}; \ No newline at end of file diff --git a/isomorphic/views/index.html b/isomorphic/views/index.html deleted file mode 100644 index 4c927e1..0000000 --- a/isomorphic/views/index.html +++ /dev/null @@ -1,26 +0,0 @@ -@{layout('')} - - - - - @{meta} - - - - - - @{head} - - - - - -

    total.js

    -
    ISOMORPHIC: @{isomorphic.test.getName()}
    - - - - - \ No newline at end of file diff --git a/knockoutjs-todo/.gitignore b/knockoutjs-todo/.gitignore deleted file mode 100644 index 925a051..0000000 --- a/knockoutjs-todo/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pid -tmp \ No newline at end of file diff --git a/knockoutjs-todo/README.md b/knockoutjs-todo/README.md deleted file mode 100644 index 5f5d5c2..0000000 --- a/knockoutjs-todo/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## knockout.js/total.js - -The obligatory TODO app featuring Knockout.js and total.js. - -Author: [Joe Conley](https://github.com/josephpconley) \ No newline at end of file diff --git a/knockoutjs-todo/controllers/default.js b/knockoutjs-todo/controllers/default.js deleted file mode 100644 index 69ec1c8..0000000 --- a/knockoutjs-todo/controllers/default.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.install = function() { - F.route('/'); -}; \ No newline at end of file diff --git a/knockoutjs-todo/index.js b/knockoutjs-todo/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/knockoutjs-todo/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/knockoutjs-todo/public/css/default.css b/knockoutjs-todo/public/css/default.css deleted file mode 100644 index bd64e0b..0000000 --- a/knockoutjs-todo/public/css/default.css +++ /dev/null @@ -1,3 +0,0 @@ -.completed{ - text-decoration: line-through; -} \ No newline at end of file diff --git a/knockoutjs-todo/public/js/viewmodel.js b/knockoutjs-todo/public/js/viewmodel.js deleted file mode 100644 index eca6591..0000000 --- a/knockoutjs-todo/public/js/viewmodel.js +++ /dev/null @@ -1,22 +0,0 @@ -function Todo(description){ - var self = this; - self.description = ko.observable(description); - self.completed = ko.observable(false); -} - -function TodoApp(){ - var self = this; - self.todos = ko.observableArray([]); - self.newTodo = ko.observable(""); - self.saveTodo = function (data, event) { - //if enter was pressed then save - if (event.keyCode == 13) { - self.todos.push(new Todo(self.newTodo())); - self.newTodo(""); - } - return true; - }; - self.clearCompleted = function(){ - self.todos.remove(function(todo) { return todo.completed() }); - }; -} \ No newline at end of file diff --git a/knockoutjs-todo/views/index.html b/knockoutjs-todo/views/index.html deleted file mode 100644 index 466ce93..0000000 --- a/knockoutjs-todo/views/index.html +++ /dev/null @@ -1,23 +0,0 @@ -
    -

    TODO

    -
    - -
    - -
    - -
    - -

    -
    -
    - -
    - - \ No newline at end of file diff --git a/knockoutjs-todo/views/layout.html b/knockoutjs-todo/views/layout.html deleted file mode 100644 index dfebf3d..0000000 --- a/knockoutjs-todo/views/layout.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - @{meta} - - - - - - @{head} - @{css('default.css')} - - - - - - @{js('viewmodel.js')} - - -
    - @{body} -
    - - \ No newline at end of file diff --git a/localization-resources/controllers/default.js b/localization-resources/controllers/default.js index 96ce830..a419003 100644 --- a/localization-resources/controllers/default.js +++ b/localization-resources/controllers/default.js @@ -1,6 +1,6 @@ exports.install = function() { - F.route('/', view_index); - F.route('/', json_index, ['xhr']); + ROUTE('GET /', view_index); + ROUTE('GET /', json_index, ['xhr']); }; function view_index() { @@ -8,7 +8,7 @@ function view_index() { self.view('index'); } -function json_index(language) { +function json_index() { var self = this; // console.log(TRANSLATE(self.language, 'Welcome')); --> converts "Welcome" to hash code self.json({ message: RESOURCE(self.language, 'message') }); diff --git a/localization-resources/definitions/localization.js b/localization-resources/definitions/localization.js index 7709fcd..73ec751 100644 --- a/localization-resources/definitions/localization.js +++ b/localization-resources/definitions/localization.js @@ -1,33 +1,33 @@ var COOKIE = '__language'; var allowed = { sk: true, en: true, cz: true }; -F.onLocate = function(req, res) { +LOCALIZE(function(req, res) { - var language = req.query.language; + var language = req.query.language; - // Set the language according to the querystring and store to the cookie - if (language) { - if (!allowed[language]) - return 'en'; - res.cookie(COOKIE, language, '2 days'); - return language; - } + // Set the language according to the querystring and store to the cookie + if (language) { + if (!allowed[language]) + return 'en'; + res.cookie(COOKIE, language, '2 days'); + return language; + } - language = req.cookie(COOKIE); - if (language) { - if (allowed[language]) - return language; - return 'en'; - } + language = req.cookie(COOKIE); + if (language) { + if (allowed[language]) + return language; + return 'en'; + } - // Sets the language according to user-agent - language = req.language; + // Sets the language according to user-agent + language = req.language; - if (language.indexOf('sk') > -1) - return 'sk'; + if (language.indexOf('sk') > -1) + return 'sk'; - if (language.indexOf('cz') > -1) - return 'cz'; + if (language.indexOf('cz') > -1) + return 'cz'; - return 'en'; -}; \ No newline at end of file + return 'en'; +}); \ No newline at end of file diff --git a/logs/controllers/default.js b/logs/controllers/default.js deleted file mode 100644 index dd5fdf2..0000000 --- a/logs/controllers/default.js +++ /dev/null @@ -1,10 +0,0 @@ -exports.install = function() { - F.route('/', view_index); -}; - -function view_index() { - var self = this; - var message = 'MESSAGE TO LOG :: LOOK AT LOGS DIRECTORY'; - self.log(message); - self.plain(message); -} \ No newline at end of file diff --git a/logs/index.js b/logs/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/logs/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/middleware/controllers/default.js b/middleware/controllers/default.js index 5d0b44f..0e4641d 100644 --- a/middleware/controllers/default.js +++ b/middleware/controllers/default.js @@ -1,8 +1,8 @@ exports.install = function() { - F.route('/', view, ['#A'], { options: 'for middleware' }); - F.route('/b/', view, ['#B']); - F.route('/c/', view, ['#C']); // if flag starts with # then is registered as middleware - F.route('/all/', view, ['#A', '#B', '#C']); + ROUTE('GET /', view, ['#A'], { options: 'for middleware' }); + ROUTE('GET /b/', view, ['#B']); + ROUTE('GET /c/', view, ['#C']); // if the flag starts with # then is registered as middleware + ROUTE('GET /all/', view, ['#A', '#B', '#C']); }; function view() { diff --git a/middleware/definitions/middleware.js b/middleware/definitions/middleware.js index b3ae812..8c729ba 100644 --- a/middleware/definitions/middleware.js +++ b/middleware/definitions/middleware.js @@ -1,37 +1,37 @@ -F.middleware('A', function(req, res, next, options, controller) { +MIDDLEWARE('A', function($) { - if (controller) - controller.repository.A = 'middleware - private - A'; + if ($.controller) + $.controller.repository.A = 'middleware - private - A'; - next(); + $.next(); }); -F.middleware('B', function(req, res, next, options, controller) { +MIDDLEWARE('B', function($) { console.log('B'); - if (controller) - controller.repository.B = 'middleware - private - B'; + if ($.controller) + $.controller.repository.B = 'middleware - private - B'; - next(); + $.next(); }); -F.middleware('C', function(req, res, next, options, controller) { +MIDDLEWARE('C', function($) { console.log('C'); - if (controller) - controller.repository.C = 'middleware - private - C'; + if ($.controller) + $.controller.repository.C = 'middleware - private - C'; - next(); + $.next(); }); -F.middleware('X', function(req, res, next, options, controller) { +MIDDLEWARE('X', function($) { console.log('Global middleware: X'); - next(); + $.next(); }); F.use('X'); \ No newline at end of file diff --git a/minimal-configuration/index.js b/minimal-configuration/index.js index 22b5f90..188645e 100644 --- a/minimal-configuration/index.js +++ b/minimal-configuration/index.js @@ -6,6 +6,6 @@ require('total.js').http('debug'); -F.route('/', function() { - this.plain('Total.js'); +ROUTE('GET /', function() { + this.plain('Total.js'); }); \ No newline at end of file diff --git a/mixedreplace-both/1.jpg b/mixedreplace-both/1.jpg deleted file mode 100755 index b0edf7ba0afec83333efb8355bacb7db0c6b8d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2419 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 diff --git a/mixedreplace-both/4.jpg b/mixedreplace-both/4.jpg deleted file mode 100755 index d3b0ab2ffc5b300686c3f2afa53267558d7c3c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3312 zcmd5;3se(l7XCv52_X^#s64~~B5!Tw;S0;)1H@2;pqK(eM5=-*r79Lg$RJ$>Q9(qM zVr`Cq;yZ#M3Tg--0%{TDjYtTf0wM{}7|1ZQlRkFO*`Bj?ch8>PJO7=3&di;E?l<4P z-wf7{Nx)2&=Xy^-AOJwXH-L44H9&(vP>>qG3a9kQV2PCo@7eONicOrwNX}(xXZxx#yx<}u_@esveb;gB4vG#l?KiRD9dmE{< zEuDK8$kot(LH2RLlKw4Ze*^Y+T%CYMB;e!`82|z({5Cfg*!)jDKdC7wH~w;dW>oOi zjW!x9>>evNv>~dkaL;Yu70w&|4{h0$L=hW+(`*l5@R1&cI4Faq^b;bz=uarIn^@&- zE4`&bZ;QK~d`g0wx?i%y41?(YjJgV<cgaD?D!oX^=l?wo)u zS@7Xz*zMRQ)?Ho`y*p<>SHG+x4xLOwJA4V;>JP~5Ow_MKwGQrB-3m|KWTEXm<&Ss< zO>lh>6h5l532Z>K>fD)*Y!3tQG0qumLrgZ{nFqs4Tk8>X3}|B@t@v@KL{!DA?H8@j z{19T<>}h$-$EY_CT+i%-%-8lkqq(`@58aQ7`A+zp$!~QtR{Be_S+96{lbva~^0TFl z4l~o;#IVKCbYV?Rw{;TB_vq#w13|3zSinXSR1PY|r8#@`omib~Q+atVAcu0#^%RvNv*YMp<*3d@sZSCH z=p~e!4-F7U*^+AuS|(`oAjYt5LP7O-p6)Gop(Q(`>P*&Hec1e3NHRF8To{Ec?hy|@ zBp^##?h8}rxfMcPrL9F$E^W|JgF4Tl20A#V|SpI)m2k$Qg<-wD3&1=kT-|fI3TR0awJ8MQ{)X zx8YQS;;QmoK9UjwCC5d+Q4;Q8q%+g-ny@Avfay=8_}f`b>(a~JkSp*ncoXtL!@WY#f7Me}{$LB#`CaonQm zrQ#{e^qTLtnYebZdfaJcw%(pLUP7=p-bQ@GO%s?PY!xd$RL)F~=Usa_{LoGwJdu-j zF=6@SrL3Pel07^O{n>~8{e1!83^D&m9p9^MIOdP1{~L^Q^7*x*BEfM{WJ9M@rAP-M z7MOZhzjC-A6tsUiBgp#I8R-@8e|^Grz0U)qH!dIFWfwDZl~+rb`5i6vA>z_|0}}r@_r*klMNQl1O~u#3 z-@Us&vYoMtN87EptZ@#3y%_)r(2Nx!`pF8SEDF*0!F#Z+QmD1ova~5r<$2}G%24Yz z7i}>9exQcG%S?0Y`IMBzUd{MN7$EEOUvX!Nc5*wSl{ym6p@-(Nc~WjQ??7alu(w-d zYzoqec+-ET@7a+hI{U0xYaNaF2bS3!N`xFllHpI(z2^L;S|#Xs(tGK~>-f)P{)%`G z%(H%vthrj3v z6NN)l=8zF2JJu{xJ_E7c{8Ct)%^l0afC1d$(kzlJr){149Ja5|^Izm| zc=#tTzk|jA&HPne8!=EHhyk^}#;Ns{+cg882g^9Z_Dy|o8Z5btfnu%Ox$!2-Yu6); z1?eulbFRZo?VguG!PRYkvraA7v$&Z*bB(Q8Dp0zm{(SzRf~*|wjnw_Hxy4NpRbry;;(|#tyGBg+>D;(cPYP*9-O!}b>d`sa$WWn_+&;y?cL?lMChKK{iG)b zQXaxz!Bf=u6&R=tg_LEG^bJoILAs%O*RAx=ngLy-k(D^CMWdmizHgleNG;wBL1P528Bja6Wm{d7^h0hM_6W0uW#4Vc<*nSm)k{ tWnt;aX}EJKDlQ|VCz|bLds6|50sCKm7XDDqjvw)X`W@u|$;`w${tA8mh~)qP diff --git a/mixedreplace-both/5.jpg b/mixedreplace-both/5.jpg deleted file mode 100755 index c67da41dd7436dbcc1a19ff8d3f970808b16d3b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3322 zcmdUv2~bnl8plsaLc%5>Ad6xY5kWzeMG6XGDVx@^C?cTbAs}E>3KT&^E&`(Di4+h} zbYv9}#E3MYsO(GBR%9uwKmbJy1QJ_9Aj!SGw4K*Cubrvy&6|1izI*<6&YXL`bHCsD z&iRl5gas7#IygH33Al3t^#rmnGBXN#`hRuj`*W}lf`*nMvA;OOMM_rO7qL!O7d zy!`_Lj|T;ZoQU{3@=R3p*_gzni^-QRr_eGouVrQDT)&Z9SX6wcq_pgA`NQgO88x+! z9@jOuw6?W(FrUBZ?&(;wKpk3asjz+V(BEw6B40QOfb^!+Q? zzi=s{ToPywaD){uj6@VFtRfD-ai`>J8#jVqn39&!1){QTdO=l_)FxwhuFA3SF6lMe zCgYoVD`>xveHvK8e?;~Vu;00cfGie+CJ(C!$N+|>3u!?2f1=W~FCJ%M4W7$(j4!Q9oEeD#tA5hrY)@d%+=eSp zzxje@k!=g|iNT-1v`y%PfCL=`yx0T<844A?ri-_D!+L)@43?8=OA)ZN5CM2SieU4W z*|X%fY_1=Vb?NZ8-O$7KN^wpe8JgcSuM_&Dy5v^n?m;0k<>;f8&D>}DA36?%8lo9l>>O@iyK2OyWbvjAXfP%%Dv$cJT5ZkI{jd;|d zb0KkU^{XA$1VJ`x@Bk2R*ipNjw%#|2NdvP9ErKQ=J!?ND0jo3`eI`^|GQo{z6--KgEw zi(>@@Okzz%CDDnE%l%1j?pGACbN#Ui+c^PAX~Jn~cv&yAF~@a}d!h3>nn!xF#|1WV zP8TbXENrMHrBS#}or7uoT(9BwJPBBXofBo95}Mz2>_J29@|)qyQwZn~&|gBsFJakQ zZca+2sb(lYnulg7*;JuY-%6e5Y*rUrd36(w2Xa+r_q5)6`?1lL@MEQY44LC1)Dk&~ zQ(%Kp!P<$mq{vW$AiHB~*J70@XXo1sCadrJ=W5xsrdR7Vz2DG(%N1j<{MVwy#j2vm z<2spYI5^2NOM=%4jN9rpUW?3G&$i2v_REYv*_YBsbkzzyo3*%$utkNdsf<}RL(gYZ zKc!~sT4N{A(6%=@=7_*?pDQ%~M#{H~8w$&RE-rqmuDvt5rHL#pq6R0O&DfmPcjMfK zc_DKu_>y>u-tj^gyIdwtSjh+i27CAqc#?VJW9x_52*5pchLW5kpHJ4kzHN79L&N@h z3X~gNXd|Az<;gysQ|?2}J@t%})vB5u6?X5n3ogN_BsJONhh#fFoPr}x1D2@ZJHm2k znMfF?BA_~_gCZaIYHT&*gJIm7=vR|Ma?63y$H%$#rQ6bUw8O(|svqmRitg%Pp8T89 zX&|0K{nDYPUGQ3z(UlxzU^l+lYG59v&=Wk=t9ZA8D<0iZtFTjqE!Z7!cXB_Kp_+@XwW-E4T8{LKR#(9%E@#Gw~ZehIi zr>d&>M8Ab(1@(O3o|@Wh_hRmTrBl%X?&@An(>5TH<1w8tKR3p=5wwsw@eBC!Oekp2v`cVOW zLU+$bZf$EFqq}J6LyX4{Z(blEGUGF^0n$mVHK|EO+07dNS5kS#r8mBxh-yWEoFL@1 zeP;BfgNz=0Q`&b5>URz=a+o8jgY6Dsy`IwzoCpL+-h}%o)#o{F9T&efP@3RhSnsu6 zWE`7v=I-$MJ55)Qz85}NDjJO^8|Aj%u1r@_Opgut!XK7xM=a&DO!h(ss6f522jT025eZ;g^!%PO_ z%POC3tG{v%QIqs<-U`kal!Rn2Z@(ED6e4?uUz4uCqfKonT`OM2dKLiB=OnIg=+JHQ zAOV&#=H<1{7}=Mfh*@`gZTAK8?xQEPy()C)y6(}pTWXmu%+$4BynfL`UHcZ;wiJZc zj50FoL2eLdMraoTNyn|Drj(2H1%AfQ+Bg++jQ)iT4f8E_-A?(o$5K0Feb2bRUKACn3x_nCRyqDe(70yj#PlXtJJ zW~^-wAfzKd&kHcH+L;HnuWL?sVTvifHY#$7mRe)HOYbTuKW#jeQDyy#~#NW`2K5pHq8E4sL50u^hzXTzJKLa#< BzW@LL diff --git a/mixedreplace-both/controllers/default.js b/mixedreplace-both/controllers/default.js deleted file mode 100755 index 918a9d1..0000000 --- a/mixedreplace-both/controllers/default.js +++ /dev/null @@ -1,36 +0,0 @@ -exports.install = function() { - F.route('/'); - F.route('/live/', view_live); - - // uploading - F.mmr('/', upload); -}; - -var files = []; - -function upload(req, file, counter) { - if (!file) - return; - console.log('UPLOAD', counter); - if (files.length > 20) - framework.unlink([files.shift()]); - files.push(file.path); -} - -function view_live() { - var self = this; - self.interval = setInterval(function() { - - if (!self.isConnected) { - clearInterval(self.interval); - return; - } - - var latest = files[files.length - 1]; - if (self.filename === latest) - return; - - self.filename = latest; - self.mmr('live.jpg', latest); - }, 500); -} \ No newline at end of file diff --git a/mixedreplace-both/index.js b/mixedreplace-both/index.js deleted file mode 100755 index 80dfad6..0000000 --- a/mixedreplace-both/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/mixedreplace-both/readme.md b/mixedreplace-both/readme.md deleted file mode 100755 index caf2c9d..0000000 --- a/mixedreplace-both/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -This example works on in Total.js `v2.1.0`. - -- you need to run `index.js` (Total.js app) -- then you need to execu script `upload.js` \ No newline at end of file diff --git a/mixedreplace-both/upload.js b/mixedreplace-both/upload.js deleted file mode 100755 index 91d67e5..0000000 --- a/mixedreplace-both/upload.js +++ /dev/null @@ -1,74 +0,0 @@ -require('total.js'); - -const Url = require('url'); -const Http = require('http'); -const Path = require('path'); -const Fs = require('fs'); - -// directory must contain only files -//var directory = process.; - -var BOUNDARY = '----' + Math.random().toString(16).substring(2); -var files = []; - -function send(url) { - - var indexer = 0; - var counter = 0; - var uri = Url.parse(url); - var headers = { 'Content-Type': 'multipart/x-mixed-replace; boundary=' + BOUNDARY }; - var options = { protocol: uri.protocol, auth: uri.auth, method: 'POST', hostname: uri.hostname, port: uri.port, path: uri.path, agent: false, headers: headers }; - - var response = function(res) { - res.on('end', () => console.log(res.statusCode)); - res.resume(); - }; - - var con = Http; - var req = con.request(options, response); - - req.on('error', (err) => console.log('ERROR', err, err.stack)); - - function sendfile(filename, cb) { - var header = '\r\n\r\n--' + BOUNDARY + '\r\nContent-Disposition: form-data; name="File"; filename="' + Path.basename(filename) + '"\r\nContent-Type: ' + U.getContentType(U.getExtension(filename)) +'\r\n\r\n'; - req.write(header); - var stream = Fs.createReadStream(filename); - stream.pipe(req, { end: false }); - stream.on('end', cb); - } - - function run() { - counter++; - - if (counter > 50) { - req.end('\r\n\r\n--' + BOUNDARY + '--'); - console.log('END'); - return; - } - - setTimeout(function() { - var file = files[indexer++]; - - if (!file) { - indexer = 0; - file = files[indexer++]; - } - - if (file.length) { - console.log('–---->', file); - sendfile(file, run); - } - }, 500); - } - - run(); -}; - -var directory = process.cwd(); - -Fs.readdirSync(directory).forEach(function(filename){ - if (filename.lastIndexOf('.jpg') !== -1) - files.push(Path.join(directory, filename)); -}); - -send('http://127.0.0.1:8000/'); \ No newline at end of file diff --git a/mixedreplace-both/views/index.html b/mixedreplace-both/views/index.html deleted file mode 100755 index f85e6d8..0000000 --- a/mixedreplace-both/views/index.html +++ /dev/null @@ -1,16 +0,0 @@ -@{layout('')} - - - - - Live Streaming - - - - - - - - - - \ No newline at end of file diff --git a/mixedreplace-download/controllers/default.js b/mixedreplace-download/controllers/default.js deleted file mode 100755 index 718fa24..0000000 --- a/mixedreplace-download/controllers/default.js +++ /dev/null @@ -1,36 +0,0 @@ -exports.install = function() { - F.route('/'); - F.route('/live/', view_live); -}; - -function view_live() { - - var self = this; - var index = 0; - var count = 0; - - // Sends 5 times 5 pictures - var interval = setInterval(function() { - - index++; - - if (index > 5) { - index = 1; - count++; - } - - if (!self.isConnected) { - clearInterval(interval); - return; - } - - self.mmr(self.path.public('img/' + index + '.jpg')); - // self.mmr(filename or name when the stream exists, [stream], [callback]) - - if (count > 5) { - clearInterval(interval); - self.close(); - } - - }, 500); -} \ No newline at end of file diff --git a/mixedreplace-download/index.js b/mixedreplace-download/index.js deleted file mode 100755 index 80dfad6..0000000 --- a/mixedreplace-download/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/mixedreplace-download/public/img/1.jpg b/mixedreplace-download/public/img/1.jpg deleted file mode 100755 index b0edf7ba0afec83333efb8355bacb7db0c6b8d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2419 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 diff --git a/mixedreplace-download/public/img/4.jpg b/mixedreplace-download/public/img/4.jpg deleted file mode 100755 index d3b0ab2ffc5b300686c3f2afa53267558d7c3c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3312 zcmd5;3se(l7XCv52_X^#s64~~B5!Tw;S0;)1H@2;pqK(eM5=-*r79Lg$RJ$>Q9(qM zVr`Cq;yZ#M3Tg--0%{TDjYtTf0wM{}7|1ZQlRkFO*`Bj?ch8>PJO7=3&di;E?l<4P z-wf7{Nx)2&=Xy^-AOJwXH-L44H9&(vP>>qG3a9kQV2PCo@7eONicOrwNX}(xXZxx#yx<}u_@esveb;gB4vG#l?KiRD9dmE{< zEuDK8$kot(LH2RLlKw4Ze*^Y+T%CYMB;e!`82|z({5Cfg*!)jDKdC7wH~w;dW>oOi zjW!x9>>evNv>~dkaL;Yu70w&|4{h0$L=hW+(`*l5@R1&cI4Faq^b;bz=uarIn^@&- zE4`&bZ;QK~d`g0wx?i%y41?(YjJgV<cgaD?D!oX^=l?wo)u zS@7Xz*zMRQ)?Ho`y*p<>SHG+x4xLOwJA4V;>JP~5Ow_MKwGQrB-3m|KWTEXm<&Ss< zO>lh>6h5l532Z>K>fD)*Y!3tQG0qumLrgZ{nFqs4Tk8>X3}|B@t@v@KL{!DA?H8@j z{19T<>}h$-$EY_CT+i%-%-8lkqq(`@58aQ7`A+zp$!~QtR{Be_S+96{lbva~^0TFl z4l~o;#IVKCbYV?Rw{;TB_vq#w13|3zSinXSR1PY|r8#@`omib~Q+atVAcu0#^%RvNv*YMp<*3d@sZSCH z=p~e!4-F7U*^+AuS|(`oAjYt5LP7O-p6)Gop(Q(`>P*&Hec1e3NHRF8To{Ec?hy|@ zBp^##?h8}rxfMcPrL9F$E^W|JgF4Tl20A#V|SpI)m2k$Qg<-wD3&1=kT-|fI3TR0awJ8MQ{)X zx8YQS;;QmoK9UjwCC5d+Q4;Q8q%+g-ny@Avfay=8_}f`b>(a~JkSp*ncoXtL!@WY#f7Me}{$LB#`CaonQm zrQ#{e^qTLtnYebZdfaJcw%(pLUP7=p-bQ@GO%s?PY!xd$RL)F~=Usa_{LoGwJdu-j zF=6@SrL3Pel07^O{n>~8{e1!83^D&m9p9^MIOdP1{~L^Q^7*x*BEfM{WJ9M@rAP-M z7MOZhzjC-A6tsUiBgp#I8R-@8e|^Grz0U)qH!dIFWfwDZl~+rb`5i6vA>z_|0}}r@_r*klMNQl1O~u#3 z-@Us&vYoMtN87EptZ@#3y%_)r(2Nx!`pF8SEDF*0!F#Z+QmD1ova~5r<$2}G%24Yz z7i}>9exQcG%S?0Y`IMBzUd{MN7$EEOUvX!Nc5*wSl{ym6p@-(Nc~WjQ??7alu(w-d zYzoqec+-ET@7a+hI{U0xYaNaF2bS3!N`xFllHpI(z2^L;S|#Xs(tGK~>-f)P{)%`G z%(H%vthrj3v z6NN)l=8zF2JJu{xJ_E7c{8Ct)%^l0afC1d$(kzlJr){149Ja5|^Izm| zc=#tTzk|jA&HPne8!=EHhyk^}#;Ns{+cg882g^9Z_Dy|o8Z5btfnu%Ox$!2-Yu6); z1?eulbFRZo?VguG!PRYkvraA7v$&Z*bB(Q8Dp0zm{(SzRf~*|wjnw_Hxy4NpRbry;;(|#tyGBg+>D;(cPYP*9-O!}b>d`sa$WWn_+&;y?cL?lMChKK{iG)b zQXaxz!Bf=u6&R=tg_LEG^bJoILAs%O*RAx=ngLy-k(D^CMWdmizHgleNG;wBL1P528Bja6Wm{d7^h0hM_6W0uW#4Vc<*nSm)k{ tWnt;aX}EJKDlQ|VCz|bLds6|50sCKm7XDDqjvw)X`W@u|$;`w${tA8mh~)qP diff --git a/mixedreplace-download/public/img/5.jpg b/mixedreplace-download/public/img/5.jpg deleted file mode 100755 index c67da41dd7436dbcc1a19ff8d3f970808b16d3b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3322 zcmdUv2~bnl8plsaLc%5>Ad6xY5kWzeMG6XGDVx@^C?cTbAs}E>3KT&^E&`(Di4+h} zbYv9}#E3MYsO(GBR%9uwKmbJy1QJ_9Aj!SGw4K*Cubrvy&6|1izI*<6&YXL`bHCsD z&iRl5gas7#IygH33Al3t^#rmnGBXN#`hRuj`*W}lf`*nMvA;OOMM_rO7qL!O7d zy!`_Lj|T;ZoQU{3@=R3p*_gzni^-QRr_eGouVrQDT)&Z9SX6wcq_pgA`NQgO88x+! z9@jOuw6?W(FrUBZ?&(;wKpk3asjz+V(BEw6B40QOfb^!+Q? zzi=s{ToPywaD){uj6@VFtRfD-ai`>J8#jVqn39&!1){QTdO=l_)FxwhuFA3SF6lMe zCgYoVD`>xveHvK8e?;~Vu;00cfGie+CJ(C!$N+|>3u!?2f1=W~FCJ%M4W7$(j4!Q9oEeD#tA5hrY)@d%+=eSp zzxje@k!=g|iNT-1v`y%PfCL=`yx0T<844A?ri-_D!+L)@43?8=OA)ZN5CM2SieU4W z*|X%fY_1=Vb?NZ8-O$7KN^wpe8JgcSuM_&Dy5v^n?m;0k<>;f8&D>}DA36?%8lo9l>>O@iyK2OyWbvjAXfP%%Dv$cJT5ZkI{jd;|d zb0KkU^{XA$1VJ`x@Bk2R*ipNjw%#|2NdvP9ErKQ=J!?ND0jo3`eI`^|GQo{z6--KgEw zi(>@@Okzz%CDDnE%l%1j?pGACbN#Ui+c^PAX~Jn~cv&yAF~@a}d!h3>nn!xF#|1WV zP8TbXENrMHrBS#}or7uoT(9BwJPBBXofBo95}Mz2>_J29@|)qyQwZn~&|gBsFJakQ zZca+2sb(lYnulg7*;JuY-%6e5Y*rUrd36(w2Xa+r_q5)6`?1lL@MEQY44LC1)Dk&~ zQ(%Kp!P<$mq{vW$AiHB~*J70@XXo1sCadrJ=W5xsrdR7Vz2DG(%N1j<{MVwy#j2vm z<2spYI5^2NOM=%4jN9rpUW?3G&$i2v_REYv*_YBsbkzzyo3*%$utkNdsf<}RL(gYZ zKc!~sT4N{A(6%=@=7_*?pDQ%~M#{H~8w$&RE-rqmuDvt5rHL#pq6R0O&DfmPcjMfK zc_DKu_>y>u-tj^gyIdwtSjh+i27CAqc#?VJW9x_52*5pchLW5kpHJ4kzHN79L&N@h z3X~gNXd|Az<;gysQ|?2}J@t%})vB5u6?X5n3ogN_BsJONhh#fFoPr}x1D2@ZJHm2k znMfF?BA_~_gCZaIYHT&*gJIm7=vR|Ma?63y$H%$#rQ6bUw8O(|svqmRitg%Pp8T89 zX&|0K{nDYPUGQ3z(UlxzU^l+lYG59v&=Wk=t9ZA8D<0iZtFTjqE!Z7!cXB_Kp_+@XwW-E4T8{LKR#(9%E@#Gw~ZehIi zr>d&>M8Ab(1@(O3o|@Wh_hRmTrBl%X?&@An(>5TH<1w8tKR3p=5wwsw@eBC!Oekp2v`cVOW zLU+$bZf$EFqq}J6LyX4{Z(blEGUGF^0n$mVHK|EO+07dNS5kS#r8mBxh-yWEoFL@1 zeP;BfgNz=0Q`&b5>URz=a+o8jgY6Dsy`IwzoCpL+-h}%o)#o{F9T&efP@3RhSnsu6 zWE`7v=I-$MJ55)Qz85}NDjJO^8|Aj%u1r@_Opgut!XK7xM=a&DO!h(ss6f522jT025eZ;g^!%PO_ z%POC3tG{v%QIqs<-U`kal!Rn2Z@(ED6e4?uUz4uCqfKonT`OM2dKLiB=OnIg=+JHQ zAOV&#=H<1{7}=Mfh*@`gZTAK8?xQEPy()C)y6(}pTWXmu%+$4BynfL`UHcZ;wiJZc zj50FoL2eLdMraoTNyn|Drj(2H1%AfQ+Bg++jQ)iT4f8E_-A?(o$5K0Feb2bRUKACn3x_nCRyqDe(70yj#PlXtJJ zW~^-wAfzKd&kHcH+L;HnuWL?sVTvifHY#$7mRe)HOYbTuKW#jeQDyy#~#NW`2K5pHq8E4sL50u^hzXTzJKLa#< BzW@LL diff --git a/mixedreplace-download/readme.md b/mixedreplace-download/readme.md deleted file mode 100644 index da4c596..0000000 --- a/mixedreplace-download/readme.md +++ /dev/null @@ -1 +0,0 @@ -This example works on in Total.js `v2.1.0`. \ No newline at end of file diff --git a/mixedreplace-download/views/index.html b/mixedreplace-download/views/index.html deleted file mode 100755 index f85e6d8..0000000 --- a/mixedreplace-download/views/index.html +++ /dev/null @@ -1,16 +0,0 @@ -@{layout('')} - - - - - Live Streaming - - - - - - - - - - \ No newline at end of file diff --git a/mixedreplace-upload/1.jpg b/mixedreplace-upload/1.jpg deleted file mode 100755 index b0edf7ba0afec83333efb8355bacb7db0c6b8d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2419 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 diff --git a/mixedreplace-upload/4.jpg b/mixedreplace-upload/4.jpg deleted file mode 100755 index d3b0ab2ffc5b300686c3f2afa53267558d7c3c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3312 zcmd5;3se(l7XCv52_X^#s64~~B5!Tw;S0;)1H@2;pqK(eM5=-*r79Lg$RJ$>Q9(qM zVr`Cq;yZ#M3Tg--0%{TDjYtTf0wM{}7|1ZQlRkFO*`Bj?ch8>PJO7=3&di;E?l<4P z-wf7{Nx)2&=Xy^-AOJwXH-L44H9&(vP>>qG3a9kQV2PCo@7eONicOrwNX}(xXZxx#yx<}u_@esveb;gB4vG#l?KiRD9dmE{< zEuDK8$kot(LH2RLlKw4Ze*^Y+T%CYMB;e!`82|z({5Cfg*!)jDKdC7wH~w;dW>oOi zjW!x9>>evNv>~dkaL;Yu70w&|4{h0$L=hW+(`*l5@R1&cI4Faq^b;bz=uarIn^@&- zE4`&bZ;QK~d`g0wx?i%y41?(YjJgV<cgaD?D!oX^=l?wo)u zS@7Xz*zMRQ)?Ho`y*p<>SHG+x4xLOwJA4V;>JP~5Ow_MKwGQrB-3m|KWTEXm<&Ss< zO>lh>6h5l532Z>K>fD)*Y!3tQG0qumLrgZ{nFqs4Tk8>X3}|B@t@v@KL{!DA?H8@j z{19T<>}h$-$EY_CT+i%-%-8lkqq(`@58aQ7`A+zp$!~QtR{Be_S+96{lbva~^0TFl z4l~o;#IVKCbYV?Rw{;TB_vq#w13|3zSinXSR1PY|r8#@`omib~Q+atVAcu0#^%RvNv*YMp<*3d@sZSCH z=p~e!4-F7U*^+AuS|(`oAjYt5LP7O-p6)Gop(Q(`>P*&Hec1e3NHRF8To{Ec?hy|@ zBp^##?h8}rxfMcPrL9F$E^W|JgF4Tl20A#V|SpI)m2k$Qg<-wD3&1=kT-|fI3TR0awJ8MQ{)X zx8YQS;;QmoK9UjwCC5d+Q4;Q8q%+g-ny@Avfay=8_}f`b>(a~JkSp*ncoXtL!@WY#f7Me}{$LB#`CaonQm zrQ#{e^qTLtnYebZdfaJcw%(pLUP7=p-bQ@GO%s?PY!xd$RL)F~=Usa_{LoGwJdu-j zF=6@SrL3Pel07^O{n>~8{e1!83^D&m9p9^MIOdP1{~L^Q^7*x*BEfM{WJ9M@rAP-M z7MOZhzjC-A6tsUiBgp#I8R-@8e|^Grz0U)qH!dIFWfwDZl~+rb`5i6vA>z_|0}}r@_r*klMNQl1O~u#3 z-@Us&vYoMtN87EptZ@#3y%_)r(2Nx!`pF8SEDF*0!F#Z+QmD1ova~5r<$2}G%24Yz z7i}>9exQcG%S?0Y`IMBzUd{MN7$EEOUvX!Nc5*wSl{ym6p@-(Nc~WjQ??7alu(w-d zYzoqec+-ET@7a+hI{U0xYaNaF2bS3!N`xFllHpI(z2^L;S|#Xs(tGK~>-f)P{)%`G z%(H%vthrj3v z6NN)l=8zF2JJu{xJ_E7c{8Ct)%^l0afC1d$(kzlJr){149Ja5|^Izm| zc=#tTzk|jA&HPne8!=EHhyk^}#;Ns{+cg882g^9Z_Dy|o8Z5btfnu%Ox$!2-Yu6); z1?eulbFRZo?VguG!PRYkvraA7v$&Z*bB(Q8Dp0zm{(SzRf~*|wjnw_Hxy4NpRbry;;(|#tyGBg+>D;(cPYP*9-O!}b>d`sa$WWn_+&;y?cL?lMChKK{iG)b zQXaxz!Bf=u6&R=tg_LEG^bJoILAs%O*RAx=ngLy-k(D^CMWdmizHgleNG;wBL1P528Bja6Wm{d7^h0hM_6W0uW#4Vc<*nSm)k{ tWnt;aX}EJKDlQ|VCz|bLds6|50sCKm7XDDqjvw)X`W@u|$;`w${tA8mh~)qP diff --git a/mixedreplace-upload/5.jpg b/mixedreplace-upload/5.jpg deleted file mode 100755 index c67da41dd7436dbcc1a19ff8d3f970808b16d3b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3322 zcmdUv2~bnl8plsaLc%5>Ad6xY5kWzeMG6XGDVx@^C?cTbAs}E>3KT&^E&`(Di4+h} zbYv9}#E3MYsO(GBR%9uwKmbJy1QJ_9Aj!SGw4K*Cubrvy&6|1izI*<6&YXL`bHCsD z&iRl5gas7#IygH33Al3t^#rmnGBXN#`hRuj`*W}lf`*nMvA;OOMM_rO7qL!O7d zy!`_Lj|T;ZoQU{3@=R3p*_gzni^-QRr_eGouVrQDT)&Z9SX6wcq_pgA`NQgO88x+! z9@jOuw6?W(FrUBZ?&(;wKpk3asjz+V(BEw6B40QOfb^!+Q? zzi=s{ToPywaD){uj6@VFtRfD-ai`>J8#jVqn39&!1){QTdO=l_)FxwhuFA3SF6lMe zCgYoVD`>xveHvK8e?;~Vu;00cfGie+CJ(C!$N+|>3u!?2f1=W~FCJ%M4W7$(j4!Q9oEeD#tA5hrY)@d%+=eSp zzxje@k!=g|iNT-1v`y%PfCL=`yx0T<844A?ri-_D!+L)@43?8=OA)ZN5CM2SieU4W z*|X%fY_1=Vb?NZ8-O$7KN^wpe8JgcSuM_&Dy5v^n?m;0k<>;f8&D>}DA36?%8lo9l>>O@iyK2OyWbvjAXfP%%Dv$cJT5ZkI{jd;|d zb0KkU^{XA$1VJ`x@Bk2R*ipNjw%#|2NdvP9ErKQ=J!?ND0jo3`eI`^|GQo{z6--KgEw zi(>@@Okzz%CDDnE%l%1j?pGACbN#Ui+c^PAX~Jn~cv&yAF~@a}d!h3>nn!xF#|1WV zP8TbXENrMHrBS#}or7uoT(9BwJPBBXofBo95}Mz2>_J29@|)qyQwZn~&|gBsFJakQ zZca+2sb(lYnulg7*;JuY-%6e5Y*rUrd36(w2Xa+r_q5)6`?1lL@MEQY44LC1)Dk&~ zQ(%Kp!P<$mq{vW$AiHB~*J70@XXo1sCadrJ=W5xsrdR7Vz2DG(%N1j<{MVwy#j2vm z<2spYI5^2NOM=%4jN9rpUW?3G&$i2v_REYv*_YBsbkzzyo3*%$utkNdsf<}RL(gYZ zKc!~sT4N{A(6%=@=7_*?pDQ%~M#{H~8w$&RE-rqmuDvt5rHL#pq6R0O&DfmPcjMfK zc_DKu_>y>u-tj^gyIdwtSjh+i27CAqc#?VJW9x_52*5pchLW5kpHJ4kzHN79L&N@h z3X~gNXd|Az<;gysQ|?2}J@t%})vB5u6?X5n3ogN_BsJONhh#fFoPr}x1D2@ZJHm2k znMfF?BA_~_gCZaIYHT&*gJIm7=vR|Ma?63y$H%$#rQ6bUw8O(|svqmRitg%Pp8T89 zX&|0K{nDYPUGQ3z(UlxzU^l+lYG59v&=Wk=t9ZA8D<0iZtFTjqE!Z7!cXB_Kp_+@XwW-E4T8{LKR#(9%E@#Gw~ZehIi zr>d&>M8Ab(1@(O3o|@Wh_hRmTrBl%X?&@An(>5TH<1w8tKR3p=5wwsw@eBC!Oekp2v`cVOW zLU+$bZf$EFqq}J6LyX4{Z(blEGUGF^0n$mVHK|EO+07dNS5kS#r8mBxh-yWEoFL@1 zeP;BfgNz=0Q`&b5>URz=a+o8jgY6Dsy`IwzoCpL+-h}%o)#o{F9T&efP@3RhSnsu6 zWE`7v=I-$MJ55)Qz85}NDjJO^8|Aj%u1r@_Opgut!XK7xM=a&DO!h(ss6f522jT025eZ;g^!%PO_ z%POC3tG{v%QIqs<-U`kal!Rn2Z@(ED6e4?uUz4uCqfKonT`OM2dKLiB=OnIg=+JHQ zAOV&#=H<1{7}=Mfh*@`gZTAK8?xQEPy()C)y6(}pTWXmu%+$4BynfL`UHcZ;wiJZc zj50FoL2eLdMraoTNyn|Drj(2H1%AfQ+Bg++jQ)iT4f8E_-A?(o$5K0Feb2bRUKACn3x_nCRyqDe(70yj#PlXtJJ zW~^-wAfzKd&kHcH+L;HnuWL?sVTvifHY#$7mRe)HOYbTuKW#jeQDyy#~#NW`2K5pHq8E4sL50u^hzXTzJKLa#< BzW@LL diff --git a/mixedreplace-upload/controllers/default.js b/mixedreplace-upload/controllers/default.js deleted file mode 100755 index 918f0eb..0000000 --- a/mixedreplace-upload/controllers/default.js +++ /dev/null @@ -1,16 +0,0 @@ -exports.install = function() { - F.mmr('/', upload); -}; - -var files = []; - -function upload(req, file, counter) { - - if (file === null) { - framework.unlink(files); - return; - } - - console.log('--->', counter, file.filename); - files.push(file.path); -} \ No newline at end of file diff --git a/mixedreplace-upload/index.js b/mixedreplace-upload/index.js deleted file mode 100755 index 80dfad6..0000000 --- a/mixedreplace-upload/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/mixedreplace-upload/readme.md b/mixedreplace-upload/readme.md deleted file mode 100755 index caf2c9d..0000000 --- a/mixedreplace-upload/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -This example works on in Total.js `v2.1.0`. - -- you need to run `index.js` (Total.js app) -- then you need to execu script `upload.js` \ No newline at end of file diff --git a/mixedreplace-upload/upload.js b/mixedreplace-upload/upload.js deleted file mode 100755 index 1b90202..0000000 --- a/mixedreplace-upload/upload.js +++ /dev/null @@ -1,67 +0,0 @@ -require('total.js'); - -const Url = require('url'); -const Http = require('http'); -const Path = require('path'); -const Fs = require('fs'); - -// directory must contain only files -//var directory = process.; - -var BOUNDARY = '----' + Math.random().toString(16).substring(2); -var files = []; - -function send(url) { - - var indexer = 0; - var uri = Url.parse(url); - var headers = { 'Content-Type': 'multipart/x-mixed-replace; boundary=' + BOUNDARY }; - var options = { protocol: uri.protocol, auth: uri.auth, method: 'POST', hostname: uri.hostname, port: uri.port, path: uri.path, agent: false, headers: headers }; - - var response = function(res) { - res.on('end', () => console.log(res.statusCode)); - res.resume(); - }; - - var con = Http; - var req = con.request(options, response); - - req.on('error', (err) => console.log('ERROR', err, err.stack)); - - function sendfile(filename, cb) { - var header = '\r\n\r\n--' + BOUNDARY + '\r\nContent-Disposition: form-data; name="File"; filename="' + Path.basename(filename) + '"\r\nContent-Type: ' + U.getContentType(U.getExtension(filename)) +'\r\n\r\n'; - req.write(header); - var stream = Fs.createReadStream(filename); - stream.pipe(req, { end: false }); - stream.on('end', cb); - } - - function run() { - indexer++; - - if (indexer > 5) { - req.end('\r\n\r\n--' + BOUNDARY + '--'); - console.log('END'); - return; - } - - setTimeout(function() { - var file = files.shift() || ''; - if (file.length) { - console.log('–---->', file); - sendfile(file, run); - } - }, 500); - } - - run(); -}; - -var directory = process.cwd(); - -Fs.readdirSync(directory).forEach(function(filename){ - if (filename.lastIndexOf('.jpg') !== -1) - files.push(Path.join(directory, filename)); -}); - -send('http://127.0.0.1:8000/'); \ No newline at end of file diff --git a/models-nosql/controllers/default.js b/models-nosql/controllers/default.js deleted file mode 100644 index b548e04..0000000 --- a/models-nosql/controllers/default.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.install = function() { - F.route('/', json_query, ['*Products']); -}; - -function json_query() { - var self = this; - self.$query(self.query, self.callback()); -} \ No newline at end of file diff --git a/models-nosql/databases/products.nosql b/models-nosql/databases/products.nosql deleted file mode 100644 index dbdb498..0000000 --- a/models-nosql/databases/products.nosql +++ /dev/null @@ -1,5 +0,0 @@ -{"name":"Shoes","price":30} -{"name":"T-shirts","price":20} -{"name":"Jeans","price":60} -{"name":"Socks","price":3} -{"name":"Hats","price":6} diff --git a/models-nosql/index.js b/models-nosql/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/models-nosql/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/models-nosql/models/products.js b/models-nosql/models/products.js deleted file mode 100644 index 868611c..0000000 --- a/models-nosql/models/products.js +++ /dev/null @@ -1,9 +0,0 @@ -NEWSCHEMA('Products').make(function(schema) { - schema.setQuery(function(error, options, callback, controller) { - NOSQL('products').find().make(function(builder) { - // builder.take(U.parseInt(options.take) || 20); - // builder.skip(U.parseInt(options.skip) || 0); - builder.callback(callback); - }); - }); -}); \ No newline at end of file diff --git a/models/controllers/default.js b/models/controllers/default.js deleted file mode 100644 index ee66ad2..0000000 --- a/models/controllers/default.js +++ /dev/null @@ -1,12 +0,0 @@ -exports.install = function() { - F.route('/', json_homepage); -}; - -function json_homepage() { - - var self = this; - var User = MODEL('user'); - - self.json(User.create(), true); - -} \ No newline at end of file diff --git a/models/index.js b/models/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/models/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/models/models/user.js b/models/models/user.js deleted file mode 100644 index 37d791c..0000000 --- a/models/models/user.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.create = function() { - return { name: '', age: 0 }; -}; \ No newline at end of file diff --git a/vue/controllers/default.js b/vue/controllers/default.js index 7324831..0185f0f 100644 --- a/vue/controllers/default.js +++ b/vue/controllers/default.js @@ -1,21 +1,17 @@ global.Vue = require('vue'); -var renderer = require('vue-server-renderer').createRenderer(); -var app = require(F.path.root('public/assets/app.js'))(); +const Renderer = require('vue-server-renderer').createRenderer(); +const App = require(PATH.root('public/assets/app.js'))(); exports.install = function() { - F.route('/*', view_index); + ROUTE('/*', view_index); }; function view_index() { var self = this; - - renderer.renderToString(app, function(error, html) { - - if (error) { - + Renderer.renderToString(App, function(error, html) { + if (error) self.throw500(error); - } - - self.view('index', html); + else + self.view('index', html); }); } diff --git a/vue/views/index.html b/vue/views/index.html index 2d224a0..e18b9f2 100644 --- a/vue/views/index.html +++ b/vue/views/index.html @@ -2,12 +2,11 @@ - My Vue App - - + My Vue App + - @{!model} - + @{!model} + \ No newline at end of file diff --git a/waiting/index.js b/waiting/index.js index 5adaad8..fced13f 100644 --- a/waiting/index.js +++ b/waiting/index.js @@ -1,6 +1,6 @@ require('total.js'); -F.route('/', function() { +ROUTE('GET /', function() { this.plain('Welcome'); }); diff --git a/websocket/controllers/default.js b/websocket/controllers/default.js index d9bafb9..2ccc690 100644 --- a/websocket/controllers/default.js +++ b/websocket/controllers/default.js @@ -1,12 +1,12 @@ exports.install = function() { - F.route('/'); - F.route('/usage/', view_usage); + ROUTE('GET /'); + ROUTE('GET /usage/', view_usage); - F.websocket('/', socket_homepage, ['json']); + WEBSOCKET('/', socket_homepage, ['json']); - // F.websocket('/chat/', socket_homepage, ['json'], ['chat']); - // F.websocket('/chat/private/', socket_private_homepage, ['json'], ['privatechat'], ['*']); - // F.websocket('/chat/private/sex/', socket_sex_homepage, ['json'], ['privatechat', 'sexchat'], ['www.totaljs.com', 'eshop.totaljs.com', 'blog.totaljs.com']); + // WEBSOCKET('/chat/', socket_homepage, ['json'], ['chat']); + // WEBSOCKET('/chat/private/', socket_private_homepage, ['json'], ['privatechat'], ['*']); + // WEBSOCKET('/chat/private/sex/', socket_sex_homepage, ['json'], ['privatechat', 'sexchat'], ['www.totaljs.com', 'eshop.totaljs.com', 'blog.totaljs.com']); // On client side: // new WebSocket('ws://127.0.0.1:8004/', 'privatechat'); @@ -21,63 +21,63 @@ function socket_homepage() { var controller = this; - /* - Send message to all - @value {String or Object} - @names {String Array} :: client.id, optional - default null - @blacklist {String Array} :: client.id, optional - default null + /* + Send message to all + @value {String or Object} + @names {String Array} :: client.id, optional - default null + @blacklist {String Array} :: client.id, optional - default null if (names === null || names === undefined) message send to all users - */ - // controller.send(value, names, blacklist); + */ + // controller.send(value, names, blacklist); - /* - Close connection - @names {String Array} :: client.id, optional - default null + /* + Close connection + @names {String Array} :: client.id, optional - default null if (names === null || names === undefined) close/disconnect all users - */ - // controller.close(names); + */ + // controller.close(names); + + /* + Destroy websocket + */ + // controller.destroy(); + + /* + Get online count + return {Number} + */ + // controller.online; /* - Destroy websocket - */ - // controller.destroy(); - - /* - Get online count - return {Number} - */ - // controller.online; - - /* - Find a client - @name {String} - return {Client} - */ - // controller.find(name); - - // DESTROY CONTROLLER - // controller.destroy(); - - // ============================================================ - - // client.id : client identifiactor, you can modify this property, default contain random string - // client.socket : socket (internal) - // client.req : request - // client.uri : URI - // client.ip : IP - // client.session : empty object, you can modify this property - // client.user : empty object, you can modify this property - // client.query : get URL query parameters - - // client.cookie(name) : value - // client.send(value) : send message - // client.close([message]) : disconnect client + Find a client + @name {String} + return {Client} + */ + // controller.find(name); + + // DESTROY CONTROLLER + // controller.destroy(); + + // ============================================================ + + // client.id : client identifiactor, you can modify this property, default contain random string + // client.socket : socket (internal) + // client.req : request + // client.uri : URI + // client.ip : IP + // client.session : empty object, you can modify this property + // client.user : empty object, you can modify this property + // client.query : get URL query parameters + + // client.cookie(name) : value + // client.send(value) : send message + // client.close([message]) : disconnect client controller.on('open', function(client) { @@ -86,13 +86,13 @@ function socket_homepage() { client.send({ message: 'Hello {0}'.format(client.id) }); controller.send({ message: 'Connect new user: {0}\nOnline: {1}'.format(client.id, controller.online) }, null, [client.id]); - // or - /* - controller.send({ message: 'Some message' }, null, function(user) { - // filter - return user.id === client.id; - }); - */ + // or + /* + controller.send({ message: 'Some message' }, null, function(user) { + // filter + return user.id === client.id; + }); + */ }); @@ -105,7 +105,7 @@ function socket_homepage() { controller.on('message', function(client, message) { - console.log(message); + console.log(message); if (typeof(message.username) !== 'undefined') { var old = client.id; @@ -116,7 +116,7 @@ function socket_homepage() { // send to all without this client message.message = client.id + ': ' + message.message; - console.log(message); + console.log(message); controller.send(message); }); diff --git a/workers/controllers/default.js b/workers/controllers/default.js index 8b7f45c..00552b6 100644 --- a/workers/controllers/default.js +++ b/workers/controllers/default.js @@ -1,8 +1,8 @@ exports.install = function() { - F.route('/', view_index); -} + ROUTE('GET /', view_index); +}; function view_index() { var self = this; - self.json(F.global.xml); + self.json(MAIN.xml); } \ No newline at end of file diff --git a/workers/definitions/worker.js b/workers/definitions/worker.js index 7cad4a0..e7e106b 100644 --- a/workers/definitions/worker.js +++ b/workers/definitions/worker.js @@ -4,7 +4,7 @@ function refresh() { // worker === http://nodejs.org/api/child_process.html#child_process_class_childprocess worker.on('message', function(obj) { - F.global.xml = obj; + MAIN.xml = obj; }); } diff --git a/workers/workers/xml.js b/workers/workers/xml.js index 049cfc8..8828da0 100644 --- a/workers/workers/xml.js +++ b/workers/workers/xml.js @@ -1,14 +1,14 @@ require('total.js'); // Loads the framework without HTTP server -F.load('debug', ['config'], '../'); +LOAD('debug', ['config'], '../'); U.download(CONFIG('url'), ['get'], function(err, response) { - if (err) { - console.error(err); - return process.exit(); - } + if (err) { + console.error(err); + return process.exit(); + } var data = []; diff --git a/workflows/index.js b/workflows/index.js deleted file mode 100644 index a03c5df..0000000 --- a/workflows/index.js +++ /dev/null @@ -1,59 +0,0 @@ -// =================================================== -// IMPORTANT: only for development -// total.js - web application framework for node.js -// http://www.totaljs.com -// =================================================== - -// Requirements: Total.js +v2.3.0 -require('total.js').load('debug', ['models', 'workflows']); - -setTimeout(function() { - - // Async list - var samples = []; - - // Empty instance of User - var user = CREATE('User'); - - samples.push(function(next) { - console.log('---> begin $exec("user-save")'); - user.$exec('user-save', function(err, response) { - console.log('---> end $exec("user-save") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); - }); - }); - - samples.push(function(next) { - console.log('---> begin $exec("array-results")'); - user.$exec('array-results', function(err, response) { - console.log('---> end $exec("array-results") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); - }); - }); - - samples.push(function(next) { - console.log('---> begin $exec("user-query")'); - user.$exec('user-query', function(err, response) { - console.log('---> end $exec("user-query") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); - }); - }); - - samples.push(function(next) { - console.log('---> begin $exec("xml")'); - user.$exec('xml', function(err, response) { - console.log('---> end $exec("xml") RESPONSE: ' + JSON.stringify(response)); - console.log(); - next(); - }); - }); - - samples.async(function() { - // Kills the app - F.kill(); - }); - -}, 1000); diff --git a/workflows/models/user.js b/workflows/models/user.js deleted file mode 100644 index aa3d747..0000000 --- a/workflows/models/user.js +++ /dev/null @@ -1,36 +0,0 @@ -NEWSCHEMA('User').make(function(schema) { - - schema.define('name', 'String(30)'); - schema.define('email', 'Email'); - - schema.addWorkflow('check', function(error, model, options, callback, controller) { - console.log('User.workflow("check")'); - callback(SUCCESS(true)); - }); - - schema.addWorkflow('confirm', function(error, model, options, callback, controller) { - console.log('User.workflow("confirm")'); - callback(SUCCESS(true)); - }); - - schema.addTransform('xml', function(error, model, options, callback, controller) { - console.log('User.transform("xml")'); - callback(SUCCESS(true)); - }); - - schema.addOperation('blabla', function(error, model, options, callback, controller) { - console.log('User.operation("blabla")'); - callback(SUCCESS(true)); - }); - - schema.setSave(function(error, model, options, callback, controller) { - console.log('User.save()'); - callback(SUCCESS(true)); - }); - - schema.setQuery(function(error, options, callback, controller) { - console.log('User.query()'); - callback(SUCCESS(true)); - }); - -}); \ No newline at end of file diff --git a/workflows/workflows b/workflows/workflows deleted file mode 100644 index 450b650..0000000 --- a/workflows/workflows +++ /dev/null @@ -1,4 +0,0 @@ -user-save : workflow:'check' --> workflow:'confirm' --> save (response) -array-results : workflow:'check' --> workflow:'confirm' --> save --> operation:'blabla' -user-query : query (response) -xml : transform:'xml' (response) \ No newline at end of file diff --git a/xml-sitemap-workers/controllers/default.js b/xml-sitemap-workers/controllers/default.js index 1a23e3f..2fc0190 100644 --- a/xml-sitemap-workers/controllers/default.js +++ b/xml-sitemap-workers/controllers/default.js @@ -2,9 +2,9 @@ var isGenerating = false; var isGenerated = false; exports.install = function() { - F.route('/', view_index); - F.file('sitemap.xml', file_xml); -} + ROUTE('/', view_index); + FILE('sitemap.xml', file_xml); +}; function view_index() { var self = this; diff --git a/xml-sitemap-workers/public/sitemap.xml b/xml-sitemap-workers/public/sitemap.xml index 19a5342..b6559c2 100644 --- a/xml-sitemap-workers/public/sitemap.xml +++ b/xml-sitemap-workers/public/sitemap.xml @@ -1 +1 @@ -http://127.0.0.1:8000/2016-06-28weekly1.0000http://127.0.0.1:8000/products/02016-06-28monthly0.3http://127.0.0.1:8000/products/12016-06-28monthly0.3http://127.0.0.1:8000/products/22016-06-28monthly0.3http://127.0.0.1:8000/products/32016-06-28monthly0.3http://127.0.0.1:8000/products/42016-06-28monthly0.3http://127.0.0.1:8000/products/52016-06-28monthly0.3http://127.0.0.1:8000/products/62016-06-28monthly0.3http://127.0.0.1:8000/products/72016-06-28monthly0.3http://127.0.0.1:8000/products/82016-06-28monthly0.3http://127.0.0.1:8000/products/92016-06-28monthly0.3http://127.0.0.1:8000/products/102016-06-28monthly0.3http://127.0.0.1:8000/products/112016-06-28monthly0.3http://127.0.0.1:8000/products/122016-06-28monthly0.3http://127.0.0.1:8000/products/132016-06-28monthly0.3http://127.0.0.1:8000/products/142016-06-28monthly0.3http://127.0.0.1:8000/products/152016-06-28monthly0.3http://127.0.0.1:8000/products/162016-06-28monthly0.3http://127.0.0.1:8000/products/172016-06-28monthly0.3http://127.0.0.1:8000/products/182016-06-28monthly0.3http://127.0.0.1:8000/products/192016-06-28monthly0.3http://127.0.0.1:8000/products/202016-06-28monthly0.3http://127.0.0.1:8000/products/212016-06-28monthly0.3http://127.0.0.1:8000/products/222016-06-28monthly0.3http://127.0.0.1:8000/products/232016-06-28monthly0.3http://127.0.0.1:8000/products/242016-06-28monthly0.3http://127.0.0.1:8000/products/252016-06-28monthly0.3http://127.0.0.1:8000/products/262016-06-28monthly0.3http://127.0.0.1:8000/products/272016-06-28monthly0.3http://127.0.0.1:8000/products/282016-06-28monthly0.3http://127.0.0.1:8000/products/292016-06-28monthly0.3http://127.0.0.1:8000/products/302016-06-28monthly0.3http://127.0.0.1:8000/products/312016-06-28monthly0.3http://127.0.0.1:8000/products/322016-06-28monthly0.3http://127.0.0.1:8000/products/332016-06-28monthly0.3http://127.0.0.1:8000/products/342016-06-28monthly0.3http://127.0.0.1:8000/products/352016-06-28monthly0.3http://127.0.0.1:8000/products/362016-06-28monthly0.3http://127.0.0.1:8000/products/372016-06-28monthly0.3http://127.0.0.1:8000/products/382016-06-28monthly0.3http://127.0.0.1:8000/products/392016-06-28monthly0.3http://127.0.0.1:8000/products/402016-06-28monthly0.3http://127.0.0.1:8000/products/412016-06-28monthly0.3http://127.0.0.1:8000/products/422016-06-28monthly0.3http://127.0.0.1:8000/products/432016-06-28monthly0.3http://127.0.0.1:8000/products/442016-06-28monthly0.3http://127.0.0.1:8000/products/452016-06-28monthly0.3http://127.0.0.1:8000/products/462016-06-28monthly0.3http://127.0.0.1:8000/products/472016-06-28monthly0.3http://127.0.0.1:8000/products/482016-06-28monthly0.3http://127.0.0.1:8000/products/492016-06-28monthly0.3http://127.0.0.1:8000/products/502016-06-28monthly0.3http://127.0.0.1:8000/products/512016-06-28monthly0.3http://127.0.0.1:8000/products/522016-06-28monthly0.3http://127.0.0.1:8000/products/532016-06-28monthly0.3http://127.0.0.1:8000/products/542016-06-28monthly0.3http://127.0.0.1:8000/products/552016-06-28monthly0.3http://127.0.0.1:8000/products/562016-06-28monthly0.3http://127.0.0.1:8000/products/572016-06-28monthly0.3http://127.0.0.1:8000/products/582016-06-28monthly0.3http://127.0.0.1:8000/products/592016-06-28monthly0.3http://127.0.0.1:8000/products/602016-06-28monthly0.3http://127.0.0.1:8000/products/612016-06-28monthly0.3http://127.0.0.1:8000/products/622016-06-28monthly0.3http://127.0.0.1:8000/products/632016-06-28monthly0.3http://127.0.0.1:8000/products/642016-06-28monthly0.3http://127.0.0.1:8000/products/652016-06-28monthly0.3http://127.0.0.1:8000/products/662016-06-28monthly0.3http://127.0.0.1:8000/products/672016-06-28monthly0.3http://127.0.0.1:8000/products/682016-06-28monthly0.3http://127.0.0.1:8000/products/692016-06-28monthly0.3http://127.0.0.1:8000/products/702016-06-28monthly0.3http://127.0.0.1:8000/products/712016-06-28monthly0.3http://127.0.0.1:8000/products/722016-06-28monthly0.3http://127.0.0.1:8000/products/732016-06-28monthly0.3http://127.0.0.1:8000/products/742016-06-28monthly0.3http://127.0.0.1:8000/products/752016-06-28monthly0.3http://127.0.0.1:8000/products/762016-06-28monthly0.3http://127.0.0.1:8000/products/772016-06-28monthly0.3http://127.0.0.1:8000/products/782016-06-28monthly0.3http://127.0.0.1:8000/products/792016-06-28monthly0.3http://127.0.0.1:8000/products/802016-06-28monthly0.3http://127.0.0.1:8000/products/812016-06-28monthly0.3http://127.0.0.1:8000/products/822016-06-28monthly0.3http://127.0.0.1:8000/products/832016-06-28monthly0.3http://127.0.0.1:8000/products/842016-06-28monthly0.3http://127.0.0.1:8000/products/852016-06-28monthly0.3http://127.0.0.1:8000/products/862016-06-28monthly0.3http://127.0.0.1:8000/products/872016-06-28monthly0.3http://127.0.0.1:8000/products/882016-06-28monthly0.3http://127.0.0.1:8000/products/892016-06-28monthly0.3http://127.0.0.1:8000/products/902016-06-28monthly0.3http://127.0.0.1:8000/products/912016-06-28monthly0.3http://127.0.0.1:8000/products/922016-06-28monthly0.3http://127.0.0.1:8000/products/932016-06-28monthly0.3http://127.0.0.1:8000/products/942016-06-28monthly0.3http://127.0.0.1:8000/products/952016-06-28monthly0.3http://127.0.0.1:8000/products/962016-06-28monthly0.3http://127.0.0.1:8000/products/972016-06-28monthly0.3http://127.0.0.1:8000/products/982016-06-28monthly0.3http://127.0.0.1:8000/products/992016-06-28monthly0.3http://127.0.0.1:8000/products/1002016-06-28monthly0.3http://127.0.0.1:8000/products/1012016-06-28monthly0.3http://127.0.0.1:8000/products/1022016-06-28monthly0.3http://127.0.0.1:8000/products/1032016-06-28monthly0.3http://127.0.0.1:8000/products/1042016-06-28monthly0.3http://127.0.0.1:8000/products/1052016-06-28monthly0.3http://127.0.0.1:8000/products/1062016-06-28monthly0.3http://127.0.0.1:8000/products/1072016-06-28monthly0.3http://127.0.0.1:8000/products/1082016-06-28monthly0.3http://127.0.0.1:8000/products/1092016-06-28monthly0.3http://127.0.0.1:8000/products/1102016-06-28monthly0.3http://127.0.0.1:8000/products/1112016-06-28monthly0.3http://127.0.0.1:8000/products/1122016-06-28monthly0.3http://127.0.0.1:8000/products/1132016-06-28monthly0.3http://127.0.0.1:8000/products/1142016-06-28monthly0.3http://127.0.0.1:8000/products/1152016-06-28monthly0.3http://127.0.0.1:8000/products/1162016-06-28monthly0.3http://127.0.0.1:8000/products/1172016-06-28monthly0.3http://127.0.0.1:8000/products/1182016-06-28monthly0.3http://127.0.0.1:8000/products/1192016-06-28monthly0.3http://127.0.0.1:8000/products/1202016-06-28monthly0.3http://127.0.0.1:8000/products/1212016-06-28monthly0.3http://127.0.0.1:8000/products/1222016-06-28monthly0.3http://127.0.0.1:8000/products/1232016-06-28monthly0.3http://127.0.0.1:8000/products/1242016-06-28monthly0.3http://127.0.0.1:8000/products/1252016-06-28monthly0.3http://127.0.0.1:8000/products/1262016-06-28monthly0.3http://127.0.0.1:8000/products/1272016-06-28monthly0.3http://127.0.0.1:8000/products/1282016-06-28monthly0.3http://127.0.0.1:8000/products/1292016-06-28monthly0.3http://127.0.0.1:8000/products/1302016-06-28monthly0.3http://127.0.0.1:8000/products/1312016-06-28monthly0.3http://127.0.0.1:8000/products/1322016-06-28monthly0.3http://127.0.0.1:8000/products/1332016-06-28monthly0.3http://127.0.0.1:8000/products/1342016-06-28monthly0.3http://127.0.0.1:8000/products/1352016-06-28monthly0.3http://127.0.0.1:8000/products/1362016-06-28monthly0.3http://127.0.0.1:8000/products/1372016-06-28monthly0.3http://127.0.0.1:8000/products/1382016-06-28monthly0.3http://127.0.0.1:8000/products/1392016-06-28monthly0.3http://127.0.0.1:8000/products/1402016-06-28monthly0.3http://127.0.0.1:8000/products/1412016-06-28monthly0.3http://127.0.0.1:8000/products/1422016-06-28monthly0.3http://127.0.0.1:8000/products/1432016-06-28monthly0.3http://127.0.0.1:8000/products/1442016-06-28monthly0.3http://127.0.0.1:8000/products/1452016-06-28monthly0.3http://127.0.0.1:8000/products/1462016-06-28monthly0.3http://127.0.0.1:8000/products/1472016-06-28monthly0.3http://127.0.0.1:8000/products/1482016-06-28monthly0.3http://127.0.0.1:8000/products/1492016-06-28monthly0.3http://127.0.0.1:8000/products/1502016-06-28monthly0.3http://127.0.0.1:8000/products/1512016-06-28monthly0.3http://127.0.0.1:8000/products/1522016-06-28monthly0.3http://127.0.0.1:8000/products/1532016-06-28monthly0.3http://127.0.0.1:8000/products/1542016-06-28monthly0.3http://127.0.0.1:8000/products/1552016-06-28monthly0.3http://127.0.0.1:8000/products/1562016-06-28monthly0.3http://127.0.0.1:8000/products/1572016-06-28monthly0.3http://127.0.0.1:8000/products/1582016-06-28monthly0.3http://127.0.0.1:8000/products/1592016-06-28monthly0.3http://127.0.0.1:8000/products/1602016-06-28monthly0.3http://127.0.0.1:8000/products/1612016-06-28monthly0.3http://127.0.0.1:8000/products/1622016-06-28monthly0.3http://127.0.0.1:8000/products/1632016-06-28monthly0.3http://127.0.0.1:8000/products/1642016-06-28monthly0.3http://127.0.0.1:8000/products/1652016-06-28monthly0.3http://127.0.0.1:8000/products/1662016-06-28monthly0.3http://127.0.0.1:8000/products/1672016-06-28monthly0.3http://127.0.0.1:8000/products/1682016-06-28monthly0.3http://127.0.0.1:8000/products/1692016-06-28monthly0.3http://127.0.0.1:8000/products/1702016-06-28monthly0.3http://127.0.0.1:8000/products/1712016-06-28monthly0.3http://127.0.0.1:8000/products/1722016-06-28monthly0.3http://127.0.0.1:8000/products/1732016-06-28monthly0.3http://127.0.0.1:8000/products/1742016-06-28monthly0.3http://127.0.0.1:8000/products/1752016-06-28monthly0.3http://127.0.0.1:8000/products/1762016-06-28monthly0.3http://127.0.0.1:8000/products/1772016-06-28monthly0.3http://127.0.0.1:8000/products/1782016-06-28monthly0.3http://127.0.0.1:8000/products/1792016-06-28monthly0.3http://127.0.0.1:8000/products/1802016-06-28monthly0.3http://127.0.0.1:8000/products/1812016-06-28monthly0.3http://127.0.0.1:8000/products/1822016-06-28monthly0.3http://127.0.0.1:8000/products/1832016-06-28monthly0.3http://127.0.0.1:8000/products/1842016-06-28monthly0.3http://127.0.0.1:8000/products/1852016-06-28monthly0.3http://127.0.0.1:8000/products/1862016-06-28monthly0.3http://127.0.0.1:8000/products/1872016-06-28monthly0.3http://127.0.0.1:8000/products/1882016-06-28monthly0.3http://127.0.0.1:8000/products/1892016-06-28monthly0.3http://127.0.0.1:8000/products/1902016-06-28monthly0.3http://127.0.0.1:8000/products/1912016-06-28monthly0.3http://127.0.0.1:8000/products/1922016-06-28monthly0.3http://127.0.0.1:8000/products/1932016-06-28monthly0.3http://127.0.0.1:8000/products/1942016-06-28monthly0.3http://127.0.0.1:8000/products/1952016-06-28monthly0.3http://127.0.0.1:8000/products/1962016-06-28monthly0.3http://127.0.0.1:8000/products/1972016-06-28monthly0.3http://127.0.0.1:8000/products/1982016-06-28monthly0.3http://127.0.0.1:8000/products/1992016-06-28monthly0.3http://127.0.0.1:8000/products/2002016-06-28monthly0.3http://127.0.0.1:8000/products/2012016-06-28monthly0.3http://127.0.0.1:8000/products/2022016-06-28monthly0.3http://127.0.0.1:8000/products/2032016-06-28monthly0.3http://127.0.0.1:8000/products/2042016-06-28monthly0.3http://127.0.0.1:8000/products/2052016-06-28monthly0.3http://127.0.0.1:8000/products/2062016-06-28monthly0.3http://127.0.0.1:8000/products/2072016-06-28monthly0.3http://127.0.0.1:8000/products/2082016-06-28monthly0.3http://127.0.0.1:8000/products/2092016-06-28monthly0.3http://127.0.0.1:8000/products/2102016-06-28monthly0.3http://127.0.0.1:8000/products/2112016-06-28monthly0.3http://127.0.0.1:8000/products/2122016-06-28monthly0.3http://127.0.0.1:8000/products/2132016-06-28monthly0.3http://127.0.0.1:8000/products/2142016-06-28monthly0.3http://127.0.0.1:8000/products/2152016-06-28monthly0.3http://127.0.0.1:8000/products/2162016-06-28monthly0.3http://127.0.0.1:8000/products/2172016-06-28monthly0.3http://127.0.0.1:8000/products/2182016-06-28monthly0.3http://127.0.0.1:8000/products/2192016-06-28monthly0.3http://127.0.0.1:8000/products/2202016-06-28monthly0.3http://127.0.0.1:8000/products/2212016-06-28monthly0.3http://127.0.0.1:8000/products/2222016-06-28monthly0.3http://127.0.0.1:8000/products/2232016-06-28monthly0.3http://127.0.0.1:8000/products/2242016-06-28monthly0.3http://127.0.0.1:8000/products/2252016-06-28monthly0.3http://127.0.0.1:8000/products/2262016-06-28monthly0.3http://127.0.0.1:8000/products/2272016-06-28monthly0.3http://127.0.0.1:8000/products/2282016-06-28monthly0.3http://127.0.0.1:8000/products/2292016-06-28monthly0.3http://127.0.0.1:8000/products/2302016-06-28monthly0.3http://127.0.0.1:8000/products/2312016-06-28monthly0.3http://127.0.0.1:8000/products/2322016-06-28monthly0.3http://127.0.0.1:8000/products/2332016-06-28monthly0.3http://127.0.0.1:8000/products/2342016-06-28monthly0.3http://127.0.0.1:8000/products/2352016-06-28monthly0.3http://127.0.0.1:8000/products/2362016-06-28monthly0.3http://127.0.0.1:8000/products/2372016-06-28monthly0.3http://127.0.0.1:8000/products/2382016-06-28monthly0.3http://127.0.0.1:8000/products/2392016-06-28monthly0.3http://127.0.0.1:8000/products/2402016-06-28monthly0.3http://127.0.0.1:8000/products/2412016-06-28monthly0.3http://127.0.0.1:8000/products/2422016-06-28monthly0.3http://127.0.0.1:8000/products/2432016-06-28monthly0.3http://127.0.0.1:8000/products/2442016-06-28monthly0.3http://127.0.0.1:8000/products/2452016-06-28monthly0.3http://127.0.0.1:8000/products/2462016-06-28monthly0.3http://127.0.0.1:8000/products/2472016-06-28monthly0.3http://127.0.0.1:8000/products/2482016-06-28monthly0.3http://127.0.0.1:8000/products/2492016-06-28monthly0.3http://127.0.0.1:8000/products/2502016-06-28monthly0.3http://127.0.0.1:8000/products/2512016-06-28monthly0.3http://127.0.0.1:8000/products/2522016-06-28monthly0.3http://127.0.0.1:8000/products/2532016-06-28monthly0.3http://127.0.0.1:8000/products/2542016-06-28monthly0.3http://127.0.0.1:8000/products/2552016-06-28monthly0.3http://127.0.0.1:8000/products/2562016-06-28monthly0.3http://127.0.0.1:8000/products/2572016-06-28monthly0.3http://127.0.0.1:8000/products/2582016-06-28monthly0.3http://127.0.0.1:8000/products/2592016-06-28monthly0.3http://127.0.0.1:8000/products/2602016-06-28monthly0.3http://127.0.0.1:8000/products/2612016-06-28monthly0.3http://127.0.0.1:8000/products/2622016-06-28monthly0.3http://127.0.0.1:8000/products/2632016-06-28monthly0.3http://127.0.0.1:8000/products/2642016-06-28monthly0.3http://127.0.0.1:8000/products/2652016-06-28monthly0.3http://127.0.0.1:8000/products/2662016-06-28monthly0.3http://127.0.0.1:8000/products/2672016-06-28monthly0.3http://127.0.0.1:8000/products/2682016-06-28monthly0.3http://127.0.0.1:8000/products/2692016-06-28monthly0.3http://127.0.0.1:8000/products/2702016-06-28monthly0.3http://127.0.0.1:8000/products/2712016-06-28monthly0.3http://127.0.0.1:8000/products/2722016-06-28monthly0.3http://127.0.0.1:8000/products/2732016-06-28monthly0.3http://127.0.0.1:8000/products/2742016-06-28monthly0.3http://127.0.0.1:8000/products/2752016-06-28monthly0.3http://127.0.0.1:8000/products/2762016-06-28monthly0.3http://127.0.0.1:8000/products/2772016-06-28monthly0.3http://127.0.0.1:8000/products/2782016-06-28monthly0.3http://127.0.0.1:8000/products/2792016-06-28monthly0.3http://127.0.0.1:8000/products/2802016-06-28monthly0.3http://127.0.0.1:8000/products/2812016-06-28monthly0.3http://127.0.0.1:8000/products/2822016-06-28monthly0.3http://127.0.0.1:8000/products/2832016-06-28monthly0.3http://127.0.0.1:8000/products/2842016-06-28monthly0.3http://127.0.0.1:8000/products/2852016-06-28monthly0.3http://127.0.0.1:8000/products/2862016-06-28monthly0.3http://127.0.0.1:8000/products/2872016-06-28monthly0.3http://127.0.0.1:8000/products/2882016-06-28monthly0.3http://127.0.0.1:8000/products/2892016-06-28monthly0.3http://127.0.0.1:8000/products/2902016-06-28monthly0.3http://127.0.0.1:8000/products/2912016-06-28monthly0.3http://127.0.0.1:8000/products/2922016-06-28monthly0.3http://127.0.0.1:8000/products/2932016-06-28monthly0.3http://127.0.0.1:8000/products/2942016-06-28monthly0.3http://127.0.0.1:8000/products/2952016-06-28monthly0.3http://127.0.0.1:8000/products/2962016-06-28monthly0.3http://127.0.0.1:8000/products/2972016-06-28monthly0.3http://127.0.0.1:8000/products/2982016-06-28monthly0.3http://127.0.0.1:8000/products/2992016-06-28monthly0.3http://127.0.0.1:8000/products/3002016-06-28monthly0.3http://127.0.0.1:8000/products/3012016-06-28monthly0.3http://127.0.0.1:8000/products/3022016-06-28monthly0.3http://127.0.0.1:8000/products/3032016-06-28monthly0.3http://127.0.0.1:8000/products/3042016-06-28monthly0.3http://127.0.0.1:8000/products/3052016-06-28monthly0.3http://127.0.0.1:8000/products/3062016-06-28monthly0.3http://127.0.0.1:8000/products/3072016-06-28monthly0.3http://127.0.0.1:8000/products/3082016-06-28monthly0.3http://127.0.0.1:8000/products/3092016-06-28monthly0.3http://127.0.0.1:8000/products/3102016-06-28monthly0.3http://127.0.0.1:8000/products/3112016-06-28monthly0.3http://127.0.0.1:8000/products/3122016-06-28monthly0.3http://127.0.0.1:8000/products/3132016-06-28monthly0.3http://127.0.0.1:8000/products/3142016-06-28monthly0.3http://127.0.0.1:8000/products/3152016-06-28monthly0.3http://127.0.0.1:8000/products/3162016-06-28monthly0.3http://127.0.0.1:8000/products/3172016-06-28monthly0.3http://127.0.0.1:8000/products/3182016-06-28monthly0.3http://127.0.0.1:8000/products/3192016-06-28monthly0.3http://127.0.0.1:8000/products/3202016-06-28monthly0.3http://127.0.0.1:8000/products/3212016-06-28monthly0.3http://127.0.0.1:8000/products/3222016-06-28monthly0.3http://127.0.0.1:8000/products/3232016-06-28monthly0.3http://127.0.0.1:8000/products/3242016-06-28monthly0.3http://127.0.0.1:8000/products/3252016-06-28monthly0.3http://127.0.0.1:8000/products/3262016-06-28monthly0.3http://127.0.0.1:8000/products/3272016-06-28monthly0.3http://127.0.0.1:8000/products/3282016-06-28monthly0.3http://127.0.0.1:8000/products/3292016-06-28monthly0.3http://127.0.0.1:8000/products/3302016-06-28monthly0.3http://127.0.0.1:8000/products/3312016-06-28monthly0.3http://127.0.0.1:8000/products/3322016-06-28monthly0.3http://127.0.0.1:8000/products/3332016-06-28monthly0.3http://127.0.0.1:8000/products/3342016-06-28monthly0.3http://127.0.0.1:8000/products/3352016-06-28monthly0.3http://127.0.0.1:8000/products/3362016-06-28monthly0.3http://127.0.0.1:8000/products/3372016-06-28monthly0.3http://127.0.0.1:8000/products/3382016-06-28monthly0.3http://127.0.0.1:8000/products/3392016-06-28monthly0.3http://127.0.0.1:8000/products/3402016-06-28monthly0.3http://127.0.0.1:8000/products/3412016-06-28monthly0.3http://127.0.0.1:8000/products/3422016-06-28monthly0.3http://127.0.0.1:8000/products/3432016-06-28monthly0.3http://127.0.0.1:8000/products/3442016-06-28monthly0.3http://127.0.0.1:8000/products/3452016-06-28monthly0.3http://127.0.0.1:8000/products/3462016-06-28monthly0.3http://127.0.0.1:8000/products/3472016-06-28monthly0.3http://127.0.0.1:8000/products/3482016-06-28monthly0.3http://127.0.0.1:8000/products/3492016-06-28monthly0.3http://127.0.0.1:8000/products/3502016-06-28monthly0.3http://127.0.0.1:8000/products/3512016-06-28monthly0.3http://127.0.0.1:8000/products/3522016-06-28monthly0.3http://127.0.0.1:8000/products/3532016-06-28monthly0.3http://127.0.0.1:8000/products/3542016-06-28monthly0.3http://127.0.0.1:8000/products/3552016-06-28monthly0.3http://127.0.0.1:8000/products/3562016-06-28monthly0.3http://127.0.0.1:8000/products/3572016-06-28monthly0.3http://127.0.0.1:8000/products/3582016-06-28monthly0.3http://127.0.0.1:8000/products/3592016-06-28monthly0.3http://127.0.0.1:8000/products/3602016-06-28monthly0.3http://127.0.0.1:8000/products/3612016-06-28monthly0.3http://127.0.0.1:8000/products/3622016-06-28monthly0.3http://127.0.0.1:8000/products/3632016-06-28monthly0.3http://127.0.0.1:8000/products/3642016-06-28monthly0.3http://127.0.0.1:8000/products/3652016-06-28monthly0.3http://127.0.0.1:8000/products/3662016-06-28monthly0.3http://127.0.0.1:8000/products/3672016-06-28monthly0.3http://127.0.0.1:8000/products/3682016-06-28monthly0.3http://127.0.0.1:8000/products/3692016-06-28monthly0.3http://127.0.0.1:8000/products/3702016-06-28monthly0.3http://127.0.0.1:8000/products/3712016-06-28monthly0.3http://127.0.0.1:8000/products/3722016-06-28monthly0.3http://127.0.0.1:8000/products/3732016-06-28monthly0.3http://127.0.0.1:8000/products/3742016-06-28monthly0.3http://127.0.0.1:8000/products/3752016-06-28monthly0.3http://127.0.0.1:8000/products/3762016-06-28monthly0.3http://127.0.0.1:8000/products/3772016-06-28monthly0.3http://127.0.0.1:8000/products/3782016-06-28monthly0.3http://127.0.0.1:8000/products/3792016-06-28monthly0.3http://127.0.0.1:8000/products/3802016-06-28monthly0.3http://127.0.0.1:8000/products/3812016-06-28monthly0.3http://127.0.0.1:8000/products/3822016-06-28monthly0.3http://127.0.0.1:8000/products/3832016-06-28monthly0.3http://127.0.0.1:8000/products/3842016-06-28monthly0.3http://127.0.0.1:8000/products/3852016-06-28monthly0.3http://127.0.0.1:8000/products/3862016-06-28monthly0.3http://127.0.0.1:8000/products/3872016-06-28monthly0.3http://127.0.0.1:8000/products/3882016-06-28monthly0.3http://127.0.0.1:8000/products/3892016-06-28monthly0.3http://127.0.0.1:8000/products/3902016-06-28monthly0.3http://127.0.0.1:8000/products/3912016-06-28monthly0.3http://127.0.0.1:8000/products/3922016-06-28monthly0.3http://127.0.0.1:8000/products/3932016-06-28monthly0.3http://127.0.0.1:8000/products/3942016-06-28monthly0.3http://127.0.0.1:8000/products/3952016-06-28monthly0.3http://127.0.0.1:8000/products/3962016-06-28monthly0.3http://127.0.0.1:8000/products/3972016-06-28monthly0.3http://127.0.0.1:8000/products/3982016-06-28monthly0.3http://127.0.0.1:8000/products/3992016-06-28monthly0.3http://127.0.0.1:8000/products/4002016-06-28monthly0.3http://127.0.0.1:8000/products/4012016-06-28monthly0.3http://127.0.0.1:8000/products/4022016-06-28monthly0.3http://127.0.0.1:8000/products/4032016-06-28monthly0.3http://127.0.0.1:8000/products/4042016-06-28monthly0.3http://127.0.0.1:8000/products/4052016-06-28monthly0.3http://127.0.0.1:8000/products/4062016-06-28monthly0.3http://127.0.0.1:8000/products/4072016-06-28monthly0.3http://127.0.0.1:8000/products/4082016-06-28monthly0.3http://127.0.0.1:8000/products/4092016-06-28monthly0.3http://127.0.0.1:8000/products/4102016-06-28monthly0.3http://127.0.0.1:8000/products/4112016-06-28monthly0.3http://127.0.0.1:8000/products/4122016-06-28monthly0.3http://127.0.0.1:8000/products/4132016-06-28monthly0.3http://127.0.0.1:8000/products/4142016-06-28monthly0.3http://127.0.0.1:8000/products/4152016-06-28monthly0.3http://127.0.0.1:8000/products/4162016-06-28monthly0.3http://127.0.0.1:8000/products/4172016-06-28monthly0.3http://127.0.0.1:8000/products/4182016-06-28monthly0.3http://127.0.0.1:8000/products/4192016-06-28monthly0.3http://127.0.0.1:8000/products/4202016-06-28monthly0.3http://127.0.0.1:8000/products/4212016-06-28monthly0.3http://127.0.0.1:8000/products/4222016-06-28monthly0.3http://127.0.0.1:8000/products/4232016-06-28monthly0.3http://127.0.0.1:8000/products/4242016-06-28monthly0.3http://127.0.0.1:8000/products/4252016-06-28monthly0.3http://127.0.0.1:8000/products/4262016-06-28monthly0.3http://127.0.0.1:8000/products/4272016-06-28monthly0.3http://127.0.0.1:8000/products/4282016-06-28monthly0.3http://127.0.0.1:8000/products/4292016-06-28monthly0.3http://127.0.0.1:8000/products/4302016-06-28monthly0.3http://127.0.0.1:8000/products/4312016-06-28monthly0.3http://127.0.0.1:8000/products/4322016-06-28monthly0.3http://127.0.0.1:8000/products/4332016-06-28monthly0.3http://127.0.0.1:8000/products/4342016-06-28monthly0.3http://127.0.0.1:8000/products/4352016-06-28monthly0.3http://127.0.0.1:8000/products/4362016-06-28monthly0.3http://127.0.0.1:8000/products/4372016-06-28monthly0.3http://127.0.0.1:8000/products/4382016-06-28monthly0.3http://127.0.0.1:8000/products/4392016-06-28monthly0.3http://127.0.0.1:8000/products/4402016-06-28monthly0.3http://127.0.0.1:8000/products/4412016-06-28monthly0.3http://127.0.0.1:8000/products/4422016-06-28monthly0.3http://127.0.0.1:8000/products/4432016-06-28monthly0.3http://127.0.0.1:8000/products/4442016-06-28monthly0.3http://127.0.0.1:8000/products/4452016-06-28monthly0.3http://127.0.0.1:8000/products/4462016-06-28monthly0.3http://127.0.0.1:8000/products/4472016-06-28monthly0.3http://127.0.0.1:8000/products/4482016-06-28monthly0.3http://127.0.0.1:8000/products/4492016-06-28monthly0.3http://127.0.0.1:8000/products/4502016-06-28monthly0.3http://127.0.0.1:8000/products/4512016-06-28monthly0.3http://127.0.0.1:8000/products/4522016-06-28monthly0.3http://127.0.0.1:8000/products/4532016-06-28monthly0.3http://127.0.0.1:8000/products/4542016-06-28monthly0.3http://127.0.0.1:8000/products/4552016-06-28monthly0.3http://127.0.0.1:8000/products/4562016-06-28monthly0.3http://127.0.0.1:8000/products/4572016-06-28monthly0.3http://127.0.0.1:8000/products/4582016-06-28monthly0.3http://127.0.0.1:8000/products/4592016-06-28monthly0.3http://127.0.0.1:8000/products/4602016-06-28monthly0.3http://127.0.0.1:8000/products/4612016-06-28monthly0.3http://127.0.0.1:8000/products/4622016-06-28monthly0.3http://127.0.0.1:8000/products/4632016-06-28monthly0.3http://127.0.0.1:8000/products/4642016-06-28monthly0.3http://127.0.0.1:8000/products/4652016-06-28monthly0.3http://127.0.0.1:8000/products/4662016-06-28monthly0.3http://127.0.0.1:8000/products/4672016-06-28monthly0.3http://127.0.0.1:8000/products/4682016-06-28monthly0.3http://127.0.0.1:8000/products/4692016-06-28monthly0.3http://127.0.0.1:8000/products/4702016-06-28monthly0.3http://127.0.0.1:8000/products/4712016-06-28monthly0.3http://127.0.0.1:8000/products/4722016-06-28monthly0.3http://127.0.0.1:8000/products/4732016-06-28monthly0.3http://127.0.0.1:8000/products/4742016-06-28monthly0.3http://127.0.0.1:8000/products/4752016-06-28monthly0.3http://127.0.0.1:8000/products/4762016-06-28monthly0.3http://127.0.0.1:8000/products/4772016-06-28monthly0.3http://127.0.0.1:8000/products/4782016-06-28monthly0.3http://127.0.0.1:8000/products/4792016-06-28monthly0.3http://127.0.0.1:8000/products/4802016-06-28monthly0.3http://127.0.0.1:8000/products/4812016-06-28monthly0.3http://127.0.0.1:8000/products/4822016-06-28monthly0.3http://127.0.0.1:8000/products/4832016-06-28monthly0.3http://127.0.0.1:8000/products/4842016-06-28monthly0.3http://127.0.0.1:8000/products/4852016-06-28monthly0.3http://127.0.0.1:8000/products/4862016-06-28monthly0.3http://127.0.0.1:8000/products/4872016-06-28monthly0.3http://127.0.0.1:8000/products/4882016-06-28monthly0.3http://127.0.0.1:8000/products/4892016-06-28monthly0.3http://127.0.0.1:8000/products/4902016-06-28monthly0.3http://127.0.0.1:8000/products/4912016-06-28monthly0.3http://127.0.0.1:8000/products/4922016-06-28monthly0.3http://127.0.0.1:8000/products/4932016-06-28monthly0.3http://127.0.0.1:8000/products/4942016-06-28monthly0.3http://127.0.0.1:8000/products/4952016-06-28monthly0.3http://127.0.0.1:8000/products/4962016-06-28monthly0.3http://127.0.0.1:8000/products/4972016-06-28monthly0.3http://127.0.0.1:8000/products/4982016-06-28monthly0.3http://127.0.0.1:8000/products/4992016-06-28monthly0.3http://127.0.0.1:8000/products/5002016-06-28monthly0.3http://127.0.0.1:8000/products/5012016-06-28monthly0.3http://127.0.0.1:8000/products/5022016-06-28monthly0.3http://127.0.0.1:8000/products/5032016-06-28monthly0.3http://127.0.0.1:8000/products/5042016-06-28monthly0.3http://127.0.0.1:8000/products/5052016-06-28monthly0.3http://127.0.0.1:8000/products/5062016-06-28monthly0.3http://127.0.0.1:8000/products/5072016-06-28monthly0.3http://127.0.0.1:8000/products/5082016-06-28monthly0.3http://127.0.0.1:8000/products/5092016-06-28monthly0.3http://127.0.0.1:8000/products/5102016-06-28monthly0.3http://127.0.0.1:8000/products/5112016-06-28monthly0.3http://127.0.0.1:8000/products/5122016-06-28monthly0.3http://127.0.0.1:8000/products/5132016-06-28monthly0.3http://127.0.0.1:8000/products/5142016-06-28monthly0.3http://127.0.0.1:8000/products/5152016-06-28monthly0.3http://127.0.0.1:8000/products/5162016-06-28monthly0.3http://127.0.0.1:8000/products/5172016-06-28monthly0.3http://127.0.0.1:8000/products/5182016-06-28monthly0.3http://127.0.0.1:8000/products/5192016-06-28monthly0.3http://127.0.0.1:8000/products/5202016-06-28monthly0.3http://127.0.0.1:8000/products/5212016-06-28monthly0.3http://127.0.0.1:8000/products/5222016-06-28monthly0.3http://127.0.0.1:8000/products/5232016-06-28monthly0.3http://127.0.0.1:8000/products/5242016-06-28monthly0.3http://127.0.0.1:8000/products/5252016-06-28monthly0.3http://127.0.0.1:8000/products/5262016-06-28monthly0.3http://127.0.0.1:8000/products/5272016-06-28monthly0.3http://127.0.0.1:8000/products/5282016-06-28monthly0.3http://127.0.0.1:8000/products/5292016-06-28monthly0.3http://127.0.0.1:8000/products/5302016-06-28monthly0.3http://127.0.0.1:8000/products/5312016-06-28monthly0.3http://127.0.0.1:8000/products/5322016-06-28monthly0.3http://127.0.0.1:8000/products/5332016-06-28monthly0.3http://127.0.0.1:8000/products/5342016-06-28monthly0.3http://127.0.0.1:8000/products/5352016-06-28monthly0.3http://127.0.0.1:8000/products/5362016-06-28monthly0.3http://127.0.0.1:8000/products/5372016-06-28monthly0.3http://127.0.0.1:8000/products/5382016-06-28monthly0.3http://127.0.0.1:8000/products/5392016-06-28monthly0.3http://127.0.0.1:8000/products/5402016-06-28monthly0.3http://127.0.0.1:8000/products/5412016-06-28monthly0.3http://127.0.0.1:8000/products/5422016-06-28monthly0.3http://127.0.0.1:8000/products/5432016-06-28monthly0.3http://127.0.0.1:8000/products/5442016-06-28monthly0.3http://127.0.0.1:8000/products/5452016-06-28monthly0.3http://127.0.0.1:8000/products/5462016-06-28monthly0.3http://127.0.0.1:8000/products/5472016-06-28monthly0.3http://127.0.0.1:8000/products/5482016-06-28monthly0.3http://127.0.0.1:8000/products/5492016-06-28monthly0.3http://127.0.0.1:8000/products/5502016-06-28monthly0.3http://127.0.0.1:8000/products/5512016-06-28monthly0.3http://127.0.0.1:8000/products/5522016-06-28monthly0.3http://127.0.0.1:8000/products/5532016-06-28monthly0.3http://127.0.0.1:8000/products/5542016-06-28monthly0.3http://127.0.0.1:8000/products/5552016-06-28monthly0.3http://127.0.0.1:8000/products/5562016-06-28monthly0.3http://127.0.0.1:8000/products/5572016-06-28monthly0.3http://127.0.0.1:8000/products/5582016-06-28monthly0.3http://127.0.0.1:8000/products/5592016-06-28monthly0.3http://127.0.0.1:8000/products/5602016-06-28monthly0.3http://127.0.0.1:8000/products/5612016-06-28monthly0.3http://127.0.0.1:8000/products/5622016-06-28monthly0.3http://127.0.0.1:8000/products/5632016-06-28monthly0.3http://127.0.0.1:8000/products/5642016-06-28monthly0.3http://127.0.0.1:8000/products/5652016-06-28monthly0.3http://127.0.0.1:8000/products/5662016-06-28monthly0.3http://127.0.0.1:8000/products/5672016-06-28monthly0.3http://127.0.0.1:8000/products/5682016-06-28monthly0.3http://127.0.0.1:8000/products/5692016-06-28monthly0.3http://127.0.0.1:8000/products/5702016-06-28monthly0.3http://127.0.0.1:8000/products/5712016-06-28monthly0.3http://127.0.0.1:8000/products/5722016-06-28monthly0.3http://127.0.0.1:8000/products/5732016-06-28monthly0.3http://127.0.0.1:8000/products/5742016-06-28monthly0.3http://127.0.0.1:8000/products/5752016-06-28monthly0.3http://127.0.0.1:8000/products/5762016-06-28monthly0.3http://127.0.0.1:8000/products/5772016-06-28monthly0.3http://127.0.0.1:8000/products/5782016-06-28monthly0.3http://127.0.0.1:8000/products/5792016-06-28monthly0.3http://127.0.0.1:8000/products/5802016-06-28monthly0.3http://127.0.0.1:8000/products/5812016-06-28monthly0.3http://127.0.0.1:8000/products/5822016-06-28monthly0.3http://127.0.0.1:8000/products/5832016-06-28monthly0.3http://127.0.0.1:8000/products/5842016-06-28monthly0.3http://127.0.0.1:8000/products/5852016-06-28monthly0.3http://127.0.0.1:8000/products/5862016-06-28monthly0.3http://127.0.0.1:8000/products/5872016-06-28monthly0.3http://127.0.0.1:8000/products/5882016-06-28monthly0.3http://127.0.0.1:8000/products/5892016-06-28monthly0.3http://127.0.0.1:8000/products/5902016-06-28monthly0.3http://127.0.0.1:8000/products/5912016-06-28monthly0.3http://127.0.0.1:8000/products/5922016-06-28monthly0.3http://127.0.0.1:8000/products/5932016-06-28monthly0.3http://127.0.0.1:8000/products/5942016-06-28monthly0.3http://127.0.0.1:8000/products/5952016-06-28monthly0.3http://127.0.0.1:8000/products/5962016-06-28monthly0.3http://127.0.0.1:8000/products/5972016-06-28monthly0.3http://127.0.0.1:8000/products/5982016-06-28monthly0.3http://127.0.0.1:8000/products/5992016-06-28monthly0.3http://127.0.0.1:8000/products/6002016-06-28monthly0.3http://127.0.0.1:8000/products/6012016-06-28monthly0.3http://127.0.0.1:8000/products/6022016-06-28monthly0.3http://127.0.0.1:8000/products/6032016-06-28monthly0.3http://127.0.0.1:8000/products/6042016-06-28monthly0.3http://127.0.0.1:8000/products/6052016-06-28monthly0.3http://127.0.0.1:8000/products/6062016-06-28monthly0.3http://127.0.0.1:8000/products/6072016-06-28monthly0.3http://127.0.0.1:8000/products/6082016-06-28monthly0.3http://127.0.0.1:8000/products/6092016-06-28monthly0.3http://127.0.0.1:8000/products/6102016-06-28monthly0.3http://127.0.0.1:8000/products/6112016-06-28monthly0.3http://127.0.0.1:8000/products/6122016-06-28monthly0.3http://127.0.0.1:8000/products/6132016-06-28monthly0.3http://127.0.0.1:8000/products/6142016-06-28monthly0.3http://127.0.0.1:8000/products/6152016-06-28monthly0.3http://127.0.0.1:8000/products/6162016-06-28monthly0.3http://127.0.0.1:8000/products/6172016-06-28monthly0.3http://127.0.0.1:8000/products/6182016-06-28monthly0.3http://127.0.0.1:8000/products/6192016-06-28monthly0.3http://127.0.0.1:8000/products/6202016-06-28monthly0.3http://127.0.0.1:8000/products/6212016-06-28monthly0.3http://127.0.0.1:8000/products/6222016-06-28monthly0.3http://127.0.0.1:8000/products/6232016-06-28monthly0.3http://127.0.0.1:8000/products/6242016-06-28monthly0.3http://127.0.0.1:8000/products/6252016-06-28monthly0.3http://127.0.0.1:8000/products/6262016-06-28monthly0.3http://127.0.0.1:8000/products/6272016-06-28monthly0.3http://127.0.0.1:8000/products/6282016-06-28monthly0.3http://127.0.0.1:8000/products/6292016-06-28monthly0.3http://127.0.0.1:8000/products/6302016-06-28monthly0.3http://127.0.0.1:8000/products/6312016-06-28monthly0.3http://127.0.0.1:8000/products/6322016-06-28monthly0.3http://127.0.0.1:8000/products/6332016-06-28monthly0.3http://127.0.0.1:8000/products/6342016-06-28monthly0.3http://127.0.0.1:8000/products/6352016-06-28monthly0.3http://127.0.0.1:8000/products/6362016-06-28monthly0.3http://127.0.0.1:8000/products/6372016-06-28monthly0.3http://127.0.0.1:8000/products/6382016-06-28monthly0.3http://127.0.0.1:8000/products/6392016-06-28monthly0.3http://127.0.0.1:8000/products/6402016-06-28monthly0.3http://127.0.0.1:8000/products/6412016-06-28monthly0.3http://127.0.0.1:8000/products/6422016-06-28monthly0.3http://127.0.0.1:8000/products/6432016-06-28monthly0.3http://127.0.0.1:8000/products/6442016-06-28monthly0.3http://127.0.0.1:8000/products/6452016-06-28monthly0.3http://127.0.0.1:8000/products/6462016-06-28monthly0.3http://127.0.0.1:8000/products/6472016-06-28monthly0.3http://127.0.0.1:8000/products/6482016-06-28monthly0.3http://127.0.0.1:8000/products/6492016-06-28monthly0.3http://127.0.0.1:8000/products/6502016-06-28monthly0.3http://127.0.0.1:8000/products/6512016-06-28monthly0.3http://127.0.0.1:8000/products/6522016-06-28monthly0.3http://127.0.0.1:8000/products/6532016-06-28monthly0.3http://127.0.0.1:8000/products/6542016-06-28monthly0.3http://127.0.0.1:8000/products/6552016-06-28monthly0.3http://127.0.0.1:8000/products/6562016-06-28monthly0.3http://127.0.0.1:8000/products/6572016-06-28monthly0.3http://127.0.0.1:8000/products/6582016-06-28monthly0.3http://127.0.0.1:8000/products/6592016-06-28monthly0.3http://127.0.0.1:8000/products/6602016-06-28monthly0.3http://127.0.0.1:8000/products/6612016-06-28monthly0.3http://127.0.0.1:8000/products/6622016-06-28monthly0.3http://127.0.0.1:8000/products/6632016-06-28monthly0.3http://127.0.0.1:8000/products/6642016-06-28monthly0.3http://127.0.0.1:8000/products/6652016-06-28monthly0.3http://127.0.0.1:8000/products/6662016-06-28monthly0.3http://127.0.0.1:8000/products/6672016-06-28monthly0.3http://127.0.0.1:8000/products/6682016-06-28monthly0.3http://127.0.0.1:8000/products/6692016-06-28monthly0.3http://127.0.0.1:8000/products/6702016-06-28monthly0.3http://127.0.0.1:8000/products/6712016-06-28monthly0.3http://127.0.0.1:8000/products/6722016-06-28monthly0.3http://127.0.0.1:8000/products/6732016-06-28monthly0.3http://127.0.0.1:8000/products/6742016-06-28monthly0.3http://127.0.0.1:8000/products/6752016-06-28monthly0.3http://127.0.0.1:8000/products/6762016-06-28monthly0.3http://127.0.0.1:8000/products/6772016-06-28monthly0.3http://127.0.0.1:8000/products/6782016-06-28monthly0.3http://127.0.0.1:8000/products/6792016-06-28monthly0.3http://127.0.0.1:8000/products/6802016-06-28monthly0.3http://127.0.0.1:8000/products/6812016-06-28monthly0.3http://127.0.0.1:8000/products/6822016-06-28monthly0.3http://127.0.0.1:8000/products/6832016-06-28monthly0.3http://127.0.0.1:8000/products/6842016-06-28monthly0.3http://127.0.0.1:8000/products/6852016-06-28monthly0.3http://127.0.0.1:8000/products/6862016-06-28monthly0.3http://127.0.0.1:8000/products/6872016-06-28monthly0.3http://127.0.0.1:8000/products/6882016-06-28monthly0.3http://127.0.0.1:8000/products/6892016-06-28monthly0.3http://127.0.0.1:8000/products/6902016-06-28monthly0.3http://127.0.0.1:8000/products/6912016-06-28monthly0.3http://127.0.0.1:8000/products/6922016-06-28monthly0.3http://127.0.0.1:8000/products/6932016-06-28monthly0.3http://127.0.0.1:8000/products/6942016-06-28monthly0.3http://127.0.0.1:8000/products/6952016-06-28monthly0.3http://127.0.0.1:8000/products/6962016-06-28monthly0.3http://127.0.0.1:8000/products/6972016-06-28monthly0.3http://127.0.0.1:8000/products/6982016-06-28monthly0.3http://127.0.0.1:8000/products/6992016-06-28monthly0.3http://127.0.0.1:8000/products/7002016-06-28monthly0.3http://127.0.0.1:8000/products/7012016-06-28monthly0.3http://127.0.0.1:8000/products/7022016-06-28monthly0.3http://127.0.0.1:8000/products/7032016-06-28monthly0.3http://127.0.0.1:8000/products/7042016-06-28monthly0.3http://127.0.0.1:8000/products/7052016-06-28monthly0.3http://127.0.0.1:8000/products/7062016-06-28monthly0.3http://127.0.0.1:8000/products/7072016-06-28monthly0.3http://127.0.0.1:8000/products/7082016-06-28monthly0.3http://127.0.0.1:8000/products/7092016-06-28monthly0.3http://127.0.0.1:8000/products/7102016-06-28monthly0.3http://127.0.0.1:8000/products/7112016-06-28monthly0.3http://127.0.0.1:8000/products/7122016-06-28monthly0.3http://127.0.0.1:8000/products/7132016-06-28monthly0.3http://127.0.0.1:8000/products/7142016-06-28monthly0.3http://127.0.0.1:8000/products/7152016-06-28monthly0.3http://127.0.0.1:8000/products/7162016-06-28monthly0.3http://127.0.0.1:8000/products/7172016-06-28monthly0.3http://127.0.0.1:8000/products/7182016-06-28monthly0.3http://127.0.0.1:8000/products/7192016-06-28monthly0.3http://127.0.0.1:8000/products/7202016-06-28monthly0.3http://127.0.0.1:8000/products/7212016-06-28monthly0.3http://127.0.0.1:8000/products/7222016-06-28monthly0.3http://127.0.0.1:8000/products/7232016-06-28monthly0.3http://127.0.0.1:8000/products/7242016-06-28monthly0.3http://127.0.0.1:8000/products/7252016-06-28monthly0.3http://127.0.0.1:8000/products/7262016-06-28monthly0.3http://127.0.0.1:8000/products/7272016-06-28monthly0.3http://127.0.0.1:8000/products/7282016-06-28monthly0.3http://127.0.0.1:8000/products/7292016-06-28monthly0.3http://127.0.0.1:8000/products/7302016-06-28monthly0.3http://127.0.0.1:8000/products/7312016-06-28monthly0.3http://127.0.0.1:8000/products/7322016-06-28monthly0.3http://127.0.0.1:8000/products/7332016-06-28monthly0.3http://127.0.0.1:8000/products/7342016-06-28monthly0.3http://127.0.0.1:8000/products/7352016-06-28monthly0.3http://127.0.0.1:8000/products/7362016-06-28monthly0.3http://127.0.0.1:8000/products/7372016-06-28monthly0.3http://127.0.0.1:8000/products/7382016-06-28monthly0.3http://127.0.0.1:8000/products/7392016-06-28monthly0.3http://127.0.0.1:8000/products/7402016-06-28monthly0.3http://127.0.0.1:8000/products/7412016-06-28monthly0.3http://127.0.0.1:8000/products/7422016-06-28monthly0.3http://127.0.0.1:8000/products/7432016-06-28monthly0.3http://127.0.0.1:8000/products/7442016-06-28monthly0.3http://127.0.0.1:8000/products/7452016-06-28monthly0.3http://127.0.0.1:8000/products/7462016-06-28monthly0.3http://127.0.0.1:8000/products/7472016-06-28monthly0.3http://127.0.0.1:8000/products/7482016-06-28monthly0.3http://127.0.0.1:8000/products/7492016-06-28monthly0.3http://127.0.0.1:8000/products/7502016-06-28monthly0.3http://127.0.0.1:8000/products/7512016-06-28monthly0.3http://127.0.0.1:8000/products/7522016-06-28monthly0.3http://127.0.0.1:8000/products/7532016-06-28monthly0.3http://127.0.0.1:8000/products/7542016-06-28monthly0.3http://127.0.0.1:8000/products/7552016-06-28monthly0.3http://127.0.0.1:8000/products/7562016-06-28monthly0.3http://127.0.0.1:8000/products/7572016-06-28monthly0.3http://127.0.0.1:8000/products/7582016-06-28monthly0.3http://127.0.0.1:8000/products/7592016-06-28monthly0.3http://127.0.0.1:8000/products/7602016-06-28monthly0.3http://127.0.0.1:8000/products/7612016-06-28monthly0.3http://127.0.0.1:8000/products/7622016-06-28monthly0.3http://127.0.0.1:8000/products/7632016-06-28monthly0.3http://127.0.0.1:8000/products/7642016-06-28monthly0.3http://127.0.0.1:8000/products/7652016-06-28monthly0.3http://127.0.0.1:8000/products/7662016-06-28monthly0.3http://127.0.0.1:8000/products/7672016-06-28monthly0.3http://127.0.0.1:8000/products/7682016-06-28monthly0.3http://127.0.0.1:8000/products/7692016-06-28monthly0.3http://127.0.0.1:8000/products/7702016-06-28monthly0.3http://127.0.0.1:8000/products/7712016-06-28monthly0.3http://127.0.0.1:8000/products/7722016-06-28monthly0.3http://127.0.0.1:8000/products/7732016-06-28monthly0.3http://127.0.0.1:8000/products/7742016-06-28monthly0.3http://127.0.0.1:8000/products/7752016-06-28monthly0.3http://127.0.0.1:8000/products/7762016-06-28monthly0.3http://127.0.0.1:8000/products/7772016-06-28monthly0.3http://127.0.0.1:8000/products/7782016-06-28monthly0.3http://127.0.0.1:8000/products/7792016-06-28monthly0.3http://127.0.0.1:8000/products/7802016-06-28monthly0.3http://127.0.0.1:8000/products/7812016-06-28monthly0.3http://127.0.0.1:8000/products/7822016-06-28monthly0.3http://127.0.0.1:8000/products/7832016-06-28monthly0.3http://127.0.0.1:8000/products/7842016-06-28monthly0.3http://127.0.0.1:8000/products/7852016-06-28monthly0.3http://127.0.0.1:8000/products/7862016-06-28monthly0.3http://127.0.0.1:8000/products/7872016-06-28monthly0.3http://127.0.0.1:8000/products/7882016-06-28monthly0.3http://127.0.0.1:8000/products/7892016-06-28monthly0.3http://127.0.0.1:8000/products/7902016-06-28monthly0.3http://127.0.0.1:8000/products/7912016-06-28monthly0.3http://127.0.0.1:8000/products/7922016-06-28monthly0.3http://127.0.0.1:8000/products/7932016-06-28monthly0.3http://127.0.0.1:8000/products/7942016-06-28monthly0.3http://127.0.0.1:8000/products/7952016-06-28monthly0.3http://127.0.0.1:8000/products/7962016-06-28monthly0.3http://127.0.0.1:8000/products/7972016-06-28monthly0.3http://127.0.0.1:8000/products/7982016-06-28monthly0.3http://127.0.0.1:8000/products/7992016-06-28monthly0.3http://127.0.0.1:8000/products/8002016-06-28monthly0.3http://127.0.0.1:8000/products/8012016-06-28monthly0.3http://127.0.0.1:8000/products/8022016-06-28monthly0.3http://127.0.0.1:8000/products/8032016-06-28monthly0.3http://127.0.0.1:8000/products/8042016-06-28monthly0.3http://127.0.0.1:8000/products/8052016-06-28monthly0.3http://127.0.0.1:8000/products/8062016-06-28monthly0.3http://127.0.0.1:8000/products/8072016-06-28monthly0.3http://127.0.0.1:8000/products/8082016-06-28monthly0.3http://127.0.0.1:8000/products/8092016-06-28monthly0.3http://127.0.0.1:8000/products/8102016-06-28monthly0.3http://127.0.0.1:8000/products/8112016-06-28monthly0.3http://127.0.0.1:8000/products/8122016-06-28monthly0.3http://127.0.0.1:8000/products/8132016-06-28monthly0.3http://127.0.0.1:8000/products/8142016-06-28monthly0.3http://127.0.0.1:8000/products/8152016-06-28monthly0.3http://127.0.0.1:8000/products/8162016-06-28monthly0.3http://127.0.0.1:8000/products/8172016-06-28monthly0.3http://127.0.0.1:8000/products/8182016-06-28monthly0.3http://127.0.0.1:8000/products/8192016-06-28monthly0.3http://127.0.0.1:8000/products/8202016-06-28monthly0.3http://127.0.0.1:8000/products/8212016-06-28monthly0.3http://127.0.0.1:8000/products/8222016-06-28monthly0.3http://127.0.0.1:8000/products/8232016-06-28monthly0.3http://127.0.0.1:8000/products/8242016-06-28monthly0.3http://127.0.0.1:8000/products/8252016-06-28monthly0.3http://127.0.0.1:8000/products/8262016-06-28monthly0.3http://127.0.0.1:8000/products/8272016-06-28monthly0.3http://127.0.0.1:8000/products/8282016-06-28monthly0.3http://127.0.0.1:8000/products/8292016-06-28monthly0.3http://127.0.0.1:8000/products/8302016-06-28monthly0.3http://127.0.0.1:8000/products/8312016-06-28monthly0.3http://127.0.0.1:8000/products/8322016-06-28monthly0.3http://127.0.0.1:8000/products/8332016-06-28monthly0.3http://127.0.0.1:8000/products/8342016-06-28monthly0.3http://127.0.0.1:8000/products/8352016-06-28monthly0.3http://127.0.0.1:8000/products/8362016-06-28monthly0.3http://127.0.0.1:8000/products/8372016-06-28monthly0.3http://127.0.0.1:8000/products/8382016-06-28monthly0.3http://127.0.0.1:8000/products/8392016-06-28monthly0.3http://127.0.0.1:8000/products/8402016-06-28monthly0.3http://127.0.0.1:8000/products/8412016-06-28monthly0.3http://127.0.0.1:8000/products/8422016-06-28monthly0.3http://127.0.0.1:8000/products/8432016-06-28monthly0.3http://127.0.0.1:8000/products/8442016-06-28monthly0.3http://127.0.0.1:8000/products/8452016-06-28monthly0.3http://127.0.0.1:8000/products/8462016-06-28monthly0.3http://127.0.0.1:8000/products/8472016-06-28monthly0.3http://127.0.0.1:8000/products/8482016-06-28monthly0.3http://127.0.0.1:8000/products/8492016-06-28monthly0.3http://127.0.0.1:8000/products/8502016-06-28monthly0.3http://127.0.0.1:8000/products/8512016-06-28monthly0.3http://127.0.0.1:8000/products/8522016-06-28monthly0.3http://127.0.0.1:8000/products/8532016-06-28monthly0.3http://127.0.0.1:8000/products/8542016-06-28monthly0.3http://127.0.0.1:8000/products/8552016-06-28monthly0.3http://127.0.0.1:8000/products/8562016-06-28monthly0.3http://127.0.0.1:8000/products/8572016-06-28monthly0.3http://127.0.0.1:8000/products/8582016-06-28monthly0.3http://127.0.0.1:8000/products/8592016-06-28monthly0.3http://127.0.0.1:8000/products/8602016-06-28monthly0.3http://127.0.0.1:8000/products/8612016-06-28monthly0.3http://127.0.0.1:8000/products/8622016-06-28monthly0.3http://127.0.0.1:8000/products/8632016-06-28monthly0.3http://127.0.0.1:8000/products/8642016-06-28monthly0.3http://127.0.0.1:8000/products/8652016-06-28monthly0.3http://127.0.0.1:8000/products/8662016-06-28monthly0.3http://127.0.0.1:8000/products/8672016-06-28monthly0.3http://127.0.0.1:8000/products/8682016-06-28monthly0.3http://127.0.0.1:8000/products/8692016-06-28monthly0.3http://127.0.0.1:8000/products/8702016-06-28monthly0.3http://127.0.0.1:8000/products/8712016-06-28monthly0.3http://127.0.0.1:8000/products/8722016-06-28monthly0.3http://127.0.0.1:8000/products/8732016-06-28monthly0.3http://127.0.0.1:8000/products/8742016-06-28monthly0.3http://127.0.0.1:8000/products/8752016-06-28monthly0.3http://127.0.0.1:8000/products/8762016-06-28monthly0.3http://127.0.0.1:8000/products/8772016-06-28monthly0.3http://127.0.0.1:8000/products/8782016-06-28monthly0.3http://127.0.0.1:8000/products/8792016-06-28monthly0.3http://127.0.0.1:8000/products/8802016-06-28monthly0.3http://127.0.0.1:8000/products/8812016-06-28monthly0.3http://127.0.0.1:8000/products/8822016-06-28monthly0.3http://127.0.0.1:8000/products/8832016-06-28monthly0.3http://127.0.0.1:8000/products/8842016-06-28monthly0.3http://127.0.0.1:8000/products/8852016-06-28monthly0.3http://127.0.0.1:8000/products/8862016-06-28monthly0.3http://127.0.0.1:8000/products/8872016-06-28monthly0.3http://127.0.0.1:8000/products/8882016-06-28monthly0.3http://127.0.0.1:8000/products/8892016-06-28monthly0.3http://127.0.0.1:8000/products/8902016-06-28monthly0.3http://127.0.0.1:8000/products/8912016-06-28monthly0.3http://127.0.0.1:8000/products/8922016-06-28monthly0.3http://127.0.0.1:8000/products/8932016-06-28monthly0.3http://127.0.0.1:8000/products/8942016-06-28monthly0.3http://127.0.0.1:8000/products/8952016-06-28monthly0.3http://127.0.0.1:8000/products/8962016-06-28monthly0.3http://127.0.0.1:8000/products/8972016-06-28monthly0.3http://127.0.0.1:8000/products/8982016-06-28monthly0.3http://127.0.0.1:8000/products/8992016-06-28monthly0.3http://127.0.0.1:8000/products/9002016-06-28monthly0.3http://127.0.0.1:8000/products/9012016-06-28monthly0.3http://127.0.0.1:8000/products/9022016-06-28monthly0.3http://127.0.0.1:8000/products/9032016-06-28monthly0.3http://127.0.0.1:8000/products/9042016-06-28monthly0.3http://127.0.0.1:8000/products/9052016-06-28monthly0.3http://127.0.0.1:8000/products/9062016-06-28monthly0.3http://127.0.0.1:8000/products/9072016-06-28monthly0.3http://127.0.0.1:8000/products/9082016-06-28monthly0.3http://127.0.0.1:8000/products/9092016-06-28monthly0.3http://127.0.0.1:8000/products/9102016-06-28monthly0.3http://127.0.0.1:8000/products/9112016-06-28monthly0.3http://127.0.0.1:8000/products/9122016-06-28monthly0.3http://127.0.0.1:8000/products/9132016-06-28monthly0.3http://127.0.0.1:8000/products/9142016-06-28monthly0.3http://127.0.0.1:8000/products/9152016-06-28monthly0.3http://127.0.0.1:8000/products/9162016-06-28monthly0.3http://127.0.0.1:8000/products/9172016-06-28monthly0.3http://127.0.0.1:8000/products/9182016-06-28monthly0.3http://127.0.0.1:8000/products/9192016-06-28monthly0.3http://127.0.0.1:8000/products/9202016-06-28monthly0.3http://127.0.0.1:8000/products/9212016-06-28monthly0.3http://127.0.0.1:8000/products/9222016-06-28monthly0.3http://127.0.0.1:8000/products/9232016-06-28monthly0.3http://127.0.0.1:8000/products/9242016-06-28monthly0.3http://127.0.0.1:8000/products/9252016-06-28monthly0.3http://127.0.0.1:8000/products/9262016-06-28monthly0.3http://127.0.0.1:8000/products/9272016-06-28monthly0.3http://127.0.0.1:8000/products/9282016-06-28monthly0.3http://127.0.0.1:8000/products/9292016-06-28monthly0.3http://127.0.0.1:8000/products/9302016-06-28monthly0.3http://127.0.0.1:8000/products/9312016-06-28monthly0.3http://127.0.0.1:8000/products/9322016-06-28monthly0.3http://127.0.0.1:8000/products/9332016-06-28monthly0.3http://127.0.0.1:8000/products/9342016-06-28monthly0.3http://127.0.0.1:8000/products/9352016-06-28monthly0.3http://127.0.0.1:8000/products/9362016-06-28monthly0.3http://127.0.0.1:8000/products/9372016-06-28monthly0.3http://127.0.0.1:8000/products/9382016-06-28monthly0.3http://127.0.0.1:8000/products/9392016-06-28monthly0.3http://127.0.0.1:8000/products/9402016-06-28monthly0.3http://127.0.0.1:8000/products/9412016-06-28monthly0.3http://127.0.0.1:8000/products/9422016-06-28monthly0.3http://127.0.0.1:8000/products/9432016-06-28monthly0.3http://127.0.0.1:8000/products/9442016-06-28monthly0.3http://127.0.0.1:8000/products/9452016-06-28monthly0.3http://127.0.0.1:8000/products/9462016-06-28monthly0.3http://127.0.0.1:8000/products/9472016-06-28monthly0.3http://127.0.0.1:8000/products/9482016-06-28monthly0.3http://127.0.0.1:8000/products/9492016-06-28monthly0.3http://127.0.0.1:8000/products/9502016-06-28monthly0.3http://127.0.0.1:8000/products/9512016-06-28monthly0.3http://127.0.0.1:8000/products/9522016-06-28monthly0.3http://127.0.0.1:8000/products/9532016-06-28monthly0.3http://127.0.0.1:8000/products/9542016-06-28monthly0.3http://127.0.0.1:8000/products/9552016-06-28monthly0.3http://127.0.0.1:8000/products/9562016-06-28monthly0.3http://127.0.0.1:8000/products/9572016-06-28monthly0.3http://127.0.0.1:8000/products/9582016-06-28monthly0.3http://127.0.0.1:8000/products/9592016-06-28monthly0.3http://127.0.0.1:8000/products/9602016-06-28monthly0.3http://127.0.0.1:8000/products/9612016-06-28monthly0.3http://127.0.0.1:8000/products/9622016-06-28monthly0.3http://127.0.0.1:8000/products/9632016-06-28monthly0.3http://127.0.0.1:8000/products/9642016-06-28monthly0.3http://127.0.0.1:8000/products/9652016-06-28monthly0.3http://127.0.0.1:8000/products/9662016-06-28monthly0.3http://127.0.0.1:8000/products/9672016-06-28monthly0.3http://127.0.0.1:8000/products/9682016-06-28monthly0.3http://127.0.0.1:8000/products/9692016-06-28monthly0.3http://127.0.0.1:8000/products/9702016-06-28monthly0.3http://127.0.0.1:8000/products/9712016-06-28monthly0.3http://127.0.0.1:8000/products/9722016-06-28monthly0.3http://127.0.0.1:8000/products/9732016-06-28monthly0.3http://127.0.0.1:8000/products/9742016-06-28monthly0.3http://127.0.0.1:8000/products/9752016-06-28monthly0.3http://127.0.0.1:8000/products/9762016-06-28monthly0.3http://127.0.0.1:8000/products/9772016-06-28monthly0.3http://127.0.0.1:8000/products/9782016-06-28monthly0.3http://127.0.0.1:8000/products/9792016-06-28monthly0.3http://127.0.0.1:8000/products/9802016-06-28monthly0.3http://127.0.0.1:8000/products/9812016-06-28monthly0.3http://127.0.0.1:8000/products/9822016-06-28monthly0.3http://127.0.0.1:8000/products/9832016-06-28monthly0.3http://127.0.0.1:8000/products/9842016-06-28monthly0.3http://127.0.0.1:8000/products/9852016-06-28monthly0.3http://127.0.0.1:8000/products/9862016-06-28monthly0.3http://127.0.0.1:8000/products/9872016-06-28monthly0.3http://127.0.0.1:8000/products/9882016-06-28monthly0.3http://127.0.0.1:8000/products/9892016-06-28monthly0.3http://127.0.0.1:8000/products/9902016-06-28monthly0.3http://127.0.0.1:8000/products/9912016-06-28monthly0.3http://127.0.0.1:8000/products/9922016-06-28monthly0.3http://127.0.0.1:8000/products/9932016-06-28monthly0.3http://127.0.0.1:8000/products/9942016-06-28monthly0.3http://127.0.0.1:8000/products/9952016-06-28monthly0.3http://127.0.0.1:8000/products/9962016-06-28monthly0.3http://127.0.0.1:8000/products/9972016-06-28monthly0.3http://127.0.0.1:8000/products/9982016-06-28monthly0.3http://127.0.0.1:8000/products/9992016-06-28monthly0.3 \ No newline at end of file +http://127.0.0.1:8000/2019-06-22weekly1.0000http://127.0.0.1:8000/products/02019-06-22monthly0.3http://127.0.0.1:8000/products/12019-06-22monthly0.3http://127.0.0.1:8000/products/22019-06-22monthly0.3http://127.0.0.1:8000/products/32019-06-22monthly0.3http://127.0.0.1:8000/products/42019-06-22monthly0.3http://127.0.0.1:8000/products/52019-06-22monthly0.3http://127.0.0.1:8000/products/62019-06-22monthly0.3http://127.0.0.1:8000/products/72019-06-22monthly0.3http://127.0.0.1:8000/products/82019-06-22monthly0.3http://127.0.0.1:8000/products/92019-06-22monthly0.3http://127.0.0.1:8000/products/102019-06-22monthly0.3http://127.0.0.1:8000/products/112019-06-22monthly0.3http://127.0.0.1:8000/products/122019-06-22monthly0.3http://127.0.0.1:8000/products/132019-06-22monthly0.3http://127.0.0.1:8000/products/142019-06-22monthly0.3http://127.0.0.1:8000/products/152019-06-22monthly0.3http://127.0.0.1:8000/products/162019-06-22monthly0.3http://127.0.0.1:8000/products/172019-06-22monthly0.3http://127.0.0.1:8000/products/182019-06-22monthly0.3http://127.0.0.1:8000/products/192019-06-22monthly0.3http://127.0.0.1:8000/products/202019-06-22monthly0.3http://127.0.0.1:8000/products/212019-06-22monthly0.3http://127.0.0.1:8000/products/222019-06-22monthly0.3http://127.0.0.1:8000/products/232019-06-22monthly0.3http://127.0.0.1:8000/products/242019-06-22monthly0.3http://127.0.0.1:8000/products/252019-06-22monthly0.3http://127.0.0.1:8000/products/262019-06-22monthly0.3http://127.0.0.1:8000/products/272019-06-22monthly0.3http://127.0.0.1:8000/products/282019-06-22monthly0.3http://127.0.0.1:8000/products/292019-06-22monthly0.3http://127.0.0.1:8000/products/302019-06-22monthly0.3http://127.0.0.1:8000/products/312019-06-22monthly0.3http://127.0.0.1:8000/products/322019-06-22monthly0.3http://127.0.0.1:8000/products/332019-06-22monthly0.3http://127.0.0.1:8000/products/342019-06-22monthly0.3http://127.0.0.1:8000/products/352019-06-22monthly0.3http://127.0.0.1:8000/products/362019-06-22monthly0.3http://127.0.0.1:8000/products/372019-06-22monthly0.3http://127.0.0.1:8000/products/382019-06-22monthly0.3http://127.0.0.1:8000/products/392019-06-22monthly0.3http://127.0.0.1:8000/products/402019-06-22monthly0.3http://127.0.0.1:8000/products/412019-06-22monthly0.3http://127.0.0.1:8000/products/422019-06-22monthly0.3http://127.0.0.1:8000/products/432019-06-22monthly0.3http://127.0.0.1:8000/products/442019-06-22monthly0.3http://127.0.0.1:8000/products/452019-06-22monthly0.3http://127.0.0.1:8000/products/462019-06-22monthly0.3http://127.0.0.1:8000/products/472019-06-22monthly0.3http://127.0.0.1:8000/products/482019-06-22monthly0.3http://127.0.0.1:8000/products/492019-06-22monthly0.3http://127.0.0.1:8000/products/502019-06-22monthly0.3http://127.0.0.1:8000/products/512019-06-22monthly0.3http://127.0.0.1:8000/products/522019-06-22monthly0.3http://127.0.0.1:8000/products/532019-06-22monthly0.3http://127.0.0.1:8000/products/542019-06-22monthly0.3http://127.0.0.1:8000/products/552019-06-22monthly0.3http://127.0.0.1:8000/products/562019-06-22monthly0.3http://127.0.0.1:8000/products/572019-06-22monthly0.3http://127.0.0.1:8000/products/582019-06-22monthly0.3http://127.0.0.1:8000/products/592019-06-22monthly0.3http://127.0.0.1:8000/products/602019-06-22monthly0.3http://127.0.0.1:8000/products/612019-06-22monthly0.3http://127.0.0.1:8000/products/622019-06-22monthly0.3http://127.0.0.1:8000/products/632019-06-22monthly0.3http://127.0.0.1:8000/products/642019-06-22monthly0.3http://127.0.0.1:8000/products/652019-06-22monthly0.3http://127.0.0.1:8000/products/662019-06-22monthly0.3http://127.0.0.1:8000/products/672019-06-22monthly0.3http://127.0.0.1:8000/products/682019-06-22monthly0.3http://127.0.0.1:8000/products/692019-06-22monthly0.3http://127.0.0.1:8000/products/702019-06-22monthly0.3http://127.0.0.1:8000/products/712019-06-22monthly0.3http://127.0.0.1:8000/products/722019-06-22monthly0.3http://127.0.0.1:8000/products/732019-06-22monthly0.3http://127.0.0.1:8000/products/742019-06-22monthly0.3http://127.0.0.1:8000/products/752019-06-22monthly0.3http://127.0.0.1:8000/products/762019-06-22monthly0.3http://127.0.0.1:8000/products/772019-06-22monthly0.3http://127.0.0.1:8000/products/782019-06-22monthly0.3http://127.0.0.1:8000/products/792019-06-22monthly0.3http://127.0.0.1:8000/products/802019-06-22monthly0.3http://127.0.0.1:8000/products/812019-06-22monthly0.3http://127.0.0.1:8000/products/822019-06-22monthly0.3http://127.0.0.1:8000/products/832019-06-22monthly0.3http://127.0.0.1:8000/products/842019-06-22monthly0.3http://127.0.0.1:8000/products/852019-06-22monthly0.3http://127.0.0.1:8000/products/862019-06-22monthly0.3http://127.0.0.1:8000/products/872019-06-22monthly0.3http://127.0.0.1:8000/products/882019-06-22monthly0.3http://127.0.0.1:8000/products/892019-06-22monthly0.3http://127.0.0.1:8000/products/902019-06-22monthly0.3http://127.0.0.1:8000/products/912019-06-22monthly0.3http://127.0.0.1:8000/products/922019-06-22monthly0.3http://127.0.0.1:8000/products/932019-06-22monthly0.3http://127.0.0.1:8000/products/942019-06-22monthly0.3http://127.0.0.1:8000/products/952019-06-22monthly0.3http://127.0.0.1:8000/products/962019-06-22monthly0.3http://127.0.0.1:8000/products/972019-06-22monthly0.3http://127.0.0.1:8000/products/982019-06-22monthly0.3http://127.0.0.1:8000/products/992019-06-22monthly0.3http://127.0.0.1:8000/products/1002019-06-22monthly0.3http://127.0.0.1:8000/products/1012019-06-22monthly0.3http://127.0.0.1:8000/products/1022019-06-22monthly0.3http://127.0.0.1:8000/products/1032019-06-22monthly0.3http://127.0.0.1:8000/products/1042019-06-22monthly0.3http://127.0.0.1:8000/products/1052019-06-22monthly0.3http://127.0.0.1:8000/products/1062019-06-22monthly0.3http://127.0.0.1:8000/products/1072019-06-22monthly0.3http://127.0.0.1:8000/products/1082019-06-22monthly0.3http://127.0.0.1:8000/products/1092019-06-22monthly0.3http://127.0.0.1:8000/products/1102019-06-22monthly0.3http://127.0.0.1:8000/products/1112019-06-22monthly0.3http://127.0.0.1:8000/products/1122019-06-22monthly0.3http://127.0.0.1:8000/products/1132019-06-22monthly0.3http://127.0.0.1:8000/products/1142019-06-22monthly0.3http://127.0.0.1:8000/products/1152019-06-22monthly0.3http://127.0.0.1:8000/products/1162019-06-22monthly0.3http://127.0.0.1:8000/products/1172019-06-22monthly0.3http://127.0.0.1:8000/products/1182019-06-22monthly0.3http://127.0.0.1:8000/products/1192019-06-22monthly0.3http://127.0.0.1:8000/products/1202019-06-22monthly0.3http://127.0.0.1:8000/products/1212019-06-22monthly0.3http://127.0.0.1:8000/products/1222019-06-22monthly0.3http://127.0.0.1:8000/products/1232019-06-22monthly0.3http://127.0.0.1:8000/products/1242019-06-22monthly0.3http://127.0.0.1:8000/products/1252019-06-22monthly0.3http://127.0.0.1:8000/products/1262019-06-22monthly0.3http://127.0.0.1:8000/products/1272019-06-22monthly0.3http://127.0.0.1:8000/products/1282019-06-22monthly0.3http://127.0.0.1:8000/products/1292019-06-22monthly0.3http://127.0.0.1:8000/products/1302019-06-22monthly0.3http://127.0.0.1:8000/products/1312019-06-22monthly0.3http://127.0.0.1:8000/products/1322019-06-22monthly0.3http://127.0.0.1:8000/products/1332019-06-22monthly0.3http://127.0.0.1:8000/products/1342019-06-22monthly0.3http://127.0.0.1:8000/products/1352019-06-22monthly0.3http://127.0.0.1:8000/products/1362019-06-22monthly0.3http://127.0.0.1:8000/products/1372019-06-22monthly0.3http://127.0.0.1:8000/products/1382019-06-22monthly0.3http://127.0.0.1:8000/products/1392019-06-22monthly0.3http://127.0.0.1:8000/products/1402019-06-22monthly0.3http://127.0.0.1:8000/products/1412019-06-22monthly0.3http://127.0.0.1:8000/products/1422019-06-22monthly0.3http://127.0.0.1:8000/products/1432019-06-22monthly0.3http://127.0.0.1:8000/products/1442019-06-22monthly0.3http://127.0.0.1:8000/products/1452019-06-22monthly0.3http://127.0.0.1:8000/products/1462019-06-22monthly0.3http://127.0.0.1:8000/products/1472019-06-22monthly0.3http://127.0.0.1:8000/products/1482019-06-22monthly0.3http://127.0.0.1:8000/products/1492019-06-22monthly0.3http://127.0.0.1:8000/products/1502019-06-22monthly0.3http://127.0.0.1:8000/products/1512019-06-22monthly0.3http://127.0.0.1:8000/products/1522019-06-22monthly0.3http://127.0.0.1:8000/products/1532019-06-22monthly0.3http://127.0.0.1:8000/products/1542019-06-22monthly0.3http://127.0.0.1:8000/products/1552019-06-22monthly0.3http://127.0.0.1:8000/products/1562019-06-22monthly0.3http://127.0.0.1:8000/products/1572019-06-22monthly0.3http://127.0.0.1:8000/products/1582019-06-22monthly0.3http://127.0.0.1:8000/products/1592019-06-22monthly0.3http://127.0.0.1:8000/products/1602019-06-22monthly0.3http://127.0.0.1:8000/products/1612019-06-22monthly0.3http://127.0.0.1:8000/products/1622019-06-22monthly0.3http://127.0.0.1:8000/products/1632019-06-22monthly0.3http://127.0.0.1:8000/products/1642019-06-22monthly0.3http://127.0.0.1:8000/products/1652019-06-22monthly0.3http://127.0.0.1:8000/products/1662019-06-22monthly0.3http://127.0.0.1:8000/products/1672019-06-22monthly0.3http://127.0.0.1:8000/products/1682019-06-22monthly0.3http://127.0.0.1:8000/products/1692019-06-22monthly0.3http://127.0.0.1:8000/products/1702019-06-22monthly0.3http://127.0.0.1:8000/products/1712019-06-22monthly0.3http://127.0.0.1:8000/products/1722019-06-22monthly0.3http://127.0.0.1:8000/products/1732019-06-22monthly0.3http://127.0.0.1:8000/products/1742019-06-22monthly0.3http://127.0.0.1:8000/products/1752019-06-22monthly0.3http://127.0.0.1:8000/products/1762019-06-22monthly0.3http://127.0.0.1:8000/products/1772019-06-22monthly0.3http://127.0.0.1:8000/products/1782019-06-22monthly0.3http://127.0.0.1:8000/products/1792019-06-22monthly0.3http://127.0.0.1:8000/products/1802019-06-22monthly0.3http://127.0.0.1:8000/products/1812019-06-22monthly0.3http://127.0.0.1:8000/products/1822019-06-22monthly0.3http://127.0.0.1:8000/products/1832019-06-22monthly0.3http://127.0.0.1:8000/products/1842019-06-22monthly0.3http://127.0.0.1:8000/products/1852019-06-22monthly0.3http://127.0.0.1:8000/products/1862019-06-22monthly0.3http://127.0.0.1:8000/products/1872019-06-22monthly0.3http://127.0.0.1:8000/products/1882019-06-22monthly0.3http://127.0.0.1:8000/products/1892019-06-22monthly0.3http://127.0.0.1:8000/products/1902019-06-22monthly0.3http://127.0.0.1:8000/products/1912019-06-22monthly0.3http://127.0.0.1:8000/products/1922019-06-22monthly0.3http://127.0.0.1:8000/products/1932019-06-22monthly0.3http://127.0.0.1:8000/products/1942019-06-22monthly0.3http://127.0.0.1:8000/products/1952019-06-22monthly0.3http://127.0.0.1:8000/products/1962019-06-22monthly0.3http://127.0.0.1:8000/products/1972019-06-22monthly0.3http://127.0.0.1:8000/products/1982019-06-22monthly0.3http://127.0.0.1:8000/products/1992019-06-22monthly0.3http://127.0.0.1:8000/products/2002019-06-22monthly0.3http://127.0.0.1:8000/products/2012019-06-22monthly0.3http://127.0.0.1:8000/products/2022019-06-22monthly0.3http://127.0.0.1:8000/products/2032019-06-22monthly0.3http://127.0.0.1:8000/products/2042019-06-22monthly0.3http://127.0.0.1:8000/products/2052019-06-22monthly0.3http://127.0.0.1:8000/products/2062019-06-22monthly0.3http://127.0.0.1:8000/products/2072019-06-22monthly0.3http://127.0.0.1:8000/products/2082019-06-22monthly0.3http://127.0.0.1:8000/products/2092019-06-22monthly0.3http://127.0.0.1:8000/products/2102019-06-22monthly0.3http://127.0.0.1:8000/products/2112019-06-22monthly0.3http://127.0.0.1:8000/products/2122019-06-22monthly0.3http://127.0.0.1:8000/products/2132019-06-22monthly0.3http://127.0.0.1:8000/products/2142019-06-22monthly0.3http://127.0.0.1:8000/products/2152019-06-22monthly0.3http://127.0.0.1:8000/products/2162019-06-22monthly0.3http://127.0.0.1:8000/products/2172019-06-22monthly0.3http://127.0.0.1:8000/products/2182019-06-22monthly0.3http://127.0.0.1:8000/products/2192019-06-22monthly0.3http://127.0.0.1:8000/products/2202019-06-22monthly0.3http://127.0.0.1:8000/products/2212019-06-22monthly0.3http://127.0.0.1:8000/products/2222019-06-22monthly0.3http://127.0.0.1:8000/products/2232019-06-22monthly0.3http://127.0.0.1:8000/products/2242019-06-22monthly0.3http://127.0.0.1:8000/products/2252019-06-22monthly0.3http://127.0.0.1:8000/products/2262019-06-22monthly0.3http://127.0.0.1:8000/products/2272019-06-22monthly0.3http://127.0.0.1:8000/products/2282019-06-22monthly0.3http://127.0.0.1:8000/products/2292019-06-22monthly0.3http://127.0.0.1:8000/products/2302019-06-22monthly0.3http://127.0.0.1:8000/products/2312019-06-22monthly0.3http://127.0.0.1:8000/products/2322019-06-22monthly0.3http://127.0.0.1:8000/products/2332019-06-22monthly0.3http://127.0.0.1:8000/products/2342019-06-22monthly0.3http://127.0.0.1:8000/products/2352019-06-22monthly0.3http://127.0.0.1:8000/products/2362019-06-22monthly0.3http://127.0.0.1:8000/products/2372019-06-22monthly0.3http://127.0.0.1:8000/products/2382019-06-22monthly0.3http://127.0.0.1:8000/products/2392019-06-22monthly0.3http://127.0.0.1:8000/products/2402019-06-22monthly0.3http://127.0.0.1:8000/products/2412019-06-22monthly0.3http://127.0.0.1:8000/products/2422019-06-22monthly0.3http://127.0.0.1:8000/products/2432019-06-22monthly0.3http://127.0.0.1:8000/products/2442019-06-22monthly0.3http://127.0.0.1:8000/products/2452019-06-22monthly0.3http://127.0.0.1:8000/products/2462019-06-22monthly0.3http://127.0.0.1:8000/products/2472019-06-22monthly0.3http://127.0.0.1:8000/products/2482019-06-22monthly0.3http://127.0.0.1:8000/products/2492019-06-22monthly0.3http://127.0.0.1:8000/products/2502019-06-22monthly0.3http://127.0.0.1:8000/products/2512019-06-22monthly0.3http://127.0.0.1:8000/products/2522019-06-22monthly0.3http://127.0.0.1:8000/products/2532019-06-22monthly0.3http://127.0.0.1:8000/products/2542019-06-22monthly0.3http://127.0.0.1:8000/products/2552019-06-22monthly0.3http://127.0.0.1:8000/products/2562019-06-22monthly0.3http://127.0.0.1:8000/products/2572019-06-22monthly0.3http://127.0.0.1:8000/products/2582019-06-22monthly0.3http://127.0.0.1:8000/products/2592019-06-22monthly0.3http://127.0.0.1:8000/products/2602019-06-22monthly0.3http://127.0.0.1:8000/products/2612019-06-22monthly0.3http://127.0.0.1:8000/products/2622019-06-22monthly0.3http://127.0.0.1:8000/products/2632019-06-22monthly0.3http://127.0.0.1:8000/products/2642019-06-22monthly0.3http://127.0.0.1:8000/products/2652019-06-22monthly0.3http://127.0.0.1:8000/products/2662019-06-22monthly0.3http://127.0.0.1:8000/products/2672019-06-22monthly0.3http://127.0.0.1:8000/products/2682019-06-22monthly0.3http://127.0.0.1:8000/products/2692019-06-22monthly0.3http://127.0.0.1:8000/products/2702019-06-22monthly0.3http://127.0.0.1:8000/products/2712019-06-22monthly0.3http://127.0.0.1:8000/products/2722019-06-22monthly0.3http://127.0.0.1:8000/products/2732019-06-22monthly0.3http://127.0.0.1:8000/products/2742019-06-22monthly0.3http://127.0.0.1:8000/products/2752019-06-22monthly0.3http://127.0.0.1:8000/products/2762019-06-22monthly0.3http://127.0.0.1:8000/products/2772019-06-22monthly0.3http://127.0.0.1:8000/products/2782019-06-22monthly0.3http://127.0.0.1:8000/products/2792019-06-22monthly0.3http://127.0.0.1:8000/products/2802019-06-22monthly0.3http://127.0.0.1:8000/products/2812019-06-22monthly0.3http://127.0.0.1:8000/products/2822019-06-22monthly0.3http://127.0.0.1:8000/products/2832019-06-22monthly0.3http://127.0.0.1:8000/products/2842019-06-22monthly0.3http://127.0.0.1:8000/products/2852019-06-22monthly0.3http://127.0.0.1:8000/products/2862019-06-22monthly0.3http://127.0.0.1:8000/products/2872019-06-22monthly0.3http://127.0.0.1:8000/products/2882019-06-22monthly0.3http://127.0.0.1:8000/products/2892019-06-22monthly0.3http://127.0.0.1:8000/products/2902019-06-22monthly0.3http://127.0.0.1:8000/products/2912019-06-22monthly0.3http://127.0.0.1:8000/products/2922019-06-22monthly0.3http://127.0.0.1:8000/products/2932019-06-22monthly0.3http://127.0.0.1:8000/products/2942019-06-22monthly0.3http://127.0.0.1:8000/products/2952019-06-22monthly0.3http://127.0.0.1:8000/products/2962019-06-22monthly0.3http://127.0.0.1:8000/products/2972019-06-22monthly0.3http://127.0.0.1:8000/products/2982019-06-22monthly0.3http://127.0.0.1:8000/products/2992019-06-22monthly0.3http://127.0.0.1:8000/products/3002019-06-22monthly0.3http://127.0.0.1:8000/products/3012019-06-22monthly0.3http://127.0.0.1:8000/products/3022019-06-22monthly0.3http://127.0.0.1:8000/products/3032019-06-22monthly0.3http://127.0.0.1:8000/products/3042019-06-22monthly0.3http://127.0.0.1:8000/products/3052019-06-22monthly0.3http://127.0.0.1:8000/products/3062019-06-22monthly0.3http://127.0.0.1:8000/products/3072019-06-22monthly0.3http://127.0.0.1:8000/products/3082019-06-22monthly0.3http://127.0.0.1:8000/products/3092019-06-22monthly0.3http://127.0.0.1:8000/products/3102019-06-22monthly0.3http://127.0.0.1:8000/products/3112019-06-22monthly0.3http://127.0.0.1:8000/products/3122019-06-22monthly0.3http://127.0.0.1:8000/products/3132019-06-22monthly0.3http://127.0.0.1:8000/products/3142019-06-22monthly0.3http://127.0.0.1:8000/products/3152019-06-22monthly0.3http://127.0.0.1:8000/products/3162019-06-22monthly0.3http://127.0.0.1:8000/products/3172019-06-22monthly0.3http://127.0.0.1:8000/products/3182019-06-22monthly0.3http://127.0.0.1:8000/products/3192019-06-22monthly0.3http://127.0.0.1:8000/products/3202019-06-22monthly0.3http://127.0.0.1:8000/products/3212019-06-22monthly0.3http://127.0.0.1:8000/products/3222019-06-22monthly0.3http://127.0.0.1:8000/products/3232019-06-22monthly0.3http://127.0.0.1:8000/products/3242019-06-22monthly0.3http://127.0.0.1:8000/products/3252019-06-22monthly0.3http://127.0.0.1:8000/products/3262019-06-22monthly0.3http://127.0.0.1:8000/products/3272019-06-22monthly0.3http://127.0.0.1:8000/products/3282019-06-22monthly0.3http://127.0.0.1:8000/products/3292019-06-22monthly0.3http://127.0.0.1:8000/products/3302019-06-22monthly0.3http://127.0.0.1:8000/products/3312019-06-22monthly0.3http://127.0.0.1:8000/products/3322019-06-22monthly0.3http://127.0.0.1:8000/products/3332019-06-22monthly0.3http://127.0.0.1:8000/products/3342019-06-22monthly0.3http://127.0.0.1:8000/products/3352019-06-22monthly0.3http://127.0.0.1:8000/products/3362019-06-22monthly0.3http://127.0.0.1:8000/products/3372019-06-22monthly0.3http://127.0.0.1:8000/products/3382019-06-22monthly0.3http://127.0.0.1:8000/products/3392019-06-22monthly0.3http://127.0.0.1:8000/products/3402019-06-22monthly0.3http://127.0.0.1:8000/products/3412019-06-22monthly0.3http://127.0.0.1:8000/products/3422019-06-22monthly0.3http://127.0.0.1:8000/products/3432019-06-22monthly0.3http://127.0.0.1:8000/products/3442019-06-22monthly0.3http://127.0.0.1:8000/products/3452019-06-22monthly0.3http://127.0.0.1:8000/products/3462019-06-22monthly0.3http://127.0.0.1:8000/products/3472019-06-22monthly0.3http://127.0.0.1:8000/products/3482019-06-22monthly0.3http://127.0.0.1:8000/products/3492019-06-22monthly0.3http://127.0.0.1:8000/products/3502019-06-22monthly0.3http://127.0.0.1:8000/products/3512019-06-22monthly0.3http://127.0.0.1:8000/products/3522019-06-22monthly0.3http://127.0.0.1:8000/products/3532019-06-22monthly0.3http://127.0.0.1:8000/products/3542019-06-22monthly0.3http://127.0.0.1:8000/products/3552019-06-22monthly0.3http://127.0.0.1:8000/products/3562019-06-22monthly0.3http://127.0.0.1:8000/products/3572019-06-22monthly0.3http://127.0.0.1:8000/products/3582019-06-22monthly0.3http://127.0.0.1:8000/products/3592019-06-22monthly0.3http://127.0.0.1:8000/products/3602019-06-22monthly0.3http://127.0.0.1:8000/products/3612019-06-22monthly0.3http://127.0.0.1:8000/products/3622019-06-22monthly0.3http://127.0.0.1:8000/products/3632019-06-22monthly0.3http://127.0.0.1:8000/products/3642019-06-22monthly0.3http://127.0.0.1:8000/products/3652019-06-22monthly0.3http://127.0.0.1:8000/products/3662019-06-22monthly0.3http://127.0.0.1:8000/products/3672019-06-22monthly0.3http://127.0.0.1:8000/products/3682019-06-22monthly0.3http://127.0.0.1:8000/products/3692019-06-22monthly0.3http://127.0.0.1:8000/products/3702019-06-22monthly0.3http://127.0.0.1:8000/products/3712019-06-22monthly0.3http://127.0.0.1:8000/products/3722019-06-22monthly0.3http://127.0.0.1:8000/products/3732019-06-22monthly0.3http://127.0.0.1:8000/products/3742019-06-22monthly0.3http://127.0.0.1:8000/products/3752019-06-22monthly0.3http://127.0.0.1:8000/products/3762019-06-22monthly0.3http://127.0.0.1:8000/products/3772019-06-22monthly0.3http://127.0.0.1:8000/products/3782019-06-22monthly0.3http://127.0.0.1:8000/products/3792019-06-22monthly0.3http://127.0.0.1:8000/products/3802019-06-22monthly0.3http://127.0.0.1:8000/products/3812019-06-22monthly0.3http://127.0.0.1:8000/products/3822019-06-22monthly0.3http://127.0.0.1:8000/products/3832019-06-22monthly0.3http://127.0.0.1:8000/products/3842019-06-22monthly0.3http://127.0.0.1:8000/products/3852019-06-22monthly0.3http://127.0.0.1:8000/products/3862019-06-22monthly0.3http://127.0.0.1:8000/products/3872019-06-22monthly0.3http://127.0.0.1:8000/products/3882019-06-22monthly0.3http://127.0.0.1:8000/products/3892019-06-22monthly0.3http://127.0.0.1:8000/products/3902019-06-22monthly0.3http://127.0.0.1:8000/products/3912019-06-22monthly0.3http://127.0.0.1:8000/products/3922019-06-22monthly0.3http://127.0.0.1:8000/products/3932019-06-22monthly0.3http://127.0.0.1:8000/products/3942019-06-22monthly0.3http://127.0.0.1:8000/products/3952019-06-22monthly0.3http://127.0.0.1:8000/products/3962019-06-22monthly0.3http://127.0.0.1:8000/products/3972019-06-22monthly0.3http://127.0.0.1:8000/products/3982019-06-22monthly0.3http://127.0.0.1:8000/products/3992019-06-22monthly0.3http://127.0.0.1:8000/products/4002019-06-22monthly0.3http://127.0.0.1:8000/products/4012019-06-22monthly0.3http://127.0.0.1:8000/products/4022019-06-22monthly0.3http://127.0.0.1:8000/products/4032019-06-22monthly0.3http://127.0.0.1:8000/products/4042019-06-22monthly0.3http://127.0.0.1:8000/products/4052019-06-22monthly0.3http://127.0.0.1:8000/products/4062019-06-22monthly0.3http://127.0.0.1:8000/products/4072019-06-22monthly0.3http://127.0.0.1:8000/products/4082019-06-22monthly0.3http://127.0.0.1:8000/products/4092019-06-22monthly0.3http://127.0.0.1:8000/products/4102019-06-22monthly0.3http://127.0.0.1:8000/products/4112019-06-22monthly0.3http://127.0.0.1:8000/products/4122019-06-22monthly0.3http://127.0.0.1:8000/products/4132019-06-22monthly0.3http://127.0.0.1:8000/products/4142019-06-22monthly0.3http://127.0.0.1:8000/products/4152019-06-22monthly0.3http://127.0.0.1:8000/products/4162019-06-22monthly0.3http://127.0.0.1:8000/products/4172019-06-22monthly0.3http://127.0.0.1:8000/products/4182019-06-22monthly0.3http://127.0.0.1:8000/products/4192019-06-22monthly0.3http://127.0.0.1:8000/products/4202019-06-22monthly0.3http://127.0.0.1:8000/products/4212019-06-22monthly0.3http://127.0.0.1:8000/products/4222019-06-22monthly0.3http://127.0.0.1:8000/products/4232019-06-22monthly0.3http://127.0.0.1:8000/products/4242019-06-22monthly0.3http://127.0.0.1:8000/products/4252019-06-22monthly0.3http://127.0.0.1:8000/products/4262019-06-22monthly0.3http://127.0.0.1:8000/products/4272019-06-22monthly0.3http://127.0.0.1:8000/products/4282019-06-22monthly0.3http://127.0.0.1:8000/products/4292019-06-22monthly0.3http://127.0.0.1:8000/products/4302019-06-22monthly0.3http://127.0.0.1:8000/products/4312019-06-22monthly0.3http://127.0.0.1:8000/products/4322019-06-22monthly0.3http://127.0.0.1:8000/products/4332019-06-22monthly0.3http://127.0.0.1:8000/products/4342019-06-22monthly0.3http://127.0.0.1:8000/products/4352019-06-22monthly0.3http://127.0.0.1:8000/products/4362019-06-22monthly0.3http://127.0.0.1:8000/products/4372019-06-22monthly0.3http://127.0.0.1:8000/products/4382019-06-22monthly0.3http://127.0.0.1:8000/products/4392019-06-22monthly0.3http://127.0.0.1:8000/products/4402019-06-22monthly0.3http://127.0.0.1:8000/products/4412019-06-22monthly0.3http://127.0.0.1:8000/products/4422019-06-22monthly0.3http://127.0.0.1:8000/products/4432019-06-22monthly0.3http://127.0.0.1:8000/products/4442019-06-22monthly0.3http://127.0.0.1:8000/products/4452019-06-22monthly0.3http://127.0.0.1:8000/products/4462019-06-22monthly0.3http://127.0.0.1:8000/products/4472019-06-22monthly0.3http://127.0.0.1:8000/products/4482019-06-22monthly0.3http://127.0.0.1:8000/products/4492019-06-22monthly0.3http://127.0.0.1:8000/products/4502019-06-22monthly0.3http://127.0.0.1:8000/products/4512019-06-22monthly0.3http://127.0.0.1:8000/products/4522019-06-22monthly0.3http://127.0.0.1:8000/products/4532019-06-22monthly0.3http://127.0.0.1:8000/products/4542019-06-22monthly0.3http://127.0.0.1:8000/products/4552019-06-22monthly0.3http://127.0.0.1:8000/products/4562019-06-22monthly0.3http://127.0.0.1:8000/products/4572019-06-22monthly0.3http://127.0.0.1:8000/products/4582019-06-22monthly0.3http://127.0.0.1:8000/products/4592019-06-22monthly0.3http://127.0.0.1:8000/products/4602019-06-22monthly0.3http://127.0.0.1:8000/products/4612019-06-22monthly0.3http://127.0.0.1:8000/products/4622019-06-22monthly0.3http://127.0.0.1:8000/products/4632019-06-22monthly0.3http://127.0.0.1:8000/products/4642019-06-22monthly0.3http://127.0.0.1:8000/products/4652019-06-22monthly0.3http://127.0.0.1:8000/products/4662019-06-22monthly0.3http://127.0.0.1:8000/products/4672019-06-22monthly0.3http://127.0.0.1:8000/products/4682019-06-22monthly0.3http://127.0.0.1:8000/products/4692019-06-22monthly0.3http://127.0.0.1:8000/products/4702019-06-22monthly0.3http://127.0.0.1:8000/products/4712019-06-22monthly0.3http://127.0.0.1:8000/products/4722019-06-22monthly0.3http://127.0.0.1:8000/products/4732019-06-22monthly0.3http://127.0.0.1:8000/products/4742019-06-22monthly0.3http://127.0.0.1:8000/products/4752019-06-22monthly0.3http://127.0.0.1:8000/products/4762019-06-22monthly0.3http://127.0.0.1:8000/products/4772019-06-22monthly0.3http://127.0.0.1:8000/products/4782019-06-22monthly0.3http://127.0.0.1:8000/products/4792019-06-22monthly0.3http://127.0.0.1:8000/products/4802019-06-22monthly0.3http://127.0.0.1:8000/products/4812019-06-22monthly0.3http://127.0.0.1:8000/products/4822019-06-22monthly0.3http://127.0.0.1:8000/products/4832019-06-22monthly0.3http://127.0.0.1:8000/products/4842019-06-22monthly0.3http://127.0.0.1:8000/products/4852019-06-22monthly0.3http://127.0.0.1:8000/products/4862019-06-22monthly0.3http://127.0.0.1:8000/products/4872019-06-22monthly0.3http://127.0.0.1:8000/products/4882019-06-22monthly0.3http://127.0.0.1:8000/products/4892019-06-22monthly0.3http://127.0.0.1:8000/products/4902019-06-22monthly0.3http://127.0.0.1:8000/products/4912019-06-22monthly0.3http://127.0.0.1:8000/products/4922019-06-22monthly0.3http://127.0.0.1:8000/products/4932019-06-22monthly0.3http://127.0.0.1:8000/products/4942019-06-22monthly0.3http://127.0.0.1:8000/products/4952019-06-22monthly0.3http://127.0.0.1:8000/products/4962019-06-22monthly0.3http://127.0.0.1:8000/products/4972019-06-22monthly0.3http://127.0.0.1:8000/products/4982019-06-22monthly0.3http://127.0.0.1:8000/products/4992019-06-22monthly0.3http://127.0.0.1:8000/products/5002019-06-22monthly0.3http://127.0.0.1:8000/products/5012019-06-22monthly0.3http://127.0.0.1:8000/products/5022019-06-22monthly0.3http://127.0.0.1:8000/products/5032019-06-22monthly0.3http://127.0.0.1:8000/products/5042019-06-22monthly0.3http://127.0.0.1:8000/products/5052019-06-22monthly0.3http://127.0.0.1:8000/products/5062019-06-22monthly0.3http://127.0.0.1:8000/products/5072019-06-22monthly0.3http://127.0.0.1:8000/products/5082019-06-22monthly0.3http://127.0.0.1:8000/products/5092019-06-22monthly0.3http://127.0.0.1:8000/products/5102019-06-22monthly0.3http://127.0.0.1:8000/products/5112019-06-22monthly0.3http://127.0.0.1:8000/products/5122019-06-22monthly0.3http://127.0.0.1:8000/products/5132019-06-22monthly0.3http://127.0.0.1:8000/products/5142019-06-22monthly0.3http://127.0.0.1:8000/products/5152019-06-22monthly0.3http://127.0.0.1:8000/products/5162019-06-22monthly0.3http://127.0.0.1:8000/products/5172019-06-22monthly0.3http://127.0.0.1:8000/products/5182019-06-22monthly0.3http://127.0.0.1:8000/products/5192019-06-22monthly0.3http://127.0.0.1:8000/products/5202019-06-22monthly0.3http://127.0.0.1:8000/products/5212019-06-22monthly0.3http://127.0.0.1:8000/products/5222019-06-22monthly0.3http://127.0.0.1:8000/products/5232019-06-22monthly0.3http://127.0.0.1:8000/products/5242019-06-22monthly0.3http://127.0.0.1:8000/products/5252019-06-22monthly0.3http://127.0.0.1:8000/products/5262019-06-22monthly0.3http://127.0.0.1:8000/products/5272019-06-22monthly0.3http://127.0.0.1:8000/products/5282019-06-22monthly0.3http://127.0.0.1:8000/products/5292019-06-22monthly0.3http://127.0.0.1:8000/products/5302019-06-22monthly0.3http://127.0.0.1:8000/products/5312019-06-22monthly0.3http://127.0.0.1:8000/products/5322019-06-22monthly0.3http://127.0.0.1:8000/products/5332019-06-22monthly0.3http://127.0.0.1:8000/products/5342019-06-22monthly0.3http://127.0.0.1:8000/products/5352019-06-22monthly0.3http://127.0.0.1:8000/products/5362019-06-22monthly0.3http://127.0.0.1:8000/products/5372019-06-22monthly0.3http://127.0.0.1:8000/products/5382019-06-22monthly0.3http://127.0.0.1:8000/products/5392019-06-22monthly0.3http://127.0.0.1:8000/products/5402019-06-22monthly0.3http://127.0.0.1:8000/products/5412019-06-22monthly0.3http://127.0.0.1:8000/products/5422019-06-22monthly0.3http://127.0.0.1:8000/products/5432019-06-22monthly0.3http://127.0.0.1:8000/products/5442019-06-22monthly0.3http://127.0.0.1:8000/products/5452019-06-22monthly0.3http://127.0.0.1:8000/products/5462019-06-22monthly0.3http://127.0.0.1:8000/products/5472019-06-22monthly0.3http://127.0.0.1:8000/products/5482019-06-22monthly0.3http://127.0.0.1:8000/products/5492019-06-22monthly0.3http://127.0.0.1:8000/products/5502019-06-22monthly0.3http://127.0.0.1:8000/products/5512019-06-22monthly0.3http://127.0.0.1:8000/products/5522019-06-22monthly0.3http://127.0.0.1:8000/products/5532019-06-22monthly0.3http://127.0.0.1:8000/products/5542019-06-22monthly0.3http://127.0.0.1:8000/products/5552019-06-22monthly0.3http://127.0.0.1:8000/products/5562019-06-22monthly0.3http://127.0.0.1:8000/products/5572019-06-22monthly0.3http://127.0.0.1:8000/products/5582019-06-22monthly0.3http://127.0.0.1:8000/products/5592019-06-22monthly0.3http://127.0.0.1:8000/products/5602019-06-22monthly0.3http://127.0.0.1:8000/products/5612019-06-22monthly0.3http://127.0.0.1:8000/products/5622019-06-22monthly0.3http://127.0.0.1:8000/products/5632019-06-22monthly0.3http://127.0.0.1:8000/products/5642019-06-22monthly0.3http://127.0.0.1:8000/products/5652019-06-22monthly0.3http://127.0.0.1:8000/products/5662019-06-22monthly0.3http://127.0.0.1:8000/products/5672019-06-22monthly0.3http://127.0.0.1:8000/products/5682019-06-22monthly0.3http://127.0.0.1:8000/products/5692019-06-22monthly0.3http://127.0.0.1:8000/products/5702019-06-22monthly0.3http://127.0.0.1:8000/products/5712019-06-22monthly0.3http://127.0.0.1:8000/products/5722019-06-22monthly0.3http://127.0.0.1:8000/products/5732019-06-22monthly0.3http://127.0.0.1:8000/products/5742019-06-22monthly0.3http://127.0.0.1:8000/products/5752019-06-22monthly0.3http://127.0.0.1:8000/products/5762019-06-22monthly0.3http://127.0.0.1:8000/products/5772019-06-22monthly0.3http://127.0.0.1:8000/products/5782019-06-22monthly0.3http://127.0.0.1:8000/products/5792019-06-22monthly0.3http://127.0.0.1:8000/products/5802019-06-22monthly0.3http://127.0.0.1:8000/products/5812019-06-22monthly0.3http://127.0.0.1:8000/products/5822019-06-22monthly0.3http://127.0.0.1:8000/products/5832019-06-22monthly0.3http://127.0.0.1:8000/products/5842019-06-22monthly0.3http://127.0.0.1:8000/products/5852019-06-22monthly0.3http://127.0.0.1:8000/products/5862019-06-22monthly0.3http://127.0.0.1:8000/products/5872019-06-22monthly0.3http://127.0.0.1:8000/products/5882019-06-22monthly0.3http://127.0.0.1:8000/products/5892019-06-22monthly0.3http://127.0.0.1:8000/products/5902019-06-22monthly0.3http://127.0.0.1:8000/products/5912019-06-22monthly0.3http://127.0.0.1:8000/products/5922019-06-22monthly0.3http://127.0.0.1:8000/products/5932019-06-22monthly0.3http://127.0.0.1:8000/products/5942019-06-22monthly0.3http://127.0.0.1:8000/products/5952019-06-22monthly0.3http://127.0.0.1:8000/products/5962019-06-22monthly0.3http://127.0.0.1:8000/products/5972019-06-22monthly0.3http://127.0.0.1:8000/products/5982019-06-22monthly0.3http://127.0.0.1:8000/products/5992019-06-22monthly0.3http://127.0.0.1:8000/products/6002019-06-22monthly0.3http://127.0.0.1:8000/products/6012019-06-22monthly0.3http://127.0.0.1:8000/products/6022019-06-22monthly0.3http://127.0.0.1:8000/products/6032019-06-22monthly0.3http://127.0.0.1:8000/products/6042019-06-22monthly0.3http://127.0.0.1:8000/products/6052019-06-22monthly0.3http://127.0.0.1:8000/products/6062019-06-22monthly0.3http://127.0.0.1:8000/products/6072019-06-22monthly0.3http://127.0.0.1:8000/products/6082019-06-22monthly0.3http://127.0.0.1:8000/products/6092019-06-22monthly0.3http://127.0.0.1:8000/products/6102019-06-22monthly0.3http://127.0.0.1:8000/products/6112019-06-22monthly0.3http://127.0.0.1:8000/products/6122019-06-22monthly0.3http://127.0.0.1:8000/products/6132019-06-22monthly0.3http://127.0.0.1:8000/products/6142019-06-22monthly0.3http://127.0.0.1:8000/products/6152019-06-22monthly0.3http://127.0.0.1:8000/products/6162019-06-22monthly0.3http://127.0.0.1:8000/products/6172019-06-22monthly0.3http://127.0.0.1:8000/products/6182019-06-22monthly0.3http://127.0.0.1:8000/products/6192019-06-22monthly0.3http://127.0.0.1:8000/products/6202019-06-22monthly0.3http://127.0.0.1:8000/products/6212019-06-22monthly0.3http://127.0.0.1:8000/products/6222019-06-22monthly0.3http://127.0.0.1:8000/products/6232019-06-22monthly0.3http://127.0.0.1:8000/products/6242019-06-22monthly0.3http://127.0.0.1:8000/products/6252019-06-22monthly0.3http://127.0.0.1:8000/products/6262019-06-22monthly0.3http://127.0.0.1:8000/products/6272019-06-22monthly0.3http://127.0.0.1:8000/products/6282019-06-22monthly0.3http://127.0.0.1:8000/products/6292019-06-22monthly0.3http://127.0.0.1:8000/products/6302019-06-22monthly0.3http://127.0.0.1:8000/products/6312019-06-22monthly0.3http://127.0.0.1:8000/products/6322019-06-22monthly0.3http://127.0.0.1:8000/products/6332019-06-22monthly0.3http://127.0.0.1:8000/products/6342019-06-22monthly0.3http://127.0.0.1:8000/products/6352019-06-22monthly0.3http://127.0.0.1:8000/products/6362019-06-22monthly0.3http://127.0.0.1:8000/products/6372019-06-22monthly0.3http://127.0.0.1:8000/products/6382019-06-22monthly0.3http://127.0.0.1:8000/products/6392019-06-22monthly0.3http://127.0.0.1:8000/products/6402019-06-22monthly0.3http://127.0.0.1:8000/products/6412019-06-22monthly0.3http://127.0.0.1:8000/products/6422019-06-22monthly0.3http://127.0.0.1:8000/products/6432019-06-22monthly0.3http://127.0.0.1:8000/products/6442019-06-22monthly0.3http://127.0.0.1:8000/products/6452019-06-22monthly0.3http://127.0.0.1:8000/products/6462019-06-22monthly0.3http://127.0.0.1:8000/products/6472019-06-22monthly0.3http://127.0.0.1:8000/products/6482019-06-22monthly0.3http://127.0.0.1:8000/products/6492019-06-22monthly0.3http://127.0.0.1:8000/products/6502019-06-22monthly0.3http://127.0.0.1:8000/products/6512019-06-22monthly0.3http://127.0.0.1:8000/products/6522019-06-22monthly0.3http://127.0.0.1:8000/products/6532019-06-22monthly0.3http://127.0.0.1:8000/products/6542019-06-22monthly0.3http://127.0.0.1:8000/products/6552019-06-22monthly0.3http://127.0.0.1:8000/products/6562019-06-22monthly0.3http://127.0.0.1:8000/products/6572019-06-22monthly0.3http://127.0.0.1:8000/products/6582019-06-22monthly0.3http://127.0.0.1:8000/products/6592019-06-22monthly0.3http://127.0.0.1:8000/products/6602019-06-22monthly0.3http://127.0.0.1:8000/products/6612019-06-22monthly0.3http://127.0.0.1:8000/products/6622019-06-22monthly0.3http://127.0.0.1:8000/products/6632019-06-22monthly0.3http://127.0.0.1:8000/products/6642019-06-22monthly0.3http://127.0.0.1:8000/products/6652019-06-22monthly0.3http://127.0.0.1:8000/products/6662019-06-22monthly0.3http://127.0.0.1:8000/products/6672019-06-22monthly0.3http://127.0.0.1:8000/products/6682019-06-22monthly0.3http://127.0.0.1:8000/products/6692019-06-22monthly0.3http://127.0.0.1:8000/products/6702019-06-22monthly0.3http://127.0.0.1:8000/products/6712019-06-22monthly0.3http://127.0.0.1:8000/products/6722019-06-22monthly0.3http://127.0.0.1:8000/products/6732019-06-22monthly0.3http://127.0.0.1:8000/products/6742019-06-22monthly0.3http://127.0.0.1:8000/products/6752019-06-22monthly0.3http://127.0.0.1:8000/products/6762019-06-22monthly0.3http://127.0.0.1:8000/products/6772019-06-22monthly0.3http://127.0.0.1:8000/products/6782019-06-22monthly0.3http://127.0.0.1:8000/products/6792019-06-22monthly0.3http://127.0.0.1:8000/products/6802019-06-22monthly0.3http://127.0.0.1:8000/products/6812019-06-22monthly0.3http://127.0.0.1:8000/products/6822019-06-22monthly0.3http://127.0.0.1:8000/products/6832019-06-22monthly0.3http://127.0.0.1:8000/products/6842019-06-22monthly0.3http://127.0.0.1:8000/products/6852019-06-22monthly0.3http://127.0.0.1:8000/products/6862019-06-22monthly0.3http://127.0.0.1:8000/products/6872019-06-22monthly0.3http://127.0.0.1:8000/products/6882019-06-22monthly0.3http://127.0.0.1:8000/products/6892019-06-22monthly0.3http://127.0.0.1:8000/products/6902019-06-22monthly0.3http://127.0.0.1:8000/products/6912019-06-22monthly0.3http://127.0.0.1:8000/products/6922019-06-22monthly0.3http://127.0.0.1:8000/products/6932019-06-22monthly0.3http://127.0.0.1:8000/products/6942019-06-22monthly0.3http://127.0.0.1:8000/products/6952019-06-22monthly0.3http://127.0.0.1:8000/products/6962019-06-22monthly0.3http://127.0.0.1:8000/products/6972019-06-22monthly0.3http://127.0.0.1:8000/products/6982019-06-22monthly0.3http://127.0.0.1:8000/products/6992019-06-22monthly0.3http://127.0.0.1:8000/products/7002019-06-22monthly0.3http://127.0.0.1:8000/products/7012019-06-22monthly0.3http://127.0.0.1:8000/products/7022019-06-22monthly0.3http://127.0.0.1:8000/products/7032019-06-22monthly0.3http://127.0.0.1:8000/products/7042019-06-22monthly0.3http://127.0.0.1:8000/products/7052019-06-22monthly0.3http://127.0.0.1:8000/products/7062019-06-22monthly0.3http://127.0.0.1:8000/products/7072019-06-22monthly0.3http://127.0.0.1:8000/products/7082019-06-22monthly0.3http://127.0.0.1:8000/products/7092019-06-22monthly0.3http://127.0.0.1:8000/products/7102019-06-22monthly0.3http://127.0.0.1:8000/products/7112019-06-22monthly0.3http://127.0.0.1:8000/products/7122019-06-22monthly0.3http://127.0.0.1:8000/products/7132019-06-22monthly0.3http://127.0.0.1:8000/products/7142019-06-22monthly0.3http://127.0.0.1:8000/products/7152019-06-22monthly0.3http://127.0.0.1:8000/products/7162019-06-22monthly0.3http://127.0.0.1:8000/products/7172019-06-22monthly0.3http://127.0.0.1:8000/products/7182019-06-22monthly0.3http://127.0.0.1:8000/products/7192019-06-22monthly0.3http://127.0.0.1:8000/products/7202019-06-22monthly0.3http://127.0.0.1:8000/products/7212019-06-22monthly0.3http://127.0.0.1:8000/products/7222019-06-22monthly0.3http://127.0.0.1:8000/products/7232019-06-22monthly0.3http://127.0.0.1:8000/products/7242019-06-22monthly0.3http://127.0.0.1:8000/products/7252019-06-22monthly0.3http://127.0.0.1:8000/products/7262019-06-22monthly0.3http://127.0.0.1:8000/products/7272019-06-22monthly0.3http://127.0.0.1:8000/products/7282019-06-22monthly0.3http://127.0.0.1:8000/products/7292019-06-22monthly0.3http://127.0.0.1:8000/products/7302019-06-22monthly0.3http://127.0.0.1:8000/products/7312019-06-22monthly0.3http://127.0.0.1:8000/products/7322019-06-22monthly0.3http://127.0.0.1:8000/products/7332019-06-22monthly0.3http://127.0.0.1:8000/products/7342019-06-22monthly0.3http://127.0.0.1:8000/products/7352019-06-22monthly0.3http://127.0.0.1:8000/products/7362019-06-22monthly0.3http://127.0.0.1:8000/products/7372019-06-22monthly0.3http://127.0.0.1:8000/products/7382019-06-22monthly0.3http://127.0.0.1:8000/products/7392019-06-22monthly0.3http://127.0.0.1:8000/products/7402019-06-22monthly0.3http://127.0.0.1:8000/products/7412019-06-22monthly0.3http://127.0.0.1:8000/products/7422019-06-22monthly0.3http://127.0.0.1:8000/products/7432019-06-22monthly0.3http://127.0.0.1:8000/products/7442019-06-22monthly0.3http://127.0.0.1:8000/products/7452019-06-22monthly0.3http://127.0.0.1:8000/products/7462019-06-22monthly0.3http://127.0.0.1:8000/products/7472019-06-22monthly0.3http://127.0.0.1:8000/products/7482019-06-22monthly0.3http://127.0.0.1:8000/products/7492019-06-22monthly0.3http://127.0.0.1:8000/products/7502019-06-22monthly0.3http://127.0.0.1:8000/products/7512019-06-22monthly0.3http://127.0.0.1:8000/products/7522019-06-22monthly0.3http://127.0.0.1:8000/products/7532019-06-22monthly0.3http://127.0.0.1:8000/products/7542019-06-22monthly0.3http://127.0.0.1:8000/products/7552019-06-22monthly0.3http://127.0.0.1:8000/products/7562019-06-22monthly0.3http://127.0.0.1:8000/products/7572019-06-22monthly0.3http://127.0.0.1:8000/products/7582019-06-22monthly0.3http://127.0.0.1:8000/products/7592019-06-22monthly0.3http://127.0.0.1:8000/products/7602019-06-22monthly0.3http://127.0.0.1:8000/products/7612019-06-22monthly0.3http://127.0.0.1:8000/products/7622019-06-22monthly0.3http://127.0.0.1:8000/products/7632019-06-22monthly0.3http://127.0.0.1:8000/products/7642019-06-22monthly0.3http://127.0.0.1:8000/products/7652019-06-22monthly0.3http://127.0.0.1:8000/products/7662019-06-22monthly0.3http://127.0.0.1:8000/products/7672019-06-22monthly0.3http://127.0.0.1:8000/products/7682019-06-22monthly0.3http://127.0.0.1:8000/products/7692019-06-22monthly0.3http://127.0.0.1:8000/products/7702019-06-22monthly0.3http://127.0.0.1:8000/products/7712019-06-22monthly0.3http://127.0.0.1:8000/products/7722019-06-22monthly0.3http://127.0.0.1:8000/products/7732019-06-22monthly0.3http://127.0.0.1:8000/products/7742019-06-22monthly0.3http://127.0.0.1:8000/products/7752019-06-22monthly0.3http://127.0.0.1:8000/products/7762019-06-22monthly0.3http://127.0.0.1:8000/products/7772019-06-22monthly0.3http://127.0.0.1:8000/products/7782019-06-22monthly0.3http://127.0.0.1:8000/products/7792019-06-22monthly0.3http://127.0.0.1:8000/products/7802019-06-22monthly0.3http://127.0.0.1:8000/products/7812019-06-22monthly0.3http://127.0.0.1:8000/products/7822019-06-22monthly0.3http://127.0.0.1:8000/products/7832019-06-22monthly0.3http://127.0.0.1:8000/products/7842019-06-22monthly0.3http://127.0.0.1:8000/products/7852019-06-22monthly0.3http://127.0.0.1:8000/products/7862019-06-22monthly0.3http://127.0.0.1:8000/products/7872019-06-22monthly0.3http://127.0.0.1:8000/products/7882019-06-22monthly0.3http://127.0.0.1:8000/products/7892019-06-22monthly0.3http://127.0.0.1:8000/products/7902019-06-22monthly0.3http://127.0.0.1:8000/products/7912019-06-22monthly0.3http://127.0.0.1:8000/products/7922019-06-22monthly0.3http://127.0.0.1:8000/products/7932019-06-22monthly0.3http://127.0.0.1:8000/products/7942019-06-22monthly0.3http://127.0.0.1:8000/products/7952019-06-22monthly0.3http://127.0.0.1:8000/products/7962019-06-22monthly0.3http://127.0.0.1:8000/products/7972019-06-22monthly0.3http://127.0.0.1:8000/products/7982019-06-22monthly0.3http://127.0.0.1:8000/products/7992019-06-22monthly0.3http://127.0.0.1:8000/products/8002019-06-22monthly0.3http://127.0.0.1:8000/products/8012019-06-22monthly0.3http://127.0.0.1:8000/products/8022019-06-22monthly0.3http://127.0.0.1:8000/products/8032019-06-22monthly0.3http://127.0.0.1:8000/products/8042019-06-22monthly0.3http://127.0.0.1:8000/products/8052019-06-22monthly0.3http://127.0.0.1:8000/products/8062019-06-22monthly0.3http://127.0.0.1:8000/products/8072019-06-22monthly0.3http://127.0.0.1:8000/products/8082019-06-22monthly0.3http://127.0.0.1:8000/products/8092019-06-22monthly0.3http://127.0.0.1:8000/products/8102019-06-22monthly0.3http://127.0.0.1:8000/products/8112019-06-22monthly0.3http://127.0.0.1:8000/products/8122019-06-22monthly0.3http://127.0.0.1:8000/products/8132019-06-22monthly0.3http://127.0.0.1:8000/products/8142019-06-22monthly0.3http://127.0.0.1:8000/products/8152019-06-22monthly0.3http://127.0.0.1:8000/products/8162019-06-22monthly0.3http://127.0.0.1:8000/products/8172019-06-22monthly0.3http://127.0.0.1:8000/products/8182019-06-22monthly0.3http://127.0.0.1:8000/products/8192019-06-22monthly0.3http://127.0.0.1:8000/products/8202019-06-22monthly0.3http://127.0.0.1:8000/products/8212019-06-22monthly0.3http://127.0.0.1:8000/products/8222019-06-22monthly0.3http://127.0.0.1:8000/products/8232019-06-22monthly0.3http://127.0.0.1:8000/products/8242019-06-22monthly0.3http://127.0.0.1:8000/products/8252019-06-22monthly0.3http://127.0.0.1:8000/products/8262019-06-22monthly0.3http://127.0.0.1:8000/products/8272019-06-22monthly0.3http://127.0.0.1:8000/products/8282019-06-22monthly0.3http://127.0.0.1:8000/products/8292019-06-22monthly0.3http://127.0.0.1:8000/products/8302019-06-22monthly0.3http://127.0.0.1:8000/products/8312019-06-22monthly0.3http://127.0.0.1:8000/products/8322019-06-22monthly0.3http://127.0.0.1:8000/products/8332019-06-22monthly0.3http://127.0.0.1:8000/products/8342019-06-22monthly0.3http://127.0.0.1:8000/products/8352019-06-22monthly0.3http://127.0.0.1:8000/products/8362019-06-22monthly0.3http://127.0.0.1:8000/products/8372019-06-22monthly0.3http://127.0.0.1:8000/products/8382019-06-22monthly0.3http://127.0.0.1:8000/products/8392019-06-22monthly0.3http://127.0.0.1:8000/products/8402019-06-22monthly0.3http://127.0.0.1:8000/products/8412019-06-22monthly0.3http://127.0.0.1:8000/products/8422019-06-22monthly0.3http://127.0.0.1:8000/products/8432019-06-22monthly0.3http://127.0.0.1:8000/products/8442019-06-22monthly0.3http://127.0.0.1:8000/products/8452019-06-22monthly0.3http://127.0.0.1:8000/products/8462019-06-22monthly0.3http://127.0.0.1:8000/products/8472019-06-22monthly0.3http://127.0.0.1:8000/products/8482019-06-22monthly0.3http://127.0.0.1:8000/products/8492019-06-22monthly0.3http://127.0.0.1:8000/products/8502019-06-22monthly0.3http://127.0.0.1:8000/products/8512019-06-22monthly0.3http://127.0.0.1:8000/products/8522019-06-22monthly0.3http://127.0.0.1:8000/products/8532019-06-22monthly0.3http://127.0.0.1:8000/products/8542019-06-22monthly0.3http://127.0.0.1:8000/products/8552019-06-22monthly0.3http://127.0.0.1:8000/products/8562019-06-22monthly0.3http://127.0.0.1:8000/products/8572019-06-22monthly0.3http://127.0.0.1:8000/products/8582019-06-22monthly0.3http://127.0.0.1:8000/products/8592019-06-22monthly0.3http://127.0.0.1:8000/products/8602019-06-22monthly0.3http://127.0.0.1:8000/products/8612019-06-22monthly0.3http://127.0.0.1:8000/products/8622019-06-22monthly0.3http://127.0.0.1:8000/products/8632019-06-22monthly0.3http://127.0.0.1:8000/products/8642019-06-22monthly0.3http://127.0.0.1:8000/products/8652019-06-22monthly0.3http://127.0.0.1:8000/products/8662019-06-22monthly0.3http://127.0.0.1:8000/products/8672019-06-22monthly0.3http://127.0.0.1:8000/products/8682019-06-22monthly0.3http://127.0.0.1:8000/products/8692019-06-22monthly0.3http://127.0.0.1:8000/products/8702019-06-22monthly0.3http://127.0.0.1:8000/products/8712019-06-22monthly0.3http://127.0.0.1:8000/products/8722019-06-22monthly0.3http://127.0.0.1:8000/products/8732019-06-22monthly0.3http://127.0.0.1:8000/products/8742019-06-22monthly0.3http://127.0.0.1:8000/products/8752019-06-22monthly0.3http://127.0.0.1:8000/products/8762019-06-22monthly0.3http://127.0.0.1:8000/products/8772019-06-22monthly0.3http://127.0.0.1:8000/products/8782019-06-22monthly0.3http://127.0.0.1:8000/products/8792019-06-22monthly0.3http://127.0.0.1:8000/products/8802019-06-22monthly0.3http://127.0.0.1:8000/products/8812019-06-22monthly0.3http://127.0.0.1:8000/products/8822019-06-22monthly0.3http://127.0.0.1:8000/products/8832019-06-22monthly0.3http://127.0.0.1:8000/products/8842019-06-22monthly0.3http://127.0.0.1:8000/products/8852019-06-22monthly0.3http://127.0.0.1:8000/products/8862019-06-22monthly0.3http://127.0.0.1:8000/products/8872019-06-22monthly0.3http://127.0.0.1:8000/products/8882019-06-22monthly0.3http://127.0.0.1:8000/products/8892019-06-22monthly0.3http://127.0.0.1:8000/products/8902019-06-22monthly0.3http://127.0.0.1:8000/products/8912019-06-22monthly0.3http://127.0.0.1:8000/products/8922019-06-22monthly0.3http://127.0.0.1:8000/products/8932019-06-22monthly0.3http://127.0.0.1:8000/products/8942019-06-22monthly0.3http://127.0.0.1:8000/products/8952019-06-22monthly0.3http://127.0.0.1:8000/products/8962019-06-22monthly0.3http://127.0.0.1:8000/products/8972019-06-22monthly0.3http://127.0.0.1:8000/products/8982019-06-22monthly0.3http://127.0.0.1:8000/products/8992019-06-22monthly0.3http://127.0.0.1:8000/products/9002019-06-22monthly0.3http://127.0.0.1:8000/products/9012019-06-22monthly0.3http://127.0.0.1:8000/products/9022019-06-22monthly0.3http://127.0.0.1:8000/products/9032019-06-22monthly0.3http://127.0.0.1:8000/products/9042019-06-22monthly0.3http://127.0.0.1:8000/products/9052019-06-22monthly0.3http://127.0.0.1:8000/products/9062019-06-22monthly0.3http://127.0.0.1:8000/products/9072019-06-22monthly0.3http://127.0.0.1:8000/products/9082019-06-22monthly0.3http://127.0.0.1:8000/products/9092019-06-22monthly0.3http://127.0.0.1:8000/products/9102019-06-22monthly0.3http://127.0.0.1:8000/products/9112019-06-22monthly0.3http://127.0.0.1:8000/products/9122019-06-22monthly0.3http://127.0.0.1:8000/products/9132019-06-22monthly0.3http://127.0.0.1:8000/products/9142019-06-22monthly0.3http://127.0.0.1:8000/products/9152019-06-22monthly0.3http://127.0.0.1:8000/products/9162019-06-22monthly0.3http://127.0.0.1:8000/products/9172019-06-22monthly0.3http://127.0.0.1:8000/products/9182019-06-22monthly0.3http://127.0.0.1:8000/products/9192019-06-22monthly0.3http://127.0.0.1:8000/products/9202019-06-22monthly0.3http://127.0.0.1:8000/products/9212019-06-22monthly0.3http://127.0.0.1:8000/products/9222019-06-22monthly0.3http://127.0.0.1:8000/products/9232019-06-22monthly0.3http://127.0.0.1:8000/products/9242019-06-22monthly0.3http://127.0.0.1:8000/products/9252019-06-22monthly0.3http://127.0.0.1:8000/products/9262019-06-22monthly0.3http://127.0.0.1:8000/products/9272019-06-22monthly0.3http://127.0.0.1:8000/products/9282019-06-22monthly0.3http://127.0.0.1:8000/products/9292019-06-22monthly0.3http://127.0.0.1:8000/products/9302019-06-22monthly0.3http://127.0.0.1:8000/products/9312019-06-22monthly0.3http://127.0.0.1:8000/products/9322019-06-22monthly0.3http://127.0.0.1:8000/products/9332019-06-22monthly0.3http://127.0.0.1:8000/products/9342019-06-22monthly0.3http://127.0.0.1:8000/products/9352019-06-22monthly0.3http://127.0.0.1:8000/products/9362019-06-22monthly0.3http://127.0.0.1:8000/products/9372019-06-22monthly0.3http://127.0.0.1:8000/products/9382019-06-22monthly0.3http://127.0.0.1:8000/products/9392019-06-22monthly0.3http://127.0.0.1:8000/products/9402019-06-22monthly0.3http://127.0.0.1:8000/products/9412019-06-22monthly0.3http://127.0.0.1:8000/products/9422019-06-22monthly0.3http://127.0.0.1:8000/products/9432019-06-22monthly0.3http://127.0.0.1:8000/products/9442019-06-22monthly0.3http://127.0.0.1:8000/products/9452019-06-22monthly0.3http://127.0.0.1:8000/products/9462019-06-22monthly0.3http://127.0.0.1:8000/products/9472019-06-22monthly0.3http://127.0.0.1:8000/products/9482019-06-22monthly0.3http://127.0.0.1:8000/products/9492019-06-22monthly0.3http://127.0.0.1:8000/products/9502019-06-22monthly0.3http://127.0.0.1:8000/products/9512019-06-22monthly0.3http://127.0.0.1:8000/products/9522019-06-22monthly0.3http://127.0.0.1:8000/products/9532019-06-22monthly0.3http://127.0.0.1:8000/products/9542019-06-22monthly0.3http://127.0.0.1:8000/products/9552019-06-22monthly0.3http://127.0.0.1:8000/products/9562019-06-22monthly0.3http://127.0.0.1:8000/products/9572019-06-22monthly0.3http://127.0.0.1:8000/products/9582019-06-22monthly0.3http://127.0.0.1:8000/products/9592019-06-22monthly0.3http://127.0.0.1:8000/products/9602019-06-22monthly0.3http://127.0.0.1:8000/products/9612019-06-22monthly0.3http://127.0.0.1:8000/products/9622019-06-22monthly0.3http://127.0.0.1:8000/products/9632019-06-22monthly0.3http://127.0.0.1:8000/products/9642019-06-22monthly0.3http://127.0.0.1:8000/products/9652019-06-22monthly0.3http://127.0.0.1:8000/products/9662019-06-22monthly0.3http://127.0.0.1:8000/products/9672019-06-22monthly0.3http://127.0.0.1:8000/products/9682019-06-22monthly0.3http://127.0.0.1:8000/products/9692019-06-22monthly0.3http://127.0.0.1:8000/products/9702019-06-22monthly0.3http://127.0.0.1:8000/products/9712019-06-22monthly0.3http://127.0.0.1:8000/products/9722019-06-22monthly0.3http://127.0.0.1:8000/products/9732019-06-22monthly0.3http://127.0.0.1:8000/products/9742019-06-22monthly0.3http://127.0.0.1:8000/products/9752019-06-22monthly0.3http://127.0.0.1:8000/products/9762019-06-22monthly0.3http://127.0.0.1:8000/products/9772019-06-22monthly0.3http://127.0.0.1:8000/products/9782019-06-22monthly0.3http://127.0.0.1:8000/products/9792019-06-22monthly0.3http://127.0.0.1:8000/products/9802019-06-22monthly0.3http://127.0.0.1:8000/products/9812019-06-22monthly0.3http://127.0.0.1:8000/products/9822019-06-22monthly0.3http://127.0.0.1:8000/products/9832019-06-22monthly0.3http://127.0.0.1:8000/products/9842019-06-22monthly0.3http://127.0.0.1:8000/products/9852019-06-22monthly0.3http://127.0.0.1:8000/products/9862019-06-22monthly0.3http://127.0.0.1:8000/products/9872019-06-22monthly0.3http://127.0.0.1:8000/products/9882019-06-22monthly0.3http://127.0.0.1:8000/products/9892019-06-22monthly0.3http://127.0.0.1:8000/products/9902019-06-22monthly0.3http://127.0.0.1:8000/products/9912019-06-22monthly0.3http://127.0.0.1:8000/products/9922019-06-22monthly0.3http://127.0.0.1:8000/products/9932019-06-22monthly0.3http://127.0.0.1:8000/products/9942019-06-22monthly0.3http://127.0.0.1:8000/products/9952019-06-22monthly0.3http://127.0.0.1:8000/products/9962019-06-22monthly0.3http://127.0.0.1:8000/products/9972019-06-22monthly0.3http://127.0.0.1:8000/products/9982019-06-22monthly0.3http://127.0.0.1:8000/products/9992019-06-22monthly0.3 \ No newline at end of file diff --git a/xml-sitemap/controllers/default.js b/xml-sitemap/controllers/default.js index 08cf2b0..007b897 100644 --- a/xml-sitemap/controllers/default.js +++ b/xml-sitemap/controllers/default.js @@ -1,7 +1,7 @@ exports.install = function() { - F.route('/', view_index); - F.file('sitemap.xml', file_xml); -} + ROUTE('/', view_index); + FILE('sitemap.xml', file_xml); +}; function view_index() { var self = this; @@ -10,9 +10,8 @@ function view_index() { function file_xml(req, res) { - var self = this; var hostname = req.hostname(); - var lastmod = new Date().format('yyyy-MM-dd'); + var lastmod = NOW.format('yyyy-MM-dd'); var write = function(url, lastmod, priority, changefreq) { var str = '' + url.encode() + '' + lastmod + '' + changefreq + '' + priority + ''; From db2ac9cf7b31b0ae512ebd78428519ca5d2911b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20S=CC=8Cirka?= Date: Fri, 28 Jun 2019 10:04:48 +0200 Subject: [PATCH 071/157] New improvements. --- image-resize/config | 7 + image-resize/controllers/default.js | 13 +- image-watermark/config.config | 7 + image-watermark/controllers/default.js | 5 +- mysql/controllers/default.js | 17 +- mysql/definitions/mysql.js | 4 +- mysql/views/index.html | 6 +- pagination/controllers/default.js | 6 +- .../controllers/default.js | 23 - .../definitions/passport.js | 35 - passport.js-bearer-local/index.js | 16 - passport.js-bearer-local/readme.md | 5 - passport.js-bearer-local/views/homepage.html | 23 - passport.js/config | 3 - passport.js/controllers/default.js | 37 - passport.js/definitions/modules.js | 2 - passport.js/definitions/passport.js | 16 - passport.js/index.js | 16 - passport.js/readme.md | 4 - passport.js/views/index.html | 27 - paypal/config-debug | 10 - paypal/controllers/default.js | 62 - paypal/index.js | 16 - paypal/public/img/button.gif | Bin 1843 -> 0 bytes paypal/readme.md | 3 - paypal/views/index.html | 19 - .../bower_components/core-ajax/.bower.json | 22 - polymer/bower_components/core-ajax/README.md | 4 - polymer/bower_components/core-ajax/bower.json | 11 - .../bower_components/core-ajax/core-ajax.html | 434 - .../bower_components/core-ajax/core-xhr.html | 116 - .../core-ajax/demo-progress.html | 65 - polymer/bower_components/core-ajax/demo.html | 43 - polymer/bower_components/core-ajax/index.html | 22 - .../bower_components/core-ajax/metadata.html | 23 - .../core-ajax/test/core-ajax-progress.html | 108 - .../core-ajax/test/core-ajax-race.html | 81 - .../core-ajax/test/core-ajax.html | 287 - .../core-ajax/test/index.html | 17 - .../core-component-page/.bower.json | 19 - .../core-component-page/README.md | 6 - .../core-component-page/bowager-logo.png | Bin 5165 -> 0 bytes .../core-component-page/bower.json | 9 - .../core-component-page.html | 37 - .../core-component-page/demo.html | 23 - .../core-component-page/index.html | 22 - .../bower_components/core-icon/.bower.json | 19 - polymer/bower_components/core-icon/README.md | 4 - polymer/bower_components/core-icon/bower.json | 9 - .../bower_components/core-icon/core-icon.css | 16 - .../bower_components/core-icon/core-icon.html | 201 - polymer/bower_components/core-icon/demo.html | 44 - polymer/bower_components/core-icon/index.html | 22 - .../bower_components/core-icon/metadata.html | 21 - .../bower_components/core-icons/.bower.json | 24 - .../bower_components/core-icons/.gitignore | 2 - polymer/bower_components/core-icons/README.md | 8 - .../bower_components/core-icons/av-icons.html | 65 - .../bower_components/core-icons/bower.json | 14 - .../core-icons/communication-icons.html | 54 - .../core-icons/core-icons.html | 278 - polymer/bower_components/core-icons/demo.html | 98 - .../core-icons/device-icons.html | 90 - .../core-icons/editor-icons.html | 67 - .../core-icons/hardware-icons.html | 56 - .../core-icons/image-icons.html | 152 - .../bower_components/core-icons/index.html | 22 - .../core-icons/maps-icons.html | 70 - .../core-icons/notification-icons.html | 49 - .../core-icons/social-icons.html | 39 - .../core-iconset-svg/.bower.json | 19 - .../core-iconset-svg/README.md | 4 - .../core-iconset-svg/bower.json | 9 - .../core-iconset-svg/core-iconset-svg.html | 168 - .../core-iconset-svg/demo.html | 66 - .../core-iconset-svg/index.html | 22 - .../core-iconset-svg/svg-sample-icons.html | 68 - .../bower_components/core-iconset/.bower.json | 20 - .../bower_components/core-iconset/README.md | 4 - .../bower_components/core-iconset/bower.json | 10 - .../core-iconset/core-iconset.html | 241 - .../bower_components/core-iconset/demo.html | 62 - .../bower_components/core-iconset/index.html | 22 - .../core-iconset/my-icons-big.png | Bin 35734 -> 0 bytes .../core-iconset/my-icons.png | Bin 2653 -> 0 bytes .../bower_components/core-meta/.bower.json | 18 - polymer/bower_components/core-meta/README.md | 4 - polymer/bower_components/core-meta/bower.json | 8 - .../bower_components/core-meta/core-meta.html | 145 - polymer/bower_components/core-meta/demo.html | 58 - polymer/bower_components/core-meta/index.html | 22 - .../bower_components/font-roboto/.bower.json | 14 - .../bower_components/font-roboto/roboto.html | 9 - .../bower_components/paper-ripple/.bower.json | 24 - .../bower_components/paper-ripple/README.md | 4 - .../bower_components/paper-ripple/bower.json | 13 - .../bower_components/paper-ripple/demo.html | 414 - .../bower_components/paper-ripple/index.html | 22 - .../paper-ripple/metadata.html | 20 - .../paper-ripple/paper-ripple.html | 477 - .../paper-ripple/test/index.html | 24 - .../paper-ripple/test/position.html | 109 - polymer/bower_components/polymer/.bower.json | 32 - polymer/bower_components/polymer/README.md | 21 - polymer/bower_components/polymer/bower.json | 23 - polymer/bower_components/polymer/layout.html | 286 - polymer/bower_components/polymer/polymer.html | 12 - polymer/bower_components/polymer/polymer.js | 11859 ---------------- .../bower_components/polymer/polymer.min.js | 14 - .../webcomponentsjs/.bower.json | 23 - .../webcomponentsjs/CustomElements.js | 634 - .../webcomponentsjs/CustomElements.min.js | 11 - .../webcomponentsjs/HTMLImports.js | 764 - .../webcomponentsjs/HTMLImports.min.js | 11 - .../webcomponentsjs/README.md | 73 - .../webcomponentsjs/ShadowDOM.js | 4277 ------ .../webcomponentsjs/ShadowDOM.min.js | 13 - .../webcomponentsjs/bower.json | 14 - .../webcomponentsjs/package.json | 31 - .../webcomponentsjs/webcomponents-lite.js | 1728 --- .../webcomponentsjs/webcomponents-lite.min.js | 11 - .../webcomponentsjs/webcomponents.js | 6114 -------- .../webcomponentsjs/webcomponents.min.js | 14 - polymer/config | 2 - polymer/controllers/default.js | 4 - polymer/index.js | 16 - polymer/readme.md | 6 - postgresql/controllers/default.js | 21 +- postgresql/definitions/postgresql.js | 3 +- postgresql/readme.md | 2 +- problems/controllers/default.js | 34 - problems/definitions/problem.js | 13 - problems/index.js | 16 - redirect-host/controllers/default.js | 2 +- redirect-host/definitions/redirect.js | 2 +- request-to-response/controllers/default.js | 8 +- routing-flags-roles/controllers/default.js | 31 - .../definitions/authorization.js | 12 - routing-flags-roles/index.js | 16 - routing-flags/controllers/default.js | 85 - routing-flags/index.js | 16 - routing-generators/controllers/default.js | 12 - routing-generators/databases/users.json | 1 - routing-generators/index.js | 16 - routing-generators/views/index.html | 7 - routing-inline/index.js | 2 +- routing-resize/config.config | 7 + routing-resize/controllers/default.js | 2 +- routing-resize/definitions/resize.js | 18 +- routing-subdomain/controllers/default.js | 12 +- routing-timeout/controllers/default.js | 14 +- routing/controllers/default.js | 28 +- scheduler/controllers/default.js | 26 +- server-sent-events/controllers/default.js | 8 +- session/controllers/default.js | 18 - session/definitions/modules.js | 2 - session/index.js | 7 - session/views/index.html | 24 - sitemap/controllers/default.js | 8 +- sitemap/views/layout.html | 2 - static-crossdomain/config-debug | 7 - static-crossdomain/controllers/default.js | 3 - static-crossdomain/index.js | 16 - static-crossdomain/views/index.html | 3 - static-crossdomain/views/layout.html | 17 - static-file-handling/controllers/default.js | 6 +- static-file-handling/views/index.html | 2 +- static-file-merge/controllers/default.js | 8 +- static-file-merge/definitions/merge.js | 4 +- .../views/{homepage.html => index.html} | 0 static-version/controllers/default.js | 2 +- static-version/versions | 6 +- streamer/index.js | 14 +- themes/controllers/default.js | 2 +- upload-multipart/controllers/default.js | 4 +- validation/controllers/default.js | 11 +- validation/models/contact.js | 20 +- validation/views/index.html | 39 +- validation/views/layout.html | 2 +- video-streaming/controllers/default.js | 2 +- video-streaming/views/index.html | 4 +- views-custom-helper/controllers/default.js | 2 +- views-custom-helper/definitions/helpers.js | 11 +- views-head/controllers/default.js | 4 +- .../controllers/default.js | 2 +- views-meta/controllers/default.js | 9 +- views-place-sections/controllers/default.js | 2 +- views-websocket/controllers/default.js | 6 +- views-xhr/controllers/default.js | 4 +- views-xhr/definitions/controller.js | 7 +- views-xhr/views/layout.html | 34 +- views/controllers/default.js | 4 +- views/controllers/products.js | 4 +- views/controllers/users.js | 8 +- views/views/index.html | 6 +- vue/controllers/default.js | 7 +- waiting/index.js | 5 +- webrtc/controllers/default.js | 48 +- 198 files changed, 232 insertions(+), 31826 deletions(-) create mode 100644 image-resize/config create mode 100644 image-watermark/config.config delete mode 100644 passport.js-bearer-local/controllers/default.js delete mode 100644 passport.js-bearer-local/definitions/passport.js delete mode 100644 passport.js-bearer-local/index.js delete mode 100644 passport.js-bearer-local/readme.md delete mode 100644 passport.js-bearer-local/views/homepage.html delete mode 100644 passport.js/config delete mode 100644 passport.js/controllers/default.js delete mode 100644 passport.js/definitions/modules.js delete mode 100644 passport.js/definitions/passport.js delete mode 100644 passport.js/index.js delete mode 100644 passport.js/readme.md delete mode 100644 passport.js/views/index.html delete mode 100644 paypal/config-debug delete mode 100644 paypal/controllers/default.js delete mode 100644 paypal/index.js delete mode 100644 paypal/public/img/button.gif delete mode 100644 paypal/readme.md delete mode 100644 paypal/views/index.html delete mode 100644 polymer/bower_components/core-ajax/.bower.json delete mode 100644 polymer/bower_components/core-ajax/README.md delete mode 100644 polymer/bower_components/core-ajax/bower.json delete mode 100644 polymer/bower_components/core-ajax/core-ajax.html delete mode 100644 polymer/bower_components/core-ajax/core-xhr.html delete mode 100644 polymer/bower_components/core-ajax/demo-progress.html delete mode 100644 polymer/bower_components/core-ajax/demo.html delete mode 100644 polymer/bower_components/core-ajax/index.html delete mode 100644 polymer/bower_components/core-ajax/metadata.html delete mode 100644 polymer/bower_components/core-ajax/test/core-ajax-progress.html delete mode 100644 polymer/bower_components/core-ajax/test/core-ajax-race.html delete mode 100644 polymer/bower_components/core-ajax/test/core-ajax.html delete mode 100644 polymer/bower_components/core-ajax/test/index.html delete mode 100644 polymer/bower_components/core-component-page/.bower.json delete mode 100644 polymer/bower_components/core-component-page/README.md delete mode 100644 polymer/bower_components/core-component-page/bowager-logo.png delete mode 100644 polymer/bower_components/core-component-page/bower.json delete mode 100644 polymer/bower_components/core-component-page/core-component-page.html delete mode 100644 polymer/bower_components/core-component-page/demo.html delete mode 100644 polymer/bower_components/core-component-page/index.html delete mode 100644 polymer/bower_components/core-icon/.bower.json delete mode 100644 polymer/bower_components/core-icon/README.md delete mode 100644 polymer/bower_components/core-icon/bower.json delete mode 100644 polymer/bower_components/core-icon/core-icon.css delete mode 100644 polymer/bower_components/core-icon/core-icon.html delete mode 100644 polymer/bower_components/core-icon/demo.html delete mode 100644 polymer/bower_components/core-icon/index.html delete mode 100644 polymer/bower_components/core-icon/metadata.html delete mode 100644 polymer/bower_components/core-icons/.bower.json delete mode 100644 polymer/bower_components/core-icons/.gitignore delete mode 100644 polymer/bower_components/core-icons/README.md delete mode 100644 polymer/bower_components/core-icons/av-icons.html delete mode 100644 polymer/bower_components/core-icons/bower.json delete mode 100644 polymer/bower_components/core-icons/communication-icons.html delete mode 100644 polymer/bower_components/core-icons/core-icons.html delete mode 100644 polymer/bower_components/core-icons/demo.html delete mode 100644 polymer/bower_components/core-icons/device-icons.html delete mode 100644 polymer/bower_components/core-icons/editor-icons.html delete mode 100644 polymer/bower_components/core-icons/hardware-icons.html delete mode 100644 polymer/bower_components/core-icons/image-icons.html delete mode 100644 polymer/bower_components/core-icons/index.html delete mode 100644 polymer/bower_components/core-icons/maps-icons.html delete mode 100644 polymer/bower_components/core-icons/notification-icons.html delete mode 100644 polymer/bower_components/core-icons/social-icons.html delete mode 100644 polymer/bower_components/core-iconset-svg/.bower.json delete mode 100644 polymer/bower_components/core-iconset-svg/README.md delete mode 100644 polymer/bower_components/core-iconset-svg/bower.json delete mode 100644 polymer/bower_components/core-iconset-svg/core-iconset-svg.html delete mode 100644 polymer/bower_components/core-iconset-svg/demo.html delete mode 100644 polymer/bower_components/core-iconset-svg/index.html delete mode 100644 polymer/bower_components/core-iconset-svg/svg-sample-icons.html delete mode 100644 polymer/bower_components/core-iconset/.bower.json delete mode 100644 polymer/bower_components/core-iconset/README.md delete mode 100644 polymer/bower_components/core-iconset/bower.json delete mode 100644 polymer/bower_components/core-iconset/core-iconset.html delete mode 100644 polymer/bower_components/core-iconset/demo.html delete mode 100644 polymer/bower_components/core-iconset/index.html delete mode 100644 polymer/bower_components/core-iconset/my-icons-big.png delete mode 100644 polymer/bower_components/core-iconset/my-icons.png delete mode 100644 polymer/bower_components/core-meta/.bower.json delete mode 100644 polymer/bower_components/core-meta/README.md delete mode 100644 polymer/bower_components/core-meta/bower.json delete mode 100644 polymer/bower_components/core-meta/core-meta.html delete mode 100644 polymer/bower_components/core-meta/demo.html delete mode 100644 polymer/bower_components/core-meta/index.html delete mode 100644 polymer/bower_components/font-roboto/.bower.json delete mode 100644 polymer/bower_components/font-roboto/roboto.html delete mode 100644 polymer/bower_components/paper-ripple/.bower.json delete mode 100644 polymer/bower_components/paper-ripple/README.md delete mode 100644 polymer/bower_components/paper-ripple/bower.json delete mode 100644 polymer/bower_components/paper-ripple/demo.html delete mode 100644 polymer/bower_components/paper-ripple/index.html delete mode 100644 polymer/bower_components/paper-ripple/metadata.html delete mode 100644 polymer/bower_components/paper-ripple/paper-ripple.html delete mode 100644 polymer/bower_components/paper-ripple/test/index.html delete mode 100644 polymer/bower_components/paper-ripple/test/position.html delete mode 100644 polymer/bower_components/polymer/.bower.json delete mode 100644 polymer/bower_components/polymer/README.md delete mode 100644 polymer/bower_components/polymer/bower.json delete mode 100644 polymer/bower_components/polymer/layout.html delete mode 100644 polymer/bower_components/polymer/polymer.html delete mode 100644 polymer/bower_components/polymer/polymer.js delete mode 100644 polymer/bower_components/polymer/polymer.min.js delete mode 100644 polymer/bower_components/webcomponentsjs/.bower.json delete mode 100644 polymer/bower_components/webcomponentsjs/CustomElements.js delete mode 100644 polymer/bower_components/webcomponentsjs/CustomElements.min.js delete mode 100644 polymer/bower_components/webcomponentsjs/HTMLImports.js delete mode 100644 polymer/bower_components/webcomponentsjs/HTMLImports.min.js delete mode 100644 polymer/bower_components/webcomponentsjs/README.md delete mode 100644 polymer/bower_components/webcomponentsjs/ShadowDOM.js delete mode 100644 polymer/bower_components/webcomponentsjs/ShadowDOM.min.js delete mode 100644 polymer/bower_components/webcomponentsjs/bower.json delete mode 100644 polymer/bower_components/webcomponentsjs/package.json delete mode 100644 polymer/bower_components/webcomponentsjs/webcomponents-lite.js delete mode 100644 polymer/bower_components/webcomponentsjs/webcomponents-lite.min.js delete mode 100644 polymer/bower_components/webcomponentsjs/webcomponents.js delete mode 100644 polymer/bower_components/webcomponentsjs/webcomponents.min.js delete mode 100644 polymer/config delete mode 100644 polymer/controllers/default.js delete mode 100644 polymer/index.js delete mode 100644 polymer/readme.md delete mode 100644 problems/controllers/default.js delete mode 100644 problems/definitions/problem.js delete mode 100644 problems/index.js delete mode 100644 routing-flags-roles/controllers/default.js delete mode 100644 routing-flags-roles/definitions/authorization.js delete mode 100644 routing-flags-roles/index.js delete mode 100644 routing-flags/controllers/default.js delete mode 100644 routing-flags/index.js delete mode 100644 routing-generators/controllers/default.js delete mode 100644 routing-generators/databases/users.json delete mode 100644 routing-generators/index.js delete mode 100644 routing-generators/views/index.html create mode 100644 routing-resize/config.config delete mode 100644 session/controllers/default.js delete mode 100644 session/definitions/modules.js delete mode 100644 session/index.js delete mode 100644 session/views/index.html delete mode 100644 static-crossdomain/config-debug delete mode 100644 static-crossdomain/controllers/default.js delete mode 100644 static-crossdomain/index.js delete mode 100644 static-crossdomain/views/index.html delete mode 100644 static-crossdomain/views/layout.html rename static-file-merge/views/{homepage.html => index.html} (100%) diff --git a/image-resize/config b/image-resize/config new file mode 100644 index 0000000..e6cd023 --- /dev/null +++ b/image-resize/config @@ -0,0 +1,7 @@ +// Default image convertor is GraphicsMagick + +// IMPORTANT: uncomment the line below if you want to use ImageMagick < 7 +// default_image_converter : im + +// Or ImageMagick 7 +// default_image_converter. : magick \ No newline at end of file diff --git a/image-resize/controllers/default.js b/image-resize/controllers/default.js index c0d1a10..083cfaf 100644 --- a/image-resize/controllers/default.js +++ b/image-resize/controllers/default.js @@ -1,5 +1,3 @@ -var Path = require('path'); - exports.install = function() { ROUTE('GET /', view_index); @@ -31,18 +29,15 @@ function view_index() { var filename = PATH.public('upload.jpg'); // Documentation: http://docs.totaljs.com/FrameworkImage/ - var image = file.image(); // this is equivalent to require('partail.js/image').init([useImageMagick]); - - // require('total.js/image').init(filename, [useImageMagick]); - // file.image([useImageMagick]); + var image = file.image(); // image.identify(function(err, info) { info.width, info.heigth }); // image.resize(w, h, options); - // image.resizeCenter(w, h); :: resize(w, h, '^').align('center center').crop(w, h); + // image.resize_center(w, h); or resize(w, h, '^').align('center center').crop(w, h); // image.crop(w, h, x, y); // image.scale(w, h); // image.quality(percentage); - // image.align(type); :: left-top left-bottom left-center right-top right-bottom right-center top-center bottom-center center-center + // image.align(type); --> left-top left-bottom left-center right-top right-bottom right-center top-center bottom-center center-center // image.blur(radius); // image.normalize(); // image.rotate(deg); @@ -55,7 +50,7 @@ function view_index() { // image.command(command, [priority]); // IMPORTANT: see here https://github.com/petersirka/total.js/tree/master/examples/routing - image.resizeCenter(300, 300).save(filename, function(err) { + image.resize_center(300, 300).save(filename, function(err) { if (err) { self.throw500(err); diff --git a/image-watermark/config.config b/image-watermark/config.config new file mode 100644 index 0000000..e6cd023 --- /dev/null +++ b/image-watermark/config.config @@ -0,0 +1,7 @@ +// Default image convertor is GraphicsMagick + +// IMPORTANT: uncomment the line below if you want to use ImageMagick < 7 +// default_image_converter : im + +// Or ImageMagick 7 +// default_image_converter. : magick \ No newline at end of file diff --git a/image-watermark/controllers/default.js b/image-watermark/controllers/default.js index 98796ce..96e42bf 100644 --- a/image-watermark/controllers/default.js +++ b/image-watermark/controllers/default.js @@ -26,13 +26,10 @@ function view_index() { var filename = PATH.public('upload.jpg'); - // Documentation: http://docs.totaljs.com/FrameworkImage/ var image = file.image(); image.watermark(PATH.public('watermark.png'), 20, 80, 100, 40); - - // IMPORTANT: see here https://github.com/petersirka/total.js/tree/master/examples/routing - image.resizeCenter(300, 300).save(filename, function(err) { + image.resize_center(300, 300).save(filename, function(err) { if (err) { self.throw500(err); diff --git a/mysql/controllers/default.js b/mysql/controllers/default.js index a1f7e3a..dfc7791 100755 --- a/mysql/controllers/default.js +++ b/mysql/controllers/default.js @@ -1,5 +1,5 @@ exports.install = function() { - F.route('/', view_index); + ROUTE('/', view_index); }; function view_index() { @@ -7,19 +7,20 @@ function view_index() { var self = this; // definitions/mysql.js - // create a DB connection - DB(function(err, connection){ + // create a DB conn - if(err != null) { + FUNC.mysql(function(err, conn) { + + if (err != null) { self.throw500(err); return; } - // Table schema = { Id: Number, Age: Number, Name: String }; - connection.query('SELECT * FROM users', function(err, rows) { + // Table schema = { id: Number, age: Number, name: String }; + conn.query('SELECT * FROM users', function(err, rows) { - // Close connection - connection.release(); + // Close the connection + conn.release(); if (err != null) { self.view500(err); diff --git a/mysql/definitions/mysql.js b/mysql/definitions/mysql.js index c6009c0..957de7f 100755 --- a/mysql/definitions/mysql.js +++ b/mysql/definitions/mysql.js @@ -3,6 +3,8 @@ var pool = mysql.createPool({ host: 'example.org', user: 'bob', password: 'secre // override the framework prototype // use CONFIG files for connection string -F.database = function(callback) { +// "FUNC." is a global variable defined in Total.js + +FUNC.mysql = function(callback) { return pool.getConnection(callback); }; \ No newline at end of file diff --git a/mysql/views/index.html b/mysql/views/index.html index 7662473..b188afa 100755 --- a/mysql/views/index.html +++ b/mysql/views/index.html @@ -7,9 +7,9 @@ @{foreach var m in model} - @{m.Id} - @{m.Age} - @{m.Name} + @{m.id} + @{m.age} + @{m.name} @{end} \ No newline at end of file diff --git a/pagination/controllers/default.js b/pagination/controllers/default.js index 98d9a12..07d78cb 100644 --- a/pagination/controllers/default.js +++ b/pagination/controllers/default.js @@ -1,14 +1,12 @@ exports.install = function() { - F.route('/', view_index); + ROUTE('/', view_index); }; function view_index() { var self = this; - var products = 1000; var page = (self.query.page || '10').parseInt(); var perpage = 20; - var pagination = new Builders.Pagination(products, page, perpage, '?page={0}'); - + var pagination = new Pagination(products, page, perpage, '?page={0}'); self.view('index', pagination); } \ No newline at end of file diff --git a/passport.js-bearer-local/controllers/default.js b/passport.js-bearer-local/controllers/default.js deleted file mode 100644 index dd5c568..0000000 --- a/passport.js-bearer-local/controllers/default.js +++ /dev/null @@ -1,23 +0,0 @@ -var passport = require('passport'); - -exports.install = function() { - F.route('/', view_homepage); - F.route('/passport/', passport_login_bearear_callback, ['#passport.js']); -}; - -function view_homepage() { - var self = this; - self.view('homepage'); -} - -function passport_login_bearear_callback() { - var self = this; - passport.authenticate('bearer', { session: false })(self.req, self.res, function(err) { - - // if err = passport answers automatically - if (err) - return; - - self.json(self.user); - }); -} \ No newline at end of file diff --git a/passport.js-bearer-local/definitions/passport.js b/passport.js-bearer-local/definitions/passport.js deleted file mode 100644 index 7967df9..0000000 --- a/passport.js-bearer-local/definitions/passport.js +++ /dev/null @@ -1,35 +0,0 @@ -var passport = require('passport'); -var BearerStrategy = require('passport-http-bearer').Strategy; -var users = [{ id: 1, username: 'bob', token: '123456789', email: 'bob@example.com' }, { id: 2, username: 'joe', token: 'abcdefghi', email: 'joe@example.com' }]; - -function findByToken(token, fn) { - for (var i = 0, len = users.length; i < len; i++) { - var user = users[i]; - if (user.token === token) { - fn(null, user); - return; - } - } - fn(null, null); -} - -passport.use(new BearerStrategy({}, function(token, done) { - setImmediate(function () { - findByToken(token, function(err, user) { - - if (err) { - done(err); - return - } - - if (!user) { - done(null, false); - return; - } - - done(null, user); - }); - }); -})); - -F.middleware('passport.js', passport.initialize()); \ No newline at end of file diff --git a/passport.js-bearer-local/index.js b/passport.js-bearer-local/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/passport.js-bearer-local/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/passport.js-bearer-local/readme.md b/passport.js-bearer-local/readme.md deleted file mode 100644 index ac06a16..0000000 --- a/passport.js-bearer-local/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Installation - -- `npm install passport` -- `npm install passport-http-bearer` -- `npm install passport-local` diff --git a/passport.js-bearer-local/views/homepage.html b/passport.js-bearer-local/views/homepage.html deleted file mode 100644 index 4b8431b..0000000 --- a/passport.js-bearer-local/views/homepage.html +++ /dev/null @@ -1,23 +0,0 @@ -@{layout('')} - - - - - Passport.js - - - - - - - - - - - @{host()}/passport/?access_token=123456789 - - - \ No newline at end of file diff --git a/passport.js/config b/passport.js/config deleted file mode 100644 index 6d7a25e..0000000 --- a/passport.js/config +++ /dev/null @@ -1,3 +0,0 @@ -twitter-key : 1XR69DKARYXqKdPucICQ -twitter-secret : fCnZjLFQ7M8MsNZT4ekVkxiMS8pgwyPk9N6ysmbzEQA -twitter-callback : http://127.0.0.1/login/twitter/callback/ \ No newline at end of file diff --git a/passport.js/controllers/default.js b/passport.js/controllers/default.js deleted file mode 100644 index a97dd04..0000000 --- a/passport.js/controllers/default.js +++ /dev/null @@ -1,37 +0,0 @@ -var passport = require('passport'); - -exports.install = function() { - F.route('/', view_index); - F.route('/login/twitter/', passport_login_twitter, ['#session', '#passport.js']); - F.route('/login/twitter/callback/', passport_login_twitter_callback, ['#session', '#passport.js']); -}; - -function view_index() { - var self = this; - self.view('index'); -} - -// Twitter sign in -function passport_login_twitter() { - var self = this; - - // Why self.custom()? - // Because passport module has own mechanism for redirects into the Twitter. - self.custom(); - - passport.authenticate('twitter')(self.req, self.res); - -} - -// Twitter profile -function passport_login_twitter_callback() { - var self = this; - passport.authenticate('twitter')(self.req, self.res, function(err) { - if (err) - return self.redirect('/login/twitter/'); - - // self.json(self.user); - self.json({ name: self.user.displayName }); - }); - -} \ No newline at end of file diff --git a/passport.js/definitions/modules.js b/passport.js/definitions/modules.js deleted file mode 100644 index e36b5cc..0000000 --- a/passport.js/definitions/modules.js +++ /dev/null @@ -1,2 +0,0 @@ -// Install session module -INSTALL('module', 'http://modules.totaljs.com/session/v1.00/session.js'); \ No newline at end of file diff --git a/passport.js/definitions/passport.js b/passport.js/definitions/passport.js deleted file mode 100644 index 99fed79..0000000 --- a/passport.js/definitions/passport.js +++ /dev/null @@ -1,16 +0,0 @@ -var passport = require('passport'); -var TwitterStrategy = require('passport-twitter').Strategy; - -passport.use(new TwitterStrategy({ consumerKey: CONFIG('twitter-key'), consumerSecret: CONFIG('twitter-secret'), callbackURL: CONFIG('twitter-callback') }, function(token, tokenSecret, profile, done) { - done(null, profile); -})); - -passport.serializeUser(function(user, done) { - done(null, user); -}); - -passport.deserializeUser(function(obj, done) { - done(null, obj); -}); - -F.middleware('passport.js', passport.initialize()); \ No newline at end of file diff --git a/passport.js/index.js b/passport.js/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/passport.js/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/passport.js/readme.md b/passport.js/readme.md deleted file mode 100644 index d45a7f9..0000000 --- a/passport.js/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -# Installation - -- `npm install passport` -- `npm install passport-twitter` diff --git a/passport.js/views/index.html b/passport.js/views/index.html deleted file mode 100644 index c4ece7d..0000000 --- a/passport.js/views/index.html +++ /dev/null @@ -1,27 +0,0 @@ -@{layout('')} - - - - - Passport.js - - - - - - - - - - - -
    - IMPORTANT: Twitter doesn't return (after you logged) a PORT number (127.0.0.1/login/callback/... you must rewrite to -> 127.0.0.1:8000/login/callback/...) - - - \ No newline at end of file diff --git a/paypal/config-debug b/paypal/config-debug deleted file mode 100644 index 23d166b..0000000 --- a/paypal/config-debug +++ /dev/null @@ -1,10 +0,0 @@ -// https://developer.paypal.com/webapps/developer/applications/accounts -// click to e-mail and then click to profile (under e-mail address) and click to API credentials - -paypal-user : ****.gmail.com -paypal-password : **** -paypal-signature : ****.aukr21sQc0PkYL4KZRuxVd - -// domain MUST EXISTS !!!!! -paypal-return : http://yourdomain.com/paypal/ok/ -paypal-cancel : http://yourdomain.com/paypal/no/ \ No newline at end of file diff --git a/paypal/controllers/default.js b/paypal/controllers/default.js deleted file mode 100644 index ab662d1..0000000 --- a/paypal/controllers/default.js +++ /dev/null @@ -1,62 +0,0 @@ -// $ npm install paypal-express-checkout -var paypal = require('paypal-express-checkout'); - -exports.install = function() { - F.route('/'); - F.route('/pay/', redirect_payment); - F.route('/paypal/ok/', view_payment); -}; - -function redirect_payment() { - var self = this; - var payment = paypal.init(CONFIG('paypal-user'), CONFIG('paypal-password'), CONFIG('paypal-signature'), CONFIG('paypal-return'), CONFIG('paypal-cancel'), DEBUG); - - var orderNumber = 100; - var price = 12.23; - - payment.pay(orderNumber, price, 'support', 'EUR', function(err, url) { - if (err) - self.throw500(err); - else - self.redirect(url); - }); -}; - -function view_payment() { - var self = this; - var payment = paypal.init(CONFIG('paypal-user'), CONFIG('paypal-password'), CONFIG('paypal-signature'), CONFIG('paypal-return'), CONFIG('paypal-cancel'), DEBUG); - - payment.detail(self, function(err, data) { - - if (err) { - self.throw500(err); - return; - } - - /* - { - "TOKEN": "EC-2CM91608R1120253F", - "TIMESTAMP": "2013-01-27T10:18:20Z", - "CORRELATIONID": "d5b0e56e2875b", - "ACK": "Success", - "VERSION": "52.0", - "BUILD": "4181146", - "TRANSACTIONID": "5BG30034J7311192A", - "TRANSACTIONTYPE": "expresscheckout", - "PAYMENTTYPE": "instant", - "ORDERTIME": "2013-01-27T10:18:19Z", - "AMT": "12.23", - "TAXAMT": "0.00", - "CURRENCYCODE": "EUR", - "PAYMENTSTATUS": "Pending", - "PENDINGREASON": "multicurrency", - "REASONCODE": "None" - } - */ - - if (data.ACK === 'Success') - console.log('OK'); - - self.json(data); - }); -}; \ No newline at end of file diff --git a/paypal/index.js b/paypal/index.js deleted file mode 100644 index 80dfad6..0000000 --- a/paypal/index.js +++ /dev/null @@ -1,16 +0,0 @@ -// =================================================== -// FOR DEVELOPMENT -// Total.js - framework for Node.js platform -// https://www.totaljs.com -// =================================================== - -const options = {}; - -// options.ip = '127.0.0.1'; -// options.port = parseInt(process.argv[2]); -// options.config = { name: 'Total.js' }; -// options.sleep = 3000; -// options.inspector = 9229; -// options.debugger = 40894; - -require('total.js/debug')(options); \ No newline at end of file diff --git a/paypal/public/img/button.gif b/paypal/public/img/button.gif deleted file mode 100644 index 6302abe10aa8c9c21031b25d4584f09bff8eeb39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1843 zcmZA0dpy$%1IO_h*>V{VDr&B0F%fxeW?N(~ZBmh9J4fn7B6=N~Yv{O~VGPF+4qDEL zh#|9d7;;N8dghwQc{uJGR-AI#?D?IS=hf?Z`o7-(egFOtolje1t~r7Zfj)ykwrJcw zjOSN0jJ>|lvLyd6d6OGoQ8*R}P(=CfQLv=K%>n`H#^HMoqHlaf3mv{k-;4|}!2B2H zxGNreb`RFp6JTKK2QWkjd~wt&3}A`50kC$of)fJN2~?!R*%S7TR?Z%KFmC6J2sZ$R z4$%O-(@hjP$R6+QX5;4IVFQTuw+1+!b9E+N2AsJ-Ad)FxTp^M@J&FJ4BH8mI*?|-e zIOpvLaB`0Vc)0qzQ~q|*k9^waCV=7>v?uZ^@ftbS|GMX%$N<6}KQbUD`g{O2Ha0ql z8W*K$kpKt_OuQSJkbLu0dWcP4Fp3jwLci+E2y_OdQc3Bdl=~5c{0PsK$XhwF(T}1| zC&p#v#iOfeR%N;92D)K$I`&yEK0TSlOuL*!3;H!V{C-|UX_8|@rgwQ-RB2vNW!~MA z@*lfXk+1SFLv+kwzUkXS-0L#qi87;i#aLkhNKzmxEAa*<3~!m1Gf8Pwnrk9k{Lw> zKUL(Xw3epwN(&k|NjUzM<&uepl_}=-T>i`wdwG^Co_W0c=Tqrq*XmOH{MO{|Y{$;~ zH{uU`$%kR-@~m`aNAh7t{CU$91nln?Ku{@2D)D-uaInggt#<5kkLdf(6jgr$lal4} zJZ{%#Iw%sR!;8>!XmBygM)ZUsFFt}7z;w>!nG=gHIoHo)qw99tKazj`w@uvE#>$Z< z733+_RyOP@k-Ov;w?i{j#-WVeSm*0;f2FwU5~2w+)1AbhOsVn0` z=s^w6ZaR#ct>n2S52#e4y zkEi*-4(rE;_Je<;B@(`QrFR>QnkV_f)a{VPT~?ZH#rNds%B!04!g!T%e^Id zfzY2FP*Bnoee4B0KCyGG=5p=RAZhs>1gH$fpj)@B&m97JsMnF8dI>bpDW4@AJj1Sj z;uXYW3*23fiz?X+giaQLZa}PPgCb_;+0lvU z7fQ7P>EJ764`H@~hALc7{wR;akyUCAsRJSEx|?dMa$=Ml##*4hN)|26<9E#K6@F5% z=$gvrBke+__M5k4?S@;d;T-zd-9okWW2L-8{)zfegIhv&%qqUO1vSL5;A_sLTl8Vp z#OvMhB^@#hrTUW_WB#>w*IN*4zoK4})`1u9ySuem9&G#1g81w{%f6i2UGc`7U|UPk zztkA0+ePZi=tl}H5M=WdzBn)*dX@!NMrM551JxOB%ZlG{XxF$PO4Q8JOQ*D}G}7nL zMf>%=dfc_@=^`332V(naAT6%PKsV)=mnWAm6dWEGCFd3sgX~Kj;M<}UJ7x-A^P>#o b$IFOoa?>hKdGxHKxL*va1W9&aFbMx2l;2Y> diff --git a/paypal/readme.md b/paypal/readme.md deleted file mode 100644 index c7d6524..0000000 --- a/paypal/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# Download PayPal module - -- https://github.com/petersirka/node-paypal-express-checkout \ No newline at end of file diff --git a/paypal/views/index.html b/paypal/views/index.html deleted file mode 100644 index 4918a72..0000000 --- a/paypal/views/index.html +++ /dev/null @@ -1,19 +0,0 @@ -@{layout('')} -@{meta('Node.js PayPal Express Checkout')} - - - - - @{meta} - - - - - - - - - - \ No newline at end of file diff --git a/polymer/bower_components/core-ajax/.bower.json b/polymer/bower_components/core-ajax/.bower.json deleted file mode 100644 index 62597c5..0000000 --- a/polymer/bower_components/core-ajax/.bower.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "core-ajax", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5" - }, - "devDependencies": { - "polymer-test-tools": "Polymer/polymer-test-tools#master" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-ajax", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "1898a145ea86a9d71a1601739c8f7c5409cae1ef" - }, - "_source": "git://github.com/Polymer/core-ajax.git", - "_target": "~0.5.5", - "_originalSource": "Polymer/core-ajax", - "_direct": true -} \ No newline at end of file diff --git a/polymer/bower_components/core-ajax/README.md b/polymer/bower_components/core-ajax/README.md deleted file mode 100644 index a0a4145..0000000 --- a/polymer/bower_components/core-ajax/README.md +++ /dev/null @@ -1,4 +0,0 @@ -core-ajax -========= - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-ajax) for more information. diff --git a/polymer/bower_components/core-ajax/bower.json b/polymer/bower_components/core-ajax/bower.json deleted file mode 100644 index b59ed4c..0000000 --- a/polymer/bower_components/core-ajax/bower.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "core-ajax", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5" - }, - "devDependencies": { - "polymer-test-tools": "Polymer/polymer-test-tools#master" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-ajax/core-ajax.html b/polymer/bower_components/core-ajax/core-ajax.html deleted file mode 100644 index 6c6a885..0000000 --- a/polymer/bower_components/core-ajax/core-ajax.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - - diff --git a/polymer/bower_components/core-ajax/core-xhr.html b/polymer/bower_components/core-ajax/core-xhr.html deleted file mode 100644 index ea22804..0000000 --- a/polymer/bower_components/core-ajax/core-xhr.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - diff --git a/polymer/bower_components/core-ajax/demo-progress.html b/polymer/bower_components/core-ajax/demo-progress.html deleted file mode 100644 index da6c11d..0000000 --- a/polymer/bower_components/core-ajax/demo-progress.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - Race condition - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/demo.html b/polymer/bower_components/core-ajax/demo.html deleted file mode 100644 index 24d97a5..0000000 --- a/polymer/bower_components/core-ajax/demo.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - core-ajax - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/index.html b/polymer/bower_components/core-ajax/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-ajax/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/metadata.html b/polymer/bower_components/core-ajax/metadata.html deleted file mode 100644 index 7cad1c5..0000000 --- a/polymer/bower_components/core-ajax/metadata.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/test/core-ajax-progress.html b/polymer/bower_components/core-ajax/test/core-ajax-progress.html deleted file mode 100644 index 7f28a34..0000000 --- a/polymer/bower_components/core-ajax/test/core-ajax-progress.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - core-ajax - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/test/core-ajax-race.html b/polymer/bower_components/core-ajax/test/core-ajax-race.html deleted file mode 100644 index 700ad12..0000000 --- a/polymer/bower_components/core-ajax/test/core-ajax-race.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - core-ajax - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/test/core-ajax.html b/polymer/bower_components/core-ajax/test/core-ajax.html deleted file mode 100644 index ea21f09..0000000 --- a/polymer/bower_components/core-ajax/test/core-ajax.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - core-ajax - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-ajax/test/index.html b/polymer/bower_components/core-ajax/test/index.html deleted file mode 100644 index 93161c3..0000000 --- a/polymer/bower_components/core-ajax/test/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - diff --git a/polymer/bower_components/core-component-page/.bower.json b/polymer/bower_components/core-component-page/.bower.json deleted file mode 100644 index 0a244bd..0000000 --- a/polymer/bower_components/core-component-page/.bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "core-component-page", - "private": true, - "dependencies": { - "webcomponentsjs": "Polymer/webcomponentsjs#^0.5", - "polymer": "Polymer/polymer#^0.5" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-component-page", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "f91588e0297bb3e8e723d4558ab015cf82885571" - }, - "_source": "git://github.com/Polymer/core-component-page.git", - "_target": "^0.5", - "_originalSource": "Polymer/core-component-page" -} \ No newline at end of file diff --git a/polymer/bower_components/core-component-page/README.md b/polymer/bower_components/core-component-page/README.md deleted file mode 100644 index 7cb18ec..0000000 --- a/polymer/bower_components/core-component-page/README.md +++ /dev/null @@ -1,6 +0,0 @@ -core-component-page -=================== - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-component-page) for more information. - -Note: this is the vulcanized version of [`core-component-page-dev`](https://github.com/Polymer/core-component-page-dev) (the source). diff --git a/polymer/bower_components/core-component-page/bowager-logo.png b/polymer/bower_components/core-component-page/bowager-logo.png deleted file mode 100644 index 76be9fb04c197df1ecf6059221f6155516997939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5165 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 bZvPnoTic+%?!_>300000NkvXXu0mjfnNqLt diff --git a/polymer/bower_components/core-component-page/bower.json b/polymer/bower_components/core-component-page/bower.json deleted file mode 100644 index 361124c..0000000 --- a/polymer/bower_components/core-component-page/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "core-component-page", - "private": true, - "dependencies": { - "webcomponentsjs": "Polymer/webcomponentsjs#^0.5", - "polymer": "Polymer/polymer#^0.5" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-component-page/core-component-page.html b/polymer/bower_components/core-component-page/core-component-page.html deleted file mode 100644 index 5c642c7..0000000 --- a/polymer/bower_components/core-component-page/core-component-page.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - diff --git a/polymer/bower_components/core-component-page/demo.html b/polymer/bower_components/core-component-page/demo.html deleted file mode 100644 index 3c414d8..0000000 --- a/polymer/bower_components/core-component-page/demo.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-component-page/index.html b/polymer/bower_components/core-component-page/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-component-page/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icon/.bower.json b/polymer/bower_components/core-icon/.bower.json deleted file mode 100644 index 812e067..0000000 --- a/polymer/bower_components/core-icon/.bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "core-icon", - "private": true, - "dependencies": { - "core-iconset": "Polymer/core-iconset#^0.5", - "core-icons": "Polymer/core-icons#^0.5" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-icon", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "54ea8970f2c517ec8d32fb3dba330209d844596e" - }, - "_source": "git://github.com/Polymer/core-icon.git", - "_target": "^0.5", - "_originalSource": "Polymer/core-icon" -} \ No newline at end of file diff --git a/polymer/bower_components/core-icon/README.md b/polymer/bower_components/core-icon/README.md deleted file mode 100644 index 65d93fb..0000000 --- a/polymer/bower_components/core-icon/README.md +++ /dev/null @@ -1,4 +0,0 @@ -core-icon -========= - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-icon) for more information. diff --git a/polymer/bower_components/core-icon/bower.json b/polymer/bower_components/core-icon/bower.json deleted file mode 100644 index 398a922..0000000 --- a/polymer/bower_components/core-icon/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "core-icon", - "private": true, - "dependencies": { - "core-iconset": "Polymer/core-iconset#^0.5", - "core-icons": "Polymer/core-icons#^0.5" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-icon/core-icon.css b/polymer/bower_components/core-icon/core-icon.css deleted file mode 100644 index 168a5b5..0000000 --- a/polymer/bower_components/core-icon/core-icon.css +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright (c) 2014 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -Code distributed by Google as part of the polymer project is also -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ - -html /deep/ core-icon { - display: inline-block; - vertical-align: middle; - background-repeat: no-repeat; - fill: currentcolor; - position: relative; - height: 24px; - width: 24px; -} \ No newline at end of file diff --git a/polymer/bower_components/core-icon/core-icon.html b/polymer/bower_components/core-icon/core-icon.html deleted file mode 100644 index 18ab203..0000000 --- a/polymer/bower_components/core-icon/core-icon.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - diff --git a/polymer/bower_components/core-icon/demo.html b/polymer/bower_components/core-icon/demo.html deleted file mode 100644 index 995cf1d..0000000 --- a/polymer/bower_components/core-icon/demo.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - core-icon - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icon/index.html b/polymer/bower_components/core-icon/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-icon/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icon/metadata.html b/polymer/bower_components/core-icon/metadata.html deleted file mode 100644 index 08726e9..0000000 --- a/polymer/bower_components/core-icon/metadata.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - diff --git a/polymer/bower_components/core-icons/.bower.json b/polymer/bower_components/core-icons/.bower.json deleted file mode 100644 index ed6c256..0000000 --- a/polymer/bower_components/core-icons/.bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "core-icons", - "private": true, - "dependencies": { - "core-icon": "Polymer/core-icon#^0.5", - "core-iconset-svg": "Polymer/core-iconset-svg#^0.5", - "polymer": "Polymer/polymer#^0.5" - }, - "ignore": [ - "util", - "update-icons.sh" - ], - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-icons", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "19ca6c4529dd99e0d6b2e1e37dae5e621c423667" - }, - "_source": "git://github.com/Polymer/core-icons.git", - "_target": "^0.5", - "_originalSource": "Polymer/core-icons" -} \ No newline at end of file diff --git a/polymer/bower_components/core-icons/.gitignore b/polymer/bower_components/core-icons/.gitignore deleted file mode 100644 index e21a66b..0000000 --- a/polymer/bower_components/core-icons/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -util/node_modules -material-design-icons diff --git a/polymer/bower_components/core-icons/README.md b/polymer/bower_components/core-icons/README.md deleted file mode 100644 index 964ac80..0000000 --- a/polymer/bower_components/core-icons/README.md +++ /dev/null @@ -1,8 +0,0 @@ -core-icons -========= - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-icons) for more information. - -## Building -Running `update-icons.sh` will checkout [material-design-icons](https://github.com/google/material-design-icons), reduce -the fileset to 24px svgs, and compile the iconsets. diff --git a/polymer/bower_components/core-icons/av-icons.html b/polymer/bower_components/core-icons/av-icons.html deleted file mode 100644 index 02bcf17..0000000 --- a/polymer/bower_components/core-icons/av-icons.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/bower.json b/polymer/bower_components/core-icons/bower.json deleted file mode 100644 index c460fc7..0000000 --- a/polymer/bower_components/core-icons/bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "core-icons", - "private": true, - "dependencies": { - "core-icon": "Polymer/core-icon#^0.5", - "core-iconset-svg": "Polymer/core-iconset-svg#^0.5", - "polymer": "Polymer/polymer#^0.5" - }, - "ignore": [ - "util", - "update-icons.sh" - ], - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-icons/communication-icons.html b/polymer/bower_components/core-icons/communication-icons.html deleted file mode 100644 index 72ef096..0000000 --- a/polymer/bower_components/core-icons/communication-icons.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/core-icons.html b/polymer/bower_components/core-icons/core-icons.html deleted file mode 100644 index 9e6b9dd..0000000 --- a/polymer/bower_components/core-icons/core-icons.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/demo.html b/polymer/bower_components/core-icons/demo.html deleted file mode 100644 index 25747cf..0000000 --- a/polymer/bower_components/core-icons/demo.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - core-icons - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/device-icons.html b/polymer/bower_components/core-icons/device-icons.html deleted file mode 100644 index 5185659..0000000 --- a/polymer/bower_components/core-icons/device-icons.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/editor-icons.html b/polymer/bower_components/core-icons/editor-icons.html deleted file mode 100644 index 723655b..0000000 --- a/polymer/bower_components/core-icons/editor-icons.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/hardware-icons.html b/polymer/bower_components/core-icons/hardware-icons.html deleted file mode 100644 index 07f7ec6..0000000 --- a/polymer/bower_components/core-icons/hardware-icons.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/image-icons.html b/polymer/bower_components/core-icons/image-icons.html deleted file mode 100644 index 1fbb139..0000000 --- a/polymer/bower_components/core-icons/image-icons.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/index.html b/polymer/bower_components/core-icons/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-icons/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/maps-icons.html b/polymer/bower_components/core-icons/maps-icons.html deleted file mode 100644 index 34d6430..0000000 --- a/polymer/bower_components/core-icons/maps-icons.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/notification-icons.html b/polymer/bower_components/core-icons/notification-icons.html deleted file mode 100644 index 34b39aa..0000000 --- a/polymer/bower_components/core-icons/notification-icons.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-icons/social-icons.html b/polymer/bower_components/core-icons/social-icons.html deleted file mode 100644 index 708c5c7..0000000 --- a/polymer/bower_components/core-icons/social-icons.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset-svg/.bower.json b/polymer/bower_components/core-iconset-svg/.bower.json deleted file mode 100644 index 48524e8..0000000 --- a/polymer/bower_components/core-iconset-svg/.bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "core-iconset-svg", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5", - "core-iconset": "Polymer/core-iconset#^0.5" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-iconset-svg", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "1cdadf517382c2db9ee2d2abf43a486a8513f760" - }, - "_source": "git://github.com/Polymer/core-iconset-svg.git", - "_target": "^0.5", - "_originalSource": "Polymer/core-iconset-svg" -} \ No newline at end of file diff --git a/polymer/bower_components/core-iconset-svg/README.md b/polymer/bower_components/core-iconset-svg/README.md deleted file mode 100644 index 5e4b048..0000000 --- a/polymer/bower_components/core-iconset-svg/README.md +++ /dev/null @@ -1,4 +0,0 @@ -core-iconset-svg -========= - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-iconset-svg) for more information. diff --git a/polymer/bower_components/core-iconset-svg/bower.json b/polymer/bower_components/core-iconset-svg/bower.json deleted file mode 100644 index 740811a..0000000 --- a/polymer/bower_components/core-iconset-svg/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "core-iconset-svg", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5", - "core-iconset": "Polymer/core-iconset#^0.5" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-iconset-svg/core-iconset-svg.html b/polymer/bower_components/core-iconset-svg/core-iconset-svg.html deleted file mode 100644 index edf33c4..0000000 --- a/polymer/bower_components/core-iconset-svg/core-iconset-svg.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset-svg/demo.html b/polymer/bower_components/core-iconset-svg/demo.html deleted file mode 100644 index b4a4f7e..0000000 --- a/polymer/bower_components/core-iconset-svg/demo.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - core-iconset-svg - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset-svg/index.html b/polymer/bower_components/core-iconset-svg/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-iconset-svg/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset-svg/svg-sample-icons.html b/polymer/bower_components/core-iconset-svg/svg-sample-icons.html deleted file mode 100644 index 9f5ef3d..0000000 --- a/polymer/bower_components/core-iconset-svg/svg-sample-icons.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset/.bower.json b/polymer/bower_components/core-iconset/.bower.json deleted file mode 100644 index 84bc689..0000000 --- a/polymer/bower_components/core-iconset/.bower.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "core-iconset", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5", - "core-meta": "Polymer/core-meta#^0.5", - "core-icon": "Polymer/core-icon#^0.5" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-iconset", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "cbb2b8c90debf31dbfbadf1b821a937b6ca548fc" - }, - "_source": "git://github.com/Polymer/core-iconset.git", - "_target": "^0.5", - "_originalSource": "Polymer/core-iconset" -} \ No newline at end of file diff --git a/polymer/bower_components/core-iconset/README.md b/polymer/bower_components/core-iconset/README.md deleted file mode 100644 index 7a3a217..0000000 --- a/polymer/bower_components/core-iconset/README.md +++ /dev/null @@ -1,4 +0,0 @@ -core-iconset -============ - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-iconset) for more information. diff --git a/polymer/bower_components/core-iconset/bower.json b/polymer/bower_components/core-iconset/bower.json deleted file mode 100644 index 4174620..0000000 --- a/polymer/bower_components/core-iconset/bower.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "core-iconset", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5", - "core-meta": "Polymer/core-meta#^0.5", - "core-icon": "Polymer/core-icon#^0.5" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-iconset/core-iconset.html b/polymer/bower_components/core-iconset/core-iconset.html deleted file mode 100644 index 7ab2d34..0000000 --- a/polymer/bower_components/core-iconset/core-iconset.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset/demo.html b/polymer/bower_components/core-iconset/demo.html deleted file mode 100644 index 8732965..0000000 --- a/polymer/bower_components/core-iconset/demo.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - core-iconset - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - - - - - - -
    - - - diff --git a/polymer/bower_components/core-iconset/index.html b/polymer/bower_components/core-iconset/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-iconset/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/core-iconset/my-icons-big.png b/polymer/bower_components/core-iconset/my-icons-big.png deleted file mode 100644 index f019f3fc7f786879467aed275bfbae0c54f43ec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35734 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 diff --git a/polymer/bower_components/core-iconset/my-icons.png b/polymer/bower_components/core-iconset/my-icons.png deleted file mode 100644 index a7d223b28249b03129167993484fcbcde739d9db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2653 zcmV-j3ZnIiP)z3F=8i zK~#9!?OSVX6xS90&b_k_?_zsR9H3AtyHSm*M%WVmQ!V8;CfF@o~?DHVPp| z0ing>k=$w*%8%)Wm7xPQXVYA}RB(xC-ZA97#^&Q0_ zedQH86zL2AwWhqQFOA|SgkR9u-Z$w6P@{>Ez7;Fuk=%S4w?jqaO^=Z+?z zd?_PLK>4;tU=vh)o*GRw1Jp}QiR5JZKa$~Nj8z+zPlWz?Ijs8R&fvV0JA?D)<*;fZ z^xu8X6fnkQc0g?k<$MgFM87WDj49MHoZw#s@MqHnS$uM-cs+1Z1u^BW|E^fX=5JdT z=uXF9vgf)mx}L9PQ~0+(4m1(b5C8}v0&9OYwE2tcB4&&UoiAront*#g#cNmAly|l1 zW5WO%QjE}{IMNDLqdqAvbw>T9ghX23ZfU2$~R4ADGiMK@`!stbU%yVgX4Qw2hPeX{GNX|>@1|Z zXXdf-uXYqO`0xs&Q5;}73A|?vxqn3}EX88tMY@0AK#YTk1C%;c%+33kfY z+#12MyQ_eBOpPWGkL0!_mCuOB%sgqbA6sP@{CNd{5P+7N@~#%WR>+pf`9tZ(6g0NS z%`x>{)rt-245wH)=u=jOku3nn*>_)@@u%i0`Q;JtX~%Ajux0nsA|;zNG>>Ie7&E#l zMGg40V=j}mm?22VEL>CNWTfJz7=VJt_IN>Kd&{}16-B8Ew)+gw`Et&@R4*#48@yut zofE)YM0DGUut&CMHh=$>!5U3qe$u}X_kiHBPFo3=k8ICuCYvx=Q{L5A-%*^>|LeP; z*1|ZI605uKT-Azn!;&!|X^`rI#`YM1mQ)5{7Qydos>`gH54Q#nxe2Eqp_i|(e!CzXw~ql1GMVCUvO}$|`Dy6I zLxa2i`K36TYFz%~v`f;+R?RWBzN1*RQ9`V~qxb@VycAheI{a~N%Ba{hg;>mWC0x4i zh5&#}KbqQh1gqTU{(8mht7sT{W8kLPZ1p@dgPPi^16yTdjKdD70|G0AD)+U!6=@!&8ZGZcDo|K+s36uRIt0Y%1K}HBM7r=ieq8uCC;Ipp}y$b+;_(|Y-A{v}1 z=KsPc$%l%B5FsH%2-7r8(=<)fG)<2H-IoRFCmfC<{TCps{>I99B)9KDPUu0)uSOHK zdix<7kL1>-8?W4N5o!bXEH!`mI=M4Au1#%jOADc?7#(hNG4V-WQ4dyrVoHRV0-=pW zkots$wE?Vz2Y`~@J>vvsir>^$U=ZB1^nvf`2Q2?%nV$XE2E~rYGClic#^1jKbm13& zi$AkxmEX`V4%&ijd+*kF&vuV~WHoV{ZMp$Kv%|S0f$7QQsA;ht=x+4F`3s_qA{iWJzmnuz4Nf|ijA$j8lC5_- zugYA@3)x;UC7ThgbRg4|$e*Ogvp8eim#27qmuH7OwT!WT9SmSfp&pFg8(`|9Bn$h! zblgd&b91S`+wZ00AQr|$LapIYABdnZad}pjI3hHW1&n>cBVu4o39HdWr+%pqg#pxP zqDT;581QPxoP0|lA}!$6jtSxm^1zb1q@d+GMF4{lvlgw!hNjG%0WOt7`?hqUC zpF44X%x=Yf=j;3jK_9istWMdnAi^h~-`Y{KyXSkCdxn21E95vHa`!(av$OE(+b?8% z@b(KCAI#3etCO`0yb3Q%8ki9-6H`FMViPjJ%z$?Im+Sqw}-W zDd;TDhN7Psht)q}*sadwScxui@~pK|BoP}s0BrL=4n75+u6xR}*5THy006zN z8Fghu^NkZP1s9an4Sr!twQR}Q);;l3Z~^Ufl)_1qxqWO$YZiMitXb?`vHs1Q>#p=_ z4H9`l|J)FZy!WGw!vK1J=s+e-uqDLMZ#=m@s%e^&`qt`n^q1yTOZK$1nb&HvcXyd& zAL!n7k2hU~N<=-~iQ5e_3J{ve>Q3BlAfg_}C;f7BYe{T)L@)MvOC0uXS6H%-&@=+S=xz+m|lNPRwY00000 LNkvXXu0mjfs{028 diff --git a/polymer/bower_components/core-meta/.bower.json b/polymer/bower_components/core-meta/.bower.json deleted file mode 100644 index 56cc302..0000000 --- a/polymer/bower_components/core-meta/.bower.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "core-meta", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/core-meta", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "8e4046e5b79f294f74389519d382749d8d614687" - }, - "_source": "git://github.com/Polymer/core-meta.git", - "_target": "^0.5", - "_originalSource": "Polymer/core-meta" -} \ No newline at end of file diff --git a/polymer/bower_components/core-meta/README.md b/polymer/bower_components/core-meta/README.md deleted file mode 100644 index d8da644..0000000 --- a/polymer/bower_components/core-meta/README.md +++ /dev/null @@ -1,4 +0,0 @@ -core-meta -========= - -See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-meta) for more information. diff --git a/polymer/bower_components/core-meta/bower.json b/polymer/bower_components/core-meta/bower.json deleted file mode 100644 index c022d88..0000000 --- a/polymer/bower_components/core-meta/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "core-meta", - "private": true, - "dependencies": { - "polymer": "Polymer/polymer#^0.5" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/core-meta/core-meta.html b/polymer/bower_components/core-meta/core-meta.html deleted file mode 100644 index c008dd5..0000000 --- a/polymer/bower_components/core-meta/core-meta.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - diff --git a/polymer/bower_components/core-meta/demo.html b/polymer/bower_components/core-meta/demo.html deleted file mode 100644 index 8bd8756..0000000 --- a/polymer/bower_components/core-meta/demo.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - core-meta - - - - - - - - - - - - - - - -

    meta-data

    - - - -

    meta-data (type: fruit)

    - - - - - - - diff --git a/polymer/bower_components/core-meta/index.html b/polymer/bower_components/core-meta/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/core-meta/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/font-roboto/.bower.json b/polymer/bower_components/font-roboto/.bower.json deleted file mode 100644 index 9df4526..0000000 --- a/polymer/bower_components/font-roboto/.bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "font-roboto", - "homepage": "https://github.com/Polymer/font-roboto", - "version": "0.5.5", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "868680d1e886091e9bc2539659ef6626a8cee5e8" - }, - "_source": "git://github.com/Polymer/font-roboto.git", - "_target": "^0.5", - "_originalSource": "Polymer/font-roboto" -} \ No newline at end of file diff --git a/polymer/bower_components/font-roboto/roboto.html b/polymer/bower_components/font-roboto/roboto.html deleted file mode 100644 index 861d70d..0000000 --- a/polymer/bower_components/font-roboto/roboto.html +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/polymer/bower_components/paper-ripple/.bower.json b/polymer/bower_components/paper-ripple/.bower.json deleted file mode 100644 index b700d0b..0000000 --- a/polymer/bower_components/paper-ripple/.bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "paper-ripple", - "private": true, - "dependencies": { - "core-icon": "Polymer/core-icon#^0.5", - "core-icons": "Polymer/core-icons#^0.5", - "font-roboto": "Polymer/font-roboto#^0.5" - }, - "devDependencies": { - "web-component-tester": "Polymer/web-component-tester#^1.0.0" - }, - "version": "0.5.5", - "homepage": "https://github.com/Polymer/paper-ripple", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "f41d28b47c2bdb8d4351c52f6b00430e5c4728e2" - }, - "_source": "git://github.com/Polymer/paper-ripple.git", - "_target": "~0.5.5", - "_originalSource": "Polymer/paper-ripple", - "_direct": true -} \ No newline at end of file diff --git a/polymer/bower_components/paper-ripple/README.md b/polymer/bower_components/paper-ripple/README.md deleted file mode 100644 index a4ca437..0000000 --- a/polymer/bower_components/paper-ripple/README.md +++ /dev/null @@ -1,4 +0,0 @@ -paper-ripple -============ - -See the [component page](http://www.polymer-project.org/docs/elements/paper-elements.html#paper-ripple) for more information. diff --git a/polymer/bower_components/paper-ripple/bower.json b/polymer/bower_components/paper-ripple/bower.json deleted file mode 100644 index 6b167f1..0000000 --- a/polymer/bower_components/paper-ripple/bower.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "paper-ripple", - "private": true, - "dependencies": { - "core-icon": "Polymer/core-icon#^0.5", - "core-icons": "Polymer/core-icons#^0.5", - "font-roboto": "Polymer/font-roboto#^0.5" - }, - "devDependencies": { - "web-component-tester": "Polymer/web-component-tester#^1.0.0" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/paper-ripple/demo.html b/polymer/bower_components/paper-ripple/demo.html deleted file mode 100644 index 9fc053d..0000000 --- a/polymer/bower_components/paper-ripple/demo.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - paper-ripple - - - - - - - - - - - - - - - - - -
    - -
    -
    SUBMIT
    - -
    - -
    -
    CANCEL
    - -
    - -
    -
    COMPOSE
    - -
    - -
    -
    OK
    - -
    - -
    - -
    - -
    -
    +1
    - -
    - -
    -
    +1
    - -
    - -
    -
    +1
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - - - - - -
    - -
    - -
    - -
    -
    Permission

    -
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
    -
    - -
    -
    ACCEPT
    - -
    - -
    -
    DECLINE
    - -
    - -
    - -
    - - - -
    - -
    - - - -
    - -
    - - - diff --git a/polymer/bower_components/paper-ripple/index.html b/polymer/bower_components/paper-ripple/index.html deleted file mode 100644 index 294215a..0000000 --- a/polymer/bower_components/paper-ripple/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/polymer/bower_components/paper-ripple/metadata.html b/polymer/bower_components/paper-ripple/metadata.html deleted file mode 100644 index 930d291..0000000 --- a/polymer/bower_components/paper-ripple/metadata.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - diff --git a/polymer/bower_components/paper-ripple/paper-ripple.html b/polymer/bower_components/paper-ripple/paper-ripple.html deleted file mode 100644 index 85d86c2..0000000 --- a/polymer/bower_components/paper-ripple/paper-ripple.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - - - - - - - diff --git a/polymer/bower_components/paper-ripple/test/index.html b/polymer/bower_components/paper-ripple/test/index.html deleted file mode 100644 index 1416321..0000000 --- a/polymer/bower_components/paper-ripple/test/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - Tests - - - - - - diff --git a/polymer/bower_components/paper-ripple/test/position.html b/polymer/bower_components/paper-ripple/test/position.html deleted file mode 100644 index 428b19e..0000000 --- a/polymer/bower_components/paper-ripple/test/position.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - paper-ripple position tests - - - - - - - - - - - - - -
    - - tap here -
    - -
    - - tap here -
    - - - - - diff --git a/polymer/bower_components/polymer/.bower.json b/polymer/bower_components/polymer/.bower.json deleted file mode 100644 index 1449ef4..0000000 --- a/polymer/bower_components/polymer/.bower.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "polymer", - "description": "Polymer is a new type of library for the web, built on top of Web Components, and designed to leverage the evolving web platform on modern browsers.", - "homepage": "http://www.polymer-project.org/", - "keywords": [ - "util", - "client", - "browser", - "web components", - "web-components" - ], - "author": "Polymer Authors ", - "private": true, - "dependencies": { - "core-component-page": "Polymer/core-component-page#^0.5", - "webcomponentsjs": "Polymer/webcomponentsjs#^0.5" - }, - "devDependencies": { - "tools": "Polymer/tools#master", - "web-component-tester": "Polymer/web-component-tester#^1.4.2" - }, - "version": "0.5.5", - "_release": "0.5.5", - "_resolution": { - "type": "version", - "tag": "0.5.5", - "commit": "b94b680c966fc9ea86bc8f14b3af6f13d77f217a" - }, - "_source": "git://github.com/Polymer/polymer.git", - "_target": "^0.5", - "_originalSource": "Polymer/polymer" -} \ No newline at end of file diff --git a/polymer/bower_components/polymer/README.md b/polymer/bower_components/polymer/README.md deleted file mode 100644 index 2c03674..0000000 --- a/polymer/bower_components/polymer/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Polymer - -[![Polymer build status](http://www.polymer-project.org/build/polymer-dev/status.png "Polymer build status")](http://build.chromium.org/p/client.polymer/waterfall) - -## Brief Overview - -For more detailed info goto [http://polymer-project.org/](http://polymer-project.org/). - -Polymer is a new type of library for the web, designed to leverage the existing browser infrastructure to provide the encapsulation and extendability currently only available in JS libraries. - -Polymer is based on a set of future technologies, including [Shadow DOM](http://w3c.github.io/webcomponents/spec/shadow/), [Custom Elements](http://w3c.github.io/webcomponents/spec/custom/) and Model Driven Views. Currently these technologies are implemented as polyfills or shims, but as browsers adopt these features natively, the platform code that drives Polymer evacipates, leaving only the value-adds. - -## Tools & Testing - -For running tests or building minified files, consult the [tooling information](https://www.polymer-project.org/resources/tooling-strategy.html). - -## Releases - -[Release (tagged) versions](https://github.com/Polymer/polymer/releases) of Polymer include concatenated and minified sources for your convenience. - -[![Analytics](https://ga-beacon.appspot.com/UA-39334307-2/Polymer/polymer/README)](https://github.com/igrigorik/ga-beacon) diff --git a/polymer/bower_components/polymer/bower.json b/polymer/bower_components/polymer/bower.json deleted file mode 100644 index dbc7596..0000000 --- a/polymer/bower_components/polymer/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "polymer", - "description": "Polymer is a new type of library for the web, built on top of Web Components, and designed to leverage the evolving web platform on modern browsers.", - "homepage": "http://www.polymer-project.org/", - "keywords": [ - "util", - "client", - "browser", - "web components", - "web-components" - ], - "author": "Polymer Authors ", - "private": true, - "dependencies": { - "core-component-page": "Polymer/core-component-page#^0.5", - "webcomponentsjs": "Polymer/webcomponentsjs#^0.5" - }, - "devDependencies": { - "tools": "Polymer/tools#master", - "web-component-tester": "Polymer/web-component-tester#^1.4.2" - }, - "version": "0.5.5" -} \ No newline at end of file diff --git a/polymer/bower_components/polymer/layout.html b/polymer/bower_components/polymer/layout.html deleted file mode 100644 index 55d4d2f..0000000 --- a/polymer/bower_components/polymer/layout.html +++ /dev/null @@ -1,286 +0,0 @@ - - \ No newline at end of file diff --git a/polymer/bower_components/polymer/polymer.html b/polymer/bower_components/polymer/polymer.html deleted file mode 100644 index 7e3d8f1..0000000 --- a/polymer/bower_components/polymer/polymer.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/polymer/bower_components/polymer/polymer.js b/polymer/bower_components/polymer/polymer.js deleted file mode 100644 index f3df2e8..0000000 --- a/polymer/bower_components/polymer/polymer.js +++ /dev/null @@ -1,11859 +0,0 @@ -/** - * @license - * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - * Code distributed by Google as part of the polymer project is also - * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - */ -// @version 0.5.5 -window.PolymerGestures = {}; - -(function(scope) { - var hasFullPath = false; - - // test for full event path support - var pathTest = document.createElement('meta'); - if (pathTest.createShadowRoot) { - var sr = pathTest.createShadowRoot(); - var s = document.createElement('span'); - sr.appendChild(s); - pathTest.addEventListener('testpath', function(ev) { - if (ev.path) { - // if the span is in the event path, then path[0] is the real source for all events - hasFullPath = ev.path[0] === s; - } - ev.stopPropagation(); - }); - var ev = new CustomEvent('testpath', {bubbles: true}); - // must add node to DOM to trigger event listener - document.head.appendChild(pathTest); - s.dispatchEvent(ev); - pathTest.parentNode.removeChild(pathTest); - sr = s = null; - } - pathTest = null; - - var target = { - shadow: function(inEl) { - if (inEl) { - return inEl.shadowRoot || inEl.webkitShadowRoot; - } - }, - canTarget: function(shadow) { - return shadow && Boolean(shadow.elementFromPoint); - }, - targetingShadow: function(inEl) { - var s = this.shadow(inEl); - if (this.canTarget(s)) { - return s; - } - }, - olderShadow: function(shadow) { - var os = shadow.olderShadowRoot; - if (!os) { - var se = shadow.querySelector('shadow'); - if (se) { - os = se.olderShadowRoot; - } - } - return os; - }, - allShadows: function(element) { - var shadows = [], s = this.shadow(element); - while(s) { - shadows.push(s); - s = this.olderShadow(s); - } - return shadows; - }, - searchRoot: function(inRoot, x, y) { - var t, st, sr, os; - if (inRoot) { - t = inRoot.elementFromPoint(x, y); - if (t) { - // found element, check if it has a ShadowRoot - sr = this.targetingShadow(t); - } else if (inRoot !== document) { - // check for sibling roots - sr = this.olderShadow(inRoot); - } - // search other roots, fall back to light dom element - return this.searchRoot(sr, x, y) || t; - } - }, - owner: function(element) { - if (!element) { - return document; - } - var s = element; - // walk up until you hit the shadow root or document - while (s.parentNode) { - s = s.parentNode; - } - // the owner element is expected to be a Document or ShadowRoot - if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAGMENT_NODE) { - s = document; - } - return s; - }, - findTarget: function(inEvent) { - if (hasFullPath && inEvent.path && inEvent.path.length) { - return inEvent.path[0]; - } - var x = inEvent.clientX, y = inEvent.clientY; - // if the listener is in the shadow root, it is much faster to start there - var s = this.owner(inEvent.target); - // if x, y is not in this root, fall back to document search - if (!s.elementFromPoint(x, y)) { - s = document; - } - return this.searchRoot(s, x, y); - }, - findTouchAction: function(inEvent) { - var n; - if (hasFullPath && inEvent.path && inEvent.path.length) { - var path = inEvent.path; - for (var i = 0; i < path.length; i++) { - n = path[i]; - if (n.nodeType === Node.ELEMENT_NODE && n.hasAttribute('touch-action')) { - return n.getAttribute('touch-action'); - } - } - } else { - n = inEvent.target; - while(n) { - if (n.nodeType === Node.ELEMENT_NODE && n.hasAttribute('touch-action')) { - return n.getAttribute('touch-action'); - } - n = n.parentNode || n.host; - } - } - // auto is default - return "auto"; - }, - LCA: function(a, b) { - if (a === b) { - return a; - } - if (a && !b) { - return a; - } - if (b && !a) { - return b; - } - if (!b && !a) { - return document; - } - // fast case, a is a direct descendant of b or vice versa - if (a.contains && a.contains(b)) { - return a; - } - if (b.contains && b.contains(a)) { - return b; - } - var adepth = this.depth(a); - var bdepth = this.depth(b); - var d = adepth - bdepth; - if (d >= 0) { - a = this.walk(a, d); - } else { - b = this.walk(b, -d); - } - while (a && b && a !== b) { - a = a.parentNode || a.host; - b = b.parentNode || b.host; - } - return a; - }, - walk: function(n, u) { - for (var i = 0; n && (i < u); i++) { - n = n.parentNode || n.host; - } - return n; - }, - depth: function(n) { - var d = 0; - while(n) { - d++; - n = n.parentNode || n.host; - } - return d; - }, - deepContains: function(a, b) { - var common = this.LCA(a, b); - // if a is the common ancestor, it must "deeply" contain b - return common === a; - }, - insideNode: function(node, x, y) { - var rect = node.getBoundingClientRect(); - return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom); - }, - path: function(event) { - var p; - if (hasFullPath && event.path && event.path.length) { - p = event.path; - } else { - p = []; - var n = this.findTarget(event); - while (n) { - p.push(n); - n = n.parentNode || n.host; - } - } - return p; - } - }; - scope.targetFinding = target; - /** - * Given an event, finds the "deepest" node that could have been the original target before ShadowDOM retargetting - * - * @param {Event} Event An event object with clientX and clientY properties - * @return {Element} The probable event origninator - */ - scope.findTarget = target.findTarget.bind(target); - /** - * Determines if the "container" node deeply contains the "containee" node, including situations where the "containee" is contained by one or more ShadowDOM - * roots. - * - * @param {Node} container - * @param {Node} containee - * @return {Boolean} - */ - scope.deepContains = target.deepContains.bind(target); - - /** - * Determines if the x/y position is inside the given node. - * - * Example: - * - * function upHandler(event) { - * var innode = PolymerGestures.insideNode(event.target, event.clientX, event.clientY); - * if (innode) { - * // wait for tap? - * } else { - * // tap will never happen - * } - * } - * - * @param {Node} node - * @param {Number} x Screen X position - * @param {Number} y screen Y position - * @return {Boolean} - */ - scope.insideNode = target.insideNode; - -})(window.PolymerGestures); - -(function() { - function shadowSelector(v) { - return 'html /deep/ ' + selector(v); - } - function selector(v) { - return '[touch-action="' + v + '"]'; - } - function rule(v) { - return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + ';}'; - } - var attrib2css = [ - 'none', - 'auto', - 'pan-x', - 'pan-y', - { - rule: 'pan-x pan-y', - selectors: [ - 'pan-x pan-y', - 'pan-y pan-x' - ] - }, - 'manipulation' - ]; - var styles = ''; - // only install stylesheet if the browser has touch action support - var hasTouchAction = typeof document.head.style.touchAction === 'string'; - // only add shadow selectors if shadowdom is supported - var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot; - - if (hasTouchAction) { - attrib2css.forEach(function(r) { - if (String(r) === r) { - styles += selector(r) + rule(r) + '\n'; - if (hasShadowRoot) { - styles += shadowSelector(r) + rule(r) + '\n'; - } - } else { - styles += r.selectors.map(selector) + rule(r.rule) + '\n'; - if (hasShadowRoot) { - styles += r.selectors.map(shadowSelector) + rule(r.rule) + '\n'; - } - } - }); - - var el = document.createElement('style'); - el.textContent = styles; - document.head.appendChild(el); - } -})(); - -/** - * This is the constructor for new PointerEvents. - * - * New Pointer Events must be given a type, and an optional dictionary of - * initialization properties. - * - * Due to certain platform requirements, events returned from the constructor - * identify as MouseEvents. - * - * @constructor - * @param {String} inType The type of the event to create. - * @param {Object} [inDict] An optional dictionary of initial event properties. - * @return {Event} A new PointerEvent of type `inType` and initialized with properties from `inDict`. - */ -(function(scope) { - - var MOUSE_PROPS = [ - 'bubbles', - 'cancelable', - 'view', - 'detail', - 'screenX', - 'screenY', - 'clientX', - 'clientY', - 'ctrlKey', - 'altKey', - 'shiftKey', - 'metaKey', - 'button', - 'relatedTarget', - 'pageX', - 'pageY' - ]; - - var MOUSE_DEFAULTS = [ - false, - false, - null, - null, - 0, - 0, - 0, - 0, - false, - false, - false, - false, - 0, - null, - 0, - 0 - ]; - - var NOP_FACTORY = function(){ return function(){}; }; - - var eventFactory = { - // TODO(dfreedm): this is overridden by tap recognizer, needs review - preventTap: NOP_FACTORY, - makeBaseEvent: function(inType, inDict) { - var e = document.createEvent('Event'); - e.initEvent(inType, inDict.bubbles || false, inDict.cancelable || false); - e.preventTap = eventFactory.preventTap(e); - return e; - }, - makeGestureEvent: function(inType, inDict) { - inDict = inDict || Object.create(null); - - var e = this.makeBaseEvent(inType, inDict); - for (var i = 0, keys = Object.keys(inDict), k; i < keys.length; i++) { - k = keys[i]; - if( k !== 'bubbles' && k !== 'cancelable' ) { - e[k] = inDict[k]; - } - } - return e; - }, - makePointerEvent: function(inType, inDict) { - inDict = inDict || Object.create(null); - - var e = this.makeBaseEvent(inType, inDict); - // define inherited MouseEvent properties - for(var i = 2, p; i < MOUSE_PROPS.length; i++) { - p = MOUSE_PROPS[i]; - e[p] = inDict[p] || MOUSE_DEFAULTS[i]; - } - e.buttons = inDict.buttons || 0; - - // Spec requires that pointers without pressure specified use 0.5 for down - // state and 0 for up state. - var pressure = 0; - if (inDict.pressure) { - pressure = inDict.pressure; - } else { - pressure = e.buttons ? 0.5 : 0; - } - - // add x/y properties aliased to clientX/Y - e.x = e.clientX; - e.y = e.clientY; - - // define the properties of the PointerEvent interface - e.pointerId = inDict.pointerId || 0; - e.width = inDict.width || 0; - e.height = inDict.height || 0; - e.pressure = pressure; - e.tiltX = inDict.tiltX || 0; - e.tiltY = inDict.tiltY || 0; - e.pointerType = inDict.pointerType || ''; - e.hwTimestamp = inDict.hwTimestamp || 0; - e.isPrimary = inDict.isPrimary || false; - e._source = inDict._source || ''; - return e; - } - }; - - scope.eventFactory = eventFactory; -})(window.PolymerGestures); - -/** - * This module implements an map of pointer states - */ -(function(scope) { - var USE_MAP = window.Map && window.Map.prototype.forEach; - var POINTERS_FN = function(){ return this.size; }; - function PointerMap() { - if (USE_MAP) { - var m = new Map(); - m.pointers = POINTERS_FN; - return m; - } else { - this.keys = []; - this.values = []; - } - } - - PointerMap.prototype = { - set: function(inId, inEvent) { - var i = this.keys.indexOf(inId); - if (i > -1) { - this.values[i] = inEvent; - } else { - this.keys.push(inId); - this.values.push(inEvent); - } - }, - has: function(inId) { - return this.keys.indexOf(inId) > -1; - }, - 'delete': function(inId) { - var i = this.keys.indexOf(inId); - if (i > -1) { - this.keys.splice(i, 1); - this.values.splice(i, 1); - } - }, - get: function(inId) { - var i = this.keys.indexOf(inId); - return this.values[i]; - }, - clear: function() { - this.keys.length = 0; - this.values.length = 0; - }, - // return value, key, map - forEach: function(callback, thisArg) { - this.values.forEach(function(v, i) { - callback.call(thisArg, v, this.keys[i], this); - }, this); - }, - pointers: function() { - return this.keys.length; - } - }; - - scope.PointerMap = PointerMap; -})(window.PolymerGestures); - -(function(scope) { - var CLONE_PROPS = [ - // MouseEvent - 'bubbles', - 'cancelable', - 'view', - 'detail', - 'screenX', - 'screenY', - 'clientX', - 'clientY', - 'ctrlKey', - 'altKey', - 'shiftKey', - 'metaKey', - 'button', - 'relatedTarget', - // DOM Level 3 - 'buttons', - // PointerEvent - 'pointerId', - 'width', - 'height', - 'pressure', - 'tiltX', - 'tiltY', - 'pointerType', - 'hwTimestamp', - 'isPrimary', - // event instance - 'type', - 'target', - 'currentTarget', - 'which', - 'pageX', - 'pageY', - 'timeStamp', - // gesture addons - 'preventTap', - 'tapPrevented', - '_source' - ]; - - var CLONE_DEFAULTS = [ - // MouseEvent - false, - false, - null, - null, - 0, - 0, - 0, - 0, - false, - false, - false, - false, - 0, - null, - // DOM Level 3 - 0, - // PointerEvent - 0, - 0, - 0, - 0, - 0, - 0, - '', - 0, - false, - // event instance - '', - null, - null, - 0, - 0, - 0, - 0, - function(){}, - false - ]; - - var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined'); - - var eventFactory = scope.eventFactory; - - // set of recognizers to run for the currently handled event - var currentGestures; - - /** - * This module is for normalizing events. Mouse and Touch events will be - * collected here, and fire PointerEvents that have the same semantics, no - * matter the source. - * Events fired: - * - pointerdown: a pointing is added - * - pointerup: a pointer is removed - * - pointermove: a pointer is moved - * - pointerover: a pointer crosses into an element - * - pointerout: a pointer leaves an element - * - pointercancel: a pointer will no longer generate events - */ - var dispatcher = { - IS_IOS: false, - pointermap: new scope.PointerMap(), - requiredGestures: new scope.PointerMap(), - eventMap: Object.create(null), - // Scope objects for native events. - // This exists for ease of testing. - eventSources: Object.create(null), - eventSourceList: [], - gestures: [], - // map gesture event -> {listeners: int, index: gestures[int]} - dependencyMap: { - // make sure down and up are in the map to trigger "register" - down: {listeners: 0, index: -1}, - up: {listeners: 0, index: -1} - }, - gestureQueue: [], - /** - * Add a new event source that will generate pointer events. - * - * `inSource` must contain an array of event names named `events`, and - * functions with the names specified in the `events` array. - * @param {string} name A name for the event source - * @param {Object} source A new source of platform events. - */ - registerSource: function(name, source) { - var s = source; - var newEvents = s.events; - if (newEvents) { - newEvents.forEach(function(e) { - if (s[e]) { - this.eventMap[e] = s[e].bind(s); - } - }, this); - this.eventSources[name] = s; - this.eventSourceList.push(s); - } - }, - registerGesture: function(name, source) { - var obj = Object.create(null); - obj.listeners = 0; - obj.index = this.gestures.length; - for (var i = 0, g; i < source.exposes.length; i++) { - g = source.exposes[i].toLowerCase(); - this.dependencyMap[g] = obj; - } - this.gestures.push(source); - }, - register: function(element, initial) { - var l = this.eventSourceList.length; - for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) { - // call eventsource register - es.register.call(es, element, initial); - } - }, - unregister: function(element) { - var l = this.eventSourceList.length; - for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) { - // call eventsource register - es.unregister.call(es, element); - } - }, - // EVENTS - down: function(inEvent) { - this.requiredGestures.set(inEvent.pointerId, currentGestures); - this.fireEvent('down', inEvent); - }, - move: function(inEvent) { - // pipe move events into gesture queue directly - inEvent.type = 'move'; - this.fillGestureQueue(inEvent); - }, - up: function(inEvent) { - this.fireEvent('up', inEvent); - this.requiredGestures.delete(inEvent.pointerId); - }, - cancel: function(inEvent) { - inEvent.tapPrevented = true; - this.fireEvent('up', inEvent); - this.requiredGestures.delete(inEvent.pointerId); - }, - addGestureDependency: function(node, currentGestures) { - var gesturesWanted = node._pgEvents; - if (gesturesWanted && currentGestures) { - var gk = Object.keys(gesturesWanted); - for (var i = 0, r, ri, g; i < gk.length; i++) { - // gesture - g = gk[i]; - if (gesturesWanted[g] > 0) { - // lookup gesture recognizer - r = this.dependencyMap[g]; - // recognizer index - ri = r ? r.index : -1; - currentGestures[ri] = true; - } - } - } - }, - // LISTENER LOGIC - eventHandler: function(inEvent) { - // This is used to prevent multiple dispatch of events from - // platform events. This can happen when two elements in different scopes - // are set up to create pointer events, which is relevant to Shadow DOM. - - var type = inEvent.type; - - // only generate the list of desired events on "down" - if (type === 'touchstart' || type === 'mousedown' || type === 'pointerdown' || type === 'MSPointerDown') { - if (!inEvent._handledByPG) { - currentGestures = {}; - } - - // in IOS mode, there is only a listener on the document, so this is not re-entrant - if (this.IS_IOS) { - var ev = inEvent; - if (type === 'touchstart') { - var ct = inEvent.changedTouches[0]; - // set up a fake event to give to the path builder - ev = {target: inEvent.target, clientX: ct.clientX, clientY: ct.clientY, path: inEvent.path}; - } - // use event path if available, otherwise build a path from target finding - var nodes = inEvent.path || scope.targetFinding.path(ev); - for (var i = 0, n; i < nodes.length; i++) { - n = nodes[i]; - this.addGestureDependency(n, currentGestures); - } - } else { - this.addGestureDependency(inEvent.currentTarget, currentGestures); - } - } - - if (inEvent._handledByPG) { - return; - } - var fn = this.eventMap && this.eventMap[type]; - if (fn) { - fn(inEvent); - } - inEvent._handledByPG = true; - }, - // set up event listeners - listen: function(target, events) { - for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) { - this.addEvent(target, e); - } - }, - // remove event listeners - unlisten: function(target, events) { - for (var i = 0, l = events.length, e; (i < l) && (e = events[i]); i++) { - this.removeEvent(target, e); - } - }, - addEvent: function(target, eventName) { - target.addEventListener(eventName, this.boundHandler); - }, - removeEvent: function(target, eventName) { - target.removeEventListener(eventName, this.boundHandler); - }, - // EVENT CREATION AND TRACKING - /** - * Creates a new Event of type `inType`, based on the information in - * `inEvent`. - * - * @param {string} inType A string representing the type of event to create - * @param {Event} inEvent A platform event with a target - * @return {Event} A PointerEvent of type `inType` - */ - makeEvent: function(inType, inEvent) { - var e = eventFactory.makePointerEvent(inType, inEvent); - e.preventDefault = inEvent.preventDefault; - e.tapPrevented = inEvent.tapPrevented; - e._target = e._target || inEvent.target; - return e; - }, - // make and dispatch an event in one call - fireEvent: function(inType, inEvent) { - var e = this.makeEvent(inType, inEvent); - return this.dispatchEvent(e); - }, - /** - * Returns a snapshot of inEvent, with writable properties. - * - * @param {Event} inEvent An event that contains properties to copy. - * @return {Object} An object containing shallow copies of `inEvent`'s - * properties. - */ - cloneEvent: function(inEvent) { - var eventCopy = Object.create(null), p; - for (var i = 0; i < CLONE_PROPS.length; i++) { - p = CLONE_PROPS[i]; - eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i]; - // Work around SVGInstanceElement shadow tree - // Return the element that is represented by the instance for Safari, Chrome, IE. - // This is the behavior implemented by Firefox. - if (p === 'target' || p === 'relatedTarget') { - if (HAS_SVG_INSTANCE && eventCopy[p] instanceof SVGElementInstance) { - eventCopy[p] = eventCopy[p].correspondingUseElement; - } - } - } - // keep the semantics of preventDefault - eventCopy.preventDefault = function() { - inEvent.preventDefault(); - }; - return eventCopy; - }, - /** - * Dispatches the event to its target. - * - * @param {Event} inEvent The event to be dispatched. - * @return {Boolean} True if an event handler returns true, false otherwise. - */ - dispatchEvent: function(inEvent) { - var t = inEvent._target; - if (t) { - t.dispatchEvent(inEvent); - // clone the event for the gesture system to process - // clone after dispatch to pick up gesture prevention code - var clone = this.cloneEvent(inEvent); - clone.target = t; - this.fillGestureQueue(clone); - } - }, - gestureTrigger: function() { - // process the gesture queue - for (var i = 0, e, rg; i < this.gestureQueue.length; i++) { - e = this.gestureQueue[i]; - rg = e._requiredGestures; - if (rg) { - for (var j = 0, g, fn; j < this.gestures.length; j++) { - // only run recognizer if an element in the source event's path is listening for those gestures - if (rg[j]) { - g = this.gestures[j]; - fn = g[e.type]; - if (fn) { - fn.call(g, e); - } - } - } - } - } - this.gestureQueue.length = 0; - }, - fillGestureQueue: function(ev) { - // only trigger the gesture queue once - if (!this.gestureQueue.length) { - requestAnimationFrame(this.boundGestureTrigger); - } - ev._requiredGestures = this.requiredGestures.get(ev.pointerId); - this.gestureQueue.push(ev); - } - }; - dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher); - dispatcher.boundGestureTrigger = dispatcher.gestureTrigger.bind(dispatcher); - scope.dispatcher = dispatcher; - - /** - * Listen for `gesture` on `node` with the `handler` function - * - * If `handler` is the first listener for `gesture`, the underlying gesture recognizer is then enabled. - * - * @param {Element} node - * @param {string} gesture - * @return Boolean `gesture` is a valid gesture - */ - scope.activateGesture = function(node, gesture) { - var g = gesture.toLowerCase(); - var dep = dispatcher.dependencyMap[g]; - if (dep) { - var recognizer = dispatcher.gestures[dep.index]; - if (!node._pgListeners) { - dispatcher.register(node); - node._pgListeners = 0; - } - // TODO(dfreedm): re-evaluate bookkeeping to avoid using attributes - if (recognizer) { - var touchAction = recognizer.defaultActions && recognizer.defaultActions[g]; - var actionNode; - switch(node.nodeType) { - case Node.ELEMENT_NODE: - actionNode = node; - break; - case Node.DOCUMENT_FRAGMENT_NODE: - actionNode = node.host; - break; - default: - actionNode = null; - break; - } - if (touchAction && actionNode && !actionNode.hasAttribute('touch-action')) { - actionNode.setAttribute('touch-action', touchAction); - } - } - if (!node._pgEvents) { - node._pgEvents = {}; - } - node._pgEvents[g] = (node._pgEvents[g] || 0) + 1; - node._pgListeners++; - } - return Boolean(dep); - }; - - /** - * - * Listen for `gesture` from `node` with `handler` function. - * - * @param {Element} node - * @param {string} gesture - * @param {Function} handler - * @param {Boolean} capture - */ - scope.addEventListener = function(node, gesture, handler, capture) { - if (handler) { - scope.activateGesture(node, gesture); - node.addEventListener(gesture, handler, capture); - } - }; - - /** - * Tears down the gesture configuration for `node` - * - * If `handler` is the last listener for `gesture`, the underlying gesture recognizer is disabled. - * - * @param {Element} node - * @param {string} gesture - * @return Boolean `gesture` is a valid gesture - */ - scope.deactivateGesture = function(node, gesture) { - var g = gesture.toLowerCase(); - var dep = dispatcher.dependencyMap[g]; - if (dep) { - if (node._pgListeners > 0) { - node._pgListeners--; - } - if (node._pgListeners === 0) { - dispatcher.unregister(node); - } - if (node._pgEvents) { - if (node._pgEvents[g] > 0) { - node._pgEvents[g]--; - } else { - node._pgEvents[g] = 0; - } - } - } - return Boolean(dep); - }; - - /** - * Stop listening for `gesture` from `node` with `handler` function. - * - * @param {Element} node - * @param {string} gesture - * @param {Function} handler - * @param {Boolean} capture - */ - scope.removeEventListener = function(node, gesture, handler, capture) { - if (handler) { - scope.deactivateGesture(node, gesture); - node.removeEventListener(gesture, handler, capture); - } - }; -})(window.PolymerGestures); - -(function(scope) { - var dispatcher = scope.dispatcher; - var pointermap = dispatcher.pointermap; - // radius around touchend that swallows mouse events - var DEDUP_DIST = 25; - - var WHICH_TO_BUTTONS = [0, 1, 4, 2]; - - var currentButtons = 0; - - var FIREFOX_LINUX = /Linux.*Firefox\//i; - - var HAS_BUTTONS = (function() { - // firefox on linux returns spec-incorrect values for mouseup.buttons - // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.buttons#See_also - // https://codereview.chromium.org/727593003/#msg16 - if (FIREFOX_LINUX.test(navigator.userAgent)) { - return false; - } - try { - return new MouseEvent('test', {buttons: 1}).buttons === 1; - } catch (e) { - return false; - } - })(); - - // handler block for native mouse events - var mouseEvents = { - POINTER_ID: 1, - POINTER_TYPE: 'mouse', - events: [ - 'mousedown', - 'mousemove', - 'mouseup' - ], - exposes: [ - 'down', - 'up', - 'move' - ], - register: function(target) { - dispatcher.listen(target, this.events); - }, - unregister: function(target) { - if (target.nodeType === Node.DOCUMENT_NODE) { - return; - } - dispatcher.unlisten(target, this.events); - }, - lastTouches: [], - // collide with the global mouse listener - isEventSimulatedFromTouch: function(inEvent) { - var lts = this.lastTouches; - var x = inEvent.clientX, y = inEvent.clientY; - for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) { - // simulated mouse events will be swallowed near a primary touchend - var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); - if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) { - return true; - } - } - }, - prepareEvent: function(inEvent) { - var e = dispatcher.cloneEvent(inEvent); - e.pointerId = this.POINTER_ID; - e.isPrimary = true; - e.pointerType = this.POINTER_TYPE; - e._source = 'mouse'; - if (!HAS_BUTTONS) { - var type = inEvent.type; - var bit = WHICH_TO_BUTTONS[inEvent.which] || 0; - if (type === 'mousedown') { - currentButtons |= bit; - } else if (type === 'mouseup') { - currentButtons &= ~bit; - } - e.buttons = currentButtons; - } - return e; - }, - mousedown: function(inEvent) { - if (!this.isEventSimulatedFromTouch(inEvent)) { - var p = pointermap.has(this.POINTER_ID); - var e = this.prepareEvent(inEvent); - e.target = scope.findTarget(inEvent); - pointermap.set(this.POINTER_ID, e.target); - dispatcher.down(e); - } - }, - mousemove: function(inEvent) { - if (!this.isEventSimulatedFromTouch(inEvent)) { - var target = pointermap.get(this.POINTER_ID); - if (target) { - var e = this.prepareEvent(inEvent); - e.target = target; - // handle case where we missed a mouseup - if ((HAS_BUTTONS ? e.buttons : e.which) === 0) { - if (!HAS_BUTTONS) { - currentButtons = e.buttons = 0; - } - dispatcher.cancel(e); - this.cleanupMouse(e.buttons); - } else { - dispatcher.move(e); - } - } - } - }, - mouseup: function(inEvent) { - if (!this.isEventSimulatedFromTouch(inEvent)) { - var e = this.prepareEvent(inEvent); - e.relatedTarget = scope.findTarget(inEvent); - e.target = pointermap.get(this.POINTER_ID); - dispatcher.up(e); - this.cleanupMouse(e.buttons); - } - }, - cleanupMouse: function(buttons) { - if (buttons === 0) { - pointermap.delete(this.POINTER_ID); - } - } - }; - - scope.mouseEvents = mouseEvents; -})(window.PolymerGestures); - -(function(scope) { - var dispatcher = scope.dispatcher; - var allShadows = scope.targetFinding.allShadows.bind(scope.targetFinding); - var pointermap = dispatcher.pointermap; - var touchMap = Array.prototype.map.call.bind(Array.prototype.map); - // This should be long enough to ignore compat mouse events made by touch - var DEDUP_TIMEOUT = 2500; - var DEDUP_DIST = 25; - var CLICK_COUNT_TIMEOUT = 200; - var HYSTERESIS = 20; - var ATTRIB = 'touch-action'; - // TODO(dfreedm): disable until http://crbug.com/399765 is resolved - // var HAS_TOUCH_ACTION = ATTRIB in document.head.style; - var HAS_TOUCH_ACTION = false; - - // handler block for native touch events - var touchEvents = { - IS_IOS: false, - events: [ - 'touchstart', - 'touchmove', - 'touchend', - 'touchcancel' - ], - exposes: [ - 'down', - 'up', - 'move' - ], - register: function(target, initial) { - if (this.IS_IOS ? initial : !initial) { - dispatcher.listen(target, this.events); - } - }, - unregister: function(target) { - if (!this.IS_IOS) { - dispatcher.unlisten(target, this.events); - } - }, - scrollTypes: { - EMITTER: 'none', - XSCROLLER: 'pan-x', - YSCROLLER: 'pan-y', - }, - touchActionToScrollType: function(touchAction) { - var t = touchAction; - var st = this.scrollTypes; - if (t === st.EMITTER) { - return 'none'; - } else if (t === st.XSCROLLER) { - return 'X'; - } else if (t === st.YSCROLLER) { - return 'Y'; - } else { - return 'XY'; - } - }, - POINTER_TYPE: 'touch', - firstTouch: null, - isPrimaryTouch: function(inTouch) { - return this.firstTouch === inTouch.identifier; - }, - setPrimaryTouch: function(inTouch) { - // set primary touch if there no pointers, or the only pointer is the mouse - if (pointermap.pointers() === 0 || (pointermap.pointers() === 1 && pointermap.has(1))) { - this.firstTouch = inTouch.identifier; - this.firstXY = {X: inTouch.clientX, Y: inTouch.clientY}; - this.firstTarget = inTouch.target; - this.scrolling = null; - this.cancelResetClickCount(); - } - }, - removePrimaryPointer: function(inPointer) { - if (inPointer.isPrimary) { - this.firstTouch = null; - this.firstXY = null; - this.resetClickCount(); - } - }, - clickCount: 0, - resetId: null, - resetClickCount: function() { - var fn = function() { - this.clickCount = 0; - this.resetId = null; - }.bind(this); - this.resetId = setTimeout(fn, CLICK_COUNT_TIMEOUT); - }, - cancelResetClickCount: function() { - if (this.resetId) { - clearTimeout(this.resetId); - } - }, - typeToButtons: function(type) { - var ret = 0; - if (type === 'touchstart' || type === 'touchmove') { - ret = 1; - } - return ret; - }, - findTarget: function(touch, id) { - if (this.currentTouchEvent.type === 'touchstart') { - if (this.isPrimaryTouch(touch)) { - var fastPath = { - clientX: touch.clientX, - clientY: touch.clientY, - path: this.currentTouchEvent.path, - target: this.currentTouchEvent.target - }; - return scope.findTarget(fastPath); - } else { - return scope.findTarget(touch); - } - } - // reuse target we found in touchstart - return pointermap.get(id); - }, - touchToPointer: function(inTouch) { - var cte = this.currentTouchEvent; - var e = dispatcher.cloneEvent(inTouch); - // Spec specifies that pointerId 1 is reserved for Mouse. - // Touch identifiers can start at 0. - // Add 2 to the touch identifier for compatibility. - var id = e.pointerId = inTouch.identifier + 2; - e.target = this.findTarget(inTouch, id); - e.bubbles = true; - e.cancelable = true; - e.detail = this.clickCount; - e.buttons = this.typeToButtons(cte.type); - e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0; - e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0; - e.pressure = inTouch.webkitForce || inTouch.force || 0.5; - e.isPrimary = this.isPrimaryTouch(inTouch); - e.pointerType = this.POINTER_TYPE; - e._source = 'touch'; - // forward touch preventDefaults - var self = this; - e.preventDefault = function() { - self.scrolling = false; - self.firstXY = null; - cte.preventDefault(); - }; - return e; - }, - processTouches: function(inEvent, inFunction) { - var tl = inEvent.changedTouches; - this.currentTouchEvent = inEvent; - for (var i = 0, t, p; i < tl.length; i++) { - t = tl[i]; - p = this.touchToPointer(t); - if (inEvent.type === 'touchstart') { - pointermap.set(p.pointerId, p.target); - } - if (pointermap.has(p.pointerId)) { - inFunction.call(this, p); - } - if (inEvent.type === 'touchend' || inEvent._cancel) { - this.cleanUpPointer(p); - } - } - }, - // For single axis scrollers, determines whether the element should emit - // pointer events or behave as a scroller - shouldScroll: function(inEvent) { - if (this.firstXY) { - var ret; - var touchAction = scope.targetFinding.findTouchAction(inEvent); - var scrollAxis = this.touchActionToScrollType(touchAction); - if (scrollAxis === 'none') { - // this element is a touch-action: none, should never scroll - ret = false; - } else if (scrollAxis === 'XY') { - // this element should always scroll - ret = true; - } else { - var t = inEvent.changedTouches[0]; - // check the intended scroll axis, and other axis - var a = scrollAxis; - var oa = scrollAxis === 'Y' ? 'X' : 'Y'; - var da = Math.abs(t['client' + a] - this.firstXY[a]); - var doa = Math.abs(t['client' + oa] - this.firstXY[oa]); - // if delta in the scroll axis > delta other axis, scroll instead of - // making events - ret = da >= doa; - } - return ret; - } - }, - findTouch: function(inTL, inId) { - for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) { - if (t.identifier === inId) { - return true; - } - } - }, - // In some instances, a touchstart can happen without a touchend. This - // leaves the pointermap in a broken state. - // Therefore, on every touchstart, we remove the touches that did not fire a - // touchend event. - // To keep state globally consistent, we fire a - // pointercancel for this "abandoned" touch - vacuumTouches: function(inEvent) { - var tl = inEvent.touches; - // pointermap.pointers() should be < tl.length here, as the touchstart has not - // been processed yet. - if (pointermap.pointers() >= tl.length) { - var d = []; - pointermap.forEach(function(value, key) { - // Never remove pointerId == 1, which is mouse. - // Touch identifiers are 2 smaller than their pointerId, which is the - // index in pointermap. - if (key !== 1 && !this.findTouch(tl, key - 2)) { - var p = value; - d.push(p); - } - }, this); - d.forEach(function(p) { - this.cancel(p); - pointermap.delete(p.pointerId); - }, this); - } - }, - touchstart: function(inEvent) { - this.vacuumTouches(inEvent); - this.setPrimaryTouch(inEvent.changedTouches[0]); - this.dedupSynthMouse(inEvent); - if (!this.scrolling) { - this.clickCount++; - this.processTouches(inEvent, this.down); - } - }, - down: function(inPointer) { - dispatcher.down(inPointer); - }, - touchmove: function(inEvent) { - if (HAS_TOUCH_ACTION) { - // touchevent.cancelable == false is sent when the page is scrolling under native Touch Action in Chrome 36 - // https://groups.google.com/a/chromium.org/d/msg/input-dev/wHnyukcYBcA/b9kmtwM1jJQJ - if (inEvent.cancelable) { - this.processTouches(inEvent, this.move); - } - } else { - if (!this.scrolling) { - if (this.scrolling === null && this.shouldScroll(inEvent)) { - this.scrolling = true; - } else { - this.scrolling = false; - inEvent.preventDefault(); - this.processTouches(inEvent, this.move); - } - } else if (this.firstXY) { - var t = inEvent.changedTouches[0]; - var dx = t.clientX - this.firstXY.X; - var dy = t.clientY - this.firstXY.Y; - var dd = Math.sqrt(dx * dx + dy * dy); - if (dd >= HYSTERESIS) { - this.touchcancel(inEvent); - this.scrolling = true; - this.firstXY = null; - } - } - } - }, - move: function(inPointer) { - dispatcher.move(inPointer); - }, - touchend: function(inEvent) { - this.dedupSynthMouse(inEvent); - this.processTouches(inEvent, this.up); - }, - up: function(inPointer) { - inPointer.relatedTarget = scope.findTarget(inPointer); - dispatcher.up(inPointer); - }, - cancel: function(inPointer) { - dispatcher.cancel(inPointer); - }, - touchcancel: function(inEvent) { - inEvent._cancel = true; - this.processTouches(inEvent, this.cancel); - }, - cleanUpPointer: function(inPointer) { - pointermap['delete'](inPointer.pointerId); - this.removePrimaryPointer(inPointer); - }, - // prevent synth mouse events from creating pointer events - dedupSynthMouse: function(inEvent) { - var lts = scope.mouseEvents.lastTouches; - var t = inEvent.changedTouches[0]; - // only the primary finger will synth mouse events - if (this.isPrimaryTouch(t)) { - // remember x/y of last touch - var lt = {x: t.clientX, y: t.clientY}; - lts.push(lt); - var fn = (function(lts, lt){ - var i = lts.indexOf(lt); - if (i > -1) { - lts.splice(i, 1); - } - }).bind(null, lts, lt); - setTimeout(fn, DEDUP_TIMEOUT); - } - } - }; - - // prevent "ghost clicks" that come from elements that were removed in a touch handler - var STOP_PROP_FN = Event.prototype.stopImmediatePropagation || Event.prototype.stopPropagation; - document.addEventListener('click', function(ev) { - var x = ev.clientX, y = ev.clientY; - // check if a click is within DEDUP_DIST px radius of the touchstart - var closeTo = function(touch) { - var dx = Math.abs(x - touch.x), dy = Math.abs(y - touch.y); - return (dx <= DEDUP_DIST && dy <= DEDUP_DIST); - }; - // if click coordinates are close to touch coordinates, assume the click came from a touch - var wasTouched = scope.mouseEvents.lastTouches.some(closeTo); - // if the click came from touch, and the touchstart target is not in the path of the click event, - // then the touchstart target was probably removed, and the click should be "busted" - var path = scope.targetFinding.path(ev); - if (wasTouched) { - for (var i = 0; i < path.length; i++) { - if (path[i] === touchEvents.firstTarget) { - return; - } - } - ev.preventDefault(); - STOP_PROP_FN.call(ev); - } - }, true); - - scope.touchEvents = touchEvents; -})(window.PolymerGestures); - -(function(scope) { - var dispatcher = scope.dispatcher; - var pointermap = dispatcher.pointermap; - var HAS_BITMAP_TYPE = window.MSPointerEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number'; - var msEvents = { - events: [ - 'MSPointerDown', - 'MSPointerMove', - 'MSPointerUp', - 'MSPointerCancel', - ], - register: function(target) { - dispatcher.listen(target, this.events); - }, - unregister: function(target) { - if (target.nodeType === Node.DOCUMENT_NODE) { - return; - } - dispatcher.unlisten(target, this.events); - }, - POINTER_TYPES: [ - '', - 'unavailable', - 'touch', - 'pen', - 'mouse' - ], - prepareEvent: function(inEvent) { - var e = inEvent; - e = dispatcher.cloneEvent(inEvent); - if (HAS_BITMAP_TYPE) { - e.pointerType = this.POINTER_TYPES[inEvent.pointerType]; - } - e._source = 'ms'; - return e; - }, - cleanup: function(id) { - pointermap['delete'](id); - }, - MSPointerDown: function(inEvent) { - var e = this.prepareEvent(inEvent); - e.target = scope.findTarget(inEvent); - pointermap.set(inEvent.pointerId, e.target); - dispatcher.down(e); - }, - MSPointerMove: function(inEvent) { - var target = pointermap.get(inEvent.pointerId); - if (target) { - var e = this.prepareEvent(inEvent); - e.target = target; - dispatcher.move(e); - } - }, - MSPointerUp: function(inEvent) { - var e = this.prepareEvent(inEvent); - e.relatedTarget = scope.findTarget(inEvent); - e.target = pointermap.get(e.pointerId); - dispatcher.up(e); - this.cleanup(inEvent.pointerId); - }, - MSPointerCancel: function(inEvent) { - var e = this.prepareEvent(inEvent); - e.relatedTarget = scope.findTarget(inEvent); - e.target = pointermap.get(e.pointerId); - dispatcher.cancel(e); - this.cleanup(inEvent.pointerId); - } - }; - - scope.msEvents = msEvents; -})(window.PolymerGestures); - -(function(scope) { - var dispatcher = scope.dispatcher; - var pointermap = dispatcher.pointermap; - var pointerEvents = { - events: [ - 'pointerdown', - 'pointermove', - 'pointerup', - 'pointercancel' - ], - prepareEvent: function(inEvent) { - var e = dispatcher.cloneEvent(inEvent); - e._source = 'pointer'; - return e; - }, - register: function(target) { - dispatcher.listen(target, this.events); - }, - unregister: function(target) { - if (target.nodeType === Node.DOCUMENT_NODE) { - return; - } - dispatcher.unlisten(target, this.events); - }, - cleanup: function(id) { - pointermap['delete'](id); - }, - pointerdown: function(inEvent) { - var e = this.prepareEvent(inEvent); - e.target = scope.findTarget(inEvent); - pointermap.set(e.pointerId, e.target); - dispatcher.down(e); - }, - pointermove: function(inEvent) { - var target = pointermap.get(inEvent.pointerId); - if (target) { - var e = this.prepareEvent(inEvent); - e.target = target; - dispatcher.move(e); - } - }, - pointerup: function(inEvent) { - var e = this.prepareEvent(inEvent); - e.relatedTarget = scope.findTarget(inEvent); - e.target = pointermap.get(e.pointerId); - dispatcher.up(e); - this.cleanup(inEvent.pointerId); - }, - pointercancel: function(inEvent) { - var e = this.prepareEvent(inEvent); - e.relatedTarget = scope.findTarget(inEvent); - e.target = pointermap.get(e.pointerId); - dispatcher.cancel(e); - this.cleanup(inEvent.pointerId); - } - }; - - scope.pointerEvents = pointerEvents; -})(window.PolymerGestures); - -/** - * This module contains the handlers for native platform events. - * From here, the dispatcher is called to create unified pointer events. - * Included are touch events (v1), mouse events, and MSPointerEvents. - */ -(function(scope) { - - var dispatcher = scope.dispatcher; - var nav = window.navigator; - - if (window.PointerEvent) { - dispatcher.registerSource('pointer', scope.pointerEvents); - } else if (nav.msPointerEnabled) { - dispatcher.registerSource('ms', scope.msEvents); - } else { - dispatcher.registerSource('mouse', scope.mouseEvents); - if (window.ontouchstart !== undefined) { - dispatcher.registerSource('touch', scope.touchEvents); - } - } - - // Work around iOS bugs https://bugs.webkit.org/show_bug.cgi?id=135628 and https://bugs.webkit.org/show_bug.cgi?id=136506 - var ua = navigator.userAgent; - var IS_IOS = ua.match(/iPad|iPhone|iPod/) && 'ontouchstart' in window; - - dispatcher.IS_IOS = IS_IOS; - scope.touchEvents.IS_IOS = IS_IOS; - - dispatcher.register(document, true); -})(window.PolymerGestures); - -/** - * This event denotes the beginning of a series of tracking events. - * - * @module PointerGestures - * @submodule Events - * @class trackstart - */ -/** - * Pixels moved in the x direction since trackstart. - * @type Number - * @property dx - */ -/** - * Pixes moved in the y direction since trackstart. - * @type Number - * @property dy - */ -/** - * Pixels moved in the x direction since the last track. - * @type Number - * @property ddx - */ -/** - * Pixles moved in the y direction since the last track. - * @type Number - * @property ddy - */ -/** - * The clientX position of the track gesture. - * @type Number - * @property clientX - */ -/** - * The clientY position of the track gesture. - * @type Number - * @property clientY - */ -/** - * The pageX position of the track gesture. - * @type Number - * @property pageX - */ -/** - * The pageY position of the track gesture. - * @type Number - * @property pageY - */ -/** - * The screenX position of the track gesture. - * @type Number - * @property screenX - */ -/** - * The screenY position of the track gesture. - * @type Number - * @property screenY - */ -/** - * The last x axis direction of the pointer. - * @type Number - * @property xDirection - */ -/** - * The last y axis direction of the pointer. - * @type Number - * @property yDirection - */ -/** - * A shared object between all tracking events. - * @type Object - * @property trackInfo - */ -/** - * The element currently under the pointer. - * @type Element - * @property relatedTarget - */ -/** - * The type of pointer that make the track gesture. - * @type String - * @property pointerType - */ -/** - * - * This event fires for all pointer movement being tracked. - * - * @class track - * @extends trackstart - */ -/** - * This event fires when the pointer is no longer being tracked. - * - * @class trackend - * @extends trackstart - */ - - (function(scope) { - var dispatcher = scope.dispatcher; - var eventFactory = scope.eventFactory; - var pointermap = new scope.PointerMap(); - var track = { - events: [ - 'down', - 'move', - 'up', - ], - exposes: [ - 'trackstart', - 'track', - 'trackx', - 'tracky', - 'trackend' - ], - defaultActions: { - 'track': 'none', - 'trackx': 'pan-y', - 'tracky': 'pan-x' - }, - WIGGLE_THRESHOLD: 4, - clampDir: function(inDelta) { - return inDelta > 0 ? 1 : -1; - }, - calcPositionDelta: function(inA, inB) { - var x = 0, y = 0; - if (inA && inB) { - x = inB.pageX - inA.pageX; - y = inB.pageY - inA.pageY; - } - return {x: x, y: y}; - }, - fireTrack: function(inType, inEvent, inTrackingData) { - var t = inTrackingData; - var d = this.calcPositionDelta(t.downEvent, inEvent); - var dd = this.calcPositionDelta(t.lastMoveEvent, inEvent); - if (dd.x) { - t.xDirection = this.clampDir(dd.x); - } else if (inType === 'trackx') { - return; - } - if (dd.y) { - t.yDirection = this.clampDir(dd.y); - } else if (inType === 'tracky') { - return; - } - var gestureProto = { - bubbles: true, - cancelable: true, - trackInfo: t.trackInfo, - relatedTarget: inEvent.relatedTarget, - pointerType: inEvent.pointerType, - pointerId: inEvent.pointerId, - _source: 'track' - }; - if (inType !== 'tracky') { - gestureProto.x = inEvent.x; - gestureProto.dx = d.x; - gestureProto.ddx = dd.x; - gestureProto.clientX = inEvent.clientX; - gestureProto.pageX = inEvent.pageX; - gestureProto.screenX = inEvent.screenX; - gestureProto.xDirection = t.xDirection; - } - if (inType !== 'trackx') { - gestureProto.dy = d.y; - gestureProto.ddy = dd.y; - gestureProto.y = inEvent.y; - gestureProto.clientY = inEvent.clientY; - gestureProto.pageY = inEvent.pageY; - gestureProto.screenY = inEvent.screenY; - gestureProto.yDirection = t.yDirection; - } - var e = eventFactory.makeGestureEvent(inType, gestureProto); - t.downTarget.dispatchEvent(e); - }, - down: function(inEvent) { - if (inEvent.isPrimary && (inEvent.pointerType === 'mouse' ? inEvent.buttons === 1 : true)) { - var p = { - downEvent: inEvent, - downTarget: inEvent.target, - trackInfo: {}, - lastMoveEvent: null, - xDirection: 0, - yDirection: 0, - tracking: false - }; - pointermap.set(inEvent.pointerId, p); - } - }, - move: function(inEvent) { - var p = pointermap.get(inEvent.pointerId); - if (p) { - if (!p.tracking) { - var d = this.calcPositionDelta(p.downEvent, inEvent); - var move = d.x * d.x + d.y * d.y; - // start tracking only if finger moves more than WIGGLE_THRESHOLD - if (move > this.WIGGLE_THRESHOLD) { - p.tracking = true; - p.lastMoveEvent = p.downEvent; - this.fireTrack('trackstart', inEvent, p); - } - } - if (p.tracking) { - this.fireTrack('track', inEvent, p); - this.fireTrack('trackx', inEvent, p); - this.fireTrack('tracky', inEvent, p); - } - p.lastMoveEvent = inEvent; - } - }, - up: function(inEvent) { - var p = pointermap.get(inEvent.pointerId); - if (p) { - if (p.tracking) { - this.fireTrack('trackend', inEvent, p); - } - pointermap.delete(inEvent.pointerId); - } - } - }; - dispatcher.registerGesture('track', track); - })(window.PolymerGestures); - -/** - * This event is fired when a pointer is held down for 200ms. - * - * @module PointerGestures - * @submodule Events - * @class hold - */ -/** - * Type of pointer that made the holding event. - * @type String - * @property pointerType - */ -/** - * Screen X axis position of the held pointer - * @type Number - * @property clientX - */ -/** - * Screen Y axis position of the held pointer - * @type Number - * @property clientY - */ -/** - * Type of pointer that made the holding event. - * @type String - * @property pointerType - */ -/** - * This event is fired every 200ms while a pointer is held down. - * - * @class holdpulse - * @extends hold - */ -/** - * Milliseconds pointer has been held down. - * @type Number - * @property holdTime - */ -/** - * This event is fired when a held pointer is released or moved. - * - * @class release - */ - -(function(scope) { - var dispatcher = scope.dispatcher; - var eventFactory = scope.eventFactory; - var hold = { - // wait at least HOLD_DELAY ms between hold and pulse events - HOLD_DELAY: 200, - // pointer can move WIGGLE_THRESHOLD pixels before not counting as a hold - WIGGLE_THRESHOLD: 16, - events: [ - 'down', - 'move', - 'up', - ], - exposes: [ - 'hold', - 'holdpulse', - 'release' - ], - heldPointer: null, - holdJob: null, - pulse: function() { - var hold = Date.now() - this.heldPointer.timeStamp; - var type = this.held ? 'holdpulse' : 'hold'; - this.fireHold(type, hold); - this.held = true; - }, - cancel: function() { - clearInterval(this.holdJob); - if (this.held) { - this.fireHold('release'); - } - this.held = false; - this.heldPointer = null; - this.target = null; - this.holdJob = null; - }, - down: function(inEvent) { - if (inEvent.isPrimary && !this.heldPointer) { - this.heldPointer = inEvent; - this.target = inEvent.target; - this.holdJob = setInterval(this.pulse.bind(this), this.HOLD_DELAY); - } - }, - up: function(inEvent) { - if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) { - this.cancel(); - } - }, - move: function(inEvent) { - if (this.heldPointer && this.heldPointer.pointerId === inEvent.pointerId) { - var x = inEvent.clientX - this.heldPointer.clientX; - var y = inEvent.clientY - this.heldPointer.clientY; - if ((x * x + y * y) > this.WIGGLE_THRESHOLD) { - this.cancel(); - } - } - }, - fireHold: function(inType, inHoldTime) { - var p = { - bubbles: true, - cancelable: true, - pointerType: this.heldPointer.pointerType, - pointerId: this.heldPointer.pointerId, - x: this.heldPointer.clientX, - y: this.heldPointer.clientY, - _source: 'hold' - }; - if (inHoldTime) { - p.holdTime = inHoldTime; - } - var e = eventFactory.makeGestureEvent(inType, p); - this.target.dispatchEvent(e); - } - }; - dispatcher.registerGesture('hold', hold); -})(window.PolymerGestures); - -/** - * This event is fired when a pointer quickly goes down and up, and is used to - * denote activation. - * - * Any gesture event can prevent the tap event from being created by calling - * `event.preventTap`. - * - * Any pointer event can prevent the tap by setting the `tapPrevented` property - * on itself. - * - * @module PointerGestures - * @submodule Events - * @class tap - */ -/** - * X axis position of the tap. - * @property x - * @type Number - */ -/** - * Y axis position of the tap. - * @property y - * @type Number - */ -/** - * Type of the pointer that made the tap. - * @property pointerType - * @type String - */ -(function(scope) { - var dispatcher = scope.dispatcher; - var eventFactory = scope.eventFactory; - var pointermap = new scope.PointerMap(); - var tap = { - events: [ - 'down', - 'up' - ], - exposes: [ - 'tap' - ], - down: function(inEvent) { - if (inEvent.isPrimary && !inEvent.tapPrevented) { - pointermap.set(inEvent.pointerId, { - target: inEvent.target, - buttons: inEvent.buttons, - x: inEvent.clientX, - y: inEvent.clientY - }); - } - }, - shouldTap: function(e, downState) { - var tap = true; - if (e.pointerType === 'mouse') { - // only allow left click to tap for mouse - tap = (e.buttons ^ 1) && (downState.buttons & 1); - } - return tap && !e.tapPrevented; - }, - up: function(inEvent) { - var start = pointermap.get(inEvent.pointerId); - if (start && this.shouldTap(inEvent, start)) { - // up.relatedTarget is target currently under finger - var t = scope.targetFinding.LCA(start.target, inEvent.relatedTarget); - if (t) { - var e = eventFactory.makeGestureEvent('tap', { - bubbles: true, - cancelable: true, - x: inEvent.clientX, - y: inEvent.clientY, - detail: inEvent.detail, - pointerType: inEvent.pointerType, - pointerId: inEvent.pointerId, - altKey: inEvent.altKey, - ctrlKey: inEvent.ctrlKey, - metaKey: inEvent.metaKey, - shiftKey: inEvent.shiftKey, - _source: 'tap' - }); - t.dispatchEvent(e); - } - } - pointermap.delete(inEvent.pointerId); - } - }; - // patch eventFactory to remove id from tap's pointermap for preventTap calls - eventFactory.preventTap = function(e) { - return function() { - e.tapPrevented = true; - pointermap.delete(e.pointerId); - }; - }; - dispatcher.registerGesture('tap', tap); -})(window.PolymerGestures); - -/* - * Basic strategy: find the farthest apart points, use as diameter of circle - * react to size change and rotation of the chord - */ - -/** - * @module pointer-gestures - * @submodule Events - * @class pinch - */ -/** - * Scale of the pinch zoom gesture - * @property scale - * @type Number - */ -/** - * Center X position of pointers causing pinch - * @property centerX - * @type Number - */ -/** - * Center Y position of pointers causing pinch - * @property centerY - * @type Number - */ - -/** - * @module pointer-gestures - * @submodule Events - * @class rotate - */ -/** - * Angle (in degrees) of rotation. Measured from starting positions of pointers. - * @property angle - * @type Number - */ -/** - * Center X position of pointers causing rotation - * @property centerX - * @type Number - */ -/** - * Center Y position of pointers causing rotation - * @property centerY - * @type Number - */ -(function(scope) { - var dispatcher = scope.dispatcher; - var eventFactory = scope.eventFactory; - var pointermap = new scope.PointerMap(); - var RAD_TO_DEG = 180 / Math.PI; - var pinch = { - events: [ - 'down', - 'up', - 'move', - 'cancel' - ], - exposes: [ - 'pinchstart', - 'pinch', - 'pinchend', - 'rotate' - ], - defaultActions: { - 'pinch': 'none', - 'rotate': 'none' - }, - reference: {}, - down: function(inEvent) { - pointermap.set(inEvent.pointerId, inEvent); - if (pointermap.pointers() == 2) { - var points = this.calcChord(); - var angle = this.calcAngle(points); - this.reference = { - angle: angle, - diameter: points.diameter, - target: scope.targetFinding.LCA(points.a.target, points.b.target) - }; - - this.firePinch('pinchstart', points.diameter, points); - } - }, - up: function(inEvent) { - var p = pointermap.get(inEvent.pointerId); - var num = pointermap.pointers(); - if (p) { - if (num === 2) { - // fire 'pinchend' before deleting pointer - var points = this.calcChord(); - this.firePinch('pinchend', points.diameter, points); - } - pointermap.delete(inEvent.pointerId); - } - }, - move: function(inEvent) { - if (pointermap.has(inEvent.pointerId)) { - pointermap.set(inEvent.pointerId, inEvent); - if (pointermap.pointers() > 1) { - this.calcPinchRotate(); - } - } - }, - cancel: function(inEvent) { - this.up(inEvent); - }, - firePinch: function(type, diameter, points) { - var zoom = diameter / this.reference.diameter; - var e = eventFactory.makeGestureEvent(type, { - bubbles: true, - cancelable: true, - scale: zoom, - centerX: points.center.x, - centerY: points.center.y, - _source: 'pinch' - }); - this.reference.target.dispatchEvent(e); - }, - fireRotate: function(angle, points) { - var diff = Math.round((angle - this.reference.angle) % 360); - var e = eventFactory.makeGestureEvent('rotate', { - bubbles: true, - cancelable: true, - angle: diff, - centerX: points.center.x, - centerY: points.center.y, - _source: 'pinch' - }); - this.reference.target.dispatchEvent(e); - }, - calcPinchRotate: function() { - var points = this.calcChord(); - var diameter = points.diameter; - var angle = this.calcAngle(points); - if (diameter != this.reference.diameter) { - this.firePinch('pinch', diameter, points); - } - if (angle != this.reference.angle) { - this.fireRotate(angle, points); - } - }, - calcChord: function() { - var pointers = []; - pointermap.forEach(function(p) { - pointers.push(p); - }); - var dist = 0; - // start with at least two pointers - var points = {a: pointers[0], b: pointers[1]}; - var x, y, d; - for (var i = 0; i < pointers.length; i++) { - var a = pointers[i]; - for (var j = i + 1; j < pointers.length; j++) { - var b = pointers[j]; - x = Math.abs(a.clientX - b.clientX); - y = Math.abs(a.clientY - b.clientY); - d = x + y; - if (d > dist) { - dist = d; - points = {a: a, b: b}; - } - } - } - x = Math.abs(points.a.clientX + points.b.clientX) / 2; - y = Math.abs(points.a.clientY + points.b.clientY) / 2; - points.center = { x: x, y: y }; - points.diameter = dist; - return points; - }, - calcAngle: function(points) { - var x = points.a.clientX - points.b.clientX; - var y = points.a.clientY - points.b.clientY; - return (360 + Math.atan2(y, x) * RAD_TO_DEG) % 360; - } - }; - dispatcher.registerGesture('pinch', pinch); -})(window.PolymerGestures); - -(function (global) { - 'use strict'; - - var Token, - TokenName, - Syntax, - Messages, - source, - index, - length, - delegate, - lookahead, - state; - - Token = { - BooleanLiteral: 1, - EOF: 2, - Identifier: 3, - Keyword: 4, - NullLiteral: 5, - NumericLiteral: 6, - Punctuator: 7, - StringLiteral: 8 - }; - - TokenName = {}; - TokenName[Token.BooleanLiteral] = 'Boolean'; - TokenName[Token.EOF] = ''; - TokenName[Token.Identifier] = 'Identifier'; - TokenName[Token.Keyword] = 'Keyword'; - TokenName[Token.NullLiteral] = 'Null'; - TokenName[Token.NumericLiteral] = 'Numeric'; - TokenName[Token.Punctuator] = 'Punctuator'; - TokenName[Token.StringLiteral] = 'String'; - - Syntax = { - ArrayExpression: 'ArrayExpression', - BinaryExpression: 'BinaryExpression', - CallExpression: 'CallExpression', - ConditionalExpression: 'ConditionalExpression', - EmptyStatement: 'EmptyStatement', - ExpressionStatement: 'ExpressionStatement', - Identifier: 'Identifier', - Literal: 'Literal', - LabeledStatement: 'LabeledStatement', - LogicalExpression: 'LogicalExpression', - MemberExpression: 'MemberExpression', - ObjectExpression: 'ObjectExpression', - Program: 'Program', - Property: 'Property', - ThisExpression: 'ThisExpression', - UnaryExpression: 'UnaryExpression' - }; - - // Error messages should be identical to V8. - Messages = { - UnexpectedToken: 'Unexpected token %0', - UnknownLabel: 'Undefined label \'%0\'', - Redeclaration: '%0 \'%1\' has already been declared' - }; - - // Ensure the condition is true, otherwise throw an error. - // This is only to have a better contract semantic, i.e. another safety net - // to catch a logic error. The condition shall be fulfilled in normal case. - // Do NOT use this to enforce a certain condition on any user input. - - function assert(condition, message) { - if (!condition) { - throw new Error('ASSERT: ' + message); - } - } - - function isDecimalDigit(ch) { - return (ch >= 48 && ch <= 57); // 0..9 - } - - - // 7.2 White Space - - function isWhiteSpace(ch) { - return (ch === 32) || // space - (ch === 9) || // tab - (ch === 0xB) || - (ch === 0xC) || - (ch === 0xA0) || - (ch >= 0x1680 && '\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\uFEFF'.indexOf(String.fromCharCode(ch)) > 0); - } - - // 7.3 Line Terminators - - function isLineTerminator(ch) { - return (ch === 10) || (ch === 13) || (ch === 0x2028) || (ch === 0x2029); - } - - // 7.6 Identifier Names and Identifiers - - function isIdentifierStart(ch) { - return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) - (ch >= 65 && ch <= 90) || // A..Z - (ch >= 97 && ch <= 122); // a..z - } - - function isIdentifierPart(ch) { - return (ch === 36) || (ch === 95) || // $ (dollar) and _ (underscore) - (ch >= 65 && ch <= 90) || // A..Z - (ch >= 97 && ch <= 122) || // a..z - (ch >= 48 && ch <= 57); // 0..9 - } - - // 7.6.1.1 Keywords - - function isKeyword(id) { - return (id === 'this') - } - - // 7.4 Comments - - function skipWhitespace() { - while (index < length && isWhiteSpace(source.charCodeAt(index))) { - ++index; - } - } - - function getIdentifier() { - var start, ch; - - start = index++; - while (index < length) { - ch = source.charCodeAt(index); - if (isIdentifierPart(ch)) { - ++index; - } else { - break; - } - } - - return source.slice(start, index); - } - - function scanIdentifier() { - var start, id, type; - - start = index; - - id = getIdentifier(); - - // There is no keyword or literal with only one character. - // Thus, it must be an identifier. - if (id.length === 1) { - type = Token.Identifier; - } else if (isKeyword(id)) { - type = Token.Keyword; - } else if (id === 'null') { - type = Token.NullLiteral; - } else if (id === 'true' || id === 'false') { - type = Token.BooleanLiteral; - } else { - type = Token.Identifier; - } - - return { - type: type, - value: id, - range: [start, index] - }; - } - - - // 7.7 Punctuators - - function scanPunctuator() { - var start = index, - code = source.charCodeAt(index), - code2, - ch1 = source[index], - ch2; - - switch (code) { - - // Check for most common single-character punctuators. - case 46: // . dot - case 40: // ( open bracket - case 41: // ) close bracket - case 59: // ; semicolon - case 44: // , comma - case 123: // { open curly brace - case 125: // } close curly brace - case 91: // [ - case 93: // ] - case 58: // : - case 63: // ? - ++index; - return { - type: Token.Punctuator, - value: String.fromCharCode(code), - range: [start, index] - }; - - default: - code2 = source.charCodeAt(index + 1); - - // '=' (char #61) marks an assignment or comparison operator. - if (code2 === 61) { - switch (code) { - case 37: // % - case 38: // & - case 42: // *: - case 43: // + - case 45: // - - case 47: // / - case 60: // < - case 62: // > - case 124: // | - index += 2; - return { - type: Token.Punctuator, - value: String.fromCharCode(code) + String.fromCharCode(code2), - range: [start, index] - }; - - case 33: // ! - case 61: // = - index += 2; - - // !== and === - if (source.charCodeAt(index) === 61) { - ++index; - } - return { - type: Token.Punctuator, - value: source.slice(start, index), - range: [start, index] - }; - default: - break; - } - } - break; - } - - // Peek more characters. - - ch2 = source[index + 1]; - - // Other 2-character punctuators: && || - - if (ch1 === ch2 && ('&|'.indexOf(ch1) >= 0)) { - index += 2; - return { - type: Token.Punctuator, - value: ch1 + ch2, - range: [start, index] - }; - } - - if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { - ++index; - return { - type: Token.Punctuator, - value: ch1, - range: [start, index] - }; - } - - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - // 7.8.3 Numeric Literals - function scanNumericLiteral() { - var number, start, ch; - - ch = source[index]; - assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), - 'Numeric literal must start with a decimal digit or a decimal point'); - - start = index; - number = ''; - if (ch !== '.') { - number = source[index++]; - ch = source[index]; - - // Hex number starts with '0x'. - // Octal number starts with '0'. - if (number === '0') { - // decimal number starts with '0' such as '09' is illegal. - if (ch && isDecimalDigit(ch.charCodeAt(0))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === '.') { - number += source[index++]; - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === 'e' || ch === 'E') { - number += source[index++]; - - ch = source[index]; - if (ch === '+' || ch === '-') { - number += source[index++]; - } - if (isDecimalDigit(source.charCodeAt(index))) { - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - } else { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.NumericLiteral, - value: parseFloat(number), - range: [start, index] - }; - } - - // 7.8.4 String Literals - - function scanStringLiteral() { - var str = '', quote, start, ch, octal = false; - - quote = source[index]; - assert((quote === '\'' || quote === '"'), - 'String literal must starts with a quote'); - - start = index; - ++index; - - while (index < length) { - ch = source[index++]; - - if (ch === quote) { - quote = ''; - break; - } else if (ch === '\\') { - ch = source[index++]; - if (!ch || !isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'n': - str += '\n'; - break; - case 'r': - str += '\r'; - break; - case 't': - str += '\t'; - break; - case 'b': - str += '\b'; - break; - case 'f': - str += '\f'; - break; - case 'v': - str += '\x0B'; - break; - - default: - str += ch; - break; - } - } else { - if (ch === '\r' && source[index] === '\n') { - ++index; - } - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - break; - } else { - str += ch; - } - } - - if (quote !== '') { - throwError({}, Messages.UnexpectedToken, 'ILLEGAL'); - } - - return { - type: Token.StringLiteral, - value: str, - octal: octal, - range: [start, index] - }; - } - - function isIdentifierName(token) { - return token.type === Token.Identifier || - token.type === Token.Keyword || - token.type === Token.BooleanLiteral || - token.type === Token.NullLiteral; - } - - function advance() { - var ch; - - skipWhitespace(); - - if (index >= length) { - return { - type: Token.EOF, - range: [index, index] - }; - } - - ch = source.charCodeAt(index); - - // Very common: ( and ) and ; - if (ch === 40 || ch === 41 || ch === 58) { - return scanPunctuator(); - } - - // String literal starts with single quote (#39) or double quote (#34). - if (ch === 39 || ch === 34) { - return scanStringLiteral(); - } - - if (isIdentifierStart(ch)) { - return scanIdentifier(); - } - - // Dot (.) char #46 can also start a floating-point number, hence the need - // to check the next character. - if (ch === 46) { - if (isDecimalDigit(source.charCodeAt(index + 1))) { - return scanNumericLiteral(); - } - return scanPunctuator(); - } - - if (isDecimalDigit(ch)) { - return scanNumericLiteral(); - } - - return scanPunctuator(); - } - - function lex() { - var token; - - token = lookahead; - index = token.range[1]; - - lookahead = advance(); - - index = token.range[1]; - - return token; - } - - function peek() { - var pos; - - pos = index; - lookahead = advance(); - index = pos; - } - - // Throw an exception - - function throwError(token, messageFormat) { - var error, - args = Array.prototype.slice.call(arguments, 2), - msg = messageFormat.replace( - /%(\d)/g, - function (whole, index) { - assert(index < args.length, 'Message reference must be in range'); - return args[index]; - } - ); - - error = new Error(msg); - error.index = index; - error.description = msg; - throw error; - } - - // Throw an exception because of the token. - - function throwUnexpected(token) { - throwError(token, Messages.UnexpectedToken, token.value); - } - - // Expect the next token to match the specified punctuator. - // If not, an exception will be thrown. - - function expect(value) { - var token = lex(); - if (token.type !== Token.Punctuator || token.value !== value) { - throwUnexpected(token); - } - } - - // Return true if the next token matches the specified punctuator. - - function match(value) { - return lookahead.type === Token.Punctuator && lookahead.value === value; - } - - // Return true if the next token matches the specified keyword - - function matchKeyword(keyword) { - return lookahead.type === Token.Keyword && lookahead.value === keyword; - } - - function consumeSemicolon() { - // Catch the very common case first: immediately a semicolon (char #59). - if (source.charCodeAt(index) === 59) { - lex(); - return; - } - - skipWhitespace(); - - if (match(';')) { - lex(); - return; - } - - if (lookahead.type !== Token.EOF && !match('}')) { - throwUnexpected(lookahead); - } - } - - // 11.1.4 Array Initialiser - - function parseArrayInitialiser() { - var elements = []; - - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else { - elements.push(parseExpression()); - - if (!match(']')) { - expect(','); - } - } - } - - expect(']'); - - return delegate.createArrayExpression(elements); - } - - // 11.1.5 Object Initialiser - - function parseObjectPropertyKey() { - var token; - - skipWhitespace(); - token = lex(); - - // Note: This function is called only from parseObjectProperty(), where - // EOF and Punctuator tokens are already filtered out. - if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) { - return delegate.createLiteral(token); - } - - return delegate.createIdentifier(token.value); - } - - function parseObjectProperty() { - var token, key; - - token = lookahead; - skipWhitespace(); - - if (token.type === Token.EOF || token.type === Token.Punctuator) { - throwUnexpected(token); - } - - key = parseObjectPropertyKey(); - expect(':'); - return delegate.createProperty('init', key, parseExpression()); - } - - function parseObjectInitialiser() { - var properties = []; - - expect('{'); - - while (!match('}')) { - properties.push(parseObjectProperty()); - - if (!match('}')) { - expect(','); - } - } - - expect('}'); - - return delegate.createObjectExpression(properties); - } - - // 11.1.6 The Grouping Operator - - function parseGroupExpression() { - var expr; - - expect('('); - - expr = parseExpression(); - - expect(')'); - - return expr; - } - - - // 11.1 Primary Expressions - - function parsePrimaryExpression() { - var type, token, expr; - - if (match('(')) { - return parseGroupExpression(); - } - - type = lookahead.type; - - if (type === Token.Identifier) { - expr = delegate.createIdentifier(lex().value); - } else if (type === Token.StringLiteral || type === Token.NumericLiteral) { - expr = delegate.createLiteral(lex()); - } else if (type === Token.Keyword) { - if (matchKeyword('this')) { - lex(); - expr = delegate.createThisExpression(); - } - } else if (type === Token.BooleanLiteral) { - token = lex(); - token.value = (token.value === 'true'); - expr = delegate.createLiteral(token); - } else if (type === Token.NullLiteral) { - token = lex(); - token.value = null; - expr = delegate.createLiteral(token); - } else if (match('[')) { - expr = parseArrayInitialiser(); - } else if (match('{')) { - expr = parseObjectInitialiser(); - } - - if (expr) { - return expr; - } - - throwUnexpected(lex()); - } - - // 11.2 Left-Hand-Side Expressions - - function parseArguments() { - var args = []; - - expect('('); - - if (!match(')')) { - while (index < length) { - args.push(parseExpression()); - if (match(')')) { - break; - } - expect(','); - } - } - - expect(')'); - - return args; - } - - function parseNonComputedProperty() { - var token; - - token = lex(); - - if (!isIdentifierName(token)) { - throwUnexpected(token); - } - - return delegate.createIdentifier(token.value); - } - - function parseNonComputedMember() { - expect('.'); - - return parseNonComputedProperty(); - } - - function parseComputedMember() { - var expr; - - expect('['); - - expr = parseExpression(); - - expect(']'); - - return expr; - } - - function parseLeftHandSideExpression() { - var expr, args, property; - - expr = parsePrimaryExpression(); - - while (true) { - if (match('[')) { - property = parseComputedMember(); - expr = delegate.createMemberExpression('[', expr, property); - } else if (match('.')) { - property = parseNonComputedMember(); - expr = delegate.createMemberExpression('.', expr, property); - } else if (match('(')) { - args = parseArguments(); - expr = delegate.createCallExpression(expr, args); - } else { - break; - } - } - - return expr; - } - - // 11.3 Postfix Expressions - - var parsePostfixExpression = parseLeftHandSideExpression; - - // 11.4 Unary Operators - - function parseUnaryExpression() { - var token, expr; - - if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { - expr = parsePostfixExpression(); - } else if (match('+') || match('-') || match('!')) { - token = lex(); - expr = parseUnaryExpression(); - expr = delegate.createUnaryExpression(token.value, expr); - } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { - throwError({}, Messages.UnexpectedToken); - } else { - expr = parsePostfixExpression(); - } - - return expr; - } - - function binaryPrecedence(token) { - var prec = 0; - - if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { - return 0; - } - - switch (token.value) { - case '||': - prec = 1; - break; - - case '&&': - prec = 2; - break; - - case '==': - case '!=': - case '===': - case '!==': - prec = 6; - break; - - case '<': - case '>': - case '<=': - case '>=': - case 'instanceof': - prec = 7; - break; - - case 'in': - prec = 7; - break; - - case '+': - case '-': - prec = 9; - break; - - case '*': - case '/': - case '%': - prec = 11; - break; - - default: - break; - } - - return prec; - } - - // 11.5 Multiplicative Operators - // 11.6 Additive Operators - // 11.7 Bitwise Shift Operators - // 11.8 Relational Operators - // 11.9 Equality Operators - // 11.10 Binary Bitwise Operators - // 11.11 Binary Logical Operators - - function parseBinaryExpression() { - var expr, token, prec, stack, right, operator, left, i; - - left = parseUnaryExpression(); - - token = lookahead; - prec = binaryPrecedence(token); - if (prec === 0) { - return left; - } - token.prec = prec; - lex(); - - right = parseUnaryExpression(); - - stack = [left, token, right]; - - while ((prec = binaryPrecedence(lookahead)) > 0) { - - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - operator = stack.pop().value; - left = stack.pop(); - expr = delegate.createBinaryExpression(operator, left, right); - stack.push(expr); - } - - // Shift. - token = lex(); - token.prec = prec; - stack.push(token); - expr = parseUnaryExpression(); - stack.push(expr); - } - - // Final reduce to clean-up the stack. - i = stack.length - 1; - expr = stack[i]; - while (i > 1) { - expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr); - i -= 2; - } - - return expr; - } - - - // 11.12 Conditional Operator - - function parseConditionalExpression() { - var expr, consequent, alternate; - - expr = parseBinaryExpression(); - - if (match('?')) { - lex(); - consequent = parseConditionalExpression(); - expect(':'); - alternate = parseConditionalExpression(); - - expr = delegate.createConditionalExpression(expr, consequent, alternate); - } - - return expr; - } - - // Simplification since we do not support AssignmentExpression. - var parseExpression = parseConditionalExpression; - - // Polymer Syntax extensions - - // Filter :: - // Identifier - // Identifier "(" ")" - // Identifier "(" FilterArguments ")" - - function parseFilter() { - var identifier, args; - - identifier = lex(); - - if (identifier.type !== Token.Identifier) { - throwUnexpected(identifier); - } - - args = match('(') ? parseArguments() : []; - - return delegate.createFilter(identifier.value, args); - } - - // Filters :: - // "|" Filter - // Filters "|" Filter - - function parseFilters() { - while (match('|')) { - lex(); - parseFilter(); - } - } - - // TopLevel :: - // LabelledExpressions - // AsExpression - // InExpression - // FilterExpression - - // AsExpression :: - // FilterExpression as Identifier - - // InExpression :: - // Identifier, Identifier in FilterExpression - // Identifier in FilterExpression - - // FilterExpression :: - // Expression - // Expression Filters - - function parseTopLevel() { - skipWhitespace(); - peek(); - - var expr = parseExpression(); - if (expr) { - if (lookahead.value === ',' || lookahead.value == 'in' && - expr.type === Syntax.Identifier) { - parseInExpression(expr); - } else { - parseFilters(); - if (lookahead.value === 'as') { - parseAsExpression(expr); - } else { - delegate.createTopLevel(expr); - } - } - } - - if (lookahead.type !== Token.EOF) { - throwUnexpected(lookahead); - } - } - - function parseAsExpression(expr) { - lex(); // as - var identifier = lex().value; - delegate.createAsExpression(expr, identifier); - } - - function parseInExpression(identifier) { - var indexName; - if (lookahead.value === ',') { - lex(); - if (lookahead.type !== Token.Identifier) - throwUnexpected(lookahead); - indexName = lex().value; - } - - lex(); // in - var expr = parseExpression(); - parseFilters(); - delegate.createInExpression(identifier.name, indexName, expr); - } - - function parse(code, inDelegate) { - delegate = inDelegate; - source = code; - index = 0; - length = source.length; - lookahead = null; - state = { - labelSet: {} - }; - - return parseTopLevel(); - } - - global.esprima = { - parse: parse - }; -})(this); - -// Copyright (c) 2014 The Polymer Project Authors. All rights reserved. -// This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -// The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -// The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -// Code distributed by Google as part of the polymer project is also -// subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - -(function (global) { - 'use strict'; - - function prepareBinding(expressionText, name, node, filterRegistry) { - var expression; - try { - expression = getExpression(expressionText); - if (expression.scopeIdent && - (node.nodeType !== Node.ELEMENT_NODE || - node.tagName !== 'TEMPLATE' || - (name !== 'bind' && name !== 'repeat'))) { - throw Error('as and in can only be used within