From 870c594e6659d86dd67b486a7fa8ae8568e2e829 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Sat, 21 Feb 2015 19:21:08 -0800 Subject: [PATCH 1/8] fix updating controls dynamically --- static/plugins/controls/index.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/static/plugins/controls/index.js b/static/plugins/controls/index.js index 5a507d4..fc8578f 100644 --- a/static/plugins/controls/index.js +++ b/static/plugins/controls/index.js @@ -57,10 +57,10 @@ function tributaryControlsPlugin(tributary, plugin) { // get the control element function getCE() { - var sel = d3.select(".time_controls") - .selectAll("#display-controls").data([0]) - sel.enter() - .append("div").attr("id", "controls"); + var sel = d3.select("#controls"); + if(!sel.node()){ + sel = d3.select(".time_controls").append("div").attr("id", "controls"); + } return sel; } function exists(val) { @@ -109,8 +109,7 @@ function tributaryControlsPlugin(tributary, plugin) { } function makeDropdown(options) { var controlElement = getCE(); - var control = controlElement.selectAll('div.control_'+options.name) - .data([options.name]) + var control = controlElement.selectAll('div.control_'+options.name).data([options.name]) var center = control.enter() .append("div").classed("control_"+options.name, true).classed("control", true); center.append("select"); @@ -122,7 +121,8 @@ function tributaryControlsPlugin(tributary, plugin) { tributary.__controls__[options.name] = options.options[this.selectedIndex]; tributary.__events__.trigger("execute"); }) - var opts = input.selectAll("option").data(options.options) + var opts = input.selectAll("option").data(options.options, function(d) { return d}) + opts.exit().remove(); opts.enter() .append("option"); @@ -133,7 +133,6 @@ function tributaryControlsPlugin(tributary, plugin) { if(value == d) return true; }, }).text(function(d) { return d }); - opts.exit().remove(); return input.node(); } @@ -141,6 +140,7 @@ function tributaryControlsPlugin(tributary, plugin) { var controlElement = getCE(); var control = controlElement.selectAll('div.control_'+ options.name) .data([options.name]) + control.remove() var center = control.enter() .append("div").classed("control_"+options.name, true).classed("control", true); center.append("input") From 9b84a7922f23e464fe8f9eb6a7620efcccc0b40a Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Sat, 21 Feb 2015 19:27:57 -0800 Subject: [PATCH 2/8] fix some old code --- static/plugins/controls/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/plugins/controls/index.js b/static/plugins/controls/index.js index fc8578f..6cdea27 100644 --- a/static/plugins/controls/index.js +++ b/static/plugins/controls/index.js @@ -103,7 +103,7 @@ function tributaryControlsPlugin(tributary, plugin) { input.on("change", function() { control.select("span.value").text(this.value); tributary.__controls__[options.name] = +this.value; - tributary.events.trigger("execute"); + tributary.__events__.trigger("execute"); }); return input.node(); } @@ -172,7 +172,7 @@ function tributaryControlsPlugin(tributary, plugin) { input.on("change", function() { control.select("span.value").text(this.value); tributary.__controls__[options.name] = +this.value; - tributary.events.trigger("execute"); + tributary.__events__.trigger("execute"); }); return input.node(); } From 8ca05b4dc36c028a816b693a387bd2f0e3d6c98c Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 25 Feb 2015 20:42:46 -0800 Subject: [PATCH 3/8] remove transitions from textareas --- static/css/less/style.less | 2 +- static/css/style.css | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/static/css/less/style.less b/static/css/less/style.less index a821844..47098c3 100644 --- a/static/css/less/style.less +++ b/static/css/less/style.less @@ -517,7 +517,7 @@ px 68 160 252 344 436 */ background-image: linear-gradient(top, rgb(235, 235, 235), rgb(255, 255, 255)); filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ebebeb', EndColorStr='#ffffff'); - .transition(0.8s); + //.transition(0.8s); &:hover { border: 2px solid rgba(0,0,0,0.4); diff --git a/static/css/style.css b/static/css/style.css index 4ba20cb..78985b2 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -18,12 +18,16 @@ pre { padding: 15px; white-space: pre; /* CSS2 */ + white-space: pre-wrap; /* CSS 2.1 */ + white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */ + word-wrap: break-word; /* IE */ + } /* hand cursor on clickable input elements */ label, @@ -241,6 +245,7 @@ body { color: #333333; -webkit-text-size-adjust: 100%; /* Stops Mobile Safari from auto-adjusting font-sizes */ + margin-left: auto; margin-right: auto; } @@ -353,6 +358,7 @@ input[type=checkbox]:checked { input[type=radio] { -webkit-border-radius: 2em; /* Make radios round */ + } input[type=submit] { opacity: 0.95; @@ -486,10 +492,13 @@ px 68 160 252 344 436 528 620 712 804 896 */ background-color: white; -webkit-box-shadow: -3px 0 6px 1px rgba(0, 0, 0, 0.15); /* Saf3.0+, Chrome */ + -moz-box-shadow: -3px 0 6px 1px rgba(0, 0, 0, 0.15); /* FF3.5+ */ + box-shadow: -3px 0 6px 1px rgba(0, 0, 0, 0.15); /* Opera 10.5, IE 9.0 */ + } #panel #files { z-index: 6; @@ -505,6 +514,7 @@ px 68 160 252 344 436 528 620 712 804 896 */ overflow: hidden; background-color: transparent; /*background-color: #ebebeb;*/ + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(rgba(255, 255, 255, 0.16))); background-image: -webkit-linear-gradient(top, #ebebeb, rgba(255, 255, 255, 0.16)); background-image: -moz-linear-gradient(top, #ebebeb, rgba(255, 255, 255, 0.16)); @@ -514,10 +524,13 @@ px 68 160 252 344 436 528 620 712 804 896 */ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, StartColorStr='#ebebeb', EndColorStr='#ffffff'); -webkit-box-shadow: inset 0 -4px 1em 1px rgba(5, 5, 5, 0.15); /* Saf3.0+, Chrome */ + -moz-box-shadow: inset 0 -4px 1em 1px rgba(5, 5, 5, 0.15); /* FF3.5+ */ + box-shadow: inset 0 -4px 1em 1px rgba(5, 5, 5, 0.15); /* Opera 10.5, IE 9.0 */ + } #panel #file-list { height: 100%; @@ -550,8 +563,9 @@ px 68 160 252 344 436 528 620 712 804 896 */ background-image: linear-gradient(top, rgba(113, 112, 113, 0.72), rgba(227, 226, 228, 0.60)); filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#717071', EndColorStr='#e3e2e4'); */ + /*background-color: #ffffff;*/ - /*background-color: #ffffff;*/ + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(rgba(66, 66, 66, 0.6))); background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(66, 66, 66, 0.6)); background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0), rgba(66, 66, 66, 0.6)); @@ -562,6 +576,7 @@ px 68 160 252 344 436 528 620 712 804 896 */ } #panel #file-list li:hover { /*background-color: #ffffff;*/ + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(rgba(40, 40, 40, 0.73))); background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0), rgba(40, 40, 40, 0.73)); background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0), rgba(40, 40, 40, 0.73)); @@ -575,6 +590,7 @@ px 68 160 252 344 436 528 620 712 804 896 */ border: 1px solid black; font-weight: bold; /*background-color: #f8f7fa;*/ + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(248, 247, 250, 0.6)), to(rgba(169, 168, 169, 0.73))); background-image: -webkit-linear-gradient(top, rgba(248, 247, 250, 0.6), rgba(169, 168, 169, 0.73)); background-image: -moz-linear-gradient(top, rgba(248, 247, 250, 0.6), rgba(169, 168, 169, 0.73)); @@ -584,10 +600,13 @@ px 68 160 252 344 436 528 620 712 804 896 */ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, StartColorStr='#f8f7fa', EndColorStr='#a9a8a9'); -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2); /* Saf3.0+, Chrome */ + -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2); /* FF3.5+ */ + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2); /* Opera 10.5, IE 9.0 */ + } #panel #file-list .delete-file { z-index: 1000; @@ -652,6 +671,7 @@ px 68 160 252 344 436 528 620 712 804 896 */ border: 1px solid black; color: white; /*background-color: #8f8f90;*/ + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(143, 143, 144, 0.02)), to(#212121)); background-image: -webkit-linear-gradient(top, rgba(143, 143, 144, 0.02), #212121); background-image: -moz-linear-gradient(top, rgba(143, 143, 144, 0.02), #212121); @@ -772,10 +792,13 @@ px 68 160 252 */ position: relative; -webkit-box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.2); /* Saf3.0+, Chrome */ + -moz-box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.2); /* FF3.5+ */ + box-shadow: 0 0 8px 1px rgba(0, 0, 0, 0.2); /* Opera 10.5, IE 9.0 */ + border-radius: 10px; } #panel #files { @@ -845,9 +868,6 @@ select { background-image: -ms-linear-gradient(top, #ebebeb, #ffffff); background-image: linear-gradient(top, #ebebeb, #ffffff); filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, StartColorStr='#ebebeb', EndColorStr='#ffffff'); - -webkit-transition: all 0.8s ease-out; - -moz-transition: all 0.8s ease-out; - transition: all 0.8s ease-out; } #container input:hover, textarea:hover, From 5a70008bd73cdaeaec345c2fe8a37b5b35c19bc4 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 25 Feb 2015 21:14:19 -0800 Subject: [PATCH 4/8] update mongoskin and make visits report work again --- package.json | 2 +- reports/aggregators/visitsByGist.js | 35 ++++++++++++++++++----------- sandbox/index.js | 2 +- server.js | 2 +- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 76d3cd1..fde4683 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "express": "3.0.6", "request":"*", "handlebars":"1.0.7", - "mongoskin":"0.5.0", + "mongoskin":"^1.4", "connect-mongo": "0.1.x", "d3":"3.1.4", "inlet":"git://github.com/enjalot/Inlet.git", diff --git a/reports/aggregators/visitsByGist.js b/reports/aggregators/visitsByGist.js index 018e81a..8e8f1ac 100644 --- a/reports/aggregators/visitsByGist.js +++ b/reports/aggregators/visitsByGist.js @@ -8,14 +8,14 @@ var mongoConf = { db: 'tributary' } var mongo = require('mongoskin'); -var db = mongo.db(mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); +var db = mongo.db('mongodb://' + mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); db.open(function(err, db) { //collection where we store info on inlets that are created and saved var $inlets = db.collection("inlets"); //collection that's the output of mapreduce var out = "mr_inlets"; var $mr_inlets = db.collection(out); - $mr_inlets.remove({}); + $mr_inlets.remove({}, function(err) { if(err) console.log("err", err); }); //collection where we store visits (specifically to particular inlets) var $visits = db.collection("visits"); @@ -85,7 +85,7 @@ db.open(function(err, db) { query: query }, function(err, coll) { console.log("Visits reduced!", err); - db.close(); + //db.close(); //Count up and collect forks for each inlet $inlets.mapReduce(mapForks, reduceForks, { @@ -93,33 +93,42 @@ db.open(function(err, db) { query: query }, function(err, coll) { console.log("Forks reduced!", err); - db.close(); + //db.close(); //iterate over the inlets, get the created_at time and set it on the mongo inlet - $mr_inlets.find().toArray(function(err, mr_inlets) { + $mr_inlets.find({}, function(err, cursor) { //.toArray(function(err, mr_inlets) { + console.log("still here?") var count = 0; + /* var num = mr_inlets.length; + */ function finish() { - count++; - if(count === num) { + //count++; + //if(count === num) { db.close(); process.exit(); - } + //} } - mr_inlets.forEach(function(mr_inlet) { - console.log("inlet id", mr_inlet._id); + cursor.nextObject(iterator); + function iterator(err, mr_inlet) { + //mr_inlets.forEach(function(mr_inlet) { + console.log("args", arguments) + if(!mr_inlet) return finish(); + console.log("inlet id", mr_inlet._id, mr_inlet.value.count); $inlets.findOne({gistid: mr_inlet._id}, function(error, inlet) { - if(error || !inlet ) return finish(); + if(error || !inlet ) return cursor.nextObject(iterator); inlet.visits = mr_inlet.value.count || 1; inlet.nforks = mr_inlet.value.nforks || 0; inlet.forks = mr_inlet.value.forks || []; $inlets.update({gistid: inlet.gistid}, inlet, {safe: true}, function(error) { if(error) console.log(error) - finish(); + console.log("updated!") + cursor.nextObject(iterator); + //finish(); //db.close(); }); }) - }) + } //db.close(); }) diff --git a/sandbox/index.js b/sandbox/index.js index dbcc427..98f0cd7 100644 --- a/sandbox/index.js +++ b/sandbox/index.js @@ -52,7 +52,7 @@ var mongoConf = { //MONGO SETUP var mongo = require('mongoskin'); -var db = mongo.db(mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); +var db = mongo.db('mongodb://' + mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); //collection to store a cache of gists (for faster loading) var cache = require('../cache'); diff --git a/server.js b/server.js index 2bbb01e..aa984d4 100644 --- a/server.js +++ b/server.js @@ -23,7 +23,7 @@ var mongoConf = { //MONGO SETUP var mongo = require('mongoskin'); -var db = mongo.db(mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); +var db = mongo.db('mongodb://' + mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); //collection to store some info on our users var $users = db.collection("users"); From 858828d7ef7845e5e20af22e8006a1c564a8b531 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 25 Feb 2015 21:16:43 -0800 Subject: [PATCH 5/8] remove stray log --- reports/aggregators/inletsByUser.js | 2 +- reports/aggregators/visitsByGist.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reports/aggregators/inletsByUser.js b/reports/aggregators/inletsByUser.js index ac021f6..da19fbb 100644 --- a/reports/aggregators/inletsByUser.js +++ b/reports/aggregators/inletsByUser.js @@ -8,7 +8,7 @@ var mongoConf = { db: 'tributary' } var mongo = require('mongoskin'); -var db = mongo.db(mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); +var db = mongo.db('mongodb://' + mongoConf.host + ':' + mongoConf.port + '/' + mongoConf.db + '?auto_reconnect'); db.open(function(err, db) { //collection to store some info on our users var $users = db.collection("users"); diff --git a/reports/aggregators/visitsByGist.js b/reports/aggregators/visitsByGist.js index 8e8f1ac..97ce1d9 100644 --- a/reports/aggregators/visitsByGist.js +++ b/reports/aggregators/visitsByGist.js @@ -112,7 +112,7 @@ db.open(function(err, db) { cursor.nextObject(iterator); function iterator(err, mr_inlet) { //mr_inlets.forEach(function(mr_inlet) { - console.log("args", arguments) + //console.log("args", arguments) if(!mr_inlet) return finish(); console.log("inlet id", mr_inlet._id, mr_inlet.value.count); $inlets.findOne({gistid: mr_inlet._id}, function(error, inlet) { From 6a1ad3aec456af260c50264848197309146fe3f8 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 25 Feb 2015 21:30:12 -0800 Subject: [PATCH 6/8] fix reporting aggregations --- reports/aggregators/inletsByUser.js | 23 ++++++++++------------- reports/aggregators/visitsByGist.js | 22 ++-------------------- 2 files changed, 12 insertions(+), 33 deletions(-) diff --git a/reports/aggregators/inletsByUser.js b/reports/aggregators/inletsByUser.js index da19fbb..6a91af2 100644 --- a/reports/aggregators/inletsByUser.js +++ b/reports/aggregators/inletsByUser.js @@ -17,7 +17,7 @@ db.open(function(err, db) { //collection that's the output of mapreduce var out = "mr_users"; var $mr_users = db.collection(out); - $mr_users.remove({}); + $mr_users.remove({}, function(err) { if(err) console.log(err) }); function mapUsers() { if(this.user) { @@ -60,32 +60,29 @@ db.open(function(err, db) { query: query }, function(err, coll) { console.log("Users reduced!", err); - db.close(); //iterate over the inlets, get the created_at time and set it on the mongo inlet - $mr_users.find().toArray(function(err, mr_users) { + $mr_users.find({}, function(err, cursor){ //.toArray(function(err, mr_users) { var count = 0; - var num = mr_users.length; function finish() { - count++; - if(count === num) { - db.close(); - process.exit(); - } + db.close(); + process.exit(); } - mr_users.forEach(function(mr_user) { + cursor.nextObject(iterator); + function iterator(err, mr_user) { + if(!mr_user) return finish(); console.log("user id", mr_user._id); $users.findOne({id: mr_user._id}, function(error, user) { - if(error || !user ) return finish(); + if(error || !user ) return cursor.nextObject(iterator); user.inlets = mr_user.value.count || 1; user.visits = mr_user.value.visits || 1; user.nforks = mr_user.value.nforks || 0; $users.update({id: user.id}, user, {safe: true}, function(error) { if(error) console.log(error) - finish() + cursor.nextObject(iterator); }); }) - }) + } }) }) diff --git a/reports/aggregators/visitsByGist.js b/reports/aggregators/visitsByGist.js index 97ce1d9..7705f70 100644 --- a/reports/aggregators/visitsByGist.js +++ b/reports/aggregators/visitsByGist.js @@ -99,20 +99,12 @@ db.open(function(err, db) { $mr_inlets.find({}, function(err, cursor) { //.toArray(function(err, mr_inlets) { console.log("still here?") var count = 0; - /* - var num = mr_inlets.length; - */ function finish() { - //count++; - //if(count === num) { - db.close(); - process.exit(); - //} + db.close(); + process.exit(); } cursor.nextObject(iterator); function iterator(err, mr_inlet) { - //mr_inlets.forEach(function(mr_inlet) { - //console.log("args", arguments) if(!mr_inlet) return finish(); console.log("inlet id", mr_inlet._id, mr_inlet.value.count); $inlets.findOne({gistid: mr_inlet._id}, function(error, inlet) { @@ -124,20 +116,10 @@ db.open(function(err, db) { if(error) console.log(error) console.log("updated!") cursor.nextObject(iterator); - //finish(); - //db.close(); }); }) } - //db.close(); }) - }) - }) - - - - //db.close(); - }) From b59d73085517bbe573c8d024a46a6b2334066ed7 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 25 Feb 2015 23:16:56 -0800 Subject: [PATCH 7/8] fix play buttons --- static/plugins/play/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static/plugins/play/index.js b/static/plugins/play/index.js index d041c5c..72f4f9f 100644 --- a/static/plugins/play/index.js +++ b/static/plugins/play/index.js @@ -75,7 +75,8 @@ function tributaryPlayPlugin(tributary, plugin) { function onPlayPause() { - var tc = d3.select(el).select(".time_controls"); + var tc = d3.select("#display-controls").select(".time_controls"); + if(!tc.node()) tc = d3.select(el).select(".time_controls") var pb = tc.select("button.play"); if(!tributary.pause){ pb.classed("playing", false); @@ -131,6 +132,7 @@ function tributaryPlayPlugin(tributary, plugin) { } }); config.on("tick", function(t) { + if(!ts.node()) return; ts.node().setAttribute("value", tributary.t); ts.node().value = tributary.t; }); From 0a54a1a628b959914b57411f2e7012fa2a926406 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Wed, 25 Feb 2015 23:23:14 -0800 Subject: [PATCH 8/8] pass callback to invalidate --- server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index aa984d4..a410758 100644 --- a/server.js +++ b/server.js @@ -109,7 +109,7 @@ function inlet(req,res,next) { // invalidate the cache if get provides ?update=true if(req.query['update']) { - cache.invalidate($gistcache, gistid) + cache.invalidate($gistcache, gistid, function(err) { if(err) console.log(err)}) } var user = req.session.user; @@ -393,7 +393,7 @@ function after_fork(oldgist, newgist, token, callback) { function after_save(gist, callback) { // after a save, invalidate our cached gist - cache.invalidate($gistcache, gist.id) + cache.invalidate($gistcache, gist.id, function(err) { if(err) console.log(err) }) //update the raw url for the thumbnail //save info in mongo.