From 2a131569277490fa73c44f164575b1f09525ff9d Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Tue, 5 Jul 2016 14:42:51 -0400 Subject: [PATCH 01/12] cleanup to develop --- Makefile | 2 +- README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ed54281..4be03e5 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ DJANGO_POSTFIX := --settings=$(DJANGO_SETTINGS_MODULE) --pythonpath=$(PYTHONPATH # Development Settings LOCAL_SETTINGS := development -DJANGO_LOCAL_SETTINGS_MODULE = $(PROJECT).settings +DJANGO_LOCAL_SETTINGS_MODULE = $(PROJECT).settings.$(LOCAL_SETTINGS) DJANGO_LOCAL_POSTFIX := --settings=$(DJANGO_LOCAL_SETTINGS_MODULE) --pythonpath=$(PYTHONPATH) # Testing Settings diff --git a/README.md b/README.md index d55ba0a..218faa6 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,6 @@ The versioning uses a three part version system, "a.b.c" - "a" represents a majo [travis_href]: https://travis-ci.org/DistrictDataLabs/minimum-entropy [waffle_img]: https://badge.waffle.io/DistrictDataLabs/minimum-entropy.png?label=ready&title=Ready [waffle_href]: https://waffle.io/DistrictDataLabs/minimum-entropy -[coveralls_img]: https://coveralls.io/repos/DistrictDataLabs/minimum-entropy/badge.svg -[coveralls_href]: https://coveralls.io/r/DistrictDataLabs/minimum-entropy +[coveralls_img]: https://coveralls.io/github/DistrictDataLabs/minimum-entropy?branch=master +[coveralls_href]: https://coveralls.io/repos/github/DistrictDataLabs/minimum-entropy/badge.svg?branch=master [answers.jpg]: https://flic.kr/p/82Ub7z From 2117a68419f153243e1248006f1332049ccc0bec Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Tue, 5 Jul 2016 14:43:47 -0400 Subject: [PATCH 02/12] badge fix --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 218faa6..198b6ee 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,6 @@ The versioning uses a three part version system, "a.b.c" - "a" represents a majo [travis_href]: https://travis-ci.org/DistrictDataLabs/minimum-entropy [waffle_img]: https://badge.waffle.io/DistrictDataLabs/minimum-entropy.png?label=ready&title=Ready [waffle_href]: https://waffle.io/DistrictDataLabs/minimum-entropy -[coveralls_img]: https://coveralls.io/github/DistrictDataLabs/minimum-entropy?branch=master -[coveralls_href]: https://coveralls.io/repos/github/DistrictDataLabs/minimum-entropy/badge.svg?branch=master +[coveralls_img]: https://coveralls.io/repos/github/DistrictDataLabs/minimum-entropy/badge.svg?branch=master +[coveralls_href]:https://coveralls.io/github/DistrictDataLabs/minimum-entropy?branch=master [answers.jpg]: https://flic.kr/p/82Ub7z From 24fa113c812278cf67859b9719550eccd47c1ecb Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Tue, 5 Jul 2016 17:55:05 -0400 Subject: [PATCH 03/12] templates and assets --- minent/assets/css/minent.css | 242 +++++++++++++++++++ minent/assets/css/profile.css | 75 ++++++ minent/assets/favicon.png | Bin 0 -> 843 bytes minent/assets/humans.txt | 23 ++ minent/assets/img/error_background.png | Bin 0 -> 454 bytes minent/assets/img/loader.gif | Bin 0 -> 1849 bytes minent/assets/img/logo.png | Bin 0 -> 132969 bytes minent/assets/js/app/main.js | 29 +++ minent/assets/js/app/models/fugato.js | 69 ++++++ minent/assets/js/app/templates/question.html | 1 + minent/assets/js/app/views/list.js | 56 +++++ minent/assets/js/app/views/question.js | 22 ++ minent/assets/js/config/require.js | 45 ++++ minent/assets/js/utils/ask.js | 104 ++++++++ minent/assets/js/utils/hotkeys.js | 26 ++ minent/assets/robots.txt | 2 + minent/settings/base.py | 1 + minent/templates/404.html | 6 + minent/templates/500.html | 6 + minent/templates/base.html | 52 ++++ minent/templates/components/footer.html | 20 ++ minent/templates/components/modals.html | 39 +++ minent/templates/components/navbar.html | 94 +++++++ minent/templates/error.html | 31 +++ minent/templates/page.html | 29 +++ minent/templates/site/index.html | 36 +++ minent/templates/site/legal/legal-page.html | 84 +++++++ minent/templates/site/legal/privacy.html | 51 ++++ minent/templates/site/legal/terms.html | 122 ++++++++++ minent/templates/snippets/analytics.html | 11 + minent/tests/test_utils.py | 77 ++++++ minent/urls.py | 16 +- minent/utils.py | 160 ++++++++++++ minent/views.py | 85 +++++++ 34 files changed, 1611 insertions(+), 3 deletions(-) create mode 100644 minent/assets/css/minent.css create mode 100644 minent/assets/css/profile.css create mode 100644 minent/assets/favicon.png create mode 100644 minent/assets/humans.txt create mode 100644 minent/assets/img/error_background.png create mode 100644 minent/assets/img/loader.gif create mode 100644 minent/assets/img/logo.png create mode 100644 minent/assets/js/app/main.js create mode 100644 minent/assets/js/app/models/fugato.js create mode 100644 minent/assets/js/app/templates/question.html create mode 100644 minent/assets/js/app/views/list.js create mode 100644 minent/assets/js/app/views/question.js create mode 100644 minent/assets/js/config/require.js create mode 100644 minent/assets/js/utils/ask.js create mode 100644 minent/assets/js/utils/hotkeys.js create mode 100644 minent/assets/robots.txt create mode 100644 minent/templates/404.html create mode 100644 minent/templates/500.html create mode 100644 minent/templates/base.html create mode 100644 minent/templates/components/footer.html create mode 100644 minent/templates/components/modals.html create mode 100644 minent/templates/components/navbar.html create mode 100644 minent/templates/error.html create mode 100644 minent/templates/page.html create mode 100644 minent/templates/site/index.html create mode 100644 minent/templates/site/legal/legal-page.html create mode 100644 minent/templates/site/legal/privacy.html create mode 100644 minent/templates/site/legal/terms.html create mode 100644 minent/templates/snippets/analytics.html create mode 100644 minent/tests/test_utils.py create mode 100644 minent/utils.py create mode 100644 minent/views.py diff --git a/minent/assets/css/minent.css b/minent/assets/css/minent.css new file mode 100644 index 0000000..3d79936 --- /dev/null +++ b/minent/assets/css/minent.css @@ -0,0 +1,242 @@ +/* global stylesheet for the minimum-entropy application */ + +html, +body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ + font-family: 'Open Sans', sans-serif; +} + +body { + padding-top: 70px; +} + +/* Wrapper for page content to push down footer */ +#wrap { + min-height: 100%; + height: auto; + /* Negative indent footer by its height */ + margin: 0 auto -76px; + /* Pad bottom by footer height */ + padding: 0 0 106px; +} + +/* Set the fixed height of the footer here */ +#footer { + background-color: #fff; + border-top: 1px solid #eee; + height: 76px; + padding: 30px 15px; + font-size: 16px; + font-family: 'Open Sans Condensed' sans-serif; +} + +#footer p { + margin: 0; +} + +/* Helper classes */ + +.text-justify { + text-align: justify; +} + +.modal { + z-index: 1200; +} + +.img-brand { + width: 22px; + height: 22px; + margin: -2px 6px 0px 0px; + float: left; +} + +/* Specific Styles */ + +.tab-pane { + padding-top: 10px; +} + +#splash-box { + min-height: 400px; + margin-top: 10px; + text-align: center; +} + +img.navbar-gravatar { + margin: -2px 6px 0 0; + float: left; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + width: 22px; + height: 22px; +} + +/* Editable items */ + +.editable-item:hover a.edit-link:after{ + content: "edit"; +} + +.editable-item a.edit-link { + font-size: small; + margin-left 6px; +} + + +/* Number stats inline */ + +.number-stats li { + width: 32%; +} + +.number-stats a { + display: block; + color: #333; + width: 100%; + text-align: center; + text-decoration: none; +} + +.number-stats a:hover { + color: #428bca; + text-decoration: none; +} + +.number-stats a span { + display: block; + width: 100%; + text-align: center; +} + +.statistic { + font-size: 1.8em; + font-weight: bold; + margin: 0; +} + +.statlabel { + font-size: 0.7em; + color: #999; + margin: 0; +} + +.question-details { + min-height: 30px; +} + +/* Questions and Answers */ + +.question { + padding-bottom: 12px; + border-bottom: 1px solid #eee; + margin-bottom: 8px; +} + +.question-byline, .answer-info { + height: 34px; +} + +.question-byline img, .answer-info img { + width: 32px; + height: 32px; + float: left; + margin-right: 8px; + + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px +} + +.question-byline p, .answer-info p { + margin: -2px 0px 0px 0px; +} + +.question-details { + margin: 10px 0px; +} + +/* Typeahead Boostrap Style Fix */ +span.twitter-typeahead { + width: 100%; +} +.input-group span.twitter-typeahead { + display: block !important; +} +.input-group span.twitter-typeahead .tt-dropdown-menu { + top: 32px !important; +} +.input-group.input-group-lg span.twitter-typeahead .tt-dropdown-menu { + top: 44px !important; +} +.input-group.input-group-sm span.twitter-typeahead .tt-dropdown-menu { + top: 28px !important; +} + +.tt-query { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.tt-hint { + color: #999 +} + +.tt-menu { + max-height: 150px; + overflow-y: auto; + margin-top: 4px; + padding: 4px 0; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); +} + +.tt-suggestion { + padding: 3px 20px; + line-height: 24px; +} + +.tt-suggestion.tt-cursor { + color: #fff; + background-color: #0097cf; + +} + +.tt-suggestion p { + margin: 0; +} + +/* D3 Graphs */ + +.node { + stroke: #fff; + stroke-width: 1.5px; +} + +.link { + stroke: #999; + stroke-opacity: .6; +} + +/* Google Maps */ + +#google_canvas { + height:200px; +} +#google_canvas h1 { + font-size:16px; +} +#google_canvas h2 { + font-size:14px; + font-weight:300; +} diff --git a/minent/assets/css/profile.css b/minent/assets/css/profile.css new file mode 100644 index 0000000..c6ed5cb --- /dev/null +++ b/minent/assets/css/profile.css @@ -0,0 +1,75 @@ +/* Profile specific styles */ + +#profile-sidebar h2 { + font-size: 1.7em; + margin-bottom: 2px; +} + +#profile-sidebar h3 { + margin-top: 0; + font-weight: normal; + font-size: 1.4em; +} + +#profile-sidebar img { + width: 100%; +} + +#profile-sidebar ul { + font-size: 1.15em; +} + +#profile-sidebar ul li { + margin-bottom: 3px; +} + +#profile-sidebar ul i, span.fa { + margin-right: 8px; + width: 18px; + text-align: center; +} + +#profile-sidebar ul i { + font-size: .94em; + /*color: #999;*/ +} + +.gravatar { + position: relative; +} + +.gravatar .mask { + text-align: center; + opacity: 0; + position: absolute; + bottom: 0; left: 0; + background-color: rgba(0,0,0,0.75); + width: 100%; + padding: 10px 0; + + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-bottom-left-radius: 6px; + -moz-border-bottom-right-radius: 6px; +} + +.gravatar .mask a { + color: white; + width: 100%; + height: 100%; +} + +.gravatar:hover .mask { + opacity: 1; + + -webkit-transition: opacity 0.3s ease-in-out; + -moz-transition: opacity 0.3s ease-in-out; + transition: opacity 0.3s ease-in-out; +} + +ul.activity-stream li { + margin: 10px 0; + color: #333; +} diff --git a/minent/assets/favicon.png b/minent/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..aceffda81a3fb27fec11fa635edee8e08024cd71 GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+S!VC(K#9UIO`&C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$Z5SAs?s~d7hE&{2`t$$4{b2{D28N_0 zi3A1#2j+JS4GdBR>9@!{0ebx zDttn}S&lsS;AI3F!0?nQsGzQHpOt{Tt8g~!qmrPrOo9R~!}07*E-& zUjwOdak`Vv{4qUeS~EkyAHIM(Apw6?RTc)Ojuiq1hK7L*LFx@R9-WzK%>Q8pv+AqM z4tLl>w$G9Pc|MRYASft`o$Fuq_jkSxpKKdL_yz7WJ+fHvBVA>ynnRYZKsMvi{X$04 z3Jn}?jf)m7lD#nTl7o%p%6~JMjzl@gFdXT0FfDYbk?wG9oHmcKYc1QOq$DSxcRyG; z#Kq0~2=u3|Lrls4f3+2j{7>welGrrZHr{9cD6H_0b80@*BbNnro=%`JQDZVqRT0=< z^W($AK$DLK3hP);GCwtAcsW17Y=u`E!^H~$SxQfUads$D=+w!RhDCXIs^DS`HXxhaOkEE7b8{sS(tDC*3fE zvtwt&4B?KsjXyXA;$5!sU->Spv5lqU@`qLiV8lNtY~Y@7t3xe~f5|?Z%1=*b_w@7_ zO*qT9iMzwHQDTbi_eCr3Gc0lF+|D=MmVvQlz0oh`+_Zy?7am!AgTe~DWM4f=H@yg literal 0 HcmV?d00001 diff --git a/minent/assets/humans.txt b/minent/assets/humans.txt new file mode 100644 index 0000000..c6cbf5e --- /dev/null +++ b/minent/assets/humans.txt @@ -0,0 +1,23 @@ +/* TEAM */ + + Developer: Benjamin Bengfort + Contact: bbengfort [at] districtdatalabs.com + Twitter: @bbengfort + From: Washington, DC + + Developer: Tony Ojeda + Contact: tojeda [at] districtdatalabs.com + Twitter: @tonyojeda3 + From: Washington, DC + + Developer: Rebecca Bilbro + Contact: rbilbro [at] districtdatalabs.com + Twitter: @rebeccabilbro + From: Washington, DC + +/* SITE */ + + Last update: 2016/07/05 + Language: English + Doctype: HTML5 + IDE: Atom Editor 1.8.0 diff --git a/minent/assets/img/error_background.png b/minent/assets/img/error_background.png new file mode 100644 index 0000000000000000000000000000000000000000..bee062702400d7f1423a65f78e7a0f88561ff535 GIT binary patch literal 454 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%EX7WqAsj$Z!;#Vf4nJ za0`JjEamT(Ybf(X}%T(9@pp@bJzd> z?<}8FllxM~r}N$ggYJoHY)dlUeY|x@kwsAO(rdXhK4*Nw{_Q(o?QiHNH1W%szq0az z3%BKN*8h=iF?Y`MpO-6S*aZdGzWyb#J@@pw*C$SI@(5K5-SWOVEVDD<`@>qLS<5_s z?W^ZjX}!FknRANI)Yn$eCOTZ7IN^Eav~{oJQg$j;wz#ZfasR@z*MWcPgyV%%5+&|2 zc|M%+bK#j)>?)h5WXt`(S0!ipT+VCFsck1pWIH#UdsWW%XIYs3W}726ldgZ}uy*!b zd6ipN-!y*x^_NRZ<}C?Yw5Z;(8KF^D uo)h5z literal 0 HcmV?d00001 diff --git a/minent/assets/img/loader.gif b/minent/assets/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b234e2d48c873e7ab2da82cdf98df0eb76ed000 GIT binary patch literal 1849 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 literal 0 HcmV?d00001 diff --git a/minent/assets/js/app/main.js b/minent/assets/js/app/main.js new file mode 100644 index 0000000..1b2fcef --- /dev/null +++ b/minent/assets/js/app/main.js @@ -0,0 +1,29 @@ +/* + * Main entry point to the Kyudo application + */ + +define([ + './models/fugato', + './views/list' +], +function(QuestionCollection, QuestionListView) { + + var view = new QuestionListView(); + + return { + view: view, + + start: function() { + // Do the CSRf AJAX Modification + var csrfToken = $('input[name="csrfmiddlewaretoken"]').val(); + $.ajaxSetup({headers: {"X-CSRFToken": csrfToken}}); + + console.log("KyodoApp is started and ready"); + }, + + stop: function() { + console.log("KyodoApp has stopped") + } + } + +}); diff --git a/minent/assets/js/app/models/fugato.js b/minent/assets/js/app/models/fugato.js new file mode 100644 index 0000000..93039af --- /dev/null +++ b/minent/assets/js/app/models/fugato.js @@ -0,0 +1,69 @@ +/** + * app/models/fugato.js + * Models for Fugato (Questions and Answers) + * + * Author: Benjamin Bengfort + * Created: Thu Oct 30 13:43:41 2014 -0400 + * + * Copyright (C) 2014 University of Maryland + * For license information, see LICENSE.txt + * + * ID: fugato.js [] bengfort@cs.umd.edu $ + */ + +// JS Hint directives and strict mode +/* globals exports,__filename */ +'use strict'; + +define([ + "backbone", + "underscore" +], function(Backbone, _) { + + // Question Model + var QuestionModel = Backbone.Model.extend({ + defaults: { + text: null, + author: null, + created: null, + modified: null + } + }); + + var QuestionCollectionMeta = Backbone.Collection.extend({ + defaults: { + count: 0, + next: null, + previous: null + } + }); + + var QuestionCollection = Backbone.Collection.extend({ + url: "/api/questions/", + model: QuestionModel, + comparator: function(m) { + return -Date.parse(m.get('created')); + }, + + initialize: function() { + this.meta = new QuestionCollectionMeta(); + }, + + parse: function(data) { + var results = data.results; + delete data.results; + this.meta.set(data); + return results; + }, + + sync: function() { + return Backbone.sync.apply(Backbone, arguments); + } + + }); + + QuestionCollection.QuestionModel = QuestionModel; + QuestionCollection.QuestionCollectionMeta = QuestionCollectionMeta; + return QuestionCollection; + +}); diff --git a/minent/assets/js/app/templates/question.html b/minent/assets/js/app/templates/question.html new file mode 100644 index 0000000..07343de --- /dev/null +++ b/minent/assets/js/app/templates/question.html @@ -0,0 +1 @@ +<%- text %> (<%- created %>) diff --git a/minent/assets/js/app/views/list.js b/minent/assets/js/app/views/list.js new file mode 100644 index 0000000..526d175 --- /dev/null +++ b/minent/assets/js/app/views/list.js @@ -0,0 +1,56 @@ +define( +function(require, exports, module) { + + var Backbone = require('backbone'); + var _ = require('underscore'); + var QuestionCollection = require('../models/fugato') + var QuestionView = require('./question'); + + var QuestionListView = Backbone.View.extend({ + + el: "#questionApp", + + initialize: function() { + this.input = this.$('input#query'); + this.questions = new QuestionCollection; + this.views = []; + + this.listenTo(this.questions, "sync", this.render); + this.listenTo(this.questions, "remove", function() { this.questions.fetch(); }); + this.questions.fetch(); + }, + + submitQuestion: function(event) { + event.preventDefault(); + var query = this.input.val(); + + if (!query) { return; } + + this.questions.create({text:query}, {wait:true}); + this.input.val(''); + + return false; + }, + + render: function() { + var ul = this.$("#question-list"); + _.invoke(this.views, "remove"); + this.views.length = 0; + + this.questions.each(function(model, idx) { + var item = new QuestionView({model:model}); + item.render(); + ul.append(item.$el); + this.views.push(item); + }, this); + }, + + events: { + "submit form": "submitQuestion" + } + + }); + + return QuestionListView; + +}); diff --git a/minent/assets/js/app/views/question.js b/minent/assets/js/app/views/question.js new file mode 100644 index 0000000..5924b2b --- /dev/null +++ b/minent/assets/js/app/views/question.js @@ -0,0 +1,22 @@ +define([ + 'backbone', + 'underscore', + 'text!../templates/question.html' +], +function(Backbone, _, questionHtml) { + + var QuestionView = Backbone.View.extend({ + tagName: "li", + template: _.template(questionHtml), + + render: function() { + var html = this.template(this.model.toJSON()); + this.$el.html(html); + return this; + } + + }); + + return QuestionView; + +}); diff --git a/minent/assets/js/config/require.js b/minent/assets/js/config/require.js new file mode 100644 index 0000000..839a88f --- /dev/null +++ b/minent/assets/js/config/require.js @@ -0,0 +1,45 @@ +/** + * config/require.js + * Configuration for Require.js + * + * Copyright (C) 2014 University of Maryland + * For license information, see LICENSE.txt + * + * Author: Benjamin Bengfort + * Created: Wed Jan 22 23:52:24 2014 -0500 + * + * ID: require.js [] bengfort@cs.umd.edu $ + */ + +requirejs.config({ + baseUrl: '/assets/js', + paths: { + 'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min', + 'jquery': '//code.jquery.com/jquery-1.11.3.min', + 'bootstrap': '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min', + 'backbone': '//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.1/backbone-min', + 'text': '//cdnjs.cloudflare.com/ajax/libs/require-text/2.0.12/text.min', + 'mustache': '//cdnjs.cloudflare.com/ajax/libs/mustache.js/2.1.2/mustache.min', + 'moment': '//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.min', + 'typeahead': '//cdnjs.cloudflare.com/ajax/libs/typeahead.js/0.11.1/typeahead.bundle.min', + }, + shim: { + 'underscore': { + exports: '_' + }, + 'jquery': { + exports: '$' + }, + 'backbone': { + deps: ['jquery', 'underscore'], + exports: 'Backbone' + }, + 'bootstrap': { + deps: ['jquery'] + }, + 'typeahead': { + deps: ['jquery'], + exports: 'Bloodhound' + } + } +}); diff --git a/minent/assets/js/utils/ask.js b/minent/assets/js/utils/ask.js new file mode 100644 index 0000000..a064854 --- /dev/null +++ b/minent/assets/js/utils/ask.js @@ -0,0 +1,104 @@ +/** + * utils/ask.js + * Javascript that runs the ask question dialogs + * + * Copyright (C) 2014 University of Maryland + * For license information, see LICENSE.txt + * + * Author: Benjamin Bengfort + * Created: Fri Jan 16 11:48:50 2015 -0500 + * + * ID: hotkeys.js [] bengfort@cs.umd.edu $ + */ + + +(function($) { + $(document).ready(function() { + + var csrfToken = $('input[name="csrfmiddlewaretoken"]').val(); + $.ajaxSetup({headers: {"X-CSRFToken": csrfToken}}); + console.log("ask application ready"); + + // Form elements for ease of handling + var askQuestionModal = $("#askQuestionModal"); + var askQuestionForm = $("#askQuestionForm"); + var txtQuestion = $("#txtQuestion"); + var helpBlock = $("#txtQuestionHelpBlock"); + var btnAskQuestionBack = $("#btnAskQuestionBack"); + var btnAskQuestionNext = $("#btnAskQuestionNext"); + var question = ""; + var questionsEndpoint = "/api/questions/"; + + // Capture enter in Question textarea and submit + txtQuestion.keydown(function(event) { + if (event.keyCode == 13) { + event.preventDefault(); + askQuestionForm.submit(); + return false; + } + }); + + // Handle question form submission + askQuestionForm.submit(function(event) { + event.preventDefault(); + question = txtQuestion.val(); + + if (question == "") { + // No question has been entered + askQuestionForm.addClass('has-error'); + helpBlock.text("Please enter a question"); + + } else { + // Disable the text area and the next button + txtQuestion.attr('disabled', 'disabled'); + btnAskQuestionNext.attr('disabled',' disabled'); + + // Submit to similar questions endpoint + $.post( + questionsEndpoint, + { + "text": question + }, + onQuestionPostSuccess + ).fail(onQuestionPostFailure); + + } + + return false; + + }); + + function onQuestionPostSuccess(data) { + if (data.page_url) { + window.location.href = data.page_url; + } else { + console.log("Success!"); + askQuestionModal.modal("hide"); + } + } + + function onQuestionPostFailure(jqXHR, textStatus, errorThrown) { + reason = jqXHR.responseJSON.detail; + askQuestionForm.addClass('has-error'); + helpBlock.text(reason); + + question = ""; + txtQuestion.val(''); + txtQuestion.removeAttr('disabled'); + btnAskQuestionNext.removeAttr('disabled'); + } + + // On modal close, reset the form back to original state + askQuestionModal.on('hidden.bs.modal', function(event) { + question = ""; + txtQuestion.val(''); + txtQuestion.removeAttr('disabled'); + helpBlock.text(""); + btnAskQuestionNext.removeAttr('disabled'); + btnAskQuestionBack.removeAttr('disabled'); + btnAskQuestionBack.addClass('invisible'); + askQuestionForm.removeClass('has-error'); + }); + + }); +})(jQuery); diff --git a/minent/assets/js/utils/hotkeys.js b/minent/assets/js/utils/hotkeys.js new file mode 100644 index 0000000..cba4634 --- /dev/null +++ b/minent/assets/js/utils/hotkeys.js @@ -0,0 +1,26 @@ +/** + * utils/hotkeys.js + * Keyboard hotkeys for the Ronin App + * + * Copyright (C) 2014 University of Maryland + * For license information, see LICENSE.txt + * + * Author: Benjamin Bengfort + * Created: Wed Jan 22 23:52:24 2014 -0500 + * + * ID: hotkeys.js [] bengfort@cs.umd.edu $ + */ + + +(function($) { + $(document).ready(function() { + + $(document).keyup(function(e) { + if (e.keyCode == 27) { + e.preventDefault(); + window.location = "/admin/"; + } + }); + + }); +})(jQuery); diff --git a/minent/assets/robots.txt b/minent/assets/robots.txt new file mode 100644 index 0000000..f8a0a9b --- /dev/null +++ b/minent/assets/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /admin diff --git a/minent/settings/base.py b/minent/settings/base.py index dbb1e76..66b09e7 100644 --- a/minent/settings/base.py +++ b/minent/settings/base.py @@ -99,6 +99,7 @@ def environ_setting(name, default=None): ## Application definition INSTALLED_APPS = [ # Django apps + 'grappelli', # Must come before admin 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/minent/templates/404.html b/minent/templates/404.html new file mode 100644 index 0000000..4aeeae4 --- /dev/null +++ b/minent/templates/404.html @@ -0,0 +1,6 @@ +{% extends 'error.html' %} + +{% block error_code %}404 Not Found{% endblock %} +{% block error_details %} +

Unfortunately, we couldn't find what you were looking for.

+{% endblock %} diff --git a/minent/templates/500.html b/minent/templates/500.html new file mode 100644 index 0000000..05aaaf0 --- /dev/null +++ b/minent/templates/500.html @@ -0,0 +1,6 @@ +{% extends 'error.html' %} + +{% block error_code %}500 Server Error{% endblock %} +{% block error_details %} +

Something went very wrong on the server, the administrators have been notified.

+{% endblock %} diff --git a/minent/templates/base.html b/minent/templates/base.html new file mode 100644 index 0000000..156601c --- /dev/null +++ b/minent/templates/base.html @@ -0,0 +1,52 @@ +{% load staticfiles %} + + + + {% block meta %} + + + + + + + {% endblock %} + + {% block title %}Minimum Entropy{% endblock %} + + + + + {% block stylesheets %} + + + + {% endblock %} + + + + {% block body %} + {% endblock %} + + {% block javascripts %} + + + + + + + + + + + + + + + + + {% endblock %} + + {% include 'snippets/analytics.html' %} + + + diff --git a/minent/templates/components/footer.html b/minent/templates/components/footer.html new file mode 100644 index 0000000..8164e8f --- /dev/null +++ b/minent/templates/components/footer.html @@ -0,0 +1,20 @@ + diff --git a/minent/templates/components/modals.html b/minent/templates/components/modals.html new file mode 100644 index 0000000..6ff670d --- /dev/null +++ b/minent/templates/components/modals.html @@ -0,0 +1,39 @@ + + {% csrf_token %} + + + + + diff --git a/minent/templates/components/navbar.html b/minent/templates/components/navbar.html new file mode 100644 index 0000000..03e74b7 --- /dev/null +++ b/minent/templates/components/navbar.html @@ -0,0 +1,94 @@ +{% load staticfiles %} + + diff --git a/minent/templates/error.html b/minent/templates/error.html new file mode 100644 index 0000000..f6df4f1 --- /dev/null +++ b/minent/templates/error.html @@ -0,0 +1,31 @@ +{% extends 'base.html' %} +{% load staticfiles %} + +{% block stylesheets %} + {{ block.super }} + +{% endblock %} + +{% block body %} +
+
+
+
+
+

Whoops!

+

{% block error_code %}{% endblock %}

+
+ {% block error_details %} +

We're currently performing some scheduled maintenance. + The site will be back up shortly!

+ {% endblock %} +
+
+
+
+
+
+{% endblock %} diff --git a/minent/templates/page.html b/minent/templates/page.html new file mode 100644 index 0000000..09e1275 --- /dev/null +++ b/minent/templates/page.html @@ -0,0 +1,29 @@ +{% extends 'base.html' %} + +{% block body %} + +
+ + {% block navbar %} + {% include 'components/navbar.html' %} + {% endblock %} + + +
+ {% block content %} + {% endblock %} +
+ +
+ + +
+ {% block modals %} + {% include 'components/modals.html' %} + {% endblock %} +
+ + {% block footer %} + {% include 'components/footer.html' %} + {% endblock %} +{% endblock %} diff --git a/minent/templates/site/index.html b/minent/templates/site/index.html new file mode 100644 index 0000000..00c5268 --- /dev/null +++ b/minent/templates/site/index.html @@ -0,0 +1,36 @@ +{% extends 'page.html' %} +{% load staticfiles %} +{# This page displays a tiny splash page with information #} + + {% block content %} + +
+
+ + +
+ +

Welcome to Minimum Entropy!

+

Please login to get started

+
+
+ + +
+
+ + +
+ + {% csrf_token %} +
+

Or

+ + Sign in with Google + +
+ +
+
+ + {% endblock %} diff --git a/minent/templates/site/legal/legal-page.html b/minent/templates/site/legal/legal-page.html new file mode 100644 index 0000000..39ff8be --- /dev/null +++ b/minent/templates/site/legal/legal-page.html @@ -0,0 +1,84 @@ +{% extends 'page.html' %} + +{% block stylesheets %} + {{ block.super }} + +{% endblock %} + +{% block navbar %} + +{% endblock %} + +{% block content %} +
+
+
+ +
+
+
+
+ {% block legal-content %}{% endblock %} +
+
+
+{% endblock %} + +{% block footer %} + + +{% endblock %} diff --git a/minent/templates/site/legal/privacy.html b/minent/templates/site/legal/privacy.html new file mode 100644 index 0000000..20dd655 --- /dev/null +++ b/minent/templates/site/legal/privacy.html @@ -0,0 +1,51 @@ +{% extends 'site/legal/legal-page.html' %} + + {% block legal-header %} +

Privacy Policy

+

Last Updated: August 21, 2015

+ {% endblock %} + + {% block legal-content %} +

Your privacy is very important to us. Accordingly, we have developed this Policy in order for you to understand how we collect, use, communicate and disclose and make use of personal information. The following outlines our privacy policy.

+ +
    +
  • Before or at the time of collecting personal information, we will identify the purposes for which information is being collected.
  • +
  • We will collect and use of personal information solely with the objective of fulfilling those purposes specified by us and for other compatible purposes, unless we obtain the consent of the individual concerned or as required by law.
  • +
  • We will only retain personal information as long as necessary for the fulfillment of those purposes.
  • +
  • We will collect personal information by lawful and fair means and, where appropriate, with the knowledge or consent of the individual concerned.
  • +
  • Personal data should be relevant to the purposes for which it is to be used, and, to the extent necessary for those purposes, should be accurate, complete, and up-to-date.
  • +
  • We will protect personal information by reasonable security safeguards against loss or theft, as well as unauthorized access, disclosure, copying, use or modification.
  • +
  • We will make readily available to customers information about our policies and practices relating to the management of personal information.
  • +
+ + +

We are committed to conducting our business in accordance with these principles in order to ensure that the confidentiality of personal information is protected and maintained.

+ +

Information Collection and Use

+ +

Our primary goal in collecting information is to provide and improve our Site, App, and Services. We would like to deliver a user-customized experience on our site, allowing users to administer their Membership and enable users to enjoy and easily navigate the Site or App.

+ +

Personally Identifiable Information

+ +

When you register or create an account with us through the Site, or as a user of a Service provided by us, or through any Mobile App, we will ask you for personally identifiable information and you will become a member ("Member") of the site. This information refers to information that can be used to contact or identify you ("Personal Information"). Personal Information includes, but is not limited to, your name, phone number, email address, and home and business postal addresses. We use this information only to provide Services and administer your inquiries.

+ +

We may also collect other information as part of the registration for use in administration and personalization of your account. This information is "Non-Identifying Information" like your role in education. We use your Personal Information and, in some cases, your Non-Identifying Information to provide you a Service, complete your transactions, and administer your inquiries.

+ +

We will also use your Personal Information to contact you with newsletters, marketing, or promotional materials, and other information that may be of interest to you. If you decide at any time that you no longer with to receive such communications from us, please follow the unsubscribe instructions provided in any communications update.

+ +

Changing or Deleting your Information

+ +

All Members may review, update, correct, or delete any Personal Information in their user profile under the "My Account" section of the Site or by contacting us. If you completely delete all such information, then your account may become deactivated. You can also request the deletion of your account, which will anonymize all Personal Information and restrict the username associated with the Member from being used again.

+ +

International Transfer

+ +

Your information may be transferred to, and maintained on, computers located outside of your state, province, country or other governmental jurisdiction where the privacy laws may not be as protective as those in your jurisdiction. If you are located outside the United States and choose to provide information to us, our website transfers Personal Information to the United States and processes it there. Your consent to these Terms of Use, followed by your submission of such information represents your agreement to that transfer.

+ +

Our Policy Toward Children

+ +

This Site is not directed to children under 18. We do not knowingly collect personally identifiable information from children under 13. If a parent or guardian becomes aware that his or her child has provided us Personal Information without their consent, he or she should contact us at admin@districtdatalabs.com. If we become aware that a child under 13 has provided us with Personal Information, we will delete such information from our databases.

+ +

Modification

+ +

It is our policy to post any changes we make to our Privacy Policy on this page. If we make material changes to how we treat our users' personal information, we will notify you by e-mail to the e-mail address specified in your account. The date this Privacy Policy was last revised is identified at the top of the page. You are responsible for ensuring we have an up-to-date active and deliverable e-mail address for you, and for periodically visiting our Website and this Privacy Policy to check for any changes.

+ {% endblock %} diff --git a/minent/templates/site/legal/terms.html b/minent/templates/site/legal/terms.html new file mode 100644 index 0000000..6f1dd30 --- /dev/null +++ b/minent/templates/site/legal/terms.html @@ -0,0 +1,122 @@ +{% extends 'site/legal/legal-page.html' %} + + {% block legal-header %} +

Terms and Conditions of Use

+

Last Updated: August 21, 2015

+ {% endblock %} + + {% block legal-content %} +
+ +

Use of Site

+ +

By accessing this website or any website owned by District Data Labs, you are agreeing to be bound to all of the terms, conditions, and notices contained or referenced in this Terms and Conditions of Use and all applicable laws and regulations. You also agree that you are responsible for compliance with any applicable local laws. If you do not agree to these terms, you are prohibited from using or accessing this site or any other site owned by District Data Labs. District Data Labs reserves the right to update or revise these Terms of Use. Your continued use of this Site following the posting of any changes to the Terms of Use constitutes acceptance of those changes.

+ +

Permission is granted to temporarily download one copy of the materials on District Data Labs's Websites for viewing only. This is a grant of a license, not a transfer of a title. Under this licenses you may not:

+ +
    +
  • Modify or copy the materials
  • +
  • Use the materials for any commercial purpose, or any public display (commercial or non-commercial)
  • +
  • Attempt to decompile or reverse engineer any software contained or provided through District Data Labs's Website
  • +
  • Remove any copyright or proprietary notations from the material
  • +
  • Transfer the materials to another person or "mirror" any materials on any other server including data accessed through our APIS
  • +
+ + +

District Data Labs has the right to terminate this license if you violate any of these restrictions, and upon termination you are no longer allowed to view these materials and must destroy any downloaded content in either print or electronic format.

+
+ +
+ +

Modification

+ +

It is our policy to post any changes we make to our terms of use on this page. If we make material changes to how we treat our users' personal information, we will notify you by e-mail to the e-mail address specified in your account. The date these Terms of Use was last revised is identified at the top of the page. You are responsible for ensuring we have an up-to-date active and deliverable e-mail address for you, and for periodically visiting our Website and this terms of use to check for any changes. +

+ + + + +
+ +

Trademarks

+ +

District Data Labs owns names, logos, designs, titles, words, or phrases within this Site are trademarks, service marks, or trade names of District Data Labs or its affiliated companies and may not be used without prior written permission. District Data Labs claims no interest in marks owned by entities not affiliated with District Data Labs which may appear on this Site.

+
+ +
+ +

Contributed Content

+ +

Users posting content to the Site and District Data Labs's Social Media pages linked within are solely responsible for all content and any infringement, defamation, or other claims resulting from or related thereto. District Data Labs reserves the right to remove or refuse to post any content that is offensive, indecent, or otherwise objectionable, and makes no guarantee of the accuracy, integrity, or quality of posted content.

+ +
+ +

Account Registration

+ +

In order to access certain features of this Site and Services and to post any Content on the Site or through the Services, you must register to create an account ("Account") through the Site, or through a Service provided by us for use with our Site.

+ +

During the registration process, you will be required to provide certain information and you will establish a username and password. You agree to provide accurate, current, and complete information as required during the registration process. You also agree to ensure, by updating, the information remains accurate, current, and complete. District Data Labs reserves the right to suspend or terminate your Account if information provided during the registration process or thereafter proves to be inaccurate, not current, or incomplete.

+ +

You are responsible for safeguarding your password. You agree not to disclose your password to any third party and take sole responsibility for any activities or actions under your Account, whether or not your have authorized such activities or actions. If you think your account has been accessed in any unauthorized way, you will notify District Data Labs immediately.

+ +

Termination and Account Cancellation

+ +

District Data Labs will have the right to suspend or disable your Account if you breach any of these Terms of Service, at our sole discretion and without any prior notice to you. District Data Labs reserves the right to revoke your access to and use of this Site, Services, and Content at any time, with or without cause.

+ +

You may also cancel your Account at any time by sending an email to admin@districtdatalabs.com or by using the "delete account" option under the "My Account" section of the website. When your account is canceled, we set all personal information except your username to "Anonymous" and remove the ability to login with that username and any password. The username will be considered unavailable, and no one will be able to create or use an account with the username of the cancelled account.

+
+ +
+ +

Privacy

+ +

See District Data Labs's Privacy Policy for information and notices concerning collection and use of your personal information.

+ +

+ +

District Data Labs Mailing List

+ +

Should you submit your contact information through the "Sign Up" link, you agree to receive periodic emails and possible postal mail relating to news and updates regarding District Data Labs efforts and the efforts of like-minded organizations. You may discontinue receipt of such emails and postal mail through the “unsubscribe” provisions included in the promotional emails.

+
+ +
+ +

No Endorsements

+ +

Any links on this Site to third party websites are not an endorsement, sponsorship, or recommendation of the third parties or the third parties' ideas, products, or services. Similarly, any references in this Site to third parties and their products or services do not constitute an endorsement, sponsorship, or recommendation. If you follow links to third party websites, or any other companies or organizations affiliated or unaffiliated with District Data Labs, you are subject to the terms and conditions and privacy policies of those sites, and District Data Labs marks no warranty or representations regarding those sites. Further, District Data Labs is not responsible for the content of third party or affiliated company sites or any actions, inactions, results, or damages caused by visiting those sites.

+
+ +
+ +

Governing Law

+ +

This Site was designed for and is operated in the United States. Regardless of where the Site is viewed, you are responsible for compliance with applicable local laws.

+ +

You and District Data Labs agree that the laws of the District of Columbia will apply to all matters arising from or relating to use of this Website, whether for claims in contract, tort, or otherwise, without regard to conflicts of laws principles.

+ +

International Transfer

+ +

Your information may be transferred to, and maintained on, computers located outside of your state, province, country or other governmental jurisdiction where the privacy laws may not be as protective as those in your jurisdiction. If you are located outside the United States and choose to provide information to us, District Data Labs transfers Personal Information to the United States and processes it there. Your consent to these Terms of Use, followed by your submission of such information represents your agreement to that transfer.

+
+ +
+ +

Disclaimer

+ +

The materials on District Data Labs's Website are provided "as is" without any kind of warranty. The material on this Website is not a warranty as to any product or service provided by District Data Labs or any affiliated or unaffiliated organization.

+ +

District Data Labs is not liable for any errors, delays, inaccuracies, or omissions in this Website or any Website that are linked to or referenced by this Website. Under no circumstances shall District Data Labs be liable for any damages, including indirect, incidental, special, or consequential damages that result from the use of, or inability to use, this Website.

+
+ +
+ +

Agrement

+ +

These Terms of Use constitute the entire agreement between you and District Data Labs with respect to your use of this Site and supersede all prior or contemporaneous communications and proposals, whether oral, written, or electronic, between you and District Data Labs with respect to this Site. If any provision(s) of these Terms of Use are held invalid or unenforceable, those provisions shall be construed in a manner consistent with applicable law to reflect, as nearly as possible, the original intentions of the parties, and the remaining provisions shall remain in full force and effect.

+
+ {% endblock %} diff --git a/minent/templates/snippets/analytics.html b/minent/templates/snippets/analytics.html new file mode 100644 index 0000000..14d9ae5 --- /dev/null +++ b/minent/templates/snippets/analytics.html @@ -0,0 +1,11 @@ + + diff --git a/minent/tests/test_utils.py b/minent/tests/test_utils.py new file mode 100644 index 0000000..997fc0c --- /dev/null +++ b/minent/tests/test_utils.py @@ -0,0 +1,77 @@ +# minent.tests.test_utils +# Tests for the utility module of minimum-entropy +# +# Author: Benjamin Bengfort +# Created: Tue Jun 23 11:53:06 2015 -0400 +# +# Copyright (C) 2015 District Data Labs +# For license information, see LICENSE.txt +# +# ID: test_utils.py [] benjamin@bengfort.com $ + +""" +Tests for the utility module of Kyudo +""" + +########################################################################## +## Imports +########################################################################## + +from minent.utils import * +from unittest import TestCase + +########################################################################## +## Utilities Testing +########################################################################## + +class UtilsTests(TestCase): + """ + Test the minimum-entropy utilities library + """ + + def test_normalize(self): + """ + Test the normalization function + """ + + self.assertNotIn(" ", normalize("a b c d e f g"), "should not contain spaces") + self.assertNotIn("A", normalize("AAAAA AAA AA 9AA8"), "should not contain uppercase") + self.assertNotIn(".", normalize("no.punctuation."), "should not contain punctuation") + self.assertNotIn("-", normalize("no-punctuation-"), "should not contain punctuation") + + def test_normalize_question(self): + """ + Test question normalization + """ + + testa = "Who is faster, a T-Rex or a Velociraptor?" + testb = "who is faster? A t-rex or a velociraptor?" + + self.assertEqual(normalize(testa), normalize(testb)) + + def test_signature(self): + """ + Test the text signature method + """ + + self.assertEqual(len(signature("here I am")), 28, "should be base64 encoded SHA1 hash length") + self.assertEqual(signature("the rain in spain"), b"QKv9wgxE3wSgRQevr3h1S0cg468=", "should compute the correct SHA1 hash") + + def test_question_signature(self): + """ + Test questions with same signature + """ + + testa = "Who is faster, a T-Rex or a Velociraptor?" + testb = "who is faster? A t-rex or a velociraptor?" + + self.assertEqual(signature(testa), signature(testb)) + + def test_htmlize(self): + """ + Test the htmlize function + """ + + self.assertEqual(htmlize("http://www.google.com/"), '

http://www.google.com/

', "linkify didn't work") + self.assertNotIn(""), "clean didn't work") + self.assertIn("
    ", htmlize("- item 1\n- item 2\n"), "markdown didn't work") diff --git a/minent/urls.py b/minent/urls.py index d933ad7..e2ef349 100644 --- a/minent/urls.py +++ b/minent/urls.py @@ -30,14 +30,24 @@ ## Imports ########################################################################## -from django.conf.urls import url +from django.conf.urls import patterns, url, include from django.contrib import admin +from django.views.generic import TemplateView + +from minent.views import * ########################################################################## ## Minimum Entropy URL Patterns ########################################################################## -urlpatterns = [ +urlpatterns = patterns('', + ## Admin site + (r'^grappelli/', include('grappelli.urls')), url(r'^admin/', admin.site.urls), -] + + ## Static pages + url(r'^$', SplashPage.as_view(), name='home'), + url(r'^terms/$', TemplateView.as_view(template_name='site/legal/terms.html'), name='terms'), + url(r'^privacy/$', TemplateView.as_view(template_name='site/legal/privacy.html'), name='privacy'), +) diff --git a/minent/utils.py b/minent/utils.py new file mode 100644 index 0000000..a27e10f --- /dev/null +++ b/minent/utils.py @@ -0,0 +1,160 @@ +# kyudo.utils +# Project level utilities +# +# Author: Benjamin Bengfort +# Created: Thu Oct 23 14:09:04 2014 -0400 +# +# Copyright (C) 2014 Bengfort.com +# For license information, see LICENSE.txt +# +# ID: utils.py [] benjamin@bengfort.com $ + +""" +Project level utilities +""" + +########################################################################## +## Imports +########################################################################## + +import re +import time +import base64 +import bleach +import hashlib + +from functools import wraps +from markdown import markdown +from dateutil.relativedelta import relativedelta + +########################################################################## +## Utilities +########################################################################## + +## Nullable kwargs for models +nullable = { 'blank': True, 'null': True, 'default':None } + +## Not nullable kwargs for models +notnullable = { 'blank': False, 'null': False } + +########################################################################## +## Helper functions +########################################################################## + +def normalize(text): + """ + Normalizes the text by removing all punctuation and spaces as well as + making the string completely lowercase. + """ + return re.sub(r'[^a-z0-9]+', '', text.lower()) + + +def signature(text): + """ + This helper method normalizes text and takes the SHA1 hash of it, + returning the base64 encoded result. The normalization method includes + the removal of punctuation and white space as well as making the case + completely lowercase. These signatures will help us discover textual + similarities between questions. + """ + text = normalize(text).encode('utf-8') + return base64.b64encode(hashlib.sha1(text).digest()) + + +def htmlize(text): + """ + This helper method renders Markdown then uses Bleach to sanitize it as + well as convert all links to actual links. + """ + text = bleach.clean(text, strip=True) # Clean the text by stripping bad HTML tags + text = markdown(text) # Convert the markdown to HTML + text = bleach.linkify(text) # Add links from the text and add nofollow to existing links + + return text + + +########################################################################## +## Memoization +########################################################################## + +def memoized(fget): + """ + Return a property attribute for new-style classes that only calls its + getter on the first access. The result is stored and on subsequent + accesses is returned, preventing the need to call the getter any more. + + https://github.com/estebistec/python-memoized-property + """ + attr_name = '_{0}'.format(fget.__name__) + + @wraps(fget) + def fget_memoized(self): + if not hasattr(self, attr_name): + setattr(self, attr_name, fget(self)) + return getattr(self, attr_name) + + return property(fget_memoized) + + +########################################################################## +## Timer functions +########################################################################## + +class Timer(object): + """ + A context object timer. Usage: + >>> with Timer() as timer: + ... do_something() + >>> print timer.interval + """ + + def __init__(self, wall_clock=True): + """ + If wall_clock is True then use time.time() to get the number of + actually elapsed seconds. If wall_clock is False, use time.clock to + get the process time instead. + """ + self.wall_clock = wall_clock + self.time = time.time if wall_clock else time.clock + + def __enter__(self): + self.start = self.time() + return self + + def __exit__(self, type, value, tb): + self.finish = self.time() + self.interval = self.finish - self.start + + def __str__(self): + return humanizedelta(seconds=self.interval) + + +def timeit(func, wall_clock=True): + """ + Returns the number of seconds that a function took along with the result + """ + @wraps(func) + def timer_wrapper(*args, **kwargs): + """ + Inner function that uses the Timer context object + """ + with Timer(wall_clock) as timer: + result = func(*args, **kwargs) + + return result, timer + return timer_wrapper + + +def humanizedelta(*args, **kwargs): + """ + Wrapper around dateutil.relativedelta (same construtor args) and returns + a humanized string representing the detla in a meaningful way. + """ + delta = relativedelta(*args, **kwargs) + attrs = ('years', 'months', 'days', 'hours', 'minutes', 'seconds') + parts = [ + '%d %s' % (getattr(delta, attr), getattr(delta, attr) > 1 and attr or attr[:-1]) + for attr in attrs if getattr(delta, attr) + ] + + return " ".join(parts) diff --git a/minent/views.py b/minent/views.py new file mode 100644 index 0000000..ea83898 --- /dev/null +++ b/minent/views.py @@ -0,0 +1,85 @@ +# minent.views +# Views for the project and application that don't require models +# +# Author: Benjamin Bengfort +# Created: Tue Jul 05 14:53:03 2016 -0400 +# +# Copyright (C) 2016 District Data Labs +# For license information, see LICENSE.txt +# +# ID: views.py [] benjamin@bengfort.com $ + +""" +Views for the project and application that don't require models +""" + +########################################################################## +## Imports +########################################################################## + +import minent + +from datetime import datetime +from django.shortcuts import redirect +# from users.mixins import LoginRequired +from django.views.generic import TemplateView + +# from rest_framework import viewsets +# from rest_framework.response import Response +# from rest_framework.permissions import AllowAny + + +########################################################################## +## Application Views +########################################################################## + +class SplashPage(TemplateView): + """ + Main splash page for the app. Although this is essentially a simple + webpage with no need for extra context, this view does check if the + user is logged in, and if so, immediately redirects them to the app. + """ + + template_name = "site/index.html" + + def dispatch(self, request, *args, **kwargs): + """ + If a user is authenticated, redirect to the Application, otherwise + serve normal template view as expected. + """ + # if request.user.is_authenticated(): + # return redirect('app-root', permanent=False) + return super(SplashPage, self).dispatch(request, *args, **kwargs) + + +# class WebAppView(LoginRequired, TemplateView): +# """ +# Authenticated web application view that serves all context and content +# to kick off the Backbone front-end application. +# """ +# +# template_name = "app/index.html" +# +# def get_context_data(self, **kwargs): +# context = super(WebAppView, self).get_context_data(**kwargs) +# context['question_list'] = Question.objects.order_by('-modified') +# return context + + +########################################################################## +## API Views for this application +########################################################################## + +# class HeartbeatViewSet(viewsets.ViewSet): +# """ +# Endpoint for heartbeat checking, including the status and version. +# """ +# +# permission_classes = (AllowAny,) +# +# def list(self, request): +# return Response({ +# "status": "ok", +# "version": kyudo.get_version(), +# "timestamp": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ"), +# }) From 6ef3572b5463229660f5b442a94bae2dec12b6aa Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Tue, 5 Jul 2016 17:58:10 -0400 Subject: [PATCH 04/12] javascript updates --- minent/assets/js/app/main.js | 2 +- minent/assets/js/app/models/fugato.js | 6 +++--- minent/assets/js/config/require.js | 6 +++--- minent/assets/js/utils/ask.js | 6 +++--- minent/assets/js/utils/hotkeys.js | 8 ++++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/minent/assets/js/app/main.js b/minent/assets/js/app/main.js index 1b2fcef..2e47fae 100644 --- a/minent/assets/js/app/main.js +++ b/minent/assets/js/app/main.js @@ -1,5 +1,5 @@ /* - * Main entry point to the Kyudo application + * Main entry point to the Minimum Entropy application */ define([ diff --git a/minent/assets/js/app/models/fugato.js b/minent/assets/js/app/models/fugato.js index 93039af..181a557 100644 --- a/minent/assets/js/app/models/fugato.js +++ b/minent/assets/js/app/models/fugato.js @@ -2,13 +2,13 @@ * app/models/fugato.js * Models for Fugato (Questions and Answers) * - * Author: Benjamin Bengfort + * Author: Benjamin Bengfort * Created: Thu Oct 30 13:43:41 2014 -0400 * - * Copyright (C) 2014 University of Maryland + * Copyright (C) 2014 District Data Labs * For license information, see LICENSE.txt * - * ID: fugato.js [] bengfort@cs.umd.edu $ + * ID: fugato.js [] benjamin@bengfort.com $ */ // JS Hint directives and strict mode diff --git a/minent/assets/js/config/require.js b/minent/assets/js/config/require.js index 839a88f..35c487b 100644 --- a/minent/assets/js/config/require.js +++ b/minent/assets/js/config/require.js @@ -2,13 +2,13 @@ * config/require.js * Configuration for Require.js * - * Copyright (C) 2014 University of Maryland + * Copyright (C) 2016 District Data Labs * For license information, see LICENSE.txt * - * Author: Benjamin Bengfort + * Author: Benjamin Bengfort * Created: Wed Jan 22 23:52:24 2014 -0500 * - * ID: require.js [] bengfort@cs.umd.edu $ + * ID: require.js [] benjamin@bengfort.com $ */ requirejs.config({ diff --git a/minent/assets/js/utils/ask.js b/minent/assets/js/utils/ask.js index a064854..03e9146 100644 --- a/minent/assets/js/utils/ask.js +++ b/minent/assets/js/utils/ask.js @@ -2,13 +2,13 @@ * utils/ask.js * Javascript that runs the ask question dialogs * - * Copyright (C) 2014 University of Maryland + * Copyright (C) 2016 District Data Labs * For license information, see LICENSE.txt * - * Author: Benjamin Bengfort + * Author: Benjamin Bengfort * Created: Fri Jan 16 11:48:50 2015 -0500 * - * ID: hotkeys.js [] bengfort@cs.umd.edu $ + * ID: hotkeys.js [] benjamin@bengfort.com $ */ diff --git a/minent/assets/js/utils/hotkeys.js b/minent/assets/js/utils/hotkeys.js index cba4634..22c4469 100644 --- a/minent/assets/js/utils/hotkeys.js +++ b/minent/assets/js/utils/hotkeys.js @@ -1,14 +1,14 @@ /** * utils/hotkeys.js - * Keyboard hotkeys for the Ronin App + * Keyboard hotkeys for the Maximum Entropy App * - * Copyright (C) 2014 University of Maryland + * Copyright (C) 2016 District Data Labs * For license information, see LICENSE.txt * - * Author: Benjamin Bengfort + * Author: Benjamin Bengfort * Created: Wed Jan 22 23:52:24 2014 -0500 * - * ID: hotkeys.js [] bengfort@cs.umd.edu $ + * ID: hotkeys.js [] benjamin@bengfort.com $ */ From 87d9d64e15fdca9ff6b6c3f57c71260f23926697 Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort Date: Tue, 5 Jul 2016 18:41:10 -0400 Subject: [PATCH 05/12] social auth --- minent/assets/img/ddl-logo.png | Bin 0 -> 16593 bytes minent/settings/base.py | 24 +++ minent/templates/admin/login.html | 1 + minent/templates/components/navbar.html | 6 +- minent/templates/registration/logged_out.html | 8 + minent/templates/registration/login.html | 161 ++++++++++++++++++ .../registration/password_reset_complete.html | 8 + .../registration/password_reset_confirm.html | 57 +++++++ .../registration/password_reset_done.html | 31 ++++ .../registration/password_reset_form.html | 47 +++++ minent/templates/site/index.html | 4 +- minent/urls.py | 5 + requirements.txt | 9 + 13 files changed, 356 insertions(+), 5 deletions(-) create mode 100644 minent/assets/img/ddl-logo.png create mode 100644 minent/templates/admin/login.html create mode 100644 minent/templates/registration/logged_out.html create mode 100644 minent/templates/registration/login.html create mode 100644 minent/templates/registration/password_reset_complete.html create mode 100644 minent/templates/registration/password_reset_confirm.html create mode 100644 minent/templates/registration/password_reset_done.html create mode 100644 minent/templates/registration/password_reset_form.html diff --git a/minent/assets/img/ddl-logo.png b/minent/assets/img/ddl-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..39932540d2a0ae204483ae680a779bd36f96001e GIT binary patch literal 16593 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 - Minimum Entropy + Minimum Entropy beta