From aca7fe210fbabbaaf127f4469c54977ca7c44886 Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Wed, 15 Apr 2015 13:43:40 -0400 Subject: Wanna use semver proper on this doggy --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'package.json') diff --git a/package.json b/package.json index 1358023..8748ab9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "1.0.0", + "version": "0.1.0", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From 16e63ae2965f403a776de4a799446b0afa03dc1c Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Wed, 15 Apr 2015 13:47:39 -0400 Subject: Fix top level npm installs --- Readme.md | 2 +- package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'package.json') diff --git a/Readme.md b/Readme.md index b9e5b2d..61296e9 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,7 @@ ## To run: -* cd app/node_modules ; for i in * ; do cd $i ; npm install; cd .. ; done ; cd ../.. +* npm install * cd examples * node index diff --git a/package.json b/package.json index 8748ab9..188005c 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "great", "main": "app/index.js", "scripts": { + "postinstall": "./install.sh", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "OKFocus", -- cgit v1.2.3-70-g09d2 From 1ddb94a736d5178a933ef5366a6088469a601997 Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Wed, 15 Apr 2015 13:48:31 -0400 Subject: Make grunt dependencies devDependencies --- package.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'package.json') diff --git a/package.json b/package.json index 188005c..4336556 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,16 @@ "dependencies": { "dotenv": "^1.1.0", "express": "^4.12.3", + "grunt-dentist": "^0.3.4", + "object-assign": "^2.0.0", + "q": "^1.2.0" + }, + "devDependencies": { "grunt": "^0.4.5", "grunt-cli": "^0.1.13", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-concat": "^0.5.1", "grunt-contrib-copy": "^0.8.0", - "grunt-contrib-uglify": "^0.9.1", - "grunt-dentist": "^0.3.4", - "object-assign": "^2.0.0", - "q": "^1.2.0" + "grunt-contrib-uglify": "^0.9.1" } } -- cgit v1.2.3-70-g09d2 From de1b9e99923f5c8892b1f28ab5e8d53bee8c39e7 Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Mon, 18 May 2015 23:00:41 -0400 Subject: Add deploy deps + instructions --- package.json | 1 + site/DEPLOY | 21 +++++++++++++++++++++ site/TODO | 2 ++ 3 files changed, 24 insertions(+) create mode 100644 site/DEPLOY create mode 100644 site/TODO (limited to 'package.json') diff --git a/package.json b/package.json index 4336556..a8a602f 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "express": "^4.12.3", "grunt-dentist": "^0.3.4", "object-assign": "^2.0.0", + "pm2": "^0.12.15", "q": "^1.2.0" }, "devDependencies": { diff --git a/site/DEPLOY b/site/DEPLOY new file mode 100644 index 0000000..cedf761 --- /dev/null +++ b/site/DEPLOY @@ -0,0 +1,21 @@ +To deploy +=== + +`npm bin`/pm2 start index.js + +--- + +The `npm bin` bit resolves the path to the locally installed `pm2` +command. Could also use a global install. + +`npm bin`/pm2 logs + +to see logs and + +`npm bin`/pm2 list + +to see running processes and + +`npm bin`/pm2 show [id] + +for more process info diff --git a/site/TODO b/site/TODO new file mode 100644 index 0000000..c519946 --- /dev/null +++ b/site/TODO @@ -0,0 +1,2 @@ +This really should be in its own repo +At very least, it should have its own package.json -- cgit v1.2.3-70-g09d2 From 27abfdd15714895894565124bcc660b9d6774494 Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Fri, 19 Jun 2015 15:29:19 -0400 Subject: Add 'flag' data type --- app/node_modules/okschema/index.js | 4 ++++ package.json | 2 +- themes/okadmin/public/js/app.js | 11 +++++++++++ themes/okadmin/templates/partials/inputs.liquid | 13 ++++++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) (limited to 'package.json') diff --git a/app/node_modules/okschema/index.js b/app/node_modules/okschema/index.js index 67f6e42..89b59cc 100644 --- a/app/node_modules/okschema/index.js +++ b/app/node_modules/okschema/index.js @@ -69,6 +69,10 @@ var types = { 'date': { parent: 'string', assertValid: function(spec, value) {} + }, + 'flag': { + parent: 'string', + assertValid: function(spec, value) {} } } diff --git a/package.json b/package.json index a8a602f..50ec3e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.0", + "version": "0.1.10", "description": "great", "main": "app/index.js", "scripts": { diff --git a/themes/okadmin/public/js/app.js b/themes/okadmin/public/js/app.js index d58cb2a..4be0afc 100644 --- a/themes/okadmin/public/js/app.js +++ b/themes/okadmin/public/js/app.js @@ -181,6 +181,17 @@ var OKAdmin = function(){ $(el).append(normalizedInput) }) + // Modify flags checkboxes such that unchecked ones return "false" + // instead of nothing + $('.property .flag').each(function(i, el) { + var input = el.querySelector('input') + var checked = !!input.checked + if (!checked) { + $(input).attr('value', 'false') + input.checked = true + } + }) + $("ol").each(function(){ $("li", this).each(function(index){ $(this).find("input,textarea").each(function(){ diff --git a/themes/okadmin/templates/partials/inputs.liquid b/themes/okadmin/templates/partials/inputs.liquid index e766558..9c1a26b 100644 --- a/themes/okadmin/templates/partials/inputs.liquid +++ b/themes/okadmin/templates/partials/inputs.liquid @@ -51,7 +51,7 @@ - {% elsif type =='date' %} + {% elsif type == 'date' %}
+ {% elsif type == 'flag' %} + +
+ +
+ {% elsif type == 'tag-list' %}
Date: Fri, 3 Jul 2015 11:55:40 -0400 Subject: Protect admin root path with authentication as well Fixes #5 --- app/node_modules/okadminview/index.js | 4 +++- package.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'package.json') diff --git a/app/node_modules/okadminview/index.js b/app/node_modules/okadminview/index.js index 2a0fcd5..f6a7cdb 100644 --- a/app/node_modules/okadminview/index.js +++ b/app/node_modules/okadminview/index.js @@ -118,7 +118,9 @@ function OKAdminView(options) { // This should really be mounted on the router, but can't be due to // https://github.com/jaredhanson/passport-http/pull/16 app.use('/admin/', passport.initialize()); - app.all('/admin/:path*', passport.authenticate('digest', {session: false})); + app.all('/admin/(:path*)?', passport.authenticate('digest', { + session: false + })); router.get('/', function readIndex(req, res, next) { fetchIndexTemplateData(meta, indexQueries).then(function(data) { diff --git a/package.json b/package.json index 50ec3e6..1b6b909 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.10", + "version": "0.1.11", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From 206b101481bad2454410bcb5a73b6c46816d43ef Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Thu, 9 Jul 2015 18:14:02 -0400 Subject: Version++ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'package.json') diff --git a/package.json b/package.json index 1b6b909..f91a986 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.11", + "version": "0.1.12", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From eb2d4cd758eb06abfe9387a33f1e0f0898980d0d Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Sat, 12 Dec 2015 16:21:35 +0100 Subject: Implement Twitter service --- app/index.js | 15 +++++-- app/node_modules/okserver/index.js | 7 +++- app/node_modules/okservices/index.js | 43 ------------------- app/node_modules/okservices/oks3/index.js | 42 +++++++++++++++++++ app/node_modules/okservices/oks3/package.json | 15 +++++++ app/node_modules/okservices/oktwitter/Readme.md | 6 +++ app/node_modules/okservices/oktwitter/index.js | 48 ++++++++++++++++++++++ app/node_modules/okservices/oktwitter/package.json | 13 ++++++ app/node_modules/okservices/package.json | 7 +--- package.json | 2 +- 10 files changed, 143 insertions(+), 55 deletions(-) delete mode 100644 app/node_modules/okservices/index.js create mode 100644 app/node_modules/okservices/oks3/index.js create mode 100644 app/node_modules/okservices/oks3/package.json create mode 100644 app/node_modules/okservices/oktwitter/Readme.md create mode 100644 app/node_modules/okservices/oktwitter/index.js create mode 100644 app/node_modules/okservices/oktwitter/package.json (limited to 'package.json') diff --git a/app/index.js b/app/index.js index 2507dd2..6a1c74f 100644 --- a/app/index.js +++ b/app/index.js @@ -13,7 +13,8 @@ var OKResource = require('okresource') var OKTemplate = require('oktemplate'); var OKServer = require('okserver'); var OKSchema = require('okschema'); -var OKImageService = require('okservices').OKImageService; +var OKS3Service = require('okservices/oks3'); +var OKTwitterService = require('okservices/oktwitter') require('dotenv').load(); @@ -92,12 +93,19 @@ function OKCMS(options) { // Create services if (serviceConfig.s3) { - var imageService = OKImageService({ + var s3Service = OKS3Service({ express: express, s3: serviceConfig.s3, }); } + if (serviceConfig.twitter) { + var twitterService = OKTwitterService({ + express: express, + credentials: serviceConfig.twitter, + }) + } + var server = this._server = new OKServer({ express: express, app: app, @@ -108,7 +116,8 @@ function OKCMS(options) { adminRoot: adminRoot, adminPath: adminPath, services: { - image: imageService + s3: s3Service, + twitter: twitterService, }, errorHandler: errorHandler }); diff --git a/app/node_modules/okserver/index.js b/app/node_modules/okserver/index.js index 6d0ed17..ee1b4fb 100644 --- a/app/node_modules/okserver/index.js +++ b/app/node_modules/okserver/index.js @@ -59,8 +59,11 @@ function OKServer(options) { // Application router app.use(router); // Add services - if (services.image) { - app.use('/_services/image', services.image.middleware()); + if (services.s3) { + app.use('/_services/image', services.s3.middleware()); + } + if (services.twitter) { + app.use('/_services/twitter', services.twitter.middleware()) } // Make sure this lady is last. Checks whether the desired // route has a trailing-slash counterpart and redirects there diff --git a/app/node_modules/okservices/index.js b/app/node_modules/okservices/index.js deleted file mode 100644 index fbbdbfd..0000000 --- a/app/node_modules/okservices/index.js +++ /dev/null @@ -1,43 +0,0 @@ -var skipper = require('skipper'); - -function OKImageService(options) { - if (!(this instanceof OKImageService)) return new OKImageService(options); - options = options || {}; - if (!options.express) - throw new Error('Express not provided to OKImageService'); - if (!options.s3) - throw new Error('S3 configuration not provided to OKImageService'); - var express = options.express; - - var router = express.Router(); - - router.use(skipper()); - - router.post('/', function(req, res) { - // req should have a method `file` on it which is - // provided by skipper. Use that to do AWS stuff - req.file('image').upload({ - adapter: require('skipper-s3'), - key: options.s3.key, - secret: options.s3.secret, - bucket: options.s3.bucket, - dirname: options.s3.dirname, - maxBytes: options.s3.maxbytes, - headers: { - 'x-amz-acl': 'public-read' - } - }, function (err, uploadedFiles) { - res.json(uploadedFiles); - }); - }); - - this._middleware = router; -} - -OKImageService.prototype.middleware = function() { - return this._middleware; -}; - -module.exports = { - OKImageService: OKImageService -}; diff --git a/app/node_modules/okservices/oks3/index.js b/app/node_modules/okservices/oks3/index.js new file mode 100644 index 0000000..bd0915e --- /dev/null +++ b/app/node_modules/okservices/oks3/index.js @@ -0,0 +1,42 @@ +var skipper = require('skipper'); +var skipperS3 = require('skipper-s3') + +function OKS3(options) { + if (!(this instanceof OKS3)) return new OKS3(options); + options = options || {}; + if (!options.express) + throw new Error('Express not provided to OKS3'); + if (!options.s3) + throw new Error('S3 configuration not provided to OKS3'); + var express = options.express; + + var router = express.Router(); + + router.use(skipper()); + + router.post('/', function(req, res) { + // req should have a method `file` on it which is + // provided by skipper. Use that to do AWS stuff + req.file('image').upload({ + adapter: skipperS3, + key: options.s3.key, + secret: options.s3.secret, + bucket: options.s3.bucket, + dirname: options.s3.dirname, + maxBytes: options.s3.maxbytes, + headers: { + 'x-amz-acl': 'public-read' + } + }, function (err, uploadedFiles) { + res.json(uploadedFiles); + }); + }); + + this._middleware = router; +} + +OKS3.prototype.middleware = function() { + return this._middleware; +}; + +module.exports = OKS3 diff --git a/app/node_modules/okservices/oks3/package.json b/app/node_modules/okservices/oks3/package.json new file mode 100644 index 0000000..982fbfe --- /dev/null +++ b/app/node_modules/okservices/oks3/package.json @@ -0,0 +1,15 @@ +{ + "name": "oks3", + "version": "1.0.0", + "description": "s3 wassup", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "OKFocus", + "license": "None", + "dependencies": { + "skipper": "^0.5.7", + "skipper-s3": "^0.5.5" + } +} diff --git a/app/node_modules/okservices/oktwitter/Readme.md b/app/node_modules/okservices/oktwitter/Readme.md new file mode 100644 index 0000000..def73db --- /dev/null +++ b/app/node_modules/okservices/oktwitter/Readme.md @@ -0,0 +1,6 @@ +# oktwitter + +## Service to allow auth with Twitter API + +Requests to this service proxy to the twitter API, adding proper auth +credentials along the way diff --git a/app/node_modules/okservices/oktwitter/index.js b/app/node_modules/okservices/oktwitter/index.js new file mode 100644 index 0000000..ec4945d --- /dev/null +++ b/app/node_modules/okservices/oktwitter/index.js @@ -0,0 +1,48 @@ +var Twit = require('twit') + +/** + * Proxy to Twitter API adding auth creds + * TODO Technically can be abused by anyone right now. + * Should add some sort of same origin policy. + */ +function OKTwitter (options) { + if (!(this instanceof OKTwitter)) return new OKTwitter(options) + options = options || {} + if (!options.express) + throw new Error('Express not provided to OKTwitter'); + if (!options.credentials) + throw new Error('Twitter credentials not provided to OKTwitter'); + + var express = options.express + var router = express.Router() + var creds = options.credentials + var twitter = new Twit({ + consumer_key: creds.consumerKey, + consumer_secret: creds.consumerSecret, + access_token: creds.accessToken, + access_token_secret: creds.accessTokenSecret, + }) + + router.get('*', function (req, res) { + twitter.get(req.path.slice(1), req.query, function (err, data) { + if (err) { + res.status(err.statusCode) + res.send(err.twitterReply) + } else { + res.json(data) + } + }) + }) + + router.post('*', function (req, res) { + throw new Error('Twitter POST requests not implemented') + }) + + this._router = router +} + +OKTwitter.prototype.middleware = function () { + return this._router +} + +module.exports = OKTwitter diff --git a/app/node_modules/okservices/oktwitter/package.json b/app/node_modules/okservices/oktwitter/package.json new file mode 100644 index 0000000..ddee2f9 --- /dev/null +++ b/app/node_modules/okservices/oktwitter/package.json @@ -0,0 +1,13 @@ +{ + "name": "oktwitter", + "version": "1.0.0", + "description": "Allows auth to Twitter API", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "OKFocus", + "dependencies": { + "twit": "^2.1.1" + } +} diff --git a/app/node_modules/okservices/package.json b/app/node_modules/okservices/package.json index 2c95325..2669a49 100644 --- a/app/node_modules/okservices/package.json +++ b/app/node_modules/okservices/package.json @@ -6,10 +6,5 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "OKFocus", - "license": "None", - "dependencies": { - "skipper": "^0.5.7", - "skipper-s3": "^0.5.5" - } + "author": "OKFocus" } diff --git a/package.json b/package.json index f91a986..8587ab7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.12", + "version": "0.1.13", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From bf5e138b769ffb6e2955c294f7bbec517d71f3db Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Sat, 12 Dec 2015 18:49:24 +0100 Subject: Fix deps --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'package.json') diff --git a/package.json b/package.json index 8587ab7..2e9c03d 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,7 @@ "dependencies": { "dotenv": "^1.1.0", "express": "^4.12.3", - "grunt-dentist": "^0.3.4", "object-assign": "^2.0.0", - "pm2": "^0.12.15", "q": "^1.2.0" }, "devDependencies": { @@ -22,6 +20,7 @@ "grunt-cli": "^0.1.13", "grunt-contrib-clean": "^0.6.0", "grunt-contrib-concat": "^0.5.1", + "grunt-dentist": "^0.3.4", "grunt-contrib-copy": "^0.8.0", "grunt-contrib-uglify": "^0.9.1" } -- cgit v1.2.3-70-g09d2 From 78897bbf3e90152f45a472c69d7a5a86bd6e02fd Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Sat, 12 Dec 2015 18:50:40 +0100 Subject: Increment the dang version num --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'package.json') diff --git a/package.json b/package.json index 2e9c03d..4fdfce2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.13", + "version": "0.1.15", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From d525344670731be9b99e5b7c4e9d7afacf08db8b Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Mon, 14 Dec 2015 21:19:14 +0100 Subject: Finally smash S3 upload crash bug --- app/node_modules/okservices/oks3/index.js | 35 +++++++++++++++++---------- app/node_modules/okservices/oks3/package.json | 4 +-- package.json | 2 +- 3 files changed, 25 insertions(+), 16 deletions(-) (limited to 'package.json') diff --git a/app/node_modules/okservices/oks3/index.js b/app/node_modules/okservices/oks3/index.js index bd0915e..d556c20 100644 --- a/app/node_modules/okservices/oks3/index.js +++ b/app/node_modules/okservices/oks3/index.js @@ -1,6 +1,12 @@ var skipper = require('skipper'); var skipperS3 = require('skipper-s3') +// Hack to prevent this god-forsaken module from crashing our shit +var d = require('domain').create() +d.on('error', function (err) { + console.error('Stupid error in S3 upload. Image upload probably prematurely canceled') +}) + function OKS3(options) { if (!(this instanceof OKS3)) return new OKS3(options); options = options || {}; @@ -17,19 +23,22 @@ function OKS3(options) { router.post('/', function(req, res) { // req should have a method `file` on it which is // provided by skipper. Use that to do AWS stuff - req.file('image').upload({ - adapter: skipperS3, - key: options.s3.key, - secret: options.s3.secret, - bucket: options.s3.bucket, - dirname: options.s3.dirname, - maxBytes: options.s3.maxbytes, - headers: { - 'x-amz-acl': 'public-read' - } - }, function (err, uploadedFiles) { - res.json(uploadedFiles); - }); + d.run(function () { + req.file('image').upload({ + adapter: skipperS3, + key: options.s3.key, + secret: options.s3.secret, + bucket: options.s3.bucket, + dirname: options.s3.dirname, + maxBytes: options.s3.maxbytes, + headers: { + 'x-amz-acl': 'public-read' + } + }, function (err, uploadedFiles) { + if (err) res.status(500).send(err) + res.json(uploadedFiles); + }); + }) }); this._middleware = router; diff --git a/app/node_modules/okservices/oks3/package.json b/app/node_modules/okservices/oks3/package.json index 982fbfe..1d72a26 100644 --- a/app/node_modules/okservices/oks3/package.json +++ b/app/node_modules/okservices/oks3/package.json @@ -9,7 +9,7 @@ "author": "OKFocus", "license": "None", "dependencies": { - "skipper": "^0.5.7", - "skipper-s3": "^0.5.5" + "skipper": "^0.5.8", + "skipper-s3": "^0.5.6" } } diff --git a/package.json b/package.json index 4fdfce2..b7f1105 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.15", + "version": "0.1.16", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From 57026202f9ac0b98cc744734a04bcee362b789a3 Mon Sep 17 00:00:00 2001 From: Sean Fridman Date: Sun, 20 Dec 2015 03:06:47 +0100 Subject: Date type always defaults to current day --- package.json | 2 +- themes/okadmin/public/js/app.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'package.json') diff --git a/package.json b/package.json index b7f1105..192685c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.16", + "version": "0.1.18", "description": "great", "main": "app/index.js", "scripts": { diff --git a/themes/okadmin/public/js/app.js b/themes/okadmin/public/js/app.js index b313f22..edf9980 100644 --- a/themes/okadmin/public/js/app.js +++ b/themes/okadmin/public/js/app.js @@ -20,6 +20,20 @@ var OKAdmin = function(){ } }) + // Add default date + $('.date input').each(function(i, el){ + var value = el.getAttribute('value') + if (!value) { + el.setAttribute('value', toDateInputValue(new Date)) + } + + function toDateInputValue (date) { + var local = new Date(date); + local.setMinutes(date.getMinutes() - date.getTimezoneOffset()); + return local.toJSON().slice(0,10); + } + }) + // initialize our multimedia uploader with an element and a template $(".group.media-list").each(function(){ var parent = this -- cgit v1.2.3-70-g09d2 From 8898bbe48285c7f9f11760ef420cca43d683d5e0 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 28 Mar 2016 13:59:50 -0400 Subject: modify links field to specify text and uri --- app/index.js | 1 + app/node_modules/okdb/index.js | 2 +- app/node_modules/okschema/index.js | 17 +++++++- examples/db.json | 9 +++- examples/index.js | 5 ++- package.json | 2 +- themes/okadmin/public/css/main.css | 8 ++++ themes/okadmin/public/js/app.js | 34 ++++++--------- themes/okadmin/templates/partials/inputs.liquid | 56 +++++++++++++++++++------ 9 files changed, 93 insertions(+), 41 deletions(-) (limited to 'package.json') diff --git a/app/index.js b/app/index.js index 6a1c74f..06b1591 100644 --- a/app/index.js +++ b/app/index.js @@ -28,6 +28,7 @@ function OKCMS(options) { var app = express(); app.enable('strict routing'); + app.disable('x-powered-by'); var root = this._root = options.root || 'public'; var adminConfig = options.admin || {}; diff --git a/app/node_modules/okdb/index.js b/app/node_modules/okdb/index.js index 4820c8c..ad8d9a7 100644 --- a/app/node_modules/okdb/index.js +++ b/app/node_modules/okdb/index.js @@ -97,7 +97,7 @@ FSDB.prototype.update = function(collection, id, data) { } var result = chain.assign(cloneDeep(data)).value(); - if (result ) { + if (result) { return resolve(cloneDeep(result)); } else { return resolve(null, new Error('Problem updating document')); diff --git a/app/node_modules/okschema/index.js b/app/node_modules/okschema/index.js index 330ad6b..82aa13f 100644 --- a/app/node_modules/okschema/index.js +++ b/app/node_modules/okschema/index.js @@ -63,8 +63,21 @@ var types = { assertValid: function(spec, value) {} }, 'tag-list': { - parent: 'string', - assertValid: function(spec, value) {} + parent: [{ + uri: { type: 'string' }, + text: { type: 'string' } + }], + assertValid: function(spec, value) { + var message; + var actual; + if (!value || !value.length) { + throw [{ + message: 'Not an array', + expected: JSON.stringify(this.parent), + actual: value + }]; + } + } }, 'date': { parent: 'string', diff --git a/examples/db.json b/examples/db.json index 20d4510..4319237 100644 --- a/examples/db.json +++ b/examples/db.json @@ -99,7 +99,14 @@ "title": "About Us", "body": "Just a small bakery", "id": "about", - "__index": 1 + "__index": "1", + "links": [ + { + "text": "asdf2", + "uri": "asdf" + } + ], + "dateCreated": "" }, { "title": "ok...", diff --git a/examples/index.js b/examples/index.js index 3e9f509..bf51dfc 100644 --- a/examples/index.js +++ b/examples/index.js @@ -10,7 +10,8 @@ var app = okcms.createApp({ page: { id: {type: 'string'}, title: {type: 'string'}, - body: {type: 'text'} + body: {type: 'text'}, + links: {type: 'link-list'}, }, bread: { type: {type: 'string', id: true}, @@ -19,7 +20,7 @@ var app = okcms.createApp({ color: {type: 'enum', options: ["red","blue","green"]}, video: {type: 'video'}, images: {type: 'captioned-image-list'} - } + }, }, resources: [ diff --git a/package.json b/package.json index 192685c..faf3cc9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.18", + "version": "0.1.19", "description": "great", "main": "app/index.js", "scripts": { diff --git a/themes/okadmin/public/css/main.css b/themes/okadmin/public/css/main.css index a5fbdeb..9289fdf 100644 --- a/themes/okadmin/public/css/main.css +++ b/themes/okadmin/public/css/main.css @@ -305,6 +305,14 @@ button, input[type=submit] { .main.resource form .video-element input[type=text] { width: 15em; } +.main.resource form .group input[type=text].link-input, +.main.resource form .group input[type=text].link-input-new { + width: 13.05em; + padding: 0 0 0 0.5em; +} +.main.resource form .links li { + height: auto; +} .main .link-list .add-link-btn, .main .link-list .remove-link-btn { margin: 0; diff --git a/themes/okadmin/public/js/app.js b/themes/okadmin/public/js/app.js index edf9980..17b35d0 100644 --- a/themes/okadmin/public/js/app.js +++ b/themes/okadmin/public/js/app.js @@ -120,35 +120,25 @@ var OKAdmin = function(){ e.stopPropagation() var $delegate = $(e.delegateTarget) var $list = $delegate.find('.links') - var length = $list.find('input').length - var name = $delegate.parent('.property').data('name') - var $new = $delegate.find('.link-input-new') - var input = document.createElement('input') - var delBtn = document.createElement('button') - var inputName = name + '[' + length + ']' - $(input).attr({ - name: inputName, - type: 'text', - value: $new.val() - }) - $list.append(input) - $(delBtn).addClass('remove-link-btn') - $(delBtn).data('for', inputName) - delBtn.innerHTML = '-' - $list.append(delBtn) - $new.val('') + var $linkText = $delegate.find(".link-input-new.link-text") + var $linkURI = $delegate.find(".link-input-new.link-uri") + + var template = $delegate.find(".link-template").html() + var $el = $(template) + $el.find(".link-text").val( $linkText.val() ) + $el.find(".link-uri").val( $linkURI.val() ) + $list.append($el) + console.log($list, template) + $linkText.val("") + $linkURI.val("") }) // Remove a link from the list $('.link-list').on('click', '.remove-link-btn', function(e) { e.preventDefault() e.stopPropagation() - var $delegate = $(e.delegateTarget) var $target = $(e.target) - var inputName = $target.data('for') - var $input = $delegate.find('[name="' + inputName + '"]') - $input.remove() - $target.remove() + $target.closest("li").remove() }) // fix post indexing in list-driven inputs diff --git a/themes/okadmin/templates/partials/inputs.liquid b/themes/okadmin/templates/partials/inputs.liquid index c6efc68..55d5fb8 100644 --- a/themes/okadmin/templates/partials/inputs.liquid +++ b/themes/okadmin/templates/partials/inputs.liquid @@ -79,26 +79,58 @@ value="{{spec.value}}" placeholder="Enter a comma separated list of tags.">
- {% elsif type == 'link-list' %} + {% elsif type == 'link-list' %} {% elsif type == 'media-list' %} -- cgit v1.2.3-70-g09d2 From 3ae6b122cbb6e3491677fd79e2d0c1b1a506db93 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Mon, 4 Apr 2016 19:43:34 -0400 Subject: Improve response for mp4 videos in parser --- package.json | 2 +- themes/okadmin/public/js/parser.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'package.json') diff --git a/package.json b/package.json index faf3cc9..09b24c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.19", + "version": "0.1.23", "description": "great", "main": "app/index.js", "scripts": { diff --git a/themes/okadmin/public/js/parser.js b/themes/okadmin/public/js/parser.js index 95b391c..6c964f7 100644 --- a/themes/okadmin/public/js/parser.js +++ b/themes/okadmin/public/js/parser.js @@ -31,6 +31,8 @@ var Parser = { regex: /\.(mp4|webm)(\?.*)?$/i, fetch: function(url, done) { var video = document.createElement("video") + var url_parts = url.replace(/\?.*$/, "").split("/") + var filename = url_parts[ url_parts.length-1 ] video.addEventListener("loadedmetadata", function(){ var width = video.videoWidth, height = video.videoHeight video = null @@ -38,8 +40,8 @@ var Parser = { url: url, type: "video", token: "", - thumbnail: "", - title: "", + thumbnail: "http://okfocus.s3.amazonaws.com/misc/okcms/video.png", + title: filename, width: width, height: height, }) -- cgit v1.2.3-70-g09d2 From 39b95380e6f81734d8a54bfbbfda13216d400247 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 5 Apr 2016 10:26:51 -0400 Subject: bump to v0.1.24 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'package.json') diff --git a/package.json b/package.json index 09b24c8..c95a2bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.23", + "version": "0.1.24", "description": "great", "main": "app/index.js", "scripts": { -- cgit v1.2.3-70-g09d2 From 56580705e3a62eaf1c498c1c0456fc33fe3b2f76 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 5 Apr 2016 14:05:35 -0400 Subject: broaden media support --- app/node_modules/okserver/index.js | 2 +- app/node_modules/okservices/oks3/index.js | 54 ++++++++++++++++++-- examples/db.json | 29 ++++++++++- examples/index.js | 5 ++ package.json | 2 +- themes/okadmin/public/css/main.css | 3 ++ themes/okadmin/public/js/app.js | 18 ++++++- themes/okadmin/public/js/parser.js | 31 +++++++++-- themes/okadmin/public/js/upload.js | 61 ++++++++++++++++------ themes/okadmin/templates/partials/inputs.liquid | 68 ++++++++++++++++++------- 10 files changed, 226 insertions(+), 47 deletions(-) (limited to 'package.json') diff --git a/app/node_modules/okserver/index.js b/app/node_modules/okserver/index.js index ee1b4fb..3428565 100644 --- a/app/node_modules/okserver/index.js +++ b/app/node_modules/okserver/index.js @@ -60,7 +60,7 @@ function OKServer(options) { app.use(router); // Add services if (services.s3) { - app.use('/_services/image', services.s3.middleware()); + app.use('/_services/s3', services.s3.middleware()); } if (services.twitter) { app.use('/_services/twitter', services.twitter.middleware()) diff --git a/app/node_modules/okservices/oks3/index.js b/app/node_modules/okservices/oks3/index.js index d556c20..dc0ca19 100644 --- a/app/node_modules/okservices/oks3/index.js +++ b/app/node_modules/okservices/oks3/index.js @@ -4,7 +4,7 @@ var skipperS3 = require('skipper-s3') // Hack to prevent this god-forsaken module from crashing our shit var d = require('domain').create() d.on('error', function (err) { - console.error('Stupid error in S3 upload. Image upload probably prematurely canceled') + console.error('Stupid error in S3 upload. Upload probably prematurely canceled') }) function OKS3(options) { @@ -20,9 +20,9 @@ function OKS3(options) { router.use(skipper()); - router.post('/', function(req, res) { - // req should have a method `file` on it which is - // provided by skipper. Use that to do AWS stuff + // req should have a method `file` on it which is + // provided by skipper. Use that to do AWS stuff + router.post('/image', function(req, res) { d.run(function () { req.file('image').upload({ adapter: skipperS3, @@ -38,7 +38,51 @@ function OKS3(options) { if (err) res.status(500).send(err) res.json(uploadedFiles); }); - }) + }); + }); + + router.post('/audio', function(req, res) { + d.run(function () { + if (! options.s3.allowAudioUploads) { + return res.status(500).json({ error: "audio uploading not permitted" }) + } + req.file('audio').upload({ + adapter: skipperS3, + key: options.s3.key, + secret: options.s3.secret, + bucket: options.s3.bucket, + dirname: options.s3.dirname, + maxBytes: options.s3.maxbytesAudio, + headers: { + 'x-amz-acl': 'public-read' + } + }, function (err, uploadedFiles) { + if (err) res.status(500).send(err) + res.json(uploadedFiles); + }); + }); + }); + + router.post('/video', function(req, res) { + d.run(function () { + if (! options.s3.allowVideoUploads) { + return res.status(500).json({ error: "video uploading not permitted" }) + } + req.file('video').upload({ + adapter: skipperS3, + key: options.s3.key, + secret: options.s3.secret, + bucket: options.s3.bucket, + dirname: options.s3.dirname, + maxBytes: options.s3.maxbytesVideo, + headers: { + 'x-amz-acl': 'public-read' + } + }, function (err, uploadedFiles) { + if (err) res.status(500).send(err) + res.json(uploadedFiles); + }); + }); }); this._middleware = router; diff --git a/examples/db.json b/examples/db.json index 1d045c3..3650355 100644 --- a/examples/db.json +++ b/examples/db.json @@ -174,7 +174,34 @@ "title": "Green", "__index": 1, "dateCreated": "Tue, 05 Apr 2016 15:17:57 GMT", - "media": [] + "media": [ + { + "type": "video", + "token": "https://ltho.s3.amazonaws.com/ee12b137-1c8a-400a-87e3-89cbee7b4da6.mp4", + "uri": "", + "width": "400", + "height": "400", + "title": "ee12b137-1c8a-400a-87e3-89cbee7b4da6.mp4", + "thumb": "http://okfocus.s3.amazonaws.com/misc/okcms/video.png" + }, + { + "type": "youtube", + "token": "y_35kXCQxN4", + "uri": "", + "width": "640", + "height": "360", + "title": "dëf lëöpär¨d¨¨¨¨<>~!@~#!:I!@", + "thumb": "http://i.ytimg.com/vi/y_35kXCQxN4/hqdefault.jpg" + }, + { + "type": "audio", + "token": "http://asdf.us/clouds35.mp3", + "uri": "", + "duration": "225.645792", + "title": "clouds35.mp3", + "thumb": "http://okfocus.s3.amazonaws.com/misc/okcms/video.png" + } + ] } ] } \ No newline at end of file diff --git a/examples/index.js b/examples/index.js index 81d9241..e9de0a3 100644 --- a/examples/index.js +++ b/examples/index.js @@ -40,6 +40,11 @@ var app = okcms.createApp({ key: process.env.S3_KEY, secret: process.env.S3_SECRET, bucket: process.env.S3_BUCKET, + allowVideoUploads: true, + allowAudioUploads: true, + maxsize: 200, + maxsizeVideo: 150000000, + maxsizeAudio: 150000000, } }, diff --git a/package.json b/package.json index c95a2bc..c3a7280 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "okcms", - "version": "0.1.24", + "version": "0.1.27", "description": "great", "main": "app/index.js", "scripts": { diff --git a/themes/okadmin/public/css/main.css b/themes/okadmin/public/css/main.css index 2f2d376..15b8781 100644 --- a/themes/okadmin/public/css/main.css +++ b/themes/okadmin/public/css/main.css @@ -303,6 +303,7 @@ button, input[type=submit] { width: 15em; height: 6em; } +.main.resource form .audio-element input[type=text], .main.resource form .video-element input[type=text] { width: 15em; } @@ -353,10 +354,12 @@ button, input[type=submit] { margin: 0; padding: 0; cursor: pointer; } +.audio-element:hover .remove, .video-element:hover .remove, .image-element:hover .remove { display: block; } +.audio-element .remove:hover, .video-element .remove:hover, .image-element .remove:hover { color: red; diff --git a/themes/okadmin/public/js/app.js b/themes/okadmin/public/js/app.js index e79f704..a12f517 100644 --- a/themes/okadmin/public/js/app.js +++ b/themes/okadmin/public/js/app.js @@ -5,7 +5,8 @@ var OKAdmin = function(){ var parent = this var uploader = new OKUpload () uploader.bind( this ) - uploader.add = function(url){ + uploader.add = function(media){ + var url = media.url var imageTemplate = $(".image-template", parent).html() var $el = $(imageTemplate) $el.find(".uri").val(url) @@ -46,7 +47,7 @@ var OKAdmin = function(){ $el.find("img").attr("src", url) $("ol", parent).prepend($el) } - uploader.addVideo = function(media){ + uploader.addMedia = function(media){ switch (media.type) { case 'youtube': case 'vimeo': @@ -64,6 +65,19 @@ var OKAdmin = function(){ $el.find("img").attr("src", media.thumbnail ) $("ol", parent).prepend($el) break + case 'audio': + var audioTemplate = $(".audio-template", parent).html() + var $el = $(audioTemplate) + $el.addClass("loaded") + $el.find(".audio-type").val( media.type ) + $el.find(".audio-token").val( media.token ) + $el.find(".audio-uri").val( media.uri ) + $el.find(".audio-title").val( media.title ) + $el.find(".audio-thumb").val( media.thumbnail ) + $el.find(".audio-duration").val( media.duration ) + $el.find("img").attr("src", media.thumbnail ) + $("ol", parent).prepend($el) + break case 'link': var linkTemplate = $(".link-template", parent).html() var $el = $(linkTemplate) diff --git a/themes/okadmin/public/js/parser.js b/themes/okadmin/public/js/parser.js index b4a087d..4ab9a6c 100644 --- a/themes/okadmin/public/js/parser.js +++ b/themes/okadmin/public/js/parser.js @@ -52,6 +52,31 @@ var Parser = { tag: function (media) { return '