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 @@
+ {% 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 @@
{{ used_attempts_feedback }}
{{ user_alert }}
+ {% if display_other_responses %}
+
+
+
Submissions by others
+
+ - No responses to show at this time
+
+
+ {% 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"