diff --git a/lib/dropbox/bin-template.hbs b/lib/dropbox/bin-template.hbs new file mode 100644 index 00000000..30f2323a --- /dev/null +++ b/lib/dropbox/bin-template.hbs @@ -0,0 +1,19 @@ + +{{{bin.output.html}}} + + + + + + + diff --git a/lib/dropbox/bin-template.js b/lib/dropbox/bin-template.js new file mode 100644 index 00000000..9e2975d1 --- /dev/null +++ b/lib/dropbox/bin-template.js @@ -0,0 +1,79 @@ +(function (root) { + 'use strict'; + + var KEYS = ['html', 'css', 'javascript']; + + function panelTypesForBin (bin) { + var processors = bin.settings.processors || {}; + + return function panelType(type) { + return processors[type] || type; + }; + + } + + function outputForBinFactory (bin) { + var processors = bin.settings.processors || {}; + + return function outputForBin (type) { + if (!processors[type]) { + return bin[type]; + } else { + // TODO: Actually wanna chuck it through preprocessor; + return bin[type]; + } + }; + + } + + // Basic wrapper for KEYS.reduce(fn, {}); + function reduceKeys (fn) { + return KEYS.reduce(function(o, i){ + fn.call(null, o, i); + return o; + }, {}); + } + + function createOutputObjectForBin (bin) { + var outputForBin = outputForBinFactory(bin); + return reduceKeys(function(obj, key) { + obj[key] = outputForBin(key); + }); + } + + function createPanelsObjectForBin (bin) { + var panelType = panelTypesForBin(bin); + + return reduceKeys(function(obj, key) { + /* + obj.html = { + type: panelType('html'), + content: bin.html + } + */ + obj[key] = { + type: panelType(key), + content: bin[key] + }; + }); + + } + + function makeHTML() { + + } + + function templateFromBin (bin) { + + var templateData = { + output: createOutputObjectForBin(bin), + panels: createPanelsObjectForBin(bin) + }; + + makeHTML(templateData); + + } + + root.templateFromBin = templateFromBin; + +}(module && module.exports || window)); diff --git a/lib/dropbox/index.js b/lib/dropbox/index.js new file mode 100644 index 00000000..9eeace74 --- /dev/null +++ b/lib/dropbox/index.js @@ -0,0 +1,68 @@ +'use strict'; +process.on('message', addToDropboxQueue); + +var Dropbox = require('dropbox'); + +// delayTime in seconds; +var delayTime = 10; +delayTime *= 1000; +var queue = {}; + +function addToDropboxQueue (message) { + var bin = message.bin; + var user = message.user; + var fileContent = fileFromBin(bin); + var id = bin.url; + var saveObject = { + file: fileContent, + token: user.dropbox_token, // jshint ignore:line + timeout: setTimeout(function(){ + saveToDropBox(fileContent, fileNameFromBin(bin), user); + }, delayTime) + }; + if (queue[id]) { + clearTimeout(queue[id].timeout); + } + log('adding to queue'); + queue[id] = saveObject; +} + +function saveToDropBox (file, name, user) { + log('actually saving it now'); + var client = new Dropbox.Client({ + key: '89twf77glqma71r', + secret: '0ncbr1qrcv9ek38', + token: user.dropbox_token // jshint ignore:line + }); + + client.writeFile(name, file, function (err) { + if (err) { + process.send({ + error: err, + user: user + }); + } + log('saved!'); + }); + +} + +function fileNameFromBin (bin) { + return bin.url + '.html'; +} + +function fileFromBin (bin) { + return bin.html; +} + +function log (msg) { + process.send({log: msg}); +} + +module.exports = { + + fileFromBin: fileFromBin, + + saveBin: addToDropboxQueue + +}; diff --git a/lib/dropbox/parent.js b/lib/dropbox/parent.js new file mode 100644 index 00000000..452d6358 --- /dev/null +++ b/lib/dropbox/parent.js @@ -0,0 +1,27 @@ +'use strict'; +var child_process = require('child_process'); +var child = child_process.fork(__dirname + '/index.js'); + +var binToSave = { + url: 'basecannon2', + html: '

Let the basecannon2 kick it

' +}; + +var user = { + dropbox_token: 'ti7z0APpzVYAAAAAAAAAAdKu6CAnmH9Tsq-aPsqAAr5nmx7TFeuQRq1_URZuh5RJ' +}; + +child.on('message', function(message) { + message.log && console.log(message.log); // jshint ignore:line +}); + +function sendTheBin () { + child.send({ + user: user, + bin: binToSave + }); +} + +sendTheBin(); + +setTimeout(sendTheBin, 4000);