From bbadedbee8309dc929d666972d5cf423ad03bd5d Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Wed, 28 Sep 2016 13:27:46 -0700 Subject: [PATCH] Handle shareable levels when previewing them as a teacher --- app/locale/en.coffee | 2 ++ app/models/CourseInstance.coffee | 6 +++-- app/models/LevelSession.coffee | 2 ++ .../play/level/modal/progress-view.jade | 15 ++++++++----- .../play/level/tome/spell-top-bar-view.jade | 20 +++++++++++------ .../play/level/tome/SpellTopBarView.coffee | 1 + test/app/models/CourseInstance.spec.coffee | 22 +++++++++++++++++++ 7 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 test/app/models/CourseInstance.spec.coffee diff --git a/app/locale/en.coffee b/app/locale/en.coffee index 880d9c73561..aaf6615b20a 100644 --- a/app/locale/en.coffee +++ b/app/locale/en.coffee @@ -1528,6 +1528,8 @@ sharing: game: "Game" webpage: "Webpage" + your_students_preview: "Your students will click here to see their finished projects! Unavailable in teacher preview." + unavailable: "Link sharing not available in teacher preview." share_game: "Share This Game" share_web: "Share This Webpage" victory_share_prefix: "Share this link to invite your friends & family to" diff --git a/app/models/CourseInstance.coffee b/app/models/CourseInstance.coffee index 2fadebdca26..d2b40bd1791 100644 --- a/app/models/CourseInstance.coffee +++ b/app/models/CourseInstance.coffee @@ -13,11 +13,12 @@ module.exports = class CourseInstance extends CocoModel data: { userID: userID } } _.extend options, opts - @fetch options + jqxhr = @fetch options if userID is me.id unless me.get('courseInstances') me.set('courseInstances', []) me.get('courseInstances').push(@id) + return jqxhr addMembers: (userIDs, opts) -> options = { @@ -42,8 +43,9 @@ module.exports = class CourseInstance extends CocoModel data: { userID: userID } } _.extend options, opts - @fetch(options) + jqxhr = @fetch(options) me.set('courseInstances', _.without(me.get('courseInstances'), @id)) if userID is me.id + return jqxhr firstLevelURL: -> "/play/level/dungeons-of-kithgard?course=#{@get('courseID')}&course-instance=#{@id}" diff --git a/app/models/LevelSession.coffee b/app/models/LevelSession.coffee index 9e845fa78d6..205297ff1e2 100644 --- a/app/models/LevelSession.coffee +++ b/app/models/LevelSession.coffee @@ -106,3 +106,5 @@ module.exports = class LevelSession extends CocoModel console.log "Couldn't transpile!\n#{source}\n", e spellThang.aether.transpile '' spells + + isFake: -> @id is 'A Fake Session ID' diff --git a/app/templates/play/level/modal/progress-view.jade b/app/templates/play/level/modal/progress-view.jade index 35f331c8b66..381104a43e2 100644 --- a/app/templates/play/level/modal/progress-view.jade +++ b/app/templates/play/level/modal/progress-view.jade @@ -57,12 +57,15 @@ span(data-i18n='sharing.victory_course_share_web') span= ' ' span(data-i18n='sharing.victory_course_share_suffix') - .row - .col-sm-9 - input.text-h4.semibold.form-control.input-lg#share-level-input(value=view.shareURL) - .col-sm-3 - button#share-level-btn.btn.btn-lg.btn-success.btn-illustrated - span(data-i18n='sharing.copy_url') + if view.session.isFake() + .alert.alert-warning(data-i18n="sharing.unavailable") + else + .row + .col-sm-9 + input.text-h4.semibold.form-control.input-lg#share-level-input(value=view.shareURL) + .col-sm-3 + button#share-level-btn.btn.btn-lg.btn-success.btn-illustrated + span(data-i18n='sharing.copy_url') .row .col-sm-5.col-sm-offset-2 diff --git a/app/templates/play/level/tome/spell-top-bar-view.jade b/app/templates/play/level/tome/spell-top-bar-view.jade index 2af252e1e98..525081cc5fe 100644 --- a/app/templates/play/level/tome/spell-top-bar-view.jade +++ b/app/templates/play/level/tome/spell-top-bar-view.jade @@ -26,12 +26,18 @@ span(data-i18n='web_dev.image_gallery_title') if view.options.level.get('shareable') - - var url = '/play/' + view.options.level.get('type') + '-level/' + view.options.level.get('slug') + '/' + view.options.session.id; - - if (view.options.courseID) url += '?course=' + view.options.courseID; - a.btn.btn-small.btn-illustrated(href=url) - if view.options.level.isType('game-dev') - span(data-i18n='sharing.game') - else - span(data-i18n='sharing.webpage') + - i18nName = view.options.level.isType('game-dev') ? 'sharing.game' : 'sharing.webpage' + if view.options.session.isFake() + button.btn.btn-small.btn-illustrated( + data-i18n=i18nName + data-toggle="popover" + data-placement="bottom" + data-content=translate('sharing.your_students_preview') + data-trigger="hover" + ) + else + - var url = '/play/' + view.options.level.get('type') + '-level/' + view.options.level.get('slug') + '/' + view.options.session.id; + - if (view.options.courseID) url += '?course=' + view.options.courseID; + a.btn.btn-small.btn-illustrated(href=url, data-i18n=i18nName) .clearfix diff --git a/app/views/play/level/tome/SpellTopBarView.coffee b/app/views/play/level/tome/SpellTopBarView.coffee index a992c086512..d0361b4796e 100644 --- a/app/views/play/level/tome/SpellTopBarView.coffee +++ b/app/views/play/level/tome/SpellTopBarView.coffee @@ -40,6 +40,7 @@ module.exports = class SpellTopBarView extends CocoView afterRender: -> super() @attachTransitionEventListener() + @$('[data-toggle="popover"]').popover() onDisableControls: (e) -> @toggleControls e, false onEnableControls: (e) -> @toggleControls e, true diff --git a/test/app/models/CourseInstance.spec.coffee b/test/app/models/CourseInstance.spec.coffee new file mode 100644 index 00000000000..5983251a06b --- /dev/null +++ b/test/app/models/CourseInstance.spec.coffee @@ -0,0 +1,22 @@ +CourseInstance = require 'models/CourseInstance' +factories = require 'test/app/factories' + +describe 'CourseInstance', -> + + beforeEach -> + @courseInstance = factories.makeCourseInstance() + + describe 'addMember(userID, opts)', -> + it 'returns a jqxhr', -> + res = @courseInstance.addMember('1234') + expect(res.readyState).toBe(1) + + describe 'addMembers(userIDs, opts)', -> + it 'returns a jqxhr', -> + res = @courseInstance.addMembers(['1234']) + expect(res.readyState).toBe(1) + + describe 'removeMember(userID, opts)', -> + it 'returns a jqxhr', -> + res = @courseInstance.removeMember('1234') + expect(res.readyState).toBe(1)