diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 596bf82d..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,150 +0,0 @@ -module.exports = function (grunt) { - 'use strict'; - - var jshintrc = '.jshintrc'; - var gruntFile = 'Gruntfile.js'; - var directoryPackage = './freetextresponse'; - var directoryPrivate = directoryPackage + '/private'; - var directoryPublic = directoryPackage + '/public'; - var directoryPrivateJsAll = directoryPrivate + '/**/*.js'; - var directoryPrivateLessAll = directoryPrivate + '/**/*.less'; - var directoryPublicCssAll = directoryPublic + '/**/*.css'; - - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - clean: [ - 'node_modules/', - '**/*.pyc', - ], - concat: { - options: { - separator: ';\n', - }, - jsView: { - src: [ - directoryPrivate + '/view.js', - ], - dest: directoryPublic + '/view.js', - }, - cssView: { - src: [ - directoryPrivate + '/view.less', - ], - dest: directoryPublic + '/view.less', - }, - }, - copy: { - images: { - files: [ - { - expand: true, - src: [ - directoryPrivate + '/**/*.jpg', - directoryPrivate + '/**/*.png', - directoryPrivate + '/**/*.gif', - ], - dest: directoryPublic + '/', - }, - ], - }, - }, - csslint: { - dist: { - src: [ - directoryPublicCssAll, - ], - }, - }, - cssmin: { - combine: { - files: [{ - footer: '\n', - expand: true, - cwd: directoryPublic, - src: [ - '*.css', - '!*.min.css', - ], - dest: directoryPublic, - ext: '.min.css', - }], - }, - }, - jshint: { - options: { - ignores: [ - ], - reporterOutput: '', - }, - dist: [ - gruntFile, - directoryPrivateJsAll, - ], - }, - less: { - view: { - options: { - sourceMap: true, - sourceMapFilename: 'freetextresponse/public/view.less.min.css.map', - outputSourceFiles: true, - cleancss: true, - compress: true, - }, - files: { - 'freetextresponse/public/view.less.min.css': - directoryPublic + '/view.less', - }, - }, - }, - uglify: { - options: { - footer: '\n', - sourceMap: true, - }, - combine: { - files: [{ - expand: true, - cwd: directoryPublic + '/', - src: [ - '*.js', - '!*.min.js', - ], - dest: directoryPublic + '/', - ext: '.js.min.js', - }], - }, - }, - watch: { - dist: { - files: [ - jshintrc, - gruntFile, - directoryPrivateJsAll, - directoryPrivateLessAll, - ], - tasks: [ - 'default', - ], - }, - }, - }); - - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-csslint'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-cssmin'); - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-less'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-clean'); - - grunt.registerTask('default', [ - 'jshint', - 'concat', - 'copy', - 'less', - 'csslint', - 'uglify', - ]); -}; diff --git a/freetextresponse/freetextresponse.py b/freetextresponse/freetextresponse.py index 65b2884d..a71febe0 100644 --- a/freetextresponse/freetextresponse.py +++ b/freetextresponse/freetextresponse.py @@ -2,6 +2,7 @@ This is the core logic for the Free-text Response XBlock """ from enum import Enum +import pkg_resources from django.db import IntegrityError from django.template.context import Context from django.template.loader import get_template @@ -18,11 +19,19 @@ from xblock.fragment import Fragment from xblock.validation import ValidationMessage from xblockutils.studio_editable import StudioEditableXBlockMixin -from .mixins import EnforceDueDates +from .mixins import EnforceDueDates, MissingDataFetcherMixin + + +MAX_RESPONSES = 3 @XBlock.needs("i18n") -class FreeTextResponse(EnforceDueDates, StudioEditableXBlockMixin, XBlock): +class FreeTextResponse( + EnforceDueDates, + MissingDataFetcherMixin, + StudioEditableXBlockMixin, + XBlock, +): # pylint: disable=too-many-ancestors, too-many-instance-attributes """ Enables instructors to create questions with free-text responses. @@ -86,6 +95,20 @@ def workbench_scenarios(): default=True, scope=Scope.settings, ) + display_other_student_responses = Boolean( + display_name=_('Display Other Student Responses'), + help=_( + 'This will display other student responses to the ' + 'student after they submit their response.' + ), + default=False, + scope=Scope.settings, + ) + displayable_answers = List( + default=[], + scope=Scope.user_state_summary, + help=_('System selected answers to give to students'), + ) display_name = String( display_name=_('Display Name'), help=_( @@ -212,6 +235,7 @@ def workbench_scenarios(): 'fullcredit_keyphrases', 'halfcredit_keyphrases', 'submitted_message', + 'display_other_student_responses', 'saved_message', ) @@ -269,6 +293,8 @@ def student_view(self, context={}): 'used_attempts_feedback': self._get_used_attempts_feedback(), 'visibility_class': self._get_indicator_visibility_class(), 'word_count_message': self._get_word_count_message(), + 'display_other_responses': self.display_other_student_responses, + 'other_responses': [], } ) template = get_template('freetextresponse_view.html') @@ -277,10 +303,10 @@ def student_view(self, context={}): context, initialize_js_func='FreeTextResponseView', additional_css=[ - 'public/view.less.min.css', + 'public/view.css', ], additional_js=[ - 'public/view.js.min.js', + 'public/view.js', ], ) return fragment @@ -564,6 +590,8 @@ def submit(self, data, suffix=''): # even if word count is invalid. self.count_attempts += 1 self._compute_score() + if self.display_other_student_responses and data.get('can_record_response'): + self.store_student_response() result = { 'status': 'success', 'problem_progress': self._get_problem_progress(), @@ -574,6 +602,8 @@ def submit(self, data, suffix=''): 'user_alert': self._get_user_alert( ignore_attempts=True, ), + 'other_responses': self.get_other_answers(self.get_student_id()), + 'display_other_responses': self.display_other_student_responses, 'visibility_class': self._get_indicator_visibility_class(), } return result @@ -599,6 +629,46 @@ def save_reponse(self, data, suffix=''): } return result + def store_student_response(self): + """ + Submit a student answer to the answer pool by appending the given + answer to the end of the list. + """ + # if the answer is wrong, do not display it + if self.score != Credit.full.value: + return + + student_id = self.get_student_id() + # remove any previous answers the student submitted + for index, response in enumerate(self.displayable_answers): + if response['student_id'] == student_id: + del self.displayable_answers[index] + break + + self.displayable_answers.append({ + 'student_id': student_id, + 'answer': self.student_answer, + }) + + # Want to store extra response so student can still see + # MAX_RESPONSES answers if their answer is in the pool. + self.displayable_answers = self.displayable_answers[-(MAX_RESPONSES+1):] + + def get_other_answers(self, student_id): + """ + Returns at most MAX_RESPONSES answers from the pool. + + Does not return answers the student had submitted. + """ + return_list = [ + response + for response in self.displayable_answers + if response['student_id'] != student_id + ] + + return_list = return_list[-(MAX_RESPONSES):] + return return_list + class Credit(Enum): # pylint: disable=too-few-public-methods diff --git a/freetextresponse/mixins.py b/freetextresponse/mixins.py index 344c5edf..6517bab9 100644 --- a/freetextresponse/mixins.py +++ b/freetextresponse/mixins.py @@ -31,3 +31,20 @@ def is_past_due(self): due = due + graceperiod return now > due return False + + +class MissingDataFetcherMixin(object): + """ + The mixin used for getting the student_id of the current user. + """ + def get_student_id(self): + """ + Get the student id. + """ + if hasattr(self, 'xmodule_runtime'): + student_id = self.xmodule_runtime.anonymous_student_id + # pylint:disable=E1101 + else: + student_id = self.scope_ids.user_id or '' + student_id = unicode(student_id) + return student_id diff --git a/freetextresponse/private/view.js b/freetextresponse/private/view.js deleted file mode 100644 index 6906331e..00000000 --- a/freetextresponse/private/view.js +++ /dev/null @@ -1,118 +0,0 @@ -function FreeTextResponseView(runtime, element) { - 'use strict'; - - var $ = window.jQuery; - var $element = $(element); - var $xblocksContainer = $('#seq_content'); - var buttonSubmit = $element.find('.check.Submit'); - var buttonSave = $element.find('.save'); - var usedAttemptsFeedback = $element.find('.action .used-attempts-feedback'); - var problemProgress = $element.find('.problem-progress'); - var submissionReceivedMessage = $element.find('.submission-received'); - var userAlertMessage = $element.find('.user_alert'); - var textareaStudentAnswer = $element.find('.student_answer'); - var textareaParent = textareaStudentAnswer.parent(); - - var url = runtime.handlerUrl(element, 'submit'); - var urlSave = runtime.handlerUrl(element, 'save_reponse'); - - var xblockId = $element.attr('data-usage-id'); - var cachedAnswerId = xblockId + '_cached_answer'; - var problemProgressId = xblockId + '_problem_progress'; - var usedAttemptsFeedbackId = xblockId + '_used_attempts_feedback'; - if ($xblocksContainer.data(cachedAnswerId) !== undefined) { - textareaStudentAnswer.text($xblocksContainer.data(cachedAnswerId)); - problemProgress.text($xblocksContainer.data(problemProgressId)); - usedAttemptsFeedback.text($xblocksContainer.data(usedAttemptsFeedbackId)); - } - - // POLYFILL notify if it does not exist. Like in the xblock workbench. - runtime.notify = runtime.notify || function () { - console.log('POLYFILL runtime.notify', arguments); - }; - - function setClassForTextAreaParent(new_class) { - textareaParent.removeClass('correct'); - textareaParent.removeClass('incorrect'); - textareaParent.removeClass('unanswered'); - textareaParent.addClass(new_class); - } - - buttonSubmit.on('click', function () { - buttonSubmit.text(buttonSubmit[0].dataset.checking); - runtime.notify('submit', { - message: 'Submitting...', - state: 'start' - }); - $.ajax(url, { - type: 'POST', - data: JSON.stringify({ - 'student_answer': $element.find('.student_answer').val() - }), - success: function buttonSubmitOnSuccess(response) { - usedAttemptsFeedback.text(response.used_attempts_feedback); - buttonSubmit.addClass(response.nodisplay_class); - problemProgress.text(response.problem_progress); - submissionReceivedMessage.text(response.submitted_message); - buttonSubmit.text(buttonSubmit[0].dataset.value); - userAlertMessage.text(response.user_alert); - buttonSave.addClass(response.nodisplay_class); - setClassForTextAreaParent(response.indicator_class); - - $xblocksContainer.data(cachedAnswerId, $element.find('.student_answer').val()); - $xblocksContainer.data(problemProgressId, response.problem_progress); - $xblocksContainer.data(usedAttemptsFeedbackId, response.used_attempts_feedback); - - runtime.notify('submit', { - state: 'end' - }); - }, - error: function buttonSubmitOnError() { - runtime.notify('error', {}); - } - }); - return false; - }); - - buttonSave.on('click', function () { - buttonSave.text(buttonSave[0].dataset.checking); - runtime.notify('save', { - message: 'Saving...', - state: 'start' - }); - $.ajax(urlSave, { - type: 'POST', - data: JSON.stringify({ - 'student_answer': $element.find('.student_answer').val() - }), - success: function buttonSaveOnSuccess(response) { - buttonSubmit.addClass(response.nodisplay_class); - buttonSave.addClass(response.nodisplay_class); - usedAttemptsFeedback.text(response.used_attempts_feedback); - problemProgress.text(response.problem_progress); - submissionReceivedMessage.text(response.submitted_message); - buttonSave.text(buttonSave[0].dataset.value); - userAlertMessage.text(response.user_alert); - - $xblocksContainer.data(cachedAnswerId, $element.find('.student_answer').val()); - $xblocksContainer.data(problemProgressId, response.problem_progress); - $xblocksContainer.data(usedAttemptsFeedbackId, response.used_attempts_feedback); - - runtime.notify('save', { - state: 'end' - }); - }, - error: function buttonSaveOnError() { - runtime.notify('error', {}); - } - }); - return false; - }); - - textareaStudentAnswer.on('keydown', function() { - // Reset Messages - submissionReceivedMessage.text(''); - userAlertMessage.text(''); - setClassForTextAreaParent('unanswered'); - }); -} diff --git a/freetextresponse/private/view.less b/freetextresponse/private/view.less deleted file mode 100644 index b36dd338..00000000 --- a/freetextresponse/private/view.less +++ /dev/null @@ -1,115 +0,0 @@ -.freetextresponse { - - .user_input { - - .status { - margin-left: 10px; - display: inline-block; - } - - &.unanswered .status { - width: 14px; - height: 14px; - background: url("images/unanswered-icon.png") center center no-repeat; - } - - &.correct .status { - width: 25px; - height: 20px; - background: url("images/correct-icon.png") center center no-repeat; - } - - &.incorrect .status { - width: 20px; - height: 20px; - background: url("images/incorrect-icon.png") center center no-repeat; - } - - .student_answer { - height:150px; - box-sizing:border-box; - border-radius:3px; - border:2px solid #e4e4e4; - min-width:160px; - width:85%; - } - - &.unanswered .student_answer { - border:2px solid #e4e4e4; - } - - &.correct .student_answer { - border:2px solid #1e9348; - } - - &.incorrect .student_answer { - border:2px solid #b20610; - } - - } - - @dark_grey: #666; - - .action { - margin-top: 20px; - - .save { - height: 40px; - vertical-align: middle; - font-weight: 600; - } - - .check { - height: 40px; - vertical-align: middle; - font-weight: 600; - } - - .used-attempts-feedback { - display: inline-block; - margin-top: 8px; - margin-left: 10px; - color: @dark_grey; - font-style: italic; - } - - .nodisplay{ - display: none; - } - } - - .problem-progress { - display: inline-block; - padding-left: 5px; - color: @dark_grey; - font-weight: 100; - font-size: 1em; - } - - .word-count-message { - display: inline-block; - padding-left: 5px; - color: @dark_grey; - font-weight: 100; - font-size: 1em; - } - - .hidden{ - visibility: hidden; - } - - .problem-header { - display: inline-block; - } - - .capa_alert { - margin-top: 10px; - padding: 8px 12px; - border: 1px solid #ebe8bf; - border-radius: 3px; - background: #fffcdd; - font-size: 0.9em; - } - - div:empty { display: none } -} diff --git a/freetextresponse/public/view.css b/freetextresponse/public/view.css new file mode 100644 index 00000000..b8ac5e6d --- /dev/null +++ b/freetextresponse/public/view.css @@ -0,0 +1,155 @@ +.freetextresponse .user_input .status { + margin-left: 10px; + display: inline-block; +} + +.freetextresponse .user_input.unanswered .status { + width: 14px; + height: 14px; + background: url("images/unanswered-icon.png") center center no-repeat; +} + +.freetextresponse .user_input.correct .status { + width: 25px; + height: 20px; + background: url("images/correct-icon.png") center center no-repeat; +} + +.freetextresponse .user_input.incorrect .status { + width: 20px; + height: 20px; + background: url("images/incorrect-icon.png") center center no-repeat; +} + +.freetextresponse .user_input .student_answer { + height: 150px; + box-sizing: border-box; + border-radius: 3px; + border: 2px solid #e4e4e4; + min-width: 160px; + width: 85%; +} + +.freetextresponse .user_input.unanswered .student_answer { + border: 2px solid #e4e4e4; +} + +.freetextresponse .user_input.correct .student_answer { + border: 2px solid #1e9348; +} + +.freetextresponse .user_input.incorrect .student_answer { + border: 2px solid #b20610; +} + +.freetextresponse .action { + margin-top: 20px; +} + +.freetextresponse .action .save { + height: 40px; + vertical-align: middle; + font-weight: 600; +} + +.freetextresponse .action .check { + height: 40px; + vertical-align: middle; + font-weight: 600; +} + +.freetextresponse .action .used-attempts-feedback { + display: inline-block; + margin-top: 8px; + margin-left: 10px; + color: #666; + font-style: italic; +} + +.freetextresponse .action .nodisplay{ + display: none; +} + +.freetextresponse .problem-progress { + display: inline-block; + padding-left: 5px; + color: #666; + font-weight: 100; + font-size: 1em; +} + +.freetextresponse .word-count-message { + display: inline-block; + padding-left: 5px; + color: #666; + font-weight: 100; + font-size: 1em; +} + +.freetextresponse .hidden { + visibility: hidden; +} + +.freetextresponse .problem-header { + display: inline-block; +} + +.freetextresponse .capa_alert { + margin-top: 10px; + padding: 8px 12px; + border: 1px solid #ebe8bf; + border-radius: 3px; + background: #fffcdd; + font-size: 0.9em; +} + +.freetextresponse .responses-box { + display: none; + margin-top: 10px; + padding: 10px; + background: #fbfbfb; + border: 1px solid #ddd; +} + +.freetextresponse .responses-title { + margin-left: 15px; + margin-top: 10px; +} + +.freetextresponse .hide-button { + padding: 0; + float: right; + box-shadow: none; + background: none; + border: none; + color: #069; + text-decoration: underline; + text-shadow: none; +} + +.freetextresponse .response-list { + list-style: none; +} + +.freetextresponse .other-student-responses { + display: inline-block; + width: 100%; + margin-top: 10px; + padding: 10px; + box-sizing: border-box; + border: 1px dashed #ddd; + color: #414141; + font-size: 0.8em; + text-align: left; + list-style-type: none; +} + +.freetextresponse .no-response { + font-size: 0.8em; + text-align: left; + list-style-type: none; +} + +.freetextresponse div:empty { + display: none; +} diff --git a/freetextresponse/public/view.js b/freetextresponse/public/view.js index 6906331e..aaf7f97b 100644 --- a/freetextresponse/public/view.js +++ b/freetextresponse/public/view.js @@ -4,6 +4,7 @@ function FreeTextResponseView(runtime, element) { var $ = window.jQuery; var $element = $(element); var $xblocksContainer = $('#seq_content'); + var buttonHide = $element.find('.hide-button'); var buttonSubmit = $element.find('.check.Submit'); var buttonSave = $element.find('.save'); var usedAttemptsFeedback = $element.find('.action .used-attempts-feedback'); @@ -12,7 +13,7 @@ function FreeTextResponseView(runtime, element) { var userAlertMessage = $element.find('.user_alert'); var textareaStudentAnswer = $element.find('.student_answer'); var textareaParent = textareaStudentAnswer.parent(); - + var responseList = $element.find('.response-list'); var url = runtime.handlerUrl(element, 'submit'); var urlSave = runtime.handlerUrl(element, 'save_reponse'); @@ -38,6 +39,10 @@ function FreeTextResponseView(runtime, element) { textareaParent.addClass(new_class); } + buttonHide.on('click', function () { + responseList.toggle(); + }); + buttonSubmit.on('click', function () { buttonSubmit.text(buttonSubmit[0].dataset.checking); runtime.notify('submit', { @@ -47,7 +52,8 @@ function FreeTextResponseView(runtime, element) { $.ajax(url, { type: 'POST', data: JSON.stringify({ - 'student_answer': $element.find('.student_answer').val() + 'student_answer': $element.find('.student_answer').val(), + 'can_record_response': $element.find('.messageCheckbox').prop('checked') }), success: function buttonSubmitOnSuccess(response) { usedAttemptsFeedback.text(response.used_attempts_feedback); @@ -57,12 +63,19 @@ function FreeTextResponseView(runtime, element) { buttonSubmit.text(buttonSubmit[0].dataset.value); userAlertMessage.text(response.user_alert); buttonSave.addClass(response.nodisplay_class); - setClassForTextAreaParent(response.indicator_class); + setClassForTextAreaParent(response.indicator_class); + if (!response.user_alert && response.display_other_responses) { + var responseHTML = get_student_responses_html(response.other_responses); + if (responseHTML) { + responseList.html(responseHTML); + } + $element.find('.responses-box').show(); + } $xblocksContainer.data(cachedAnswerId, $element.find('.student_answer').val()); $xblocksContainer.data(problemProgressId, response.problem_progress); $xblocksContainer.data(usedAttemptsFeedbackId, response.used_attempts_feedback); - + runtime.notify('submit', { state: 'end' }); @@ -74,6 +87,17 @@ function FreeTextResponseView(runtime, element) { return false; }); + function get_student_responses_html(responses) { + /* + Convert list of responses to a html string to add to the page + */ + var html = ''; + responses.forEach(function(item) { + html += '
  • ' + item.answer + '
  • '; + }); + return html; + } + buttonSave.on('click', function () { buttonSave.text(buttonSave[0].dataset.checking); runtime.notify('save', { diff --git a/freetextresponse/public/view.js.min.js b/freetextresponse/public/view.js.min.js deleted file mode 100644 index ade82971..00000000 --- a/freetextresponse/public/view.js.min.js +++ /dev/null @@ -1,2 +0,0 @@ -function FreeTextResponseView(a,b){"use strict";function c(a){n.removeClass("correct"),n.removeClass("incorrect"),n.removeClass("unanswered"),n.addClass(a)}var d=window.jQuery,e=d(b),f=d("#seq_content"),g=e.find(".check.Submit"),h=e.find(".save"),i=e.find(".action .used-attempts-feedback"),j=e.find(".problem-progress"),k=e.find(".submission-received"),l=e.find(".user_alert"),m=e.find(".student_answer"),n=m.parent(),o=a.handlerUrl(b,"submit"),p=a.handlerUrl(b,"save_reponse"),q=e.attr("data-usage-id"),r=q+"_cached_answer",s=q+"_problem_progress",t=q+"_used_attempts_feedback";void 0!==f.data(r)&&(m.text(f.data(r)),j.text(f.data(s)),i.text(f.data(t))),a.notify=a.notify||function(){console.log("POLYFILL runtime.notify",arguments)},g.on("click",function(){return g.text(g[0].dataset.checking),a.notify("submit",{message:"Submitting...",state:"start"}),d.ajax(o,{type:"POST",data:JSON.stringify({student_answer:e.find(".student_answer").val()}),success:function(b){i.text(b.used_attempts_feedback),g.addClass(b.nodisplay_class),j.text(b.problem_progress),k.text(b.submitted_message),g.text(g[0].dataset.value),l.text(b.user_alert),h.addClass(b.nodisplay_class),c(b.indicator_class),f.data(r,e.find(".student_answer").val()),f.data(s,b.problem_progress),f.data(t,b.used_attempts_feedback),a.notify("submit",{state:"end"})},error:function(){a.notify("error",{})}}),!1}),h.on("click",function(){return h.text(h[0].dataset.checking),a.notify("save",{message:"Saving...",state:"start"}),d.ajax(p,{type:"POST",data:JSON.stringify({student_answer:e.find(".student_answer").val()}),success:function(b){g.addClass(b.nodisplay_class),h.addClass(b.nodisplay_class),i.text(b.used_attempts_feedback),j.text(b.problem_progress),k.text(b.submitted_message),h.text(h[0].dataset.value),l.text(b.user_alert),f.data(r,e.find(".student_answer").val()),f.data(s,b.problem_progress),f.data(t,b.used_attempts_feedback),a.notify("save",{state:"end"})},error:function(){a.notify("error",{})}}),!1}),m.on("keydown",function(){k.text(""),l.text(""),c("unanswered")})} -//# sourceMappingURL=view.js.min.js.map diff --git a/freetextresponse/public/view.js.min.js.map b/freetextresponse/public/view.js.min.js.map deleted file mode 100644 index 0a1455f2..00000000 --- a/freetextresponse/public/view.js.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"view.js.min.js","sources":["view.js"],"names":["FreeTextResponseView","runtime","element","setClassForTextAreaParent","new_class","textareaParent","removeClass","addClass","$","window","jQuery","$element","$xblocksContainer","buttonSubmit","find","buttonSave","usedAttemptsFeedback","problemProgress","submissionReceivedMessage","userAlertMessage","textareaStudentAnswer","parent","url","handlerUrl","urlSave","xblockId","attr","cachedAnswerId","problemProgressId","usedAttemptsFeedbackId","undefined","data","text","notify","console","log","arguments","on","dataset","checking","message","state","ajax","type","JSON","stringify","student_answer","val","success","response","used_attempts_feedback","nodisplay_class","problem_progress","submitted_message","value","user_alert","indicator_class","error"],"mappings":"AAAA,QAASA,sBAAqBC,EAASC,GACnC,YAgCA,SAASC,GAA0BC,GAC/BC,EAAeC,YAAY,WAC3BD,EAAeC,YAAY,aAC3BD,EAAeC,YAAY,cAC3BD,EAAeE,SAASH,GAlC5B,GAAII,GAAIC,OAAOC,OACXC,EAAWH,EAAEN,GACbU,EAAoBJ,EAAE,gBACtBK,EAAeF,EAASG,KAAK,iBAC7BC,EAAaJ,EAASG,KAAK,SAC3BE,EAAuBL,EAASG,KAAK,mCACrCG,EAAkBN,EAASG,KAAK,qBAChCI,EAA4BP,EAASG,KAAK,wBAC1CK,EAAmBR,EAASG,KAAK,eACjCM,EAAwBT,EAASG,KAAK,mBACtCT,EAAiBe,EAAsBC,SAEvCC,EAAMrB,EAAQsB,WAAWrB,EAAS,UAClCsB,EAAUvB,EAAQsB,WAAWrB,EAAS,gBAEtCuB,EAAWd,EAASe,KAAK,iBACzBC,EAAiBF,EAAW,iBAC5BG,EAAoBH,EAAW,oBAC/BI,EAAyBJ,EAAW,yBACOK,UAA3ClB,EAAkBmB,KAAKJ,KACvBP,EAAsBY,KAAKpB,EAAkBmB,KAAKJ,IAClDV,EAAgBe,KAAKpB,EAAkBmB,KAAKH,IAC5CZ,EAAqBgB,KAAKpB,EAAkBmB,KAAKF,KAIrD5B,EAAQgC,OAAShC,EAAQgC,QAAU,WAC/BC,QAAQC,IAAI,0BAA2BC,YAU3CvB,EAAawB,GAAG,QAAS,WAiCrB,MAhCAxB,GAAamB,KAAKnB,EAAa,GAAGyB,QAAQC,UAC1CtC,EAAQgC,OAAO,UACXO,QAAS,gBACTC,MAAO,UAEXjC,EAAEkC,KAAKpB,GACHqB,KAAM,OACNZ,KAAMa,KAAKC,WACPC,eAAkBnC,EAASG,KAAK,mBAAmBiC,QAEvDC,QAAS,SAA+BC,GACpCjC,EAAqBgB,KAAKiB,EAASC,wBACnCrC,EAAaN,SAAS0C,EAASE,iBAC/BlC,EAAgBe,KAAKiB,EAASG,kBAC9BlC,EAA0Bc,KAAKiB,EAASI,mBACxCxC,EAAamB,KAAKnB,EAAa,GAAGyB,QAAQgB,OAC1CnC,EAAiBa,KAAKiB,EAASM,YAC/BxC,EAAWR,SAAS0C,EAASE,iBAC7BhD,EAA0B8C,EAASO,iBAEnC5C,EAAkBmB,KAAKJ,EAAgBhB,EAASG,KAAK,mBAAmBiC,OACxEnC,EAAkBmB,KAAKH,EAAmBqB,EAASG,kBACnDxC,EAAkBmB,KAAKF,EAAwBoB,EAASC,wBAExDjD,EAAQgC,OAAO,UACXQ,MAAO,SAGfgB,MAAO,WACHxD,EAAQgC,OAAO,gBAGhB,IAGXlB,EAAWsB,GAAG,QAAS,WAgCnB,MA/BAtB,GAAWiB,KAAKjB,EAAW,GAAGuB,QAAQC,UACtCtC,EAAQgC,OAAO,QACXO,QAAS,YACTC,MAAO,UAEXjC,EAAEkC,KAAKlB,GACHmB,KAAM,OACNZ,KAAMa,KAAKC,WACPC,eAAkBnC,EAASG,KAAK,mBAAmBiC,QAEvDC,QAAS,SAA6BC,GAClCpC,EAAaN,SAAS0C,EAASE,iBAC/BpC,EAAWR,SAAS0C,EAASE,iBAC7BnC,EAAqBgB,KAAKiB,EAASC,wBACnCjC,EAAgBe,KAAKiB,EAASG,kBAC9BlC,EAA0Bc,KAAKiB,EAASI,mBACxCtC,EAAWiB,KAAKjB,EAAW,GAAGuB,QAAQgB,OACtCnC,EAAiBa,KAAKiB,EAASM,YAE/B3C,EAAkBmB,KAAKJ,EAAgBhB,EAASG,KAAK,mBAAmBiC,OACxEnC,EAAkBmB,KAAKH,EAAmBqB,EAASG,kBACnDxC,EAAkBmB,KAAKF,EAAwBoB,EAASC,wBAExDjD,EAAQgC,OAAO,QACXQ,MAAO,SAGfgB,MAAO,WACHxD,EAAQgC,OAAO,gBAGhB,IAGXb,EAAsBiB,GAAG,UAAW,WAEhCnB,EAA0Bc,KAAK,IAC/Bb,EAAiBa,KAAK,IACtB7B,EAA0B"} \ No newline at end of file diff --git a/freetextresponse/public/view.less b/freetextresponse/public/view.less deleted file mode 100644 index b36dd338..00000000 --- a/freetextresponse/public/view.less +++ /dev/null @@ -1,115 +0,0 @@ -.freetextresponse { - - .user_input { - - .status { - margin-left: 10px; - display: inline-block; - } - - &.unanswered .status { - width: 14px; - height: 14px; - background: url("images/unanswered-icon.png") center center no-repeat; - } - - &.correct .status { - width: 25px; - height: 20px; - background: url("images/correct-icon.png") center center no-repeat; - } - - &.incorrect .status { - width: 20px; - height: 20px; - background: url("images/incorrect-icon.png") center center no-repeat; - } - - .student_answer { - height:150px; - box-sizing:border-box; - border-radius:3px; - border:2px solid #e4e4e4; - min-width:160px; - width:85%; - } - - &.unanswered .student_answer { - border:2px solid #e4e4e4; - } - - &.correct .student_answer { - border:2px solid #1e9348; - } - - &.incorrect .student_answer { - border:2px solid #b20610; - } - - } - - @dark_grey: #666; - - .action { - margin-top: 20px; - - .save { - height: 40px; - vertical-align: middle; - font-weight: 600; - } - - .check { - height: 40px; - vertical-align: middle; - font-weight: 600; - } - - .used-attempts-feedback { - display: inline-block; - margin-top: 8px; - margin-left: 10px; - color: @dark_grey; - font-style: italic; - } - - .nodisplay{ - display: none; - } - } - - .problem-progress { - display: inline-block; - padding-left: 5px; - color: @dark_grey; - font-weight: 100; - font-size: 1em; - } - - .word-count-message { - display: inline-block; - padding-left: 5px; - color: @dark_grey; - font-weight: 100; - font-size: 1em; - } - - .hidden{ - visibility: hidden; - } - - .problem-header { - display: inline-block; - } - - .capa_alert { - margin-top: 10px; - padding: 8px 12px; - border: 1px solid #ebe8bf; - border-radius: 3px; - background: #fffcdd; - font-size: 0.9em; - } - - div:empty { display: none } -} diff --git a/freetextresponse/public/view.less.min.css b/freetextresponse/public/view.less.min.css deleted file mode 100644 index 7935a545..00000000 --- a/freetextresponse/public/view.less.min.css +++ /dev/null @@ -1 +0,0 @@ -.freetextresponse .user_input .status{margin-left:10px;display:inline-block}.freetextresponse .user_input.unanswered .status{width:14px;height:14px;background:url(images/unanswered-icon.png) center center no-repeat}.freetextresponse .user_input.correct .status{width:25px;height:20px;background:url(images/correct-icon.png) center center no-repeat}.freetextresponse .user_input.incorrect .status{width:20px;height:20px;background:url(images/incorrect-icon.png) center center no-repeat}.freetextresponse .user_input .student_answer{height:150px;box-sizing:border-box;border-radius:3px;border:2px solid #e4e4e4;min-width:160px;width:85%}.freetextresponse .user_input.unanswered .student_answer{border:2px solid #e4e4e4}.freetextresponse .user_input.correct .student_answer{border:2px solid #1e9348}.freetextresponse .user_input.incorrect .student_answer{border:2px solid #b20610}.freetextresponse .action{margin-top:20px}.freetextresponse .action .save{height:40px;vertical-align:middle;font-weight:600}.freetextresponse .action .check{height:40px;vertical-align:middle;font-weight:600}.freetextresponse .action .used-attempts-feedback{display:inline-block;margin-top:8px;margin-left:10px;color:#666;font-style:italic}.freetextresponse .action .nodisplay{display:none}.freetextresponse .problem-progress{display:inline-block;padding-left:5px;color:#666;font-weight:100;font-size:1em}.freetextresponse .word-count-message{display:inline-block;padding-left:5px;color:#666;font-weight:100;font-size:1em}.freetextresponse .hidden{visibility:hidden}.freetextresponse .problem-header{display:inline-block}.freetextresponse .capa_alert{margin-top:10px;padding:8px 12px;border:1px solid #ebe8bf;border-radius:3px;background:#fffcdd;font-size:.9em}.freetextresponse div:empty{display:none} \ No newline at end of file diff --git a/freetextresponse/public/view.less.min.css.map b/freetextresponse/public/view.less.min.css.map deleted file mode 100644 index 1b5091e8..00000000 --- a/freetextresponse/public/view.less.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["./freetextresponse/public/view.less"],"names":[],"mappings":"AAAA,iBAEE,YAEE,SACE,gBAAA,CACA,qBAGF,iBAPF,YAOG,WAAY,SACX,UAAA,CACA,WAAA,CACA,eAAgB,sDAGlB,iBAbF,YAaG,QAAS,SACR,UAAA,CACA,WAAA,CACA,eAAgB,mDAGlB,iBAnBF,YAmBG,UAAW,SACV,UAAA,CACA,WAAA,CACA,eAAgB,qDAxBtB,iBAEE,YAyBE,iBACE,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,wBAAA,CACA,eAAA,CACA,UAGF,iBAlCF,YAkCG,WAAY,iBACX,yBAGF,iBAtCF,YAsCG,QAAS,iBACR,yBAGF,iBA1CF,YA0CG,UAAW,iBACV,yBA7CN,iBAoDE,SACE,gBArDJ,iBAoDE,QAGE,OACE,WAAA,CACA,qBAAA,CACA,gBA1DN,iBAoDE,QASE,QACE,WAAA,CACA,qBAAA,CACA,gBAhEN,iBAoDE,QAeE,yBACE,oBAAA,CACA,cAAA,CACA,gBAAA,CACA,UAAA,CACA,kBAxEN,iBAoDE,QAuBE,YACE,aA5EN,iBAgFE,mBACE,oBAAA,CACA,gBAAA,CACA,UAAA,CACA,eAAA,CACA,cArFJ,iBAwFE,qBACE,oBAAA,CACA,gBAAA,CACA,UAAA,CACA,eAAA,CACA,cA7FJ,iBAgGE,SACE,kBAjGJ,iBAoGE,iBACE,qBArGJ,iBAwGE,aACE,eAAA,CACA,gBAAA,CACA,wBAAA,CACA,iBAAA,CACA,kBAAA,CACA,gBA9GJ,iBAiHE,IAAG,OAAS","sourcesContent":[".freetextresponse {\n\n .user_input {\n\n .status {\n margin-left: 10px;\n display: inline-block;\n }\n\n &.unanswered .status {\n width: 14px;\n height: 14px;\n background: url(\"images/unanswered-icon.png\") center center no-repeat;\n }\n\n &.correct .status {\n width: 25px;\n height: 20px;\n background: url(\"images/correct-icon.png\") center center no-repeat;\n }\n\n &.incorrect .status {\n width: 20px;\n height: 20px;\n background: url(\"images/incorrect-icon.png\") center center no-repeat;\n }\n\n .student_answer {\n height:150px;\n box-sizing:border-box;\n border-radius:3px;\n border:2px solid #e4e4e4;\n min-width:160px;\n width:85%;\n }\n\n &.unanswered .student_answer {\n border:2px solid #e4e4e4;\n }\n\n &.correct .student_answer {\n border:2px solid #1e9348;\n }\n\n &.incorrect .student_answer {\n border:2px solid #b20610;\n }\n\n }\n\n @dark_grey: #666;\n\n .action {\n margin-top: 20px;\n\n .save {\n height: 40px;\n vertical-align: middle;\n font-weight: 600;\n }\n\n .check {\n height: 40px;\n vertical-align: middle;\n font-weight: 600;\n }\n\n .used-attempts-feedback {\n display: inline-block;\n margin-top: 8px;\n margin-left: 10px;\n color: @dark_grey;\n font-style: italic;\n }\n\n .nodisplay{\n display: none;\n }\n }\n\n .problem-progress {\n display: inline-block;\n padding-left: 5px;\n color: @dark_grey;\n font-weight: 100;\n font-size: 1em;\n }\n\n .word-count-message {\n display: inline-block;\n padding-left: 5px;\n color: @dark_grey;\n font-weight: 100;\n font-size: 1em;\n }\n\n .hidden{\n visibility: hidden;\n }\n\n .problem-header {\n display: inline-block;\n }\n\n .capa_alert {\n margin-top: 10px;\n padding: 8px 12px;\n border: 1px solid #ebe8bf;\n border-radius: 3px;\n background: #fffcdd;\n font-size: 0.9em;\n }\n\n div:empty { display: none }\n}\n"]} \ No newline at end of file diff --git a/freetextresponse/templates/freetextresponse_view.html b/freetextresponse/templates/freetextresponse_view.html index bd63f654..a87ceaaf 100644 --- a/freetextresponse/templates/freetextresponse_view.html +++ b/freetextresponse/templates/freetextresponse_view.html @@ -10,6 +10,12 @@

    {{ display_name }}

    + {% if display_other_responses %} + + Allow my response to possibly be visible by other learners after + submitting their response +
    + {% endif %}
    {{ submitted_message }}
    {% if not is_past_due %} @@ -23,4 +29,13 @@

    {{ display_name }}

    {{ used_attempts_feedback }}
    {{ user_alert }}
    + {% if display_other_responses %} +
    + +

    Submissions by others

    + +
    + {% endif %} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..5b1a0e30 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2122 @@ +{ + "name": "xblock-free-text-response", + "version": "0.1.9", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "dev": true, + "requires": { + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" + }, + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", + "dev": true + } + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true, + "optional": true + }, + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true, + "optional": true + }, + "boom": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", + "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", + "dev": true, + "requires": { + "hoek": "0.9.x" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camel-case": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", + "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=", + "dev": true, + "requires": { + "sentence-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" + } + }, + "change-case": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.1.6.tgz", + "integrity": "sha1-UUryBRMVimj+fwDf9MMy1sKY0vk=", + "dev": true, + "requires": { + "camel-case": "^1.0.0", + "constant-case": "^1.0.0", + "dot-case": "^1.0.0", + "is-lower-case": "^1.0.0", + "is-upper-case": "^1.0.0", + "lower-case": "^1.0.0", + "param-case": "^1.0.0", + "pascal-case": "^1.0.0", + "path-case": "^1.0.0", + "sentence-case": "^1.0.0", + "snake-case": "^1.0.0", + "swap-case": "^1.0.0", + "title-case": "^1.0.0", + "upper-case": "^1.0.0", + "upper-case-first": "^1.0.0" + } + }, + "clean-css": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.2.23.tgz", + "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=", + "dev": true, + "requires": { + "commander": "2.2.x" + } + }, + "cli": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", + "integrity": "sha1-Aq1Eo4Cr8nraxebwzdewQ9dMU+M=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "~ 3.2.1" + }, + "dependencies": { + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "requires": { + "inherits": "2", + "minimatch": "0.3" + } + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "optional": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "commander": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.2.0.tgz", + "integrity": "sha1-F1rUuTF/P/YV8gHB5XIk9Vo+kd8=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "constant-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", + "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=", + "dev": true, + "requires": { + "snake-case": "^1.1.0", + "upper-case": "^1.1.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", + "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", + "dev": true, + "optional": true, + "requires": { + "boom": "0.4.x" + } + }, + "csslint": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/csslint/-/csslint-0.10.0.tgz", + "integrity": "sha1-OmoE51Zcjp0ZvrSXZ8fslug2WAU=", + "dev": true, + "requires": { + "parserlib": "~0.2.2" + } + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", + "dev": true, + "optional": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", + "dev": true + }, + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-equal": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz", + "integrity": "sha1-mWedO70EcVb81FDT0B7rkGhpHoM=", + "dev": true + }, + "defined": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", + "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", + "dev": true + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true, + "optional": true + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", + "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=", + "dev": true, + "requires": { + "sentence-case": "^1.1.2" + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "faye-websocket": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", + "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "dev": true, + "requires": { + "glob": "~3.2.9", + "lodash": "~2.4.1" + }, + "dependencies": { + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "requires": { + "inherits": "2", + "minimatch": "0.3" + } + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + } + } + }, + "forever-agent": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", + "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", + "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", + "dev": true, + "optional": true, + "requires": { + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime": "~1.2.11" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true, + "optional": true + } + } + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "~0.1.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + }, + "dependencies": { + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + } + } + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" + }, + "dependencies": { + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "dev": true, + "requires": { + "async": "~0.1.22", + "coffee-script": "~1.3.3", + "colors": "~0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.1.2", + "getobject": "~0.1.0", + "glob": "~3.1.21", + "grunt-legacy-log": "~0.1.0", + "grunt-legacy-util": "~0.2.0", + "hooker": "~0.2.3", + "iconv-lite": "~0.2.11", + "js-yaml": "~2.0.5", + "lodash": "~0.9.2", + "minimatch": "~0.2.12", + "nopt": "~1.0.10", + "rimraf": "~2.2.8", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + } + }, + "grunt-contrib-clean": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz", + "integrity": "sha1-9TLbpLghJnTHwBPhRr2mY4uQSPY=", + "dev": true, + "requires": { + "rimraf": "~2.2.1" + } + }, + "grunt-contrib-concat": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", + "integrity": "sha1-lTxu/f39LBB6uchQd/LUsk0xzUk=", + "dev": true, + "requires": { + "chalk": "^0.5.1", + "source-map": "^0.3.0" + } + }, + "grunt-contrib-copy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.6.0.tgz", + "integrity": "sha1-4Ydo6Mgud6I7LrpgN1SgFG7OB04=", + "dev": true, + "requires": { + "chalk": "~0.5.1" + } + }, + "grunt-contrib-csslint": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-csslint/-/grunt-contrib-csslint-0.3.1.tgz", + "integrity": "sha1-R/VWrK+2jZeEtR2T1O0VYFr3RTU=", + "dev": true, + "requires": { + "chalk": "~0.5.1", + "csslint": "~0.10.0", + "lodash": "~2.4.1" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "grunt-contrib-cssmin": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-0.10.0.tgz", + "integrity": "sha1-4F80HnU6lnSysQcCIP3LrCIHlBg=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "clean-css": "~2.2.0", + "maxmin": "~0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "grunt-contrib-htmlmin": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-0.3.0.tgz", + "integrity": "sha1-yWCAIEj2CZJenQ7xsGcJBLTFo/0=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "html-minifier": "~0.6.0", + "pretty-bytes": "~0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "grunt-contrib-jshint": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz", + "integrity": "sha1-V+vMyofo8yevZkXYo8WG1IReTYE=", + "dev": true, + "requires": { + "hooker": "~0.2.3", + "jshint": "~2.5.0" + } + }, + "grunt-contrib-less": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-0.11.4.tgz", + "integrity": "sha1-VmdHWsRRfzLKYjuaTYHWz0rtK1E=", + "dev": true, + "requires": { + "async": "^0.2.10", + "chalk": "^0.5.1", + "less": "^1.7.2", + "lodash": "^2.4.1", + "maxmin": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "gzip-size": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-0.1.1.tgz", + "integrity": "sha1-rjNIO2/IIk6DQilt4Qjvk3V/duA=", + "dev": true, + "requires": { + "concat-stream": "^1.4.1", + "zlib-browserify": "^0.0.3" + } + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "maxmin": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-0.1.0.tgz", + "integrity": "sha1-ldgcUonjqdMPf8fcVZwCTlAwydA=", + "dev": true, + "requires": { + "chalk": "^0.4.0", + "gzip-size": "^0.1.0", + "pretty-bytes": "^0.1.0" + }, + "dependencies": { + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + } + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "grunt-contrib-uglify": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.6.0.tgz", + "integrity": "sha1-OicdTcTaumRpHQ0NCFUOxUp+wKs=", + "dev": true, + "requires": { + "chalk": "^0.5.1", + "lodash": "^2.4.1", + "maxmin": "^1.0.0", + "uglify-js": "^2.4.0", + "uri-path": "0.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "gzip-size": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", + "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "dev": true, + "requires": { + "browserify-zlib": "^0.1.4", + "concat-stream": "^1.4.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "maxmin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", + "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^1.0.0", + "pretty-bytes": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + } + } + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "grunt-contrib-watch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz", + "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=", + "dev": true, + "requires": { + "async": "~0.2.9", + "gaze": "~0.5.1", + "lodash": "~2.4.1", + "tiny-lr-fork": "0.0.5" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "dev": true, + "requires": { + "colors": "~0.6.2", + "grunt-legacy-log-utils": "~0.1.1", + "hooker": "~0.2.3", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "dev": true, + "requires": { + "colors": "~0.6.2", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "dev": true, + "requires": { + "async": "~0.1.22", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~0.9.2", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + } + }, + "gzip-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-0.2.0.tgz", + "integrity": "sha1-46KhkSBf5W7jJvXCcUNd+uz7Phw=", + "dev": true, + "requires": { + "browserify-zlib": "^0.1.4", + "concat-stream": "^1.4.1" + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "^0.2.0" + } + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "hawk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", + "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", + "dev": true, + "optional": true, + "requires": { + "boom": "0.4.x", + "cryptiles": "0.2.x", + "hoek": "0.9.x", + "sntp": "0.2.x" + } + }, + "hoek": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", + "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "html-minifier": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-0.6.9.tgz", + "integrity": "sha1-UQXcI29efhqLplHUq5gThvx6vlM=", + "dev": true, + "requires": { + "change-case": "2.1.x", + "clean-css": "2.2.x", + "cli": "0.6.x", + "relateurl": "0.2.x", + "uglify-js": "2.4.x" + } + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "optional": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "^0.1.5", + "ctype": "0.5.3" + } + }, + "iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "dev": true, + "requires": { + "lower-case": "^1.1.0" + } + }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "dev": true, + "requires": { + "upper-case": "^1.1.0" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "dev": true, + "requires": { + "argparse": "~ 0.1.11", + "esprima": "~ 1.0.2" + } + }, + "jshint": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.5.11.tgz", + "integrity": "sha1-4tlYWLuxqngwAQii6BCZ+wlWIuA=", + "dev": true, + "requires": { + "cli": "0.6.x", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "minimatch": "1.0.x", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x", + "underscore": "1.6.x" + }, + "dependencies": { + "minimatch": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", + "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "less": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/less/-/less-1.7.5.tgz", + "integrity": "sha1-TyIM9yiKJ+rKc5325ICKLUwNV1Y=", + "dev": true, + "requires": { + "clean-css": "2.2.x", + "graceful-fs": "~3.0.2", + "mime": "~1.2.11", + "mkdirp": "~0.5.0", + "request": "~2.40.0", + "source-map": "0.1.x" + }, + "dependencies": { + "graceful-fs": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "optional": true, + "requires": { + "natives": "^1.1.0" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "maxmin": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-0.2.2.tgz", + "integrity": "sha1-o2ztjMIuOrzRCM+3l6OktAJ1WT8=", + "dev": true, + "requires": { + "chalk": "^0.5.0", + "figures": "^1.0.1", + "gzip-size": "^0.2.0", + "pretty-bytes": "^0.1.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true, + "optional": true + }, + "mime-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", + "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2", + "sigmund": "~1.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true, + "optional": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "natives": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", + "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", + "dev": true, + "optional": true + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true, + "optional": true + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "noptify": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", + "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", + "dev": true, + "requires": { + "nopt": "~2.0.0" + }, + "dependencies": { + "nopt": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", + "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", + "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "param-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", + "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=", + "dev": true, + "requires": { + "sentence-case": "^1.1.2" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parserlib": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-0.2.5.tgz", + "integrity": "sha1-hZB92GBaoGq7PdKV1QuyuPpN0Rc=", + "dev": true + }, + "pascal-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", + "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=", + "dev": true, + "requires": { + "camel-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "path-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", + "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=", + "dev": true, + "requires": { + "sentence-case": "^1.1.2" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pretty-bytes": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-0.1.2.tgz", + "integrity": "sha1-zZApTVihyk6KXQ+5yCJZmIgazwA=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "psl": { + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", + "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", + "dev": true, + "optional": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-1.0.2.tgz", + "integrity": "sha1-UKk+K1r2aRwxvOpdrnjubqGQN2g=", + "dev": true, + "optional": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.40.0.tgz", + "integrity": "sha1-TdZw9pbx5uhC5mtLXoOTAaub62c=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.5.0", + "forever-agent": "~0.5.0", + "form-data": "~0.1.0", + "hawk": "1.1.1", + "http-signature": "~0.10.0", + "json-stringify-safe": "~5.0.0", + "mime-types": "~1.0.1", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.3.0", + "qs": "~1.0.0", + "stringstream": "~0.0.4", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.4.0" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "sentence-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", + "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "snake-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", + "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=", + "dev": true, + "requires": { + "sentence-case": "^1.1.2" + } + }, + "sntp": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", + "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", + "dev": true, + "optional": true, + "requires": { + "hoek": "0.9.x" + } + }, + "source-map": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", + "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "^0.2.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", + "dev": true, + "requires": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "tape": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-0.2.2.tgz", + "integrity": "sha1-ZMz6S37PSgBgAH5hcW1CR4FnFjc=", + "dev": true, + "requires": { + "deep-equal": "~0.0.0", + "defined": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "tiny-lr-fork": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", + "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=", + "dev": true, + "requires": { + "debug": "~0.7.0", + "faye-websocket": "~0.4.3", + "noptify": "~0.0.3", + "qs": "~0.5.2" + }, + "dependencies": { + "qs": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", + "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=", + "dev": true + } + } + }, + "title-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", + "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=", + "dev": true, + "requires": { + "sentence-case": "^1.1.1", + "upper-case": "^1.0.3" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "optional": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "dev": true, + "requires": { + "async": "~0.2.6", + "source-map": "0.1.34", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.5.4" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "underscore.string": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", + "dev": true, + "requires": { + "upper-case": "^1.1.1" + } + }, + "uri-path": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-0.0.2.tgz", + "integrity": "sha1-gD6wHy/rF5J9zOD2GH5yt19T9VQ=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "decamelize": "^1.0.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + }, + "zlib-browserify": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/zlib-browserify/-/zlib-browserify-0.0.3.tgz", + "integrity": "sha1-JAzNv9AgP6hCsTDe77FBQSLIzFA=", + "dev": true, + "requires": { + "tape": "~0.2.2" + } + } + } +} diff --git a/package.json b/package.json index aa85a62b..7c2aed8c 100644 --- a/package.json +++ b/package.json @@ -15,22 +15,6 @@ "bugs": { "url": "https://github.com/Stanford-Online/xblock-free-text-response/issues" }, - "scripts": { - "test": "grunt --verbose" - }, - "devDependencies": { - "grunt": "^0.4.5", - "grunt-contrib-jshint": "^0.10.0", - "grunt-contrib-concat": "^0.5.0", - "grunt-contrib-uglify": "^0.6.0", - "grunt-contrib-less": "^0.11.4", - "grunt-contrib-csslint": "^0.3.1", - "grunt-contrib-cssmin": "^0.10.0", - "grunt-contrib-watch": "^0.6.1", - "grunt-contrib-copy": "^0.6.0", - "grunt-contrib-clean": "^0.6.0", - "grunt-contrib-htmlmin": "^0.3.0" - }, "keywords": [ "openedx", "xblock"