Created
September 4, 2012 18:51
-
-
Save dmuskat/3624945 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| VIEWS.SPEC.COFFEE | |
| describe "views.Form: view for the page", -> | |
| formView = null | |
| formViewModel = null | |
| formModel = null | |
| formulas = null | |
| formulaIds = null | |
| referenceMenuModel = null | |
| glossaryofterms = null | |
| glossaryoftermsIds = null | |
| referenceMenuModel = null | |
| beforeEach -> | |
| ### | |
| if !window.currentForm | |
| window.currentForm = new models.Form | |
| window.currentForm =JSON.parse(window.sessionStorage.getItem 'form') | |
| formModel = new models.Form window.currentForm | |
| formViewModel = new views.models.Form form:formModel, currentItem:1 | |
| formView = new views.Form model:formViewModel | |
| ### | |
| # | |
| spyOn(window.currentForm, 'get').andCallFake (id) -> | |
| formModel = new models.Form window.currentForm | |
| spyOn(formModel, 'get').andCallFake (id) -> | |
| formViewModel = new views.models.Form form:formModel, currentItem:1 | |
| #spyOn(formViewModel, 'get').andCallFake (form) -> | |
| formView = new views.Form model:formViewModel | |
| # | |
| referenceMenuModel = new views.models.Menu htmlId:'reference-menu' | |
| formulas = [{ | |
| audiotext: "I am a formula" | |
| id: "11" | |
| image: "UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi" | |
| label: "Conversions" | |
| value: "conversions_8_PA2.gif" | |
| }, | |
| { | |
| audiotext: "I am also a formula" | |
| id: "12" | |
| image: "UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi" | |
| label: "Formulas" | |
| value: "formulas_8_PA2.gif" | |
| }, | |
| { | |
| audiotext: "I am another formula" | |
| id: "13" | |
| image: "UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi" | |
| label: "Cheatsheets" | |
| value: "cheatsheets_8_PA2.gif" | |
| }] | |
| formulaIds = ["11","13"] | |
| glossaryofterms = [{ | |
| audiotext: "I am a glossaryofterm" | |
| id: "44" | |
| image: "UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi" | |
| label: "Apples" | |
| value: "apples.gif" | |
| }, | |
| { | |
| audiotext: "I am aso a glossaryofterm" | |
| id: "55" | |
| image: "UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi" | |
| label: "Oranges" | |
| value: "oranges.gif" | |
| }, | |
| { | |
| audiotext: "I am aso a glossaryofterm" | |
| id: "66" | |
| image: "UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi" | |
| label: "Pears" | |
| value: "pears.gif" | |
| }] | |
| glossaryoftermsIds = ["44","55","66"] | |
| afterEach -> | |
| formView = null | |
| formulas = null | |
| formulaIds = null | |
| referenceMenuModel = null | |
| glossaryofterms = null | |
| glossaryoftermsIds = null | |
| referenceMenuModel = null | |
| it "should have a working test", -> | |
| expect(true).toBe(true) | |
| it "should locate an id array for formulas/glossaryofterms in a session", -> | |
| session = { | |
| ids: ["11","12"] | |
| } | |
| sessionIds = ["11","12"] | |
| foundIds = formView.locateReferenceSheetIds(session.ids,null) | |
| expect(foundIds).not.toBeNull | |
| expect(foundIds).toEqual(sessionIds) | |
| it "should locate an id array for formulas/glossaryofterms in an item", -> | |
| item = { | |
| ids: ["3","4","5"] | |
| } | |
| itemIds = ["3","4","5"] | |
| foundIds = formView.locateReferenceSheetIds(null, item.ids) | |
| expect(foundIds).not.toBeNull | |
| expect(foundIds).toEqual(itemIds) | |
| it """should return null when it can't locate an id array for | |
| formulas/glossaryofterms in neither a session or an item""", -> | |
| foundIds = formView.locateReferenceSheetIds(null, null) | |
| expect(foundIds).toBeNull | |
| it "should build a referenceMenuView for formulas", -> | |
| formView.buildReferenceSheets(formulaIds,formulas,referenceMenuModel) | |
| options = referenceMenuModel.attributes.options | |
| expect(options[0].get('label')).toEqual('Conversions') | |
| expect(options[1].get('label')).toEqual('Cheatsheets') | |
| it "should build a referenceMenuView for glossaryofterms", -> | |
| formView.buildReferenceSheets(glossaryoftermsIds, | |
| glossaryofterms, | |
| referenceMenuModel) | |
| options = referenceMenuModel.attributes.options | |
| expect(options[0].get('label')).toEqual('Apples') | |
| expect(options[1].get('label')).toEqual('Oranges') | |
| expect(options[2].get('label')).toEqual('Pears') | |
| it """should build a referenceMenuView for both | |
| formulas and glossaryofterms""", -> | |
| formView.buildReferenceSheets(formulaIds,formulas,referenceMenuModel) | |
| options = referenceMenuModel.attributes.options | |
| expect(options[0].get('label')).toEqual('Conversions') | |
| expect(options[1].get('label')).toEqual('Cheatsheets') | |
| formView.buildReferenceSheets(glossaryoftermsIds, | |
| glossaryofterms, | |
| referenceMenuModel) | |
| options = referenceMenuModel.attributes.options | |
| expect(options[2].get('label')).toEqual('Apples') | |
| expect(options[3].get('label')).toEqual('Oranges') | |
| expect(options[4].get('label')).toEqual('Pears') | |
| ====================================== | |
| MODELS.COFFEE | |
| class models.Form extends SchemaModel | |
| schema: "form" | |
| idAttribute: "drcid" | |
| urlRoot: "/drcETesting/v1/forms" | |
| class models.Item extends SchemaModel | |
| schema: "item" | |
| urlRoot: "/drcETesting/v1/items" | |
| idAttribute: "drcid" | |
| ====================================== | |
| VIEWS-MODEL.COFFEE | |
| class views.models.Form extends Backbone.Model | |
| initialize: (attributes) -> | |
| self = this | |
| form = self.get('form') | |
| proxyFormChange = -> | |
| form.on 'change', -> | |
| self.trigger.call(self, 'change', arguments...) | |
| @on 'change:form', proxyFormChange | |
| proxyFormChange() if form? | |
| @on 'change:currentItem', -> | |
| currentItem = self.get 'currentItem' | |
| window.router.navigate "items/#{currentItem}" if currentItem? | |
| responseBuffer.flush() | |
| if attributes.currentItem < 1 | |
| @set 'currentItem', 1 | |
| else if attributes.currentItem > @get('form').get('items').length | |
| @set 'currentItem', @get('form').get('items').length | |
| defaults: | |
| currentItem: 1 | |
| form: null | |
| validate: (attributes) -> | |
| if attributes.currentItem < 1 | |
| return "Current item may not be less than 1" | |
| else if attributes.currentItem > @get('form').get('items').length | |
| return "Current item may not be greater than the total number of items" | |
| next: -> | |
| currentItem = @get('currentItem') | |
| @set 'currentItem', currentItem + 1 | |
| previous: -> | |
| currentItem = @get('currentItem') | |
| @set 'currentItem', currentItem - 1 | |
| pause: -> | |
| window.navigate "pauseTest/" + @get('currentItem') | |
| getItem: (id) -> | |
| return new models.Item @get('form').get('items')[id - 1] | |
| getCurrentItem: -> | |
| return @getItem @get('currentItem') | |
| ====================================== | |
| VIEWS.COFFEE | |
| class views.Form extends Backbone.View | |
| initialize: -> | |
| @hide('#wrapper-reference') | |
| @model.on 'change', => @render() | |
| template: getTemplate 'template-item-page' | |
| events: | |
| 'click #bottom-toolbar-review-exit':'reviewAndExit' | |
| reviewAndExit: -> | |
| navigate "reviewItems" | |
| render: -> | |
| # | |
| # main Form view | |
| # | |
| context = | |
| testName: window.studentProfile.get('parts')[window.currentPart].label | |
| studentName: window.studentProfile.get('studentName') | |
| questionNumber: @model.get('currentItem') | |
| @$el.html(@template.render(context)) | |
| # | |
| # Item subview | |
| # | |
| itemView = new views.Item model:@model.getCurrentItem() | |
| itemView.render() | |
| @$("#item-container").append(itemView.$el) | |
| MathJax.Hub.Queue(["Typeset", MathJax.Hub, itemView.el]) | |
| # | |
| # Previous/Next and Pause buttons | |
| # | |
| @$("#bottom-toolbar-back").on 'click', => @model.previous() | |
| @$("#bottom-toolbar-next").on 'click', => @model.next() | |
| @$("#bottom-toolbar-pause").on 'click', => @model.pause() | |
| # | |
| # Build Tool Button Menus | |
| # | |
| @buildCalculatorMenu() | |
| @buildReferenceSheetMenu() | |
| buildCalculatorMenu: -> | |
| # | |
| # Calculator menu | |
| # | |
| calculatorButtonModel = new views.models.ToggleButton | |
| calculatorButton = new views.ToggleButton | |
| el: @$ '#top-toolbar-calc' | |
| model: calculatorButtonModel | |
| calculatorMenu = new views.models.Menu htmlId:'calculator-menu' | |
| calculatorMenu.addOption htmlId:'basic-calculator', label:'Basic' | |
| calculatorMenu.addOption htmlId:'scientific-calculator', label:'Scientific' | |
| calculatorMenuView = new views.Menu model:calculatorMenu | |
| calculatorMenuView.render() | |
| basicCalculatorPopup = new views.BasicCalculator | |
| calculatorMenuView.on 'menuOptionSelected', (option) -> | |
| calculatorButtonModel.set 'state', 'inactive' | |
| if option.get('htmlId') is 'basic-calculator' | |
| basicCalculatorPopup.show() | |
| @$("#wrapper-calc").append(calculatorMenuView.$el) | |
| calculatorButtonModel.on 'activate', -> calculatorMenuView.show() | |
| calculatorButtonModel.on 'deactivate', -> calculatorMenuView.hide() | |
| buildReferenceSheetMenu: -> | |
| # | |
| # Reference Sheet Menu | |
| # | |
| referenceButtonModel = new views.models.ToggleButton | |
| referenceButton = new views.ToggleButton | |
| el: @$ '#top-toolbar-reference' | |
| model: referenceButtonModel | |
| if window.currentForm.form | |
| form = window.currentForm.form | |
| else | |
| form = currentForm.get('form') | |
| session = form.sessions[0] | |
| idx = @model.get('currentItem') | |
| item = @model.attributes.form.attributes.items[idx-1] | |
| formulaIds = @locateReferenceSheetIds(session.formulaIds, item.formulaIds) | |
| glossaryoftermsIds = @locateReferenceSheetIds(session.glossaryoftermsIds, item.glossaryoftermsIds) | |
| if not formulaIds? and not glossaryoftermsIds? | |
| @hide('#wrapper-reference') | |
| return | |
| @show('#wrapper-reference') | |
| referenceMenuModel = new views.models.Menu htmlId:'reference-menu' | |
| if formulaIds? | |
| @buildReferenceSheets(formulaIds, session.formulas, referenceMenuModel) | |
| if glossaryoftermsIds? | |
| @buildReferenceSheets(glossaryoftermsIds, session.glossaryofterms, referenceMenuModel) | |
| referenceMenuView = new views.Menu model:referenceMenuModel | |
| referenceMenuView.on 'menuOptionSelected', (option) -> | |
| referenceButtonModel.set 'state', 'inactive' | |
| rPopup = views.ReferenceSheet.get(option.get('htmlId')) | |
| rPopup.show() | |
| referenceMenuView.render() | |
| @$("#wrapper-reference").append(referenceMenuView.$el) | |
| referenceButtonModel.on 'activate', -> referenceMenuView.show() | |
| referenceButtonModel.on 'deactivate', -> referenceMenuView.hide() | |
| locateReferenceSheetIds: (sessionIds, itemIds) -> | |
| if sessionIds? | |
| return sessionIds | |
| if itemIds? | |
| return itemIds | |
| return null | |
| buildReferenceSheets: (idArray, contentArray, referenceMenuModel) -> | |
| for id in idArray | |
| for content in contentArray | |
| if content.id is id | |
| referenceMenuModel.addOption | |
| htmlId: content.label + content.id | |
| label: content.label | |
| referenceSheetModel = new views.models.ReferenceSheet content | |
| referenceSheetModel.set('htmlId', content.label + content.id) | |
| referenceSheetPopup = new views.ReferenceSheet | |
| model: referenceSheetModel | |
| hide: (element)-> | |
| @$(element).css('visibility', 'hidden'); | |
| show: (element)-> | |
| @$(element).css('visibility', 'visible'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment