diff --git a/app/assets/javascripts/mock-ajax.js b/app/assets/javascripts/mock-ajax.js index d622aad13..966033263 100644 --- a/app/assets/javascripts/mock-ajax.js +++ b/app/assets/javascripts/mock-ajax.js @@ -235,6 +235,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. this.at = function(index) { return requests[index]; }; + + this.all = function() { + return requests.slice(0); + }; this.filter = function(url_to_match) { if (requests.length == 0) return []; diff --git a/app/views/account/profile_view.coffee b/app/views/account/profile_view.coffee index e67b7a8fb..6f91cb5a6 100644 --- a/app/views/account/profile_view.coffee +++ b/app/views/account/profile_view.coffee @@ -254,7 +254,7 @@ module.exports = class ProfileView extends View link.icon = @iconForLink link for link in links context.profileLinks = _.sortBy links, (link) -> not link.icon # icons first if @sessions - context.sessions = (s.attributes for s in @sessions.models when (s.get('submitted') or s.get('level-id') is 'gridmancer')) + context.sessions = (s.attributes for s in @sessions.models when (s.get('submitted') or (s.get('levelID') is 'gridmancer') and s.get('code')?.thoktar?.plan?.length isnt 942)) # no default code context.sessions.sort (a, b) -> (b.playtime ? 0) - (a.playtime ? 0) else context.sessions = [] diff --git a/app/views/kinds/CocoView.coffee b/app/views/kinds/CocoView.coffee index 616fd7847..22e00f40e 100644 --- a/app/views/kinds/CocoView.coffee +++ b/app/views/kinds/CocoView.coffee @@ -150,12 +150,6 @@ module.exports = class CocoView extends Backbone.View @lastToggleModalCall = 0 toggleModal: (e) -> - if new Date().getTime() - CocoView.lastToggleModalCall < 5 - # Defensive move. This function has had a history of messing things up. - console.error 'toggleModal is getting called too often!' - return - CocoView.lastToggleModalCall = new Date().getTime() - if $(e.currentTarget).prop('target') is '_blank' return true # special handler for opening modals that are dynamically loaded, rather than static in the page. It works (or should work) like Bootstrap's modals, except use coco-modal for the data-toggle value. @@ -163,6 +157,7 @@ module.exports = class CocoView extends Backbone.View return unless elem.data('toggle') is 'coco-modal' target = elem.data('target') view = application.router.getView(target, '_modal') # could set up a system for loading cached modals, if told to + e.stopPropagation() @openModalView(view) openModalView: (modalView, softly=false) -> diff --git a/app/views/modal/model_modal.coffee b/app/views/modal/model_modal.coffee index 7424d6822..52c18b78d 100644 --- a/app/views/modal/model_modal.coffee +++ b/app/views/modal/model_modal.coffee @@ -54,18 +54,15 @@ module.exports = class ModelModal extends View container = $(e.target).closest('.model-container') model = _.find @models, id: container.data('model-id') treema = @modelTreemas[model.id] - changes = {} for key, val of treema.data when not _.isEqual val, model.get key console.log "Updating", key, "from", model.get(key), "to", val model.set key, val - changes[key] = val for key, val of model.attributes when treema.get(key) is undefined and not _.string.startsWith key, '_' console.log "Deleting", key, "which was", val, "but man, that ain't going to work, now is it?" - #changes[key] = undefined model.unset key if errors = model.validate() return console.warn model, "failed validation with errors:", errors - res = model.save changes, {patch: true} + return unless res = model.patch() res.error => return if @destroyed console.error model, "failed to save with error:", res.responseText diff --git a/server/users/user_handler.coffee b/server/users/user_handler.coffee index af797f614..6d4609d35 100644 --- a/server/users/user_handler.coffee +++ b/server/users/user_handler.coffee @@ -229,7 +229,7 @@ UserHandler = class UserHandler extends Handler getLevelSessionsForEmployer: (req, res, userID) -> return @sendUnauthorizedError(res) unless req.user._id+'' is userID or req.user.isAdmin() or ('employer' in req.user.get('permissions')) query = creator: userID, levelID: {$in: ['gridmancer', 'greed', 'dungeon-arena', 'brawlwood', 'gold-rush']} - projection = 'levelName levelID team playtime codeLanguage submitted' # code totalScore + projection = 'levelName levelID team playtime codeLanguage submitted code totalScore' LevelSession.find(query).select(projection).exec (err, documents) => return @sendDatabaseError(res, err) if err documents = (LevelSessionHandler.formatEntity(req, doc) for doc in documents) diff --git a/test/app/views/editor/level/EditorLevelView.spec.coffee b/test/app/views/editor/level/EditorLevelView.spec.coffee new file mode 100644 index 000000000..860fa826c --- /dev/null +++ b/test/app/views/editor/level/EditorLevelView.spec.coffee @@ -0,0 +1,14 @@ +EditorLevelView = require 'views/editor/level/edit' + +emptyLevel = {"_id":"53a0a1e2d9048dbc3a793c81","name":"Emptiness","description":"Tis nothing..","documentation":{"generalArticles":[],"specificArticles":[]},"scripts":[],"thangs":[],"systems":[],"victory":{},"version":{"minor":0,"major":0,"isLatestMajor":true,"isLatestMinor":true},"index":"5388f9ac9a904d0000d94f87","slug":"emptiness","creator":"5388f9ac9a904d0000d94f87","original":"53a0a1e2d9048dbc3a793c81","watchers":["5388f9ac9a904d0000d94f87"],"__v":0,"created":"2014-06-17T20:15:30.207Z","permissions":[{"access":"owner","target":"5388f9ac9a904d0000d94f87"}]} + +describe 'EditorLevelView', -> + describe 'revert button', -> + it 'opens just one modal when you click it', -> + view = new EditorLevelView({}, 'something') + request = jasmine.Ajax.requests.first() + request.response {status:200, responseText: JSON.stringify(emptyLevel)} + view.render() + spyOn(view, 'openModalView') + view.$el.find('#revert-button').click() + expect(view.openModalView.calls.count()).toBe(1) \ No newline at end of file