{"version":3,"sources":["pages/data/utility.js","components/dq-data-filter.js","pages/account/default.js","pages/account/edit.js","pages/account/externalloginconfirmation.js","pages/account/login.js","pages/account/referral.js","pages/account/register.js","pages/admin/index.js","pages/answers/create.js","pages/answers/delete.js","pages/answers/details.js","pages/answers/edit.js","pages/answers/index.js","pages/assignments/create.js","pages/assignments/default.js","pages/assignments/details.js","pages/assignments/edit.js","pages/assignments/student.js","pages/assignments/teacher.js","pages/collections/index.js","pages/constructs/index.js","pages/data/assignments.js","pages/data/default.js","pages/data/explanations.js","pages/data/index.js","pages/data/index2.js","pages/data/onecohortcomparesubjects.js","pages/data/onequestioncomparecohorts.js","pages/data/question.js","pages/data/questions.js","pages/data/quiz.js","pages/data/quizzes.js","pages/data/revision.js","pages/data/stream.js","pages/data/students.js","pages/data/subjects.js","pages/departments/default.js","pages/feedback/import.js","pages/feedback/studentstation.js","pages/feedback/teacherstation.js","pages/groups/create.js","pages/groups/default.js","pages/groups/index.js","pages/groups/join.js","pages/home/badges.js","pages/home/cookies.js","pages/home/dashboard.js","pages/home/default.js","pages/home/feedback.js","pages/home/halloffame.js","pages/home/index.js","pages/home/learn.js","pages/home/sowlanding.js","pages/home/styleguide.js","pages/landing/banner.js","pages/landing/cookie_banner.js","pages/landing/default.js","pages/landing/form.js","pages/landing/navi.js","pages/landing/particles_insights.js","pages/landing/particles_question.js","pages/landing/particles_teacher.js","pages/landing/scheme.js","pages/landing/splash.js","pages/licences/adminAssign.js","pages/licences/assign.js","pages/licences/index.js","pages/licences/transaction.js","pages/metrics/default.js","pages/orders/basket.js","pages/orders/index.js","pages/orders/pricePreview.js","pages/products/index.js","pages/questions/comments.js","pages/questions/create.js","pages/questions/default.js","pages/questions/details.js","pages/questions/edit.js","pages/questions/embed.js","pages/questions/go.js","pages/questions/import.js","pages/questions/index.js","pages/questions/moderate.js","pages/quizzes/collections.js","pages/quizzes/create.js","pages/quizzes/createbyquestionid.js","pages/quizzes/default.js","pages/quizzes/details.js","pages/quizzes/edit.js","pages/quizzes/embed.js","pages/quizzes/gcse.js","pages/quizzes/go.js","pages/quizzes/import.js","pages/quizzes/index.js","pages/quizzes/live.js","pages/quizzes/premium.js","pages/reports/index.js","pages/schools/default.js","pages/schools/search.js","pages/shared/notification.js","pages/streams/assign.js","pages/streams/create.js","pages/streams/default.js","pages/streams/edit.js","pages/streams/index.js","pages/students/create.js","pages/students/default.js","pages/students/import.js","pages/students/index.js","pages/subjects/default.js","pages/teachers/bulkCreate.js","pages/teachers/default.js","pages/teachers/index.js","pages/wonde/index.js","pages/yeargroups/default.js"],"names":["parseDate","data","date","string","Date","parseInt","exec","getDate","getMonth","getFullYear","getHours","getMinutes","getFilterDetailString","filter","result","IsFilteredByAgeRange","AgeRangeYoungest","AgeRangeOldest","GenderFilter","AttemptsFilter","toTimeAgo","dt","secs","getTime","days","Math","floor","ceil","getUrlFromFilter","url","userfilter","selectedcountry","selectedregion","selectedgroupid","selecteddepartmentid","selectedteacherid","selecteduserid","selectedschoolid","selectedassignmentid","StartDate","UrlFromDateString","EndDate","IsOnlyShowCompletedAttempts","IsFilteredByLiveQuiz","SelectedLiveQuizId","getFilterFromParams","params","country_region","split","IsFilteredByDateRange","DateStringFromUrl","extendParams","i","dateString","dateurl","replace","dateUrl","substring","dateTimeString","MM","toString","dd","hh","mm","String","prototype","insert","index","this","length","define","$","ko","moment","FilterValue","Value","observable","Text","DateFilterViewModel","self","userRole","isQuizPage","pageParas","pageName","quizId","schoolId","userFilterChoices","name","value","push","timeChoices","timeChoicesValue","subscribe","newValue","isDateCustom","ifSetDateRange","now","endDate","format","startDate","add","userFilterValue","filterClass","getClassList","getDepartmentList","getTeacherList","getStudentList","getCountryList","getAssignmentList","departmentFilter","departmentFilterValue","yearGroupFilter","yearGroupFilterValue","isYearGroupSelected","classFilter","classFilterValue","teacherFilter","teacherFilterValue","countryFilter","countryFilterValue","getRegionList","regionFilter","regionFilterValue","studentFilter","studentFilterValue","assignmentFilter","assignmentFilterValue","ifChooseLiveQuiz","getLiveQuizList","liveQuizFilter","liveQuizFilterValue","advancedFiltering","ifSetAgeRange","femaleSelected","maleSelected","isOnlyShowCompletedAttempts","currentdate","startDateString","endDateString","ageFrom","ageTo","genderFilter","genderFilterValue","attemptsFilter","attemptsFilterValue","addFunctions","departmentId","classId","getInitFilter","setFilter","hasCohort","applyFilter","getFilter","applyFilterButton","paramsChecking","showMine","toggleFemale","toggleMale","alert","getFilterChoiceByValue","filterChoices","UserFilter","SelectedCountry","SelectedRegion","SelectedGroupId","SelectedTeacherId","SelectedUserId","attempsFilterValue","AttempsFilter","classInsightClassFilter","classInsightStudentFilter","getGroupStudentList","departmetnInsightDepartmentFilter","departmetnInsightYearGroupFilter","getYeargroupList","departmetnInsightClassFilter","departmetnInsightTeacherFilter","getFilterForNewFilter","model","isfilteredbyyeargroup","selectedyeargroupid","ajax","dataType","async","success","countryname","type","JSON","stringify","datatype","processData","contentType","mappedTasks","map","item","groupId","month","year","bindingHandlers","initDateTimePicker","init","element","valueAccessor","datetimepicker","icons","time","up","down","utils","registerEventHandler","getElementsByTagName","domNodeDisposal","addDisposeCallback","update","unwrapObservable","current","Array","remove","from","to","rest","slice","apply","fadeVisible","visible","removeClass","addClass","minDate","maxDate","useCurrent","pickTime","viewMode","jQuery","fn","preventDoubleSubmission","on","e","$form","preventDefault","submit","event","crossroads","hasher","toastr","enums","AccountExternalLoginConfirmationViewModel","firstname","val","lastname","username","isCalculatingUsername","pages","Enum","page","picker","calculateUserName","addPageFunctions","changePage","teacher","setHash","student","stem","status","userName","error","initRouter","parseHash","newHash","oldHash","parse","addRoute","isFirstTime","initialized","changed","applyBindings","AccountLoginViewModel","viewmodel","returnUrl","ReturnUrl","hash","indexHash","location","href","indexOf","substr","formAction","pureComputed","encodeURIComponent","registerLink","externalLoginFormAction","ReferralViewModel","referralKey","questionsCreated","DateUploaded","Index","fromNow","socialMailto","document","protocol","hostname","email","encodeURI","socialFacebook","socialTwitter","message","socialGoogle","emailString","send","emailAddress","createQuestionButton","window","shareMailto","shareTwitter","shareFacebook","shareGoogle","tooltip","AccountRegisterViewModel","swal","title","text","showCancelButton","confirmButtonColor","confirmButtonText","closeOnConfirm","getElementById","joinBeforeDate","inactiveSinceDate","info","studentCount","schoolName","statusCode","bootstrap","changeSelectedGroup","groups","GroupId","html","StudentsCount","changeSelectedQuiz","quizzes","QuizId","QuizType","premiumTypeCode","IsUnlimited","Balance","Quizzes","Groups","click","ga","mixpanel","track","category","setMinDate","button","find","setTimeout","removeAttr","attr","change","isTouchDevice","DocumentTouch","popover","trigger","CollectionGroup","initNewCollectionQuiz","newCollectionQuiz","CollectionQuiz","QuizName","Sequence","collectionQuizs","editable","sortCollectionQuizs","sort","l","r","sequence","updateCollectionQuizSequences","collectionQuizId","arrayForEach","collectionQuiz","collectionGroupId","CollectionGroupId","Name","description","Description","cancel","collectionGroup","mapping","fromJS","original","edit","toJS","CollectionQuizs","mappedCollectionQuizs","observableArray","createCollectionQuiz","toJSON","updateCollectionQuiz","removeCollectionQuiz","CollectionQuizId","quizName","CollectionsViewModel","validation","decorateInputElement","errorElementClass","errorMessageClass","insertMessages","all","collections","collectionId","collectionDescription","collectionName","collectionSlug","subjects","subjectId","collectionGroups","newCollectionGroup","isNullOrWhiteSpace","str","createCollection","slug","clearErrors","CollectionId","displayErrors","errors","updateCollection","createCollectionGroup","initNewCollectionGroup","updateCollectionGroup","updateCollectionGroupSequences","sortCollectionGroups","removeCollectionGroup","clearCollection","appendTo","Key","parent","loadCollectionDetails","Slug","Subjects","SubjectId","mappedCollectionGroups","CollectionGroups","getAllCollections","getCollectionDetails","details","getSubjects","create","test","pathname","id","Filter","tabs","tab","scheme","currentFilter","questionId","schemes","schemeId","topicUnits","topicUnitId","filterByQuestion","filterByScheme","isUndefinedNullOrWhiteSpace","filterBySubject","onChangeScheme","newFilter","getSchemeIdFromHash","getTopicUnits","Scheme","TopicUnit","topicUnitQuizs","TopicUnitQuiz","topicUnitQuizId","Subject","nameWithNoConstructsQuestionsCount","noConstructsQuestionsCount","Question","imageURL","isSelected","constructs","Construct","tags","Tag","constructId","tagId","ConstructQuestion","QuestionTag","ConstructsViewModel","rootSubjectId","subjectsForConstructs","subjectIdForConstructs","constructSearchText","selectedConstruct","newConstructName","funFactForNewConstruct","selectedTag","newTagName","questions","sequences","selectedQuestions","computed","arrayFilter","questionsFiltered","constructsWithSearchText","searchText","toLowerCase","isShowConstructs","isShowNewConstruct","isShowNewTag","isShowQuestions","question","subject","selectSubjectForConstructs","addConstructToQuestions","questionIds","createConstruct","construct","createConstructQuestions","addTagToQuestions","createTag","tag","createQuestionTags","failModeration","moderation","selectTabScheme","getSchemes","selectTabQuestion","selectTabSubject","deleteConstructQuestion","responseJSON","modelState","key","hasOwnProperty","prop","lastIndexOf","deleteQuestionTag","selectScheme","updateQuestionsWithConstruct","includes","existing","isArray","updateQuestionsWithTag","addNewConstructToDropdown","splice","addNewTagToDropdown","getQuestionsBySubject","getQuestion","filterByTopicUnit","getQuestionsByTopicUnit","getConstructs","unselectAllQuestions","hashArray","getHashAsArray","uniqueSequences","v","a","b","initConstructsAndTags","getSubjectsForConstructs","getTags","unshift","StartInHalfWeeks","globalSequence","topicUnit","filterTopicUnitId","forEach","console","log","hideQuestionPager","copy","getQuestionsByQuizzes","quiz","pop","arrayPushAll","isChangingPage","skip","pageSize","updateQuestionPager","total","funFact","callback","totalPages","pagination","total_pages","current_page","tmpl","loadAssignmentsPage","pager","datafilter","startdate","enddate","isfilteredbydaterange","orderby","assignmentspage","assignments","assignemntHtml","assignment","not","d3","dataFilterProcessor","DataSubjectsViewModel","currentPage","QuestionOrderByChoices","StudentOrderByChoices","QuestionOrderBy","StudentOrderBy","userId","classpackage","departmentpackage","SchoolId","isShowFilter","currentFilterClass","cohorts","selectedCohortName","selectedSubject","selectedCohort","isStudentsLoaded","isQuestionsLoaded","selectedUserId","clickMode","isShowSubjects","isShowStudents","lowestList","highestList","detailsForStudents","rootSubject","selectedClassId","selectedClassName","selectedDepartmentId","selectedDepartmentName","currentParams","studentList","isSubjectLocked","generatingReports","summaryButtonText","updateSubjectInsights","zoomInToCurrentRoot","getQuestionsData","CohortDetails","getStudentsData","selectCohortShowBorder","isShowDots","select","getCurrentCohortColor","selectSubjectBorder","tempFilterClassValue","oldValue","clearData","showFilter","hashUrl","getHash","getCohortNameByUrl","cohort","FilterUrl","replaceHash","applyFilterFromOther","deleteCohort","filterUrl","currentHash","clearLock","clearLockSubjects","questionPageUrl","QuestionId","getPercentageString","percentage","isNaN","round","getPercentageFromCount","count","selectUserDot","getAnswerValueLabel","answerValue","fromCharCode","charCodeAt","bases","selectedCohortByCohortName","cohortName","findCohort","addStudentCohort","UserId","getStudentDetails","getStudentSubjectsData","showStudentExplanations","scrollToAnchor","selectSubjectByClickInsight","d","deleteSubject","addLockSubject","subjectInsight","studentInsight","classInsight","departmentInsight","enterSubjectInsight","topQuestionsAnchor","topSubjectsAnchor","changeClass","getAllAssignmentSummary","path","append","summaryButtonTexte","updateStudentPager","getCohortName","addCohort","getSubjectsData","replaceHashSilently","drawSunburst","SubjectAnswerCounts","updateLockedSubjects","node","findTreeNode","getTopSubjectList","highest","lowest","reputation","root","traversalSubjectTree","Children","leafNodes","MaxListLength","temp","threshold","max","Total","CorrectCount","reverse","found","orderBy","changingPage","loadQuestions","questionPages","students","studentPages","className","chosen","allow_single_deselect","width","anchor","target","animate","scrollTop","offset","top","tempList","lockSubjectNodes","getCohortNameFromCohortIndex","cohortIndex","getIndexFromCohortName","StudentAnswersForDot","j","StudentAnswers","AnswerValue","uniqueCohortName","getUniqueCohortName","existingCohortNames","newCohort","FilterDetailString","IsSetDateRange","DateRangeString","getDateRangeString","maxCohortIndex","processCohorts","deletedCohorts","addedCohorts","deleteCohortByUrl","removeSunburstByCohortName","removeCohortInfoByCohortName","div","sunburstIndex_cohortName","sunburstIndex_deleted","paths","highlightSubjectIds","removeAll","clearParams","removeBarCharBySubjectId","selectAll","drawDonut","percent","side","radius","thickness","color","scale","ordinal","range","arc","svg","outerRadius","innerRadius","pie","layout","g","enter","style","search_fuzzy","proResult","processFilterParams","notEmpty","filling","active","selectSubject","removeLockSubject","SubjectName","toPrecision","percentageString","parentId","ParentId","transition","duration","attrTween","arcTweenZoom","xd","interpolate","x","domain","dx","yd","y","yr","t","createVisualization","datum","partition","nodes","each","colors","mouseover","mouseleave","mousemove","totalSize","__data__","sequenceArray","getAncestors","temphighlightSubjectIds","union_arrays","subjectName","findSubjectPercentage","drawBarChart","pageX","pageY","hide","somethingLocked","container","diagram","last","stopPropagation","sqrt","children","drawSubjectBarchart","height","space","linear","chart","barWidth","min","barchart","PI","bsChecked","allBindingsAccessor","viewModel","bindingContext","newValueAccessor","unwrap","closest","donut","innerHTML","components","register","require","template","startAngle","endAngle","dy","c3","OneCohortCompareSubjectsViewModel","subjectIds","firstFilter","firstFilterValue","ifSetDateRage","ifSetAgeRage","ShowDataGrid","nameList","columnName","XData","YData","showPercentage","getJSON","constructColumnName","getData","addTableData","paintScatterChat","tempcolumn","k","StudentId","oneColumn","Id","generate","size","xs","columns","axis","label","tick","fit","dataFilter","paintPercentage","bar","ratio","padding","bottom","getPercentage","PercentageA","PercentageB","PercentageC","PercentageD","paintWithPercentage","unloadCohort","unload","ids","eq","QuestionViewModel","IsInit","IsAdvanced","countsPercentage","correctAnswer","CorrectAnswer","UserRole","CohortAnswerCounts","CohortAnswerCountsForChart","IndividualAnswers","CurrentCohortAnswers","SelectedCohortName","IfSelectedStudentCohort","OrderByChoices","OrderByChoicesWithLastName","OrderByChoicesWithoutLastName","AnswerFilterChoices","AnswerFilter","applyAnswerFilter","IfFilteredByReasonExist","OrderBy","likeAnswerButton","reportAnswerButton","ClearAllCohorts","getAnswerLabel","filterRecorder","removeFilterRecord","removeBarChartData","refreshBarChart","answerid","AnswerId","btn","IsLiked","Ratings","parentElement","previousElementSibling","getPageInfo","pageRecorder","answerfilter","getAnswerFilter","errorMessage","setCohortName","CohortQuestionAnswerCounts","ifStudentFilter","pageNum","IndividualAnswersPage","changeTotalPage","currentCohortName","DateAnswered","DateAnsweredString","getFilterByCohortName","answerFilter","replacePageData","loadIndividualAnswersPage","individualAnswers","tryName","num","paintBarChart","removedCohortName","loadCohort","load","parameters","paramsGroups","lastLength","previousParams","calDifference","deletedCohort","addedCohort","iPrevious","iCurrent","isSameCohort","params1","params2","updatePager","pageRecord","timeAgo","thisPage","hasCorhort","selector","selectUserDots","loadQuestionsPage","subjectid","agerangeoldest","agerangeyoungest","isfilteredbyagerange","genderfilter","questionspage","countPercentage","questionHtml","DotsHide","CountHide","PercentageHide","loadStudentsPage","studentspage","studentHtml","QuizViewModel","isIE","navigator","userAgent","match","isShowAllAttempts","ClassInsightLicence","DepartmentInsightLicence","assignmentId","AssignmentId","IsDemo","isShowAllAnswers","DotEnable","selectedAssignmentId","CohortQuizMarks","CurrentCohortDetails","CurrentCohortAnswerCounts","AllQuizSessionQuestions","QuizSessionStudentAnswers","StartedNotCompleted","NotStarted","NotCompleted","CompletedLate","showUpgradeInfo","isApplyFilter","reapplyFilter","countPercentageIsTriggeredByUserFlag","getCohortDetails","IsShowStudents","toggleShowAllAnswers","paintPercentageChartForOneCohort","paintCountChartForOneCohort","addToInstantQuiz","getCountPercentageDotIndex","CountA","CountB","CountC","CountD","getSelectedFilter","getImgTag","thumbnailUrl","exist","getSessionInfo","DateStarted","completeDate","DateCompleted","getStudentNameList","list","FirstName","LastName","addToFeedbackStation","downloadAllAttempts","backToAssignments","referrer","history","back","questionOrderBy","studentOrderBy","Attempts","QuizQuestionsAndAnswerCounts","IsInInstantQuiz","processDataForTable","QuizSessionStudentsAnswers","processDataForDots","addChartData","addCohortToCompareChart","filterRecord","chartState","DataFilter","tempRecorder","tempRecord","currentSelectedCohortName","chartCompareCohorts","chartOneCohort","exception","bestAttempts","numAttempts","attempt","o","bestAttemptSoFar","isBestAttempt","showAllAttempts","hideAllAttempts","answerReasons","flatList","userIdList","qs","QuestionAnswerReasons","ans","Answer","Reason","Tooltip","DisplayName","Selected","percentageCorrectForCompare","percentageCorrect","percentageWrong","countCorrect","countWrong","categories","CorrectPercentage","paintChart","addChartCohort","bindto","order","Wrong","wrongcolor","Correct","correctcolor","removeChartCohort","userid","loadQuizzesPage","quizzespage","quizHtml","RevisionViewModel","subjectSearch","revisions","Revisions","showedRevisions","searchForSubject","revisionLink","revision","relatedQuiz","getTimeAgo","date1","date2","trim","subjectCountLimit","ContentURL","revisionid","RevisionId","DateRevised","DateRetested","QuizLink","modal","StreamViewModel","isStreamLoaded","showMark","getStream","streamAssignmentId","loadStream","streamName","processStartDate","StreamStudentsAnswers","Percentage","Gender","showGender","Age","bindEnterToSearch","Mousetrap","unbind","bind","applyFilterAndSearch","gender","isSearch","ready","keydown","keyCode","isAdvanced","augmentCohortDetails","sunburstIndex","rect","exit","StationForStudentsViewModel","explanationOptions","activeQuestions","processedQuestions","archivedQuestions","isShowActiveQuestions","isShowProcessedQuestions","isShowArchivedQuestions","isActiveQuestionsLoaded","isProcessedQuestionsLoaded","isArchivedQuestionsLoaded","isAnswerable","isSubmitting","isShowReason","isShowExplanations","selectedExplanationOption","correct","selectedAnswer","reason","isGuess","followQuestionData","focus","closeReason","commit","setAnswer","showExplanations","enterQuestion","answerFeedbackId","showActiveQuestions","showProcessedQuestions","getProcessedQuestions","showArchivedQuestions","getArchivedQuestions","refresh","getMoreExplanations","answerLabel","like","deleteLike","setLike","clearQuestionData","getExplanations","toISOString","dateRead","followAnswer","FollowQuestionId","dateAnswered","AnswerFeedbackId","IsGuess","getActiveQuestions","getAnswerFeedback","q","FollowQuestionCorrectAnswer","setFeedbackRead","firstAnswerValue","secondAnswerValue","CorrectSkip","IsMoreCorrectExplanations","IsMoreFirstExplanations","IncorrectSkip","IsMoreIncorrectExplanations","IsMoreSecondExplanations","Explanations","CorrectExplanations","FirstExplanations","IncorrectExplanations","SecondExplanations","answerId","toggle","toggleValue","returnValue","toggleDomNodeCssClass","Group","code","StationForTeachersViewModel","answerIdHashIndex","selectedAnswerIds","answerIdFeedbacks","feedbackText","followQuestionId","currentFollowUpQuestionIndex","previewQuestionCount","currentFollowUpQuestion","toggleAnswersA","toggleAnswersB","toggleAnswersC","toggleAnswersD","isSetFollowUpQuestion","isShowFollowUpQuestion","selectedFeedbackQuestionId","similarQuestions","teacherId","isGroupsLoaded","isGroupIdInitiated","unSavedChanges","reloadFeedbackQuestions","answers","clearFollowUpQuestion","clearQuestion","feedbackQuestionId","leaveQuestion","selectAnswer","feedbackGiven","selectAnswersWithValue","getDateString","sendFeedback","isAnyAnswerSelected","saveFeedbackGroups","feedbackGroups","getFeedbackGroupsToSave","newFeedbackGroupsToSaveCount","isSaved","processedCount","fgIndex","feedback","answerIds","indexValue","newFeedbackGroups","markFeedbackGiven","getFollowUpQuestions","getFollowUpQuestion","confirmFollowQuestion","previewBackward","previewForward","archiveFeedback","completeFeedback","clearSelectedAnswers","downloadFeedbackReport","clearNewFeedbackGroups","newFeedbackGroupIndex","deselectAnswer","answer","getGroups","response","updateQuestionActivePager","updateQuestionProcessedPager","updateQuestionArchivedPager","getFeedbackQuestion","loadFeedbackQuestion","loadListPage","studentIndex","feedbackGroupId","firstName","lastName","answerFeedback","grep","feedbackGroup","displayName","displayNameAndReason","percentageA","percentageB","percentageC","percentageD","parentFeedbackGroups","parentFeedbackQuestionId","followFeedbackQuestionId","loadQuestionPage","onbeforeunload","reload","joinCode","groupCode","affixMenu","scrollspy","affix","anchorScroll","isStudentProfileIncomplete","DateOfBirth","addStreamToOrder","streamId","isPopSurvey","prepend","feedbackId","hasClass","HomeIndexViewModel","slide","setPage","nextSlide","numSlides","prevSlide","resizeSvgs","innerWidth","PDFObject","HomeLearnViewModel","about","setAnchor","loadGuides","isGuidesLoaded","embed","guides","getRandomInt","random","assignColors","myNum","counter","assingedColor","assingedLength","diffMax","assignedPosX","css","myDivs","cW","cX","changeColor","newValues","newW","newdiffMax","newPosX","nW","nX","colorsBgk","scroll","sT","hDocs","rangeCol","setW","setY","newX","setInterval","$btn","Cookies","isMobile","showMobileAdBanner","hideMobileAdBanner","main","get","apple","phone","android","set","expires","showCookieBanner","hideCookieBanner","cookie","undefined","fadeColor","titleColors","slick","centerMode","initialSlide","dots","arrows","slidesToShow","centerPadding","responsive","breakpoint","settings","input","elem","isProfileOpen","particlesJS","particles","number","density","enable","value_area","shape","stroke","polygon","nb_sides","image","src_list","opacity","anim","speed","opacity_min","sync","size_min","line_linked","distance","move","direction","straight","out_mode","bounce","attract","rotateX","rotateY","interactivity","detect_on","events","onhover","mode","onclick","resize","modes","grab","bubble","repulse","particles_nb","retina_detect","assignedColor","assignedLength","show","AdminAssignViewModel","assignLicence","assignDepartmentLicence","LicencesDataViewModel","balance","departmentBalance","teachers","TeacherId","HaveLicence","DepartmentLicence","Quantity","DepartmentLicenceQuantity","Teachers","LicenceViewModel","isLoaded","streams","selectedStreamName","selectedQuizName","streamAssignments","getPurchasedProducts","assignStream","assignQuiz","buyStream","buyPremiumQuiz","selectStream","stream","StreamId","selectQuiz","streamAssignmentData","assignmentData","backToIndex","Streams","quantity","getAssignments","getStreamAssignments","routed","ProductIndexViewModel","transactionTypes","transactionType","selectedOrder","orders","amountInPence","createTransaction","orderId","OrderId","getOrderList","UserName","SchoolName","DatePlaced","dateFormat","tablesorter","BasketViewModel","school","School","user","User","orderProducts","OrderProducts","orderProduct","chosenClasses","selectedClass","lineTotalInPence","PriceInPence","availableClasses","isConfirming","isInvoiceSent","canConfirm","Email","confirmOrder","totalInPence","penceToPounds","pence","deleteProduct","product","orderProductId","OrderProductId","pounds","groupIds","chosenClass","allBindings","$element","options","propName","has","isObservable","OrdersViewModel","testLink","isAdmin","allowAnonymous","hasDataProduct","isPayingBy","orderReference","additionalEmail","extend","selectedOrderStatus","orderStatus","orderFilterChoices","authorize","orderFilter","getAllOrders","checkOut","payByInvoice","sendInvoice","cancelSendInvoice","sendPay","assignNow","ProductType","buyMore","purchaseBox","handler","StripeCheckout","configure","token","payViaStripe","open","currency","amount","testReferrer","isAuthenticated","inArray","roles","TransactionType","AmountInPence","isFiltered","statusFilter","getBasket","loadOrderDetails","setEditable","getOrderDetails","getOrderByKey","GroupIds","Title","OrderStatus","ClassInsightPriceInPence","ClassInsightAndDepartmentPriceInPence","AdditionalEmail","Reference","reference","teach","collaborate","teachQuantity","priceInPence","DepartmentPriceInPence","TeachQuantity","CollaborateQuantity","TotalInPence","productTypes","productType","priceInPounds","products","getQuizList","getStreamList","getProductsList","Editing","confirm","changePrice","that","confirmButtonClass","cancelButtonText","isConfirm","createProduct","productSummaryViewModel","PriceInPounds","ProductId","productId","newPriceInPence","QuestionComment","ImageURL","Moderation","commentsCount","CommentsCount","dateLastModified","DateLastModified","ViewModel","comments","getQuestions","sortBydateLastModified","getComments","pad","getRandomColor","deleteSelection","activeObject","canvas","getActiveObject","activeGroup","getActiveGroup","objectsInGroup","getObjects","discardActiveGroup","object","unselectAll","deactivateAll","renderAll","onObjectSelected","selectedObject","fontFamily","getFontSize","fontWeight","fontStyle","textDecoration","spectrum","fill","backgroundColor","textAlign","siblings","checked","dataURL","toDataURL","quality","selectedSubjectIds","toArray","explanationA","explanationB","explanationC","explanationD","errorMessages","redirectUrl","fabric","util","Object","transparentCorners","Canvas","canvasJson","loadFromJSON","freeDrawingBrush","clear","isDrawingMode","oldFontSize","placeholder","left","angle","toHexString","scaleX","scaleY","fontSize","originX","hasRotatingPoint","setActiveObject","cancelText","colour","chooseText","maxSelectionSize","showInitial","showPalette","showSelectionPalette","theme","palette","localStorageKey","showAlpha","setOpacity","getKlass","clone","flipY","flipX","bringToFront","bringForward","sendBackwards","sendToBack","autosize","keyup","setText","setFontSize","_adjustPosition","$fabricText","fabricText","sendkeys","toggleClass","Triangle","Circle","Rect","uniformHeight","Image","fromURL","Img","originY","uploadButton","$this","off","abort","always","fileupload","acceptFileTypes","autoUpload","disableImageResize","maxFileSize","maxNumberOfFiles","previewMaxWidth","previewMaxHeight","previewCrop","imageMaxWidth","imageMaxHeight","imageCrop","action","context","files","file","preview","progress","loaded","thumbnail","fadeOut","support","fileInput","dropZone","timeout","dropZoneTimeout","clearTimeout","parentNode","loadSVGFromURL","objects","loadedObject","groupSVGElements","setCoords","calcOffset","timeago","fullMatch","n","Number","$answerSelected","assignmentStudentId","quizSessionId","answerCountTotal","answerDataA","answerCount","answerPercentage","answerHtmlA","answerGiven","answerDataB","answerHtmlB","answerDataC","answerHtmlC","answerDataD","answerHtmlD","answersHtml","before","tour","Tour","storage","debug","backdrop","orphan","steps","content","placement","onShow","ended","restart","start","isPublished","canvasOld","canvasNew","QuestionsGoViewModel","password","isQuestionLoaded","currentQuestion","logIn","guest","openReason","answerViewModel","isValidationFailed","isProvenTeacher","isQuestionLiked","questionDateCreated","questionAuthor","questionDownloads","questionLikes","questionIsCurated","metrics","reportReason","commentText","commentGroups","isQuizzesLoaded","quizOptions","selectedQuizOption","newQuizName","moderateMode","embedCode","setTab","addtoquiz","getQuizzes","comment","download","likeQuestion","toggleSubjects","toggleMetrics","getMetrics","report","sendComment","currentList","senderId","DateSent","isReplying","replyText","toggleReplying","commentGroup","processComments","addToQuiz","moderatePass","moderateFail","AuthorUserName","Downloads","Likes","IsQuestionLiked","IsCurated","IsProvenTeacher","keys","capitalizeFirstLetter","toFixed","charAt","toUpperCase","exp","NaN","changeLikes","working","$self","likeId","perfectScrollbar","suppressScrollX","CreateByQuestionIdViewModel","bindEnterToAddQuestion","removeQuestion","addQuestion","createQuiz","getQuestionIds","updateCounter","isEmpty","sharingStatus","quizType","closeOnCancel","$selectedQuestionIds","messages","first","$selectedQuiz","quizid","row","insertBefore","prev","insertAfter","next","QuizGoViewModel","isReview","isQuizLoaded","isQuizSessionLoaded","isQuizSessionComplete","quizDateCreated","quizDesc","quizAuthor","attemptGroups","selectedAttempt","questionCount","position","correctCount","quizSession","QuestionsAndAnswers","changeCurrentQuestion","AttemptGroup","UpdateAttemptOption","attemptOption","attemptGroup","attemptOption2","AttemptOption","QuizSessionId","dateCompleted","dateCreated","DateCreated","GroupCode","getQuiz","logInPage","login","quizCompleted","postMessage","resumeOrReview","forward","backward","fastforward","review","getQuizSession","changeQuestionForward","calcCorrectCount","summary","changeQuestionFastForward","nextMisconceptionPosition","calcNextMisconceptionPosition","userIdFromToken","assignmentIdToQuizSession","otherAttemptOptions","assignmentAttemptOptions","QuizSessions","Assignments","bestAttempt","welcome","isFromTSL","Position","nextQuestion","updateQuestion","questionsAndAnswers","currentPosition","option","selectExtensions","writeValue","QuizzesPremiumViewModel","paper1Options","paper2Options","selectedPaper1Index","selectedPaper2Index","freePaper1Options","freePaper2Options","selectedFreePaper1Index","selectedFreePaper2Index","takeawayfoundation","screenshot","takeawaygraded","takeawaygradec","takeawaygradeb","selectedPaper1","selectedPaper2","selectedFreePaper1","selectedFreePaper2","nextPaper1Question","prevPaper1Question","nextPaper2Question","prevPaper2Question","nextFreePaper1Question","prevFreePaper1Question","nextFreePaper2Question","prevFreePaper2Question","addPremiumQuizToOrder","isQuizLiked","isShareMode","isAuthorized","quizAuthorUserId","quizDownloads","quizLikes","quizIsCurated","enableDownload","userRoles","Anonymous","reviewed","focusReason","previewCurrentQuestion","previewPosition","previewQuestions","likeCorrect","likeInCorrect","dataQuiz","liveQuiz","controllerId","liveQuizId","likeQuiz","togglePreviewMode","previousPage","getQuizQuestions","quizFinish","AuthorUserId","IsQuizLiked","IsAuthorized","CollectionName","CollectionSlug","QuizQuestions","quizSearch","bindEnterToJoin","joinLiveQuiz","livequizid","isRequesting","isAddingToStream","likeUrl","unlikeUrl","complete","drawQuestionBarchart","currentAnswers","correctCounts","incorrectCounts","Incorrect","QuizLiveViewModel","isShowAnswers","isShowMyExplanation","isController","isRoomEntered","currentUserCount","isLiveQuizLoaded","isLiveQuizComplete","allUsersPercent","allUsers","notAnswered","isLocked","startOrRestart","SRController","server","startQuiz","LiveQuizId","isFinished","moveForward","finishQuiz","moveBackward","toggleLock","unlockQuestion","lockQuestion","goReview","closeRoom","userJoined","newUserName","getDisplayName","setAnswered","getNameList","sendAnswer","getLiveQuiz","QuizDateCreated","QuestionsCount","IsController","connection","hub","done","joinRoom","ControllerId","testHub","client","newUserComing","liveQuizClosed","roomClosed","roomEntered","moveToQuestion","islocked","getReviewData","questionsCount","getSummaryData","wrongCount","getQuestionData","SingleAnswers","SecondsUsed","getAnswer","timeused","questionBarchart","ReportsViewModel","startDates","endDates","daysAgo","subtract","pick","reportTypes","reportType","subjectFilter","subjectFilterValue","isAllStudents","isGenerating","selectedStudentCount","step","generating","len","generateNewReport","pickStudentReport","selectStudents","allStudents","generateMultipleReports","fixStudentScrollbar","elements","userIds","IsSelected","startDaysAgo","endDaysAgo","getGroupAndSubjectList","LoadDropDownItems","dropDown","selectedValue","empty","createElement","LoadRegionsDropDown","loadData","NotificationType","addAssignmentFinishRow","addFollowUpQuestionAnsweredRow","addNewFeedbackQuestionRow","addNewAssignmentRow","addNewBadgeRow","addNewFreeLicenceRow","addNewAssignedLicenceRow","addNewStudentBadge","addAddDateOfBirth","addExplanationLiked","Info1","Info2","Amount","is","StreamAssignViewModel","selectedStream","selectedGroups","Length","licencesAvailable","licencesRequired","licencesLeft","startDateEditable","assignBtnEnable","diff","dateTimePicker","disable","selectedGroup","totalQuantity","group","getGroupList","cache","search","findStreamById","setValue","sa","sweetalert","StreamEditViewModel","isEndDate","StreamQuizzes","setStreamQuizzes","deleteStream","deleteQuiz","moveUp","moveQuiz","moveDown","publish","calDate","newDate","setDate","StreamIndexViewModel","foundationOptions","higherOptions","selectedFoundationIndex","selectedHigherIndex","today","daysLeft","selectedFoundation","selectedHigher","nextFoundationQuestion","prevFoundationQuestion","nextHigherQuestion","prevHigherQuestion","startPolling","poll","imported","stopPolling","toggleStudents","selectedStudentIds","WondeViewModel","schools","schoolCounts","schoolSyncs","schoolSync","isSchoolsLoaded","isSchoolSyncsLoaded","isSyncRunning","eediApiUrl","clearSchool","clearSchoolCounts","clearSchoolSyncsList","clearSchoolSync","getWondeSchoolSummary","goToSchool","wondeId","goToSchoolList","goToSchoolSyncs","showSchoolCounts","getSchoolCounts","getStudentLoginsUrl","getTeacherLoginsUrl","mergeWondeToEedi","isFromBeginningOfTime","putMerge","mirrorWondeToEedi","isSure","putMirror","formatDate","getSchools","headers","Authorization","getSchool","schoolDTO","wondeSyncStatusRowKey","getSchoolSync","getSchoolSyncs","isFromTheBeginningOfTime","updateType","merge","loadSchoolPage","mirror","loadSchoolsListPage","loadSchoolSyncsListPage"],"mappings":"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","file":"viewmodels-bundle.js","sourcesContent":["\r\nString.prototype.insert = function (index, string) {\r\n if (index > 0)\r\n return this.substring(0, index) + string + this.substring(index, this.length);\r\n else\r\n return string + this;\r\n};\r\n\r\nfunction parseDate(data) {\r\n if (data == null)\r\n return null;\r\n var date, string;\r\n\r\n date = new Date(parseInt(/-?\\d+/.exec(data)));\r\n\r\n string = date.getDate() + \"/\"\r\n + (date.getMonth() + 1) + \"/\"\r\n + date.getFullYear() + \" \"\r\n + (date.getHours() >= 10 ? \"\" : \"0\") + date.getHours() + \":\"\r\n + (date.getMinutes() >= 10 ? \"\" : \"0\") + date.getMinutes();\r\n\r\n return string;\r\n}\r\n\r\nfunction getFilterDetailString(filter) {\r\n var result = \"\";\r\n\r\n // if (filter.IsFilteredByDateRange)\r\n // result += \"Date Range: \" + filter.StartDate + \" to \" + filter.EndDate + \"\\n\";\r\n\r\n //if (filter.IsFilteredByDateRange)\r\n // result += \"Date range has been set. \";\r\n\r\n if (filter.IsFilteredByAgeRange)\r\n result += \"Age Range: \" + (filter.AgeRangeYoungest == null ? \"Any\" : filter.AgeRangeYoungest) + \" to \" + (filter.AgeRangeOldest == null ? \"Any\" : filter.AgeRangeOldest) + \". \\n\";\r\n\r\n if (filter.GenderFilter != null && filter.GenderFilter != \"All\")\r\n result += \"Gender: \" + filter.GenderFilter + \" \\n\";\r\n\r\n if (filter.AttemptsFilter != null && filter.AttemptsFilter != \"All\")\r\n result += \"Attempts: \" + filter.AttemptsFilter + \" \\n\";\r\n\r\n //if (result.length == 0)\r\n // result += \"No advanced filter info\";\r\n\r\n return result;\r\n}\r\n\r\nfunction toTimeAgo(dt) {\r\n var secs = (((new Date()).getTime() - dt.getTime()) / 1000),\r\n days = Math.floor(secs / 86400);\r\n\r\n return days === 0 && (\r\n secs < 60 && \"just now\" ||\r\n secs < 120 && \"a minute ago\" ||\r\n secs < 3600 && Math.floor(secs / 60) + \" minutes ago\" ||\r\n secs < 7200 && \"an hour ago\" ||\r\n secs < 86400 && Math.floor(secs / 3600) + \" hours ago\") ||\r\n days === 1 && \"yesterday\" ||\r\n days < 31 && days + \" days ago\" ||\r\n days < 60 && \"one month ago\" ||\r\n days < 365 && Math.ceil(days / 30) + \" months ago\" ||\r\n days < 730 && \"one year ago\" ||\r\n Math.ceil(days / 365) + \" years ago\";\r\n}\r\n\r\nfunction getUrlFromFilter(filter) {\r\n\r\n var url = '';\r\n\r\n url += filter.userfilter;\r\n url += '/';\r\n\r\n switch (filter.userfilter) {\r\n case 'Country':\r\n url += filter.selectedcountry;\r\n url += '_';\r\n if (filter.selectedregion != null)\r\n url += filter.selectedregion;\r\n break;\r\n case 'Group':\r\n url += filter.selectedgroupid;\r\n break;\r\n case 'Department':\r\n url += filter.selecteddepartmentid;\r\n break;\r\n case 'Teacher':\r\n url += filter.selectedteacherid;\r\n break;\r\n case 'Student':\r\n url += filter.selecteduserid;\r\n break;\r\n case 'School':\r\n url += filter.selectedschoolid;\r\n break;\r\n case 'Assignment':\r\n url += filter.selectedassignmentid;\r\n default:\r\n break;\r\n }\r\n url += '/';\r\n\r\n if (filter.StartDate != null)\r\n url += UrlFromDateString(filter.StartDate);\r\n url += '/';\r\n\r\n if (filter.EndDate != null)\r\n url += UrlFromDateString(filter.EndDate);\r\n url += '/';\r\n\r\n if (filter.AgeRangeYoungest != null)\r\n url += filter.AgeRangeYoungest;\r\n url += '/';\r\n\r\n if (filter.AgeRangeOldest != null)\r\n url += filter.AgeRangeOldest;\r\n url += '/';\r\n\r\n if (filter.GenderFilter != null && filter.GenderFilter != 'All') {\r\n url += filter.GenderFilter == 'Male' ? 'M' : 'F';\r\n }\r\n if (filter.IsOnlyShowCompletedAttempts == true) {\r\n url += '_T';\r\n }\r\n if (filter.IsFilteredByLiveQuiz == true) {\r\n url += '_LQ_' + filter.SelectedLiveQuizId;\r\n }\r\n url += '/';\r\n\r\n return url;\r\n}\r\n\r\nfunction getFilterFromParams(params) {\r\n var filter = {};\r\n\r\n // 0 userfilter\r\n filter.userfilter = params[0];\r\n\r\n switch (filter.userfilter) {\r\n case 'Country':\r\n var country_region = params[1].split('_');\r\n filter.selectedcountry = country_region[0];\r\n if (country_region[1] != '') {\r\n filter.selectedregion = country_region[1];\r\n }\r\n break;\r\n case 'Group':\r\n filter.selectedgroupid = params[1];\r\n break;\r\n case 'Department':\r\n filter.selecteddepartmentid = params[1];\r\n break;\r\n case 'Teacher':\r\n filter.selectedteacherid = params[1];\r\n break;\r\n case 'Student':\r\n filter.selecteduserid = params[1];\r\n break;\r\n case 'School':\r\n filter.selectedschoolid = params[1];\r\n break;\r\n case 'Assignment':\r\n filter.selectedassignmentid = params[1];\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n\r\n // 2 start date\r\n if (params[2] != '') {\r\n filter.IsFilteredByDateRange = true;\r\n filter.StartDate = DateStringFromUrl(params[2]);\r\n }\r\n\r\n // 3 end date\r\n if (params[3] != '') {\r\n filter.IsFilteredByDateRange = true;\r\n filter.EndDate = DateStringFromUrl(params[3]);\r\n }\r\n\r\n // 4, 5 age range\r\n if (params[4] != '') {\r\n filter.IsFilteredByAgeRange = true;\r\n filter.AgeRangeYoungest = params[4];\r\n }\r\n\r\n // 3 end date\r\n if (params[5] != '') {\r\n filter.IsFilteredByAgeRange = true;\r\n filter.AgeRangeOldest = params[5];\r\n }\r\n\r\n // 6 gender and extension\r\n if (params[6] != '') {\r\n var extendParams = params[6].split('_');\r\n var i = 0;\r\n if (extendParams[i] != '') {\r\n filter.GenderFilter = params[6] == 'M' ? 'Male' : 'Female';\r\n }\r\n i++;\r\n if (extendParams[i] == 'T') {\r\n filter.IsOnlyShowCompletedAttempts = true;\r\n i++;\r\n }\r\n if (extendParams[i] == 'LQ') {\r\n filter.IsFilteredByLiveQuiz = true;\r\n filter.SelectedLiveQuizId = extendParams[i + 1];\r\n }\r\n\r\n }\r\n\r\n return filter;\r\n}\r\n\r\nfunction UrlFromDateString(dateString) {\r\n var dateurl = dateString;\r\n dateurl = dateurl.replace('/', '');\r\n dateurl = dateurl.replace('/', '');\r\n dateurl = dateurl.replace(' ', '');\r\n dateurl = dateurl.replace(':', '');\r\n return dateurl;\r\n}\r\n\r\nfunction DateStringFromUrl(dateUrl) {\r\n var dateString = dateUrl.substring(0, 2) + '/'\r\n + dateUrl.substring(2, 4) + '/'\r\n + dateUrl.substring(4, 8) + ' '\r\n + dateUrl.substring(8, 10) + ':'\r\n + dateUrl.substring(10, 12);\r\n return dateString;\r\n}\r\n\r\nfunction dateTimeString(date) {\r\n var MM = (date.getMonth() + 1).toString();\r\n var dd = date.getDate().toString();\r\n var hh = date.getHours().toString();\r\n var mm = date.getMinutes().toString();\r\n\r\n var result = (dd[1] ? dd : \"0\" + dd[0]) + \"/\"\r\n + (MM[1] ? MM : \"0\" + MM[0]) + \"/\"\r\n + date.getFullYear() + \" \"\r\n + (hh[1] ? hh : \"0\" + hh[0]) + \":\"\r\n + (mm[1] ? mm : \"0\" + mm[0]);\r\n return result;\r\n}\r\n\r\nfunction dateString(date) {\r\n var MM = (date.getMonth() + 1).toString();\r\n var dd = date.getDate().toString();\r\n\r\n var result = (dd[1] ? dd : \"0\" + dd[0]) + \"/\"\r\n + (MM[1] ? MM : \"0\" + MM[0]) + \"/\"\r\n + date.getFullYear();\r\n return result;\r\n}\r\n\r\n;\ndefine(\"pages/data/utility\", function(){});\n\n","define('components/dq-data-filter',['jquery', 'knockout', 'moment', 'bootstrapDateTimePicker', 'pages/data/utility'], function ($, ko, moment) {\r\n \r\n ko.bindingHandlers.initDateTimePicker = {\r\n init: function (element, valueAccessor) {\r\n $(element).datetimepicker({\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n format: \"DD/MM/YYYY HH:mm\"\r\n });\r\n ko.utils.registerEventHandler(element, \"change\", function () {\r\n var observable = valueAccessor();\r\n observable(element.getElementsByTagName(\"input\")[0].value);\r\n });\r\n\r\n //handle disposal (if KO removes by the template binding)\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n $(element).datetimepicker(\"destroy\");\r\n });\r\n\r\n },\r\n //update the control when the view model changes\r\n update: function (element, valueAccessor) {\r\n \r\n var value = ko.utils.unwrapObservable(valueAccessor()),\r\n current = element.getElementsByTagName(\"input\")[0].value;\r\n if (value != current) {\r\n //element.data(\"DateTimePicker\").setDate(value);\r\n element.getElementsByTagName(\"input\")[0].value = value;\r\n //$(element).datetimepicker(\"setDate\", value);\r\n }\r\n }\r\n }\r\n\r\n\r\n // Array Remove - By John Resig (MIT Licensed)\r\n Array.prototype.remove = function (from, to) {\r\n var rest = this.slice((to || from) + 1 || this.length);\r\n this.length = from < 0 ? this.length + from : from;\r\n return this.push.apply(this, rest);\r\n };\r\n \r\n ko.bindingHandlers.fadeVisible = {\r\n update: function (element, valueAccessor) {\r\n valueAccessor().visible ? $(element).removeClass('hide') : $(element).addClass('hide');\r\n }\r\n };\r\n\r\n function FilterValue(data) {\r\n this.Value = ko.observable(data.Value);\r\n this.Text = ko.observable(data.Text);\r\n }\r\n\r\n var self;\r\n\r\n function DateFilterViewModel(params) {\r\n self = this;\r\n\r\n self.userRole = params.userRole;\r\n\r\n self.isQuizPage = false;\r\n if (params.pageParas != null) {\r\n if (self.userRole != 'Anonymous') {\r\n if (params.pageParas.pageName == 'quiz') {\r\n self.isQuizPage = true;\r\n self.quizId = params.pageParas.quizId;\r\n }\r\n }\r\n if (params.pageParas.schoolId != null)\r\n {\r\n self.schoolId = params.pageParas.schoolId;\r\n }\r\n }\r\n\r\n\r\n if (self.userRole == 'Teacher')\r\n {\r\n self.userFilterChoices = [\r\n { name: \"All Users\", value: \"All\" },\r\n { name: \"All Students in your School\", value: \"School\" },\r\n { name: \"All Students in Class...\", value: \"Group\" },\r\n { name: \"All Students Taught by Teacher...\", value: \"Teacher\" },\r\n { name: \"Student...\", value: \"Student\" },\r\n { name: \"Mine\", value: \"Mine\" },\r\n { name: \"All Students in Department...\", value: \"Department\" },\r\n ];\r\n if (self.isQuizPage)\r\n {\r\n self.userFilterChoices.push({ name: \"Assignment...\", value: \"Assignment\" });\r\n }\r\n }\r\n\r\n else if (self.userRole == 'Student')\r\n {\r\n self.userFilterChoices = [\r\n { name: \"All Users\", value: \"All\" },\r\n { name: \"All Students in your School\", value: \"School\" },\r\n { name: \"All Students in Class...\", value: \"Group\" },\r\n { name: \"All Students Taught by Teacher...\", value: \"Teacher\" },\r\n { name: \"Mine\", value: \"Mine\" }\r\n ];\r\n }\r\n else if (self.userRole == 'User')\r\n {\r\n self.userFilterChoices = [\r\n { name: \"All Users\", value: \"All\" },\r\n { name: \"Mine\", value: \"Mine\" }\r\n ];\r\n }\r\n else\r\n {\r\n self.userFilterChoices = [\r\n { name: \"All Users\", value: \"All\" }\r\n ];\r\n }\r\n \r\n self.timeChoices = [\r\n { name: \"All Time\", value: null },\r\n { name: \"Last Week\", value: 7 },\r\n { name: \"Last Month\", value: 30 },\r\n { name: \"Last Year\", value: 365 },\r\n { name: \"Custom\", value: -1 }\r\n ];\r\n self.timeChoicesValue = ko.observable(self.timeChoices[0]);\r\n\r\n self.timeChoicesValue.subscribe(function (newValue) {\r\n if (newValue.value == -1) {\r\n self.isDateCustom(true);\r\n } else {\r\n self.isDateCustom(false);\r\n }\r\n if (newValue.value == null) {\r\n self.ifSetDateRange(false);\r\n } else {\r\n self.ifSetDateRange(true);\r\n if (newValue.value != -1) {\r\n var now = moment();\r\n self.endDate(now.format('DD/MM/YYYY HH:mm'));\r\n self.startDate(now.add(-newValue.value, 'days').format('DD/MM/YYYY HH:mm'));\r\n }\r\n }\r\n });\r\n\r\n self.userFilterValue = ko.observable(self.userFilterChoices[0]);\r\n self.userFilterValue.subscribe(function (newValue) {\r\n if (self.filterClass() == 'ClassStudent') {\r\n return;\r\n }\r\n\r\n switch (newValue.value) {\r\n case 'Group':\r\n getClassList();\r\n break;\r\n case 'Department':\r\n getDepartmentList();\r\n break;\r\n case 'Teacher':\r\n getTeacherList();\r\n break;\r\n case 'Student':\r\n getStudentList();\r\n break;\r\n case 'Country':\r\n getCountryList();\r\n break;\r\n case 'Assignment':\r\n getAssignmentList();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n self.departmentFilter = ko.observable([]);\r\n self.departmentFilterValue = ko.observable();\r\n\r\n self.yearGroupFilter = ko.observable([]);\r\n self.yearGroupFilterValue = ko.observable();\r\n self.isYearGroupSelected = ko.observable(false);\r\n\r\n self.classFilter = ko.observable([]);\r\n self.classFilterValue = ko.observable();\r\n\r\n self.teacherFilter = ko.observable([]);\r\n self.teacherFilterValue = ko.observable();\r\n\r\n self.countryFilter = ko.observable([]);\r\n self.countryFilterValue = ko.observable();\r\n self.countryFilterValue.subscribe(function (newValue) {\r\n if (newValue.Value() != null) {\r\n getRegionList(newValue.Value());\r\n }\r\n });\r\n self.regionFilter = ko.observable([]);\r\n self.regionFilterValue = ko.observable();\r\n\r\n self.studentFilter = ko.observable([]);\r\n self.studentFilterValue = ko.observable();\r\n\r\n self.assignmentFilter = ko.observable([]);\r\n self.assignmentFilterValue = ko.observable();\r\n\r\n self.ifChooseLiveQuiz = ko.observable(false);\r\n self.ifChooseLiveQuiz.subscribe(function (newValue) {\r\n if (newValue)\r\n getLiveQuizList();\r\n });\r\n self.liveQuizFilter = ko.observable([]);\r\n self.liveQuizFilterValue = ko.observable();\r\n\r\n self.advancedFiltering = ko.observable(true);\r\n self.ifSetDateRange = ko.observable(false);\r\n\r\n self.isDateCustom = ko.observable(false);\r\n self.ifSetAgeRange = ko.observable(false);\r\n self.femaleSelected = ko.observable(false);\r\n self.maleSelected = ko.observable(false);\r\n self.isOnlyShowCompletedAttempts = ko.observable(false);\r\n\r\n var currentdate = new Date(); \r\n\r\n self.startDate = ko.observable(startDateString(currentdate));\r\n self.endDate = ko.observable(endDateString(currentdate));\r\n\r\n self.ageFrom = ko.observable();\r\n self.ageTo = ko.observable();\r\n\r\n self.genderFilter = [\r\n { name: \"All\", value: \"All\" },\r\n { name: \"Female\", value: \"Female\" },\r\n { name: \"Male\", value: \"Male\" },\r\n ];\r\n self.genderFilterValue = ko.observable(self.genderFilter[0]);\r\n\r\n self.attemptsFilter = [\r\n { name: \"All Attempts\", value: \"All\" },\r\n { name: \"Only the First Attempt\", value: \"First\" },\r\n { name: \"Only the Last Attempt\", value: \"Last\" },\r\n ];\r\n self.attemptsFilterValue = ko.observable(self.attemptsFilter[0]);\r\n\r\n addFunctions();\r\n\r\n if (params.filterClass != null) {\r\n self.filterClass = ko.observable(params.filterClass);\r\n switch (params.filterClass) {\r\n case 'Subject':\r\n self.userFilterValue({ name: \"All Students in Country...\", value: \"Country\" }); // HACK We removed this option from userFilterChoices so hardcoding here\r\n break;\r\n case 'Class':\r\n self.userFilterValue(self.userFilterChoices[2]);\r\n break;\r\n case 'Student':\r\n self.userFilterValue(self.userFilterChoices[3]);\r\n break;\r\n case 'Department':\r\n self.userFilterValue(self.userFilterChoices[6]);\r\n break;\r\n case 'DepartmentYearGroup':\r\n self.userFilterValue(self.userFilterChoices[6]);\r\n self.departmentFilterValue({ Value: params.departmentId });\r\n break;\r\n case 'ClassStudent':\r\n self.userFilterValue(self.userFilterChoices[2]);\r\n self.classFilterValue({ Value: params.classId });\r\n break;\r\n default:\r\n\r\n }\r\n } else {\r\n self.filterClass = ko.observable('Full');\r\n }\r\n\r\n //release filter restriction for student\r\n //IfTeacherOrStudent();\r\n \r\n //params.applyFilter(params.DefaultFilter);\r\n if (params.getInitFilter != null)\r\n {\r\n setFilter(params.getInitFilter());\r\n }\r\n\r\n if (params.pageParas != null && params.pageParas.hasCohort)\r\n {\r\n //do nothing\r\n }\r\n else\r\n {\r\n params.applyFilter(getFilter());\r\n }\r\n \r\n self.applyFilterButton = function ()\r\n {\r\n var filter = getFilter();\r\n if (paramsChecking(filter)) {\r\n params.applyFilter(filter);\r\n }\r\n }\r\n\r\n self.showMine = function () {\r\n self.userFilterValue(self.userFilterChoices[self.userFilterChoices.length - 1]);\r\n var filter = getFilter();\r\n if (paramsChecking(filter)) {\r\n params.applyFilter(filter);\r\n }\r\n }\r\n\r\n self.toggleFemale = function () {\r\n self.femaleSelected(!self.femaleSelected());\r\n }\r\n\r\n self.toggleMale = function () {\r\n self.maleSelected(!self.maleSelected());\r\n }\r\n }\r\n\r\n function paramsChecking(filter)\r\n {\r\n if (filter.IsFilteredByAgeRange)\r\n {\r\n if (filter.AgeRangeOldest == null && filter.AgeRangeYoungest == null)\r\n {\r\n alert('At least one age must be provided.');\r\n return false;\r\n }\r\n if (filter.AgeRangeOldest < filter.AgeRangeYoungest) {\r\n alert('The oldest age cannot be less than the youngest age.');\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function getFilterChoiceByValue(filterChoices, value)\r\n {\r\n for (var i = 0; i < filterChoices.length; i++)\r\n {\r\n if (filterChoices[i].Value() == value)\r\n {\r\n return filterChoices[i];\r\n }\r\n }\r\n return filterChoices[0];\r\n }\r\n\r\n function setFilter(filter) {\r\n if (filter == null)\r\n return;\r\n self.userFilterValue(self.userFilterChoices[filter.UserFilter]);\r\n\r\n switch(self.userFilterValue().value)\r\n {\r\n case 'Country':\r\n self.countryFilterValue(getFilterChoiceByValue(self.countryFilter(), filter.SelectedCountry));\r\n self.regionFilterValue(getFilterChoiceByValue(self.regionFilter(), filter.SelectedRegion));\r\n break;\r\n case 'School':\r\n break;\r\n case 'Group':\r\n self.classFilterValue(getFilterChoiceByValue(self.classFilter(), filter.SelectedGroupId));\r\n break;\r\n case 'Teacher':\r\n self.teacherFilterValue(getFilterChoiceByValue(self.teacherFilter(), filter.SelectedTeacherId));\r\n break;\r\n case 'Student':\r\n self.studentFilterValue(getFilterChoiceByValue(self.studentFilter(), filter.SelectedUserId));\r\n break;\r\n default:\r\n break; \r\n }\r\n \r\n if (filter.IsFilteredByDateRange) {\r\n self.advancedFiltering(true);\r\n self.ifSetDateRange(true);\r\n self.startDate(parseDate(filter.StartDate));\r\n self.endDate(parseDate(filter.EndDate));\r\n }\r\n if (filter.IsFilteredByAgeRange)\r\n {\r\n self.advancedFiltering(true);\r\n self.ifSetAgeRange(true);\r\n self.ageFrom(filter.AgeRangeYoungest);\r\n self.ageTo(filter.AgeRangeOldest);\r\n }\r\n if (filter.GenderFilter != 0)\r\n {\r\n self.advancedFiltering(true);\r\n self.genderFilterValue(self.genderFilter[filter.GenderFilter]);\r\n }\r\n if (filter.AttemptsFilter != 0)\r\n {\r\n self.advancedFiltering(true);\r\n self.attempsFilterValue(self.attemptsFilter[filter.AttempsFilter]);\r\n }\r\n }\r\n\r\n function addFunctions()\r\n {\r\n self.getClassList = function () { getClassList() };\r\n self.getTeacherList = function () { getTeacherList() };\r\n self.getStudentList = function () { getStudentList() };\r\n self.getDepartmentList = function () { getDepartmentList() };\r\n\r\n self.classInsightClassFilter = function () {\r\n self.userFilterValue(self.userFilterChoices[2]);\r\n };\r\n\r\n self.classInsightStudentFilter = function () {\r\n self.userFilterValue(self.userFilterChoices[4]);\r\n getGroupStudentList(self.classFilterValue().Value());\r\n };\r\n\r\n self.departmetnInsightDepartmentFilter = function () {\r\n self.userFilterValue(self.userFilterChoices[6]);\r\n self.isYearGroupSelected(false);\r\n }\r\n\r\n self.departmetnInsightYearGroupFilter = function () {\r\n self.userFilterValue(self.userFilterChoices[6]);\r\n self.isYearGroupSelected(true);\r\n getYeargroupList();\r\n }\r\n\r\n self.departmetnInsightClassFilter = function () {\r\n self.userFilterValue(self.userFilterChoices[2]);\r\n self.isYearGroupSelected(false);\r\n }\r\n\r\n self.departmetnInsightTeacherFilter = function () {\r\n self.userFilterValue(self.userFilterChoices[3]);\r\n self.isYearGroupSelected(false);\r\n }\r\n }\r\n\r\n function getFilterForNewFilter() {\r\n var model = {};\r\n model.userfilter = self.userFilterValue().value;\r\n\r\n switch (self.userFilterValue().value) {\r\n case 'Country':\r\n model.selectedcountry = self.countryFilterValue().Value();\r\n if (self.countryFilterValue().Value() == null) {\r\n model.userfilter = 'All';\r\n break;\r\n }\r\n if (self.regionFilterValue().Value() != \"\") {\r\n model.selectedregion = self.regionFilterValue().Value();\r\n }\r\n break;\r\n case 'Group':\r\n model.selectedgroupid = self.classFilterValue().Value();\r\n break;\r\n case 'Department':\r\n model.selecteddepartmentid = self.departmentFilterValue().Value();\r\n if (self.isYearGroupSelected()) {\r\n model.isfilteredbyyeargroup = true;\r\n model.selectedyeargroupid = self.yearGroupFilterValue().Value();\r\n }\r\n break;\r\n case 'Teacher':\r\n model.selectedteacherid = self.teacherFilterValue().Value();\r\n break;\r\n case 'Student':\r\n model.selecteduserid = self.studentFilterValue().Value();\r\n break;\r\n case 'School':\r\n model.selectedschoolid = self.schoolId;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n if (self.advancedFiltering()) {\r\n if (self.timeChoicesValue().value != null) {\r\n model.IsFilteredByDateRange = true;\r\n model.StartDate = self.startDate();\r\n model.EndDate = self.endDate();\r\n } \r\n if (self.ageFrom() != null || self.ageTo() != null) {\r\n model.IsFilteredByAgeRange = true;\r\n model.AgeRangeYoungest = parseInt(self.ageFrom(), 10);\r\n model.AgeRangeOldest = parseInt(self.ageTo(), 10);\r\n }\r\n if (self.femaleSelected() && !self.maleSelected()) {\r\n model.GenderFilter = 'Female';\r\n } else if (!self.femaleSelected() && self.maleSelected()) {\r\n model.GenderFilter = 'Male';\r\n } else {\r\n model.GenderFilter = 'All';\r\n }\r\n }\r\n\r\n return model;\r\n }\r\n\r\n function getFilter() {\r\n\r\n if (self.filterClass() == 'Subject' || self.filterClass() == 'Department' || self.filterClass() == 'ClassStudent' || self.filterClass() == 'DepartmentYearGroup') {\r\n return getFilterForNewFilter();\r\n }\r\n\r\n var model = {};\r\n model.userfilter = self.userFilterValue().value;\r\n\r\n switch (self.userFilterValue().value) {\r\n case 'Country':\r\n model.selectedcountry = self.countryFilterValue().Value();\r\n if (self.countryFilterValue().Value() == null) {\r\n model.userfilter = 'All';\r\n break;\r\n }\r\n if (self.regionFilterValue().Value() != \"\") {\r\n model.selectedregion = self.regionFilterValue().Value();\r\n }\r\n break;\r\n case 'Group':\r\n model.selectedgroupid = self.classFilterValue().Value();\r\n break;\r\n case 'Department':\r\n model.selecteddepartmentid = self.departmentFilterValue().Value();\r\n \r\n break;\r\n case 'Teacher':\r\n model.selectedteacherid = self.teacherFilterValue().Value();\r\n break;\r\n case 'Student':\r\n model.selecteduserid = self.studentFilterValue().Value();\r\n break;\r\n case 'School':\r\n model.selectedschoolid = self.schoolId;\r\n break;\r\n case 'Assignment':\r\n model.selectedassignmentid = self.assignmentFilterValue().Value();\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n \r\n if (self.ifChooseLiveQuiz() && self.liveQuizFilterValue() != null)\r\n {\r\n model.IsFilteredByLiveQuiz = self.ifChooseLiveQuiz();\r\n model.SelectedLiveQuizId = self.liveQuizFilterValue().Value();\r\n }\r\n\r\n if (self.advancedFiltering()) {\r\n if (self.ifSetDateRange()) {\r\n model.IsFilteredByDateRange = self.ifSetDateRange();\r\n model.StartDate = self.startDate();\r\n model.EndDate = self.endDate();\r\n self.ifSetDateRange(false);\r\n }\r\n if (self.ifSetAgeRange()) {\r\n model.IsFilteredByAgeRange = self.ifSetAgeRange();\r\n model.AgeRangeYoungest = parseInt(self.ageFrom(), 10);\r\n model.AgeRangeOldest = parseInt(self.ageTo(), 10);\r\n }\r\n if (self.isOnlyShowCompletedAttempts())\r\n {\r\n model.IsOnlyShowCompletedAttempts = true;\r\n }\r\n model.GenderFilter = self.genderFilterValue().value;\r\n model.AttemptsFilter = self.attemptsFilterValue().value;\r\n }\r\n\r\n return model;\r\n }\r\n\r\n function getCountryList() {\r\n if (self.countryFilter().length == 0) {\r\n $.ajax({\r\n url: '/Data/LoadCountries',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n\r\n var result = [];\r\n result.push(new FilterValue({ Text: \"All Countries\", Value: null }));\r\n for (var i = 0; i < data.length; i++) {\r\n result.push(new FilterValue(data[i]));\r\n }\r\n self.countryFilter(result);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getRegionList(countryname) {\r\n var model = { countryname: countryname };\r\n\r\n $.ajax({\r\n url: '/Data/LoadRegions',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n var result = [];\r\n result.push(new FilterValue({ Text: \"All Regions\", Value: \"\" }));\r\n for (var i = 0; i < data.length; i++)\r\n {\r\n result.push(new FilterValue(data[i]));\r\n }\r\n // var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.regionFilter(result);\r\n }\r\n });\r\n }\r\n\r\n //function getClassList() {\r\n // if (self.classFilter().length == 0) {\r\n // $.ajax({\r\n // url: '/Data/LoadGroups',\r\n // dataType: 'json',\r\n // async: false,\r\n // success: function (data) {\r\n // var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n // self.classFilter(mappedTasks);\r\n // }\r\n // });\r\n // }\r\n //}\r\n\r\n //function getTeacherList() {\r\n // if (self.teacherFilter().length == 0) {\r\n // $.ajax({\r\n // url: '/Data/LoadTeachers',\r\n // dataType: 'json',\r\n // async: false,\r\n // success: function (data) {\r\n // var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n // self.teacherFilter(mappedTasks);\r\n // }\r\n // });\r\n // }\r\n //}\r\n\r\n // TODO Reinstate this but need to test on the server as I was getting a timeout issue.\r\n //\r\n function getClassList() {\r\n var model = {};\r\n var url = '/Data/LoadGroups';\r\n if (self.isQuizPage)\r\n {\r\n url = '/Data/LoadGroupsForQuizPage';\r\n model.quizId = self.quizId;\r\n }\r\n\r\n if (self.classFilter().length == 0) {\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n dataType: 'json',\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.classFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getYeargroupList() {\r\n if (self.yearGroupFilter().length == 0) {\r\n $.ajax({\r\n url: '/Data/LoadYearGroups',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.yearGroupFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getDepartmentList() {\r\n if (self.departmentFilter().length == 0) {\r\n $.ajax({\r\n url: '/Data/LoadDepartments',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.departmentFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getTeacherList() {\r\n var model = {};\r\n var url = '/Data/LoadTeachers';\r\n if (self.isQuizPage) {\r\n url = '/Data/LoadTeachersForQuizPage';\r\n model.quizId = self.quizId;\r\n }\r\n\r\n if (self.teacherFilter().length == 0) {\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n dataType: 'json',\r\n async: false, \r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.teacherFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n \r\n function getGroupStudentList(groupId) {\r\n var model = { groupId: groupId };\r\n\r\n if (self.studentFilter().length == 0) {\r\n $.ajax({\r\n url: '/Data/LoadGroupStudents',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n dataType: 'json',\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n var mappedTasks = $.map(data.model, function (item) { return new FilterValue(item) });\r\n self.studentFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getStudentList() {\r\n if (self.studentFilter().length == 0) {\r\n $.ajax({\r\n url: '/Data/LoadStudents',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.studentFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getAssignmentList() {\r\n var model = { quizId: self.quizId };\r\n\r\n var url = '/Data/LoadAssignmentListForQuiz';\r\n\r\n if (self.assignmentFilter().length == 0) {\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n dataType: 'json',\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.assignmentFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getLiveQuizList() {\r\n\r\n var model = { quizId: self.quizId };\r\n\r\n if (self.liveQuizFilter().length == 0) {\r\n $.ajax({\r\n\r\n url: '/Data/LoadLiveQuizs',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n dataType: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.liveQuizFilter(mappedTasks);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function IfTeacherOrStudent() {\r\n $.getJSON('/Data/IfTeacherOrStudent', function (data) {\r\n if(data == false)\r\n {\r\n $('#UserFilter').attr('disabled', true);\r\n $('#UserFilterAlert').removeClass('hide');\r\n }\r\n });\r\n \r\n }\r\n\r\n function startDateString(currentdate) {\r\n var month = currentdate.getMonth();\r\n var year = currentdate.getFullYear();\r\n var dd = currentdate.getDate();\r\n var hh = currentdate.getHours().toString();\r\n var mm = currentdate.getMinutes().toString();\r\n \r\n if (month == 0) {\r\n month = 12;\r\n year = year - 1;\r\n }\r\n if (month == 2 && dd > 28)\r\n dd = 28;\r\n if (dd > 30)\r\n dd = 30;\r\n\r\n month = month.toString();\r\n dd = dd.toString();\r\n\r\n var result = (dd[1] ? dd : \"0\" + dd[0]) + \"/\"\r\n + (month[1] ? month : \"0\" + month[0]) + \"/\"\r\n + year + \" \"\r\n + (hh[1] ? hh : \"0\" + hh[0]) + \":\"\r\n + (mm[1] ? mm : \"0\" + mm[0]);\r\n return result;\r\n }\r\n\r\n function endDateString(currentdate)\r\n {\r\n var MM = (currentdate.getMonth() + 1).toString();\r\n var dd = currentdate.getDate().toString();\r\n var hh = currentdate.getHours().toString();\r\n var mm = currentdate.getMinutes().toString();\r\n\r\n var result = (dd[1] ? dd : \"0\" + dd[0]) + \"/\"\r\n + (MM[1] ? MM : \"0\" + MM[0]) + \"/\"\r\n + currentdate.getFullYear() + \" \"\r\n + (hh[1] ? hh : \"0\" + hh[0]) + \":\"\r\n + (mm[1] ? mm : \"0\" + mm[0]);\r\n return result;\r\n }\r\n\r\n function parseDate(data) {\r\n var date, string;\r\n date = new Date(parseInt(/-?\\d+/.exec(data)));\r\n\r\n var MM = (date.getMonth() + 1).toString();\r\n var dd = date.getDate().toString();\r\n var hh = date.getHours().toString();\r\n var mm = date.getMinutes().toString();\r\n\r\n string = (dd[1] ? dd : \"0\" + dd[0]) + \"/\"\r\n + (MM[1] ? MM : \"0\" + MM[0]) + \"/\"\r\n + date.getFullYear() + \" \"\r\n + (hh[1] ? hh : \"0\" + hh[0]) + \":\"\r\n + (mm[1] ? mm : \"0\" + mm[0]);\r\n\r\n return string;\r\n }\r\n\r\n return DateFilterViewModel;\r\n\r\n});\r\n\r\n\n","define('pages/account/default',['jquery', 'jqueryValidate', 'bootstrap', 'bootstrapDateTimePicker'], function ($) {\r\n\r\n $(function () {\r\n $('#BirthDateTimePicker').datetimepicker({\r\n minDate: '1/1/1900',\r\n maxDate: new Date(),\r\n // defaultDate: '1/7/2002',\r\n useCurrent: false,\r\n pickTime: false,\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n viewMode: 'years',\r\n format: \"DD/MM/YYYY\"\r\n });\r\n });\r\n \r\n});\n","define('pages/account/edit',['jquery', 'jqueryValidate', 'bootstrap', 'cropit'], function ($) {\r\n\r\n $(function () {\r\n jQuery.fn.preventDoubleSubmission = function () {\r\n $(this)\r\n .on('submit',\r\n function (e) {\r\n var $form = $(this);\r\n\r\n if ($form.data('submitted') === true) {\r\n // Previously submitted - don't submit again\r\n e.preventDefault();\r\n } else {\r\n // Mark it so that the next submit can be ignored\r\n $form.data('submitted', true);\r\n }\r\n });\r\n\r\n // Keep chainability\r\n return this;\r\n };\r\n\r\n $('form#update-profile-form').preventDoubleSubmission();\r\n\r\n $('form#update-profile-form').submit(function (event) {\r\n\r\n });\r\n\r\n \r\n\r\n });\r\n \r\n});\n","define('pages/account/externalloginconfirmation',[\r\n 'jquery',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'toastr',\r\n 'enums',\r\n 'moment'\r\n],\r\nfunction (\r\n $,\r\n ko,\r\n crossroads,\r\n hasher,\r\n toastr,\r\n enums,\r\n moment\r\n) {\r\n\r\n var self,\r\n isFirstTime = true;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // jQuery plugin to prevent double submission of forms\r\n $(function () {\r\n jQuery.fn.preventDoubleSubmission = function () {\r\n $(this)\r\n .on('submit',\r\n function (e) {\r\n var $form = $(this);\r\n\r\n if ($form.data('submitted') === true) {\r\n // Previously submitted - don't submit again\r\n e.preventDefault();\r\n } else {\r\n // Mark it so that the next submit can be ignored\r\n $form.data('submitted', true);\r\n }\r\n });\r\n\r\n // Keep chainability\r\n return this;\r\n };\r\n\r\n $('.js-submit-button').preventDoubleSubmission();\r\n });\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function AccountExternalLoginConfirmationViewModel() {\r\n self = this;\r\n\r\n self.userRole = $('#userrole').data('userrole');\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.firstname = ko.observable($('#FirstName').val());\r\n self.lastname = ko.observable($('#LastName').val());\r\n self.username = ko.observable($('#UserName').val());\r\n\r\n self.isCalculatingUsername = ko.observable(false);\r\n\r\n // Pages\r\n self.pages = new enums.Enum('picker', 'teacher', 'student');\r\n self.page = ko.observable(self.pages.picker);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.firstname.subscribe(function () {\r\n\r\n self.calculateUserName();\r\n\r\n });\r\n\r\n self.lastname.subscribe(function () {\r\n\r\n self.calculateUserName();\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new AccountExternalLoginConfirmationViewModel());\r\n\r\n initRouter();\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.changePage = function (page) {\r\n if (page == self.pages.teacher) {\r\n hasher.setHash('teacher');\r\n } else if (page == self.pages.student) {\r\n hasher.setHash('student');\r\n } else {\r\n hasher.setHash('');\r\n }\r\n }\r\n\r\n self.calculateUserName = function () {\r\n self.username('Loading...');\r\n \r\n var model = {\r\n stem: self.firstname() + self.lastname()\r\n };\r\n\r\n self.isCalculatingUsername(true);\r\n\r\n $.ajax({\r\n url: '/Account/GetUniqueUserName',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == \"success\") {\r\n self.username(data.userName);\r\n } else {\r\n toastr['error'](data.status, 'Error');\r\n }\r\n self.isCalculatingUsername(false);\r\n },\r\n error: function (error) {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n self.isCalculatingUsername(false);\r\n }\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n //setup crossroads\r\n crossroads.addRoute('',\r\n function () {\r\n if (isFirstTime) {\r\n switch (self.userRole) {\r\n case 'Student':\r\n hasher.setHash('student');\r\n break;\r\n case 'Teacher':\r\n hasher.setHash('teacher');\r\n break;\r\n default:\r\n self.page(self.pages.picker);\r\n break;\r\n }\r\n isFirstTime = false;\r\n } else {\r\n self.page(self.pages.picker);\r\n }\r\n });\r\n\r\n crossroads.addRoute('/student/',\r\n function () {\r\n self.page(self.pages.student);\r\n });\r\n\r\n crossroads.addRoute('/teacher/',\r\n function () {\r\n self.page(self.pages.teacher);\r\n });\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n }\r\n\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n});\r\n\n","define('pages/account/login',[\r\n 'jquery',\r\n 'knockout'\r\n], \r\nfunction (\r\n $,\r\n ko\r\n) {\r\n\r\n var self;\r\n\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n /// This code fixes the returnUrl to take account of the fact that hash values are \r\n /// not sent to the server. There are a few cases to consider:\r\n /// 1. There is no returnUrl (you've come straight to the login page)\r\n /// 2. There is a returnUrl and it has no hash and is not supposed to have a hash.\r\n /// You were redirected from a page which has no hash.\r\n /// 3. There is a returnUrl and the hash is missing but present in the url after \r\n /// the real # symbol. You were redirected from a page with a hash. Now we need to \r\n /// get the hash value from the url and add it to the returnUrl.\r\n /// 4. There is a returnUrl and it includes an encoded hash value (this will happen\r\n /// if you enter the wrong password). Don't readd the hash value.\r\n ///\r\n /// We need to send the hash value encoded (and the # itself must be encoded) so it \r\n /// is actually sent to the server POST login action. \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function AccountLoginViewModel() {\r\n\r\n self = this;\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self.returnUrl = viewmodel.ReturnUrl;\r\n self.hash = ko.observable();\r\n \r\n var indexHash = location.href.indexOf('#');\r\n\r\n if (indexHash > 0) {\r\n self.hash(location.href.substr(indexHash + 1));\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.formAction = ko.pureComputed(function () {\r\n\r\n var formAction = '/Account/Login';\r\n \r\n if (self.returnUrl) {\r\n\r\n formAction += '?ReturnUrl=' + encodeURIComponent(self.returnUrl);\r\n\r\n if (self.hash()) {\r\n formAction += encodeURIComponent('#' + self.hash());\r\n }\r\n } \r\n \r\n return formAction;\r\n\r\n }, self);\r\n\r\n self.registerLink = ko.pureComputed(function () {\r\n\r\n var registerLink = '/Account/Register';\r\n\r\n if (self.returnUrl) {\r\n\r\n registerLink += '?ReturnUrl=' + encodeURIComponent(self.returnUrl);\r\n\r\n if (self.hash()) {\r\n registerLink += encodeURIComponent('#' + self.hash());\r\n }\r\n }\r\n\r\n return registerLink;\r\n\r\n }, self);\r\n\r\n self.externalLoginFormAction = ko.pureComputed(function () {\r\n\r\n var externalLoginFormAction = '/Account/ExternalLogin';\r\n\r\n if (self.returnUrl) {\r\n\r\n externalLoginFormAction += '?ReturnUrl=' + encodeURIComponent(self.returnUrl);\r\n\r\n if (self.hash()) {\r\n externalLoginFormAction += encodeURIComponent('#' + self.hash());\r\n }\r\n }\r\n\r\n return externalLoginFormAction;\r\n\r\n }, self);\r\n\r\n }\r\n \r\n ko.applyBindings(new AccountLoginViewModel());\r\n \r\n});\n","define('pages/account/referral',['jquery', 'knockout', 'toastr', 'moment', 'jqueryValidate', 'bootstrap', 'bootstrapDateTimePicker'], function ($, ko, toastr, moment) {\r\n\r\n $(function () {\r\n $('#BirthDateTimePicker').datetimepicker({\r\n minDate: '1/1/1900',\r\n maxDate: new Date(),\r\n // defaultDate: '1/7/2002',\r\n useCurrent: false,\r\n pickTime: false,\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n viewMode: 'years',\r\n format: \"DD/MM/YYYY\"\r\n });\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n\r\n function ReferralViewModel() {\r\n self = this;\r\n\r\n self.quizId = ko.observable(\"\");\r\n\r\n self.referralKey = $('#referralkey').data('referralkey');\r\n self.questionsCreated = $('#questionscreated').data('questionscreated');\r\n\r\n for (var i = 0; i < 10; i++) {\r\n if (self.questionsCreated[i] == null) {\r\n self.questionsCreated.push({ DateUploaded: null, Index: i + 1 });\r\n } else {\r\n var DateUploaded = self.questionsCreated[i];\r\n self.questionsCreated[i] = { DateUploaded: moment(DateUploaded).fromNow(), Index: i + 1 };\r\n }\r\n }\r\n\r\n self.socialMailto = ko.pureComputed(function () {\r\n\r\n var url = document.location.protocol + '//' + document.location.hostname + '/Account/Register?ReferrerKey=' + self.referralKey;\r\n\r\n var email = encodeURI('&subject=Invitation to Diagnostic Questions&body=')\r\n + encodeURIComponent(url)\r\n + encodeURI('\\r\\n\\r\\nI found this quiz on diagnosticquestions.com where you can find thousands of diagnostic questions and quizzes. Register for free to create your own questions and quizzes and assign them to your students.');\r\n\r\n return 'mailto:' + email;\r\n\r\n }, self);\r\n\r\n self.url = ko.pureComputed(function () {\r\n\r\n var url = document.location.protocol + '//' + document.location.hostname + '/Account/Register?ReferrerKey=' + self.referralKey;\r\n return url;\r\n\r\n }, self);\r\n\r\n self.socialFacebook = ko.pureComputed(function () {\r\n\r\n var url = document.location.protocol + '//' + document.location.hostname + '/Account/Register?ReferrerKey=' + self.referralKey;\r\n\r\n return 'https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(url);\r\n\r\n }, self);\r\n\r\n self.socialTwitter = ko.pureComputed(function () {\r\n\r\n var url = document.location.protocol + '//' + document.location.hostname + '/Account/Register?ReferrerKey=' + self.referralKey;\r\n\r\n var message = 'Try this! ' + url + ' There are loads of quizzes and it is free to register!';\r\n\r\n return 'http://twitter.com/home?status=' + encodeURIComponent(message);\r\n\r\n }, self);\r\n\r\n self.socialGoogle = ko.pureComputed(function () {\r\n\r\n var url = document.location.protocol + '//' + document.location.hostname + '/Account/Register?ReferrerKey=' + self.referralKey;\r\n\r\n var message = 'Try this! ' + url + ' There are loads of questions and it is free to register!';\r\n\r\n return 'https://plus.google.com/share?url=' + encodeURIComponent(message);\r\n\r\n }, self);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.emailString = ko.observable(\"\");\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new ReferralViewModel());\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n function addPageFunctions() {\r\n self.send = function () {\r\n\r\n var model = { emailAddress: self.emailString() };\r\n\r\n $.ajax({\r\n url: '/Account/SendReferralEmails',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success'](\"Email Sent.\", 'Success');\r\n }\r\n }\r\n })\r\n }\r\n\r\n self.createQuestionButton = function () {\r\n window.location.href = '/Questions/Create';\r\n }\r\n\r\n self.shareMailto = function () {\r\n window.location.href = self.socialMailto();\r\n }\r\n\r\n self.shareTwitter = function () {\r\n window.location.href = self.socialTwitter();\r\n }\r\n\r\n self.shareFacebook = function () {\r\n window.location.href = self.socialFacebook();\r\n }\r\n\r\n self.shareGoogle = function () {\r\n window.location.href = self.socialGoogle();\r\n }\r\n }\r\n \r\n});\n","define('pages/account/register',[\r\n 'jquery',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'toastr',\r\n 'enums',\r\n 'moment'\r\n],\r\nfunction (\r\n $,\r\n ko,\r\n crossroads,\r\n hasher,\r\n toastr,\r\n enums,\r\n moment\r\n) {\r\n\r\n var self,\r\n isFirstTime = true;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n $(function() {\r\n jQuery.fn.preventDoubleSubmission = function() {\r\n $(this)\r\n .on('submit',\r\n function(e) {\r\n var $form = $(this);\r\n\r\n if ($form.data('submitted') === true) {\r\n // Previously submitted - don't submit again\r\n e.preventDefault();\r\n } else {\r\n // Mark it so that the next submit can be ignored\r\n $form.data('submitted', true);\r\n }\r\n });\r\n\r\n // Keep chainability\r\n return this;\r\n };\r\n\r\n $('.js-submit-button').preventDoubleSubmission();\r\n });\r\n\r\n // jQuery plugin to prevent double submission of forms\r\n \r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function AccountRegisterViewModel() {\r\n self = this;\r\n\r\n self.userRole = $('#userrole').data('userrole');\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.firstname = ko.observable($('#FirstName').val());\r\n self.lastname = ko.observable($('#LastName').val());\r\n self.username = ko.observable($('#UserName').val());\r\n\r\n self.isCalculatingUsername = ko.observable(false);\r\n\r\n // Pages\r\n self.pages = new enums.Enum('picker', 'teacher', 'student');\r\n self.page = ko.observable(self.pages.picker);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.firstname.subscribe(function () {\r\n\r\n self.calculateUserName();\r\n\r\n });\r\n\r\n self.lastname.subscribe(function () {\r\n\r\n self.calculateUserName();\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new AccountRegisterViewModel());\r\n\r\n initRouter();\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.changePage = function (page) {\r\n if (page == self.pages.teacher) {\r\n hasher.setHash('teacher');\r\n } else if (page == self.pages.student) {\r\n hasher.setHash('student');\r\n } else {\r\n hasher.setHash('');\r\n }\r\n }\r\n\r\n self.calculateUserName = function () {\r\n self.username('Loading...');\r\n \r\n var model = {\r\n stem: self.firstname() + self.lastname()\r\n };\r\n\r\n self.isCalculatingUsername(true);\r\n\r\n $.ajax({\r\n url: '/Account/GetUniqueUserName',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == \"success\") {\r\n self.username(data.userName);\r\n } else {\r\n toastr['error'](data.status, 'Error');\r\n }\r\n self.isCalculatingUsername(false);\r\n },\r\n error: function (error) {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n self.isCalculatingUsername(false);\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n //setup crossroads\r\n crossroads.addRoute('',\r\n function () {\r\n if (isFirstTime) {\r\n switch (self.userRole) {\r\n case 'Student':\r\n hasher.setHash('student');\r\n break;\r\n case 'Teacher':\r\n hasher.setHash('teacher');\r\n break;\r\n default:\r\n self.page(self.pages.picker);\r\n break;\r\n }\r\n isFirstTime = false;\r\n } else {\r\n self.page(self.pages.picker);\r\n }\r\n });\r\n\r\n crossroads.addRoute('/student/',\r\n function () {\r\n self.page(self.pages.student);\r\n });\r\n\r\n crossroads.addRoute('/teacher/',\r\n function () {\r\n self.page(self.pages.teacher);\r\n });\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n }\r\n\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n});\r\n\n","define('pages/admin/index',['jquery', 'sweetalert'], function ($) {\r\n\r\n $(function () {\r\n\r\n $('.js-abandon-user').on('submit', function (e) {\r\n var self = this;\r\n e.preventDefault();\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: \"This user will be abandoned!\",\r\n type: \"warning\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#DD6B55\",\r\n confirmButtonText: \"Yes, abandon it!\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n self.submit();\r\n });\r\n });\r\n\r\n $('.js-remove-students').on('submit', function (e) {\r\n var self = this;\r\n e.preventDefault();\r\n\r\n var model = {\r\n schoolId: parseInt(document.getElementById(\"remove-students-schoolId\").value),\r\n joinBeforeDate: document.getElementById(\"JoinBeforeDate\").value,\r\n inactiveSinceDate: document.getElementById(\"InactiveSinceDate\").value\r\n };\r\n\r\n $.ajax({\r\n url: '/Admin/PreRemoveStudents',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n if (data.info.studentCount == 0) {\r\n swal(\"Oops...\", \"There are no students that meet the condition.\", \"warning\");\r\n return;\r\n }\r\n\r\n var text = data.info.studentCount + \" students who joined before \" +\r\n data.info.joinBeforeDate + \" and inactive since \" +\r\n data.info.inactiveSinceDate + \" in school \\\"\" +\r\n data.info.schoolName + \"\\\" will be archived. \";\r\n\r\n swal({\r\n title: \"Are you sure?\",\r\n text: text,\r\n type: \"warning\",\r\n showCancelButton: true,\r\n confirmButtonColor: \"#DD6B55\",\r\n confirmButtonText: \"Yes, do it!\",\r\n closeOnConfirm: true\r\n },\r\n function () {\r\n self.submit();\r\n });\r\n }\r\n else {\r\n swal(\"Oops...\", data.status, \"error\");\r\n }\r\n },\r\n error: function (error) {\r\n swal(\"Oops...\", error.statusCode, \"error\");\r\n }\r\n });\r\n\r\n \r\n });\r\n \r\n });\r\n \r\n});\n","define('pages/answers/create',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/answers/delete',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/answers/details',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/answers/edit',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/answers/index',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/assignments/create',['jquery', 'bootstrap', 'moment', 'bootstrapDateTimePicker'], function ($, bootstrap, moment) {\r\n\r\n var premiumTypeCode = 1;\r\n var viewmodel = $('#viewmodel').data('model');\r\n var quizzes = viewmodel.Quizzes;\r\n var groups = viewmodel.Groups;\r\n\r\n\r\n $(function () {\r\n $('#create-assignment').click(function () {\r\n ga('send', 'event', 'Quiz', 'Quiz – Assign quiz to class');\r\n mixpanel.track('Quiz Assigned', { category: 'Quiz' });\r\n });\r\n \r\n\r\n $('#startDateTimePicker').datetimepicker({\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n format: \"DD/MM/YYYY HH:mm\"\r\n });\r\n $('#endDateTimePicker').datetimepicker({\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n format: \"DD/MM/YYYY HH:mm\" \r\n });\r\n \r\n $('#startDateTimePicker').on(\"dp.change\", function (e) {\r\n $('#endDateTimePicker').data(\"DateTimePicker\").setMinDate(e.date);\r\n });\r\n\r\n\r\n $(document).on('invalid-form.validate', 'form', function () {\r\n var button = $(this).find('input[type=\"submit\"]');\r\n setTimeout(function () {\r\n button.removeAttr('disabled');\r\n }, 1);\r\n });\r\n $(document).on('submit', 'form', function () {\r\n var button = $(this).find('input[type=\"submit\"]');\r\n setTimeout(function () {\r\n button.attr('disabled', 'disabled');\r\n }, 0);\r\n });\r\n\r\n $('#GroupDropdown').change(function () {\r\n changeSelectedGroup(this.value);\r\n });\r\n\r\n $('#QuizDropdown').change(function () {\r\n changeSelectedQuiz(this.value);\r\n });\r\n\r\n if (viewmodel.QuizId)\r\n {\r\n changeSelectedQuiz(viewmodel.QuizId);\r\n }\r\n if (viewmodel.GroupId)\r\n {\r\n changeSelectedGroup(viewmodel.GroupId);\r\n }\r\n });\r\n\r\n function changeSelectedGroup(groupId)\r\n {\r\n for (var i = 0; i < groups.length; i++) {\r\n if (groups[i].GroupId == groupId) {\r\n $('#GroupStudentCount').html(groups[i].StudentsCount);\r\n }\r\n }\r\n }\r\n\r\n function changeSelectedQuiz(quizId)\r\n {\r\n for (var i = 0; i < quizzes.length; i++)\r\n {\r\n if (quizzes[i].QuizId == quizId)\r\n {\r\n if (quizzes[i].QuizType == premiumTypeCode)\r\n {\r\n $('#LicenceTable').removeClass('hide');\r\n if (quizzes[i].IsUnlimited) {\r\n $('#LicencesAvailable').html('Unlimited');\r\n } else {\r\n $('#LicencesAvailable').html(quizzes[i].Balance);\r\n }\r\n }\r\n else\r\n {\r\n $('#LicenceTable').addClass('hide');\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n});\n","define('pages/assignments/default',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n $(\"#order-assignments-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n\r\n\r\n });\r\n\r\n});\n","define('pages/assignments/details',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n $('input:radio[name=toggleAnswers]').change(function () {\r\n var value = $(this).val();\r\n\r\n if (value === 'incorrect') {\r\n $('.js-answer-correct').addClass('hide');\r\n $('.js-answer-incorrect').removeClass('hide');\r\n } else if (value === 'correct') {\r\n $('.js-answer-correct').removeClass('hide');\r\n $('.js-answer-incorrect').addClass('hide');\r\n } else {\r\n $('.js-answer-correct').removeClass('hide');\r\n $('.js-answer-incorrect').removeClass('hide');\r\n }\r\n\r\n });\r\n\r\n $('.js-answer-count').popover({ html: true, trigger: 'focus' });\r\n\r\n $('input:radio[name=toggleCountsDots]').change(function () {\r\n var value = $(this).val();\r\n\r\n if (value === 'counts') {\r\n $('.js-answer-count').removeClass('hide');\r\n $('.js-answer-dot').addClass('hide');\r\n } else {\r\n $('.js-answer-count').addClass('hide');\r\n $('.js-answer-dot').removeClass('hide');\r\n }\r\n\r\n });\r\n\r\n if (!isTouchDevice()) {\r\n $('.js-answer-dot').tooltip();\r\n }\r\n\r\n $('.js-answer-dot').click(function () {\r\n\r\n // Find all answer dots linked to this one by title\r\n var username = $(this).data('username');\r\n\r\n $('.js-answer-dot[data-username!=\"' + username + '\"]')\r\n .removeClass('icon-circle')\r\n .addClass('icon-circle-blank');\r\n\r\n $('.js-answer-dot[data-username=\"' + username + '\"]')\r\n .addClass('icon-circle')\r\n .removeClass('icon-circle-blank');\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n\r\n function isTouchDevice() {\r\n return true == (\"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch);\r\n }\r\n\r\n});\n","define('pages/assignments/edit',['jquery', 'bootstrap', 'moment', 'bootstrapDateTimePicker'], function ($, bootstrap, moment) {\r\n\r\n $(function () {\r\n $(\"#order-assignments-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n $('#startDateTimePicker').datetimepicker({\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n format: \"DD/MM/YYYY HH:mm\"\r\n });\r\n $('#endDateTimePicker').datetimepicker({\r\n icons: {\r\n time: \"icon-time\",\r\n date: \"icon-calendar\",\r\n up: \"icon-chevron-up\",\r\n down: \"icon-chevron-down\"\r\n },\r\n format: \"DD/MM/YYYY HH:mm\"\r\n });\r\n\r\n $('#startDateTimePicker').on(\"dp.change\", function (e) {\r\n $('#endDateTimePicker').data(\"DateTimePicker\").setMinDate(e.date);\r\n });\r\n\r\n });\r\n\r\n});\n","define('pages/assignments/student',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n $(\"#order-assignments-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n });\r\n\r\n});\n","define('pages/assignments/teacher',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n $(\".js-order-by, .js-filter-by-class, .js-filter-by-date\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n $(\"#js-show-stream-toggle\").change(function () {\r\n document.location = $(this).data('action');\r\n });\r\n });\r\n\r\n});\n","define('pages/collections/index',[\r\n 'jquery',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'toastr',\r\n 'enums',\r\n 'jqueryValidate',\r\n 'bootstrap',\r\n 'knockoutValidation',\r\n 'komapping'],\r\nfunction (\r\n $,\r\n ko,\r\n crossroads,\r\n hasher,\r\n toastr\r\n) {\r\n \r\n var self;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n })\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function CollectionGroup(data) {\r\n var self = this;\r\n self.collectionGroupId = data.CollectionGroupId;\r\n self.name = ko.observable(data.Name);\r\n self.description = ko.observable(data.Description);\r\n self.sequence = ko.observable(data.Sequence);\r\n self.editable = ko.observable(data.editable || false);\r\n\r\n self.cancel = function (collectionGroup) {\r\n ko.mapping.fromJS(self.original, {}, collectionGroup);\r\n self.editable(false);\r\n }\r\n\r\n self.edit = function (collectionGroup) {\r\n self.original = ko.mapping.toJS(collectionGroup);\r\n self.editable(true);\r\n }\r\n\r\n if (data.CollectionQuizs) {\r\n var mappedCollectionQuizs = $.map(data.CollectionQuizs, function (item) { return new CollectionQuiz(item) });\r\n self.collectionQuizs = ko.observableArray(mappedCollectionQuizs);\r\n } else {\r\n self.collectionQuizs = ko.observableArray([]);\r\n }\r\n\r\n sortCollectionQuizs();\r\n\r\n self.newCollectionQuiz = ko.observable();\r\n\r\n initNewCollectionQuiz();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.createCollectionQuiz = function (collectionQuiz) {\r\n\r\n //clearErrors();\r\n\r\n collectionQuiz.collectionGroupId = self.collectionGroupId;\r\n\r\n $.ajax({\r\n url: '/Collections/CreateCollectionQuiz',\r\n type: 'POST',\r\n data: ko.toJSON(collectionQuiz),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collection Quiz created\", \"Success\");\r\n self.collectionQuizs.push(new CollectionQuiz(data.model));\r\n initNewCollectionQuiz();\r\n } else if (data.status == 'modelstateerrors') {\r\n //displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n \r\n self.updateCollectionQuiz = function (collectionQuiz) {\r\n\r\n //clearErrors();\r\n\r\n $.ajax({\r\n url: '/Collections/UpdateCollectionQuiz',\r\n type: 'POST',\r\n data: ko.toJSON(collectionQuiz),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collection Quiz updated\", \"Success\");\r\n collectionQuiz.editable(false);\r\n updateCollectionQuizSequences(collectionQuiz.original.sequence, collectionQuiz.sequence(), collectionQuiz.collectionQuizId);\r\n sortCollectionQuizs();\r\n } else if (data.status == 'modelstateerrors') {\r\n //displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n \r\n self.removeCollectionQuiz = function (collectionQuiz) {\r\n\r\n //clearErrors();\r\n\r\n $.ajax({\r\n url: '/Collections/RemoveCollectionQuiz',\r\n type: 'POST',\r\n data: ko.toJSON(collectionQuiz),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collection Quiz deleted\", \"Success\");\r\n updateCollectionQuizSequences(collectionQuiz.original.sequence, self.collectionQuizs().length + 1, collectionQuiz.collectionQuizId);\r\n self.collectionQuizs.remove(collectionQuiz);\r\n initNewCollectionQuiz();\r\n } else if (data.status == 'modelstateerrors') {\r\n //displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initNewCollectionQuiz() {\r\n\r\n // Capitals because we are mimicing a CollectionQuiz from the server\r\n self.newCollectionQuiz(new CollectionQuiz({\r\n 'QuizId': '',\r\n 'QuizName': '',\r\n 'Sequence': self.collectionQuizs().length + 1,\r\n 'editable': true\r\n }));\r\n\r\n }\r\n\r\n function sortCollectionQuizs() {\r\n self.collectionQuizs.sort(function (l, r) {\r\n return l.sequence() > r.sequence() ? 1 : -1;\r\n });\r\n }\r\n\r\n function updateCollectionQuizSequences(from, to, collectionQuizId) {\r\n if (from > to) {\r\n ko.utils.arrayForEach(self.collectionQuizs(), function (collectionQuiz) {\r\n var sequence = parseInt(collectionQuiz.sequence(), 10);\r\n\r\n if (collectionQuiz.collectionQuizId != collectionQuizId && sequence >= to && sequence < from) {\r\n collectionQuiz.sequence(sequence + 1);\r\n }\r\n });\r\n } else if (from < to) {\r\n ko.utils.arrayForEach(self.collectionQuizs(), function (collectionQuiz) {\r\n var sequence = parseInt(collectionQuiz.sequence(), 10);\r\n\r\n if (collectionQuiz.collectionQuizId != collectionQuizId && sequence > from && sequence <= to) {\r\n collectionQuiz.sequence(sequence - 1);\r\n }\r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n function CollectionQuiz(data) {\r\n var self = this;\r\n self.collectionQuizId = data.CollectionQuizId;\r\n self.sequence = ko.observable(data.Sequence);\r\n self.quizId = ko.observable(data.QuizId);\r\n self.quizName = ko.observable(data.QuizName);\r\n self.editable = ko.observable(data.editable || false);\r\n\r\n self.cancel = function (collectionQuiz) {\r\n ko.mapping.fromJS(self.original, {}, collectionQuiz);\r\n self.editable(false);\r\n }\r\n\r\n self.edit = function (collectionQuiz) {\r\n self.original = ko.mapping.toJS(collectionQuiz);\r\n self.editable(true);\r\n }\r\n }\r\n \r\n function CollectionsViewModel() {\r\n\r\n self = this;\r\n\r\n ko.validation.init({\r\n decorateInputElement: true,\r\n errorElementClass: 'input-validation-error',\r\n errorMessageClass: 'field-validation-error',\r\n insertMessages: true\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.pages = new enums.Enum('all', 'details', 'create');\r\n self.page = ko.observable(self.pages.all);\r\n\r\n // All\r\n self.collections = ko.observableArray([]);\r\n\r\n // Details\r\n self.collectionId = ko.observable();\r\n self.collectionDescription = ko.observable();\r\n self.collectionName = ko.observable();\r\n self.collectionSlug = ko.observable();\r\n \r\n self.subjects = ko.observableArray([]);\r\n self.subjectId = ko.observable();\r\n\r\n self.editable = ko.observable(false);\r\n\r\n self.collectionGroups = ko.observableArray([]);\r\n\r\n self.newCollectionGroup = ko.observable();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new CollectionsViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n \r\n self.isNullOrWhiteSpace = function (str) {\r\n return isNullOrWhiteSpace(str);\r\n }\r\n\r\n self.createCollection = function () {\r\n\r\n var model = {\r\n name: self.collectionName(),\r\n description: self.collectionDescription(),\r\n slug: self.collectionSlug(),\r\n subjectId: self.subjectId()\r\n };\r\n\r\n clearErrors();\r\n\r\n $.ajax({\r\n url: '/Collections/Create',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collectiion created\", \"Success\");\r\n hasher.setHash('Details/' + data.model.CollectionId);\r\n } else if (data.status == 'modelstateerrors') {\r\n displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.updateCollection = function () {\r\n\r\n var model = {\r\n collectionId: self.collectionId(),\r\n name: self.collectionName(),\r\n description: self.collectionDescription(),\r\n slug: self.collectionSlug(),\r\n subjectId: self.subjectId()\r\n };\r\n\r\n clearErrors();\r\n \r\n $.ajax({\r\n url: '/Collections/Edit',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collection updated\", \"Success\");\r\n self.editable(false);\r\n } else if (data.status == 'modelstateerrors') {\r\n displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n \r\n }\r\n \r\n self.createCollectionGroup = function (collectionGroup) {\r\n\r\n //clearErrors();\r\n\r\n collectionGroup.collectionId = self.collectionId();\r\n\r\n $.ajax({\r\n url: '/Collections/CreateCollectionGroup',\r\n type: 'POST',\r\n data: ko.toJSON(collectionGroup),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collection Group created\", \"Success\");\r\n self.collectionGroups.push(new CollectionGroup(data.model));\r\n initNewCollectionGroup();\r\n } else if (data.status == 'modelstateerrors') {\r\n //displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.updateCollectionGroup = function (collectionGroup) {\r\n\r\n //clearErrors();\r\n\r\n $.ajax({\r\n url: '/Collections/UpdateCollectionGroup',\r\n type: 'POST',\r\n data: ko.toJSON(collectionGroup),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Collection Group updated\", \"Success\");\r\n collectionGroup.editable(false);\r\n updateCollectionGroupSequences(collectionGroup.original.sequence, collectionGroup.sequence(), collectionGroup.collectionGroupId);\r\n sortCollectionGroups();\r\n } else if (data.status == 'modelstateerrors') {\r\n //displayErrors(data.errors);\r\n } else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.removeCollectionGroup = function (collectionGroup) {\r\n self.collectionGroups.remove(collectionGroup);\r\n };\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function clearCollection() {\r\n self.collectionId(null);\r\n self.collectionName(null);\r\n self.collectionSlug(null);\r\n self.subjectId(null);\r\n self.collectionDescription(null);\r\n }\r\n\r\n function clearErrors() {\r\n $('.input-validation-error')\r\n .removeClass('input-validation-error');\r\n\r\n $('.field-validation-error')\r\n .remove();\r\n }\r\n\r\n function displayErrors(errors) {\r\n\r\n for (var i = 0; i < errors.length; i++) {\r\n\r\n $('')\r\n .html(errors[i].Value[0])\r\n .appendTo($('#' + errors[i].Key).parent());\r\n\r\n $('#' + errors[i].Key)\r\n .addClass('input-validation-error');\r\n }\r\n }\r\n\r\n function loadCollectionDetails(model) {\r\n\r\n self.editable(false);\r\n\r\n self.collectionId(model.CollectionId);\r\n self.collectionDescription(model.Description);\r\n self.collectionSlug(model.Slug);\r\n self.collectionName(model.Name);\r\n\r\n self.subjects(model.Subjects);\r\n\r\n self.subjectId(model.SubjectId);\r\n\r\n var mappedCollectionGroups = $.map(model.CollectionGroups, function (item) { return new CollectionGroup(item) });\r\n self.collectionGroups(mappedCollectionGroups);\r\n \r\n sortCollectionGroups();\r\n\r\n initNewCollectionGroup();\r\n \r\n }\r\n\r\n function initNewCollectionGroup()\r\n {\r\n\r\n // Capitals because we are mimicing a CollectionGroup from the server\r\n self.newCollectionGroup(new CollectionGroup({\r\n 'Name': '',\r\n 'Description': '',\r\n 'Sequence': self.collectionGroups().length + 1,\r\n 'editable': true\r\n }));\r\n\r\n }\r\n\r\n function sortCollectionGroups()\r\n {\r\n self.collectionGroups.sort(function (l, r) {\r\n return l.sequence() > r.sequence() ? 1 : -1;\r\n });\r\n }\r\n\r\n function updateCollectionGroupSequences(from, to, collectionGroupId)\r\n {\r\n if (from > to) {\r\n ko.utils.arrayForEach(self.collectionGroups(), function (collectionGroup) {\r\n var sequence = parseInt(collectionGroup.sequence(), 10);\r\n\r\n if (collectionGroup.collectionGroupId != collectionGroupId && sequence >= to && sequence < from) {\r\n collectionGroup.sequence(sequence + 1);\r\n }\r\n });\r\n } else if (from < to) {\r\n ko.utils.arrayForEach(self.collectionGroups(), function (collectionGroup) {\r\n var sequence = parseInt(collectionGroup.sequence(), 10);\r\n\r\n if (collectionGroup.collectionGroupId != collectionGroupId && sequence > from && sequence <= to) {\r\n collectionGroup.sequence(sequence - 1);\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function getAllCollections() {\r\n\r\n var model = {};\r\n\r\n $.ajax({\r\n url: '/Collections/GetAllCollections',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n self.collections(data.collections);\r\n self.page(self.pages.all);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n \r\n function getCollectionDetails(collectionId) {\r\n\r\n var model = { collectionId: collectionId };\r\n\r\n $.ajax({\r\n url: '/Collections/GetCollectionDetails',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n loadCollectionDetails(data.model);\r\n self.page(self.pages.details);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getSubjects() {\r\n\r\n $.ajax({\r\n url: '/Collections/GetSubjects',\r\n datatype: 'json',\r\n async: false,\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n self.subjects(data.model);\r\n self.page(self.pages.create);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function isNullOrWhiteSpace(str) {\r\n return str === null || !/\\S/.test(str);\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n\r\n crossroads.addRoute('',\r\n function () {\r\n getAllCollections();\r\n });\r\n\r\n crossroads.addRoute('/All/',\r\n function () {\r\n getAllCollections();\r\n });\r\n\r\n crossroads.addRoute('/Create/',\r\n function (id) {\r\n clearCollection();\r\n getSubjects();\r\n });\r\n\r\n crossroads.addRoute('/Details/{id}/',\r\n function (id) {\r\n getCollectionDetails(id);\r\n });\r\n \r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/constructs/index',[\r\n 'jquery',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'toastr',\r\n 'enums',\r\n 'jqueryValidate',\r\n 'bootstrap',\r\n 'knockoutValidation',\r\n 'komapping',\r\n 'jqueryBootstrapPagination'],\r\nfunction (\r\n $,\r\n ko,\r\n crossroads,\r\n hasher,\r\n toastr\r\n) {\r\n \r\n var self;\r\n\r\n // Number of questions to show on each page.\r\n var pageSize = 10;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n })\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function Filter() {\r\n var self = this;\r\n\r\n // Tabs\r\n self.tabs = new enums.Enum('scheme', 'question', 'subject');\r\n self.tab = ko.observable(self.tabs.scheme);\r\n\r\n self.currentFilter = ko.observable();\r\n\r\n // Question Filter\r\n self.questionId = ko.observable();\r\n\r\n // Scheme Filter\r\n self.schemes = ko.observableArray([]);\r\n self.schemeId = ko.observable();\r\n self.topicUnits = ko.observableArray([]);\r\n self.topicUnitId = ko.observable();\r\n\r\n // Subject Filter\r\n self.subjects = ko.observableArray([]);\r\n self.subjectId = ko.observable();\r\n \r\n self.filterByQuestion = function () {\r\n hasher.setHash('questions/' + self.questionId());\r\n }\r\n \r\n self.filterByScheme = function () {\r\n if (!isUndefinedNullOrWhiteSpace(self.schemeId())\r\n && !isUndefinedNullOrWhiteSpace(self.topicUnitId())) {\r\n hasher.setHash('schemes/' + self.schemeId() + '/topics/' + self.topicUnitId());\r\n } else {\r\n toastr[\"error\"](\"You must choose a scheme and topic unit.\", \"Error\");\r\n }\r\n }\r\n\r\n self.filterBySubject = function () {\r\n if (!isUndefinedNullOrWhiteSpace(self.subjectId())) {\r\n hasher.setHash('subjects/' + self.subjectId());\r\n } else {\r\n toastr[\"error\"](\"You must choose a subject.\", \"Error\");\r\n }\r\n }\r\n\r\n // When a user chooses a new scheme from the select input we need to update the topic units\r\n // dropdown. \r\n self.onChangeScheme = function (newFilter) {\r\n\r\n // Unfortunately this event is also triggered on page load so check that the value is \r\n // different from the value in the url. (We get the topic units in a different way on\r\n // page load.)\r\n\r\n if (newFilter.schemeId() > 0\r\n && newFilter.schemeId().toString() !== getSchemeIdFromHash())\r\n getTopicUnits();\r\n } \r\n }\r\n \r\n function Scheme(data) {\r\n var self = this;\r\n self.schemeId = data.schemeId;\r\n self.name = data.name;\r\n }\r\n\r\n function TopicUnit(data) {\r\n var self = this;\r\n self.topicUnitId = data.topicUnitId;\r\n self.name = data.name;\r\n self.quizzes = $.map(data.topicUnitQuizs,\r\n function (item) { return new TopicUnitQuiz(item) });;\r\n }\r\n\r\n function TopicUnitQuiz(data) {\r\n var self = this;\r\n self.topicUnitQuizId = data.topicUnitQuizId;\r\n self.quizId = data.quizId;\r\n self.name = data.name;\r\n self.type = data.type;\r\n }\r\n\r\n function Subject(data) {\r\n var self = this;\r\n self.subjectId = data.subjectId;\r\n self.name = data.name;\r\n self.nameWithNoConstructsQuestionsCount = data.name + ' (' + data.noConstructsQuestionsCount + ')';\r\n }\r\n\r\n function Question(data) {\r\n var self = this;\r\n self.questionId = data.questionId;\r\n self.imageURL = data.imageURL;\r\n self.isSelected = ko.observable(false);\r\n self.sequence = data.sequence;\r\n\r\n var constructs = $.map(data.constructs,\r\n function (item) { return new Construct(item) });\r\n self.constructs = ko.observableArray(constructs);\r\n\r\n var tags = $.map(data.tags,\r\n function (item) { return new Tag(item) });\r\n self.tags = ko.observableArray(tags);\r\n }\r\n\r\n function Construct(data) {\r\n var self = this;\r\n self.constructId = data.constructId;\r\n self.name = data.name;\r\n }\r\n\r\n function Tag(data) {\r\n var self = this;\r\n self.tagId = data.tagId;\r\n self.name = data.name;\r\n }\r\n\r\n function ConstructQuestion(constructId, questionId) {\r\n var self = this;\r\n self.constructId = constructId;\r\n self.questionId = questionId;\r\n }\r\n\r\n function QuestionTag(tagId, questionId) {\r\n var self = this;\r\n self.tagId = tagId;\r\n self.questionId = questionId;\r\n }\r\n\r\n function ConstructsViewModel() {\r\n\r\n self = this;\r\n\r\n ko.validation.init({\r\n decorateInputElement: true,\r\n errorElementClass: 'input-validation-error',\r\n errorMessageClass: 'field-validation-error',\r\n insertMessages: true\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Root subject (set to \"Maths\" for now)\r\n self.rootSubjectId = ko.observable(3);\r\n\r\n // The filter for choosing how to filter the questions (by scheme, question or subject)\r\n self.filter = new Filter();\r\n\r\n // Constructs can be filtered by a list of subjects \r\n self.subjectsForConstructs = ko.observableArray([]);\r\n self.subjectIdForConstructs = ko.observable();\r\n\r\n // Constructs can be searched with text\r\n self.constructSearchText = ko.observable();\r\n self.constructs = ko.observableArray([]);\r\n\r\n // The currently selected construct\r\n self.selectedConstruct = ko.observable();\r\n\r\n // We can create new constructs (they will be linked to subjectIdForConstructs)\r\n self.newConstructName = ko.observable();\r\n\r\n // Fun facts for new construct\r\n self.funFactForNewConstruct = ko.observable();\r\n\r\n // The tags linked to the rootSubjectId\r\n self.tags = ko.observableArray([]);\r\n\r\n // The currently selected tag\r\n self.selectedTag = ko.observable();\r\n\r\n // We can create new tags (they will be linked to the rootSubjectId)\r\n self.newTagName = ko.observable();\r\n\r\n // The filtered questions\r\n self.questions = ko.observableArray([]);\r\n\r\n // When the scheme filter is used the range of sequences for the questions\r\n self.sequences = ko.observableArray([]);\r\n\r\n // The selected sequence\r\n self.sequence = ko.observable();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.selectedQuestions = ko.computed(function() {\r\n return ko.utils.arrayFilter(this.questions(), function(item) {\r\n return item.isSelected() === true;\r\n });\r\n }, self);\r\n\r\n self.questionsFiltered = ko.computed(function () {\r\n var questions = self.questions();\r\n\r\n if (self.filter.tab() === self.filter.tabs.scheme) {\r\n\r\n var sequence = self.sequence();\r\n\r\n if (!isUndefinedNullOrWhiteSpace(sequence)) {\r\n questions = ko.utils.arrayFilter(questions, function (item) {\r\n return item.sequence === sequence;\r\n });\r\n }\r\n\r\n }\r\n\r\n return questions;\r\n }, self);\r\n\r\n self.constructsWithSearchText = ko.computed(function () {\r\n var searchText = self.constructSearchText();\r\n\r\n if (isUndefinedNullOrWhiteSpace(searchText)) {\r\n return this.constructs();\r\n }\r\n\r\n searchText = searchText.toLowerCase();\r\n\r\n return ko.utils.arrayFilter(this.constructs(), function (item) {\r\n return item.name.toLowerCase().indexOf(searchText) !== -1;\r\n });\r\n }, self);\r\n\r\n self.isShowConstructs = ko.computed(function () {\r\n return self.subjectIdForConstructs() != null;\r\n }, self);\r\n\r\n self.isShowNewConstruct = ko.computed(function () {\r\n return self.selectedConstruct() != null && self.selectedConstruct().constructId == -1;\r\n }, self);\r\n\r\n self.isShowNewTag = ko.computed(function () {\r\n return self.selectedTag() != null && self.selectedTag().tagId == -1;\r\n }, self);\r\n\r\n self.isShowQuestions = ko.computed(function () {\r\n\r\n if (self.filter.questionId() > 0\r\n && self.filter.currentFilter() === self.filter.tabs.question\r\n && self.filter.tab() === self.filter.tabs.question)\r\n return true;\r\n\r\n if (self.filter.subjectId() > 0\r\n && self.filter.currentFilter() === self.filter.tabs.subject\r\n && self.filter.tab() === self.filter.tabs.subject)\r\n return true;\r\n\r\n if (self.filter.topicUnitId() > 0\r\n && self.filter.currentFilter() === self.filter.tabs.scheme\r\n && self.filter.tab() === self.filter.tabs.scheme)\r\n return true;\r\n\r\n }, self);\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n self.subjectIdForConstructs.subscribe(function (newValue) {\r\n if (newValue) \r\n selectSubjectForConstructs();\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new ConstructsViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.isUndefinedNullOrWhiteSpace = function (str) {\r\n return isUndefinedNullOrWhiteSpace(str);\r\n }\r\n\r\n self.isNullOrWhiteSpace = function (str) {\r\n return isNullOrWhiteSpace(str);\r\n }\r\n\r\n self.addConstructToQuestions = function () {\r\n \r\n if (self.selectedConstruct().constructId == null) {\r\n toastr[\"error\"](\"You must select a construct to label questions with a construct.\", \"Error\");\r\n return;\r\n }\r\n\r\n if (self.selectedConstruct().constructId == -1 && isNullOrWhiteSpace(self.newConstructName())) {\r\n toastr[\"error\"](\"You must specify a name for the new construct.\", \"Error\");\r\n return;\r\n }\r\n\r\n if (self.selectedQuestions() == null || self.selectedQuestions().length == 0) {\r\n toastr[\"error\"](\"You must select some questions to label questions with a construct.\", \"Error\");\r\n return;\r\n }\r\n\r\n var questionIds = $.map(self.selectedQuestions(), function (item) { return item.questionId });\r\n\r\n if (self.selectedConstruct().constructId == -1) {\r\n // We need to create the construct before we label the questions with the construct\r\n createConstruct(self.newConstructName(), self.subjectIdForConstructs(), self.funFactForNewConstruct(),\r\n function (construct) {\r\n // Label the questions with the new construct.\r\n createConstructQuestions(construct, questionIds);\r\n });\r\n } else {\r\n // The construct already exists so we can go ahead with labelling straight away.\r\n createConstructQuestions(self.selectedConstruct(), questionIds);\r\n }\r\n }\r\n\r\n self.addTagToQuestions = function () {\r\n\r\n if (self.selectedTag().tagId == null) {\r\n toastr[\"error\"](\"You must select a tag to label questions with a tag.\", \"Error\");\r\n return;\r\n }\r\n\r\n if (self.selectedTag().tagId == -1 && isNullOrWhiteSpace(self.newTagName())) {\r\n toastr[\"error\"](\"You must specify a name for the new tag.\", \"Error\");\r\n return;\r\n }\r\n\r\n if (self.selectedQuestions() == null || self.selectedQuestions().length == 0) {\r\n toastr[\"error\"](\"You must select some questions to label questions with a tag.\", \"Error\");\r\n return;\r\n }\r\n\r\n var questionIds = $.map(self.selectedQuestions(), function (item) { return item.questionId });\r\n\r\n if (self.selectedTag().tagId == -1) {\r\n // We need to create the tag before we label the questions with the tag\r\n createTag(self.newTagName(), self.rootSubjectId(),\r\n function (tag) {\r\n // Label the questions with the new tag.\r\n createQuestionTags(tag, questionIds);\r\n });\r\n } else {\r\n // The tag already exists so we can go ahead with labelling straight away.\r\n createQuestionTags(self.selectedTag(), questionIds);\r\n }\r\n }\r\n\r\n self.failModeration = function (question) {\r\n \r\n var model = {\r\n moderation: 'Failed'\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/questions/' + question.questionId,\r\n type: 'PUT',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n self.questions.remove(question);\r\n toastr[\"success\"](\"Question marked as failed moderation.\", \"Success\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.selectTabScheme = function () {\r\n self.filter.tab(self.filter.tabs.scheme);\r\n\r\n if (!self.filter.schemes().length) {\r\n // Get the schemes if they are not loaded\r\n getSchemes();\r\n }\r\n }\r\n\r\n self.selectTabQuestion = function () {\r\n self.filter.tab(self.filter.tabs.question);\r\n }\r\n\r\n self.selectTabSubject = function () {\r\n self.filter.tab(self.filter.tabs.subject);\r\n\r\n if (!self.filter.subjects().length) {\r\n getSubjects();\r\n }\r\n }\r\n\r\n self.deleteConstructQuestion = function (construct, question) {\r\n\r\n var model = [{\r\n questionId: question.questionId,\r\n constructId: construct.constructId\r\n }];\r\n\r\n $.ajax({\r\n url: '/v1/construct-questions',\r\n type: 'DELETE',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function () {\r\n question.constructs.remove(function (item) {\r\n return item.constructId == construct.constructId;\r\n });\r\n toastr[\"success\"](\"Removed construct from question.\", \"Success\");\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.deleteQuestionTag = function (tag, question) {\r\n\r\n var model = [{\r\n questionId: question.questionId,\r\n tagId: tag.tagId\r\n }];\r\n\r\n $.ajax({\r\n url: '/v1/question-tags',\r\n type: 'DELETE',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function () {\r\n question.tags.remove(function (item) {\r\n return item.tagId == tag.tagId;\r\n });\r\n toastr[\"success\"](\"Removed tag from question.\", \"Success\");\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.selectScheme = function() {\r\n getTopicUnits();\r\n }\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function updateQuestionsWithConstruct(construct, questionIds) {\r\n for (var i = 0; i < self.questions().length; i++) {\r\n if (questionIds.includes(self.questions()[i].questionId)) {\r\n var existing = ko.utils.arrayFilter(self.questions()[i].constructs(), function (item) {\r\n return item.constructId == construct.constructId;\r\n });\r\n \r\n if (!Array.isArray(existing) || !existing.length) {\r\n self.questions()[i].constructs.push(construct);\r\n }\r\n }\r\n };\r\n }\r\n\r\n function updateQuestionsWithTag(tag, questionIds) {\r\n for (var i = 0; i < self.questions().length; i++) {\r\n if (questionIds.includes(self.questions()[i].questionId)) {\r\n var existing = ko.utils.arrayFilter(self.questions()[i].tags(), function (item) {\r\n return item.tagId == tag.tagId;\r\n });\r\n\r\n if (!Array.isArray(existing) || !existing.length) {\r\n self.questions()[i].tags.push(tag);\r\n }\r\n }\r\n };\r\n }\r\n\r\n function addNewConstructToDropdown(construct) {\r\n var index = self.constructs().length - 1;\r\n\r\n self.constructs.splice(index, 0, construct);\r\n self.selectedConstruct(self.constructs()[index]);\r\n self.newConstructName('');\r\n }\r\n\r\n function addNewTagToDropdown(tag) {\r\n var index = self.tags().length - 1;\r\n\r\n self.tags.splice(index, 0, tag);\r\n self.selectedTag(self.tags()[index]);\r\n self.newTagName('');\r\n }\r\n\r\n function filterBySubject() {\r\n clearErrors();\r\n \r\n getQuestionsBySubject(1, false);\r\n }\r\n\r\n function filterByQuestion() {\r\n clearErrors();\r\n\r\n getQuestion();\r\n }\r\n\r\n function filterByTopicUnit() {\r\n clearErrors();\r\n\r\n getQuestionsByTopicUnit();\r\n }\r\n\r\n function selectSubjectForConstructs() {\r\n getConstructs();\r\n }\r\n \r\n function unselectAllQuestions() {\r\n for (var i = 0; i < self.questions().length; i++) {\r\n self.questions()[i].isSelected(false);\r\n };\r\n }\r\n\r\n function clearErrors() {\r\n $('.input-validation-error')\r\n .removeClass('input-validation-error');\r\n\r\n $('.field-validation-error')\r\n .remove();\r\n }\r\n\r\n function displayErrors(errors) {\r\n\r\n for (var i = 0; i < errors.length; i++) {\r\n\r\n $('')\r\n .html(errors[i].Value[0])\r\n .appendTo($('#' + errors[i].Key).parent());\r\n\r\n $('#' + errors[i].Key)\r\n .addClass('input-validation-error');\r\n }\r\n }\r\n\r\n function getSchemeIdFromHash() {\r\n var hashArray = hasher.getHashAsArray();\r\n\r\n if (hashArray[0] !== 'schemes')\r\n return null;\r\n\r\n if (typeof (hashArray[1]) === 'undefined')\r\n return null;\r\n\r\n return hashArray[1];\r\n }\r\n\r\n function uniqueSequences() {\r\n\r\n var sequences = self.questions().map(function (item) { return item.sequence; });\r\n\r\n // Get only the first occurence of each value\r\n sequences = sequences.filter(function (v, i) { return sequences.indexOf(v) == i; });\r\n\r\n sequences = sequences.sort(function (a, b) {\r\n return a - b\r\n });\r\n\r\n self.sequences(sequences);\r\n }\r\n\r\n function initConstructsAndTags() {\r\n if (!self.subjectsForConstructs().length) {\r\n getSubjectsForConstructs();\r\n }\r\n if (!self.tags().length) {\r\n getTags();\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function getSchemes(schemeId, topicUnitId) {\r\n\r\n var model = {};\r\n\r\n $.ajax({\r\n url: '/v1/schemes/',\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var schemes = data.sort(function (a, b) {\r\n if (a.name < b.name) { return -1; }\r\n if (a.name > b.name) { return 1; }\r\n return 0;\r\n });\r\n schemes = $.map(schemes,\r\n function (item) { return new Scheme(item) });\r\n schemes.unshift({\r\n schemeId: null,\r\n name: 'Choose a scheme...'\r\n });\r\n\r\n self.filter.schemes(schemes);\r\n\r\n if (schemeId) {\r\n self.filter.schemeId(schemeId);\r\n getTopicUnits(topicUnitId);\r\n }\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getTopicUnits(topicUnitId) {\r\n\r\n var model = {};\r\n\r\n $.ajax({\r\n url: '/v1/schemes/' + self.filter.schemeId(),\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var topicUnits = data.topicUnits.sort(function (a, b) {\r\n return a.StartInHalfWeeks - b.StartInHalfWeeks\r\n });\r\n topicUnits = $.map(topicUnits,\r\n function (item) { return new TopicUnit(item) });\r\n topicUnits.unshift({\r\n topicUnitId: null,\r\n name: 'Choose a topic unit...'\r\n });\r\n\r\n // Filter out topic units with no quizzes\r\n topicUnits = topicUnits.filter(function (v, i) {\r\n return Array.isArray(v.quizzes) && v.quizzes.length\r\n });\r\n \r\n self.filter.topicUnits(topicUnits);\r\n\r\n if (topicUnitId) {\r\n self.filter.topicUnitId(topicUnitId);\r\n filterByTopicUnit();\r\n }\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getSubjectsForConstructs() {\r\n\r\n var model = {};\r\n\r\n $.ajax({\r\n url: '/v1/subjects?includes=no-constructs-questions-count&filter.hasChildren=false&filter.ancestorId=' + self.rootSubjectId(),\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var subjects = data.sort(function (a, b) {\r\n return a.globalSequence - b.globalSequence;\r\n });\r\n subjects = $.map(subjects,\r\n function (item) { return new Subject(item) });\r\n subjects.unshift({\r\n subjectId: -1,\r\n name: 'All subjects'\r\n });\r\n subjects.unshift({\r\n subjectId: null,\r\n name: 'Choose a subject to see the constructs...'\r\n });\r\n\r\n self.subjectsForConstructs(subjects);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n }\r\n \r\n function getSubjects(subjectId) {\r\n\r\n var model = {};\r\n\r\n $.ajax({\r\n url: '/v1/subjects?includes=no-constructs-questions-count&filter.hasChildren=false&filter.ancestorId=' + self.rootSubjectId(),\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var subjects = data.sort(function (a, b) {\r\n return a.globalSequence - b.globalSequence;\r\n });\r\n subjects = $.map(subjects,\r\n function (item) { return new Subject(item) });\r\n subjects.unshift({\r\n subjectId: null,\r\n name: 'Choose a subject...'\r\n });\r\n\r\n self.filter.subjects(subjects);\r\n\r\n if (subjectId) {\r\n self.filter.subjectId(subjectId);\r\n filterBySubject();\r\n }\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getQuestionsByTopicUnit() {\r\n try {\r\n var topicUnit;\r\n var filterTopicUnitId = self.filter.topicUnitId();\r\n\r\n // added a \"forEach\" instead of a \"find\" because IE11 isn't compatible with \"find\".\r\n self.filter.topicUnits().forEach(function(val) {\r\n console.log(val.topicUnitId, filterTopicUnitId);\r\n if (val.topicUnitId === filterTopicUnitId) {\r\n topicUnit = val;\r\n }\r\n });\r\n\r\n console.log(topicUnit);\r\n \r\n self.questions([]);\r\n\r\n hideQuestionPager();\r\n\r\n self.filter.tab(self.filter.tabs.scheme);\r\n\r\n if (Array.isArray(topicUnit.quizzes) && topicUnit.quizzes.length) {\r\n // Make sure you pass in a copy or it all goes crazy.\r\n var copy = topicUnit.quizzes.slice();\r\n\r\n getQuestionsByQuizzes(copy);\r\n } else {\r\n toastr['error']('There are no quizzes in this topic unit.', 'Error');\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n // Given an array of quizzes get the questions in the first quiz and add them to the list of\r\n // questions. Then call the function again passing in the other quizzes. When there are no\r\n // quizzes left to process calculate the sequences to populate the sequences filter.\r\n function getQuestionsByQuizzes(quizzes) {\r\n\r\n var quiz = quizzes.pop();\r\n\r\n var url = '/v1/quizzes/' + quiz.quizId + '/questions?includes=constructs&includes=tags';\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var questions = $.map(data,\r\n function (item) { return new Question(item) });\r\n\r\n ko.utils.arrayPushAll(self.questions, questions);\r\n\r\n if (quizzes.length > 0) {\r\n getQuestionsByQuizzes(quizzes);\r\n } else {\r\n self.filter.currentFilter(self.filter.tabs.scheme);\r\n\r\n uniqueSequences();\r\n }\r\n \r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n \r\n function getQuestionsBySubject(page, isChangingPage) {\r\n\r\n page = (typeof page !== 'undefined') ? page : 1;\r\n isChangingPage = (typeof isChangingPage !== 'undefined') ? isChangingPage : false;\r\n \r\n var skip = (page - 1) * pageSize;\r\n\r\n var url = '/v1/questions?request.filter.subjectId='\r\n + self.filter.subjectId()\r\n + '&includes=constructs&includes=tags'\r\n + '&request.take=' + pageSize + '&request.skip=' + skip;\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var questions = $.map(data.data,\r\n function (item) { return new Question(item) });\r\n self.questions(questions);\r\n if (!isChangingPage) {\r\n updateQuestionPager(1, Math.ceil(data.total / pageSize));\r\n }\r\n self.filter.tab(self.filter.tabs.subject);\r\n self.filter.currentFilter(self.filter.tabs.subject);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function getQuestion() {\r\n\r\n var url = '/v1/questions/' + self.filter.questionId()\r\n + '?includes=constructs&includes=tags';\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var question = new Question(data);\r\n self.questions([question]);\r\n\r\n hideQuestionPager();\r\n\r\n self.filter.tab(self.filter.tabs.question);\r\n self.filter.currentFilter(self.filter.tabs.question);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function getConstructs() {\r\n \r\n var subjectId = self.subjectIdForConstructs();\r\n var url = '';\r\n\r\n if (subjectId > 0) {\r\n url = '/v1/subjects/' + subjectId + '/constructs';\r\n } else {\r\n url = '/v1/constructs';\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var constructs = $.map(data,\r\n function (item) { return new Construct(item) });\r\n constructs.push({\r\n constructId: -1,\r\n name: 'Create a new construct...'\r\n });\r\n self.constructs(constructs);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function getTags() {\r\n\r\n $.ajax({\r\n url: '/v1/subjects/' + self.rootSubjectId() + '/tags',\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var tags = $.map(data,\r\n function (item) { return new Tag(item) });\r\n tags.unshift({\r\n tagId: null,\r\n name: 'Choose a tag...'\r\n });\r\n tags.push({\r\n tagId: -1,\r\n name: 'Create a new tag...'\r\n });\r\n self.tags(tags);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function createConstruct(name, subjectId, funFact, callback) {\r\n\r\n if (isNullOrWhiteSpace(name)) {\r\n toastr[\"error\"](\"You must specify a name for the new construct.\", \"Error\");\r\n return;\r\n }\r\n\r\n if (subjectId < 0) {\r\n subjectId = null;\r\n }\r\n\r\n var model = {\r\n name: name,\r\n subjectId: subjectId,\r\n funFact: funFact\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/constructs',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var construct = new Construct(data);\r\n\r\n addNewConstructToDropdown(construct);\r\n\r\n toastr[\"success\"](\"A new construct was created.\", \"Success\");\r\n \r\n if (typeof (callback) === \"function\") {\r\n callback(construct);\r\n }\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function createTag(name, subjectId, callback) {\r\n\r\n if (isNullOrWhiteSpace(name)) {\r\n toastr[\"error\"](\"You must specify a name for the new tag.\", \"Error\");\r\n return;\r\n }\r\n\r\n var model = {\r\n name: name,\r\n subjectId: subjectId\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/tags',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var tag = new Tag(data);\r\n\r\n addNewTagToDropdown(tag);\r\n\r\n toastr[\"success\"](\"A new tag was created.\", \"Success\");\r\n\r\n if (typeof (callback) === \"function\") {\r\n callback(tag);\r\n }\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function createConstructQuestions(construct, questionIds) {\r\n\r\n var model = $.map(questionIds,\r\n function (item) {\r\n return new ConstructQuestion(construct.constructId, item);\r\n });\r\n \r\n $.ajax({\r\n url: '/v1/construct-questions',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n // Respond to the event that the questions have been tagged.\r\n // need to get the construct here?\r\n\r\n updateQuestionsWithConstruct(construct, questionIds);\r\n\r\n toastr[\"success\"](\"The construct was added to the selected questions!\", \"Success\");\r\n unselectAllQuestions();\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function createQuestionTags(tag, questionIds) {\r\n\r\n var model = $.map(questionIds,\r\n function (item) {\r\n return new QuestionTag(tag.tagId, item);\r\n });\r\n\r\n $.ajax({\r\n url: '/v1/question-tags',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n updateQuestionsWithTag(tag, questionIds);\r\n\r\n toastr[\"success\"](\"The tag was added to the selected questions!\", \"Success\");\r\n\r\n unselectAllQuestions();\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function isUndefinedNullOrWhiteSpace(str) {\r\n return typeof (str) === \"undefined\" || isNullOrWhiteSpace(str);\r\n }\r\n \r\n function isNullOrWhiteSpace(str) {\r\n return str === null || !/\\S/.test(str);\r\n }\r\n\r\n function hideQuestionPager() {\r\n\r\n $(\"#questions-pager-container\").html('');\r\n\r\n }\r\n\r\n function updateQuestionPager(page, totalPages) {\r\n\r\n $(\"#questions-pager-container\").html('');\r\n\r\n $(\"#questions-pager\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n\r\n return getQuestionsBySubject(page, true);\r\n }\r\n });\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n\r\n // The default route is schemes\r\n crossroads.addRoute('',\r\n function () {\r\n initConstructsAndTags();\r\n\r\n if (!self.filter.schemes().length) {\r\n getSchemes();\r\n }\r\n });\r\n \r\n crossroads.addRoute('schemes/{schemeId}/topics/{topicUnitId}',\r\n function (schemeId, topicUnitId) {\r\n initConstructsAndTags();\r\n\r\n if (!self.filter.schemes().length) {\r\n // Get the schemes if they are not loaded\r\n getSchemes(schemeId, topicUnitId);\r\n } else {\r\n if (!self.filter.topicUnits().length\r\n || self.filter.schemeId().toString() !== schemeId) {\r\n // Get the topic units if they are not loaded or\r\n // the correct ones are not loaded\r\n self.filter.schemeId(schemeId);\r\n\r\n getTopicUnits(topicUnitId);\r\n } else {\r\n self.filter.topicUnitId(topicUnitId);\r\n filterByTopicUnit();\r\n }\r\n }\r\n\r\n });\r\n\r\n crossroads.addRoute('questions/{questionId}',\r\n function (questionId) {\r\n initConstructsAndTags();\r\n\r\n self.filter.questionId(questionId);\r\n filterByQuestion();\r\n });\r\n\r\n crossroads.addRoute('subjects/{subjectId}',\r\n function (subjectId) {\r\n initConstructsAndTags();\r\n\r\n if (!self.filter.subjects().length) {\r\n getSubjects(subjectId);\r\n } else {\r\n self.filter.subjectId(subjectId);\r\n filterBySubject();\r\n }\r\n });\r\n\r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', window.location.href.replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/data/assignments',['jquery', 'tmpl', 'jqueryValidate', 'bootstrap', 'moment', 'bootstrapDateTimePicker', 'jqueryBootstrapPagination'], function ($, tmpl) {\r\n\r\n $(function () {\r\n\r\n $(\"#assignments-pager\").pagination({\r\n total_pages: $(\"#assignments-pager\").data('assignmentsnumpage'),\r\n current_page: 1,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return loadAssignmentsPage(page);\r\n }\r\n });\r\n \r\n $(\"#order-assignments-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n });\r\n\r\n $('#UserFilter').change(function () {\r\n\r\n switch (this.value) {\r\n case \"Group\":\r\n $('#DataFilter_SelectedGroupId').removeClass('hide');\r\n $('.js-filter-dropdown').not('#DataFilter_SelectedGroupId').addClass('hide');\r\n break;\r\n case \"Teacher\":\r\n $('#DataFilter_SelectedTeacherId').removeClass('hide');\r\n $('.js-filter-dropdown').not('#DataFilter_SelectedTeacherId').addClass('hide');\r\n break;\r\n default:\r\n $('.js-filter-dropdown').addClass('hide');\r\n break;\r\n };\r\n\r\n });\r\n\r\n\r\n function loadAssignmentsPage(page) {\r\n\r\n var model = {};\r\n\r\n var pager = $(\"#assignments-pager\");\r\n\r\n model.datafilter = {};\r\n\r\n model.datafilter.userfilter = pager.data('userfilter');\r\n model.datafilter.startdate = pager.data('startdate');\r\n model.datafilter.enddate = pager.data('enddate');\r\n model.datafilter.isfilteredbydaterange = pager.data('isfilteredbydaterange');\r\n model.datafilter.selectedgroupid = pager.data('selectedgroupid');\r\n model.datafilter.selectedteacherid = pager.data('selectedteacherid');\r\n model.orderby = pager.data('orderby');\r\n model.assignmentspage = page;\r\n\r\n var url = '/Data/LoadAssignmentAverageMarks';\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (assignments) {\r\n\r\n var assignemntHtml = '';\r\n\r\n assignments.forEach(function (assignment) {\r\n assignemntHtml += tmpl(\"tmpl-assignment-average-mark\", assignment);\r\n });\r\n\r\n $('#assignments-container').html(assignemntHtml);\r\n\r\n }\r\n });\r\n }\r\n\r\n \r\n\r\n});\n","define('pages/data/default',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/data/explanations',['jquery', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n $(\"#order-explanations-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n });\r\n \r\n});\n","define('pages/data/index',[\r\n 'jquery',\r\n 'd3',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'dataFilterProcessor',\r\n 'toastr',\r\n 'moment',\r\n 'bootstrap',\r\n 'chosen',\r\n 'jqueryBootstrapPagination',\r\n 'bootstrapDateTimePicker'\r\n],\r\nfunction (\r\n $,\r\n d3,\r\n ko,\r\n crossroads,\r\n hasher,\r\n dataFilterProcessor,\r\n toastr\r\n) {\r\n\r\n var maxCohortIndex = 0,\r\n sunburstIndex_cohortName = [],\r\n sunburstIndex_deleted = [],\r\n paths = [],\r\n lockSubjectNodes = [],\r\n highlightSubjectIds = [],\r\n size,\r\n radius,\r\n y;\r\n\r\n var colors = d3.scale.threshold()\r\n .domain([0.2, 0.4, 0.6, 0.8])\r\n .range(['#e24d42', '#f2814a', '#f5e547', '#a0cf41', '#649600']);\r\n\r\n var bases = [\r\n '#48aae7',\r\n '#f8e646',\r\n '#ea4c89',\r\n '#f3824a'\r\n ];\r\n\r\n var barBackground = '#848484';\r\n \r\n var x = d3.scale.linear()\r\n .range([0, 2 * Math.PI]);\r\n\r\n var tooltip = d3.select('body').append('div')\r\n .attr('class', 'data-subjects__tooltip');\r\n\r\n tooltip.append('div')\r\n .attr('class', 'data-subjects__tooltip__subject');\r\n\r\n tooltip.append('div')\r\n .attr('class', 'data-subjects__tooltip__percentage');\r\n\r\n tooltip.append('svg')\r\n .attr('class', 'data-subjects__tooltip__barchart');\r\n\r\n\r\n var self,\r\n existingCohortNames = [],\r\n currentSelectedCohortName;\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n \r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n ko.bindingHandlers.donut = {\r\n update: function (element, valueAccessor) {\r\n element.innerHTML = '';\r\n var percent = ko.unwrap(valueAccessor());\r\n drawDonut(percent, element);\r\n }\r\n };\r\n\r\n //ko.bindingHandlers.updatePager = {\r\n // update: function (element, valueAccessor) {\r\n // var cohortName = valueAccessor();\r\n\r\n // var pageRecord = getPageInfo(cohortName);\r\n // if (pageRecord != null) {\r\n\r\n // if (currentCohortName != cohortName) {\r\n // currentCohortName = cohortName;\r\n // applyAnswerFilter();\r\n // }\r\n // }\r\n // }\r\n //};\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout Components\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.components.register('filter-widget', {\r\n viewModel:\r\n { require: '/App/scripts/components/dq-data-filter.js' },\r\n template:\r\n { require: 'text!/App/scripts/components/dq-data-filter.html' }\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function DataSubjectsViewModel() {\r\n\r\n self = this;\r\n\r\n self.currentPage = ko.observable();\r\n\r\n self.QuestionOrderByChoices = [\r\n { name: \"Incorrect\", value: \"Incorrect\" },\r\n { name: \"Correct\", value: \"Correct\" },\r\n { name: \"Most Answered\", value: \"MostAnswered\" },\r\n { name: \"Even Spread\", value: \"EvenSpread\" }\r\n ];\r\n\r\n self.StudentOrderByChoices = [\r\n { name: \"Last Name\", value: \"LastName\" },\r\n { name: \"Lowest Average\", value: \"LowAverage\" },\r\n { name: \"Highest Average\", value: \"HighAverage\" },\r\n { name: \"Most Answers\", value: \"Answers\" }\r\n ];\r\n \r\n self.QuestionOrderBy = ko.observable(self.QuestionOrderByChoices[0]);\r\n self.StudentOrderBy = ko.observable(self.StudentOrderByChoices[0]);\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self.userRole = $('#usertype').data('userrole');\r\n self.userId = $('#userId').data('userid');\r\n self.classpackage = $('#usertype').data('userrole') == 'Teacher';\r\n self.departmentpackage = $('#usertype').data('userrole') == 'Teacher';\r\n\r\n self.schoolId = viewmodel.SchoolId;\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n // States\r\n //self.isAdvanced = ko.observable('Basic');\r\n\r\n self.isShowFilter = ko.observable(true);\r\n\r\n self.currentFilterClass = ko.observable('All');\r\n\r\n // Cohort\r\n self.cohorts = ko.observableArray([]);\r\n self.selectedCohortName = ko.observable();\r\n self.selectedSubject = ko.observable({ name: 'Root', id: null });\r\n\r\n self.selectedCohort = ko.observable(null);\r\n self.isStudentsLoaded = ko.observable(false);\r\n self.isQuestionsLoaded = ko.observable(false);\r\n\r\n self.selectedUserId = ko.observable(null);\r\n\r\n self.clickMode = ko.observable('Lock');\r\n\r\n self.isShowSubjects = ko.observable(true);\r\n self.isShowQuestions = ko.observable(true);\r\n self.isShowStudents = ko.observable(true);\r\n\r\n self.lowestList = ko.observable([]);\r\n self.highestList = ko.observable([]);\r\n\r\n self.detailsForStudents = ko.observable({});\r\n\r\n self.rootSubjectId = ko.observable(0);\r\n self.rootSubject = ko.observable({ Name : 'Root' });\r\n\r\n self.selectedClassId = ko.observable();\r\n self.selectedClassName = ko.observable();\r\n self.selectedDepartmentId = ko.observable();\r\n self.selectedDepartmentName = ko.observable();\r\n\r\n\r\n self.currentParams = ko.observable(\"\");\r\n\r\n self.studentList = ko.observable([]);\r\n\r\n self.isSubjectLocked = ko.observable({});\r\n\r\n self.generatingReports = ko.observable(false);\r\n self.summaryButtonText = ko.observable(\"Get All Assignments Summary\");\r\n //\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.rootSubjectId.subscribe(function (newValue) {\r\n if (self.currentPage() != 'Data') {\r\n return;\r\n }\r\n updateSubjectInsights(newValue);\r\n zoomInToCurrentRoot();\r\n });\r\n\r\n self.QuestionOrderBy.subscribe(function () {\r\n var subjectId = self.selectedSubject().id;\r\n \r\n if (subjectId == null) {\r\n subjectId = self.rootSubjectId();\r\n }\r\n\r\n getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.QuestionOrderBy().value, 1, false);\r\n });\r\n\r\n self.StudentOrderBy.subscribe(function () {\r\n var subjectId = self.selectedSubject().id;\r\n\r\n if (subjectId == null) {\r\n subjectId = self.rootSubjectId();\r\n }\r\n\r\n getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.StudentOrderBy().value, 1, false);\r\n });\r\n\r\n self.selectedCohort.subscribe(function () {\r\n if (self.selectedCohort() == null)\r\n return;\r\n if (self.selectedCohort().filter.userfilter == 'Student') {\r\n self.selectedUserId(self.selectedCohort().filter.selecteduserid);\r\n } else if (self.selectedCohort().filter.userfilter == 'Mine') {\r\n self.selectedUserId(self.userId);\r\n }\r\n else {\r\n self.selectedUserId(null);\r\n }\r\n \r\n selectCohortShowBorder(self.selectedCohort().index);\r\n\r\n var subjectId = self.selectedSubject().id;\r\n\r\n if (subjectId == null) {\r\n subjectId = self.rootSubjectId();\r\n }\r\n\r\n if (self.isShowQuestions()) {\r\n getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.QuestionOrderBy().value, 1, false);\r\n }\r\n if (self.isShowStudents() && self.selectedCohort().isShowDots) {\r\n getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.StudentOrderBy().value, 1, false);\r\n }\r\n d3.select('#js-barchart-' + self.selectedSubject().id).select('div').attr('style', 'border-color: ' + self.getCurrentCohortColor());\r\n\r\n updateSubjectInsights(self.rootSubjectId());\r\n });\r\n\r\n self.selectedSubject.subscribe(function () {\r\n if (self.selectedCohort() == null)\r\n return;\r\n selectSubjectBorder(self.selectedSubject().id);\r\n\r\n var subjectId = self.selectedSubject().id;\r\n\r\n if (subjectId == null) {\r\n subjectId = self.rootSubjectId();\r\n }\r\n\r\n if (self.isShowQuestions()) {\r\n getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.QuestionOrderBy().value, 1, false);\r\n }\r\n if (self.isShowStudents() && self.selectedCohort().isShowDots) {\r\n getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.StudentOrderBy().value, 1, false);\r\n }\r\n });\r\n\r\n var tempFilterClassValue = 'Full';\r\n\r\n self.currentPage.subscribe(function (oldValue) {\r\n if (oldValue != null) {\r\n tempFilterClassValue = oldValue;\r\n }\r\n }, this, \"beforeChange\");\r\n\r\n self.currentPage.subscribe(function (newValue) {\r\n if (newValue == 'Data') {\r\n } else {\r\n clearData();\r\n }\r\n });\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n\r\n }\r\n\r\n\r\n ko.applyBindings(new DataSubjectsViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n self.showFilter = function () {\r\n self.isShowFilter(true);\r\n }\r\n\r\n self.applyFilter = function (filter) {\r\n var hashUrl = hasher.getHash();\r\n\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n if (dataFilterProcessor.getCohortNameByUrl(url,\r\n self.cohorts().map(function (cohort)\r\n {\r\n return {\r\n name: cohort.CohortDetails.Name,\r\n url: cohort.CohortDetails.FilterUrl\r\n };\r\n })) != null) {\r\n toastr['error']('Cohort already exist!', 'Error');\r\n return;\r\n }\r\n\r\n if (hashUrl == '') {\r\n hasher.replaceHash(hashUrl + url);\r\n } else {\r\n hasher.setHash(hashUrl + url);\r\n }\r\n }\r\n\r\n self.applyFilterFromOther = function (filter) {\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n if (filter.userfilter == 'Group') {\r\n hasher.setHash(hasher.getHash() + '/' + filter.selectedgroupid + '/' + url);\r\n } else if (filter.userfilter == 'Department') {\r\n hasher.setHash(hasher.getHash() + '/' + filter.selecteddepartmentid + '/');\r\n } else {\r\n hasher.setHash(hasher.getHash() + '/' + url);\r\n }\r\n }\r\n\r\n self.deleteCohort = function (filterUrl) {\r\n var currentHash = hasher.getHash();\r\n var newHash = currentHash.replace(filterUrl, '');\r\n hasher.setHash(newHash);\r\n }\r\n\r\n self.clearLock = function () {\r\n clearLockSubjects();\r\n self.selectedSubject({ name: 'All Subjects', id: null });\r\n }\r\n\r\n self.questionPageUrl = function (QuestionId) {\r\n var url = '/Data/Question/' + QuestionId + '#/' + self.currentParams();\r\n return url;\r\n }\r\n\r\n self.getPercentageString = function (percentage) {\r\n if (percentage == null || isNaN(percentage))\r\n return percentage;\r\n else\r\n return Math.round(percentage * 100) + '%';\r\n }\r\n\r\n self.getPercentageFromCount = function (count, total) {\r\n if (total == 0)\r\n return 0;\r\n else\r\n return Math.round(count / total * 100);\r\n }\r\n\r\n\r\n self.selectUserDot = function (userId) {\r\n self.selectedUserId(userId);\r\n }\r\n\r\n self.getAnswerValueLabel = function (answerValue) {\r\n return String.fromCharCode(answerValue + 'A'.charCodeAt(0) - 1);\r\n }\r\n\r\n self.getCurrentCohortColor = function () {\r\n if (self.selectedCohort() == null)\r\n return '';\r\n return bases[self.selectedCohort().index % bases.length];\r\n }\r\n\r\n self.selectedCohortByCohortName = function (cohortName) {\r\n // Avoid triggering select cohort event \r\n // when clicking on the current cohort (for example selecting subject).\r\n // This can avoid duplicate call to IndexQuestionJson and StudentsJson\r\n if (self.selectedCohortName() != cohortName)\r\n self.selectedCohort(findCohort(cohortName));\r\n }\r\n\r\n self.addStudentCohort = function (student) {\r\n var filter = { };\r\n filter.userfilter = 'Student';\r\n filter.selecteduserid = student.UserId;\r\n self.applyFilter(filter);\r\n toastr['success']('We\\'ve added a new subject sunburst at the top.', 'Scroll Up')\r\n }\r\n\r\n self.getStudentDetails = function (student) {\r\n getStudentSubjectsData(student);\r\n }\r\n\r\n self.showStudentExplanations = function (UserId) {\r\n self.selectUserDot(UserId)\r\n scrollToAnchor('questions-container');\r\n }\r\n\r\n self.selectSubjectByClickInsight = function (d) {\r\n if (self.isSubjectLocked()[d.SubjectId] == true) {\r\n deleteSubject(d.SubjectId);\r\n } else {\r\n addLockSubject(d);\r\n var subject = {\r\n name: d.Name,\r\n id: d.SubjectId\r\n }\r\n self.selectedSubject(subject);\r\n }\r\n \r\n }\r\n\r\n self.subjectInsight = function () {\r\n hasher.setHash('Subject');\r\n }\r\n\r\n self.studentInsight = function () {\r\n if (self.classpackage) {\r\n hasher.setHash('Student/Mine///////');\r\n }\r\n }\r\n\r\n self.classInsight = function () {\r\n hasher.setHash('Class');\r\n }\r\n\r\n self.departmentInsight = function () {\r\n hasher.setHash('Department');\r\n }\r\n\r\n self.enterSubjectInsight = function (subjectId) {\r\n self.rootSubjectId(subjectId);\r\n hasher.setHash('Subject/All///////');\r\n }\r\n \r\n self.topQuestionsAnchor = function () {\r\n scrollToAnchor('questions-container');\r\n }\r\n\r\n self.topSubjectsAnchor = function () {\r\n scrollToAnchor('top-subjects-container');\r\n }\r\n\r\n self.changeClass = function () {\r\n hasher.setHash('Class');\r\n }\r\n\r\n self.getAllAssignmentSummary = function() {\r\n var groupId = self.selectedClassId();\r\n\r\n var model = {\r\n groupId: groupId\r\n };\r\n\r\n self.generatingReports(true);\r\n self.summaryButtonText(\"Generating...\");\r\n $.ajax({\r\n url: '/Data/GenerateAllAssignmentsSummary',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function(data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Reports generated, start downloading...\", \"Success\");\r\n var url = '/Data/DownloadCsvForAssignmentsSummary?sourcePath=' + data.path;\r\n $(\"body\").append(\"\");\r\n self.generatingReports(false);\r\n self.summaryButtonText(\"Get All Assignments Summary\");\r\n } else {\r\n toastr[\"warning\"](data.status, \"Error\");\r\n self.generatingReports(false);\r\n self.summaryButtonTexte(\"Get All Assignments Summary\");\r\n }\r\n }\r\n });\r\n };\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function updateStudentPager(page, totalPages) {\r\n\r\n $(\"#students-pager-container\").html('');\r\n $(\"#students-pager-container\").html('');\r\n\r\n $(\"#students-pager-container\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n\r\n var subjectId = self.selectedSubject().id;\r\n\r\n if (subjectId == null) {\r\n subjectId = self.rootSubjectId();\r\n }\r\n\r\n return getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.StudentOrderBy().value, page, true);\r\n }\r\n });\r\n }\r\n\r\n function updateQuestionPager(page, totalPages) {\r\n\r\n $(\"#questions-pager-container\").html('');\r\n $(\"#questions-pager-container\").html('');\r\n\r\n $(\"#questions-pager-container\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n\r\n var subjectId = self.selectedSubject().id;\r\n\r\n if (subjectId == null) {\r\n subjectId = self.rootSubjectId();\r\n }\r\n\r\n return getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, subjectId, self.QuestionOrderBy().value, page, true);\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function applyFilter(filter) {\r\n\r\n var cohortName = getCohortName(filter);\r\n\r\n cohortName = addCohort(cohortName, filter);\r\n\r\n if (self.isShowSubjects()) {\r\n getSubjectsData(filter, cohortName);\r\n }\r\n }\r\n\r\n function getSubjectsData(filter, cohortName) {\r\n\r\n var model = {\r\n filter: filter\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/SubjectsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n var newHash = hasher.getHash().replace(url, '');\r\n replaceHashSilently(newHash);\r\n } else {\r\n drawSunburst(data.model.SubjectAnswerCounts, cohortName, filter);\r\n var cohort = findCohort(cohortName);\r\n cohort.subjects(data.model.SubjectAnswerCounts);\r\n\r\n updateSubjectInsights(self.rootSubjectId());\r\n\r\n updateLockedSubjects();\r\n selectCohortShowBorder(self.selectedCohort().index);\r\n zoomInToCurrentRoot();\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getStudentSubjectsData(student) {\r\n var model = {\r\n userId: student.UserId\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/StudentsDetailsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n\r\n var details = {};\r\n details.subjects = data.model;\r\n\r\n var node = findTreeNode(details.subjects, self.rootSubjectId());\r\n\r\n var result = getTopSubjectList(node);\r\n details.highestList = result.highest;\r\n details.lowestList = result.lowest;\r\n details.reputation = data.reputation;\r\n\r\n self.detailsForStudents()[student.UserId] = details;\r\n self.detailsForStudents(self.detailsForStudents());\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getTopSubjectList(root) {\r\n\r\n var MaxListLength = 5;\r\n\r\n var lowestList = [],\r\n highestList = [],\r\n lowestThreshold = 1,\r\n highestThreshold = 0,\r\n lowestIndex = 0,\r\n highestIndex = 0;\r\n\r\n var leafNodes = [];\r\n \r\n traversalSubjectTree(root);\r\n\r\n var temp = [];\r\n\r\n \r\n\r\n if (leafNodes.length <= MaxListLength) {\r\n lowestList = leafNodes;\r\n highestList = leafNodes;\r\n } else {\r\n // answer count should be greater than this\r\n var threshold = Math.max(20, (root.Total / leafNodes.length / 50));\r\n\r\n for (var i = 0; i < leafNodes.length; i++) {\r\n if (leafNodes[i].Total > threshold) {\r\n temp.push(leafNodes[i]);\r\n }\r\n }\r\n \r\n temp.sort(function (a, b) { return a.CorrectCount / a.Total - b.CorrectCount / b.Total });\r\n\r\n if (temp.length <= MaxListLength) {\r\n lowestList = temp.slice(0, temp.length);;\r\n highestList = temp;\r\n } else {\r\n lowestList = temp.slice(0, MaxListLength);\r\n highestList = temp.slice(temp.length - MaxListLength, temp.length);\r\n }\r\n highestList = highestList.reverse();\r\n }\r\n \r\n var result = {\r\n highest: highestList,\r\n lowest: lowestList\r\n };\r\n\r\n return result;\r\n //\r\n //cohort.lowestSubject\r\n\r\n function traversalSubjectTree(node) {\r\n if (node.Children.length > 0) {\r\n for (var i = 0; i < node.Children.length; i++) {\r\n traversalSubjectTree(node.Children[i]);\r\n }\r\n } else if (node.Name.indexOf('-Others') < 0) {\r\n leafNodes.push(node);\r\n }\r\n }\r\n }\r\n \r\n function findTreeNode(node, subjectId) {\r\n if (node.SubjectId == subjectId) {\r\n return node;\r\n }\r\n if (node.Children.length > 0) {\r\n for (var i = 0; i < node.Children.length; i++) {\r\n var found = findTreeNode(node.Children[i], subjectId);\r\n if (found != null) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function getQuestionsData(filter, cohortName, subjectId, orderBy, page, changingPage) {\r\n var model = {\r\n filter: filter,\r\n subjectId: subjectId,\r\n orderBy: orderBy,\r\n page: page\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/IndexQuestionsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n var cohort = findCohort(cohortName);\r\n loadQuestions(cohort, data.model);\r\n cohort.questionPages = data.pages;\r\n self.isQuestionsLoaded(true);\r\n if (!changingPage) {\r\n updateQuestionPager(1, self.selectedCohort().questionPages);\r\n }\r\n }\r\n }\r\n })\r\n }\r\n \r\n function getStudentsData(filter, cohortName, subjectId, orderBy, page, changingPage) {\r\n\r\n var model = {\r\n filter: filter,\r\n subjectId: subjectId,\r\n orderBy: orderBy,\r\n page: page\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/StudentsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n var cohort = findCohort(cohortName);\r\n\r\n cohort.students(data.model);\r\n cohort.studentPages = data.pages;\r\n self.isStudentsLoaded(true);\r\n if (!changingPage) {\r\n updateStudentPager(1, self.selectedCohort().studentPages);\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getCohortName(filter) {\r\n var model = {\r\n filter: filter\r\n }\r\n\r\n var cohortName;\r\n\r\n $.ajax({\r\n url: '/Data/GetCohortName',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n cohortName = data.model;\r\n }\r\n }\r\n });\r\n\r\n return cohortName;\r\n }\r\n\r\n function getDepartmentName(departmentId) {\r\n var model = { departmentId: departmentId };\r\n $.ajax({\r\n url: '/Data/GetDepartmentName',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n self.selectedDepartmentName(data);\r\n }\r\n });\r\n }\r\n\r\n function getStudentList(groupId) {\r\n var model = { groupId: groupId };\r\n $.ajax({\r\n url: '/Data/LoadGroupStudents',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n //var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.studentList(data.model);\r\n self.selectedClassName(data.className);\r\n\r\n $(\"#chosen-student\").chosen({ allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.selectedUserId(this.value);\r\n });\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n function scrollToAnchor(anchor) {\r\n var target = $('#' + anchor);\r\n if (target.length) {\r\n $('html,body').animate({\r\n scrollTop: target.offset().top\r\n }, 1000);\r\n }\r\n }\r\n\r\n function updateLockedSubjects() {\r\n var tempList = lockSubjectNodes.slice(0);\r\n\r\n clearLockSubjects();\r\n\r\n for (var i = 0; i < tempList.length; i++) {\r\n addLockSubject(tempList[i]);\r\n }\r\n\r\n selectSubjectBorder(self.selectedSubject().id);\r\n }\r\n\r\n function getCohortNameFromCohortIndex(cohortIndex) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].index == cohortIndex)\r\n return self.cohorts()[i].CohortDetails.Name;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getIndexFromCohortName(cohortName) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName)\r\n return self.cohorts()[i].index;\r\n }\r\n }\r\n\r\n function loadQuestions(cohort, data)\r\n {\r\n for (var i = 0; i < data.length; i++) {\r\n data[i].StudentAnswersForDot = [[], [], [], []];\r\n for (var j = 0; j < data[i].StudentAnswers.length; j++)\r\n {\r\n data[i].StudentAnswersForDot[data[i].StudentAnswers[j].AnswerValue - 1].push(data[i].StudentAnswers[j]);\r\n }\r\n }\r\n\r\n cohort.questions(data);\r\n }\r\n\r\n\r\n function findCohort(cohortName)\r\n {\r\n for (var i = 0; i < self.cohorts().length; i++)\r\n {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName)\r\n return self.cohorts()[i];\r\n }\r\n return null;\r\n }\r\n\r\n function addCohort(cohortName, filter) {\r\n var uniqueCohortName = dataFilterProcessor.getUniqueCohortName(cohortName, existingCohortNames);\r\n existingCohortNames.push(uniqueCohortName);\r\n\r\n var newCohort = {};\r\n newCohort.CohortDetails = {};\r\n\r\n newCohort.CohortDetails.Name = uniqueCohortName;\r\n newCohort.CohortDetails.FilterDetailString = dataFilterProcessor.getFilterDetailString(filter);\r\n newCohort.CohortDetails.FilterUrl = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n newCohort.filter = filter;\r\n\r\n if (filter.IsFilteredByDateRange == true) {\r\n newCohort.CohortDetails.IsSetDateRange = true;\r\n newCohort.CohortDetails.DateRangeString = dataFilterProcessor.getDateRangeString(filter);\r\n } else {\r\n newCohort.CohortDetails.IsSetDateRange = false;\r\n }\r\n\r\n newCohort.subjects = ko.observableArray([]);\r\n newCohort.questions = ko.observableArray([]);\r\n newCohort.students = ko.observable([]);\r\n newCohort.isShowDots = !(filter.userfilter == 'All' || filter.userfilter == 'Country');\r\n newCohort.index = maxCohortIndex;\r\n maxCohortIndex++;\r\n\r\n self.cohorts.push(newCohort);\r\n if (filter.userfilter != 'Student') {\r\n self.selectedCohortName(cohortName);\r\n self.selectedCohort(newCohort);\r\n }\r\n\r\n return uniqueCohortName;\r\n }\r\n\r\n function augmentCohortDetails(model, filter) {\r\n\r\n var cohortName = dataFilterProcessor.getUniqueCohortName(model.CohortDetails.Name, existingCohortNames);\r\n existingCohortNames.push(cohortName);\r\n\r\n model.CohortDetails.Name = cohortName;\r\n model.CohortDetails.FilterDetailString = dataFilterProcessor.getFilterDetailString(filter);\r\n model.CohortDetails.FilterUrl = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n model.filter = filter;\r\n\r\n if (filter.IsFilteredByDateRange == true) {\r\n model.CohortDetails.IsSetDateRange = true;\r\n model.CohortDetails.DateRangeString = dataFilterProcessor.getDateRangeString(filter);\r\n } else {\r\n model.CohortDetails.IsSetDateRange = false;\r\n }\r\n \r\n }\r\n\r\n function processCohorts(deletedCohorts, addedCohorts) {\r\n for (var i = 0; i < deletedCohorts.length; i++) {\r\n var url = dataFilterProcessor.getUrlFromFilter(dataFilterProcessor.getFilterFromParams(deletedCohorts[i]));\r\n deleteCohortByUrl(url);\r\n }\r\n for (var i = 0; i < addedCohorts.length; i++) {\r\n applyFilter(dataFilterProcessor.getFilterFromParams(addedCohorts[i]));\r\n }\r\n }\r\n\r\n function deleteCohortByUrl(url) {\r\n var cohortName = dataFilterProcessor.getCohortNameByUrl(url,\r\n self.cohorts().map(function (cohort)\r\n {\r\n return {\r\n name: cohort.CohortDetails.Name,\r\n url: cohort.CohortDetails.FilterUrl\r\n };\r\n }) );\r\n if (cohortName == null) {\r\n toastr['error']('Cohort not found!', 'Error');\r\n return;\r\n }\r\n\r\n removeSunburstByCohortName(cohortName);\r\n removeCohortInfoByCohortName(cohortName);\r\n if (self.cohorts().length == 0) {\r\n clearData();\r\n }\r\n else {\r\n self.selectedCohort(self.cohorts()[0]);\r\n updateLockedSubjects();\r\n }\r\n }\r\n\r\n function clearData() {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n div = d3.select('#js-sunburst-' + self.cohorts()[i].index);\r\n div.remove();\r\n }\r\n\r\n maxCohortIndex = 0;\r\n sunburstIndex_cohortName = [];\r\n sunburstIndex_deleted = [];\r\n paths = [];\r\n lockSubjectNodes = [];\r\n highlightSubjectIds = [];\r\n\r\n self.cohorts.removeAll();\r\n self.selectedCohortName();\r\n\r\n self.selectedCohort(null);\r\n self.selectedSubject({ name: 'Root', id: null });\r\n self.isStudentsLoaded(false);\r\n self.isQuestionsLoaded(false);\r\n\r\n dataFilterProcessor.clearParams();\r\n\r\n self.selectedUserId(null);\r\n\r\n }\r\n\r\n function removeBarCharBySubjectId(id) {\r\n var div = d3.select('#js-barchart-' + id);\r\n div.remove();\r\n }\r\n\r\n function selectCohortShowBorder(index) {\r\n d3.selectAll('.data-subjects__sunburst').attr('class', 'data-subjects__sunburst');\r\n\r\n d3.select('#js-sunburst-' + index).attr('class', 'data-subjects__sunburst data-subjects__sunburst--active');\r\n }\r\n\r\n function selectSubjectBorder(id) {\r\n\r\n d3.selectAll('.data-subjects__barchart__inner').attr('style', 'border-color: #eaeaea');\r\n\r\n d3.select('#js-barchart-' + id).select('div').attr('style', 'border-color: ' + self.getCurrentCohortColor());\r\n\r\n }\r\n\r\n function removeSunburstByCohortName(cohortName) {\r\n\r\n var cohortIndex = getIndexFromCohortName(cohortName);\r\n var div = d3.select('#js-sunburst-container-' + cohortIndex);\r\n div.remove();\r\n\r\n }\r\n\r\n function removeCohortInfoByCohortName(cohortName) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName) {\r\n self.cohorts.remove(self.cohorts()[i]);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function drawDonut(percent, element) {\r\n\r\n var side = 100,\r\n radius = side / 2,\r\n thickness = 8;\r\n\r\n var color = d3.scale.ordinal()\r\n .range(['#93b254', '#e24b3f']);\r\n\r\n var arc = d3.svg.arc()\r\n .outerRadius(radius)\r\n .innerRadius(radius - thickness);\r\n\r\n var pie = d3.layout.pie()\r\n .sort(null);\r\n\r\n var svg = d3.select(element).append('svg')\r\n .attr('width', '100%')\r\n .attr('height', '100%')\r\n .attr('viewBox', '0 0 ' + side + ' ' + side)\r\n .append('g')\r\n .attr('transform', 'translate(' + radius + ',' + radius + ')');\r\n\r\n var data = [percent, 100 - percent];\r\n\r\n var g = svg.selectAll('.arc')\r\n .data(pie(data))\r\n .enter().append('g')\r\n .attr('class', 'arc');\r\n\r\n g.append('path')\r\n .attr('d', arc)\r\n .style('fill', function (d, i) { return color(i); });\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n //setup crossroads\r\n crossroads.addRoute('',\r\n function () {\r\n self.currentPage('Entry');\r\n });\r\n\r\n crossroads.addRoute('/Subject/',\r\n function () {\r\n self.currentPage('Subject');\r\n $(\"#chosen-subject\").chosen({ search_fuzzy: true, allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.enterSubjectInsight(this.value);\r\n });\r\n });\r\n\r\n crossroads.addRoute('/Student/',\r\n function () {\r\n self.currentPage('Student');\r\n });\r\n\r\n crossroads.addRoute('/Class/',\r\n function () {\r\n self.currentPage('Class');\r\n });\r\n\r\n crossroads.addRoute('/Class/{id}/',\r\n function () {\r\n hasher.setHash('Class');\r\n });\r\n\r\n crossroads.addRoute('/Department/',\r\n function () {\r\n self.currentPage('Department');\r\n });\r\n\r\n crossroads.addRoute('/Department/{id}/',\r\n function (id) {\r\n self.currentPage('DepartmentFilter');\r\n self.currentFilterClass('DepartmentYearGroup');\r\n self.selectedDepartmentId(id);\r\n self.isShowFilter(true);\r\n });\r\n\r\n crossroads.addRoute('/Subject/:params*:/',\r\n function (params) {\r\n ga('send', 'event', 'Insights', 'Insights – View subject insights');\r\n\r\n self.currentPage('Data');\r\n self.currentFilterClass('Subject');\r\n\r\n self.currentParams(params);\r\n var proResult = dataFilterProcessor.processFilterParams(params, processCohorts);\r\n if (proResult.notEmpty) {\r\n self.isShowFilter(false);\r\n }\r\n if (proResult.filling != \"\") {\r\n replaceHashSilently(hasher.getHash() + proResult.filling);\r\n }\r\n $(\"#chosen-subject2\").chosen({ search_fuzzy: true, allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.rootSubjectId(this.value);\r\n });\r\n });\r\n\r\n crossroads.addRoute('/Class/{id}/:params*:/',\r\n function (id, params) {\r\n ga('send', 'event', 'Insights', 'Insights – View class insights');\r\n\r\n self.currentPage('Data');\r\n self.currentFilterClass('ClassStudent');\r\n self.selectedClassId(id);\r\n getStudentList(id);\r\n self.currentParams(params);\r\n var proResult = dataFilterProcessor.processFilterParams(params, processCohorts);\r\n if (proResult.notEmpty) {\r\n self.isShowFilter(false);\r\n }\r\n if (proResult.filling != \"\") {\r\n replaceHashSilently(hasher.getHash() + proResult.filling);\r\n }\r\n $(\"#chosen-subject2\").chosen({ search_fuzzy: true, allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.rootSubjectId(this.value); \r\n });\r\n });\r\n\r\n crossroads.addRoute('/Department/{id}/:params*:/',\r\n function (id, params) {\r\n ga('send', 'event', 'Insights', 'Insights – View department insights');\r\n\r\n self.currentPage('Data');\r\n self.currentFilterClass('DepartmentYearGroup');\r\n self.selectedDepartmentId(id);\r\n self.currentParams(params);\r\n var proResult = dataFilterProcessor.processFilterParams(params, processCohorts);\r\n if (proResult.notEmpty) {\r\n self.isShowFilter(false);\r\n }\r\n if (proResult.filling != \"\") {\r\n replaceHashSilently(hasher.getHash() + proResult.filling);\r\n }\r\n $(\"#chosen-subject2\").chosen({ search_fuzzy: true, allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.rootSubjectId(this.value);\r\n });\r\n });\r\n\r\n crossroads.addRoute('/Student/:params*:/',\r\n function (params) {\r\n self.currentPage('Data');\r\n self.currentFilterClass('Student');\r\n self.currentParams(params);\r\n var proResult = dataFilterProcessor.processFilterParams(params, processCohorts);\r\n if (proResult.notEmpty) {\r\n self.isShowFilter(false);\r\n }\r\n if (proResult.filling != \"\") {\r\n replaceHashSilently(hasher.getHash() + proResult.filling);\r\n }\r\n $(\"#chosen-subject2\").chosen({ search_fuzzy: true, allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.rootSubjectId(this.value);\r\n });\r\n });\r\n \r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function() {\r\n ga('send', 'pageview', window.location.href.replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n function setHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.setHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n function replaceHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.replaceHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n function selectSubject(subject) {\r\n self.selectedSubject(subject);\r\n }\r\n\r\n function deleteSubject(subjectId) {\r\n\r\n self.isSubjectLocked()[subjectId] = false;\r\n self.isSubjectLocked(self.isSubjectLocked());\r\n removeLockSubject(subjectId);\r\n removeBarCharBySubjectId(subjectId);\r\n if (self.selectedSubject().id == subjectId) {\r\n if (lockSubjectNodes.length > 0) {\r\n self.selectedSubject({ name: lockSubjectNodes[0].SubjectName, id: lockSubjectNodes[0].SubjectId });\r\n }\r\n else {\r\n clearLockSubjects();\r\n self.selectedSubject({ name: 'All Subjects', id: null });\r\n }\r\n }\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Sunburst Chart\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function updateSubjectInsights(subjectId) {\r\n \r\n var node = d3.selectAll('#sunburst' + self.selectedCohort().index + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == subjectId);\r\n }).data()[0];\r\n\r\n if (node == null) {\r\n return;\r\n }\r\n\r\n var percentage = node.Total != 0 ? (100 * node.CorrectCount / node.Total).toPrecision(3) : 0;\r\n node.percentageString = percentage + '%';\r\n self.rootSubject(node);\r\n\r\n var result = getTopSubjectList(node);\r\n self.lowestList(result.lowest);\r\n self.highestList(result.highest);\r\n }\r\n\r\n function zoomInToCurrentRoot() {\r\n\r\n clearLockSubjects();\r\n\r\n var node = d3.selectAll('#sunburst' + self.selectedCohort().index + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == self.rootSubjectId());\r\n }).data()[0];\r\n if (node != null) {\r\n if (node.Children == null || node.Children.length == 0) {\r\n var parentId = node.ParentId;\r\n var subject = {\r\n name: node.Name,\r\n id: node.SubjectId\r\n };\r\n\r\n addLockSubject(node);\r\n node = d3.selectAll('#sunburst' + self.selectedCohort().index + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == parentId);\r\n }).data()[0];\r\n self.selectedSubject(subject);\r\n } else {\r\n // Avoid triggering select subjected changing event \r\n // when the cohort is firstly loaded.\r\n // This will avoid duplicate call to IndexQuestionJson and StudentsJson\r\n if (self.selectedSubject().id != null)\r\n self.selectedSubject({ name: 'All Subjects', id: null });\r\n }\r\n\r\n d3.selectAll('#sunburst' + self.selectedCohort().index + ' path').transition()\r\n .duration(1000)\r\n .attrTween('d', arcTweenZoom(node));\r\n }\r\n\r\n }\r\n\r\n var arc = d3.svg.arc()\r\n .startAngle(function (d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })\r\n .endAngle(function (d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })\r\n .innerRadius(function (d) { return Math.max(0, y(d.y)); })\r\n .outerRadius(function (d) { return Math.max(0, y(d.y + d.dy)); });\r\n\r\n // When zooming: interpolate the scales.\r\n function arcTweenZoom(d) {\r\n var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),\r\n yd = d3.interpolate(y.domain(), [d.y, 1]),\r\n yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);\r\n return function (d, i) {\r\n return i\r\n ? function (t) { return arc(d); }\r\n : function (t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };\r\n };\r\n }\r\n\r\n function drawSunburst(root, cohortName, filter) {\r\n \r\n var cohortIndex = getIndexFromCohortName(cohortName);\r\n\r\n // Total size of all segments; we set this later, after loading the data.\r\n var totalSize = 0;\r\n \r\n var container = d3.select('#sunbursts-container')\r\n .append('div')\r\n .attr('class', 'col-sm-6')\r\n .attr('id', 'js-sunburst-container-' + cohortIndex)\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst')\r\n .attr('id', 'js-sunburst-' + cohortIndex)\r\n .on('click', function () { self.selectedCohortByCohortName(cohortName) });\r\n\r\n var diagram = container\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__diagram');\r\n\r\n diagram\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__checkbox');\r\n\r\n var details = container\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details');\r\n \r\n // TO DO Return just the cohortName from the server so we don't need this fudge\r\n var name = cohortName;\r\n var last = name.lastIndexOf(' (')\r\n if (last > 0)\r\n {\r\n name = name.slice(0, last);\r\n }\r\n \r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__name')\r\n .style('color', bases[cohortIndex % bases.length])\r\n .text(name);\r\n\r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__meta')\r\n .html(dataFilterProcessor.getFilterDetailString(filter));\r\n\r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__delete center-block')\r\n .on('click', function () { \r\n d3.event.stopPropagation(); \r\n self.deleteCohort(dataFilterProcessor.getUrlFromFilter(filter)); \r\n });\r\n \r\n var side = parseInt(diagram.style('width'), 10) - 40; // 40 = padding-left + padding-right\r\n\r\n radius = 490;\r\n\r\n y = d3.scale.sqrt()\r\n .range([0, radius]);\r\n\r\n var svg = diagram\r\n .append('div')\r\n .attr('class', 'embed-responsive embed-responsive-1by1')\r\n .append('div')\r\n .attr('class', 'embed-responsive-item')\r\n .append('svg:svg')\r\n .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\r\n .attr(\"viewBox\", \"0 0 1000 1000\")\r\n .append('svg:g')\r\n .attr('class', 'sunburst')\r\n .attr('id', 'sunburst' + cohortIndex)\r\n .attr('transform', 'translate(500, 500)');\r\n \r\n var partition = d3.layout.partition()\r\n .value(function (d) { return d.Total; })\r\n .children(function (d) { return d.Children; })\r\n .sort(function comparator(a, b) {\r\n return a.Sequence - b.Sequence;\r\n });\r\n\r\n \r\n \r\n createVisualization(root);\r\n\r\n // Main function to draw and set up the visualization, once we have the data.\r\n function createVisualization(root) {\r\n \r\n svg.append('svg:circle')\r\n .attr('r', 500)\r\n .style('fill', bases[cohortIndex % bases.length]);\r\n\r\n // Bounding circle underneath the sunburst, to make it easier to detect\r\n // when the mouse leaves the parent g.\r\n svg.append('svg:circle')\r\n .attr('r', radius)\r\n .style('stroke', '#fff')\r\n .style('stroke-width', 8)\r\n .style('fill', '#fff')\r\n\r\n var path = svg.datum(root).selectAll('path')\r\n .data(partition.nodes(root))\r\n .enter().append('svg:path')\r\n .attr('d', arc)\r\n .each(function (d) { d.element = root; })\r\n .attr('fill-rule', 'evenodd')\r\n .style('fill', function (d) { return colors(d.CorrectCount / d.Total); })\r\n .style('opacity', 1)\r\n .on('mouseover', mouseover)\r\n .on('click', click);\r\n\r\n paths.push(path);\r\n\r\n // Add the mouseleave handler to the bounding circle.\r\n svg.on('mouseleave', mouseleave).on('mousemove', mousemove);\r\n\r\n // Get total size of the tree = value of root node from partition.\r\n totalSize = path.node().__data__.value;\r\n };\r\n\r\n function click(d) {\r\n \r\n if (self.clickMode() == 'Zoom')\r\n {\r\n for (var i = 0; i < maxCohortIndex; i++) {\r\n var node = d3.selectAll('#sunburst' + i + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == d.SubjectId);\r\n }).data()[0];\r\n if (node != null) {\r\n d3.selectAll('#sunburst' + i + ' path').transition()\r\n .duration(1000)\r\n .attrTween('d', arcTweenZoom(node));\r\n }\r\n\r\n }\r\n self.rootSubjectId(d.SubjectId);\r\n } else {\r\n addLockSubject(d);\r\n var subject = {\r\n name: d.Name,\r\n id: d.SubjectId\r\n }\r\n self.selectedSubject(subject);\r\n }\r\n }\r\n\r\n // Fade all but the current sequence\r\n function mouseover(d) {\r\n\r\n var percentage = (100 * d.CorrectCount / d.Total).toPrecision(3);\r\n var percentageString = percentage + '%';\r\n \r\n var sequenceArray = getAncestors(d);\r\n\r\n var temphighlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element)\r\n {\r\n return element.SubjectId;\r\n }));\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (temphighlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n\r\n var data = {\r\n subjectName: d.Name,\r\n percentage: percentageString,\r\n cohorts: findSubjectPercentage(d.SubjectId)\r\n }\r\n\r\n tooltip\r\n .datum(data)\r\n .style('display', 'block');\r\n\r\n tooltip\r\n .select('.data-subjects__tooltip__subject')\r\n .text(function(d) { return d.subjectName; });\r\n\r\n tooltip\r\n .select('.data-subjects__tooltip__percentage')\r\n .text(function(d) { return d.percentage; });\r\n\r\n tooltip\r\n .transition()\r\n .duration(500)\r\n .style('opacity', 1);\r\n \r\n drawBarChart(data.cohorts, 205, 80, 7, tooltip.select('.data-subjects__tooltip__barchart'));\r\n }\r\n\r\n function mousemove() {\r\n tooltip\r\n .style('left', (d3.event.pageX + 20) + 'px')\r\n .style('top', (d3.event.pageY + 20) + 'px');\r\n }\r\n\r\n // Restore everything to full opacity when moving off the visualization.\r\n function mouseleave(d) {\r\n\r\n var somethingLocked = (highlightSubjectIds.length != 0);\r\n\r\n // Hide the breadcrumb trail\r\n d3.select('#trail')\r\n .style('visibility', 'hidden');\r\n\r\n // Deactivate all segments during transition.\r\n //d3.selectAll('path').on('mouseover', null);\r\n\r\n //// Transition each segment to full opacity and then reactivate it.\r\n //d3.selectAll('path')\r\n // .transition()\r\n // .duration(1000)\r\n // .style('opacity', 1)\r\n // .each('end', function () {\r\n // d3.select(this).on('mouseover', mouseover);\r\n // });\r\n \r\n if (somethingLocked)\r\n {\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n }\r\n else\r\n {\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 1);\r\n }\r\n\r\n tooltip\r\n .transition()\r\n .duration(500)\r\n .style('opacity', 0)\r\n .each('end', hide);\r\n \r\n function hide() {\r\n d3.select(this).style('display', 'none');\r\n }\r\n\r\n }\r\n \r\n \r\n\r\n }\r\n \r\n function findSubjectPercentage(subjectId) {\r\n var result = [];\r\n for (var i = 0; i < maxCohortIndex; i++) {\r\n\r\n var item = {};\r\n item.cohortName = getCohortNameFromCohortIndex(i);\r\n\r\n if (item.cohortName == null) {\r\n continue;\r\n }\r\n\r\n var node = d3.selectAll('#sunburst' + i + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == subjectId);\r\n }).data()[0];\r\n\r\n if (node != null && node.Total != 0) {\r\n item.percentage = node.CorrectCount / node.Total;\r\n } else {\r\n item.percentage = null;\r\n }\r\n\r\n result.push(item);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function isSubjectLocked(subjectId) {\r\n for (var i = 0; i < lockSubjectNodes.length; i++) {\r\n if (lockSubjectNodes[i].SubjectId == subjectId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function addLockSubject(d) {\r\n\r\n if (self.isSubjectLocked()[d.SubjectId] == true) {\r\n return;\r\n }\r\n\r\n lockSubjectNodes.push(d);\r\n self.isSubjectLocked()[d.SubjectId] = true;\r\n self.isSubjectLocked(self.isSubjectLocked());\r\n\r\n var data = {\r\n id: d.SubjectId,\r\n subjectName: d.Name,\r\n cohorts: findSubjectPercentage(d.SubjectId)\r\n }\r\n\r\n drawSubjectBarchart(data);\r\n\r\n var sequenceArray = getAncestors(d);\r\n\r\n highlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element) {\r\n return element.SubjectId;\r\n }));\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n\r\n }\r\n\r\n // Given a node in a partition layout, return an array of all of its ancestor\r\n // nodes, highest first, but excluding the root.\r\n function getAncestors(node) {\r\n var path = [];\r\n var current = node;\r\n while (current.parent) {\r\n path.unshift(current);\r\n current = current.parent;\r\n }\r\n return path;\r\n }\r\n\r\n function clearLockSubjects() {\r\n highlightSubjectIds = [];\r\n lockSubjectNodes = [];\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 1);\r\n\r\n d3.selectAll('.data-subjects__barchart')\r\n .remove();\r\n\r\n self.isSubjectLocked({ });\r\n }\r\n\r\n function removeLockSubject(subjectId) {\r\n for (var i = 0; i < lockSubjectNodes.length; i++) {\r\n if (lockSubjectNodes[i].SubjectId == subjectId) {\r\n lockSubjectNodes.splice(i, 1);\r\n break;\r\n }\r\n }\r\n highlightSubjectIds = [];\r\n for (var i = 0; i < lockSubjectNodes.length; i++) {\r\n var sequenceArray = getAncestors(lockSubjectNodes[i]);\r\n\r\n highlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element) {\r\n return element.SubjectId;\r\n }));\r\n }\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n }\r\n\r\n function drawBarChart(data, width, height, space, target) {\r\n\r\n var y = d3.scale.linear()\r\n .range([height, 0]);\r\n\r\n var chart = target\r\n .attr('width', width)\r\n .attr('height', height);\r\n\r\n y.domain([0, 1]);\r\n\r\n var barWidth = Math.min((width + space) / data.length - space, (width + space) / 4 - space);\r\n\r\n chart.selectAll('g')\r\n .remove();\r\n\r\n var subject = chart.selectAll('g')\r\n .data(data)\r\n .enter().append('g')\r\n .attr('class', 'g')\r\n .attr('transform', function (d, i) { return 'translate(' + i * (barWidth + space) + ',0)'; });\r\n\r\n subject.append('rect')\r\n .attr('y', function (d) { return y(1); })\r\n .attr('height', function (d) { return d.percentage == null ? 0 : y(d.percentage); })\r\n .attr('width', barWidth)\r\n .attr('fill', function (d, i) { return '#E0E0E0'; });\r\n\r\n subject.append('rect')\r\n .attr('y', function (d) { return y(d.percentage); })\r\n .attr('height', function (d) { return height - y(d.percentage); })\r\n .attr('width', barWidth)\r\n .attr('fill', function (d, i) { return bases[self.cohorts()[i].index % bases.length]; });\r\n\r\n //rect.exit().remove();\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Subject Block\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function drawSubjectBarchart(data) {\r\n\r\n var subject = {\r\n name: data.subjectName,\r\n id: data.id\r\n };\r\n\r\n var barchart = d3.select('#barcharts-container')\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart')\r\n .attr('id', 'js-barchart-' + data.id)\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart__inner')\r\n .datum(data)\r\n .on('click', function () { selectSubject(subject); });\r\n\r\n barchart.append('div')\r\n .attr('class', 'data-subjects__barchart__subject')\r\n .text(function (d) { return d.subjectName; });\r\n\r\n //barchart.append('div')\r\n // .attr('class', 'data-subjects__barchart__percentage')\r\n // .text(function (d) { return d.percentage; });\r\n\r\n //var width = parseInt(container.style('width'), 10);\r\n\r\n var target = barchart.append('svg')\r\n .attr('class', 'data-subjects__barchart__diagram');\r\n \r\n var width = parseInt(barchart.style('width'), 10) - 30;\r\n var height = width * 3 / 4;\r\n\r\n drawBarChart(data.cohorts, width, height, 10, target);\r\n\r\n barchart\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart__delete center-block')\r\n .on('click', function () { d3.event.stopPropagation(); deleteSubject(subject.id); });\r\n }\r\n\r\n});\n","define('pages/data/index2',[\r\n 'jquery',\r\n 'd3',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'dataFilterProcessor',\r\n 'toastr',\r\n 'moment',\r\n 'bootstrap',\r\n 'jqueryBootstrapPagination',\r\n 'bootstrapDateTimePicker'\r\n],\r\nfunction (\r\n $,\r\n d3,\r\n ko,\r\n crossroads,\r\n hasher,\r\n dataFilterProcessor,\r\n toastr,\r\n moment\r\n) {\r\n\r\n var maxCohortIndex = 0,\r\n sunburstIndex_cohortName = [],\r\n sunburstIndex_deleted = [],\r\n paths = [],\r\n lockSubjectNodes = [],\r\n highlightSubjectIds = [],\r\n size,\r\n radius,\r\n y;\r\n\r\n var colors = d3.scale.threshold()\r\n .domain([0.2, 0.4, 0.6, 0.8])\r\n .range(['#e24d42', '#f2814a', '#f5e547', '#a0cf41', '#649600']);\r\n\r\n var bases = [\r\n '#48aae7',\r\n '#f8e646',\r\n '#ea4c89',\r\n '#f3824a'\r\n ];\r\n\r\n var barBackground = '#848484';\r\n \r\n var x = d3.scale.linear()\r\n .range([0, 2 * Math.PI]);\r\n\r\n var tooltip = d3.select('body').append('div')\r\n .attr('class', 'data-subjects__tooltip');\r\n\r\n tooltip.append('div')\r\n .attr('class', 'data-subjects__tooltip__subject');\r\n\r\n tooltip.append('div')\r\n .attr('class', 'data-subjects__tooltip__percentage');\r\n\r\n tooltip.append('svg')\r\n .attr('class', 'data-subjects__tooltip__barchart');\r\n\r\n\r\n var self,\r\n existingCohortNames = [],\r\n currentSelectedCohortName;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n ko.bindingHandlers.donut = {\r\n update: function (element, valueAccessor) {\r\n element.innerHTML = '';\r\n var percent = ko.unwrap(valueAccessor());\r\n drawDonut(percent, element);\r\n }\r\n };\r\n\r\n //ko.bindingHandlers.updatePager = {\r\n // update: function (element, valueAccessor) {\r\n // var cohortName = valueAccessor();\r\n\r\n // var pageRecord = getPageInfo(cohortName);\r\n // if (pageRecord != null) {\r\n\r\n // if (currentCohortName != cohortName) {\r\n // currentCohortName = cohortName;\r\n // applyAnswerFilter();\r\n // }\r\n // }\r\n // }\r\n //};\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout Components\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.components.register('filter-widget', {\r\n viewModel:\r\n { require: '/App/scripts/components/dq-data-filter.js' },\r\n template:\r\n { require: 'text!/App/scripts/components/dq-data-filter.html' }\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function DataSubjectsViewModel() {\r\n\r\n self = this;\r\n\r\n self.QuestionOrderByChoices = [\r\n { name: \"Incorrect\", value: \"Incorrect\" },\r\n { name: \"Correct\", value: \"Correct\" },\r\n { name: \"Most Answered\", value: \"MostAnswered\" },\r\n { name: \"Even Spread\", value: \"EvenSpread\" }\r\n ];\r\n\r\n self.StudentOrderByChoices = [\r\n { name: \"Last Name\", value: \"LastName\" },\r\n { name: \"Lowest Average\", value: \"LowAverage\" },\r\n { name: \"Highest Average\", value: \"HighAverage\" },\r\n { name: \"Most Answers\", value: \"Answers\" }\r\n ];\r\n \r\n self.QuestionOrderBy = ko.observable(self.QuestionOrderByChoices[0]);\r\n self.StudentOrderBy = ko.observable(self.StudentOrderByChoices[0]);\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self.userRole = $('#usertype').data('userrole');\r\n self.userId = $('#userId').data('userid');\r\n\r\n self.schoolId = viewmodel.SchoolId;\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n // States\r\n //self.isAdvanced = ko.observable('Basic');\r\n\r\n self.isShowFilter = ko.observable(true);\r\n\r\n // Cohort\r\n self.cohorts = ko.observableArray([]);\r\n self.selectedCohortName = ko.observable();\r\n self.selectedSubject = ko.observable({ name: 'Root', id: null });\r\n\r\n self.selectedCohort = ko.observable(null);\r\n self.isStudentsLoaded = ko.observable(false);\r\n self.isQuestionsLoaded = ko.observable(false);\r\n\r\n self.selectedUserId = ko.observable(null);\r\n\r\n self.clickMode = ko.observable('Lock');\r\n\r\n self.isShowSubjects = ko.observable(true);\r\n self.isShowQuestions = ko.observable(true);\r\n self.isShowStudents = ko.observable(true);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.QuestionOrderBy.subscribe(function () {\r\n getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.QuestionOrderBy().value, 1, false);\r\n });\r\n\r\n self.StudentOrderBy.subscribe(function () {\r\n getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.StudentOrderBy().value, 1, false);\r\n });\r\n\r\n self.selectedCohort.subscribe(function () {\r\n if (self.selectedCohort() == null)\r\n return;\r\n if (self.selectedCohort().filter.userfilter == 'Student') {\r\n self.selectedUserId(self.selectedCohort().filter.selecteduserid);\r\n } else if (self.selectedCohort().filter.userfilter == 'Mine') {\r\n self.selectedUserId(self.userId);\r\n }\r\n else {\r\n self.selectedUserId(null);\r\n }\r\n \r\n selectCohortShowBorder(self.selectedCohort().index);\r\n if (self.isShowQuestions()) {\r\n getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.QuestionOrderBy().value, 1, false);\r\n }\r\n if (self.isShowStudents() && self.selectedCohort().isShowDots) {\r\n getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.StudentOrderBy().value, 1, false);\r\n }\r\n d3.select('#js-barchart-' + self.selectedSubject().id).select('div').attr('style', 'border-color: ' + self.getCurrentCohortColor());\r\n });\r\n\r\n self.selectedSubject.subscribe(function () {\r\n if (self.selectedCohort() == null)\r\n return;\r\n selectSubjectBorder(self.selectedSubject().id);\r\n if (self.isShowQuestions()) {\r\n getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.QuestionOrderBy().value, 1, false);\r\n }\r\n if (self.isShowStudents() && self.selectedCohort().isShowDots) {\r\n getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.StudentOrderBy().value, 1, false);\r\n }\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n\r\n }\r\n\r\n\r\n ko.applyBindings(new DataSubjectsViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n self.showFilter = function () {\r\n self.isShowFilter(true);\r\n }\r\n\r\n self.applyFilter = function (filter) {\r\n var hashUrl = hasher.getHash();\r\n\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n if (dataFilterProcessor.getCohortNameByUrl(url,\r\n self.cohorts().map(function (cohort)\r\n {\r\n return {\r\n name: cohort.CohortDetails.Name,\r\n url: cohort.CohortDetails.FilterUrl\r\n };\r\n })) != null) {\r\n toastr['error']('Cohort already exist!', 'Error');\r\n return;\r\n }\r\n\r\n if (hashUrl == '') {\r\n hasher.replaceHash(hashUrl + url);\r\n } else {\r\n hasher.setHash(hashUrl + url);\r\n }\r\n }\r\n\r\n self.deleteCohort = function (filterUrl) {\r\n var currentHash = hasher.getHash();\r\n var newHash = currentHash.replace(filterUrl, '');\r\n hasher.setHash(newHash);\r\n }\r\n\r\n self.clearLock = function () {\r\n clearLockSubjects();\r\n self.selectedSubject({ name: 'All Subjects', id: null });\r\n }\r\n\r\n self.questionPageUrl = function (QuestionId) {\r\n var url = '/Data/Question/' + QuestionId + '#/' + hasher.getHash();\r\n return url;\r\n }\r\n\r\n self.getPercentageString = function (percentage) {\r\n if (percentage == null || isNaN(percentage))\r\n return percentage;\r\n else\r\n return Math.round(percentage * 100) + '%';\r\n }\r\n\r\n self.selectUserDot = function (userId) {\r\n self.selectedUserId(userId);\r\n }\r\n\r\n self.getAnswerValueLabel = function (answerValue) {\r\n return String.fromCharCode(answerValue + 'A'.charCodeAt(0) - 1);\r\n }\r\n\r\n self.getCurrentCohortColor = function () {\r\n if (self.selectedCohort() == null)\r\n return '';\r\n return bases[self.selectedCohort().index % bases.length];\r\n }\r\n\r\n self.selectedCohortByCohortName = function (cohortName) {\r\n self.selectedCohort(findCohort(cohortName));\r\n }\r\n\r\n self.addStudentCohort = function (student) {\r\n var filter = { };\r\n filter.userfilter = 'Student';\r\n filter.selecteduserid = student.UserId;\r\n self.applyFilter(filter);\r\n toastr['success']('We\\'ve added a new subject sunburst at the top.', 'Scroll Up')\r\n }\r\n\r\n self.showStudentExplanations = function (UserId) {\r\n self.selectUserDot(UserId)\r\n scrollToAnchor('questions-container');\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function updateStudentPager(page, totalPages) {\r\n\r\n $(\"#students-pager-container\").html('');\r\n $(\"#students-pager-container\").html('');\r\n\r\n $(\"#students-pager-container\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return getStudentsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.StudentOrderBy().value, page, true);\r\n }\r\n });\r\n }\r\n\r\n function updateQuestionPager(page, totalPages) {\r\n\r\n $(\"#questions-pager-container\").html('');\r\n $(\"#questions-pager-container\").html('');\r\n\r\n $(\"#questions-pager-container\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return getQuestionsData(self.selectedCohort().filter, self.selectedCohort().CohortDetails.Name, self.selectedSubject().id, self.QuestionOrderBy().value, page, true);\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function applyFilter(filter) {\r\n\r\n var cohortName = getCohortName(filter);\r\n\r\n cohortName = addCohort(cohortName, filter);\r\n\r\n if (self.isShowSubjects()) {\r\n getSubjectsData(filter, cohortName);\r\n }\r\n ga('send', 'event', 'data-action', 'data-index-apply-filter');\r\n //if (self.isShowQuestions()) {\r\n // getQuestionsData(filter, cohortName, null, self.QuestionOrderBy().value, 1, false);\r\n //}\r\n\r\n //if (self.isShowStudents()) {\r\n // getStudentsData(filter, cohortName, null, self.StudentOrderBy().value, 1, false);\r\n //}\r\n\r\n }\r\n\r\n //function getCohortColor() {\r\n // return bases[self.selectedCohort(). % bases.length]\r\n //}\r\n\r\n function getSubjectsData(filter, cohortName) {\r\n\r\n var model = {\r\n filter: filter\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/SubjectsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n var newHash = hasher.getHash().replace(url, '');\r\n replaceHashSilently(newHash);\r\n } else {\r\n drawSunburst(data.model.SubjectAnswerCounts, cohortName, filter);\r\n var cohort = findCohort(cohortName);\r\n cohort.subjects(data.model.SubjectAnswerCounts);\r\n updateLockedSubjects();\r\n selectCohortShowBorder(self.selectedCohort().index);\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getQuestionsData(filter, cohortName, subjectId, orderBy, page, changingPage) {\r\n var model = {\r\n filter: filter,\r\n subjectId: subjectId,\r\n orderBy: orderBy,\r\n page: page\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/IndexQuestionsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n var cohort = findCohort(cohortName);\r\n loadQuestions(cohort, data.model);\r\n cohort.questionPages = data.pages;\r\n self.isQuestionsLoaded(true);\r\n if (!changingPage) {\r\n updateQuestionPager(1, self.selectedCohort().questionPages);\r\n }\r\n }\r\n }\r\n })\r\n }\r\n \r\n function getStudentsData(filter, cohortName, subjectId, orderBy, page, changingPage) {\r\n\r\n var model = {\r\n filter: filter,\r\n subjectId: subjectId,\r\n orderBy: orderBy,\r\n page: page\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/StudentsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n var cohort = findCohort(cohortName);\r\n cohort.students(data.model);\r\n cohort.studentPages = data.pages;\r\n self.isStudentsLoaded(true);\r\n if (!changingPage) {\r\n updateStudentPager(1, self.selectedCohort().studentPages);\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getCohortName(filter) {\r\n var model = {\r\n filter: filter\r\n }\r\n\r\n var cohortName;\r\n\r\n $.ajax({\r\n url: '/Data/GetCohortName',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n cohortName = data.model;\r\n }\r\n }\r\n });\r\n\r\n return cohortName;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n function scrollToAnchor(anchor) {\r\n var target = $('#' + anchor);\r\n if (target.length) {\r\n $('html,body').animate({\r\n scrollTop: target.offset().top\r\n }, 1000);\r\n }\r\n }\r\n\r\n function updateLockedSubjects() {\r\n var tempList = lockSubjectNodes.slice(0);\r\n\r\n clearLockSubjects();\r\n\r\n for (var i = 0; i < tempList.length; i++) {\r\n addLockSubject(tempList[i]);\r\n }\r\n\r\n selectSubjectBorder(self.selectedSubject().id);\r\n }\r\n\r\n function getCohortNameFromCohortIndex(cohortIndex) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].index == cohortIndex)\r\n return self.cohorts()[i].CohortDetails.Name;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function getIndexFromCohortName(cohortName) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName)\r\n return self.cohorts()[i].index;\r\n }\r\n }\r\n\r\n function loadQuestions(cohort, data)\r\n {\r\n for (var i = 0; i < data.length; i++) {\r\n data[i].StudentAnswersForDot = [[], [], [], []];\r\n for (var j = 0; j < data[i].StudentAnswers.length; j++)\r\n {\r\n data[i].StudentAnswersForDot[data[i].StudentAnswers[j].AnswerValue - 1].push(data[i].StudentAnswers[j]);\r\n }\r\n }\r\n\r\n cohort.questions(data);\r\n }\r\n\r\n\r\n function findCohort(cohortName)\r\n {\r\n for (var i = 0; i < self.cohorts().length; i++)\r\n {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName)\r\n return self.cohorts()[i];\r\n }\r\n return null;\r\n }\r\n\r\n function addCohort(cohortName, filter) {\r\n var uniqueCohortName = dataFilterProcessor.getUniqueCohortName(cohortName, existingCohortNames);\r\n existingCohortNames.push(cohortName);\r\n\r\n var newCohort = {};\r\n newCohort.CohortDetails = {};\r\n\r\n newCohort.CohortDetails.Name = uniqueCohortName;\r\n newCohort.CohortDetails.FilterDetailString = dataFilterProcessor.getFilterDetailString(filter);\r\n newCohort.CohortDetails.FilterUrl = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n newCohort.filter = filter;\r\n\r\n if (filter.IsFilteredByDateRange == true) {\r\n newCohort.CohortDetails.IsSetDateRange = true;\r\n newCohort.CohortDetails.DateRangeString = dataFilterProcessor.getDateRangeString(filter);\r\n } else {\r\n newCohort.CohortDetails.IsSetDateRange = false;\r\n }\r\n\r\n newCohort.subjects = ko.observableArray([]);\r\n newCohort.questions = ko.observableArray([]);\r\n newCohort.students = ko.observableArray([]);\r\n newCohort.isShowDots = !(filter.userfilter == 'All' || filter.userfilter == 'Country');\r\n newCohort.index = maxCohortIndex;\r\n maxCohortIndex++;\r\n\r\n self.cohorts.push(newCohort);\r\n if (filter.userfilter != 'Student') {\r\n self.selectedCohortName(cohortName);\r\n self.selectedCohort(newCohort);\r\n }\r\n\r\n return uniqueCohortName;\r\n }\r\n\r\n function augmentCohortDetails(model, filter) {\r\n\r\n var cohortName = dataFilterProcessor.getUniqueCohortName(model.CohortDetails.Name, existingCohortNames);\r\n existingCohortNames.push(cohortName);\r\n\r\n model.CohortDetails.Name = cohortName;\r\n model.CohortDetails.FilterDetailString = dataFilterProcessor.getFilterDetailString(filter);\r\n model.CohortDetails.FilterUrl = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n model.filter = filter;\r\n\r\n if (filter.IsFilteredByDateRange == true) {\r\n model.CohortDetails.IsSetDateRange = true;\r\n model.CohortDetails.DateRangeString = dataFilterProcessor.getDateRangeString(filter);\r\n } else {\r\n model.CohortDetails.IsSetDateRange = false;\r\n }\r\n \r\n }\r\n\r\n function processCohorts(deletedCohorts, addedCohorts) {\r\n for (var i = 0; i < deletedCohorts.length; i++) {\r\n var url = dataFilterProcessor.getUrlFromFilter(dataFilterProcessor.getFilterFromParams(deletedCohorts[i]));\r\n deleteCohortByUrl(url);\r\n }\r\n for (var i = 0; i < addedCohorts.length; i++) {\r\n applyFilter(dataFilterProcessor.getFilterFromParams(addedCohorts[i]));\r\n }\r\n }\r\n\r\n function deleteCohortByUrl(url) {\r\n var cohortName = dataFilterProcessor.getCohortNameByUrl(url,\r\n self.cohorts().map(function (cohort)\r\n {\r\n return {\r\n name: cohort.CohortDetails.Name,\r\n url: cohort.CohortDetails.FilterUrl\r\n };\r\n }) );\r\n if (cohortName == null) {\r\n toastr['error']('Cohort not found!', 'Error');\r\n return;\r\n }\r\n\r\n removeSunburstByCohortName(cohortName);\r\n removeCohortInfoByCohortName(cohortName);\r\n if (self.cohorts().length == 0) {\r\n clearData();\r\n }\r\n else {\r\n self.selectedCohort(self.cohorts()[0]);\r\n updateLockedSubjects();\r\n }\r\n }\r\n\r\n function clearData() {\r\n self.cohorts();\r\n self.selectedCohortName();\r\n\r\n self.selectedCohort(null);\r\n self.selectedSubject({ name: 'Root', id: null });\r\n self.isStudentsLoaded(false);\r\n self.isQuestionsLoaded(false);\r\n\r\n self.selectedUserId(null);\r\n\r\n }\r\n\r\n function removeBarCharBySubjectId(id) {\r\n var div = d3.select('#js-barchart-' + id);\r\n div.remove();\r\n }\r\n\r\n function selectCohortShowBorder(index) {\r\n d3.selectAll('.data-subjects__sunburst').attr('class', 'data-subjects__sunburst');\r\n\r\n d3.select('#js-sunburst-' + index).attr('class', 'data-subjects__sunburst data-subjects__sunburst--active');\r\n }\r\n\r\n function selectSubjectBorder(id) {\r\n\r\n d3.selectAll('.data-subjects__barchart__inner').attr('style', 'border-color: #eaeaea');\r\n\r\n d3.select('#js-barchart-' + id).select('div').attr('style', 'border-color: ' + self.getCurrentCohortColor());\r\n\r\n }\r\n\r\n function removeSunburstByCohortName(cohortName) {\r\n\r\n var cohortIndex = getIndexFromCohortName(cohortName);\r\n var div = d3.select('#js-sunburst-' + cohortIndex);\r\n div.remove();\r\n\r\n }\r\n\r\n function removeCohortInfoByCohortName(cohortName) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName) {\r\n self.cohorts.remove(self.cohorts()[i]);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function drawDonut(percent, element) {\r\n\r\n var side = 100,\r\n radius = side / 2,\r\n thickness = 8;\r\n\r\n var color = d3.scale.ordinal()\r\n .range(['#93b254', '#e24b3f']);\r\n\r\n var arc = d3.svg.arc()\r\n .outerRadius(radius)\r\n .innerRadius(radius - thickness);\r\n\r\n var pie = d3.layout.pie()\r\n .sort(null);\r\n\r\n var svg = d3.select(element).append('svg')\r\n .attr('width', '100%')\r\n .attr('height', '100%')\r\n .attr('viewBox', '0 0 ' + side + ' ' + side)\r\n .append('g')\r\n .attr('transform', 'translate(' + radius + ',' + radius + ')');\r\n\r\n var data = [percent, 100 - percent];\r\n\r\n var g = svg.selectAll('.arc')\r\n .data(pie(data))\r\n .enter().append('g')\r\n .attr('class', 'arc');\r\n\r\n g.append('path')\r\n .attr('d', arc)\r\n .style('fill', function (d, i) { return color(i); });\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n //setup crossroads\r\n crossroads.addRoute('/:params*:/',\r\n function (params) {\r\n\r\n if (dataFilterProcessor.processFilterParams(params, processCohorts)) {\r\n self.isShowFilter(false);\r\n }\r\n //if (params == null) {\r\n // hasher.replaceHash(dataFilterProcessor.getUrlFromFilter(null));\r\n //}\r\n //else {\r\n // if (dataFilterProcessor.processFilterParams(params, processCohorts)) {\r\n // self.isAdvanced('Advanced');\r\n // }\r\n //}\r\n });\r\n \r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n }\r\n\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n function setHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.setHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n function replaceHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.replaceHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n function selectSubject(subject) {\r\n self.selectedSubject(subject);\r\n }\r\n\r\n function deleteSubject(subjectId) {\r\n removeLockSubject(subjectId);\r\n removeBarCharBySubjectId(subjectId);\r\n if (self.selectedSubject().id == subjectId) {\r\n if (lockSubjectNodes.length > 0) {\r\n self.selectedSubject({ name: lockSubjectNodes[0].SubjectName, id: lockSubjectNodes[0].SubjectId });\r\n }\r\n else {\r\n clearLockSubjects();\r\n self.selectedSubject({ name: 'All Subjects', id: null });\r\n }\r\n }\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Sunburst Chart\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n\r\n function drawSunburst(root, cohortName, filter) {\r\n \r\n var cohortIndex = getIndexFromCohortName(cohortName);\r\n\r\n // Total size of all segments; we set this later, after loading the data.\r\n var totalSize = 0;\r\n \r\n var container = d3.select('#sunbursts-container')\r\n .append('div')\r\n .attr('class', 'col-sm-6')\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst')\r\n .attr('id', 'js-sunburst-' + cohortIndex)\r\n .on('click', function () { self.selectedCohortByCohortName(cohortName) });\r\n\r\n var diagram = container\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__diagram');\r\n\r\n diagram\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__checkbox');\r\n\r\n var details = container\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details');\r\n \r\n // TO DO Return just the cohortName from the server so we don't need this fudge\r\n var name = cohortName;\r\n var last = name.lastIndexOf(' (')\r\n if (last > 0)\r\n {\r\n name = name.slice(0, last);\r\n }\r\n \r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__name')\r\n .style('color', bases[cohortIndex % bases.length])\r\n .text(name);\r\n\r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__meta')\r\n .html(dataFilterProcessor.getFilterDetailString(filter));\r\n\r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__delete center-block')\r\n .on('click', function () { \r\n d3.event.stopPropagation(); \r\n self.deleteCohort(dataFilterProcessor.getUrlFromFilter(filter)); \r\n });\r\n \r\n var side = parseInt(diagram.style('width'), 10) - 40; // 40 = padding-left + padding-right\r\n\r\n radius = 490;\r\n\r\n y = d3.scale.sqrt()\r\n .range([0, radius]);\r\n\r\n var svg = diagram\r\n .append('div')\r\n .attr('class', 'embed-responsive embed-responsive-1by1')\r\n .append('div')\r\n .attr('class', 'embed-responsive-item')\r\n .append('svg:svg')\r\n .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\r\n .attr(\"viewBox\", \"0 0 1000 1000\")\r\n .append('svg:g')\r\n .attr('class', 'sunburst')\r\n .attr('id', 'sunburst' + cohortIndex)\r\n .attr('transform', 'translate(500, 500)');\r\n \r\n var partition = d3.layout.partition()\r\n .value(function (d) { return d.Total; })\r\n .children(function (d) { return d.Children; })\r\n .sort(function comparator(a, b) {\r\n return a.Sequence - b.Sequence;\r\n });\r\n\r\n var arc = d3.svg.arc()\r\n .startAngle(function (d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })\r\n .endAngle(function (d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })\r\n .innerRadius(function (d) { return Math.max(0, y(d.y)); })\r\n .outerRadius(function (d) { return Math.max(0, y(d.y + d.dy)); });\r\n \r\n createVisualization(root);\r\n\r\n // Main function to draw and set up the visualization, once we have the data.\r\n function createVisualization(root) {\r\n \r\n svg.append('svg:circle')\r\n .attr('r', 500)\r\n .style('fill', bases[cohortIndex % bases.length]);\r\n\r\n // Bounding circle underneath the sunburst, to make it easier to detect\r\n // when the mouse leaves the parent g.\r\n svg.append('svg:circle')\r\n .attr('r', radius)\r\n .style('stroke', '#fff')\r\n .style('stroke-width', 8)\r\n .style('fill', '#fff')\r\n\r\n var path = svg.datum(root).selectAll('path')\r\n .data(partition.nodes(root))\r\n .enter().append('svg:path')\r\n .attr('d', arc)\r\n .each(function (d) { d.element = root; })\r\n .attr('fill-rule', 'evenodd')\r\n .style('fill', function (d) { return colors(d.CorrectCount / d.Total); })\r\n .style('opacity', 1)\r\n .on('mouseover', mouseover)\r\n .on('click', click);\r\n\r\n paths.push(path);\r\n\r\n // Add the mouseleave handler to the bounding circle.\r\n svg.on('mouseleave', mouseleave).on('mousemove', mousemove);\r\n\r\n // Get total size of the tree = value of root node from partition.\r\n totalSize = path.node().__data__.value;\r\n };\r\n\r\n function click(d) {\r\n \r\n if (self.clickMode() == 'Zoom')\r\n {\r\n for (var i = 0; i < maxCohortIndex; i++) {\r\n var node = d3.selectAll('#sunburst' + i + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == d.SubjectId);\r\n }).data()[0];\r\n if (node != null) {\r\n d3.selectAll('#sunburst' + i + ' path').transition()\r\n .duration(1000)\r\n .attrTween('d', arcTweenZoom(node));\r\n }\r\n \r\n }\r\n\r\n \r\n } else {\r\n addLockSubject(d);\r\n var subject = {\r\n name: d.Name,\r\n id: d.SubjectId\r\n }\r\n self.selectedSubject(subject);\r\n }\r\n }\r\n\r\n // Fade all but the current sequence\r\n function mouseover(d) {\r\n\r\n var percentage = (100 * d.CorrectCount / d.Total).toPrecision(3);\r\n var percentageString = percentage + '%';\r\n \r\n var sequenceArray = getAncestors(d);\r\n\r\n var temphighlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element)\r\n {\r\n return element.SubjectId;\r\n }));\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (temphighlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n\r\n var data = {\r\n subjectName: d.Name,\r\n percentage: percentageString,\r\n cohorts: findSubjectPercentage(d.SubjectId)\r\n }\r\n\r\n tooltip\r\n .datum(data)\r\n .style('display', 'block');\r\n\r\n tooltip\r\n .select('.data-subjects__tooltip__subject')\r\n .text(function(d) { return d.subjectName; });\r\n\r\n tooltip\r\n .select('.data-subjects__tooltip__percentage')\r\n .text(function(d) { return d.percentage; });\r\n\r\n tooltip\r\n .transition()\r\n .duration(500)\r\n .style('opacity', 1);\r\n \r\n drawBarChart(data.cohorts, 205, 80, 7, tooltip.select('.data-subjects__tooltip__barchart'));\r\n }\r\n\r\n function mousemove() {\r\n tooltip\r\n .style('left', (d3.event.pageX + 20) + 'px')\r\n .style('top', (d3.event.pageY + 20) + 'px');\r\n }\r\n\r\n // Restore everything to full opacity when moving off the visualization.\r\n function mouseleave(d) {\r\n\r\n var somethingLocked = (highlightSubjectIds.length != 0);\r\n\r\n // Hide the breadcrumb trail\r\n d3.select('#trail')\r\n .style('visibility', 'hidden');\r\n\r\n // Deactivate all segments during transition.\r\n //d3.selectAll('path').on('mouseover', null);\r\n\r\n //// Transition each segment to full opacity and then reactivate it.\r\n //d3.selectAll('path')\r\n // .transition()\r\n // .duration(1000)\r\n // .style('opacity', 1)\r\n // .each('end', function () {\r\n // d3.select(this).on('mouseover', mouseover);\r\n // });\r\n \r\n if (somethingLocked)\r\n {\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n }\r\n else\r\n {\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 1);\r\n }\r\n\r\n tooltip\r\n .transition()\r\n .duration(500)\r\n .style('opacity', 0)\r\n .each('end', hide);\r\n \r\n function hide() {\r\n d3.select(this).style('display', 'none');\r\n }\r\n\r\n }\r\n \r\n // When zooming: interpolate the scales.\r\n function arcTweenZoom(d) {\r\n var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),\r\n yd = d3.interpolate(y.domain(), [d.y, 1]),\r\n yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);\r\n return function (d, i) {\r\n return i\r\n ? function (t) { return arc(d); }\r\n : function (t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };\r\n };\r\n }\r\n\r\n }\r\n\r\n function findSubjectPercentage(subjectId) {\r\n var result = [];\r\n for (var i = 0; i < maxCohortIndex; i++) {\r\n\r\n var item = {};\r\n item.cohortName = getCohortNameFromCohortIndex(i);\r\n\r\n if (item.cohortName == null) {\r\n continue;\r\n }\r\n\r\n var node = d3.selectAll('#sunburst' + i + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == subjectId);\r\n }).data()[0];\r\n\r\n if (node != null && node.Total != 0) {\r\n item.percentage = node.CorrectCount / node.Total;\r\n } else {\r\n item.percentage = null;\r\n }\r\n\r\n result.push(item);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function isSubjectLocked(subjectId) {\r\n for (var i = 0; i < lockSubjectNodes.length; i++) {\r\n if (lockSubjectNodes[i].SubjectId == subjectId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function addLockSubject(d) {\r\n\r\n if (isSubjectLocked(d.SubjectId)) {\r\n return;\r\n }\r\n\r\n lockSubjectNodes.push(d);\r\n\r\n var data = {\r\n id: d.SubjectId,\r\n subjectName: d.Name,\r\n cohorts: findSubjectPercentage(d.SubjectId)\r\n }\r\n\r\n drawSubjectBarchart(data);\r\n\r\n var sequenceArray = getAncestors(d);\r\n\r\n highlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element) {\r\n return element.SubjectId;\r\n }));\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n\r\n }\r\n\r\n // Given a node in a partition layout, return an array of all of its ancestor\r\n // nodes, highest first, but excluding the root.\r\n function getAncestors(node) {\r\n var path = [];\r\n var current = node;\r\n while (current.parent) {\r\n path.unshift(current);\r\n current = current.parent;\r\n }\r\n return path;\r\n }\r\n\r\n function clearLockSubjects() {\r\n highlightSubjectIds = [];\r\n lockSubjectNodes = [];\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 1);\r\n\r\n d3.selectAll('.data-subjects__barchart')\r\n .remove();\r\n\r\n }\r\n\r\n function removeLockSubject(subjectId) {\r\n for (var i = 0; i < lockSubjectNodes.length; i++) {\r\n if (lockSubjectNodes[i].SubjectId == subjectId) {\r\n lockSubjectNodes.splice(i, 1);\r\n break;\r\n }\r\n }\r\n highlightSubjectIds = [];\r\n for (var i = 0; i < lockSubjectNodes.length; i++) {\r\n var sequenceArray = getAncestors(lockSubjectNodes[i]);\r\n\r\n highlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element) {\r\n return element.SubjectId;\r\n }));\r\n }\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n }\r\n\r\n function drawBarChart(data, width, height, space, target) {\r\n\r\n var y = d3.scale.linear()\r\n .range([height, 0]);\r\n\r\n var chart = target\r\n .attr('width', width)\r\n .attr('height', height);\r\n\r\n y.domain([0, 1]);\r\n\r\n var barWidth = Math.min((width + space) / data.length - space, (width + space) / 4 - space);\r\n\r\n chart.selectAll('g')\r\n .remove();\r\n\r\n var subject = chart.selectAll('g')\r\n .data(data)\r\n .enter().append('g')\r\n .attr('class', 'g')\r\n .attr('transform', function (d, i) { return 'translate(' + i * (barWidth + space) + ',0)'; });\r\n\r\n subject.append('rect')\r\n .attr('y', function (d) { return y(1); })\r\n .attr('height', function (d) { return d.percentage == null ? 0 : y(d.percentage); })\r\n .attr('width', barWidth)\r\n .attr('fill', function (d, i) { return '#E0E0E0'; });\r\n\r\n subject.append('rect')\r\n .attr('y', function (d) { return y(d.percentage); })\r\n .attr('height', function (d) { return height - y(d.percentage); })\r\n .attr('width', barWidth)\r\n .attr('fill', function (d, i) { return bases[self.cohorts()[i].index % bases.length]; });\r\n\r\n //rect.exit().remove();\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Subject Block\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function drawSubjectBarchart(data) {\r\n\r\n var subject = {\r\n name: data.subjectName,\r\n id: data.id\r\n };\r\n\r\n var barchart = d3.select('#barcharts-container')\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart')\r\n .attr('id', 'js-barchart-' + data.id)\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart__inner')\r\n .datum(data)\r\n .on('click', function () { selectSubject(subject); });\r\n\r\n barchart.append('div')\r\n .attr('class', 'data-subjects__barchart__subject')\r\n .text(function (d) { return d.subjectName; });\r\n\r\n //barchart.append('div')\r\n // .attr('class', 'data-subjects__barchart__percentage')\r\n // .text(function (d) { return d.percentage; });\r\n\r\n //var width = parseInt(container.style('width'), 10);\r\n\r\n var target = barchart.append('svg')\r\n .attr('class', 'data-subjects__barchart__diagram');\r\n \r\n var width = parseInt(barchart.style('width'), 10) - 30;\r\n var height = width * 3 / 4;\r\n\r\n drawBarChart(data.cohorts, width, height, 10, target);\r\n\r\n barchart\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart__delete center-block')\r\n .on('click', function () { d3.event.stopPropagation(); deleteSubject(subject.id); });\r\n }\r\n\r\n});\n","define('pages/data/onecohortcomparesubjects',['jquery', 'c3', 'knockout', 'bootstrap', 'bootstrapDateTimePicker'], function ($, c3, ko) {\r\n $(function () {\r\n\r\n });\r\n\r\n function FilterValue(data) {\r\n this.Value = ko.observable(data.Value);\r\n this.Text = ko.observable(data.Text);\r\n }\r\n\r\n ko.bindingHandlers.fadeVisible = {\r\n update: function (element, valueAccessor) {\r\n if (valueAccessor().visible) {\r\n switch (valueAccessor().firstFilterValue) {\r\n case 'SIC':\r\n getClassList();\r\n break;\r\n case 'SBT':\r\n getTeacherList();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n valueAccessor().visible ? $(element).removeClass('hide') : $(element).addClass('hide');\r\n }\r\n };\r\n\r\n\r\n\r\n var self;\r\n\r\n function OneCohortCompareSubjectsViewModel() {\r\n self = this;\r\n\r\n self.subjectIds = ko.observableArray([3, 49]);\r\n\r\n self.firstFilter = [\r\n { name: \"Students in Class...\", value: \"SIC\" },\r\n { name: \"Students Taught by Teacher...\", value: \"SBT\" },\r\n { name: \"Students in Your School\", value: \"SIS\" },\r\n { name: \"Students in Region of Country...\", value: \"SIR\" },\r\n { name: \"Students in Country...\", value: \"SICO\" },\r\n { name: \"Classes in Your School\", value: \"CIS\" },\r\n { name: \"Teachers in Your School\", value: \"TIS\" },\r\n { name: \"Regions in Country...\", value: \"RIC\" },\r\n { name: \"All Countries\", value: \"AC\" }\r\n ];\r\n\r\n self.firstFilterValue = ko.observable(self.firstFilter[0]);\r\n\r\n self.classFilter = ko.observable([]);\r\n self.classFilterValue = ko.observable();\r\n\r\n self.teacherFilter = ko.observable([]);\r\n self.teacherFilterValue = ko.observable();\r\n\r\n self.countryFilter = ko.observable([]);\r\n self.countryFilterValue = ko.observable();\r\n self.regionFilter = ko.observable([]);\r\n self.regionFilterValue = ko.observable();\r\n\r\n self.advancedFiltering = ko.observable(false);\r\n self.ifSetDateRage = ko.observable(false);\r\n self.ifSetAgeRage = ko.observable(false);\r\n\r\n self.startDate = ko.observable();\r\n self.endDate = ko.observable();\r\n\r\n self.ageFrom = ko.observable();\r\n self.ageTo = ko.observable();\r\n\r\n self.attemptsFilter = [\r\n { name: \"All Attempts\", value: \"All\" },\r\n { name: \"Only the First Attempt\", value: \"First\" },\r\n { name: \"Only the Last Attempt\", value: \"Last\" },\r\n ];\r\n self.attemptsFilterValue = ko.observable();\r\n\r\n self.ShowDataGrid = ko.observableArray();\r\n\r\n self.nameList = ko.observableArray();\r\n self.columnName = ko.observableArray();\r\n\r\n self.XData = ko.observable([]);\r\n\r\n self.YData = ko.observable([]);\r\n //getClassList();\r\n\r\n self.applyFilter = function () { applyFilter() };\r\n\r\n self.showPercentage = function (data) {\r\n if (data == null || isNaN(data))\r\n return data;\r\n else\r\n return Math.round(data * 100) + ' %';\r\n }\r\n }\r\n\r\n function getClassList() {\r\n if (self.classFilter().length == 0) {\r\n $.getJSON('/Data/LoadGroups', function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.classFilter(mappedTasks);\r\n });\r\n }\r\n }\r\n\r\n function getTeacherList() {\r\n if (self.teacherFilter().length == 0) {\r\n $.getJSON('/Data/LoadTeachers', function (data) {\r\n var mappedTasks = $.map(data, function (item) { return new FilterValue(item) });\r\n self.teacherFilter(mappedTasks);\r\n });\r\n }\r\n }\r\n\r\n function getStudentList() {\r\n\r\n $.getJSON('/Data/LoadStudents', function (data) {\r\n for (var i = 0; i < data.length; i++)\r\n self.nameList.push(data[i].Value);\r\n\r\n constructColumnName();\r\n // self.ShowDataGrid.push(self.nameList());\r\n });\r\n\r\n }\r\n\r\n function applyFilter() {\r\n\r\n self.nameList([]);\r\n self.ShowDataGrid([]);\r\n getStudentList();\r\n\r\n var filter = getFilter();\r\n\r\n filter.subjectId = self.subjectIds()[0];\r\n getData(filter, 0);\r\n\r\n filter.subjectId = self.subjectIds()[1];\r\n getData(filter, 1);\r\n \r\n }\r\n\r\n function getData(filter, i) {\r\n $.ajax({\r\n url: '/Data/StudentsCompareSubjects',\r\n type: 'POST',\r\n // async: false,\r\n data: JSON.stringify(filter),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n\r\n //var cohortName = setCohortName(data.CohortDetails.Name);\r\n\r\n // filterRecorder(filter, cohortName);\r\n addTableData(data, i);\r\n // refreshBarChart(0);\r\n paintScatterChat();\r\n }\r\n });\r\n }\r\n\r\n function addTableData(data, i)\r\n {\r\n var tempcolumn = [];\r\n\r\n //for (var i = 0; i < self.CohortsDetailsAndSubjectsMarks().length; i++) {\r\n // var i = self.CohortsDetailsAndSubjectsMarks().length - 1;\r\n var cohortName;\r\n\r\n\r\n if (i == 0)\r\n cohortName = 'Math';\r\n else\r\n cohortName = 'Algebra';\r\n\r\n //var columnName = setCohortName(data.CohortDetails.Name);\r\n\r\n tempcolumn.push(cohortName);\r\n\r\n for (var j = 0; j < self.nameList().length; j++) {\r\n\r\n for (var k = 0; k < data.length; k++) {\r\n if (self.nameList()[j] == data[k].StudentId) {\r\n\r\n tempcolumn.push(data[k].CorrectCount / data[k].Total);\r\n // tempcolumn.push(data.CohortSubjectsMarks[k].CorrectPercentage);\r\n break;\r\n }\r\n }\r\n if (tempcolumn.length == j + 1)\r\n tempcolumn.push(null);\r\n }\r\n self.ShowDataGrid.push(tempcolumn);\r\n //}\r\n }\r\n\r\n function constructColumnName() {\r\n self.columnName([]);\r\n var oneColumn = {};\r\n oneColumn.Id = 0;\r\n oneColumn.Name = 'Subject';\r\n self.columnName.push(oneColumn);\r\n for (var i = 0; i < self.nameList().length; i++) {\r\n oneColumn = {};\r\n oneColumn.Id = i + 1;\r\n oneColumn.Name = self.nameList()[i];\r\n self.columnName.push(oneColumn);\r\n }\r\n }\r\n\r\n function paintScatterChat()\r\n {\r\n var chart = c3.generate({\r\n size: {\r\n height: 500\r\n // width: 480\r\n },\r\n data: {\r\n xs: {\r\n Math: 'Algebra',\r\n },\r\n // iris data from R\r\n columns: self.ShowDataGrid(),\r\n type: 'scatter'\r\n },\r\n axis: {\r\n x: {\r\n label: 'Math',\r\n tick: {\r\n format: d3.format(\"%\"),\r\n fit: false\r\n }\r\n },\r\n y: {\r\n\r\n tick: {\r\n format: d3.format(\"%\")\r\n // format: function (d) { return \"$\" + d; }\r\n },\r\n label: 'Algebra'\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getFilter() {\r\n var filter = {};\r\n\r\n switch (self.firstFilterValue().value) {\r\n case 'SIC':\r\n filter.selectedgroupid = self.classFilterValue().Value();\r\n filter.userfilter = 'Group';\r\n break;\r\n case 'SBT':\r\n filter.selectedteacherid = self.teacherFilterValue().Value();\r\n filter.userfilter = 'Teacher';\r\n break;\r\n case 'SIS':\r\n filter.userfilter = 'School';\r\n break;\r\n case 'SIR':\r\n filter.selectedcountry = self.countryFilterValue();\r\n filter.selectedregion = self.regionFilterValue();\r\n filter.userfilter = 'Country';\r\n break;\r\n case 'SICO':\r\n filter.selectedcountry = self.countryFilterValue();\r\n filter.userfilter = 'Country';\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (self.advancedFiltering()) {\r\n if (self.ifSetDateRage()) {\r\n filter.IsFilteredByDateRange = self.ifSetDateRage();\r\n filter.StartDate = self.startDate();\r\n filter.EndDate = self.endDate();\r\n }\r\n if (self.ifSetDateRage()) {\r\n filter.IsFilteredByAgeRange = self.ifSetDateRage();\r\n filter.AgeRangeYoungest = self.ageFrom();\r\n filter.AgeRangeOldest = self.ageTo();\r\n }\r\n filter.AttemptsFilter = self.attemptsFilterValue();\r\n }\r\n\r\n return filter;\r\n }\r\n\r\n ko.applyBindings(new OneCohortCompareSubjectsViewModel());\r\n});\n","define('pages/data/onequestioncomparecohorts',['jquery', 'dataFilter', 'c3', 'd3', 'bootstrap', 'moment', 'bootstrapDateTimePicker'], function ($, dataFilter, c3, d3) {\r\n\r\n $(function () {\r\n\r\n dataFilter.prototype.init();\r\n\r\n //paintWithPercentage();\r\n\r\n paintWithPercentage();\r\n //$('#chart')\r\n\r\n\r\n });\r\n\r\n $('.js-delete-cohort').click(function (event) {\r\n event.preventDefault();\r\n var cohortName = $(this).closest('tr').find('td').eq(0).text();\r\n unloadCohort(cohortName);\r\n $(this).closest('tr').remove();\r\n });\r\n\r\n var columns;\r\n\r\n //$('input:radio[name=toggleCountsPercentage]').change(function () {\r\n\r\n // if (this.value == 'counts') {\r\n // paintWithCounts();\r\n // }\r\n // else {\r\n \r\n // paintWithPercentage();\r\n // }\r\n //});\r\n var chart;\r\n function paintPercentage()\r\n {\r\n chart = c3.generate({\r\n size: {\r\n height: 500\r\n //width: 700\r\n },\r\n data: {\r\n columns: columns,\r\n type: 'bar',\r\n //labels: {\r\n // format: {\r\n // y: d3.format('%')\r\n // }\r\n //}\r\n },\r\n \r\n bar: {\r\n width: {\r\n ratio: 0.5 // this makes bar width 50% of length between ticks\r\n }\r\n },\r\n axis: {\r\n x: {\r\n //label: 'X Label',\r\n \r\n tick: {\r\n \r\n format: function (x) { return String.fromCharCode(x + 'A'.charCodeAt(0)) }\r\n }\r\n },\r\n y: {\r\n\r\n max: 1,\r\n min: 0,\r\n tick: {\r\n format: d3.format(\"%\")\r\n // format: function (d) { return \"$\" + d; }\r\n },\r\n padding: { top: 0, bottom: 0 }\r\n }\r\n },\r\n\r\n });\r\n }\r\n\r\n function paintCounts() {\r\n chart = c3.generate({\r\n\r\n data: {\r\n columns: columns,\r\n type: 'bar',\r\n labels: {\r\n format: {\r\n y: d3.format('')\r\n }\r\n }\r\n },\r\n\r\n bar: {\r\n width: {\r\n ratio: 0.5 // this makes bar width 50% of length between ticks\r\n }\r\n },\r\n axis: {\r\n x: {\r\n tick: {\r\n\r\n format: function (x) { return String.fromCharCode(x + 'A'.charCodeAt(0)) }\r\n }\r\n },\r\n y: {\r\n\r\n padding: { top: 5, bottom: 0 }\r\n }\r\n },\r\n\r\n });\r\n }\r\n\r\n function getPercentage()\r\n {\r\n columns = [];\r\n for (var i = 0; i < model.length; i++) {\r\n columns.push([model[i].CohortDetails.Name,\r\n model[i].PercentageA,\r\n model[i].PercentageB,\r\n model[i].PercentageC,\r\n model[i].PercentageD]);\r\n\r\n }\r\n\r\n }\r\n\r\n function getCounts()\r\n {\r\n columns = [];\r\n for (var i = 0; i < model.length; i++) {\r\n columns.push([model[i].CohortDetails.Name,\r\n model[i].CountA,\r\n model[i].CountB,\r\n model[i].CountC,\r\n model[i].CountD]);\r\n\r\n }\r\n }\r\n\r\n function paintWithPercentage()\r\n {\r\n getPercentage();\r\n paintPercentage();\r\n }\r\n\r\n function paintWithCounts()\r\n {\r\n getCounts();\r\n paintCounts();\r\n }\r\n\r\n function unloadCohort(cohortName)\r\n {\r\n chart.unload({\r\n ids: cohortName\r\n });\r\n }\r\n\r\n});\n","define('pages/data/question',['jquery', 'c3', 'knockout', 'crossroads', 'hasher', 'toastr', 'bootstrap', 'moment', 'bootstrapDateTimePicker', 'jqueryBootstrapPagination', 'pages/data/utility', 'sweetalert'], function ($, c3, ko, crossroads, hasher, toastr) {\r\n\r\n $(function () {\r\n \r\n });\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n ko.bindingHandlers.updatePager = {\r\n update: function (element, valueAccessor) {\r\n var cohortName = valueAccessor();\r\n\r\n var pageRecord = getPageInfo(cohortName);\r\n if (pageRecord != null) {\r\n\r\n if (currentCohortName != cohortName)\r\n {\r\n currentCohortName = cohortName;\r\n applyAnswerFilter();\r\n }\r\n }\r\n }\r\n };\r\n\r\n\r\n ko.bindingHandlers.timeAgo = {\r\n update: function (element, valueAccessor) {\r\n var date = valueAccessor(),\r\n timeAgo = toTimeAgo(date);\r\n return ko.bindingHandlers.html.update(element, function () {\r\n return '';\r\n });\r\n }\r\n };\r\n\r\n ko.components.register('filter-widget', {\r\n viewModel:\r\n { require: '/App/scripts/components/dq-data-filter.js' },\r\n template:\r\n { require: 'text!/App/scripts/components/dq-data-filter.html' }\r\n });\r\n \r\n \r\n\r\n var self;\r\n\r\n var filterRecorder = [];\r\n var pageRecorder = [];\r\n var currentCohortName;\r\n var OrderByChoicesWithLastName = [\r\n { name: \"Likes\", value: \"Likes\" },\r\n { name: \"Last Name\", value: \"Default\" },\r\n { name: \"Newest\", value: \"Newest\" },\r\n { name: \"Oldest\", value: \"Oldest\" },\r\n { name: \"Longest Reason\", value: \"Longest\" }\r\n ];\r\n var OrderByChoicesWithoutLastName = [\r\n { name: \"Likes\", value: \"Likes\" },\r\n { name: \"Newest\", value: \"Newest\" },\r\n { name: \"Oldest\", value: \"Oldest\" },\r\n { name: \"Longest Reason\", value: \"Longest\" }\r\n ];\r\n\r\n var previousParams = [],\r\n currentHash,\r\n currentParams = [];\r\n\r\n function QuestionViewModel() {\r\n self = this;\r\n\r\n self.IsInit = false;\r\n\r\n self.IsAdvanced = ko.observable(false);\r\n\r\n self.countsPercentage = ko.observable('counts');\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self.questionId = viewmodel.QuestionId;\r\n self.correctAnswer = viewmodel.CorrectAnswer;\r\n self.schoolId = viewmodel.SchoolId;\r\n\r\n self.UserRole = $('#usertype').data('userrole');\r\n\r\n self.CohortAnswerCounts = ko.observableArray();\r\n self.CohortAnswerCountsForChart = ko.observableArray();\r\n self.IndividualAnswers = ko.observableArray();\r\n self.CurrentCohortAnswers = ko.observableArray();\r\n \r\n self.SelectedCohortName = ko.observable();\r\n self.IfSelectedStudentCohort = ko.observable();\r\n self.IfSelectedStudentCohort.subscribe(function (newValue) {\r\n if (newValue)\r\n self.OrderByChoices(OrderByChoicesWithLastName);\r\n else\r\n self.OrderByChoices(OrderByChoicesWithoutLastName);\r\n });\r\n\r\n self.AnswerFilterChoices = [\r\n { name: \"All\", value: 0 },\r\n { name: \"A\", value: 1 },\r\n { name: \"B\", value: 2 },\r\n { name: \"C\", value: 3 },\r\n { name: \"D\", value: 4 }\r\n ];\r\n\r\n self.AnswerFilter = ko.observable(self.AnswerFilterChoices[self.correctAnswer]);\r\n self.AnswerFilter.subscribe(function (newValue) {\r\n applyAnswerFilter();\r\n });\r\n\r\n self.IfFilteredByReasonExist = ko.observable(true);\r\n self.IfFilteredByReasonExist.subscribe(function (newValue) {\r\n applyAnswerFilter();\r\n });\r\n\r\n self.OrderByChoices = ko.observableArray(OrderByChoicesWithoutLastName);\r\n\r\n self.OrderBy = ko.observable(self.OrderByChoices()[0]);\r\n self.OrderBy.subscribe(function (newValue) {\r\n applyAnswerFilter();\r\n });\r\n\r\n addPageFunctions();\r\n }\r\n\r\n var thisPage = new QuestionViewModel();\r\n\r\n //right place to put this \r\n initRouter();\r\n\r\n self.hasCorhort = hasher.getHash() != '';\r\n\r\n ko.applyBindings(thisPage);\r\n\r\n\r\n function addPageFunctions() {\r\n self.getInitFilter = function () {\r\n return null;\r\n }\r\n self.applyFilter = function (filter) {\r\n var hashUrl = hasher.getHash();\r\n\r\n var url = getUrlFromFilter(filter);\r\n if (getCohortNameByUrl(url) != null) {\r\n toastr[\"error\"]('Cohort already exists!', \"Error\");\r\n return;\r\n }\r\n\r\n hasher.setHash(hashUrl + url);\r\n }\r\n\r\n self.showFilter = function () {\r\n self.IsAdvanced('Advanced');\r\n }\r\n\r\n self.deleteCohort = function () {\r\n var url = this.CohortDetails.FilterUrl;\r\n\r\n var newHash = currentHash.replace(url, '');\r\n hasher.setHash(newHash);\r\n }\r\n\r\n self.likeAnswerButton = function (element, event) {\r\n likeAnswerButton(element, event); \r\n }\r\n\r\n self.reportAnswerButton = function (element, event) {\r\n reportAnswerButton(element, event);\r\n }\r\n\r\n self.showPercentage = function (data) {\r\n if (data == null || isNaN(data))\r\n return data;\r\n else\r\n return Math.round(data * 100) + ' %';\r\n }\r\n\r\n self.ClearAllCohorts = function () {\r\n hasher.setHash('');\r\n }\r\n\r\n self.getAnswerLabel = function (x) { return String.fromCharCode(x + 'A'.charCodeAt(0) - 1) }\r\n\r\n }\r\n\r\n function clearData() {\r\n\r\n\r\n self.SelectedCohortName(\"\");\r\n self.CohortAnswerCounts([]);\r\n self.CurrentCohortAnswers([]);\r\n self.IndividualAnswers([]);\r\n self.CohortAnswerCountsForChart([]);\r\n filterRecorder = [];\r\n chart = 0;\r\n }\r\n\r\n function deleteCohortByUrl(url)\r\n {\r\n\r\n var cohortName = getCohortNameByUrl(url);\r\n if (cohortName == null) {\r\n toastr[\"error\"]('Cohort not found!', \"Error\");\r\n return;\r\n }\r\n\r\n removeCohortInfoByCohortName(cohortName);\r\n\r\n removeFilterRecord(cohortName);\r\n if (filterRecorder.length == 0) {\r\n clearData();\r\n return;\r\n }\r\n if (self.SelectedCohortName() == cohortName) {\r\n self.SelectedCohortName(filterRecorder[0].cohortName);\r\n self.CurrentCohortAnswers([]);\r\n }\r\n\r\n removeBarChartData(cohortName);\r\n refreshBarChart(cohortName);\r\n }\r\n\r\n function getCohortNameByUrl(url) {\r\n for (var i = 0; i < self.CohortAnswerCounts().length; i++) {\r\n if (self.CohortAnswerCounts()[i].CohortDetails.FilterUrl == url)\r\n return self.CohortAnswerCounts()[i].CohortDetails.Name;\r\n }\r\n return null;\r\n }\r\n\r\n function removeCohortInfoByCohortName(cohortName) {\r\n for (var i = 0; i < self.CohortAnswerCounts().length; i++) {\r\n if (self.CohortAnswerCounts()[i].CohortDetails.Name == cohortName) {\r\n self.CohortAnswerCounts.remove(self.CohortAnswerCounts()[i]);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function likeAnswerButton(element, event) {\r\n var answerid = element.AnswerId;\r\n var btn = event.target;\r\n\r\n if (element.IsLiked) {\r\n //remove like\r\n var model = { answerid: answerid };\r\n $.ajax({\r\n url: '/Data/RemoveLikeAnswer',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data == true) {\r\n $(btn).text('Like');\r\n element.IsLiked = false;\r\n element.Ratings = element.Ratings - 1;\r\n $(btn.parentElement.previousElementSibling).text(element.Ratings);\r\n }\r\n else {\r\n swal('Failed', 'Failed to remove like', 'error');\r\n }\r\n }\r\n }); \r\n }\r\n else {\r\n //like it\r\n var model = { answerid: answerid };\r\n $.ajax({\r\n url: '/Data/AddLikeAnswer',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data == true) {\r\n $(btn).text('Unlike');\r\n element.IsLiked = true;\r\n element.Ratings = element.Ratings + 1;\r\n $(btn.parentElement.previousElementSibling).text(element.Ratings);\r\n toastr['success']('Thank you for liking an explanation', \"Liked!\");\r\n }\r\n else {\r\n toastr['error']('You need to login first', \"Failed\");\r\n }\r\n }\r\n }); \r\n }\r\n }\r\n\r\n function reportAnswerButton(element, event) {\r\n var answerid = element.AnswerId;\r\n \r\n var model = { answerid: answerid };\r\n $.ajax({\r\n url: '/Data/ReportAnswer',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr['success']('Thank you for reporting this explanation. It will be removed from future searches.', 'Success');\r\n }\r\n else {\r\n toastr['error'](data.status, 'Failed');\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getPageInfo(cohortName) {\r\n for (var i = 0; i < pageRecorder.length; i++) {\r\n if (pageRecorder[i].cohortName == cohortName)\r\n return pageRecorder[i];\r\n }\r\n return null;\r\n }\r\n\r\n //function removeIndividualAnswers(cohortName) {\r\n // self.IndividualAnswers().forEach(function (item) {\r\n // if (item.cohortName == cohortName) {\r\n // self.IndividualAnswers.remove(item);\r\n // }\r\n // });\r\n //}\r\n\r\n function removeFilterRecord(cohortName) {\r\n for (var i = 0; i < filterRecorder.length; i++) {\r\n if (filterRecorder[i].cohortName == cohortName)\r\n filterRecorder.remove(i);\r\n }\r\n }\r\n\r\n\r\n function removeBarChartData(cohortName) {\r\n\r\n self.CohortAnswerCountsForChart().forEach(function (item) {\r\n if (item[0] == cohortName) {\r\n self.CohortAnswerCountsForChart.remove(item);\r\n \r\n }\r\n });\r\n\r\n }\r\n\r\n function clearData() {\r\n self.CohortAnswerCounts([]);\r\n chart = 0;\r\n }\r\n\r\n function applyFilter(filter) {\r\n\r\n\r\n var model = {\r\n questionId: self.questionId,\r\n filter: filter,\r\n answerfilter: getAnswerFilter(),\r\n page: 1\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/QuestionJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n\r\n if (data.status == 'error') {\r\n toastr[\"error\"](data.errorMessage, \"Error\");\r\n var url = getUrlFromFilter(filter);\r\n\r\n var newHash = currentHash.replace(url, '');\r\n replaceHashSilently(newHash);\r\n return;\r\n }\r\n\r\n var cohortName = setCohortName(data.CohortQuestionAnswerCounts.CohortDetails.Name);\r\n\r\n var ifStudentFilter = (filter.userfilter == \"All\" || filter.userfilter == \"Country\") ? false : true;\r\n\r\n self.IfSelectedStudentCohort(ifStudentFilter);\r\n\r\n filterRecorder.push({ filter: filter, cohortName: cohortName, ifStudentFilter: ifStudentFilter });\r\n\r\n pageRecorder.push({ cohortName: cohortName, pageNum: data.IndividualAnswersPage});\r\n\r\n data.CohortQuestionAnswerCounts.CohortDetails.Name = cohortName;\r\n data.CohortQuestionAnswerCounts.CohortDetails.FilterDetailString = getFilterDetailString(filter);\r\n data.CohortQuestionAnswerCounts.CohortDetails.FilterUrl = getUrlFromFilter(filter);\r\n if (filter.IsFilteredByDateRange == true)\r\n {\r\n data.CohortQuestionAnswerCounts.CohortDetails.IsSetDateRange = true;\r\n // data.CohortQuestionAnswerCounts.CohortDetails.StartDate = filter.StartDate;\r\n // data.CohortQuestionAnswerCounts.CohortDetails.EndDate = filter.EndDate;\r\n data.CohortQuestionAnswerCounts.CohortDetails.DateRangeString = getDateRangeString(filter);\r\n }\r\n else\r\n data.CohortQuestionAnswerCounts.CohortDetails.IsSetDateRange = false;\r\n\r\n self.CohortAnswerCounts.push(data.CohortQuestionAnswerCounts);\r\n\r\n if (data.CohortQuestionAnswerCounts.Total == 0)\r\n self.CohortAnswerCountsForChart.push([\r\n cohortName,\r\n null, null, null, null\r\n ]);\r\n else\r\n self.CohortAnswerCountsForChart.push([\r\n cohortName,\r\n data.CohortQuestionAnswerCounts.PercentageA,\r\n data.CohortQuestionAnswerCounts.PercentageB,\r\n data.CohortQuestionAnswerCounts.PercentageC,\r\n data.CohortQuestionAnswerCounts.PercentageD\r\n ]);\r\n\r\n //self.IndividualAnswers.push({\r\n // cohortName: cohortName,\r\n // answers: parseDate(data.IndividualAnswers)\r\n //});\r\n\r\n self.CurrentCohortAnswers(parseDate(data.IndividualAnswers));\r\n\r\n changeTotalPage(cohortName, data.IndividualAnswersPage);\r\n\r\n currentCohortName = cohortName;\r\n self.SelectedCohortName(cohortName);\r\n\r\n refreshBarChart(0);\r\n\r\n self.IsInit = true;\r\n }\r\n });\r\n }\r\n\r\n function parseDate(data)\r\n {\r\n var date;\r\n for(var i = 0; i < data.length; i++)\r\n {\r\n date = new Date(parseInt(data[i].DateAnswered.substr(6)));\r\n data[i].DateAnswered = date;\r\n data[i].DateAnsweredString = date.getDate() + \"/\"\r\n + (date.getMonth() + 1) + \"/\"\r\n + date.getFullYear() + \" \"\r\n + date.getHours() + \":\"\r\n + date.getMinutes();\r\n }\r\n\r\n return data;\r\n }\r\n\r\n function getAnswerFilter()\r\n {\r\n var answerfilter = {};\r\n\r\n answerfilter.AnswerFilter = self.AnswerFilter().value;\r\n answerfilter.IfFilteredByReasonExist = self.IfFilteredByReasonExist();\r\n answerfilter.OrderBy = self.OrderBy().value;\r\n\r\n return answerfilter;\r\n }\r\n\r\n function applyAnswerFilter() {\r\n var cohortName = self.SelectedCohortName();\r\n var filter = getFilterByCohortName(cohortName);\r\n if (filter == null)\r\n return;\r\n\r\n \r\n\r\n var model = { questionId: self.questionId, filter: filter.filter, answerFilter: getAnswerFilter()};\r\n\r\n $.ajax({\r\n url: '/Data/QuestionJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n self.IfSelectedStudentCohort(filter.ifStudentFilter);\r\n replacePageData(cohortName, data.IndividualAnswers);\r\n changeTotalPage(cohortName, data.IndividualAnswersPage);\r\n }\r\n });\r\n }\r\n\r\n\r\n function loadIndividualAnswersPage(cohortName, page) {\r\n var filter = getFilterByCohortName(cohortName).filter;\r\n\r\n var model = { questionId: self.questionId ,filter: filter, answerFilter: getAnswerFilter(), page: page };\r\n\r\n $.ajax({\r\n url: '/Data/QuestionIndividualAnswersPageJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n replacePageData(cohortName, data);\r\n // changePageRecord(cohortName, page);\r\n }\r\n });\r\n }\r\n\r\n\r\n function changePageRecord(cohortName, page)\r\n {\r\n for (var i = 0; i < pageRecorder.length; i++) {\r\n if (pageRecorder[i].cohortName == cohortName)\r\n pageRecorder[i].page = page;\r\n }\r\n }\r\n\r\n function changeTotalPage(cohortName, pages) {\r\n for (var i = 0; i < pageRecorder.length; i++) {\r\n if (pageRecorder[i].cohortName == cohortName)\r\n pageRecorder[i].total_pages = pages;\r\n }\r\n\r\n $(\"#individual-answers-pager-container\").html('');\r\n $(\"#individual-answers-pager-container\").html('');\r\n\r\n $(\"#individual-answers-pager\").pagination({\r\n total_pages: pages,\r\n current_page: 1,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return loadIndividualAnswersPage(cohortName, page);\r\n }\r\n });\r\n }\r\n\r\n //function replacePageData(cohortName, individualAnswers) {\r\n // self.IndividualAnswers().forEach(function (item) {\r\n // if (item.cohortName == cohortName) {\r\n // self.IndividualAnswers.remove(item);\r\n // self.IndividualAnswers.push({\r\n // cohortName: cohortName,\r\n // answers: parseDate(individualAnswers)\r\n // });\r\n // }\r\n // });\r\n //}\r\n\r\n function replacePageData(cohortName, individualAnswers) {\r\n self.CurrentCohortAnswers(parseDate(individualAnswers));\r\n }\r\n\r\n\r\n function getFilterByCohortName(cohortName) {\r\n for (var i = 0; i < filterRecorder.length; i++) {\r\n if (filterRecorder[i].cohortName == cohortName)\r\n return filterRecorder[i];\r\n }\r\n return null;\r\n }\r\n\r\n function getDateRangeString(filter) {\r\n var result = \"\";\r\n\r\n if (filter.IsFilteredByDateRange)\r\n result += filter.StartDate + \" to \" + filter.EndDate + \"\\n\";\r\n\r\n return result;\r\n }\r\n\r\n\r\n function setCohortName(name) {\r\n for (var i = 0; i < self.CohortAnswerCounts().length; i++) {\r\n if (self.CohortAnswerCounts()[i].CohortDetails.Name == name) {\r\n return tryName(name, 2);\r\n }\r\n }\r\n return name;\r\n }\r\n\r\n function tryName(name, num) {\r\n for (var i = 0; i < self.CohortAnswerCounts().length; i++) {\r\n if (self.CohortAnswerCounts()[i].CohortDetails.Name == name + ' ' + num) {\r\n return tryName(name, num + 1);\r\n }\r\n }\r\n return name + ' ' + num;\r\n }\r\n\r\n var chart = 0;\r\n function paintBarChart() {\r\n chart = c3.generate({\r\n size: {\r\n height: 500\r\n },\r\n data: {\r\n columns: self.CohortAnswerCountsForChart(),\r\n type: 'bar'\r\n },\r\n bar: {\r\n width: {\r\n ratio: 0.5\r\n }\r\n },\r\n axis: {\r\n x: {\r\n tick: {\r\n format: function (x) { return String.fromCharCode(x + 'A'.charCodeAt(0)) }\r\n }\r\n },\r\n y: {\r\n\r\n max: 1,\r\n min: 0,\r\n tick: {\r\n format: d3.format(\"%\")\r\n },\r\n padding: { top: 0, bottom: 0 }\r\n }\r\n }\r\n });\r\n }\r\n\r\n function refreshBarChart(removedCohortName) {\r\n if (removedCohortName == 0) {\r\n if (self.CohortAnswerCounts().length > 0) {\r\n if (chart == 0)\r\n paintBarChart();\r\n else\r\n loadCohort();\r\n }\r\n }\r\n else {\r\n unloadCohort(removedCohortName);\r\n }\r\n }\r\n\r\n function loadCohort() {\r\n chart.load({\r\n columns: self.CohortAnswerCountsForChart()\r\n });\r\n }\r\n\r\n function unloadCohort(cohortName) {\r\n chart.unload({\r\n ids: cohortName\r\n });\r\n }\r\n\r\n $('.js-cohort-details').tooltip({\r\n container: '#cohort-daterange-container',\r\n // html: true,\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n\r\n function replaceHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.replaceHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n\r\n function initRouter() {\r\n //setup crossroads\r\n crossroads.addRoute('/:params*:/',\r\n function (params) {\r\n processFilterParams(params);\r\n });\r\n\r\n // crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n currentHash = newHash;\r\n crossroads.parse(newHash);\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n function processFilterParams(params) {\r\n if (params == null || params.length == 0) {\r\n clearData();\r\n return;\r\n }\r\n\r\n // split the url;\r\n var parameters = params.split('/');\r\n\r\n // group the params by filter\r\n var paramsGroups = [], size = 7;\r\n\r\n while (parameters.length > 0)\r\n paramsGroups.push(parameters.splice(0, size));\r\n\r\n var lastLength = paramsGroups[paramsGroups.length - 1].length;\r\n if (lastLength < 7 && lastLength > 1) {\r\n // fill the params if incomplete\r\n for (var i = lastLength - 1; i < 7; i++) {\r\n paramsGroups[paramsGroups.length - 1].push(\"\");\r\n currentHash = currentHash + '/';\r\n }\r\n replaceHashSilently(currentHash);\r\n } else if (lastLength <= 1) {\r\n paramsGroups.pop(paramsGroups[paramsGroups.length - 1]);\r\n }\r\n\r\n previousParams = currentParams;\r\n currentParams = paramsGroups;\r\n\r\n calDifference(previousParams, currentParams);\r\n\r\n if (currentParams.length > 1) {\r\n self.IsAdvanced('Advanced');\r\n }\r\n\r\n }\r\n\r\n // find the differece \r\n // then apply new cohort or remove deleted cohort\r\n function calDifference(previousParams, currentParams) {\r\n var deletedCohort = [],\r\n addedCohort = [];\r\n var iPrevious = 0,\r\n iCurrent = 0;\r\n while (iPrevious < previousParams.length || iCurrent < currentParams.length) {\r\n if (iPrevious >= previousParams.length) {\r\n //put into added box\r\n addedCohort.push(currentParams[iCurrent]);\r\n iCurrent++;\r\n }\r\n else if (iCurrent >= currentParams.length) {\r\n //put into deleted box\r\n deletedCohort.push(previousParams[iPrevious]);\r\n iPrevious++;\r\n }\r\n else if (isSameCohort(previousParams[iPrevious], currentParams[iCurrent])) {\r\n iPrevious++;\r\n iCurrent++;\r\n }\r\n else {\r\n //put into deleted box\r\n deletedCohort.push(previousParams[iPrevious]);\r\n iPrevious++;\r\n }\r\n\r\n }\r\n\r\n for (var i = 0; i < deletedCohort.length; i++) {\r\n var url = getUrlFromFilter(getFilterFromParams(deletedCohort[i]));\r\n deleteCohortByUrl(url);\r\n }\r\n for (var i = 0; i < addedCohort.length; i++) {\r\n applyFilter(getFilterFromParams(addedCohort[i]));\r\n }\r\n\r\n }\r\n\r\n function isSameCohort(params1, params2) {\r\n for (var i = 0; i < params1.length; i++) {\r\n if (params1[i] != params2[i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n});\n","define('pages/data/questions',['jquery', 'dataFilter','tmpl', 'jqueryValidate', 'bootstrap', 'moment', 'bootstrapDateTimePicker', 'jqueryBootstrapPagination'], function ($, dataFilter,tmpl) {\r\n\r\n var selectedUserId = 0;\r\n\r\n $(function () {\r\n\r\n dataFilter.prototype.init();\r\n\r\n $(\"#question-pager\").pagination({\r\n total_pages: $(\"#question-pager\").data('questionnumpage'),\r\n current_page: 1,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return loadQuestionsPage(page);\r\n }\r\n });\r\n\r\n $(\"#student-pager\").pagination({\r\n total_pages: $(\"#student-pager\").data('studentsnumpage'),\r\n current_page: 1,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return loadStudentsPage(page);\r\n }\r\n });\r\n\r\n $(\"#order-questions-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n $('#question-misconception-container').tooltip({\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('#question-misconception-container').on('click', '.js-answer-dot', function () {\r\n\r\n // Find all answer dots linked to this one by title\r\n selectedUserId = $(this).data('userid');\r\n \r\n selectUserDots(selectedUserId);\r\n });\r\n\r\n $('.js-show-data-filter').click(function () {\r\n $(this).addClass('hide');\r\n $('.js-data-filter').removeClass('hide');\r\n });\r\n\r\n });\r\n\r\n function selectUserDots(userId) {\r\n \r\n if (userId == 0)\r\n return;\r\n\r\n $('.js-answer-dot[data-userid!=\"' + userId + '\"]')\r\n .removeClass('icon-circle')\r\n .addClass('icon-circle-blank');\r\n\r\n $('.js-answer-dot[data-userid=\"' + userId + '\"]')\r\n .addClass('icon-circle')\r\n .removeClass('icon-circle-blank');\r\n\r\n }\r\n\r\n function loadQuestionsPage(page) {\r\n \r\n var model = {};\r\n \r\n var pager = $(\"#question-pager\");\r\n \r\n model.subjectid = pager.data('subjectid');\r\n model.userfilter=pager.data('userfilter');\r\n model.agerangeoldest=pager.data('agerangeoldest');\r\n model.agerangeyoungest=pager.data('agerangeyoungest');\r\n model.startdate=pager.data('startdate');\r\n model.enddate=pager.data('enddate');\r\n model.isfilteredbyagerange=pager.data('isfilteredbyagerange');\r\n model.isfilteredbydaterange=pager.data('isfilteredbydaterange');\r\n model.selectedcountry=pager.data('selectedcountry');\r\n model.selectedgroupid=pager.data('selectedgroupid');\r\n model.selectedregion=pager.data('selectedregion');\r\n model.selectedteacherid=pager.data('selectedteacherid');\r\n model.selecteduserid = pager.data('selecteduserid');\r\n model.orderby = pager.data('orderby');\r\n model.genderfilter = pager.data('genderfilter');\r\n model.questionspage = page;\r\n\r\n var url = '/Data/LoadTopQuestionMisconceptions'; \r\n\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (questions) {\r\n\r\n var countPercentage = $('input[name=\"toggleCountsPercentage\"]:checked').val();\r\n\r\n var questionHtml = '';\r\n\r\n questions.forEach(function (question) {\r\n \r\n if (countPercentage == \"counts\")\r\n {\r\n question.DotsHide = \"hide\";\r\n question.CountHide = \"\";\r\n question.PercentageHide = \"hide\";\r\n } else if (countPercentage == 'percentage') {\r\n question.DotsHide = \"hide\";\r\n question.CountHide = \"hide\";\r\n question.PercentageHide = \"\";\r\n } else {\r\n question.DotsHide = \"\";\r\n question.CountHide = \"hide\";\r\n question.PercentageHide = \"hide\";\r\n }\r\n \r\n questionHtml += tmpl(\"tmpl-top-question-misconception\", question);\r\n });\r\n\r\n $('#question-misconception-container').html(questionHtml);\r\n \r\n selectUserDots(selectedUserId);\r\n }\r\n });\r\n\r\n \r\n }\r\n\r\n function loadStudentsPage(page) {\r\n\r\n var model = {};\r\n\r\n var pager = $(\"#student-pager\");\r\n\r\n model.subjectid = pager.data('subjectid');\r\n model.userfilter = pager.data('userfilter');\r\n model.agerangeoldest = pager.data('agerangeoldest');\r\n model.agerangeyoungest = pager.data('agerangeyoungest');\r\n model.startdate = pager.data('startdate');\r\n model.enddate = pager.data('enddate');\r\n model.isfilteredbyagerange = pager.data('isfilteredbyagerange');\r\n model.isfilteredbydaterange = pager.data('isfilteredbydaterange');\r\n model.selectedcountry = pager.data('selectedcountry');\r\n model.selectedgroupid = pager.data('selectedgroupid');\r\n model.selectedregion = pager.data('selectedregion');\r\n model.selectedteacherid = pager.data('selectedteacherid');\r\n model.selecteduserid = pager.data('selecteduserid');\r\n model.orderby = pager.data('orderby');\r\n model.genderfilter = pager.data('genderfilter');\r\n model.studentspage = page;\r\n\r\n var url = '/Data/LoadTopStudentMisconceptions';\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (students) {\r\n\r\n var studentHtml = '';\r\n\r\n students.forEach(function (student) {\r\n studentHtml += tmpl(\"tmpl-top-student-misconception\", student);\r\n });\r\n\r\n $('#student-misconception-container').html(studentHtml);\r\n\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n function isEmpty(str) {\r\n return (!str || 0 === str.length);\r\n }\r\n\r\n});\n","define('pages/data/quiz',['jquery', 'c3', 'knockout', 'crossroads', 'hasher', 'toastr', 'bootstrap', 'moment', 'bootstrapDateTimePicker', 'jqueryBootstrapPagination',\r\n 'chosen', 'pages/data/utility'], function ($, c3, ko, crossroads, hasher, toastr) {\r\n\r\n $(function () {\r\n ga('send', 'event', 'Insights', 'Insights – View quiz insights');\r\n });\r\n\r\n // Custom Bindings\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n // Knockout Components\r\n\r\n ko.components.register('filter-widget', {\r\n viewModel:\r\n { require: '/App/scripts/components/dq-data-filter.js' },\r\n template:\r\n { require: 'text!/App/scripts/components/dq-data-filter.html' }\r\n });\r\n\r\n // View Model\r\n var self,\r\n filterRecorder = [],\r\n isApplyFilter,\r\n currentSelectedCohortName,\r\n isChangedByUser = false,\r\n countPercentageIsTriggeredByUserFlag = false;\r\n\r\n var previousParams = [],\r\n currentHash,\r\n currentParams = [];\r\n \r\n function QuizViewModel() {\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self = this;\r\n\r\n // hide the compare button for IE for now as comparing with country will make IE crash and we failed to fix it \r\n self.isIE = navigator.userAgent.match(/msie|trident/i);\r\n\r\n self.isShowAllAttempts = {};\r\n\r\n self.UserRole = $('#usertype').data('userrole');\r\n self.ClassInsightLicence = $('#classinsight').data('classinsight');\r\n self.DepartmentInsightLicence = $('#departmentinsight').data('departmentinsight');\r\n\r\n self.quizId = viewmodel.QuizId;\r\n self.quizName = viewmodel.QuizName;\r\n self.assignmentId = viewmodel.AssignmentId;\r\n self.schoolId = viewmodel.SchoolId;\r\n self.userId = viewmodel.UserId;\r\n self.QuestionOrderByChoices = [\r\n { name: \"Incorrect\", value: \"Incorrect\" },\r\n { name: \"Correct\", value: \"Correct\" },\r\n { name: \"Sequence\", value: \"Sequence\" },\r\n { name: \"Even Spread\", value: \"EvenSpread\" }\r\n ];\r\n\r\n self.StudentOrderByChoices = [\r\n { name: \"Lowest\", value: \"Lowest\" },\r\n { name: \"Highest\", value: \"Highest\" },\r\n { name: \"Last Name\", value: \"LastName\" }\r\n ];\r\n\r\n self.IsDemo = ko.observable(false);\r\n\r\n self.IsAdvanced = ko.observable(false);\r\n self.countsPercentage = ko.observable('counts');\r\n self.SelectedCohortName = ko.observable();\r\n self.isShowAllAnswers = ko.observable(true);\r\n self.DotEnable = ko.observable(false);\r\n self.selectedAssignmentId = ko.observable();\r\n\r\n self.CohortQuizMarks = ko.observableArray([]);\r\n self.CurrentCohortDetails = ko.observable({});\r\n self.CurrentCohortAnswerCounts = ko.observableArray([]);\r\n self.AllQuizSessionQuestions = ko.observableArray([]);\r\n self.QuizSessionStudentAnswers = ko.observableArray([]);\r\n self.StudentAnswersForDot = ko.observableArray([]);\r\n self.StartedNotCompleted = ko.observableArray([]);\r\n self.NotStarted = ko.observableArray([]);\r\n self.NotCompleted = ko.observableArray([]);\r\n self.CompletedLate = ko.observableArray([]);\r\n\r\n self.selectedUserId = ko.observable(null);\r\n self.studentList = ko.observable([]);\r\n\r\n self.generatingReports = ko.observable(false);\r\n self.showUpgradeInfo = ko.observable(false);\r\n\r\n self.QuestionOrderBy = ko.observable(self.QuestionOrderByChoices[0]);\r\n self.StudentOrderBy = ko.observable(self.StudentOrderByChoices[0]);\r\n // Subscribes\r\n self.SelectedCohortName.subscribe(function (newValue) {\r\n if (newValue == null || newValue == '')\r\n return;\r\n if (!isApplyFilter) {\r\n reapplyFilter();\r\n } else {\r\n isApplyFilter = false;\r\n }\r\n countPercentageIsTriggeredByUserFlag = false;\r\n self.CurrentCohortDetails(getCohortDetails(newValue));\r\n if (self.CurrentCohortDetails().IsShowStudents)\r\n {\r\n self.DotEnable(true);\r\n self.countsPercentage('dots');\r\n }\r\n else\r\n {\r\n self.countsPercentage('counts');\r\n self.DotEnable(false);\r\n }\r\n \r\n });\r\n \r\n self.QuestionOrderBy.subscribe(function () {\r\n reapplyFilter();\r\n });\r\n\r\n self.StudentOrderBy.subscribe(function () {\r\n reapplyFilter();\r\n });\r\n \r\n self.isShowAllAnswers.subscribe(function (newValue) {\r\n toggleShowAllAnswers();\r\n });\r\n\r\n self.countsPercentage.subscribe(function (newValue) {\r\n if(countPercentageIsTriggeredByUserFlag)\r\n {\r\n if (newValue == 'percentage')\r\n paintPercentageChartForOneCohort(self.SelectedCohortName());\r\n else\r\n paintCountChartForOneCohort(self.SelectedCohortName());\r\n }\r\n });\r\n\r\n addPageFunctions();\r\n }\r\n var thisPage = new QuizViewModel();\r\n\r\n //finding right place to put this\r\n initRouter();\r\n\r\n self.hasCorhort = hasher.getHash() != '';\r\n\r\n ko.applyBindings(thisPage);\r\n // Page Functions\r\n\r\n function addPageFunctions() {\r\n\r\n self.applyFilter = function (filter) {\r\n \r\n var hashUrl = hasher.getHash();\r\n\r\n var url = getUrlFromFilter(filter);\r\n if (getCohortNameByUrl(url) != null)\r\n {\r\n toastr[\"error\"]('Cohort already exist!', \"Error\");\r\n return;\r\n }\r\n\r\n if (hashUrl == '') {\r\n hasher.replaceHash(hashUrl + url);\r\n } else {\r\n hasher.setHash(hashUrl + url);\r\n }\r\n }\r\n\r\n self.showFilter = function () {\r\n self.IsAdvanced('Advanced');\r\n }\r\n\r\n self.getInitFilter = function () {\r\n return getInitFilter();\r\n }\r\n\r\n self.showPercentage = function (data) {\r\n return showPercentage(data);\r\n }\r\n\r\n self.addToInstantQuiz = function (element, event) {\r\n addToInstantQuiz(element, event);\r\n }\r\n\r\n self.getCountPercentageDotIndex = function (data, index) {\r\n var count, percentage;\r\n\r\n switch (index) {\r\n case 1:\r\n count = data.CountA;\r\n percentage = data.PercentageA;\r\n break;\r\n case 2:\r\n count = data.CountB;\r\n percentage = data.PercentageB;\r\n break;\r\n case 3:\r\n count = data.CountC;\r\n percentage = data.PercentageC;\r\n break;\r\n case 4:\r\n count = data.CountD;\r\n percentage = data.PercentageD;\r\n break;\r\n }\r\n\r\n if (self.countsPercentage() == 'counts') {\r\n return count;\r\n } else {\r\n return showPercentage(percentage);\r\n }\r\n }\r\n\r\n self.deleteCohort = function () {\r\n \r\n var url = this.CohortDetails.FilterUrl;\r\n\r\n var newHash = currentHash.replace(url, '');\r\n hasher.setHash(newHash);\r\n\r\n //var cohortName = this.CohortDetails.Name;\r\n //self.CohortQuizMarks.remove(this);\r\n\r\n //removeFilterRecord(cohortName);\r\n //if (filterRecorder.length == 0)\r\n //{\r\n // clearData();\r\n // return;\r\n //}\r\n\r\n //if (self.SelectedCohortName() == cohortName)\r\n //{\r\n // self.SelectedCohortName(filterRecorder[0].cohortName);\r\n // self.CurrentCohortAnswerCounts([]);\r\n // chartState = 0;\r\n // chartOneCohort.hide();\r\n //}\r\n\r\n //removeChartCohort(cohortName);\r\n ////chartOneCohort = 0; \r\n }\r\n\r\n self.getSelectedFilter = function () { \r\n return getFilterByCohortName(self.SelectedCohortName()).filter;\r\n }\r\n\r\n //self.isShowStudents = function (cohortName) {\r\n // var filterRecord = getFilterByCohortName(cohortName);\r\n // if (filterRecord == null)\r\n // return false;\r\n // if (filterRecord.filter.userfilter == 'All' || filterRecord.filter.userfilter == 'Country') {\r\n // return false;\r\n // } else {\r\n // return true;\r\n // }\r\n\r\n //}\r\n\r\n self.getImgTag = function (thumbnailUrl) {\r\n return '';\r\n }\r\n\r\n self.getAnswerLabel = function (x, exist) {\r\n if (x == null)\r\n return '';\r\n\r\n return String.fromCharCode(x + 'A'.charCodeAt(0) - 1)\r\n }\r\n\r\n self.getPercentageString = function (percentage) {\r\n if (percentage == null || isNaN(percentage))\r\n return percentage;\r\n else\r\n return Math.round(percentage * 100) + '%';\r\n }\r\n\r\n self.selectUserDot = function (userId) {\r\n self.selectedUserId(userId);\r\n }\r\n\r\n self.getSessionInfo = function (data) {\r\n var startDate = parseDate(data.DateStarted);\r\n var completeDate = parseDate(data.DateCompleted);\r\n if (completeDate == null)\r\n return 'Start Date: ' + startDate + '\\n not Completed';\r\n\r\n return 'Start Date: ' + startDate + ' \\nComplete Date: ' + completeDate;\r\n }\r\n\r\n self.ClearAllCohorts = function () {\r\n hasher.setHash('');\r\n //clearData();\r\n }\r\n\r\n self.getStudentNameList = function (list) {\r\n if (list == null || list.length == 0)\r\n return \"\";\r\n var result = \"\";\r\n for(var i = 0; i < list.length; i++)\r\n {\r\n if (i != 0)\r\n result += \", \";\r\n result += list[i].FirstName + \" \" + list[i].LastName;\r\n }\r\n result += \". \";\r\n return result;\r\n }\r\n\r\n self.questionPageUrl = function (QuestionId) {\r\n var url = '/Data/Question/' + QuestionId + '#/' + hasher.getHash();\r\n return url;\r\n }\r\n\r\n self.addToFeedbackStation = function (questionId) {\r\n var filter = self.getSelectedFilter();\r\n if (filter.selectedassignmentid == null)\r\n {\r\n toastr[\"warning\"](\"Please select an assignment filter to add feedback\", \"Warning\");\r\n return;\r\n }\r\n var model = {\r\n questionId: questionId\r\n };\r\n $.ajax({\r\n url: '/v1/assignments/' + filter.selectedassignmentid + '/feedback-questions',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n toastr['success']('Question added to feedback station.', 'Success');\r\n }\r\n else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n }\r\n\r\n self.downloadAllAttempts = function() {\r\n\r\n if (self.ClassInsightLicence != 'True') {\r\n self.showUpgradeInfo(true);\r\n return;\r\n }\r\n\r\n self.generatingReports(true);\r\n\r\n var model = {\r\n assignmentId: self.selectedAssignmentId()\r\n };\r\n\r\n\r\n $.ajax({\r\n url: '/Data/GenerateAllAttemptsReports',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function(data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Reports generated, start downloading...\", \"Success\");\r\n var url = '/Data/DownloadAssignmentAllAttempts?assignmentId=' +\r\n self.selectedAssignmentId() +\r\n '&zipName=' +\r\n data.path;\r\n $(\"body\").append(\"\");\r\n self.generatingReports(false);\r\n } else {\r\n toastr[\"warning\"](data.status, \"Error\");\r\n self.generatingReports(false);\r\n }\r\n }\r\n });\r\n };\r\n\r\n self.backToAssignments = function () {\r\n if (document.referrer.includes(\"/Assignments/\")) {\r\n window.history.back();\r\n } else {\r\n document.location.href = \"/Assignments\";\r\n }\r\n }\r\n }\r\n \r\n function showPercentage(data)\r\n {\r\n if (data == null || isNaN(data))\r\n return data;\r\n else\r\n return Math.round(data * 100) + ' %';\r\n }\r\n\r\n function applyFilter(filter) {\r\n if (filter.selectedassignmentid) {\r\n self.selectedAssignmentId(filter.selectedassignmentid);\r\n }\r\n\r\n var model = {\r\n quizId: self.quizId,\r\n filter: filter,\r\n questionOrderBy: self.QuestionOrderBy().value,\r\n studentOrderBy: self.StudentOrderBy().value\r\n //isShowAllAnswers: self.isShowAllAnswers()\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/QuizJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n\r\n if (data.status == 'error')\r\n {\r\n toastr[\"error\"](data.errorMessage, \"Error\");\r\n var url = getUrlFromFilter(filter);\r\n\r\n var newHash = currentHash.replace(url, '');\r\n replaceHashSilently(newHash);\r\n return;\r\n }\r\n self.IsDemo(data.IsDemo);\r\n // Create a unique name for the cohort\r\n var cohortName = setCohortName(data.CohortQuizMarks.CohortDetails.Name);\r\n\r\n filterRecorder.push({ filter: filter, cohortName: cohortName });\r\n\r\n data.CohortQuizMarks.CohortDetails.Name = cohortName;\r\n data.CohortQuizMarks.CohortDetails.FilterDetailString = getFilterDetailString(filter);\r\n data.CohortQuizMarks.CohortDetails.FilterUrl = getUrlFromFilter(filter);\r\n\r\n if ((filter.userfilter == 'All' || filter.userfilter == 'Country') && !filter.IsFilteredByLiveQuiz)\r\n {\r\n data.CohortQuizMarks.IsShowStudents = false;\r\n data.CohortQuizMarks.Attempts = '-';\r\n }\r\n \r\n else\r\n data.CohortQuizMarks.IsShowStudents = true;\r\n \r\n\r\n if (filter.IsFilteredByDateRange == true) {\r\n data.CohortQuizMarks.CohortDetails.IsSetDateRange = true;\r\n // data.CohortQuestionAnswerCounts.CohortDetails.StartDate = filter.StartDate;\r\n // data.CohortQuestionAnswerCounts.CohortDetails.EndDate = filter.EndDate;\r\n data.CohortQuizMarks.CohortDetails.DateRangeString = getDateRangeString(filter);\r\n }\r\n else\r\n data.CohortQuizMarks.CohortDetails.IsSetDateRange = false;\r\n\r\n self.CohortQuizMarks.push(data.CohortQuizMarks);\r\n self.CurrentCohortDetails(data.CohortQuizMarks);\r\n \r\n data.QuizQuestionsAndAnswerCounts.forEach(function (item) {\r\n item.IsInInstantQuiz = ko.observable(item.IsInInstantQuiz);\r\n });\r\n \r\n self.CurrentCohortAnswerCounts(data.QuizQuestionsAndAnswerCounts);\r\n\r\n self.AllQuizSessionQuestions(data.AllQuizSessionQuestions);\r\n\r\n // Process QuizSessionStudentAnswers to identify multiple attempts by the same user\r\n // and the \"best\" attempt.\r\n self.QuizSessionStudentAnswers(processDataForTable(data.QuizSessionStudentsAnswers));\r\n\r\n // Process QuizSessionStudentAnswers to add StudentAnswers to \r\n self.StudentAnswersForDot(processDataForDots(self.QuizSessionStudentAnswers()));\r\n self.NotCompleted(data.NotCompleted);\r\n self.StartedNotCompleted(data.StartedNotCompleted);\r\n self.NotStarted(data.NotStarted);\r\n self.CompletedLate(data.CompletedLate);\r\n\r\n isApplyFilter = true;\r\n self.SelectedCohortName(cohortName);\r\n //addChartData(cohortName);\r\n\r\n addChartData(cohortName);\r\n paintCountChartForOneCohort(cohortName);\r\n addCohortToCompareChart();\r\n\r\n countPercentageIsTriggeredByUserFlag = true;\r\n }\r\n })\r\n\r\n }\r\n\r\n // When user selects a different cohort from the table or different order by \r\n // selected or \"Show All Answers\" is toggled. Basically call filter again.\r\n function reapplyFilter() {\r\n var cohortName = self.SelectedCohortName();\r\n var filterRecord = getFilterByCohortName(cohortName);\r\n if (filterRecord == null)\r\n return;\r\n\r\n var model = {\r\n quizId: self.quizId,\r\n filter: filterRecord.filter,\r\n questionOrderBy: self.QuestionOrderBy().value,\r\n studentOrderBy: self.StudentOrderBy().value\r\n //isShowAllAnswers: self.isShowAllAnswers()\r\n };\r\n\r\n $.ajax({\r\n url: '/Data/QuizJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n data.QuizQuestionsAndAnswerCounts.forEach(function (item) {\r\n item.IsInInstantQuiz = ko.observable(item.IsInInstantQuiz);\r\n });\r\n\r\n self.CurrentCohortAnswerCounts(data.QuizQuestionsAndAnswerCounts);\r\n\r\n self.AllQuizSessionQuestions(data.AllQuizSessionQuestions);\r\n\r\n\r\n self.QuizSessionStudentAnswers(processDataForTable(data.QuizSessionStudentsAnswers));\r\n self.StudentAnswersForDot(processDataForDots(self.QuizSessionStudentAnswers()));\r\n self.NotCompleted(data.NotCompleted);\r\n self.StartedNotCompleted(data.StartedNotCompleted);\r\n self.NotStarted(data.NotStarted);\r\n self.CompletedLate(data.CompletedLate);\r\n\r\n addChartData(cohortName);\r\n chartState = 0;\r\n paintCountChartForOneCohort(cohortName);\r\n\r\n countPercentageIsTriggeredByUserFlag = true;\r\n }\r\n });\r\n }\r\n\r\n function getInitFilter() {\r\n if (self.assignmentId == null)\r\n return null;\r\n\r\n var model = {\r\n assignmentId: self.assignmentId,\r\n };\r\n\r\n var filter;\r\n\r\n $.ajax({\r\n url: '/Data/QuizAssignmentJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n async: false,\r\n success: function (data) {\r\n if (data.status == 'success')\r\n {\r\n self.quizId = data.model.QuizId;\r\n filter = data.model.DataFilter;\r\n }\r\n else\r\n {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n return filter;\r\n }\r\n \r\n function toggleShowAllAnswers() {\r\n\r\n clearData();\r\n\r\n var tempRecorder = [];\r\n\r\n for (var i = 0 ; i < filterRecorder.length; i++) {\r\n var tempRecord = { filter: filterRecorder[i].filter, cohortName: filterRecorder[i].cohortName };\r\n tempRecorder.push(tempRecord);\r\n }\r\n\r\n filterRecorder = [];\r\n currentSelectedCohortName = self.SelectedCohortName();\r\n\r\n for (var i = 0; i < tempRecorder.length; i++) {\r\n applyFilter(tempRecorder[i].filter);\r\n }\r\n\r\n }\r\n\r\n function clearData() {\r\n try{\r\n self.CohortQuizMarks([]);\r\n \r\n self.SelectedCohortName(null);\r\n self.CurrentCohortDetails({});\r\n self.CurrentCohortAnswerCounts([]);\r\n self.AllQuizSessionQuestions([]);\r\n self.QuizSessionStudentAnswers([]);\r\n self.StudentAnswersForDot([]);\r\n self.StartedNotCompleted([]);\r\n self.NotStarted([]);\r\n self.NotCompleted([]);\r\n\r\n self.selectedUserId(null);\r\n chartCompareCohorts = 0;\r\n chartOneCohort = 0;\r\n }\r\n catch(exception)\r\n {\r\n //ignore the exception when the page first loaded\r\n }\r\n }\r\n\r\n function getCohortDetails(cohortName) {\r\n for(var i = 0; i < self.CohortQuizMarks().length; i++)\r\n {\r\n if(self.CohortQuizMarks()[i].CohortDetails.Name == cohortName)\r\n {\r\n return self.CohortQuizMarks()[i];\r\n }\r\n }\r\n }\r\n\r\n\r\n function setCohortName(name) {\r\n for (var i = 0; i < self.CohortQuizMarks().length; i++) {\r\n if (self.CohortQuizMarks()[i].CohortDetails.Name == name) {\r\n return tryName(name, 2);\r\n }\r\n }\r\n return name;\r\n }\r\n\r\n function tryName(name, num) {\r\n for (var i = 0; i < self.CohortQuizMarks().length; i++) {\r\n if (self.CohortQuizMarks()[i].CohortDetails.Name == name + ' ' + num) {\r\n return tryName(name, num + 1);\r\n }\r\n }\r\n return name + ' ' + num;\r\n }\r\n \r\n function isCohortNameExists(name) {\r\n for (var i = 0; i < self.CohortQuizMarks().length; i++) {\r\n if (self.CohortQuizMarks()[i].CohortDetails.Name == name) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function getFilterByCohortName(cohortName) {\r\n for (var i = 0; i < filterRecorder.length; i++) {\r\n if (filterRecorder[i].cohortName == cohortName)\r\n return filterRecorder[i];\r\n }\r\n return null;\r\n }\r\n\r\n function getCohortNameByUrl(url) {\r\n for (var i = 0; i < self.CohortQuizMarks().length; i++) {\r\n if (self.CohortQuizMarks()[i].CohortDetails.FilterUrl == url)\r\n return self.CohortQuizMarks()[i].CohortDetails.Name;\r\n }\r\n return null;\r\n }\r\n\r\n function removeCohortInfoByCohortName(cohortName) {\r\n for (var i = 0; i < self.CohortQuizMarks().length; i++) {\r\n if (self.CohortQuizMarks()[i].CohortDetails.Name == cohortName)\r\n {\r\n self.CohortQuizMarks.remove(self.CohortQuizMarks()[i]);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function removeFilterRecord(cohortName) {\r\n for (var i = 0; i < filterRecorder.length; i++) {\r\n if (filterRecorder[i].cohortName == cohortName)\r\n filterRecorder.remove(i);\r\n }\r\n }\r\n\r\n function addToInstantQuiz(element, event) {\r\n var questionId = element.QuestionId;\r\n var userId = self.userId;\r\n \r\n if (element.IsInInstantQuiz()) {\r\n // Remove from Instant Quiz\r\n var model = { questionId: questionId };\r\n $.ajax({\r\n url: '/QuizQuestions/Remove',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n element.IsInInstantQuiz(false);\r\n }\r\n });\r\n } else {\r\n // Add to Instant Quiz\r\n var model = { questionId: questionId };\r\n $.ajax({\r\n url: '/QuizQuestions/Add',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status === \"error\")\r\n {\r\n toastr['warning'](message.message, 'Warning');\r\n }\r\n else\r\n {\r\n element.IsInInstantQuiz(true);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n function processDataForTable(data) {\r\n\r\n // 1. Find the best attempts for each userId\r\n\r\n var bestAttempts = [];\r\n var numAttempts = {};\r\n\r\n data.forEach(function (attempt) {\r\n \r\n // Set observable for each user\r\n\r\n if (!self.isShowAllAttempts.hasOwnProperty(attempt.UserId)) {\r\n\r\n self.isShowAllAttempts[attempt.UserId] = ko.observable(false);\r\n\r\n }\r\n\r\n // Count the number of attempts by each user\r\n\r\n if (numAttempts.hasOwnProperty(attempt.UserId)) {\r\n\r\n numAttempts[attempt.UserId] += 1;\r\n\r\n } else {\r\n numAttempts[attempt.UserId] = 1;\r\n }\r\n \r\n // Find an attempt by the same userId in bestAttempts\r\n\r\n var temp = bestAttempts.filter(function (o) {\r\n return o.UserId == attempt.UserId;\r\n });\r\n\r\n var bestAttemptSoFar = temp && temp.length > 0 ? temp[0] : null;\r\n\r\n // Make the current attempt the best attempt if:\r\n // a. There is no bestAttemptSoFar\r\n // b. Both are complete but attempt was completed before bestAttempt\r\n // c. attempt is complete and bestAttemptSoFar is not\r\n // d. Both are not complete but attempt was started before bestAttempt\r\n\r\n if (bestAttemptSoFar == null) {\r\n\r\n bestAttempts.push(attempt);\r\n\r\n } else if (bestAttemptSoFar.DateCompleted) {\r\n\r\n if (attempt.DateCompleted && attempt.DateCompleted < bestAttemptSoFar.DateCompleted) {\r\n bestAttempts.pop(bestAttemptSoFar);\r\n bestAttempts.push(attempt);\r\n }\r\n\r\n } else {\r\n\r\n if (attempt.DateCompleted || attempt.DateStarted < bestAttemptSoFar.DateStarted) {\r\n bestAttempts.pop(bestAttemptSoFar);\r\n bestAttempts.push(attempt);\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n // 2. Loop over all attempts again marking each attempt as to whether it is a best attempt\r\n\r\n data.forEach(function (attempt) {\r\n\r\n // Is it the best attempt?\r\n\r\n var temp = bestAttempts.filter(function (o) {\r\n return o == attempt;\r\n });\r\n\r\n attempt.isBestAttempt = temp && temp.length > 0 ? true : false;\r\n \r\n attempt.numAttempts = numAttempts[attempt.UserId];\r\n\r\n attempt.showAllAttempts = function () {\r\n\r\n self.isShowAllAttempts[attempt.UserId](true);\r\n\r\n }\r\n\r\n attempt.hideAllAttempts = function () {\r\n\r\n self.isShowAllAttempts[attempt.UserId](false);\r\n\r\n }\r\n\r\n });\r\n\r\n\r\n return data;\r\n\r\n }\r\n\r\n \r\n\r\n // Process data for showing Dots\r\n // Data = QuizSessionStudentAnswers\r\n function processDataForDots(data) {\r\n var result = [];\r\n // loop for each questions\r\n for (var i = 0; i < self.AllQuizSessionQuestions().length; i++) {\r\n result.push({\r\n questionId : self.AllQuizSessionQuestions()[i].QuestionId,\r\n answerReasons: [[], [], [], []],\r\n flatList: []\r\n });\r\n }\r\n\r\n var name, userId;\r\n\r\n var studentList = [];\r\n var userIdList = { };\r\n\r\n data.forEach(function (qs) {\r\n name = qs.FirstName + ' ' + qs.LastName;\r\n userId = qs.UserId;\r\n qs.QuestionAnswerReasons.forEach(function (ans) {\r\n if (ans.Answer != null) {\r\n result[ans.Sequence - 1].answerReasons[ans.Answer - 1].push({\r\n UserId: userId,\r\n Reason: ans.Reason,\r\n Name: name,\r\n Tooltip: (self.UserRole == 'Teacher' ? name : \"\") + (ans.Reason != null ? ((self.UserRole == 'Teacher' ? \" - \" : \"\") + ans.Reason) : \"\")\r\n });\r\n result[ans.Sequence - 1].flatList.push({\r\n UserId: userId,\r\n Reason: ans.Reason,\r\n DisplayName: name,\r\n AnswerValue: ans.Answer,\r\n CorrectAnswer: ans.CorrectAnswer\r\n });\r\n if (userIdList[userId] != true)\r\n {\r\n studentList.push({\r\n Value: userId,\r\n Text: name,\r\n Selected: false\r\n });\r\n userIdList[userId] = true;\r\n }\r\n }\r\n });\r\n });\r\n\r\n self.studentList(studentList);\r\n $(\"#chosen-student\").chosen({ allow_single_deselect: true, width: '100%' }).change(function () {\r\n self.selectedUserId(this.value);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n\r\n\r\n // Barchart\r\n var wrongcolor = '#E17171';\r\n var correctcolor = '#8DCD6E';\r\n\r\n var chartOneCohort = 0;\r\n var chartCompareCohorts = 0;\r\n\r\n var countCorrect = [];\r\n var countWrong = [];\r\n \r\n var percentageWrong = [];\r\n var percentageCorrect = [];\r\n var percentageCorrectForCompare = [];\r\n var categories = [];\r\n var chartState = 0;\r\n \r\n function addChartData(name) {\r\n\r\n var data = self.CurrentCohortAnswerCounts();\r\n\r\n if (data.length == 0) return;\r\n \r\n percentageCorrectForCompare = new Array(data.length + 1);\r\n percentageCorrect = [];\r\n percentageWrong = [];\r\n countCorrect = [];\r\n countWrong = [];\r\n categories = [];\r\n\r\n percentageCorrectForCompare[0] = name;\r\n percentageCorrect.push('Correct');\r\n percentageWrong.push('Wrong');\r\n countCorrect.push('Correct');\r\n countWrong.push('Wrong');\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].Total == 0)\r\n {\r\n percentageCorrectForCompare[data[i].Sequence] = null;\r\n percentageCorrect.push(null);\r\n percentageWrong.push(null);\r\n countCorrect.push(null);\r\n countWrong.push(null); \r\n }\r\n else\r\n {\r\n percentageCorrectForCompare[data[i].Sequence] = data[i].CorrectPercentage;\r\n percentageCorrect.push(data[i].CorrectPercentage);\r\n percentageWrong.push(1 - data[i].CorrectPercentage);\r\n countCorrect.push(data[i].CorrectCount);\r\n countWrong.push(data[i].Total - data[i].CorrectCount);\r\n }\r\n \r\n categories.push('Q' + data[i].Sequence);\r\n }\r\n }\r\n\r\n function addCohortToCompareChart()\r\n {\r\n if (chartCompareCohorts == 0) {\r\n paintChart();\r\n } else {\r\n addChartCohort();\r\n }\r\n }\r\n \r\n function paintChart() {\r\n chartCompareCohorts = c3.generate({\r\n bindto: '#chartCompareCohorts',\r\n size: {\r\n height: 400\r\n },\r\n data: {\r\n columns: [percentageCorrectForCompare],\r\n type: 'bar',\r\n order: null\r\n },\r\n axis: {\r\n x: {\r\n type: 'category',\r\n categories: categories\r\n },\r\n y: {\r\n max: 1,\r\n min: 0,\r\n tick: {\r\n format: d3.format(\"%\")\r\n },\r\n padding: { top: 0, bottom: 0 }\r\n }\r\n }\r\n });\r\n }\r\n\r\n function paintCountChartForOneCohort(cohortName) {\r\n if (chartState == cohortName + 'counts')\r\n return;\r\n chartOneCohort = c3.generate({\r\n bindto: '#chartOneCohort',\r\n size: {\r\n height: 400\r\n },\r\n data: {\r\n columns: [\r\n countCorrect,\r\n countWrong\r\n ],\r\n type: 'bar',\r\n groups: [\r\n ['Correct', 'Wrong']\r\n ],\r\n order: null,\r\n colors: {\r\n Wrong: wrongcolor,\r\n Correct: correctcolor\r\n }\r\n },\r\n axis: {\r\n x: {\r\n type: 'category',\r\n categories: categories\r\n },\r\n y: {\r\n tick: {\r\n format: d3.format(\"d\")\r\n },\r\n min: 0,\r\n padding: { top: 1, bottom: 0 }\r\n }\r\n }\r\n });\r\n chartState = cohortName+'counts';\r\n }\r\n\r\n function paintPercentageChartForOneCohort(cohortName) {\r\n if (chartState == cohortName + 'percentage')\r\n return;\r\n chartOneCohort = c3.generate({\r\n bindto: '#chartOneCohort',\r\n size: {\r\n height: 400\r\n },\r\n data: {\r\n columns: [\r\n percentageCorrect,\r\n percentageWrong\r\n ],\r\n type: 'bar',\r\n groups: [\r\n ['Wrong', 'Correct']\r\n ],\r\n order: null,\r\n colors: {\r\n Correct: correctcolor,\r\n Wrong: wrongcolor\r\n }\r\n },\r\n axis: {\r\n x: {\r\n type: 'category',\r\n categories: categories\r\n },\r\n y: {\r\n max: 1,\r\n min: 0,\r\n tick: {\r\n format: d3.format(\"%\")\r\n },\r\n padding: { top: 0, bottom: 0 }\r\n }\r\n }\r\n });\r\n\r\n chartState = cohortName + 'percentage';\r\n }\r\n\r\n function addChartCohort() {\r\n chartCompareCohorts.load({\r\n columns: [percentageCorrectForCompare]\r\n });\r\n }\r\n\r\n function removeChartCohort(cohortName) {\r\n chartCompareCohorts.unload({\r\n ids: cohortName\r\n });\r\n }\r\n\r\n \r\n\r\n function getDateRangeString(filter) {\r\n var result = \"\";\r\n\r\n if (filter.IsFilteredByDateRange)\r\n result += filter.StartDate + \" to \" + filter.EndDate + \"\\n\";\r\n\r\n return result;\r\n }\r\n \r\n $('.js-student-answers').tooltip({\r\n container: '#question-preview-container',\r\n html: true,\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('.js-cohort-answers').tooltip({\r\n container: 'body',\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('.js-cohort-details').tooltip({\r\n container: '#cohort-details-container',\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n $('.js-cohort-answers').on('click', '.js-answer-dot', function () {\r\n\r\n // Find all answer dots linked to this one by title\r\n var userid = $(this).data('userid');\r\n\r\n $('.js-answer-dot[data-userid!=\"' + userid + '\"]')\r\n .removeClass('icon-circle')\r\n .addClass('icon-circle-blank');\r\n\r\n $('.js-answer-dot[data-userid=\"' + userid + '\"]')\r\n .addClass('icon-circle')\r\n .removeClass('icon-circle-blank');\r\n\r\n });\r\n\r\n\r\n function processFilterParams(params) {\r\n if (params == null || params.length == 0)\r\n {\r\n clearData();\r\n return;\r\n }\r\n\r\n // split the url;\r\n var parameters = params.split('/');\r\n\r\n // group the params by filter\r\n var paramsGroups = [], size = 7;\r\n\r\n while (parameters.length > 0)\r\n paramsGroups.push(parameters.splice(0, size));\r\n\r\n\r\n var lastLength = paramsGroups[paramsGroups.length - 1].length;\r\n if (lastLength < 7 && lastLength > 1) {\r\n // fill the params if incomplete\r\n for (var i = lastLength - 1; i < 7; i++) {\r\n paramsGroups[paramsGroups.length - 1].push(\"\");\r\n currentHash = currentHash + '/';\r\n }\r\n replaceHashSilently(currentHash);\r\n } else if (lastLength <= 1) {\r\n paramsGroups.pop(paramsGroups[paramsGroups.length - 1]);\r\n }\r\n\r\n //// clear all existing cohorts\r\n //clearData();\r\n previousParams = currentParams;\r\n currentParams = paramsGroups;\r\n\r\n calDifference(previousParams, currentParams);\r\n\r\n if (currentParams.length > 1)\r\n {\r\n self.IsAdvanced('Advanced');\r\n }\r\n \r\n }\r\n\r\n // find the differece \r\n // then apply new cohort or remove deleted cohort\r\n function calDifference(previousParams, currentParams) {\r\n var deletedCohort = [],\r\n addedCohort = [];\r\n var iPrevious = 0,\r\n iCurrent = 0;\r\n while (iPrevious < previousParams.length || iCurrent < currentParams.length) {\r\n if (iPrevious >= previousParams.length)\r\n {\r\n //put into added box\r\n addedCohort.push(currentParams[iCurrent]);\r\n iCurrent++;\r\n }\r\n else if (iCurrent >= currentParams.length)\r\n {\r\n //put into deleted box\r\n deletedCohort.push(previousParams[iPrevious]);\r\n iPrevious++;\r\n }\r\n else if (isSameCohort(previousParams[iPrevious], currentParams[iCurrent]))\r\n {\r\n iPrevious++;\r\n iCurrent++;\r\n }\r\n else\r\n {\r\n //put into deleted box\r\n deletedCohort.push(previousParams[iPrevious]);\r\n iPrevious++;\r\n }\r\n }\r\n\r\n for(var i = 0; i < deletedCohort.length; i++)\r\n {\r\n var url = getUrlFromFilter(getFilterFromParams(deletedCohort[i]));\r\n deleteCohortByUrl(url);\r\n }\r\n for(var i = 0; i < addedCohort.length; i++)\r\n {\r\n applyFilter(getFilterFromParams(addedCohort[i]));\r\n }\r\n\r\n }\r\n\r\n function isSameCohort(params1, params2)\r\n {\r\n for(var i = 0; i < params1.length; i++)\r\n {\r\n if (params1[i] != params2[i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n function deleteCohortByUrl(url)\r\n {\r\n var cohortName = getCohortNameByUrl(url);\r\n if(cohortName == null)\r\n {\r\n toastr[\"error\"]('Cohort not found!', \"Error\");\r\n return;\r\n }\r\n\r\n removeCohortInfoByCohortName(cohortName);\r\n\r\n removeFilterRecord(cohortName);\r\n if (filterRecorder.length == 0) {\r\n clearData();\r\n return;\r\n }\r\n\r\n if (self.SelectedCohortName() == cohortName) {\r\n self.SelectedCohortName(filterRecorder[0].cohortName);\r\n self.CurrentCohortAnswerCounts([]);\r\n chartState = 0;\r\n chartOneCohort.hide();\r\n }\r\n\r\n removeChartCohort(cohortName); \r\n }\r\n\r\n \r\n\r\n function initRouter()\r\n {\r\n //setup crossroads\r\n crossroads.addRoute('/:params*:/',\r\n function (params) {\r\n processFilterParams(params);\r\n });\r\n\r\n // crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n currentHash = newHash;\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n function setHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.setHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n function replaceHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.replaceHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n});\n","define('pages/data/quizzes',['jquery', 'dataFilter', 'tmpl', 'jqueryValidate', 'bootstrap', 'moment', 'bootstrapDateTimePicker', 'jqueryBootstrapPagination'], function ($, dataFilter, tmpl) {\r\n\r\n $(function () {\r\n\r\n dataFilter.prototype.init();\r\n\r\n $('input:radio[name=toggleCountsPercentage]').change(function () {\r\n\r\n if (this.value == 'counts') {\r\n $('.js-answer-count').removeClass('hide');\r\n $('.js-answer-percentage').addClass('hide');\r\n }\r\n else {\r\n $('.js-answer-count').addClass('hide');\r\n $('.js-answer-percentage').removeClass('hide');\r\n }\r\n });\r\n\r\n $(\"#quizzes-pager\").pagination({\r\n total_pages: $(\"#quizzes-pager\").data('quizzesnumpage'),\r\n current_page: 1,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return loadQuizzesPage(page);\r\n }\r\n }); \r\n\r\n $(\"#order-quizzes-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n \r\n $(\"#filter-quizzes-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n $('.js-show-data-filter').click(function () {\r\n $(this).addClass('hide');\r\n $('.js-data-filter').removeClass('hide');\r\n });\r\n\r\n });\r\n\r\n \r\n\r\n function loadQuizzesPage(page) {\r\n\r\n var model = {};\r\n\r\n var pager = $(\"#quizzes-pager\");\r\n\r\n model.userfilter = pager.data('userfilter');\r\n model.agerangeoldest = pager.data('agerangeoldest');\r\n model.agerangeyoungest = pager.data('agerangeyoungest');\r\n model.startdate = pager.data('startdate');\r\n model.enddate = pager.data('enddate');\r\n model.isfilteredbyagerange = pager.data('isfilteredbyagerange');\r\n model.isfilteredbydaterange = pager.data('isfilteredbydaterange');\r\n model.selectedcountry = pager.data('selectedcountry');\r\n model.selectedgroupid = pager.data('selectedgroupid');\r\n model.selectedregion = pager.data('selectedregion');\r\n model.selectedteacherid = pager.data('selectedteacherid');\r\n model.selecteduserid = pager.data('selecteduserid');\r\n model.orderby = pager.data('orderby');\r\n model.genderfilter = pager.data('genderfilter');\r\n model.quizzespage = page;\r\n\r\n var url = '/Data/LoadTopQuizMisconceptions';\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (quizzes) {\r\n\r\n var quizHtml = '';\r\n\r\n quizzes.forEach(function (quiz) {\r\n if (quiz.Description == null) {\r\n quiz.Description = \"\";\r\n }\r\n\r\n quizHtml += tmpl(\"tmpl-top-quiz-misconception\", quiz);\r\n });\r\n\r\n $('#quiz-misconception-container').html(quizHtml);\r\n\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n});\n","define('pages/data/revision',['jquery', 'toastr', 'knockout', 'moment', 'bootstrap'], function ($, toastr, ko, moment) {\r\n\r\n $(function () {\r\n \r\n $('.js-more-help').on('click', function () {\r\n\r\n $('#tutorModal').modal(null);\r\n\r\n });\r\n \r\n \r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n var subjectCountLimit = 20;\r\n\r\n function RevisionViewModel() {\r\n\r\n self = this;\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self.subjectSearch = ko.observable();\r\n\r\n self.revisions = ko.observableArray(viewmodel.Revisions);\r\n self.showedRevisions = ko.observableArray();\r\n\r\n init();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.subjectSearch.subscribe(function (newValue) {\r\n searchForSubject(newValue);\r\n });\r\n\r\n //self.showedRevisions.subscribe(function (newValue) {\r\n // $('[data-toggle=\"tooltip\"]').tooltip();\r\n //});\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new RevisionViewModel());\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.revisionLink = function (revision) {\r\n revisionLink(revision);\r\n }\r\n\r\n self.relatedQuiz = function (revision) {\r\n relatedQuiz(revision);\r\n }\r\n\r\n self.getPercentageString = function (percentage) {\r\n if (percentage == null || isNaN(percentage))\r\n return percentage;\r\n else\r\n return Math.round(percentage * 100) + '%';\r\n }\r\n\r\n self.getTimeAgo = function (date1, date2) {\r\n if (date1 == null && date2 == null) {\r\n return null;\r\n } else if (date1 == null) {\r\n return moment(date2).fromNow();\r\n } else if (date2 == null) {\r\n return moment(date1).fromNow();\r\n } else {\r\n if (moment(date1) < moment(date2)) {\r\n return moment(date2).fromNow();\r\n } else {\r\n return moment(date1).fromNow();\r\n }\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function searchForSubject(searchText) {\r\n searchText = searchText.trim().toLowerCase();\r\n\r\n self.showedRevisions.removeAll();\r\n\r\n for (var i = 0; i < self.revisions().length; i++) {\r\n if (self.revisions()[i].SubjectName.toLowerCase().indexOf(searchText) > -1) {\r\n self.showedRevisions.push(self.revisions()[i]);\r\n if (self.showedRevisions().length >= subjectCountLimit) {\r\n break;\r\n }\r\n }\r\n }\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n }\r\n\r\n function revisionLink(revision) {\r\n if (revision.ContentURL == null || revision.ContentURL.length == 0) {\r\n toastr[\"warning\"]('There is no related content to this subject yet. Coming soon!', \"Sorry\");\r\n return;\r\n }\r\n var model = { revisionid: revision.RevisionId };\r\n\r\n $.ajax({\r\n url: '/Data/SetReviseDate',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n revision.DateRevised(moment());\r\n //window.open(revision.ContentURL);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function relatedQuiz(revision) {\r\n if (revision.QuizId == null) {\r\n toastr[\"warning\"]('There is no Related Quiz to this subject yet. Coming Soon!', \"Sorry\");\r\n }\r\n else {\r\n revision.DateRetested(moment());\r\n //window.open('/Quizzes/CreateQuizSessionAndLinkToRevision?quizId=' + revision.QuizId + '&revisionId=' + revision.RevisionId);\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function init() {\r\n for (var i = 0; i < self.revisions().length; i++) {\r\n self.revisions()[i].DateRevised = ko.observable(self.revisions()[i].DateRevised);\r\n self.revisions()[i].DateRetested = ko.observable(self.revisions()[i].DateRetested);\r\n self.revisions()[i].QuizLink = '/Quizzes/CreateQuizSessionAndLinkToRevision?quizId=' + self.revisions()[i].QuizId + '&revisionId=' + self.revisions()[i].RevisionId;\r\n }\r\n searchForSubject('');\r\n }\r\n\r\n});\n","define('pages/data/stream',['jquery', 'knockout', 'crossroads', 'hasher', 'toastr', 'moment', 'bootstrap'], function ($, ko, crossroads, hasher, toastr, moment) {\r\n\r\n // tooltip\r\n\r\n $('.js-student-answers').tooltip({\r\n container: '#question-preview-container',\r\n html: true,\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('.js-cohort-answers').tooltip({\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('.js-cohort-details').tooltip({\r\n container: '#cohort-details-container',\r\n selector: '[data-toggle=\"tooltip\"]'\r\n });\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n\r\n $('.js-cohort-answers').on('click', '.js-answer-dot', function () {\r\n\r\n // Find all answer dots linked to this one by title\r\n var userid = $(this).data('userid');\r\n\r\n $('.js-answer-dot[data-userid!=\"' + userid + '\"]')\r\n .removeClass('icon-circle')\r\n .addClass('icon-circle-blank');\r\n\r\n $('.js-answer-dot[data-userid=\"' + userid + '\"]')\r\n .addClass('icon-circle')\r\n .removeClass('icon-circle-blank');\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n\r\n function StreamViewModel() {\r\n\r\n self = this;\r\n \r\n self.isStreamLoaded = ko.observable(false);\r\n self.DotEnable = ko.observable(true);\r\n self.countsPercentage = ko.observable('counts');\r\n\r\n\r\n self.CurrentCohortAnswerCounts = ko.observableArray([]);\r\n self.AllQuizSessionQuestions = ko.observableArray([]);\r\n self.QuizSessionStudentAnswers = ko.observableArray([]);\r\n self.StudentAnswersForDot = ko.observableArray([]);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new StreamViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.getImgTag = function (thumbnailUrl) {\r\n return '';\r\n }\r\n\r\n self.getAnswerLabel = function (x, exist) {\r\n //TO DO question did not exist when taking the quiz\r\n if (!exist)\r\n return 'N';\r\n if (x == null)\r\n return '';\r\n\r\n return String.fromCharCode(x + 'A'.charCodeAt(0) - 1)\r\n }\r\n\r\n\r\n self.questionPageUrl = function (QuestionId) {\r\n var url = '/Data/Question/' + QuestionId + '#/' + hasher.getHash();\r\n return url;\r\n }\r\n\r\n self.showPercentage = function (data) {\r\n return showPercentage(data);\r\n }\r\n\r\n self.showMark = function (data) {\r\n return showMark(data);\r\n }\r\n\r\n self.getCountPercentageDotIndex = function (data, index) {\r\n var count, percentage;\r\n\r\n switch (index) {\r\n case 1:\r\n count = data.CountA;\r\n percentage = data.PercentageA;\r\n break;\r\n case 2:\r\n count = data.CountB;\r\n percentage = data.PercentageB;\r\n break;\r\n case 3:\r\n count = data.CountC;\r\n percentage = data.PercentageC;\r\n break;\r\n case 4:\r\n count = data.CountD;\r\n percentage = data.PercentageD;\r\n break;\r\n }\r\n\r\n if (self.countsPercentage() == 'counts') {\r\n return count;\r\n } else {\r\n return showPercentage(percentage);\r\n }\r\n }\r\n\r\n self.backToAssignments = function () {\r\n if (document.referrer.includes(\"/Assignments/\")) {\r\n window.history.back();\r\n } else {\r\n document.location.href = \"/Assignments\";\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function getStream(id) {\r\n var model = { streamAssignmentId: id };\r\n\r\n $.ajax({\r\n url: '/Data/StreamJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n loadStream(data.model);\r\n self.isStreamLoaded(true);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function loadStream(data) {\r\n self.streamName = data.Name;\r\n self.CurrentCohortAnswerCounts(processStartDate(data.QuizQuestionsAndAnswerCounts));\r\n\r\n self.AllQuizSessionQuestions(data.AllQuizSessionQuestions);\r\n self.QuizSessionStudentAnswers(data.StreamStudentsAnswers);\r\n self.StudentAnswersForDot(processDataForDots(self.QuizSessionStudentAnswers()));\r\n }\r\n\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n //Process data for showing Dots\r\n // Data = QuizSessionStudentAnswers\r\n function processDataForDots(data) {\r\n var result = [];\r\n // loop for each questions\r\n for (var i = 0; i < self.AllQuizSessionQuestions().length; i++) {\r\n result.push({\r\n questionId: self.AllQuizSessionQuestions()[i].QuestionId,\r\n answerReasons: [[], [], [], []]\r\n });\r\n }\r\n\r\n var name, userId;\r\n\r\n data.forEach(function (qs) {\r\n name = qs.FirstName + ' ' + qs.LastName;\r\n userId = qs.UserId;\r\n qs.QuestionAnswerReasons.forEach(function (ans) {\r\n if (ans.Answer != null) {\r\n result[ans.Sequence - 1].answerReasons[ans.Answer - 1].push({\r\n UserId: userId,\r\n Reason: ans.Reason,\r\n Name: name,\r\n Tooltip: name + (ans.Reason != null ? ('-' + ans.Reason) : '')\r\n //Tooltip: (self.UserRole == 'Teacher' ? name : \"\") + (ans.Reason != null ? ((self.UserRole == 'Teacher' ? \" - \" : \"\") + ans.Reason) : \"\")\r\n });\r\n }\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n function processStartDate(data)\r\n {\r\n for(var i = 0; i < data.length; i++)\r\n {\r\n data[i].StartDate = moment(data[i].StartDate).format(\"Do MMM YYYY\");\r\n }\r\n return data;\r\n }\r\n\r\n function showPercentage(data) {\r\n if (data == null || isNaN(data))\r\n return data;\r\n else\r\n return Math.round(data * 100) + ' %';\r\n }\r\n\r\n function showMark(data) {\r\n return data.CorrectCount + ' / ' + data.Total;\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function initRouter() {\r\n\r\n crossroads.addRoute('/{id}/',\r\n function (id) {\r\n getStream(id);\r\n });\r\n\r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash); \r\n hasher.changed.add(parseHash); \r\n hasher.init(); \r\n }\r\n \r\n});\n","define('pages/data/students',['jquery', 'tmpl', 'bootstrap', 'moment', 'jqueryBootstrapPagination', 'mousetrap'], function ($, tmpl, bootstrap, moment) {\r\n\r\n $(function () {\r\n \r\n $(\"#students-pager\").pagination({\r\n total_pages: $(\"#students-pager\").data('studentsnumpage'),\r\n current_page: 1,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n return loadStudentsPage(page);\r\n }\r\n });\r\n \r\n $(\"#order-students-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n $('#student-search').click(function (event) {\r\n\r\n applyFilterAndSearch(true);\r\n\r\n });\r\n\r\n $('#student-search-clear').click(function (event) {\r\n\r\n applyFilterAndSearch(false);\r\n\r\n });\r\n\r\n $('#UserFilter').change(function () {\r\n\r\n switch (this.value) {\r\n case \"Group\":\r\n $('#DataFilter_SelectedGroupId').removeClass('hide');\r\n $('.js-filter-dropdown').not('#DataFilter_SelectedGroupId').addClass('hide');\r\n break;\r\n case \"Teacher\":\r\n $('#DataFilter_SelectedTeacherId').removeClass('hide');\r\n $('.js-filter-dropdown').not('#DataFilter_SelectedTeacherId').addClass('hide');\r\n break;\r\n default:\r\n $('.js-filter-dropdown').addClass('hide');\r\n break;\r\n };\r\n\r\n // SwitchLoadDropDownItems(this.value);\r\n\r\n });\r\n\r\n $(document).ready(function () {\r\n $(window).keydown(function (event) {\r\n if (event.keyCode == 13) {\r\n event.preventDefault();\r\n return false;\r\n }\r\n });\r\n });\r\n\r\n bindEnterToSearch();\r\n });\r\n\r\n \r\n\r\n\r\n function loadStudentsPage(page) {\r\n\r\n var model = {};\r\n\r\n var pager = $(\"#students-pager\");\r\n\r\n model.datafilter = {};\r\n\r\n model.datafilter.userfilter = pager.data('userfilter');\r\n model.datafilter.selectedgroupid = pager.data('selectedgroupid');\r\n model.datafilter.selectedteacherid = pager.data('selectedteacherid');\r\n model.orderby = pager.data('orderby');\r\n model.studentspage = page;\r\n\r\n var url = '/Data/LoadStudentAverageMarks';\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (students) {\r\n\r\n var studentHtml = '';\r\n\r\n students.forEach(function (student) {\r\n student.Name = student.FirstName + ' ' + student.LastName;\r\n student.Percentage = showPercentage(student.Percentage);\r\n student.Gender = showGender(student.Gender);\r\n student.Age = (student.Age == null) ? \"\" : student.Age;\r\n studentHtml += tmpl(\"tmpl-student-average-mark\", student);\r\n });\r\n\r\n $('#students-container').html(studentHtml);\r\n\r\n }\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n function bindEnterToSearch() {\r\n Mousetrap.unbind([\"enter\"]);\r\n Mousetrap.bind(\"enter\", function () {\r\n applyFilterAndSearch(true);\r\n });\r\n }\r\n\r\n function showPercentage(data) {\r\n if (data == null || isNaN(data))\r\n return data;\r\n else\r\n return Math.round(data * 100) + ' %';\r\n }\r\n\r\n function showGender(gender) {\r\n if (gender == 0)\r\n return '';\r\n else if (gender == 1)\r\n return 'Female';\r\n else\r\n return 'Male';\r\n }\r\n\r\n function applyFilterAndSearch(isSearch) {\r\n\r\n var url = $('#order-students-by option:selected').val();\r\n\r\n if (isSearch) {\r\n var searchText = $('#student-search-text').val();\r\n\r\n isSearch = /\\S/.test(searchText);\r\n\r\n if (isSearch) {\r\n url = url + '&Search=' + searchText;\r\n }\r\n }\r\n \r\n document.location.href = url;\r\n }\r\n});\n","define('pages/data/subjects',[\r\n 'jquery',\r\n 'd3',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'dataFilterProcessor',\r\n 'toastr',\r\n 'moment',\r\n 'bootstrap',\r\n 'bootstrapDateTimePicker'\r\n],\r\nfunction (\r\n $,\r\n d3,\r\n ko,\r\n crossroads,\r\n hasher,\r\n dataFilterProcessor,\r\n toastr,\r\n moment\r\n) {\r\n \r\n var sunburstIndex = 0,\r\n sunburstIndex_cohortName = [],\r\n sunburstIndex_deleted = [],\r\n paths = [],\r\n lockSubjectIds = [],\r\n highlightSubjectIds = [],\r\n size,\r\n radius,\r\n y;\r\n\r\n var colors = d3.scale.threshold()\r\n .domain([0.2, 0.4, 0.6, 0.8])\r\n .range(['#e24d42', '#f2814a', '#f5e547', '#a0cf41', '#649600']);\r\n\r\n var bases = [\r\n '#48aae7',\r\n '#f8e646',\r\n '#ea4c89',\r\n '#f3824a'\r\n ];\r\n\r\n var barBackground = '#848484';\r\n \r\n var x = d3.scale.linear()\r\n .range([0, 2 * Math.PI]);\r\n\r\n var tooltip = d3.select('body').append('div')\r\n .attr('class', 'data-subjects__tooltip');\r\n\r\n tooltip.append('div')\r\n .attr('class', 'data-subjects__tooltip__subject');\r\n\r\n tooltip.append('div')\r\n .attr('class', 'data-subjects__tooltip__percentage');\r\n\r\n tooltip.append('svg')\r\n .attr('class', 'data-subjects__tooltip__barchart');\r\n\r\n\r\n var self,\r\n filterRecorder = [],\r\n existingCohortNames = [],\r\n currentSelectedCohortName;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout Components\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.components.register('filter-widget', {\r\n viewModel:\r\n { require: '/App/scripts/components/dq-data-filter.js' },\r\n template:\r\n { require: 'text!/App/scripts/components/dq-data-filter.html' }\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function DataSubjectsViewModel() {\r\n\r\n self = this;\r\n\r\n var viewmodel = $('#viewmodel').data('model');\r\n\r\n self.userRole = $('#usertype').data('userrole');\r\n\r\n self.schoolId = viewmodel.SchoolId;\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n // States\r\n self.isAdvanced = ko.observable(false);\r\n\r\n // Cohort\r\n self.cohorts = ko.observableArray([]);\r\n self.selectedCohortName = ko.observable();\r\n\r\n self.clickMode = ko.observable('Lock');\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n\r\n }\r\n\r\n\r\n ko.applyBindings(new DataSubjectsViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n self.showFilter = function () {\r\n self.isAdvanced('Advanced');\r\n }\r\n\r\n self.applyFilter = function (filter) {\r\n var hashUrl = hasher.getHash();\r\n\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n if (dataFilterProcessor.getCohortNameByUrl(url,\r\n self.cohorts().map(function (cohort)\r\n {\r\n return {\r\n name: cohort.CohortDetails.Name,\r\n url: cohort.CohortDetails.FilterUrl\r\n };\r\n })) != null) {\r\n toastr['error']('Cohort already exist!', 'Error');\r\n return;\r\n }\r\n\r\n if (hashUrl == '') {\r\n hasher.replaceHash(hashUrl + url);\r\n } else {\r\n hasher.setHash(hashUrl + url);\r\n }\r\n }\r\n\r\n self.deleteCohort = function (filterUrl) {\r\n var currentHash = hasher.getHash();\r\n var newHash = currentHash.replace(filterUrl, '');\r\n hasher.setHash(newHash);\r\n }\r\n\r\n self.clearLock = function () {\r\n clearLockSubjects();\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function applyFilter(filter) {\r\n\r\n var model = {\r\n filter: filter\r\n }\r\n\r\n $.ajax({\r\n url: '/Data/SubjectsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n var url = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n var newHash = hasher.getHash().replace(url, '');\r\n replaceHashSilently(newHash);\r\n } else {\r\n var cohortName = loadCohort(data.model, filter);\r\n\r\n filterRecorder.push({ filter: filter, cohortName: cohortName });\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function augmentCohortDetails(model, filter) {\r\n\r\n var cohortName = dataFilterProcessor.getUniqueCohortName(model.CohortDetails.Name, existingCohortNames);\r\n existingCohortNames.push(cohortName);\r\n model.CohortDetails.Name = cohortName;\r\n model.CohortDetails.FilterDetailString = dataFilterProcessor.getFilterDetailString(filter);\r\n model.CohortDetails.FilterUrl = dataFilterProcessor.getUrlFromFilter(filter);\r\n\r\n if (filter.IsFilteredByDateRange == true) {\r\n model.CohortDetails.IsSetDateRange = true;\r\n model.CohortDetails.DateRangeString = dataFilterProcessor.getDateRangeString(filter);\r\n } else {\r\n model.CohortDetails.IsSetDateRange = false;\r\n }\r\n \r\n }\r\n\r\n function loadCohort(model, filter) {\r\n \r\n augmentCohortDetails(model, filter);\r\n\r\n self.cohorts.push(model);\r\n\r\n drawSunburst(model.SubjectAnswerCounts, model.CohortDetails.Name, filter);\r\n\r\n return model.CohortDetails.Name;\r\n }\r\n\r\n function processCohorts(deletedCohorts, addedCohorts) {\r\n for (var i = 0; i < deletedCohorts.length; i++) {\r\n var url = dataFilterProcessor.getUrlFromFilter(dataFilterProcessor.getFilterFromParams(deletedCohorts[i]));\r\n deleteCohortByUrl(url);\r\n }\r\n for (var i = 0; i < addedCohorts.length; i++) {\r\n applyFilter(dataFilterProcessor.getFilterFromParams(addedCohorts[i]));\r\n }\r\n }\r\n\r\n function deleteCohortByUrl(url) {\r\n var cohortName = dataFilterProcessor.getCohortNameByUrl(url,\r\n self.cohorts().map(function (cohort)\r\n {\r\n return {\r\n name: cohort.CohortDetails.Name,\r\n url: cohort.CohortDetails.FilterUrl\r\n };\r\n }) );\r\n if (cohortName == null) {\r\n toastr['error']('Cohort not found!', 'Error');\r\n return;\r\n }\r\n\r\n \r\n removeCohortInfoByCohortName(cohortName);\r\n\r\n removeFilterRecord(cohortName);\r\n //if (filterRecorder.length == 0) {\r\n // clearData();\r\n // return;\r\n //}\r\n\r\n removeSunburstByCohortName(cohortName);\r\n\r\n //removeChartCohort(cohortName);\r\n }\r\n\r\n function removeSunburstByCohortName(cohortName) {\r\n for (var i = 0; i < sunburstIndex_cohortName.length; i++) {\r\n if (sunburstIndex_cohortName[i] == cohortName) {\r\n var div = d3.select('#js-sunburst-' + i);\r\n div.remove();\r\n sunburstIndex_deleted[i] = true;\r\n }\r\n }\r\n }\r\n\r\n function removeCohortInfoByCohortName(cohortName) {\r\n for (var i = 0; i < self.cohorts().length; i++) {\r\n if (self.cohorts()[i].CohortDetails.Name == cohortName) {\r\n self.cohorts.remove(self.cohorts()[i]);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n\r\n function removeFilterRecord(cohortName) {\r\n for (var i = 0; i < filterRecorder.length; i++) {\r\n if (filterRecorder[i].cohortName == cohortName)\r\n filterRecorder.remove(i);\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n //setup crossroads\r\n crossroads.addRoute('/:params*:/',\r\n function (params) {\r\n if (params == null) {\r\n hasher.replaceHash(dataFilterProcessor.getUrlFromFilter(null));\r\n }\r\n else {\r\n var proResult = dataFilterProcessor.processFilterParams(params, processCohorts);\r\n if (proResult.notEmpty) {\r\n self.isAdvanced('Advanced');\r\n }\r\n if (proResult.filling != \"\") {\r\n replaceHashSilently(hasher.getHash() + filling);\r\n }\r\n }\r\n });\r\n \r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash); //parse initial hash\r\n hasher.changed.add(parseHash); //parse hash changes\r\n hasher.init(); //start listening for history change\r\n }\r\n\r\n function setHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.setHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n\r\n function replaceHashSilently(hash) {\r\n hasher.changed.active = false; //disable changed signal\r\n hasher.replaceHash(hash); //set hash without dispatching changed signal\r\n hasher.changed.active = true; //re-enable signal\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Sunburst Chart\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n\r\n function drawSunburst(root, cohortName, filter) {\r\n \r\n // Total size of all segments; we set this later, after loading the data.\r\n var totalSize = 0;\r\n \r\n var container = d3.select('#sunbursts-container')\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst')\r\n .attr('id', 'js-sunburst-' + sunburstIndex);\r\n\r\n var diagram = container\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__diagram');\r\n\r\n var details = container\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details');\r\n \r\n // TO DO Return just the cohortName from the server so we don't need this fudge\r\n var name = cohortName;\r\n var last = name.lastIndexOf(' (')\r\n if (last > 0)\r\n {\r\n name = name.slice(0, last);\r\n }\r\n \r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__name')\r\n .text(name);\r\n\r\n details\r\n .append('div')\r\n .attr('class', 'data-subjects__sunburst__details__meta')\r\n .html(dataFilterProcessor.getFilterDetailString(filter));\r\n\r\n details\r\n .append('button')\r\n .attr('type', 'button')\r\n .attr('class', 'data-subjects__sunburst__details__delete btn btn-xs center-block btn-warning')\r\n .text('Delete')\r\n .on('click', function() { self.deleteCohort(dataFilterProcessor.getUrlFromFilter(filter)) });\r\n\r\n var side = parseInt(diagram.style('width'), 10) - 40; // 40 = padding-left + padding-right\r\n\r\n radius = (side / 2) - 9;\r\n\r\n y = d3.scale.sqrt()\r\n .range([0, radius]);\r\n\r\n var svg = diagram.append('svg:svg')\r\n .attr('width', side)\r\n .attr('height', side)\r\n .append('svg:g')\r\n .attr('class', 'sunburst')\r\n .attr('id', 'sunburst' + sunburstIndex)\r\n .attr('transform', 'translate(' + side / 2 + ',' + side / 2 + ')');\r\n\r\n sunburstIndex_cohortName.push(cohortName);\r\n sunburstIndex_deleted.push(false);\r\n \r\n var partition = d3.layout.partition()\r\n .value(function (d) { return d.Total; })\r\n .children(function (d) { return d.Children; })\r\n .sort(function comparator(a, b) {\r\n return a.Sequence - b.Sequence;\r\n });\r\n\r\n var arc = d3.svg.arc()\r\n .startAngle(function (d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })\r\n .endAngle(function (d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })\r\n .innerRadius(function (d) { return Math.max(0, y(d.y)); })\r\n .outerRadius(function (d) { return Math.max(0, y(d.y + d.dy)); });\r\n \r\n createVisualization(root);\r\n\r\n sunburstIndex++;\r\n\r\n // Main function to draw and set up the visualization, once we have the data.\r\n function createVisualization(root) {\r\n \r\n svg.append('svg:circle')\r\n .attr('r', side / 2)\r\n .style('fill', bases[sunburstIndex % bases.length]);\r\n\r\n // Bounding circle underneath the sunburst, to make it easier to detect\r\n // when the mouse leaves the parent g.\r\n svg.append('svg:circle')\r\n .attr('r', radius)\r\n .style('stroke', '#fff')\r\n .style('stroke-width', 8)\r\n .style('fill', '#fff')\r\n\r\n var path = svg.datum(root).selectAll('path')\r\n .data(partition.nodes(root))\r\n .enter().append('svg:path')\r\n .attr('d', arc)\r\n .each(function (d) { d.element = root; })\r\n .attr('fill-rule', 'evenodd')\r\n .style('fill', function (d) { return colors(d.CorrectCount / d.Total); })\r\n .style('opacity', 1)\r\n .on('mouseover', mouseover)\r\n .on('click', click);\r\n\r\n paths.push(path);\r\n\r\n // Add the mouseleave handler to the bounding circle.\r\n svg.on('mouseleave', mouseleave).on('mousemove', mousemove);\r\n\r\n // Get total size of the tree = value of root node from partition.\r\n totalSize = path.node().__data__.value;\r\n };\r\n\r\n function click(d) {\r\n \r\n if (self.clickMode() == 'Zoom')\r\n {\r\n for (var i = 0; i < sunburstIndex; i++) {\r\n var node = d3.selectAll('#sunburst' + i + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == d.SubjectId);\r\n }).data()[0];\r\n\r\n d3.selectAll('#sunburst' + i + ' path').transition()\r\n .duration(1000)\r\n .attrTween('d', arcTweenZoom(node));\r\n }\r\n } else {\r\n addLockSubject(d);\r\n }\r\n }\r\n\r\n function findSubjectPercentage(subjectId) {\r\n var result = [];\r\n for (var i = 0; i < sunburstIndex_cohortName.length; i++) {\r\n if (sunburstIndex_deleted[i]) {\r\n continue;\r\n }\r\n var item = { };\r\n item.cohortName = sunburstIndex_cohortName[i];\r\n \r\n var node = d3.selectAll('#sunburst' + i + ' path')\r\n .filter(function (node) {\r\n return (node.SubjectId == subjectId);\r\n }).data()[0];\r\n\r\n if (node != null) {\r\n item.percentage = node.CorrectCount / node.Total;\r\n } else {\r\n item.percentage = null;\r\n }\r\n \r\n result.push(item);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function addLockSubject(d) {\r\n\r\n var data = {\r\n subjectName: d.Name,\r\n cohorts: findSubjectPercentage(d.SubjectId)\r\n }\r\n\r\n drawSubjectBarchart(data);\r\n\r\n var sequenceArray = getAncestors(d);\r\n\r\n highlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element) {\r\n return element.SubjectId;\r\n }));\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n\r\n }\r\n \r\n\r\n\r\n \r\n // Fade all but the current sequence\r\n function mouseover(d) {\r\n\r\n var percentage = (100 * d.CorrectCount / d.Total).toPrecision(3);\r\n var percentageString = percentage + '%';\r\n \r\n var sequenceArray = getAncestors(d);\r\n\r\n var temphighlightSubjectIds = dataFilterProcessor.union_arrays(highlightSubjectIds, sequenceArray.map(function (element)\r\n {\r\n return element.SubjectId;\r\n }));\r\n\r\n // Fade all sunburst segments.\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n // Then highlight only those that are an ancestor of the current segment.\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (temphighlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n\r\n var data = {\r\n subjectName: d.Name,\r\n percentage: percentageString,\r\n cohorts: findSubjectPercentage(d.SubjectId)\r\n }\r\n\r\n tooltip\r\n .datum(data)\r\n .style('display', 'block');\r\n\r\n tooltip\r\n .select('.data-subjects__tooltip__subject')\r\n .text(function(d) { return d.subjectName; });\r\n\r\n tooltip\r\n .select('.data-subjects__tooltip__percentage')\r\n .text(function(d) { return d.percentage; });\r\n\r\n tooltip\r\n .transition()\r\n .duration(500)\r\n .style('opacity', 1);\r\n\r\n\r\n drawBarChart(data.cohorts, 205, 80, 7, tooltip.select('.data-subjects__tooltip__barchart'));\r\n }\r\n\r\n function mousemove() {\r\n tooltip\r\n .style('left', (d3.event.pageX + 20) + 'px')\r\n .style('top', (d3.event.pageY + 20) + 'px');\r\n }\r\n\r\n // Restore everything to full opacity when moving off the visualization.\r\n function mouseleave(d) {\r\n\r\n var somethingLocked = (highlightSubjectIds.length != 0);\r\n\r\n // Hide the breadcrumb trail\r\n d3.select('#trail')\r\n .style('visibility', 'hidden');\r\n\r\n // Deactivate all segments during transition.\r\n //d3.selectAll('path').on('mouseover', null);\r\n\r\n //// Transition each segment to full opacity and then reactivate it.\r\n //d3.selectAll('path')\r\n // .transition()\r\n // .duration(1000)\r\n // .style('opacity', 1)\r\n // .each('end', function () {\r\n // d3.select(this).on('mouseover', mouseover);\r\n // });\r\n \r\n if (somethingLocked)\r\n {\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 0.4);\r\n\r\n d3.selectAll('.sunburst path')\r\n .filter(function (node) {\r\n return (highlightSubjectIds.indexOf(node.SubjectId) >= 0);\r\n })\r\n .style('opacity', 1);\r\n }\r\n else\r\n {\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 1);\r\n }\r\n\r\n tooltip\r\n .transition()\r\n .duration(500)\r\n .style('opacity', 0)\r\n .each('end', hide);\r\n \r\n function hide() {\r\n d3.select(this).style('display', 'none');\r\n }\r\n\r\n }\r\n \r\n // Given a node in a partition layout, return an array of all of its ancestor\r\n // nodes, highest first, but excluding the root.\r\n function getAncestors(node) {\r\n var path = [];\r\n var current = node;\r\n while (current.parent) {\r\n path.unshift(current);\r\n current = current.parent;\r\n }\r\n return path;\r\n }\r\n \r\n // When zooming: interpolate the scales.\r\n function arcTweenZoom(d) {\r\n var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),\r\n yd = d3.interpolate(y.domain(), [d.y, 1]),\r\n yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);\r\n return function (d, i) {\r\n return i\r\n ? function (t) { return arc(d); }\r\n : function (t) { x.domain(xd(t)); y.domain(yd(t)).range(yr(t)); return arc(d); };\r\n };\r\n }\r\n\r\n }\r\n\r\n function clearLockSubjects() {\r\n highlightSubjectIds = [];\r\n\r\n d3.selectAll('.sunburst path')\r\n .style('opacity', 1);\r\n\r\n d3.selectAll('.data-subjects__barchart')\r\n .remove();\r\n }\r\n\r\n function drawBarChart(data, width, height, space, target) {\r\n\r\n var y = d3.scale.linear()\r\n .range([height, 0]);\r\n\r\n var chart = target\r\n .attr('width', width)\r\n .attr('height', height);\r\n\r\n y.domain([0, 1]);\r\n\r\n var barWidth = Math.min((width + space) / data.length - space, (width + space) / 4 - space);\r\n\r\n var rect = chart.selectAll('rect')\r\n .data(data)\r\n .attr('transform', function (d, i) { return 'translate(' + i * (barWidth + space) + ',0)'; })\r\n .attr('y', function (d) { return y(d.percentage); })\r\n .attr('height', function (d) { return height - y(d.percentage); })\r\n .attr('width', barWidth)\r\n .attr('fill', function (d, i) { return bases[i % bases.length]; });\r\n\r\n rect.enter().append('rect')\r\n .attr('transform', function (d, i) { return 'translate(' + i * (barWidth + space) + ',0)'; })\r\n .attr('y', function (d) { return y(d.percentage); })\r\n .attr('height', function (d) { return height - y(d.percentage); })\r\n .attr('width', barWidth)\r\n .attr('fill', function (d, i) { return bases[i % bases.length]; });\r\n\r\n rect.exit().remove();\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Subject Block\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function drawSubjectBarchart(data) {\r\n\r\n var barchart = d3.select('#barcharts-container')\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart')\r\n .append('div')\r\n .attr('class', 'data-subjects__barchart__inner')\r\n .datum(data);\r\n\r\n barchart.append('div')\r\n .attr('class', 'data-subjects__barchart__subject')\r\n .text(function (d) { return d.subjectName; });\r\n\r\n //barchart.append('div')\r\n // .attr('class', 'data-subjects__barchart__percentage')\r\n // .text(function (d) { return d.percentage; });\r\n\r\n //var width = parseInt(container.style('width'), 10);\r\n\r\n var target = barchart.append('svg')\r\n .attr('class', 'data-subjects__barchart__diagram');\r\n \r\n var width = parseInt(barchart.style('width'), 10) - 20;\r\n var height = width * 3 / 4;\r\n\r\n drawBarChart(data.cohorts, width, height, 10, target);\r\n }\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Bar Chart\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n //function drawBarchart(data) {\r\n \r\n // var margin = { top: 40, right: 20, bottom: 30, left: 40 },\r\n // width = 960 - margin.left - margin.right,\r\n // height = 500 - margin.top - margin.bottom;\r\n\r\n // var formatPercent = d3.format('.0%');\r\n\r\n // var x = d3.scale.ordinal()\r\n // .rangeRoundBands([0, width], .1);\r\n\r\n // var y = d3.scale.linear()\r\n // .range([height, 0]);\r\n \r\n // var yAxis = d3.svg.axis()\r\n // .scale(y)\r\n // .orient('left')\r\n // .tickFormat(formatPercent);\r\n\r\n // //var tip = d3.tip()\r\n // // .attr('class', 'd3-tip')\r\n // // .offset([-10, 0])\r\n // // .html(function (d) {\r\n // // return 'Frequency: ' + d.frequency + '';\r\n // // })\r\n\r\n // var svg = d3.select('#data-subjects__barcharts').append('svg')\r\n // .attr('width', width + margin.left + margin.right)\r\n // .attr('height', height + margin.top + margin.bottom)\r\n // .append('g')\r\n // .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');\r\n\r\n // //svg.call(tip);\r\n \r\n // x.domain(data.map(function (d) { return d.cohortName; }));\r\n // y.domain([0, 1]);\r\n \r\n // svg.append('g')\r\n // .attr('class', 'y axis')\r\n // .call(yAxis)\r\n // .append('text')\r\n // .attr('transform', 'rotate(-90)')\r\n // .attr('y', 6)\r\n // .attr('dy', '.71em')\r\n // .style('text-anchor', 'end')\r\n // .text('percentage');\r\n\r\n // svg.selectAll('.bar')\r\n // .data(data)\r\n // .enter().append('rect')\r\n // .attr('class', 'bar')\r\n // .attr('x', function (d) { return x(d.cohortName); })\r\n // .attr('width', x.rangeBand())\r\n // .attr('y', function (d) { return y(d.percentage); })\r\n // .attr('height', function (d) { return height - y(d.percentage); })\r\n // //.on('mouseover', tip.show)\r\n // //.on('mouseout', tip.hide)\r\n \r\n // function type(d) {\r\n // d.percentage = +d.percentage;\r\n // return d;\r\n // }\r\n //}\r\n\r\n});\n","define('pages/departments/default',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n \r\n});\n","define('pages/feedback/import',['jquery', 'toastr', 'jqueryValidate', 'bootstrap'], function ($, toastr) {\r\n $(function () {\r\n\r\n $('.js-import-confirmed').click(function () {\r\n\r\n var self = this;\r\n $('.alert-import').removeClass('hide');\r\n $('.js-import-confirmed').addClass('hide');\r\n });\r\n\r\n $('.js-import-preview').click(function () {\r\n\r\n var self = this;\r\n $('.alert-preview').removeClass('hide');\r\n $('.js-import-preview').addClass('hide');\r\n });\r\n \r\n });\r\n\r\n});\n","define('pages/feedback/studentstation',['jquery', 'knockout', 'crossroads', 'hasher', 'toastr', 'bootstrap', 'moment', 'enums', 'jqueryBootstrapPagination'], function ($, ko, crossroads, hasher, toastr) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.toggle = {\r\n init: function (element, valueAccessor) {\r\n ko.utils.registerEventHandler(element, 'click', function (event) {\r\n var toggleValue = valueAccessor();\r\n toggleValue(!toggleValue());\r\n if (event.preventDefault)\r\n event.preventDefault();\r\n event.returnValue = false;\r\n });\r\n },\r\n update: function (element, valueAccessor) {\r\n var toggleValue = ko.unwrap(valueAccessor());\r\n ko.utils.toggleDomNodeCssClass(element, 'active', toggleValue);\r\n }\r\n };\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n\r\n function StationForStudentsViewModel() {\r\n self = this;\r\n\r\n // Show the \"correct\" explanations of the \"incorrect\" explanations\r\n self.explanationOptions = new enums.Enum('correct', 'incorrect');\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // The current page is \"List\" or \"Question\"\r\n self.currentPage = ko.observable(\"\");\r\n\r\n // The active, processed and archived questions\r\n self.activeQuestions = ko.observableArray();\r\n self.processedQuestions = ko.observableArray();\r\n self.archivedQuestions = ko.observableArray();\r\n\r\n // The selected question\r\n self.question = ko.observable();\r\n \r\n // Which state of questions to show on the \"List\" page.\r\n self.isShowActiveQuestions = ko.observable(true);\r\n self.isShowProcessedQuestions = ko.observable(false);\r\n self.isShowArchivedQuestions = ko.observable(false);\r\n\r\n // Whether the different state questions are loaded.\r\n self.isActiveQuestionsLoaded = ko.observable(false);\r\n self.isProcessedQuestionsLoaded = ko.observable(false);\r\n self.isArchivedQuestionsLoaded = ko.observable(false);\r\n\r\n // States for controlling the UI for answering the follow-up question\r\n // isAnswerable controls the UI elements shown on the page.\r\n self.isAnswerable = ko.observable(true);\r\n self.isSubmitting = ko.observable(false);\r\n self.isShowReason = ko.observable(false);\r\n self.isShowExplanations = ko.observable(false);\r\n // Whether to show the correct explanations or the explanations to the same \r\n // distractor that the student chose.\r\n self.selectedExplanationOption = ko.observable(self.explanationOptions.correct);\r\n \r\n // The answer the student provides to the follow-up question\r\n self.selectedAnswer = ko.observable(null);\r\n self.reason = ko.observable(null);\r\n self.isGuess = ko.observable(false);\r\n\r\n // The follow-up question\r\n self.followQuestionData = ko.observable({});\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // When an answer is selected then show the editor for entering a reason\r\n self.selectedAnswer.subscribe(function (value) {\r\n if (value && self.isAnswerable()) {\r\n self.isShowReason(true);\r\n } else {\r\n self.isShowReason(false);\r\n }\r\n\r\n // Firefox bug (placeholder not shown)\r\n setTimeout(function () { $('#reasonText').focus(); }, 200);\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new StationForStudentsViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n // Hide the reason editor\r\n self.closeReason = function () {\r\n self.isShowReason(false);\r\n }\r\n\r\n // Commit the answer and show the explanations when the answer is saved\r\n self.commit = function () {\r\n setAnswer(showExplanations);\r\n }\r\n\r\n // Select a particular question\r\n self.enterQuestion = function (answerFeedbackId) {\r\n hasher.setHash(answerFeedbackId);\r\n }\r\n\r\n // Show the active questions (and hide the processed and archived ones)\r\n self.showActiveQuestions = function () {\r\n self.isShowActiveQuestions(true);\r\n self.isShowProcessedQuestions(false);\r\n self.isShowArchivedQuestions(false);\r\n ga('send', 'event', 'Feedback', 'Feedback – Inbox');\r\n }\r\n\r\n // Show the processed questions (and hide the active and archived ones)\r\n self.showProcessedQuestions = function () {\r\n self.isShowActiveQuestions(false);\r\n self.isShowArchivedQuestions(false);\r\n\r\n if (!self.isProcessedQuestionsLoaded()) {\r\n getProcessedQuestions();\r\n } else {\r\n self.isShowProcessedQuestions(true);\r\n }\r\n ga('send', 'event', 'Feedback', 'Feedback – Sent');\r\n }\r\n\r\n // Show the archived questions (and hide the active and processed ones)\r\n self.showArchivedQuestions = function () {\r\n self.isShowActiveQuestions(false);\r\n self.isShowProcessedQuestions(false);\r\n\r\n if (!self.isArchivedQuestionsLoaded()) {\r\n getArchivedQuestions();\r\n } else {\r\n self.isShowArchivedQuestions(true);\r\n }\r\n ga('send', 'event', 'Feedback', 'Feedback – Done');\r\n }\r\n\r\n // Show more explanations\r\n self.refresh = function () {\r\n getMoreExplanations(function () {\r\n self.followQuestionData(self.followQuestionData());\r\n });\r\n }\r\n\r\n // Funny little convertor from integer answer value to letter\r\n self.answerLabel = function (answerValue) {\r\n return ['A', 'B', 'C', 'D'][answerValue - 1];\r\n }\r\n\r\n // Toggle \"like\" on an explanation\r\n self.like = function () {\r\n if (!this.IsLiked()) {\r\n setLike(this.AnswerId, this.IsLiked);\r\n } else {\r\n deleteLike(this.AnswerId, this.IsLiked);\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Reset everything for the \"question\" page\r\n function clearQuestionData() {\r\n // Reset the question\r\n self.question();\r\n\r\n // Reset the UI for answering the follow-up question\r\n self.isAnswerable(true);\r\n self.isSubmitting(false);\r\n self.isShowReason(false);\r\n self.isShowExplanations(false);\r\n\r\n // Reset the answer given\r\n self.selectedAnswer(null);\r\n self.reason(null);\r\n self.isGuess(false);\r\n\r\n // Reset the follow-up question\r\n self.followQuestionData({});\r\n\r\n // Show the correct explanations\r\n self.selectedExplanationOption(self.explanationOptions.correct);\r\n }\r\n\r\n // Called when an answer is recorded.\r\n function showExplanations() {\r\n getExplanations(function () {\r\n // Refresh the UI for the follow-up question data\r\n self.followQuestionData(self.followQuestionData());\r\n self.isShowExplanations(true);\r\n });\r\n }\r\n\r\n // Send the answer to the server. (The callback is showExplanations.)\r\n function setAnswer(callback) {\r\n\r\n // Exit if you are already submitting\r\n if (self.isSubmitting()) {\r\n return;\r\n }\r\n\r\n if (self.reason() != null && self.reason().length > 1000) {\r\n toastr['error']('Length limit for explanation: 1000 characters.', 'Error');\r\n return;\r\n }\r\n\r\n // Prevent multiple submits\r\n self.isSubmitting(true);\r\n\r\n // Construct the answer to post to the server\r\n var answerValue = self.selectedAnswer();\r\n var reason = self.reason();\r\n var isGuess = self.isGuess();\r\n \r\n var now = new Date().toISOString();\r\n\r\n var model = {\r\n dateRead: now,\r\n followAnswer: {\r\n questionId: self.question().FollowQuestionId,\r\n answerValue: answerValue,\r\n reason: reason,\r\n isGuess: isGuess,\r\n dateAnswered: now\r\n }\r\n };\r\n\r\n // The answer is linked to an answer feedback. Therefore we actually\r\n // update the answer feedback to submit the answer.\r\n $.ajax({\r\n url: '/v1/answer-feedbacks/' + self.question().AnswerFeedbackId,\r\n type: 'PUT',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n self.followQuestionData().AnswerValue = answerValue;\r\n self.followQuestionData().Reason = reason;\r\n self.followQuestionData().IsGuess = isGuess;\r\n\r\n ga('send', 'event', 'Feedback', 'Feedback – Answer follow up question');\r\n\r\n if (typeof (callback) === \"function\") {\r\n callback();\r\n }\r\n\r\n // Prevent further answers and hide the reason editor\r\n self.isAnswerable(false);\r\n self.isShowReason(false);\r\n } else {\r\n toastr['error']('The answer was not record correctly.', 'Error');\r\n }\r\n \r\n self.isSubmitting(false);\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState)\r\n {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState)\r\n {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message)\r\n {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else\r\n {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n \r\n self.isSubmitting(false);\r\n }\r\n });\r\n\r\n }\r\n\r\n // TODO Replace call with call to get AnswerFeedbacks for the student (not FQ)\r\n // See teacherstation.js\r\n function getActiveQuestions() {\r\n var model = { type: 'active' };\r\n $.ajax({\r\n url: '/Feedback/GetFeedbackQuestionsForStudent',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n self.activeQuestions(data.model);\r\n self.isActiveQuestionsLoaded(true);\r\n self.currentPage(\"List\");\r\n }\r\n }\r\n })\r\n }\r\n\r\n // TODO Replace with call to answer feedbacks\r\n // See teacherstation.js\r\n function getProcessedQuestions() {\r\n var model = { type: 'processed' }; // Read AND Answered if there is a follow-up\r\n $.ajax({\r\n url: '/Feedback/GetFeedbackQuestionsForStudent',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n self.processedQuestions(data.model);\r\n self.isProcessedQuestionsLoaded(true);\r\n self.isShowProcessedQuestions(true);\r\n }\r\n }\r\n })\r\n }\r\n\r\n // TODO Add a getArchivedQuestions function\r\n function getArchivedQuestions() {\r\n var model = {};\r\n\r\n // TODO!\r\n }\r\n\r\n\r\n // TODO This is really odd. We are searching the whole list of questions rather \r\n // than just retrieving one.\r\n function getAnswerFeedback(answerFeedbackId) {\r\n\r\n var q;\r\n\r\n for (var i = 0; i < self.activeQuestions().length; i++) {\r\n if (self.activeQuestions()[i].AnswerFeedbackId == answerFeedbackId) {\r\n q = self.activeQuestions()[i];\r\n }\r\n }\r\n\r\n if (q == null) {\r\n\r\n if (!self.isProcessedQuestionsLoaded()) {\r\n getProcessedQuestions();\r\n }\r\n\r\n for (var i = 0; i < self.processedQuestions().length; i++) {\r\n if (self.processedQuestions()[i].AnswerFeedbackId == answerFeedbackId) {\r\n q = self.processedQuestions()[i];\r\n }\r\n }\r\n }\r\n \r\n if (q != null) {\r\n self.question(q);\r\n self.followQuestionData().CorrectAnswer = q.FollowQuestionCorrectAnswer;\r\n self.currentPage('Question');\r\n setFeedbackRead(answerFeedbackId);\r\n }\r\n \r\n }\r\n\r\n // Update the answer feedback to mark as feedback read.\r\n function setFeedbackRead(answerFeedbackId) {\r\n var now = new Date().toISOString();\r\n\r\n var model = {\r\n dateRead: now\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/answer-feedbacks/' + self.question().AnswerFeedbackId,\r\n type: 'PUT',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n // Do nothing\r\n ga('send', 'event', 'Feedback', 'Feedback – Feedback read');\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n\r\n self.isSubmitting(false);\r\n }\r\n });\r\n }\r\n\r\n // Get the explanations to display\r\n function getExplanations(callback) {\r\n\r\n var model = {\r\n questionId: self.question().FollowQuestionId,\r\n firstAnswerValue: self.followQuestionData().CorrectAnswer,\r\n secondAnswerValue: self.followQuestionData().AnswerValue\r\n };\r\n\r\n $.ajax({\r\n url: '/Quizzes/GoExplanationsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n\r\n self.followQuestionData().CorrectSkip = 0;\r\n self.followQuestionData().IsMoreCorrectExplanations = data.IsMoreFirstExplanations;\r\n\r\n self.followQuestionData().IncorrectSkip = 0;\r\n self.followQuestionData().IsMoreIncorrectExplanations = data.IsMoreSecondExplanations;\r\n\r\n self.followQuestionData().Explanations = {\r\n CorrectExplanations: data.FirstExplanations,\r\n IncorrectExplanations: data.SecondExplanations\r\n }\r\n\r\n for (var i = 0; i < self.followQuestionData().Explanations.CorrectExplanations.length; i++) {\r\n self.followQuestionData().Explanations.CorrectExplanations[i].IsLiked = ko.observable(false);\r\n }\r\n\r\n for (var i = 0; i < self.followQuestionData().Explanations.IncorrectExplanations.length; i++) {\r\n self.followQuestionData().Explanations.IncorrectExplanations[i].IsLiked = ko.observable(false);\r\n }\r\n\r\n if (typeof (callback) === \"function\") {\r\n callback();\r\n }\r\n },\r\n error: function (error) {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n });\r\n }\r\n\r\n // Get more explanations\r\n function getMoreExplanations(callback) {\r\n\r\n var model = {\r\n questionId: self.question().FollowQuestionId,\r\n secondAnswerValue: null\r\n };\r\n\r\n if (self.selectedExplanationOption() == self.explanationOptions.correct) {\r\n model.firstAnswerValue = self.followQuestionData().CorrectAnswer;\r\n\r\n if (self.followQuestionData().IsMoreCorrectExplanations) {\r\n self.followQuestionData().CorrectSkip += 2;\r\n } else if (self.followQuestionData().CorrectSkip > 0) {\r\n self.followQuestionData().CorrectSkip = 0;\r\n } else {\r\n toastr['info']('We are already showing all the explanations', 'All out!');\r\n }\r\n\r\n model.skip = self.followQuestionData().CorrectSkip;\r\n } else {\r\n model.firstAnswerValue = self.selectedAnswer();\r\n\r\n if (self.followQuestionData().IsMoreIncorrectExplanations) {\r\n self.followQuestionData().IncorrectSkip += 2;\r\n } else if (self.followQuestionData().IncorrectSkip > 0) {\r\n self.followQuestionData().IncorrectSkip = 0;\r\n } else {\r\n toastr['info']('We are already showing all the explanations', 'All out!');\r\n }\r\n\r\n model.skip = self.followQuestionData().IncorrectSkip;\r\n }\r\n\r\n $.ajax({\r\n url: '/Quizzes/GoExplanationsJson',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n\r\n if (data.FirstExplanations.length == 0) {\r\n toastr['info']('There are no more explanations to view.', 'All out!');\r\n return;\r\n }\r\n\r\n if (self.selectedExplanationOption() == self.explanationOptions.correct) {\r\n\r\n self.followQuestionData().Explanations.CorrectExplanations = data.FirstExplanations;\r\n\r\n self.followQuestionData().IsMoreCorrectExplanations = data.IsMoreFirstExplanations;\r\n\r\n for (var i = 0; i < self.followQuestionData().Explanations.CorrectExplanations.length; i++) {\r\n self.followQuestionData().Explanations.CorrectExplanations[i].IsLiked = ko.observable(false);\r\n }\r\n\r\n } else {\r\n\r\n self.followQuestionData().Explanations.IncorrectExplanations = data.FirstExplanations;\r\n\r\n self.followQuestionData().IsMoreIncorrectExplanations = data.IsMoreFirstExplanations;\r\n\r\n for (var i = 0; i < self.followQuestionData().Explanations.IncorrectExplanations.length; i++) {\r\n self.followQuestionData().Explanations.IncorrectExplanations[i].IsLiked = ko.observable(false);\r\n }\r\n\r\n }\r\n\r\n if (typeof (callback) === \"function\") {\r\n callback();\r\n }\r\n },\r\n error: function (error) {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n self.isSubmitting(false);\r\n }\r\n });\r\n }\r\n\r\n // Set a \"like\" on the given answer\r\n function setLike(answerId, callback) {\r\n\r\n if (self.isSubmitting()) {\r\n return;\r\n }\r\n self.isSubmitting(true);\r\n\r\n var model = {\r\n answerId: answerId\r\n };\r\n\r\n $.ajax({\r\n url: '/Data/AddLikeAnswer',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (typeof (callback) === \"function\") {\r\n callback(true);\r\n }\r\n self.isSubmitting(false);\r\n },\r\n error: function (error) {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n self.isSubmitting(false);\r\n }\r\n });\r\n\r\n }\r\n\r\n // Revove the like from a given answer \r\n function deleteLike(answerId, callback) {\r\n\r\n if (self.isSubmitting()) {\r\n return;\r\n }\r\n self.isSubmitting(true);\r\n\r\n var model = {\r\n answerId: answerId\r\n };\r\n\r\n $.ajax({\r\n url: '/Data/RemoveLikeAnswer',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (typeof (callback) === \"function\") {\r\n callback(false);\r\n }\r\n self.isSubmitting(false);\r\n },\r\n error: function (error) {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n self.isSubmitting(false);\r\n }\r\n });\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n function initRouter() {\r\n\r\n crossroads.addRoute('/',\r\n function () {\r\n getActiveQuestions();\r\n });\r\n\r\n crossroads.addRoute('/{id}/',\r\n function (id) {\r\n // Why do we need to load all the active questions here?\r\n if (!self.isActiveQuestionsLoaded()) {\r\n getActiveQuestions();\r\n }\r\n clearQuestionData();\r\n getAnswerFeedback(id);\r\n });\r\n\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/feedback/teacherstation',['jquery', 'knockout', 'crossroads', 'hasher', 'toastr', 'moment', 'bootstrap', 'jqueryBootstrapPagination'], function ($, ko, crossroads, hasher, toastr, moment) {\r\n\r\n var unSavedChanges = false;\r\n \r\n $(function () {\r\n window.onbeforeunload = function () {\r\n if (unSavedChanges)\r\n {\r\n return 'There are some unsaved changes in this page.';\r\n }\r\n };\r\n });\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n\r\n // The index of the current feedback group.\r\n var newFeedbackGroupIndex = 0;\r\n // An array of all new feedback groups (it does not include feedback groups which\r\n // already existed when you loaded the page).\r\n var newFeedbackGroups = [];\r\n // Number of questions to show on each page.\r\n var pageSize = 12;\r\n\r\n function Group(data) {\r\n var self = this;\r\n self.groupId = data.groupId;\r\n self.code = data.code;\r\n }\r\n\r\n function StationForTeachersViewModel() {\r\n self = this;\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // The current page is \"List\" or \"Question\"\r\n self.currentPage = ko.observable(\"\");\r\n\r\n // The active, processed and archived questions\r\n self.activeQuestions = ko.observableArray();\r\n self.processedQuestions = ko.observableArray();\r\n self.archivedQuestions = ko.observableArray();\r\n\r\n // The selected question\r\n self.question = ko.observable();\r\n\r\n // Dictionary mapping answerId to the details about that answer.\r\n self.answerIdHashIndex = {};\r\n // Dictionary mapping answerId to whether it is selected.\r\n self.selectedAnswerIds = ko.observable({});\r\n // Dictionary mapping answerId to written feedback.\r\n self.answerIdFeedbacks = ko.observable({});\r\n\r\n // The current written feedback. (Tracked by the currently selected answers.)\r\n self.feedbackText = ko.observable(\"\");\r\n\r\n // The questionId for the selected follow-up question (if there is one).\r\n self.followQuestionId = ko.observable();\r\n\r\n // The index of the currently shown suggested follow-up question\r\n self.currentFollowUpQuestionIndex = ko.observable(\"\");\r\n // The number of suggested follow-up questions\r\n self.previewQuestionCount = ko.observable(0);\r\n // The selected \r\n self.currentFollowUpQuestion = ko.observable();\r\n\r\n // Whether the checkboxes are styled as selected or unselected\r\n self.toggleAnswersA = ko.observable(false);\r\n self.toggleAnswersB = ko.observable(false);\r\n self.toggleAnswersC = ko.observable(false);\r\n self.toggleAnswersD = ko.observable(false);\r\n\r\n // Which state of questions to show on the \"List\" page.\r\n self.isShowActiveQuestions = ko.observable(true);\r\n self.isShowProcessedQuestions = ko.observable(false);\r\n self.isShowArchivedQuestions = ko.observable(false);\r\n\r\n // Whether to assign a follow-up question to the selected answers.\r\n self.isSetFollowUpQuestion = ko.observable(true);\r\n // Whether to show the preview for selecting a follow-up question.\r\n self.isShowFollowUpQuestion = ko.observable(false);\r\n\r\n // Whether the different state questions are loaded.\r\n self.isActiveQuestionsLoaded = ko.observable(false);\r\n self.isProcessedQuestionsLoaded = ko.observable(false);\r\n self.isArchivedQuestionsLoaded = ko.observable(false);\r\n\r\n // The selected feedback question identifier.\r\n self.selectedFeedbackQuestionId = ko.observable(null);\r\n\r\n // The suggested follow-up questions\r\n self.similarQuestions = ko.observable();\r\n\r\n // The teacher identifier.\r\n self.teacherId = $('#teacherId').data('teacherid');\r\n\r\n // The teachers groups.\r\n self.groups = ko.observableArray([]);\r\n self.groupId = ko.observable();\r\n self.isGroupsLoaded = ko.observable(false);\r\n var isGroupIdInitiated = false;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Update the current follow-up question when the index changes. (For the preview.)\r\n self.currentFollowUpQuestionIndex.subscribe(function (newValue) {\r\n self.currentFollowUpQuestion(self.similarQuestions()[newValue]);\r\n });\r\n \r\n // If the written feedback changes then track that there are unsaved changes.\r\n self.feedbackText.subscribe(function () {\r\n unSavedChanges = true;\r\n });\r\n\r\n // Subscribe to changes to groupId but the first time it \"changes\" it is just initiating\r\n self.groupId.subscribe(function () {\r\n if (isGroupIdInitiated) {\r\n reloadFeedbackQuestions();\r\n } else {\r\n isGroupIdInitiated = true;\r\n }\r\n });\r\n\r\n // If a follow-up question has been set then for every student answer\r\n // if the answer is selected, mark the answer as having follow-up question\r\n // set.\r\n self.isSetFollowUpQuestion.subscribe(function (newValue) {\r\n for (var i = 0; i < self.question().answers.length; i++) {\r\n if (self.selectedAnswerIds()[self.question().answers[i].answerId]) {\r\n self.question().answers[i].isSetFollowUpQuestion(newValue);\r\n }\r\n }\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new StationForTeachersViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Clear the follow-up question identifier, clear out the array of similar\r\n // questions and set the current follow-up question index to null.\r\n function clearFollowUpQuestion() {\r\n self.followQuestionId(null);\r\n self.similarQuestions([]);\r\n self.currentFollowUpQuestionIndex(null);\r\n }\r\n\r\n // Clear the question, the selected answer identifiers and answer feedbacks. Set\r\n // the feedback to the empty string. Set all checkboxes to unselected. Hide the \r\n // follow-up question preview and set whether to set follow-up question to true.\r\n function clearQuestion() {\r\n self.question();\r\n\r\n self.selectedAnswerIds({});\r\n self.answerIdFeedbacks({});\r\n\r\n self.feedbackText('');\r\n\r\n self.toggleAnswersA(false);\r\n self.toggleAnswersB(false);\r\n self.toggleAnswersC(false);\r\n self.toggleAnswersD(false);\r\n\r\n self.isSetFollowUpQuestion(true);\r\n self.isShowFollowUpQuestion(false);\r\n }\r\n\r\n function addPageFunctions() {\r\n\r\n // The URL for the question insights page for the given question\r\n self.questionPageUrl = function (questionId) {\r\n var url = '/Data/Question/' + questionId + '#/';\r\n return url;\r\n }\r\n\r\n // Format a 0-1 value as a percentage safely\r\n self.getPercentageString = function (percentage) {\r\n if (percentage == null || isNaN(percentage))\r\n return percentage;\r\n else\r\n return Math.round(percentage * 100) + '%';\r\n }\r\n\r\n // Go to the URL for the individual feedback question page\r\n self.enterQuestion = function (feedbackQuestionId) {\r\n hasher.setHash(feedbackQuestionId);\r\n }\r\n\r\n self.leaveQuestion = function () {\r\n hasher.setHash('');\r\n }\r\n\r\n // Show the active questions (and hide the processed and archived ones)\r\n self.showActiveQuestions = function () {\r\n self.isShowProcessedQuestions(false);\r\n self.isShowArchivedQuestions(false);\r\n\r\n if (!self.isActiveQuestionsLoaded()) {\r\n getActiveQuestions();\r\n } else {\r\n self.isShowActiveQuestions(true);\r\n }\r\n\r\n ga('send', 'event', 'Feedback', 'Feedback – Inbox');\r\n }\r\n\r\n // Show the processed questions (and hide the active and archived ones)\r\n self.showProcessedQuestions = function () {\r\n self.isShowActiveQuestions(false);\r\n self.isShowArchivedQuestions(false);\r\n\r\n if (!self.isProcessedQuestionsLoaded()) {\r\n getProcessedQuestions();\r\n } else {\r\n self.isShowProcessedQuestions(true);\r\n }\r\n ga('send', 'event', 'Feedback', 'Feedback – Sent');\r\n }\r\n\r\n // Show the archived questions (and hide the active and processed ones)\r\n self.showArchivedQuestions = function () {\r\n self.isShowActiveQuestions(false);\r\n self.isShowProcessedQuestions(false);\r\n\r\n if (!self.isArchivedQuestionsLoaded()) {\r\n getArchivedQuestions();\r\n } else {\r\n self.isShowArchivedQuestions(true);\r\n }\r\n ga('send', 'event', 'Feedback', 'Feedback – Done');\r\n }\r\n\r\n // Select an answer if no feedback has been given already\r\n self.selectAnswer = function (answerId)\r\n {\r\n if (self.answerIdHashIndex[answerId].feedbackGiven()) {\r\n return;\r\n }\r\n\r\n selectAnswer(answerId);\r\n\r\n // Force UI update by resetting these values.\r\n self.selectedAnswerIds(self.selectedAnswerIds());\r\n self.answerIdFeedbacks(self.answerIdFeedbacks());\r\n }\r\n\r\n // Select all answers with the given answer value and then change the checkbox\r\n // status.\r\n self.selectAnswersWithValue = function (answerValue) {\r\n selectAnswersWithValue(answerValue);\r\n\r\n // Force UI update by resetting these values.\r\n self.selectedAnswerIds(self.selectedAnswerIds());\r\n self.answerIdFeedbacks(self.answerIdFeedbacks());\r\n\r\n switch (answerValue) {\r\n case 1:\r\n self.toggleAnswersA(true);\r\n break;\r\n case 2:\r\n self.toggleAnswersB(true);\r\n break;\r\n case 3:\r\n self.toggleAnswersC(true);\r\n break;\r\n case 4:\r\n self.toggleAnswersD(true);\r\n break;\r\n default:\r\n // Do nothing\r\n }\r\n }\r\n\r\n // Get the letter answer value from the numeric answer value\r\n self.getAnswerValueLabel = function (answerValue) {\r\n return String.fromCharCode(answerValue + 'A'.charCodeAt(0) - 1);\r\n }\r\n\r\n // Get the date in a nice format\r\n self.getDateString = function (date) {\r\n return moment(date).format('DD MMM YYYY HH:mm');\r\n }\r\n\r\n // Save all the feedback that has been written. \r\n self.sendFeedback = function () {\r\n\r\n // If any answers are selected force a save in case the user has forgotten.\r\n if (isAnyAnswerSelected()) {\r\n self.saveFeedbackGroups();\r\n }\r\n \r\n var feedbackGroups = getFeedbackGroupsToSave();\r\n\r\n var newFeedbackGroupsToSaveCount = 0;\r\n\r\n for (var index = 0; index < feedbackGroups.length; index++) {\r\n if (feedbackGroups[index].answers.length > 0 && !feedbackGroups[index].isSaved) {\r\n newFeedbackGroupsToSaveCount = newFeedbackGroupsToSaveCount + 1;\r\n }\r\n }\r\n\r\n if (newFeedbackGroupsToSaveCount == 0) {\r\n toastr['warning']('No new feedback has been given.', 'Warning');\r\n return;\r\n }\r\n\r\n var followQuestionId = self.followQuestionId();\r\n\r\n // Track how many feedback groups have been processed.\r\n var processedCount = 0;\r\n\r\n // The new endpoint is for one feedback group so we need to loop.\r\n for (var fgIndex = 0; fgIndex < feedbackGroups.length; fgIndex++) {\r\n\r\n // Skip feedback groups if there are no answers associated with them.\r\n // We skip rather than remove from the array because the index value is used to link to the answers.\r\n if (feedbackGroups[fgIndex].answers.length == 0 || feedbackGroups[fgIndex].isSaved) {\r\n processedCount = processedCount + 1;\r\n if (processedCount == feedbackGroups.length) {\r\n unSavedChanges = false;\r\n toastr['success']('Feedback sent', 'Success');\r\n ga('send', 'event', 'Feedback', 'Feedback – Send feedback');\r\n }\r\n continue;\r\n }\r\n\r\n var model = {\r\n feedback: feedbackGroups[fgIndex].feedback,\r\n followQuestionId: feedbackGroups[fgIndex].isSetFollowUpQuestion ? followQuestionId : null,\r\n answerIds: $.map(feedbackGroups[fgIndex].answers, function (item) { return item.answerId })\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/feedback-questions/' + self.question().feedbackQuestionId + '/feedback-groups',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n indexValue: fgIndex, // Pass in the index value so we can access it in the success callback\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n // Record that this feedback group has been saved so we do not attempt to save it again.\r\n newFeedbackGroups[this.indexValue].isSaved = true;\r\n markFeedbackGiven(this.indexValue);\r\n\r\n // Multiple asynchronous calls so count them\r\n processedCount = processedCount + 1;\r\n if (processedCount == feedbackGroups.length) {\r\n unSavedChanges = false;\r\n toastr['success']('Feedback sent', 'Success');\r\n ga('send', 'event', 'Feedback', 'Feedback – Send feedback');\r\n }\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Get a list of suggested follow-up questions\r\n self.getFollowUpQuestions = function () {\r\n\r\n // Hardcode the answerValue of 1 because the interface does not allow for different follow-up questions.\r\n $.ajax({\r\n url: '/v1/questions/' + self.question().questionId + '/answer-value/1/suggested-questions',\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n self.similarQuestions(data);\r\n self.previewQuestionCount(data.length);\r\n self.isShowFollowUpQuestion(true);\r\n self.currentFollowUpQuestionIndex(0);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Get a specific follow-up question (because it has already been set)\r\n self.getFollowUpQuestion = function () {\r\n var model = {\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/questions/' + self.question().followQuestionId,\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n self.similarQuestions([data]);\r\n self.previewQuestionCount(1);\r\n self.isShowFollowUpQuestion(true);\r\n self.currentFollowUpQuestionIndex(0);\r\n self.followQuestionId(self.question().followQuestionId);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Select a follow-up question\r\n self.confirmFollowQuestion = function () {\r\n self.followQuestionId(self.currentFollowUpQuestion().questionId);\r\n }\r\n\r\n // Go backward through the list of suggested follow-up questions\r\n self.previewBackward = function () {\r\n self.currentFollowUpQuestionIndex(self.currentFollowUpQuestionIndex() - 1);\r\n }\r\n\r\n // Go forward through the list of suggested follow-up questions\r\n self.previewForward = function () {\r\n self.currentFollowUpQuestionIndex(self.currentFollowUpQuestionIndex() + 1);\r\n }\r\n\r\n // Change the question status to \"Archvied\". A teacher may want to do this\r\n // if all students have responded, they have given written feedback to a \r\n // couple but now they are happy with the rest and just want to hide this \r\n // question so it is never shown again.\r\n self.archiveFeedback = function () {\r\n var model = {\r\n status: 'Archived'\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/feedback-questions/' + self.question().feedbackQuestionId,\r\n type: 'PUT',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n self.question(null);\r\n\r\n reloadFeedbackQuestions();\r\n\r\n toastr['info']('You will not receive any further notifications about this question.', 'Moved to Done');\r\n } else {\r\n toastr['error'](data.status, 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Change the question status to \"Processed\". A teacher may want to do this\r\n // if they have say 10 answers to give feedback on, they give feedback on 6\r\n // but the other 4 got the question correct and the teacher does not want\r\n // to give them feedback. Rather than leave the question in the inbox they\r\n // can change the status to \"Processed\" and it will move to the \"Sentbox\" \r\n // until other students reply to the question.\r\n self.completeFeedback = function () {\r\n var model = {\r\n status: 'Processed'\r\n };\r\n\r\n $.ajax({\r\n url: '/v1/feedback-questions/' + self.question().feedbackQuestionId,\r\n type: 'PUT',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n self.question(null);\r\n\r\n reloadFeedbackQuestions();\r\n\r\n if (data.status.toLowerCase() === 'processed') {\r\n toastr['info']('Waiting for more student answers.', 'Moved to Sent');\r\n } else if (data.status.toLowerCase() === 'archived') {\r\n toastr['info']('All students have answered the question.', 'Moved to Done');\r\n }\r\n \r\n } else {\r\n toastr['error'](data.status, 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Clear all the selected answers. \r\n self.clearSelectedAnswers = function () {\r\n clearSelectedAnswers();\r\n\r\n // Force UI update by resetting these values.\r\n self.selectedAnswerIds(self.selectedAnswerIds());\r\n self.answerIdFeedbacks(self.answerIdFeedbacks());\r\n\r\n // Reset the feedback text to the empty string\r\n self.feedbackText('');\r\n\r\n // Unselect the answer value checkboxes\r\n self.toggleAnswersA(false);\r\n self.toggleAnswersB(false);\r\n self.toggleAnswersC(false);\r\n self.toggleAnswersD(false);\r\n }\r\n \r\n // Save the feedback groups and then unselect the answers.\r\n self.saveFeedbackGroups = function () {\r\n\r\n // If there is no written feedback just return a warning.\r\n if (self.feedbackText() === '') {\r\n toastr['warning']('Please write some feedback.', 'Warning');\r\n return;\r\n }\r\n\r\n saveFeedbackGroups();\r\n self.clearSelectedAnswers();\r\n\r\n // Force UI update by resetting these values.\r\n self.selectedAnswerIds(self.selectedAnswerIds());\r\n self.answerIdFeedbacks(self.answerIdFeedbacks());\r\n }\r\n\r\n // Download the feedback report.\r\n self.downloadFeedbackReport = function (feedbackQuestionId, userId, answerId) {\r\n document.location = '/Data/DownloadStudentFeedbackReport?FeedbackQuestionId=' + feedbackQuestionId + '&userId=' + userId + '&answerId=' + answerId;\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function clearNewFeedbackGroups() {\r\n newFeedbackGroupIndex = 0;\r\n newFeedbackGroups = [];\r\n\r\n var answers = self.question().answers;\r\n for (var i = 0; i < answers.length; i++) {\r\n answers[i].newFeedbackGroupIndex = null;\r\n }\r\n }\r\n\r\n // Unselect the answers which are selected.\r\n function clearSelectedAnswers() {\r\n var answers = self.question().answers;\r\n for (var i = 0; i < answers.length; i++) {\r\n if (self.selectedAnswerIds()[answers[i].answerId] == true) {\r\n deselectAnswer(answers[i].answerId);\r\n }\r\n }\r\n }\r\n\r\n // Check whether any answers are selected.\r\n function isAnyAnswerSelected() {\r\n var answers = self.question().answers;\r\n for (var i = 0; i < answers.length; i++) {\r\n if (self.selectedAnswerIds()[answers[i].answerId] == true) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // For the given answer identifier record that it is selected and the \r\n // feedback text observable that we will be given. Record whether a follow-up \r\n // question will be assigned.\r\n function selectAnswer(answerId) {\r\n\r\n self.selectedAnswerIds()[answerId] = true;\r\n // Note that we assign the *observable* feedback text. This is\r\n // dynamically data-binding.\r\n self.answerIdFeedbacks()[answerId] = self.feedbackText;\r\n \r\n var answer = self.answerIdHashIndex[answerId];\r\n answer.isSetFollowUpQuestion(self.isSetFollowUpQuestion());\r\n // Make sure the answer is not linked to any existing feedback groups.\r\n answer.newFeedbackGroupIndex = null;\r\n }\r\n\r\n function deselectAnswer(answerId) {\r\n self.selectedAnswerIds()[answerId] = false;\r\n // Note that we remove the link to the observable here IF it is linked to\r\n // the observable. It may be that it has been replaced by static text.\r\n if (self.answerIdFeedbacks()[answerId] === self.feedbackText) {\r\n self.answerIdFeedbacks()[answerId] = '';\r\n }\r\n \r\n // Leave the state of the answer.\r\n }\r\n \r\n // Form a set of feedback groups from the answers.\r\n function getFeedbackGroupsToSave() {\r\n var answers = self.question().answers;\r\n\r\n // Reset the answers array for each newFeedbackGroup to empty.\r\n for (var i = 0; i < newFeedbackGroupIndex; i++) {\r\n newFeedbackGroups[i].answers = [];\r\n }\r\n\r\n // For each answer add it to the correct newFeedbackGroup. \r\n for (var j = 0; j < answers.length; j++) {\r\n if (answers[j].newFeedbackGroupIndex != null) {\r\n newFeedbackGroups[answers[j].newFeedbackGroupIndex].answers.push({ answerId: answers[j].answerId, userId: answers[j].userId });\r\n }\r\n }\r\n\r\n return newFeedbackGroups;\r\n }\r\n\r\n // Select all answers with the given answer value.\r\n function selectAnswersWithValue(answerValue) {\r\n var answers = self.question().StudentAnswersForDot[answerValue - 1];\r\n for(var i = 0; i < answers.length; i++) {\r\n if (!answers[i].feedbackGiven()) {\r\n selectAnswer(answers[i].answerId);\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// API\r\n /// \r\n /// Calls to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n // Get a list of all the groups for this teacher\r\n function getGroups() {\r\n\r\n // Hardcode the answerValue of 1 because the interface does not allow for different follow-up questions.\r\n $.ajax({\r\n url: '/v1/teachers/' + self.teacherId + '/groups',\r\n type: 'GET',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n var groups = $.map(data, function (item) {\r\n return new Group(item)\r\n });\r\n groups.unshift({\r\n groupId: null,\r\n code: 'All classes'\r\n })\r\n self.groups(groups);\r\n self.isGroupsLoaded(true);\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getActiveQuestions(page, isChangingPage) {\r\n\r\n page = (typeof page !== 'undefined') ? page : 1;\r\n isChangingPage = (typeof isChangingPage !== 'undefined') ? isChangingPage : false;\r\n\r\n var model = {};\r\n\r\n var skip = (page - 1) * pageSize;\r\n\r\n var url = '/v1/teachers/' + self.teacherId + '/feedback-questions?filter.includes=statistics&filter.statuses=active&skip=' + skip + '&take=' + pageSize;\r\n\r\n if (self.groupId() !== null && self.groupId() > 0) {\r\n url = url + '&filter.groupId=' + self.groupId();\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (response) {\r\n var data = response.data;\r\n\r\n if (data) {\r\n self.activeQuestions(data);\r\n self.isShowActiveQuestions(true);\r\n self.isActiveQuestionsLoaded(true);\r\n self.currentPage(\"List\");\r\n if (!isChangingPage) {\r\n updateQuestionActivePager(1, Math.ceil(response.total / pageSize));\r\n }\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n \r\n function getProcessedQuestions(page, isChangingPage) {\r\n\r\n page = (typeof page !== 'undefined') ? page : 1;\r\n isChangingPage = (typeof isChangingPage !== 'undefined') ? isChangingPage : false;\r\n\r\n var model = {};\r\n\r\n var skip = (page - 1) * pageSize;\r\n\r\n var url = '/v1/teachers/' + self.teacherId + '/feedback-questions?filter.includes=statistics&filter.statuses=processed&skip=' + skip + '&take=' + pageSize;\r\n\r\n if (self.groupId() !== null && self.groupId() > 0) {\r\n url = url + '&filter.groupId=' + self.groupId();\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (response) {\r\n var data = response.data;\r\n\r\n if (data) {\r\n self.processedQuestions(data);\r\n self.isShowProcessedQuestions(true);\r\n self.isProcessedQuestionsLoaded(true);\r\n self.currentPage(\"List\");\r\n if (!isChangingPage) {\r\n updateQuestionProcessedPager(1, Math.ceil(response.total / pageSize));\r\n }\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n function getArchivedQuestions(page, isChangingPage) {\r\n\r\n page = (typeof page !== 'undefined') ? page : 1;\r\n isChangingPage = (typeof isChangingPage !== 'undefined') ? isChangingPage : false;\r\n\r\n var model = {};\r\n\r\n var skip = (page - 1) * pageSize;\r\n\r\n var url = '/v1/teachers/' + self.teacherId + '/feedback-questions?filter.includes=statistics&filter.statuses=archived&skip=' + skip + '&take=' + pageSize;\r\n\r\n if (self.groupId() !== null && self.groupId() > 0) {\r\n url = url + '&filter.groupId=' + self.groupId();\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (response) {\r\n var data = response.data;\r\n\r\n if (data) {\r\n self.archivedQuestions(data);\r\n self.isShowArchivedQuestions(true);\r\n self.isArchivedQuestionsLoaded(true);\r\n self.currentPage(\"List\");\r\n if (!isChangingPage) {\r\n updateQuestionArchivedPager(1, Math.ceil(response.total / pageSize));\r\n } \r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Called when we click on a particular question\r\n function getFeedbackQuestion(feedbackQuestionId) {\r\n\r\n var model = { };\r\n\r\n $.ajax({\r\n url: '/v1/feedback-questions/' + feedbackQuestionId + '?includes=answers&includes=feedback-groups&includes=parent-feedback-groups',\r\n type: 'GET',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data) {\r\n loadFeedbackQuestion(data);\r\n\r\n self.currentPage(\"Question\");\r\n if (self.question().followQuestionId != null) {\r\n self.getFollowUpQuestion();\r\n } else {\r\n self.getFollowUpQuestions();\r\n }\r\n } else {\r\n toastr['error']('An error has occurred', 'Error');\r\n }\r\n },\r\n error: function (error) {\r\n if (error && error.responseJSON && error.responseJSON.modelState) {\r\n // Display model state errors\r\n var modelState = error.responseJSON.modelState;\r\n\r\n for (var key in modelState) {\r\n if (modelState.hasOwnProperty(key)) {\r\n\r\n // Note this work even if lastIndexOf = -1\r\n var prop = key.substr(key.lastIndexOf('.') + 1);\r\n\r\n toastr['warning'](modelState[key], prop);\r\n }\r\n }\r\n }\r\n else if (error && error.responseJSON && error.responseJSON.message) {\r\n // Display generic error\r\n toastr['warning'](error.responseJSON.message, 'Warning');\r\n }\r\n else {\r\n toastr['error']('Please check your internet connection', 'Error');\r\n }\r\n }\r\n })\r\n }\r\n\r\n // For all the answers in the feedback group mark them as feedback given\r\n function markFeedbackGiven(newFeedbackGroupIndex) {\r\n var answers = newFeedbackGroups[newFeedbackGroupIndex].answers;\r\n\r\n for (var i = 0; i < answers.length; i++) {\r\n self.answerIdHashIndex[answers[i].answerId].feedbackGiven(true);\r\n }\r\n }\r\n\r\n // After changing a feedback question status or selecting a group we need to reload the questions.\r\n function reloadFeedbackQuestions() {\r\n // Force reload of active, processed and archived questions.\r\n self.isActiveQuestionsLoaded(false);\r\n self.isProcessedQuestionsLoaded(false);\r\n self.isArchivedQuestionsLoaded(false);\r\n\r\n if (hasher.getHash() === '/' || hasher.getHash() === '') {\r\n loadListPage()\r\n } else {\r\n hasher.setHash('');\r\n }\r\n }\r\n\r\n // Create a new feedback group from the currently selected answers.\r\n function saveFeedbackGroups() {\r\n\r\n // Only save the feedback if some feedback has been written (you cannot just assign \r\n // a follow-up question without feedback).\r\n if (self.feedbackText() === '') {\r\n return;\r\n }\r\n \r\n var answers = self.question().answers;\r\n\r\n newFeedbackGroups.push({});\r\n newFeedbackGroups[newFeedbackGroupIndex].feedback = self.feedbackText();\r\n newFeedbackGroups[newFeedbackGroupIndex].isSetFollowUpQuestion = self.isSetFollowUpQuestion();\r\n\r\n for (var i = 0; i < answers.length; i++) {\r\n if (self.selectedAnswerIds()[answers[i].answerId] == true) {\r\n answers[i].newFeedbackGroupIndex = newFeedbackGroupIndex;\r\n // This changes the feedback from an observable to static text\r\n self.answerIdFeedbacks()[answers[i].answerId] = newFeedbackGroups[newFeedbackGroupIndex].feedback;\r\n }\r\n }\r\n\r\n newFeedbackGroupIndex++;\r\n }\r\n\r\n // Process the feedback question to get the dots. \r\n function loadFeedbackQuestion(data) {\r\n\r\n data.StudentAnswersForDot = [[], [], [], []];\r\n\r\n data.followQuestionId = null;\r\n\r\n // Set the followQuestionId based on any of the feedbackGroups having\r\n // a FollowQuestionId value. TODO Assumes there can only be one FollowQuestionId\r\n // which is incorrect.\r\n for (var i = 0; i < data.feedbackGroups.length; i++) {\r\n\r\n if (data.feedbackGroups[i].followQuestionId != null) {\r\n data.followQuestionId = data.feedbackGroups[i].followQuestionId;\r\n }\r\n }\r\n\r\n // Dictionary mapping AnswerId to the details about that answer.\r\n self.answerIdHashIndex = {};\r\n\r\n // Fix for answerdto object structure change...\r\n data.answers = [];\r\n for (var studentIndex = 0; studentIndex < data.students.length; studentIndex++) {\r\n var answer = data.students[studentIndex].answer;\r\n \r\n if (answer != null) {\r\n answer.feedbackGroupId = null;\r\n answer.firstName = data.students[studentIndex].firstName;\r\n answer.lastName = data.students[studentIndex].lastName;\r\n if (answer.answerFeedback != null) {\r\n answer.feedbackGroupId = answer.answerFeedback.feedbackGroupId;\r\n }\r\n data.answers.push(answer);\r\n } \r\n }\r\n\r\n for (var j = 0; j < data.answers.length; j++) {\r\n \r\n self.answerIdHashIndex[data.answers[j].answerId] = data.answers[j];\r\n\r\n // Add an observable which tracks whether or not a follow-up question has been \r\n // set for this answer.\r\n data.answers[j].isSetFollowUpQuestion = ko.observable(false);\r\n\r\n if (data.answers[j].feedbackGroupId != null) {\r\n // If the answer is in a feedback group get the feedback they have been given,\r\n // whether they have been set a follow-up question and set feedbackGiven to true.\r\n\r\n var result = $.grep(data.feedbackGroups, function (e) {\r\n return e.feedbackGroupId == data.answers[j].feedbackGroupId;\r\n });\r\n\r\n if (result.length == 1) {\r\n var feedbackGroup = result[0];\r\n\r\n self.answerIdFeedbacks()[data.answers[j].answerId] = feedbackGroup.feedback;\r\n data.answers[j].isSetFollowUpQuestion(feedbackGroup.followQuestionId != null);\r\n data.answers[j].feedbackGiven = ko.observable(true);\r\n }\r\n } else {\r\n data.answers[j].feedbackGiven = ko.observable(false);\r\n }\r\n\r\n data.answers[j].displayName = data.answers[j].firstName + \" \" + data.answers[j].lastName;\r\n\r\n data.answers[j].displayNameAndReason = data.answers[j].displayName + \" - \" + data.answers[j].reason;\r\n\r\n // Create a subscription which says if isSetFollowUpQuestion changes \r\n // only change the top level isSetFollowUpQuestion if it does not already\r\n // have this value.\r\n data.answers[j].isSetFollowUpQuestion.subscribe(function (newValue) {\r\n if (self.isSetFollowUpQuestion() != newValue) {\r\n self.isSetFollowUpQuestion(newValue);\r\n }\r\n });\r\n\r\n // Add a copy of the student's answer to the right index in \r\n // StudentAnswersForDot.\r\n data.StudentAnswersForDot[data.answers[j].answerValue - 1].push(data.answers[j]);\r\n }\r\n \r\n var total = data.StudentAnswersForDot[0].length + data.StudentAnswersForDot[1].length + data.StudentAnswersForDot[2].length + data.StudentAnswersForDot[3].length;\r\n\r\n data.percentageA = data.StudentAnswersForDot[0].length / total;\r\n data.percentageB = data.StudentAnswersForDot[1].length / total;\r\n data.percentageC = data.StudentAnswersForDot[2].length / total;\r\n data.percentageD = data.StudentAnswersForDot[3].length / total;\r\n\r\n // We assume the parent feedback question must be the same for all parent feedback\r\n // groups.\r\n if (data.parentFeedbackGroups && data.parentFeedbackGroups.length > 0) {\r\n data.parentFeedbackQuestionId = data.parentFeedbackGroups[0].feedbackQuestionId;\r\n } else {\r\n data.parentFeedbackQuestionId = null; // Must be defined otherwise KO chokes\r\n }\r\n\r\n // Now get the follow-up feedback question. For now we assume the same follow-up \r\n // feedback question for all feedback groups.\r\n if (data.feedbackGroups && data.feedbackGroups.length > 0) {\r\n data.followFeedbackQuestionId = data.feedbackGroups[0].followFeedbackQuestionId;\r\n } else {\r\n data.followFeedbackQuestionId = null; // Must be defined otherwise KO chokes\r\n }\r\n\r\n self.question(data);\r\n\r\n clearNewFeedbackGroups();\r\n }\r\n\r\n function updateQuestionActivePager(page, totalPages) {\r\n\r\n $(\"#questions-active-pager-container\").html('');\r\n $(\"#questions-active-pager-container\").html('');\r\n\r\n $(\"#questions-active-pager\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n\r\n return getActiveQuestions(page, true);\r\n }\r\n });\r\n }\r\n\r\n function updateQuestionProcessedPager(page, totalPages) {\r\n\r\n $(\"#questions-processed-pager-container\").html('');\r\n $(\"#questions-processed-pager-container\").html('');\r\n\r\n $(\"#questions-processed-pager\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n\r\n return getProcessedQuestions(page, true);\r\n }\r\n });\r\n }\r\n\r\n function updateQuestionArchivedPager(page, totalPages) {\r\n\r\n $(\"#questions-archived-pager-container\").html('');\r\n $(\"#questions-archived-pager-container\").html('');\r\n\r\n $(\"#questions-archived-pager\").pagination({\r\n total_pages: totalPages,\r\n current_page: page,\r\n callback: function (event, page) {\r\n event.preventDefault();\r\n\r\n return getArchivedQuestions(page, true);\r\n }\r\n });\r\n }\r\n \r\n // Load the list page (abstract away from route so we can call when the\r\n // page has not changed but we want to reload).\r\n function loadListPage() {\r\n clearFollowUpQuestion();\r\n clearQuestion();\r\n\r\n if (self.isShowArchivedQuestions()) {\r\n if (!self.isArchivedQuestionsLoaded()) {\r\n getArchivedQuestions();\r\n } else {\r\n self.currentPage(\"List\");\r\n }\r\n } else if (self.isShowProcessedQuestions()) {\r\n if (!self.isProcessedQuestionsLoaded()) {\r\n getProcessedQuestions();\r\n } else {\r\n self.currentPage(\"List\");\r\n }\r\n } else {\r\n if (!self.isActiveQuestionsLoaded()) {\r\n getActiveQuestions();\r\n } else {\r\n self.currentPage(\"List\");\r\n }\r\n }\r\n\r\n if (!self.isGroupsLoaded()) {\r\n getGroups();\r\n }\r\n }\r\n\r\n function loadQuestionPage(id) {\r\n clearFollowUpQuestion();\r\n clearQuestion();\r\n getFeedbackQuestion(id);\r\n self.selectedFeedbackQuestionId(id);\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n function initRouter() {\r\n\r\n crossroads.addRoute('/',\r\n function () {\r\n loadListPage();\r\n });\r\n\r\n crossroads.addRoute('/{id}/',\r\n function (id) {\r\n loadQuestionPage(id);\r\n });\r\n\r\n function parseHash(newHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n \r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/groups/create',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n $(function () {\r\n $(\":submit\").click(function () {\r\n ga('send', 'event', 'Classes', 'Classes – Create class');\r\n });\r\n });\r\n \r\n});\n","define('pages/groups/default',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n\r\n \r\n});\n","define('pages/groups/index',['jquery', 'toastr', 'jqueryValidate', 'bootstrap', 'sweetalert'], function ($, toastr) {\r\n\r\n $(function () {\r\n\r\n $('.js-create-class').click(function () {\r\n var self = this;\r\n\r\n var model = {\r\n code: $(self).closest('.js-create-class__group').find('.js-class-code').val()\r\n };\r\n\r\n if (model.code == null || model.code == \"\") {\r\n $('.js-class-code').attr(\"placeholder\", \"Please type in here.\");\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: '/Schools/CreateGroupWithoutSchool',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"You have created class \" + model.code + \".\", \"Success\");\r\n ga('send', 'event', 'Classes', 'Classes – Create class');\r\n location.reload();\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n });\r\n\r\n $('#joinGroup').on('click', function () {\r\n\r\n var self = this;\r\n var model = {\r\n joinCode: $('#groupJoinCode').val()\r\n }\r\n\r\n $.ajax({\r\n url: '/Groups/JoinGroupByJoinCode',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success']('You have joined class ' + data.groupCode, 'Success');\r\n\r\n ga('send', 'event', 'Class', 'Class – Student joins class');\r\n\r\n location.reload();\r\n }\r\n }\r\n })\r\n });\r\n\r\n $('.js-generate-group-join-code').on('click', function () {\r\n \r\n var self = this;\r\n var model = {\r\n groupId: $(self).data('groupid')\r\n }\r\n\r\n $.ajax({\r\n url: '/Groups/GenerateGroupJoinCode',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n $(self).parent().append('
' + data.joinCode + '
');\r\n $(self).hide();\r\n }\r\n }\r\n })\r\n });\r\n\r\n $('#archiveAllMyClasses').on('click', function () {\r\n\r\n $.ajax({\r\n url: '/Groups/ArchiveAllGroups',\r\n type: 'POST',\r\n data: JSON.stringify(null),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success'](\"All classes archived\", 'Success');\r\n location.reload();\r\n }\r\n }\r\n })\r\n });\r\n\r\n $('#archiveAllClasses').on('click', function () {\r\n\r\n $.ajax({\r\n url: '/Groups/ArchiveAllGroupsInSchool',\r\n type: 'POST',\r\n data: JSON.stringify(null),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success'](\"All classes archived\", 'Success');\r\n ga('send', 'event', 'Classes', 'Classes – Archive all classes in school');\r\n location.reload();\r\n }\r\n }\r\n })\r\n });\r\n });\r\n \r\n});\n","define('pages/groups/join',['jquery', 'toastr', 'jqueryValidate', 'bootstrap'], function ($, toastr) {\r\n\r\n $(function () {\r\n $('#joinGroup').on('click', function () {\r\n\r\n var self = this;\r\n var model = {\r\n joinCode: $('#groupJoinCode').val()\r\n }\r\n\r\n $.ajax({\r\n url: '/Groups/JoinGroupByJoinCode',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success']('You have joined class ' + data.groupCode, 'Success');\r\n ga('send', 'event', 'Class', 'Class – Student joins class');\r\n location.reload();\r\n }\r\n }\r\n })\r\n });\r\n });\r\n \r\n});\n","define('pages/home/badges',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n $(function () {\r\n $('[data-toggle=\"tooltip\"]').tooltip();\r\n });\r\n\r\n});\n","define('pages/home/cookies',['jquery', 'knockout', 'crossroads', 'hasher', 'enums', 'bootstrap'], function ($, ko, crossroads, hasher) {\r\n\r\n var self;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Dom Ready\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n affixMenu();\r\n \r\n anchorScroll();\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function affixMenu() {\r\n $('body').scrollspy({ target: '.js-help-nav' });\r\n\r\n $('.js-help-nav').affix({ offset: { top: 265 } });\r\n }\r\n \r\n function anchorScroll() {\r\n $('a[href*=#]:not([href=#])').click(function () {\r\n if (location.pathname.replace(/^\\//, '') == this.pathname.replace(/^\\//, '') && location.hostname == this.hostname) {\r\n var target = $(this.hash);\r\n target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');\r\n if (target.length) {\r\n $('html,body').animate({\r\n scrollTop: target.offset().top\r\n }, 1000);\r\n return false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n \r\n crossroads.addRoute('/{page}/:anchor:',\r\n function (page, anchor) {\r\n if (page in self.pages) {\r\n self.page(self.pages[page]);\r\n\r\n if (anchor) {\r\n scrollToAnchor(anchor);\r\n }\r\n }\r\n });\r\n\r\n // crossroads.routed.add(console.log, console);\r\n\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/home/dashboard',['jquery', 'toastr', 'jqueryValidate', 'bootstrap'], function ($, toastr) {\r\n\r\n $(function () {\r\n\r\n $('[data-toggle=\"tooltip\"]').tooltip({\r\n container: 'body'\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Student Profile Form\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var isStudentProfileIncomplete = $('#isStudentProfileIncomplete').data('isstudentprofileincomplete');\r\n\r\n if (isStudentProfileIncomplete) {\r\n $('#modelFormStudentProfile').modal(null);\r\n\r\n $('#modelFormStudentProfile').on('submit', 'form', function (event) {\r\n\r\n var self = this;\r\n\r\n event.preventDefault();\r\n\r\n var model = {\r\n Gender: $(self).find('input[name=Gender]:checked').val(),\r\n DateOfBirth: $(self).find('input[name=DateOfBirth]').val()\r\n };\r\n\r\n clearErrors();\r\n $(self).find(':input').prop(\"disabled\", true);\r\n\r\n $.ajax({\r\n url: $(this).attr('action'),\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n $(self).find(':input').prop(\"disabled\", false);\r\n if (data.status == 'success') {\r\n $('#modelFormStudentProfile').modal('toggle');\r\n toastr['success']('Thank you! Your profile has been updated.', 'Profile Updated');\r\n }\r\n else {\r\n displayErrors(data.errors);\r\n }\r\n }\r\n });\r\n\r\n return false;\r\n\r\n });\r\n }\r\n\r\n function clearErrors() {\r\n $('.input-validation-error')\r\n .removeClass('input-validation-error');\r\n\r\n $('.field-validation-error')\r\n .remove();\r\n }\r\n\r\n function displayErrors(errors) {\r\n \r\n for (var i = 0; i < errors.length; i++) {\r\n\r\n $('')\r\n .html(errors[i].Value[0])\r\n .appendTo($('#' + errors[i].Key).parent());\r\n\r\n $('#' + errors[i].Key)\r\n .addClass('input-validation-error');\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Streams\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.addStreamToOrder = function (streamId) {\r\n\r\n $.ajax({\r\n url: '/Orders/CreateOrderStream',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n document.location.href = \"/Orders#/Basket/\";\r\n }\r\n else {\r\n toastr['info']('Please sign up for free then you can purchase streams', 'Login');\r\n }\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Popup Survey\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var isPopSurvey = $('#isPopSurvey').data('ispopsurvey');\r\n\r\n if (isPopSurvey) {\r\n $('#myModal').modal(null);\r\n\r\n $('#takeSurvey').on('click', function () {\r\n $.ajax({\r\n url: '/Home/FinishSurvey',\r\n type: 'POST',\r\n datatype: 'json',\r\n processData: false,\r\n success: function (data) {\r\n\r\n }\r\n });\r\n $('#myModal').modal('toggle');\r\n return true;\r\n });\r\n\r\n $('#dismissSurvey').on('click', function () {\r\n\r\n $.ajax({\r\n url: '/Home/DismissSurvey',\r\n type: 'POST',\r\n datatype: 'json',\r\n processData: false,\r\n success: function (data) {\r\n\r\n }\r\n });\r\n });\r\n }\r\n \r\n $('.js-email-verify').click(function () {\r\n $('.js-email-verify-div').hide();\r\n $.ajax({\r\n url: '/Account/SendVerifyEmail',\r\n type: 'POST',\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"An verification email has been sent to \" + data.email + \".\", \"Success\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n });\r\n \r\n $('#joinGroup').on('click', function () {\r\n\r\n var self = this;\r\n var model = {\r\n joinCode: $('#groupJoinCode').val()\r\n }\r\n\r\n $.ajax({\r\n url: '/Groups/JoinGroupByJoinCode',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success']('You have joined class ' + data.groupCode, 'Success');\r\n ga('send', 'event', 'Class', 'Class – Student joins class');\r\n\r\n location.reload();\r\n }\r\n }\r\n })\r\n });\r\n\r\n $('#hideDemo').on('click', function () {\r\n\r\n $.ajax({\r\n url: '/Account/HideDemo',\r\n type: 'POST',\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success']('Hide demo class.', 'Success');\r\n location.reload(true);\r\n }\r\n }\r\n })\r\n });\r\n \r\n $('.js-join-school').on('click', function () {\r\n\r\n var self = this;\r\n var model = {\r\n joinCode: $('.js-school-code').val()\r\n }\r\n\r\n $.ajax({\r\n url: '/Schools/JoinSchoolByJoinCode',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n toastr['success']('You have joined school ' + data.schoolName, 'Success');\r\n location.reload();\r\n }\r\n }\r\n })\r\n });\r\n \r\n\r\n $('.js-generate-group-join-code').on('click', function (event) {\r\n\r\n event.preventDefault();\r\n\r\n var self = this;\r\n var model = {\r\n groupId: $(self).data('groupid')\r\n }\r\n\r\n $.ajax({\r\n url: '/Groups/GenerateGroupJoinCode',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n async: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status != 'success') {\r\n toastr['error'](data.status, 'Error');\r\n } else {\r\n $(self).parent().prepend('' + data.joinCode + '');\r\n $(self).hide();\r\n }\r\n }\r\n })\r\n\r\n });\r\n\r\n\r\n });\r\n\r\n});\n","define('pages/home/default',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n});\n","define('pages/home/feedback',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n $('.process-feedback').click(function (event) {\r\n\r\n event.preventDefault();\r\n\r\n var self = this;\r\n\r\n var viewModel = {\r\n feedbackId: $(self).data('feedbackid')\r\n };\r\n\r\n if ($(self).hasClass(\"btn-success\")) {\r\n\r\n $.ajax({\r\n url: $(this).data('remove'),\r\n type: 'POST',\r\n data: JSON.stringify(viewModel),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (message) {\r\n $(self).removeClass(\"btn-success\");\r\n $(self).addClass(\"btn-primary\");\r\n $(self).prop(\"title\", \"Set Processed\");\r\n\r\n }\r\n });\r\n\r\n } else {\r\n\r\n $.ajax({\r\n url: $(this).data('add'),\r\n type: 'POST',\r\n data: JSON.stringify(viewModel),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (message) {\r\n // Make the button active\r\n $(self).removeClass(\"btn-primary\");\r\n $(self).addClass(\"btn-success\");\r\n $(self).prop(\"title\", \"Set Unprocessed\");\r\n\r\n }\r\n });\r\n\r\n }\r\n\r\n });\r\n });\r\n\r\n});\n","define('pages/home/halloffame',['jquery', 'jqueryValidate', 'bootstrap'], function ($) {\r\n\r\n $(function () {\r\n\r\n $(\".js-filter-by\").change(function () {\r\n document.location = this.value;\r\n });\r\n\r\n });\r\n\r\n});\n","define('pages/home/index',['jquery', 'knockout', 'toastr', 'enums', 'moment', 'bootstrap'], function ($, ko, toastr, enums, moment) {\r\n\r\n var self,\r\n numSlides = 6;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n $(window).on('resize', resizeSvgs);\r\n\r\n resizeSvgs();\r\n\r\n })\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.toggle = {\r\n init: function (element, valueAccessor) {\r\n ko.utils.registerEventHandler(element, 'click', function (event) {\r\n var toggleValue = valueAccessor();\r\n toggleValue(!toggleValue());\r\n if (event.preventDefault)\r\n event.preventDefault();\r\n event.returnValue = false;\r\n });\r\n },\r\n update: function (element, valueAccessor) {\r\n var toggleValue = ko.unwrap(valueAccessor());\r\n ko.utils.toggleDomNodeCssClass(element, 'active', toggleValue);\r\n }\r\n };\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function HomeIndexViewModel() {\r\n self = this;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.pages = new enums.Enum(\"questions\", \"quizzes\");\r\n self.page = ko.observable(self.pages.questions);\r\n\r\n self.slide = ko.observable(0);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new HomeIndexViewModel());\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.setPage = function (value) {\r\n this.page(value);\r\n }\r\n\r\n self.nextSlide = function () {\r\n var nextSlide = (this.slide() + 1) % numSlides;\r\n this.slide(nextSlide);\r\n }\r\n\r\n self.prevSlide = function() {\r\n var prevSlide = (this.slide() + numSlides - 1) % numSlides;\r\n this.slide(prevSlide);\r\n };\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function resizeSvgs() {\r\n\r\n $('.svg-container').innerWidth();\r\n \r\n\r\n\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n});\n","define('pages/home/learn',['jquery', 'knockout', 'crossroads', 'hasher', 'pdfobject', 'enums', 'bootstrap', 'lazysizes'], function ($, ko, crossroads, hasher, PDFObject) {\r\n\r\n var self, isGuidesLoaded = false;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Dom Ready\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n affixMenu();\r\n ga('send', 'event', 'Help', 'Help – View help documents');\r\n\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function HomeLearnViewModel() {\r\n self = this;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.pages = new enums.Enum('about', 'help', 'guides', 'videos');\r\n self.page = ko.observable(self.pages.about);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new HomeLearnViewModel());\r\n\r\n initRouter();\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.setPage = function (page) {\r\n hasher.setHash(page.name);\r\n\r\n }\r\n\r\n self.setAnchor = function (anchor) {\r\n hasher.setHash(self.page().name, anchor);\r\n }\r\n\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function affixMenu() {\r\n $('body').scrollspy({ target: '.js-help-nav' });\r\n\r\n $('.js-help-nav').affix({ offset: { top: 368 } });\r\n }\r\n \r\n function scrollToAnchor(anchor) {\r\n var target = $('#' + anchor);\r\n if (target.length) {\r\n $('.wrap').animate({\r\n scrollTop: target.offset().top\r\n }, 1000);\r\n }\r\n }\r\n\r\n function loadGuides() {\r\n \r\n if (!isGuidesLoaded) {\r\n PDFObject.embed(\"/Uploads/SchemeOfWorkWalkthrough.pdf\", \"#guideSOW\");\r\n PDFObject.embed(\"/Uploads/DiagnosticQuestionsFAQ.pdf\", \"#guideGettingStarted\");\r\n isGuidesLoaded = true;\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n \r\n crossroads.addRoute('/{page}/:anchor:',\r\n function (page, anchor) {\r\n if (page in self.pages) {\r\n self.page(self.pages[page]);\r\n\r\n if (anchor) {\r\n scrollToAnchor(anchor);\r\n }\r\n\r\n if (self.page() == self.pages.guides) { \r\n loadGuides();\r\n }\r\n }\r\n });\r\n\r\n //crossroads.routed.add(console.log, console);\r\n\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/home/sowlanding',['jquery'], function ($, ko) {\r\n\r\n var colorsBgk = [\"#FFFFFF\", \"#f1f1f1\"];\r\n var colors = [\"#EF473E\", \"#FFCE00\", \"#42B977\", \"#F68D2A\", \"#53C9E9\", \"#0070BA\"];\r\n var length = [\"7%\", \"14%\", \"21%\", \"28%\", \"35%\", \"42%\", \"49%\", \"58%\"];\r\n var myDivs = [];\r\n var cW = [];\r\n var cX = [];\r\n var nW = [];\r\n var nX = [];\r\n\r\n \r\n\r\n $(document).ready(function () {\r\n\r\n\r\n assignColors();\r\n newValues();\r\n\r\n $(window).scroll(function () {\r\n\r\n var sT = $(window).scrollTop();\r\n var hDocs = $(document).height() - $(window).height();\r\n var rangeCol = hDocs / colorsBgk.length;\r\n\r\n\r\n\r\n if ($(window).width() > 380) {\r\n if (sT < rangeCol * 1 && sT > -600) {\r\n $(\"body\").css(\"background-color\", colorsBgk[0]);\r\n }\r\n else {\r\n $(\"body\").css(\"background-color\", colorsBgk[1]);\r\n }\r\n }\r\n\r\n for (var i = 0; i < 8; i++) {\r\n var target = myDivs[i];\r\n\r\n var setW = cW[i] - nW[i];\r\n var setY = cX[i] - nX[i];\r\n\r\n var newW = cW[i] - ((sT * setW) / hDocs);\r\n var newX = cX[i] - ((sT * setY) / hDocs);\r\n\r\n target.css(\"width\", newW);\r\n target.css(\"-ms-transform\", \"translateX(\" + newX + \"px)\");\r\n target.css(\"-webkit-transform\", \"translateX(\" + newX + \"px)\");\r\n target.css(\"transform\", \"translateX(\" + newX + \"px)\");\r\n }\r\n\r\n });\r\n\r\n setInterval(function () {\r\n\r\n changeColor();\r\n\r\n }, 2000);\r\n\r\n });\r\n\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }\r\n\r\n\r\n function assignColors() {\r\n for (var i = 0; i < 8; i++) {\r\n var myNum = getRandomInt(1, 6);\r\n var myRdnLg = getRandomInt(1, 8);\r\n var counter = i + 1;\r\n var assingedColor = colors[myNum];\r\n\r\n var assingedLength = Math.floor($(window).width() / (getRandomInt(2, 5)));\r\n var diffMax = $(window).width() - assingedLength - 10;\r\n var assignedPosX = getRandomInt(0, diffMax);\r\n\r\n var target = $(\"#bar-\" + counter);\r\n\r\n\r\n target.css(\"background-color\", assingedColor);\r\n target.css(\"width\", assingedLength);\r\n\r\n target.css(\"-ms-transform\", \"translateX(\" + assignedPosX + \"px)\");\r\n target.css(\"-webkit-transform\", \"translateX(\" + assignedPosX + \"px)\");\r\n target.css(\"transform\", \"translateX(\" + assignedPosX + \"px)\");\r\n //target.css(\"z-index\",10-i);\r\n\r\n myDivs.push(target);\r\n cW.push(assingedLength);\r\n cX.push(assignedPosX);\r\n\r\n }\r\n }\r\n\r\n function changeColor() {\r\n for (var i = 0; i < myDivs.length; i++) {\r\n var target = myDivs[i];\r\n var assingedColor = colors[getRandomInt(1, 6)];\r\n target.css(\"background-color\", assingedColor);\r\n }\r\n }\r\n\r\n function newValues() {\r\n for (var i = 0; i < myDivs.length; i++) {\r\n var target = myDivs[i];\r\n var newW = Math.floor($(window).width() / (getRandomInt(2, 5)));\r\n var newdiffMax = $(window).width() - newW - 10;\r\n var newPosX = getRandomInt(0, newdiffMax);\r\n\r\n nW.push(newW);\r\n nX.push(newPosX);\r\n }\r\n }\r\n\r\n /*\r\n for(var i = 0; i 0;\r\n });\r\n\r\n addPageFunctions();\r\n }\r\n\r\n function addPageFunctions() {\r\n \r\n self.confirmOrder = function () {\r\n\r\n confirmOrder(this);\r\n }\r\n\r\n self.totalInPence = function () {\r\n var totalInPence = 0;\r\n self.orderProducts().forEach(function(orderProduct){\r\n totalInPence = totalInPence + orderProduct.lineTotalInPence();\r\n });\r\n return totalInPence;\r\n }\r\n\r\n self.penceToPounds = function (pence) {\r\n return penceToPounds(pence);\r\n }\r\n\r\n self.isNullOrWhiteSpace = function (str) {\r\n return isNullOrWhiteSpace(str);\r\n }\r\n\r\n self.deleteProduct = function () {\r\n var product = this;\r\n\r\n var model = {};\r\n\r\n model.orderProductId = product.OrderProductId;\r\n\r\n $.ajax({\r\n url: '/Orders/DeleteOrderProduct',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Product deleted\", \"Success\");\r\n self.orderProducts.remove(product);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n ko.applyBindings(new BasketViewModel());\r\n \r\n function penceToPounds(pence) {\r\n var pounds;\r\n pence = pence.toString();\r\n if (pence.length == 1)\r\n {\r\n pounds = '0.0' + pence;\r\n }\r\n else if (pence.length == 2)\r\n {\r\n pounds = '0.' + pence;\r\n }\r\n else\r\n {\r\n pounds = pence.substring(0, pence.length - 2) + '.' + pence.substring(pence.length - 2, pence.length);\r\n }\r\n \r\n return pounds;\r\n }\r\n\r\n function confirmOrder(order) {\r\n\r\n //check if exist empty product\r\n\r\n for (var i = 0; i < self.orderProducts().length; i++)\r\n {\r\n if (self.orderProducts()[i].Quantity() <= 0)\r\n {\r\n toastr[\"warning\"](\"The quantity of product '\" + self.orderProducts()[i].Name + \"' is 0, please specify the quantity or delete the product.\", \"Warning\");\r\n return;\r\n }\r\n }\r\n\r\n self.isConfirming(true);\r\n\r\n var model = {};\r\n\r\n model.orderProducts = order.orderProducts().map(function (orderProduct) {\r\n return {\r\n orderProductId: orderProduct.OrderProductId,\r\n quantity: orderProduct.Quantity(),\r\n groupIds: orderProduct.chosenClasses().map(function (chosenClass) {\r\n return chosenClass.GroupId;\r\n })\r\n }\r\n });\r\n \r\n $.ajax({\r\n url: '/Orders/ConfirmOrder',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Order confirmed\", \"Success\");\r\n\r\n self.isInvoiceSent(true);\r\n $('.js-chosen-classes').trigger('chosen:updated');\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n self.isConfirming(false);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function isNullOrWhiteSpace(str) {\r\n return str === null || !/\\S/.test(str);\r\n }\r\n \r\n});\n","define('pages/orders/index',['jquery', 'knockout', 'crossroads', 'hasher', 'toastr', 'moment', 'jqueryValidate', 'bootstrap', 'chosen', 'checkout', 'knockoutValidation'], function ($, ko, crossroads, hasher, toastr, moment) {\r\n\r\n var ClassInsightPriceInPence = 2000,\r\n DepartmentPriceInPence = 3000,\r\n ClassInsightAndDepartmentPriceInPence = 5000;\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.chosen = {\r\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var $element = $(element);\r\n var options = ko.unwrap(valueAccessor());\r\n\r\n if (typeof options === 'object')\r\n $element.chosen(options);\r\n\r\n ['options', 'selectedOptions'].forEach(function (propName) {\r\n if (allBindings.has(propName)) {\r\n var prop = allBindings.get(propName);\r\n if (ko.isObservable(prop)) {\r\n prop.subscribe(function () {\r\n $element.trigger('chosen:updated');\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n\r\n function OrdersViewModel() {\r\n\r\n self = this;\r\n\r\n ko.validation.init({\r\n decorateInputElement: true,\r\n errorElementClass: 'input-validation-error',\r\n errorMessageClass: 'field-validation-error',\r\n insertMessages: true\r\n });\r\n\r\n self.testLink = ko.observable(\"\");\r\n\r\n self.currentPage = ko.observable(\"\");\r\n self.isAdmin = ko.observable(false);\r\n self.editable = ko.observable(false);\r\n self.allowAnonymous = false;\r\n self.hasDataProduct = ko.observable(false);\r\n //\r\n // this does not work because we need to run this AFTER the auto subscribing but it's not \r\n // so I run it manually each time we change this editable()\r\n //\r\n // self.editable.subscribe(function (newValue) {\r\n // $('.js-chosen-classes').trigger('chosen:updated');\r\n // });\r\n\r\n self.isPayingBy = ko.observable(\"\");\r\n\r\n self.orderReference = ko.observable(\"\");\r\n self.additionalEmail = ko.observable(\"\").extend({ email: true });\r\n\r\n //\r\n // order list\r\n //\r\n\r\n self.selectedOrderStatus = ko.observable(\"Active\");\r\n self.orders = ko.observableArray([]);\r\n\r\n //\r\n //order details\r\n //\r\n\r\n self.orderId = ko.observable();\r\n self.orderProducts = ko.observableArray([]);\r\n \r\n self.availableClasses = ko.observableArray();\r\n self.isConfirming = ko.observable(false);\r\n self.orderStatus = ko.observable();\r\n\r\n // order filter\r\n\r\n self.orderFilterChoices = [\r\n { name: \"All\", value: \"All\" },\r\n { name: \"Active\", value: \"Active\" },\r\n { name: \"Placed\", value: \"Placed\" },\r\n { name: \"Invoice Sent\", value: \"Invoiced\" },\r\n { name: \"Paid\", value: \"Paid\" },\r\n { name: \"Cancelled\", value: \"Cancelled\" }\r\n ];\r\n\r\n \r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.canConfirm = ko.pureComputed(function () {\r\n return !self.isConfirming() && !isNullOrWhiteSpace(self.user.Email) && self.orderProducts().length > 0;\r\n });\r\n\r\n authorize();\r\n\r\n self.orderFilter = ko.observable(self.isAdmin() ? self.orderFilterChoices[2] : self.orderFilterChoices[0]);\r\n self.orderFilter.subscribe(function (newValue) {\r\n getAllOrders();\r\n });\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new OrdersViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n \r\n self.confirmOrder = function () {\r\n confirmOrder(this);\r\n }\r\n\r\n self.checkOut = function () {\r\n checkOut(this);\r\n }\r\n\r\n\r\n self.payByInvoice = function () {\r\n self.isPayingBy(\"Invoice\");\r\n }\r\n\r\n self.sendInvoice = function () {\r\n sendInvoice();\r\n }\r\n\r\n self.cancelSendInvoice = function () {\r\n self.isPayingBy(\"\");\r\n }\r\n\r\n self.sendPay = function () {\r\n toastr[\"warning\"](\"Done nothing\", \"warning\");\r\n }\r\n\r\n self.assignNow = function (orderProduct) {\r\n if (orderProduct.ProductType == 3) { // class insight\r\n window.location.href = \"/Licences/Assign\";\r\n } else if (orderProduct.QuizId != null) {\r\n window.location.href = \"/Assignments/Create?QuizId=\" + orderProduct.QuizId;\r\n } else if (orderProduct.StreamId != null) {\r\n window.location.href = \"/Streams/Assign?StreamId=\" + orderProduct.StreamId;\r\n }\r\n }\r\n\r\n self.buyMore = function (orderProduct) {\r\n if (orderProduct.QuizId != null) {\r\n buyPremiumQuiz(orderProduct.QuizId);\r\n } else {\r\n buyStream(orderProduct.StreamId);\r\n }\r\n }\r\n\r\n self.purchaseBox = function () {\r\n \r\n var handler = StripeCheckout.configure({\r\n key: 'pk_live_oKAeEk1A7hKbFZy4q87oQkRN',\r\n image: '/Images/dq-logo-for-stripe-128px.png',\r\n token: function (token) {\r\n // Use the token to create the charge with a server-side script.\r\n // You can access the token ID with `token.id`\r\n payViaStripe(token.id);\r\n }\r\n });\r\n\r\n // Open Checkout\r\n handler.open({\r\n name: 'Diagnostic Questions',\r\n currency: 'GBP',\r\n email: self.user.Email,\r\n amount: self.totalInPence()\r\n });\r\n }\r\n\r\n self.createTransaction = function () {\r\n createTransaction();\r\n }\r\n\r\n self.totalInPence = function () {\r\n var totalInPence = 0;\r\n self.orderProducts().forEach(function(orderProduct){\r\n totalInPence = totalInPence + orderProduct.lineTotalInPence();\r\n });\r\n return totalInPence;\r\n }\r\n\r\n self.penceToPounds = function (pence) {\r\n return penceToPounds(pence);\r\n }\r\n\r\n self.isNullOrWhiteSpace = function (str) {\r\n return isNullOrWhiteSpace(str);\r\n }\r\n\r\n self.deleteProduct = function () {\r\n var product = this;\r\n\r\n var model = {};\r\n\r\n model.orderProductId = product.OrderProductId;\r\n\r\n $.ajax({\r\n url: '/Orders/DeleteOrderProduct',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Product deleted\", \"Success\");\r\n self.orderProducts.remove(product);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n self.testReferrer = function () {\r\n $.ajax({\r\n url: '/Account/InviteTeacher',\r\n type: 'POST',\r\n datatype: 'json',\r\n async: false,\r\n success: function (data) {\r\n toastr[\"success\"](data, \"Success\");\r\n self.testLink('diagnosticquestions.com/Account/Register?ReferrerKey=' + data);\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n \r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n\r\n function authorize() {\r\n $.ajax({\r\n url: '/Account/Authorize',\r\n type: 'POST',\r\n datatype: 'json',\r\n async: false,\r\n success: function (data) {\r\n self.isAuthenticated = data.isAuthenticated;\r\n self.isAdmin($.inArray('Admin', data.roles) >= 0);\r\n }\r\n });\r\n }\r\n\r\n function createTransaction() {\r\n var model = {\r\n TransactionType: \"Check\",\r\n OrderId: self.orderId(),\r\n AmountInPence: self.totalInPence()\r\n };\r\n\r\n self.isConfirming(true);\r\n\r\n $.ajax({\r\n url: '/Licences/CreateTransaction',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Transaction created!\", \"Success\");\r\n self.orderStatus(\"Paid\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n self.isConfirming(false);\r\n }\r\n\r\n }\r\n });\r\n }\r\n\r\n function payViaStripe(token) {\r\n var model = {\r\n token: token,\r\n orderId: self.orderId(),\r\n totalInPence: self.totalInPence()\r\n };\r\n\r\n self.isConfirming(true);\r\n\r\n $.ajax({\r\n url: '/Orders/PayViaStripe',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Product purchased!\", \"Success\");\r\n self.orderStatus(\"Paid\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n self.isConfirming(false);\r\n }\r\n\r\n }\r\n });\r\n }\r\n\r\n function getAllOrders() {\r\n var model = {\r\n isFiltered: self.orderFilter().value != 'All',\r\n\r\n };\r\n model.statusFilter = model.isFiltered ? self.orderFilter().value : 0;\r\n\r\n $.ajax({\r\n url: '/Orders/GetAllOrders',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n self.orders(parseDate(data.orders));\r\n self.currentPage(\"All\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getBasket() {\r\n $.ajax({\r\n url: '/Orders/GetBasket',\r\n type: 'POST',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n loadOrderDetails(data.model);\r\n\r\n self.currentPage(\"Basket\");\r\n setEditable(true);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getOrderDetails(orderId) {\r\n\r\n var model = { orderId: orderId };\r\n\r\n $.ajax({\r\n url: '/Orders/GetOrderDetails',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n loadOrderDetails(data.model);\r\n self.currentPage(\"Details\");\r\n if (self.orderStatus() == 'Active') {\r\n setEditable(true);\r\n }\r\n else {\r\n setEditable(false);\r\n }\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getOrderByKey(key) {\r\n\r\n var model = { key: key };\r\n\r\n $.ajax({\r\n url: '/Orders/GetOrderByKey',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n self.allowAnonymous = true;\r\n hasher.replaceHash('Details/' + data.orderId);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function parseDate(orders) {\r\n for (var i = 0; i < orders.length; i++) {\r\n orders[i].DatePlaced = orders[i].DatePlaced == null ? null : moment(orders[i].DatePlaced).format('DD MMM YYYY');\r\n }\r\n return orders;\r\n }\r\n\r\n function loadOrderDetails(model) {\r\n self.orderId(model.OrderId);\r\n self.school = model.School;\r\n self.user = model.User;\r\n\r\n if (isNullOrWhiteSpace(self.user.FirstName) || isNullOrWhiteSpace(self.user.LastName)) {\r\n self.user.DisplayName = self.user.UserName;\r\n }\r\n else {\r\n self.user.DisplayName = self.user.FirstName + ' ' + self.user.LastName;\r\n }\r\n\r\n self.availableClasses(model.Groups);\r\n\r\n self.orderProducts([]);\r\n\r\n model.OrderProducts.forEach(function (orderProduct) {\r\n\r\n \r\n\r\n orderProduct.chosenClasses = ko.observableArray([]);\r\n\r\n orderProduct.chosenClasses.subscribe(function (newValue) {\r\n var quantity = 0;\r\n newValue.forEach(function (selectedClass) {\r\n quantity = quantity + selectedClass.StudentsCount;\r\n });\r\n orderProduct.Quantity(quantity);\r\n });\r\n \r\n var quantity = orderProduct.Quantity;\r\n\r\n orderProduct.PriceInPence = ko.observable(orderProduct.PriceInPence);\r\n orderProduct.Quantity = ko.observable(1);\r\n orderProduct.lineTotalInPence = ko.pureComputed(function () {\r\n return orderProduct.PriceInPence() * orderProduct.Quantity();\r\n });\r\n\r\n\r\n //find the chosen classed from the groupIds\r\n\r\n for (var i = 0; i < orderProduct.GroupIds.length; i++) {\r\n for (var j = 0; j < model.Groups.length; j++) {\r\n if (orderProduct.GroupIds[i] == model.Groups[j].GroupId) {\r\n orderProduct.chosenClasses.push(model.Groups[j]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n if (orderProduct.ProductType == 3) {\r\n self.hasDataProduct(true);\r\n orderProduct.Title = '(Per Teacher)';\r\n if (model.OrderStatus == 'Active') {\r\n orderProduct.PriceInPence(ClassInsightPriceInPence);\r\n }\r\n\r\n } else if (orderProduct.ProductType == 4) {\r\n self.hasDataProduct(true);\r\n orderProduct.Title = '(Per Teacher)';\r\n if (model.OrderStatus == 'Active') {\r\n orderProduct.PriceInPence(ClassInsightAndDepartmentPriceInPence);\r\n }\r\n } else {\r\n orderProduct.Title = '(Per Student)';\r\n }\r\n\r\n \r\n orderProduct.Quantity(quantity);\r\n\r\n self.orderProducts.push(orderProduct);\r\n });\r\n\r\n self.isConfirming(false);\r\n self.orderStatus(model.OrderStatus);\r\n self.additionalEmail(model.AdditionalEmail);\r\n self.orderReference(model.Reference);\r\n\r\n self.isPayingBy(\"\");\r\n }\r\n\r\n function penceToPounds(pence) {\r\n var pounds;\r\n pence = pence.toString();\r\n if (pence.length == 1)\r\n {\r\n pounds = '0.0' + pence;\r\n }\r\n else if (pence.length == 2)\r\n {\r\n pounds = '0.' + pence;\r\n }\r\n else\r\n {\r\n pounds = pence.substring(0, pence.length - 2) + '.' + pence.substring(pence.length - 2, pence.length);\r\n }\r\n \r\n return pounds;\r\n }\r\n\r\n function sendInvoice() {\r\n var model = {\r\n orderId: self.orderId(),\r\n additionalEmail : self.additionalEmail(),\r\n reference: self.orderReference()\r\n };\r\n self.isConfirming(true);\r\n\r\n $.ajax({\r\n url: '/Orders/SendInvoice',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Invoice Sent\", \"Success\");\r\n self.orderStatus(\"Invoiced\");\r\n self.isPayingBy(\"\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n self.isConfirming(false);\r\n }\r\n });\r\n }\r\n\r\n function checkOut(order) {\r\n\r\n //check if exist invalid quantity product\r\n\r\n for (var i = 0; i < self.orderProducts().length; i++)\r\n {\r\n if (self.orderProducts()[i].Quantity() == \"\") {\r\n self.orderProducts()[i].Quantity(0);\r\n }\r\n if (isNaN(self.orderProducts()[i].Quantity()))\r\n {\r\n toastr[\"warning\"](\"The quantity of product '\" + self.orderProducts()[i].Name + \"' is invalid, please specify the quantity.\", \"Warning\");\r\n return;\r\n }\r\n }\r\n\r\n self.isConfirming(true);\r\n\r\n var model = {};\r\n\r\n \r\n // update the quantity for teach package. (teach + collaborate)\r\n\r\n var teach, collaborate;\r\n for (var i = 0; i < order.orderProducts().length; i++) {\r\n if (order.orderProducts()[i].ProductType == 3) {\r\n teach = order.orderProducts()[i];\r\n } else if (order.orderProducts()[i].ProductType == 4) {\r\n collaborate = order.orderProducts()[i];\r\n }\r\n }\r\n var teachQuantity = parseInt(teach.Quantity()) + parseInt(collaborate.Quantity());\r\n \r\n model.orderProducts = order.orderProducts().map(function (orderProduct) {\r\n return {\r\n orderProductId: orderProduct.OrderProductId,\r\n quantity: orderProduct.ProductType == 3 ? teachQuantity : orderProduct.Quantity(),\r\n priceInPence: orderProduct.ProductType == 4 ? DepartmentPriceInPence : orderProduct.PriceInPence(),\r\n groupIds: orderProduct.chosenClasses().map(function (chosenClass) {\r\n return chosenClass.GroupId;\r\n })\r\n }\r\n });\r\n\r\n\r\n $.ajax({\r\n url: '/Orders/CheckOut',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Order placed\", \"Success\");\r\n self.orderStatus(\"Placed\");\r\n setEditable(false);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\"); \r\n }\r\n self.isConfirming(false);\r\n }\r\n });\r\n }\r\n\r\n function setEditable(newValue)\r\n {\r\n self.editable(newValue);\r\n $('.js-chosen-classes').trigger('chosen:updated');\r\n }\r\n\r\n function buyPremiumQuiz(quizId) {\r\n var model = {\r\n quizId: quizId,\r\n quantity: 1\r\n };\r\n $.ajax({\r\n url: '/Orders/CreateOrderQuiz',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n document.location.href = \"/Orders#/Basket/\";\r\n }\r\n else {\r\n toastr['error'](data.status, 'Error');\r\n }\r\n\r\n\r\n }\r\n });\r\n }\r\n\r\n function buyStream (streamId) {\r\n\r\n var model = {\r\n streamId: streamId,\r\n quantity: 1\r\n };\r\n\r\n $.ajax({\r\n url: '/Orders/CreateOrderStream',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n document.location.href = \"/Orders#/Basket/\";\r\n }\r\n else {\r\n toastr['info']('Please sign up for free then you can purchase streams', 'Login');\r\n }\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function isNullOrWhiteSpace(str) {\r\n return str === null || !/\\S/.test(str);\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n function initRouter() {\r\n\r\n crossroads.addRoute('/All/',\r\n function () {\r\n if (!self.isAuthenticated) {\r\n //get out\r\n document.location = '/Account/Login';\r\n return;\r\n }\r\n getAllOrders();\r\n });\r\n\r\n crossroads.addRoute('/Basket/',\r\n function () {\r\n if (!self.isAuthenticated) {\r\n //get out\r\n document.location = '/Account/Login';\r\n return;\r\n }\r\n getBasket();\r\n });\r\n\r\n crossroads.addRoute('/Details/{id}/',\r\n function (id) {\r\n if (!self.isAuthenticated && !self.allowAnonymous) {\r\n document.location = '/Account/Login';\r\n return;\r\n }\r\n getOrderDetails(id);\r\n });\r\n\r\n crossroads.addRoute('/Key/{key}/',\r\n function (key) {\r\n getOrderByKey(key);\r\n });\r\n\r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash); \r\n hasher.changed.add(parseHash); \r\n hasher.init(); \r\n }\r\n \r\n});\n","define('pages/orders/pricePreview',['jquery', 'knockout', 'crossroads', 'hasher', 'toastr', 'jqueryValidate', 'bootstrap', 'chosen', 'moment', 'checkout', 'knockoutValidation'], function ($, ko, crossroads, hasher, toastr) {\r\n\r\n var ClassInsightPriceInPence = 2000,\r\n DepartmentPriceInPence = 3000,\r\n ClassInsightAndDepartmentPriceInPence = 5000;\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n var self;\r\n\r\n function OrdersViewModel() {\r\n\r\n self = this;\r\n\r\n self.TeachQuantity = ko.observable(5);\r\n self.CollaborateQuantity = ko.observable(1);\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.TotalInPence = ko.pureComputed(function () {\r\n return self.TeachQuantity() * ClassInsightPriceInPence + self.CollaborateQuantity() * ClassInsightAndDepartmentPriceInPence;\r\n });\r\n\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new OrdersViewModel());\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n \r\n self.penceToPounds = function (pence) {\r\n return penceToPounds(pence);\r\n }\r\n\r\n }\r\n\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n\r\n function penceToPounds(pence) {\r\n var pounds;\r\n pence = pence.toString();\r\n if (pence.length == 1)\r\n {\r\n pounds = '0.0' + pence;\r\n }\r\n else if (pence.length == 2)\r\n {\r\n pounds = '0.' + pence;\r\n }\r\n else\r\n {\r\n pounds = pence.substring(0, pence.length - 2) + '.' + pence.substring(pence.length - 2, pence.length);\r\n }\r\n \r\n return pounds;\r\n }\r\n\r\n \r\n});\n","define('pages/products/index',['jquery', 'knockout', 'toastr', 'sweetalert', 'bootstrap', 'knockoutValidation'], function ($, ko, toastr) {\r\n\r\n $(function () {\r\n\r\n });\r\n\r\n var self;\r\n\r\n function ProductIndexViewModel() {\r\n\r\n self = this;\r\n\r\n self.productTypes = [\r\n { name: \"Premium Quiz\", value: \"Quiz\" },\r\n { name: \"Stream\", value: \"Stream\" }\r\n ];\r\n\r\n ko.validation.init({\r\n decorateInputElement: true,\r\n errorElementClass: 'input-validation-error',\r\n errorMessageClass: 'field-validation-error',\r\n insertMessages: true\r\n });\r\n\r\n self.productType = ko.observable(self.productTypes[0]);\r\n\r\n self.quizzes = ko.observable([]);\r\n self.quiz = ko.observable();\r\n\r\n self.streams = ko.observable([]);\r\n self.stream = ko.observable();\r\n\r\n self.priceInPounds = ko.observable().extend({ number: true });\r\n\r\n self.products = ko.observableArray([]);\r\n\r\n init();\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new ProductIndexViewModel);\r\n\r\n function init() {\r\n getQuizList();\r\n getStreamList();\r\n getProductsList();\r\n }\r\n function addPageFunctions() {\r\n self.edit = function () {\r\n this.Editing(true);\r\n }\r\n\r\n self.confirm = function () {\r\n this.Editing(false);\r\n changePrice(this);\r\n }\r\n\r\n self.deleteProduct = function () {\r\n var that = this;\r\n swal(\r\n {\r\n title: \"Are you sure?\",\r\n text: \"This will delete this product.\",\r\n type: \"warning\",\r\n showCancelButton: true,\r\n confirmButtonClass: \"btn-danger\",\r\n confirmButtonText: \"Yes, delete!\",\r\n cancelButtonText: \"No, keep it.\",\r\n closeOnConfirm: true\r\n },\r\n function (isConfirm) {\r\n if (isConfirm) {\r\n deleteProduct(that);\r\n }\r\n }\r\n );\r\n }\r\n\r\n self.createProduct = function () {\r\n var model =\r\n {\r\n productType: self.productType().value,\r\n priceInPence: self.priceInPounds() * 100\r\n };\r\n\r\n var productSummaryViewModel =\r\n {\r\n ProductType: model.productType,\r\n PriceInPounds: self.priceInPounds()\r\n }\r\n\r\n switch (self.productType().value) {\r\n case 'Quiz':\r\n model.id = self.quiz().value;\r\n productSummaryViewModel.Name = self.quiz().name;\r\n productSummaryViewModel.Description = self.quiz().description;\r\n break;\r\n case 'Stream':\r\n model.id = self.stream().value;\r\n productSummaryViewModel.Name = self.stream().name;\r\n productSummaryViewModel.Description = self.stream().description;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n $.ajax({\r\n url: '/Products/Create',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Product created\", \"Success\");\r\n\r\n productSummaryViewModel.ProductId = data.productId;\r\n productSummaryViewModel.Editing = ko.observable(false);\r\n productSummaryViewModel.PriceInPounds = ko.observable(productSummaryViewModel.PriceInPounds).extend({ number: true });\r\n\r\n self.products.push(productSummaryViewModel);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n function getQuizList() {\r\n if (self.quizzes().length == 0) {\r\n $.ajax({\r\n url: '/Products/LoadQuizzesNotProducts',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n self.quizzes(data);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getStreamList() {\r\n if (self.streams().length == 0) {\r\n $.ajax({\r\n url: '/Products/LoadStreamsNotProducts',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n self.streams(data);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getProductsList() {\r\n $.ajax({\r\n url: '/Products/GetProducts',\r\n dataType: 'json',\r\n async: false,\r\n success: function (data) {\r\n for (var i = 0; i < data.length; i++) {\r\n data[i].Editing = ko.observable();\r\n data[i].PriceInPounds = ko.observable(data[i].PriceInPounds).extend({ number: true });\r\n }\r\n self.products(data);\r\n }\r\n });\r\n }\r\n\r\n function deleteProduct(product) {\r\n var model = {\r\n productId: product.ProductId,\r\n };\r\n $.ajax({\r\n url: '/Products/DeleteProduct',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Product deleted\", \"Success\");\r\n self.products.remove(product);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n function changePrice(product) {\r\n var model = {\r\n productId: product.ProductId,\r\n newPriceInPence: product.PriceInPounds() * 100\r\n };\r\n $.ajax({\r\n url: '/Products/ChangePrice',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n toastr[\"success\"](\"Price changed\", \"Success\");\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n});\n","define('pages/questions/comments',[\r\n 'jquery',\r\n 'knockout',\r\n 'crossroads',\r\n 'hasher',\r\n 'toastr',\r\n 'moment',\r\n 'enums',\r\n 'jqueryValidate',\r\n 'bootstrap',\r\n 'knockoutValidation',\r\n 'komapping'],\r\nfunction (\r\n $,\r\n ko,\r\n crossroads,\r\n hasher,\r\n toastr,\r\n moment,\r\n enums\r\n) {\r\n\r\n var self;\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Load\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n $(function () {\r\n\r\n })\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Custom Bindings\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ko.bindingHandlers.bsChecked = {\r\n init: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n var value = valueAccessor();\r\n var newValueAccessor = function () {\r\n return {\r\n change: function () {\r\n value(element.value);\r\n }\r\n }\r\n };\r\n ko.bindingHandlers.event.init(element, newValueAccessor,\r\n allBindingsAccessor, viewModel, bindingContext);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor,\r\n viewModel, bindingContext) {\r\n if ($(element).val() == ko.unwrap(valueAccessor())) {\r\n $(element).closest('.btn').button('toggle');\r\n }\r\n }\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Knockout View Model\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n \r\n function QuestionComment(data) {\r\n var self = this;\r\n self.questionId = data.QuestionId;\r\n self.imageURL = data.ImageURL;\r\n self.correctAnswer = data.CorrectAnswer;\r\n self.subjects = data.Subjects;\r\n self.moderation = data.Moderation;\r\n self.commentsCount = data.CommentsCount;\r\n self.dateLastModified = new moment(data.DateLastModified);\r\n }\r\n\r\n function ViewModel() {\r\n\r\n self = this;\r\n\r\n ko.validation.init({\r\n decorateInputElement: true,\r\n errorElementClass: 'input-validation-error',\r\n errorMessageClass: 'field-validation-error',\r\n insertMessages: true\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Observables\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.pages = new enums.Enum('questions', 'comments');\r\n self.page = ko.observable(self.pages.questions);\r\n\r\n self.mode = ko.observable('questions');\r\n\r\n // Questions\r\n self.questions = ko.observableArray([]);\r\n\r\n // Comments\r\n self.comments = ko.observableArray([]);\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Computed\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Subscribes\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n self.mode.subscribe(function (newValue) {\r\n if (newValue == 'questions') {\r\n hasher.setHash('Questions');\r\n } else {\r\n hasher.setHash('Comments')\r\n }\r\n });\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n // Page Functions\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n addPageFunctions();\r\n }\r\n\r\n ko.applyBindings(new ViewModel());\r\n\r\n initRouter();\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Page Functions\r\n /// \r\n /// Page functions are accessible from the HTML page through Knockout\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function addPageFunctions() {\r\n\r\n self.isNullOrWhiteSpace = function (str) {\r\n return isNullOrWhiteSpace(str);\r\n }\r\n \r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Functions\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function clearErrors() {\r\n $('.input-validation-error')\r\n .removeClass('input-validation-error');\r\n\r\n $('.field-validation-error')\r\n .remove();\r\n }\r\n\r\n function displayErrors(errors) {\r\n\r\n for (var i = 0; i < errors.length; i++) {\r\n\r\n $('')\r\n .html(errors[i].Value[0])\r\n .appendTo($('#' + errors[i].Key).parent());\r\n\r\n $('#' + errors[i].Key)\r\n .addClass('input-validation-error');\r\n }\r\n }\r\n \r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Server Communication\r\n /// \r\n /// Gets from and sets to the server\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function getQuestions() {\r\n\r\n var model = {};\r\n\r\n $.ajax({\r\n url: '/Questions/GetMyQuestions',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n var questions = $.map(data.questions, function (item) { return new QuestionComment(item) });\r\n self.questions(questions);\r\n sortBydateLastModified(self.questions);\r\n self.page(self.pages.questions);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n \r\n function getComments() {\r\n\r\n var model = {};\r\n self.page(self.pages.comments);\r\n\r\n $.ajax({\r\n url: '/Questions/GetMyComments',\r\n type: 'POST',\r\n data: JSON.stringify(model),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (data) {\r\n if (data.status == 'success') {\r\n var comments = $.map(data.comments, function (item) { return new QuestionComment(item) });\r\n self.comments(comments);\r\n sortBydateLastModified(self.comments);\r\n self.page(self.pages.comments);\r\n }\r\n else {\r\n toastr[\"error\"](data.status, \"Error\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Utilities\r\n /// \r\n /// Helper functions\r\n ///\r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function isNullOrWhiteSpace(str) {\r\n return str === null || !/\\S/.test(str);\r\n }\r\n \r\n function sortBydateLastModified(x) {\r\n x.sort(function (l, r) {\r\n return l.dateLastModified < r.dateLastModified ? 1 : -1;\r\n });\r\n }\r\n\r\n ////////////////////////////////////////////////////////////////////////////////\r\n ///\r\n /// Routes\r\n /// \r\n /// All important actions are processed through the routing system.\r\n /// \r\n ////////////////////////////////////////////////////////////////////////////////\r\n\r\n function initRouter() {\r\n\r\n crossroads.addRoute('',\r\n function () {\r\n getQuestions();\r\n });\r\n\r\n crossroads.addRoute('Questions',\r\n function () {\r\n getQuestions();\r\n });\r\n\r\n crossroads.addRoute('Comments',\r\n function (id) {\r\n getComments();\r\n });\r\n\r\n //crossroads.routed.add(console.log, console); //log all routes\r\n\r\n //setup hasher\r\n function parseHash(newHash, oldHash) {\r\n crossroads.parse(newHash);\r\n setTimeout(function () {\r\n ga('send', 'pageview', (window.location.pathname + window.location.hash).replace(\"#\", \"\"));\r\n }, 0);\r\n }\r\n\r\n hasher.initialized.add(parseHash);\r\n hasher.changed.add(parseHash);\r\n hasher.init();\r\n }\r\n\r\n});\n","define('pages/questions/create',['jquery', 'tmpl', 'toastr', 'bootstrap', 'fabric', 'chosen', 'jqueryAutosize', 'spectrum', 'mousetrap', 'jquery.ui.widget', 'load-image', 'canvas-to-blob', 'jqueryIFrameTransport', 'jquery.fileupload', 'jquery.fileupload-process', 'jquery.fileupload-image', 'uniformHeight', 'bililiteRange', 'jquerySendkeys'], function ($, tmpl, toastr) {\r\n\r\n $(function () {\r\n\r\n var isSubmitting = false;\r\n\r\n // This function is enirely dependant on the HTML structure. It might be better\r\n // to add data attributes for parentid and ancestorids and use these to find \r\n // the elements you need to show/hide.\r\n $('input[name=selectedSubjectIds]').change(function(event){\r\n \r\n var parentid = $(this).val();\r\n\r\n if (this.checked) {\r\n $(this)\r\n .closest('.branch')\r\n .children()\r\n .removeClass('hide');\r\n } else {\r\n $(this)\r\n .closest('.branch')\r\n .find('input[name=selectedSubjectIds]')\r\n .not(this)\r\n .attr('checked', false)\r\n .closest('.branch')\r\n .addClass('hide');\r\n }\r\n });\r\n\r\n $('form').submit(function (e) {\r\n\r\n if (isSubmitting) {\r\n toastr['warning']('You have already submitted this question it is just taking a while.', 'Warning');\r\n return;\r\n }\r\n\r\n isSubmitting = true;\r\n\r\n e.preventDefault();\r\n\r\n var correctAnswer = $('input:radio[name=correctAnswer]:checked').val();\r\n\r\n //var ageGroup = $('input:radio[name=ageGroup]:checked').val();\r\n\r\n canvas.deactivateAll().renderAll();\r\n var dataURL = canvas.toDataURL({\r\n format: 'jpeg',\r\n quality: 1\r\n });\r\n\r\n var selectedSubjectIds = $('input[name=selectedSubjectIds]:checked').map(function () {\r\n return this.value;\r\n }).toArray();\r\n \r\n var viewModel = {\r\n question: {\r\n canvas: JSON.stringify(canvas),\r\n correctAnswer: correctAnswer,\r\n //questionAges: ageGroup,\r\n questionId: $('#Question_QuestionId').val()\r\n },\r\n dataURL: dataURL,\r\n selectedSubjectIds: selectedSubjectIds,\r\n explanationA: $('#ExplanationA').val(),\r\n explanationB: $('#ExplanationB').val(),\r\n explanationC: $('#ExplanationC').val(),\r\n explanationD: $('#ExplanationD').val()\r\n };\r\n\r\n var errorMessages = \"\";\r\n\r\n // TODO Improve JSON validation! This is very lame.\r\n // See for example http://stackoverflow.com/questions/5127813/call-mvc-3-client-side-validation-manually-for-ajax-posts\r\n if (correctAnswer === undefined) {\r\n\r\n errorMessages += '
Please select a correct answer.
';\r\n\r\n }\r\n\r\n //if (ageGroup === undefined) {\r\n\r\n // errorMessages += '
Please select a age group.
';\r\n\r\n //}\r\n\r\n if (selectedSubjectIds === undefined || selectedSubjectIds.length === 0) {\r\n\r\n errorMessages += '
Please select at least one subject.
';\r\n\r\n }\r\n\r\n if (errorMessages === \"\") {\r\n\r\n $.ajax({\r\n url: $(this).attr('action'),\r\n type: 'POST',\r\n data: JSON.stringify(viewModel),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (message) {\r\n ga('send', 'event', 'Questions', 'Questions – Create a new question');\r\n window.location = message.redirectUrl;\r\n // No need to set isSubmitting to true because we just change the page here.\r\n },\r\n error: function (error) {\r\n $('#error-container').html('Please check your internet connection');\r\n isSubmitting = false;\r\n }\r\n });\r\n\r\n } else {\r\n\r\n $('#error-container').html(errorMessages);\r\n\r\n }\r\n \r\n });\r\n \r\n function pad(str, length) {\r\n while (str.length < length) {\r\n str = '0' + str;\r\n }\r\n return str;\r\n };\r\n\r\n var getRandomInt = fabric.util.getRandomInt;\r\n\r\n function getRandomColor() {\r\n return (\r\n pad(getRandomInt(0, 255).toString(16), 2) +\r\n pad(getRandomInt(0, 255).toString(16), 2) +\r\n pad(getRandomInt(0, 255).toString(16), 2)\r\n );\r\n }\r\n\r\n // Settings for selection rectangle\r\n fabric.Object.prototype.padding = 5;\r\n fabric.Object.prototype.transparentCorners = false;\r\n\r\n function getRandomNum(min, max) {\r\n return Math.random() * (max - min) + min;\r\n }\r\n\r\n var canvas = new fabric.Canvas('question-canvas');\r\n\r\n var canvasJson = $('#question-canvas').data('json');\r\n\r\n if (canvasJson != '') {\r\n canvas.loadFromJSON(canvasJson);\r\n }\r\n\r\n canvas.backgroundColor = '#ffffff';\r\n canvas.freeDrawingBrush.width = 5;\r\n canvas.renderAll();\r\n\r\n $('#fabric__clear-canvas').click(function () {\r\n if (confirm('Are you sure?')) {\r\n canvas.backgroundColor = '#ffffff';\r\n canvas.clear();\r\n }\r\n });\r\n\r\n $('#fabric__select-mode').click(function () {\r\n canvas.isDrawingMode = false;\r\n var slideWidth = $('#fabric__drawing-tab').width();\r\n $('#fabric__drawing-tab').hide();\r\n $('#fabric__shape-tab > a').tab('show');\r\n });\r\n\r\n $('#fabric__draw-mode').click(function () {\r\n canvas.isDrawingMode = true;\r\n canvas.deactivateAll().renderAll();\r\n $('#fabric__object-tab').hide();\r\n $('#fabric__text-tab').hide();\r\n $('#fabric__drawing-tab').show();\r\n $('#fabric__drawing-tab > a').tab('show');\r\n });\r\n\r\n \r\n\r\n $('#fabric__add-text').click(function () {\r\n\r\n var oldFontSize = $('#fabric__font-size').prop('value') || 16;\r\n\r\n var placeholder = new fabric.Text('Enter text here', {\r\n left: getRandomInt(350, 400),\r\n top: getRandomInt(350, 400),\r\n fontFamily: $('#fabric__font-family').prop('value') || 'sans-serif',\r\n angle: 0,\r\n fill: $('#fabric__text-colour').spectrum('get').toHexString(),\r\n scaleX: 0.5,\r\n scaleY: 0.5,\r\n fontWeight: $('#fabric__font-bold').hasClass('active') ? 'bold' : '',\r\n fontStyle: $('#fabric__font-italic').hasClass('active') ? 'italic' : '',\r\n fontSize: parseInt(2.5 * oldFontSize, 10), // Correction to make numbers similar to Word\r\n textDecoration: $('#fabric__font-underline').hasClass('active') ? 'underline' : '',\r\n originX: 'left',\r\n hasRotatingPoint: true\r\n });\r\n\r\n canvas.add(placeholder);\r\n canvas.setActiveObject(placeholder);\r\n\r\n if (canvas.isDrawingMode) {\r\n canvas.isDrawingMode = false;\r\n $('#fabric__drawing-tab').hide();\r\n $('#fabric__select-mode').addClass('active');\r\n $('#fabric__draw-mode').removeClass('active');\r\n }\r\n\r\n $('#fabric__object-tab').show();\r\n $('#fabric__text-tab').show();\r\n $('#fabric__text-tab > a').tab('show');\r\n\r\n });\r\n\r\n \r\n $(\"#fabric__background-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n canvas.backgroundColor = colour.toHexString();\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n //clickoutFiresChange: true,\r\n //disabled: true,\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n\r\n //The below pallette is a copy of the Chrome input color type which would\r\n //provide a wonderful fallback, but the pallette is an awful selection of colours.\r\n //['ff8080', 'ffff80', '80ff80', '00ff80', '80ffff', '0080ff', 'ff80c0', 'ff80ff'],\r\n //['ff0000', 'ffff00', '80ff00', '00ff40', '00ffff', '0080c0', '8080c0', 'ff00ff'],\r\n //['804040', 'ff8040', '00ff00', '008080', '004080', '8080ff', '800040', 'ff0080'],\r\n //['800000', 'ff8000', '008000', '008040', '0000ff', '0000a0', '800080', '8000ff'],\r\n //['400000', '804000', '004000', '004040', '000080', '000040', '400040', '400080'],\r\n //['000000', '808000', '808040', '808080', '408080', 'c0c0c0', '300030', 'ffffff']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n function deleteSelection() {\r\n var activeObject = canvas.getActiveObject(),\r\n activeGroup = canvas.getActiveGroup();\r\n if (activeGroup) {\r\n var objectsInGroup = activeGroup.getObjects();\r\n canvas.discardActiveGroup();\r\n objectsInGroup.forEach(function (object) {\r\n canvas.remove(object);\r\n });\r\n } else if (activeObject) {\r\n canvas.remove(activeObject);\r\n }\r\n }\r\n\r\n $('#fabric__remove').click(deleteSelection);\r\n Mousetrap.bind('del', deleteSelection);\r\n\r\n function unselectAll() {\r\n canvas.deactivateAll().renderAll();\r\n }\r\n \r\n Mousetrap.bind('esc', unselectAll);\r\n \r\n // Object Menu\r\n\r\n $(\"#fabric__stroke-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n activeObject.set(\"stroke\", colour.toHexString());\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n\r\n $(\"#fabric__fill-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n activeObject.set(\"fill\", colour.toHexString());\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showAlpha: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $('#fabric__stroke-thickness > li > a').click(function (event) {\r\n event.preventDefault();\r\n canvas.getActiveObject().set('strokeWidth', parseInt($(this).data('width'), 10));\r\n canvas.renderAll();\r\n });\r\n\r\n $('#fabric__opacity a').click(function (event) {\r\n event.preventDefault();\r\n var activeObject = canvas.getActiveObject(),\r\n activeGroup = canvas.getActiveGroup();\r\n\r\n if (activeGroup || activeObject) {\r\n (activeGroup || activeObject).setOpacity($(this).data('opacity') / 100);\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n\r\n $('#fabric__copy').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n\r\n if (!activeObject) return;\r\n\r\n if (fabric.util.getKlass(activeObject.type).async) {\r\n activeObject.clone(function (clone) {\r\n clone.set({ left: activeObject.left + 40, top: activeObject.top + 40 });\r\n canvas.add(clone);\r\n });\r\n } else {\r\n canvas.add(activeObject.clone().set({ left: activeObject.left + 40, top: activeObject.top + 40 }));\r\n }\r\n \r\n canvas.renderAll();\r\n \r\n });\r\n\r\n $('#fabric__flip-horizontal').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n activeObject.flipY = !activeObject.flipY;\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__flip-vertical').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n activeObject.flipX = !activeObject.flipX;\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__bring-to-front').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.bringToFront(activeObject);\r\n }\r\n });\r\n\r\n $('#fabric__bring-forward').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.bringForward(activeObject);\r\n }\r\n });\r\n\r\n $('#fabric__send-backwards').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.sendBackwards(activeObject);\r\n }\r\n });\r\n\r\n $('#fabric__send-to-back').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.sendToBack(activeObject);\r\n }\r\n });\r\n\r\n // Text\r\n\r\n $('textarea').autosize();\r\n \r\n //$('#fabric__text').focus(function () {\r\n // var activeObject = canvas.getActiveObject();\r\n\r\n // if (activeObject && activeObject.type === 'text') {\r\n // this.value = activeObject.text;\r\n // }\r\n //});\r\n\r\n $('#fabric__text').keyup(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n if (!this.value) {\r\n // canvas.discardActiveObject(); // TODO Check this. Discarding the active object lost connection so no more updates possible seems stupid, you may want to \r\n // remove all text and start typing afresh. discardActiveObject would ruin that. \r\n }\r\n else {\r\n activeObject.setText(this.value);\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-family').change(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fontFamily = this.value.toLowerCase();\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-size').change(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.setFontSize(parseInt(2.5 * this.value, 10)); // 2.5 scaling factor to make similar to Word\r\n canvas.renderAll();\r\n }\r\n });\r\n \r\n $('#fabric__font-bold').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fontWeight = (activeObject.fontWeight == 'bold' ? '' : 'bold');\r\n (activeObject.fontWeight === 'bold') ? $(this).addClass('active') : $(this).removeClass('active');\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-italic').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fontStyle = (activeObject.fontStyle == 'italic' ? '' : 'italic');\r\n (activeObject.fontStyle === 'italic') ? $(this).addClass('active') : $(this).removeClass('active');\r\n canvas.renderAll();\r\n }\r\n });\r\n \r\n $('#fabric__font-underline').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textDecoration = (activeObject.textDecoration == 'underline' ? '' : 'underline');\r\n (activeObject.textDecoration === 'underline') ? $(this).addClass('active') : $(this).removeClass('active');\r\n canvas.renderAll();\r\n }\r\n });\r\n \r\n $(\"#fabric__text-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fill = colour.toHexString();\r\n canvas.renderAll();\r\n }\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $(\"#fabric__text-background-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.backgroundColor = colour.toHexString();\r\n canvas.renderAll();\r\n }\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showAlpha: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n \r\n $('#fabric__text-align-left').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'left';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'left');\r\n if (activeObject.textAlign === 'left') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__text-align-center').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'center';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'center');\r\n if (activeObject.textAlign === 'center') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__text-align-right').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'right';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'right');\r\n if (activeObject.textAlign === 'right') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__text-align-justify').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'justify';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'justify');\r\n if (activeObject.textAlign === 'justify') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('.js-character').click(function() {\r\n\r\n var $fabricText = $('#fabric__text');\r\n var fabricText = $fabricText[0];\r\n\r\n $fabricText.sendkeys($(this).val());\r\n\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n if (!fabricText.value) {\r\n // canvas.discardActiveObject(); // TODO Check this. Discarding the active object lost connection so no more updates possible seems stupid, you may want to \r\n // remove all text and start typing afresh. discardActiveObject would ruin that. \r\n }\r\n else {\r\n activeObject.setText(fabricText.value);\r\n }\r\n canvas.renderAll();\r\n }\r\n })\r\n\r\n $('.js-character-toggle').click(function () {\r\n $('.js-character').toggleClass('hide');\r\n })\r\n\r\n\r\n // Drawing\r\n\r\n $(\"#fabric__draw-stroke\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n canvas.freeDrawingBrush.color = colour.toHexString();\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $('#fabric__draw-thickness > li > a').click(function (event) {\r\n event.preventDefault();\r\n canvas.freeDrawingBrush.width = parseInt($(this).data('width'), 10) || 5;\r\n });\r\n\r\n $('#fabric__shape-triangle').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Triangle({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n width: 100,\r\n height: 100,\r\n opacity: 1\r\n }));\r\n });\r\n \r\n $('#fabric__shape-circle').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Circle({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n radius: 50,\r\n opacity: 1\r\n }));\r\n });\r\n\r\n $('#fabric__shape-square').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Rect({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n width: 100,\r\n height: 100,\r\n opacity: 1\r\n }));\r\n });\r\n\r\n $('#fabric__shape-rectangle').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Rect({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n width: 100,\r\n height: 60,\r\n opacity: 1\r\n }));\r\n });\r\n \r\n $('#fabric__image-tab').on('click', function (event) {\r\n // A horrible setTimeout solution. Need a promise here or \r\n // some other way of knowing the images have been loaded.\r\n\r\n setTimeout(function () {\r\n $('#fabric__image-tab-pane .thumbnail').uniformHeight();\r\n }, 100);\r\n \r\n });\r\n\r\n if (!isTouchDevice()) {\r\n $('.fabric__image').tooltip({\r\n trigger: 'hover',\r\n title: 'Click to insert'\r\n });\r\n }\r\n // Insert Image\r\n\r\n // TODO Add code to indicate that this picture is associated with this question\r\n // TODO Add equivalent code for the delete method\r\n // TODO Or don't bother recording this in the db and just search through JSON \r\n // for each question to check whether the image is in use before allowing delete.\r\n // Using delegation so new .fabric__image elements receive event.\r\n $('.fabric__images-list').on('click', '.fabric__image', function (event) {\r\n fabric.Image.fromURL($(this).data('url'), function (Img) {\r\n //Img.scale(0.5);\r\n Img.left = 0;\r\n Img.top = 0;\r\n Img.originX = 'left';\r\n Img.originY = 'top';\r\n canvas.add(Img);\r\n });\r\n });\r\n\r\n var uploadButton = $('',\r\n steps: [\r\n {\r\n element: '#quizzer__question',\r\n title: 'The Diagnostic Question',\r\n content: 'Hover over the question to reveal the Enter Fullscreen toggle.',\r\n placement: 'top'\r\n },\r\n {\r\n element: '#quizzer__answer',\r\n title: 'The Answer Bar',\r\n content: 'Choose an answer and click Check to see if you\\'re right.',\r\n placement: 'top'\r\n },\r\n {\r\n element: '#js-question-download',\r\n title: 'Question Download',\r\n content: 'Download the Diagnostic Question as an image.',\r\n placement: 'top'\r\n },\r\n {\r\n element: '#js-quick-stats',\r\n title: 'Summary Statistics',\r\n content: 'View the number of likes, downloads and quizzes added to.',\r\n placement: 'top'\r\n },\r\n {\r\n element: '#question-details__about-tab',\r\n title: 'About Tab',\r\n content: 'View more questions by this author, see the subjects this question covers and, when given, see explanations of the incorrect answers.',\r\n placement: 'top',\r\n onShow: function (tour) {\r\n $('#question-details__about-tab a').tab('show');\r\n }\r\n },\r\n {\r\n element: '#question-details__share-tab',\r\n title: 'Share Tab',\r\n content: 'Share this question on Facebook, Twitter or Google+. Share the link in an email or embed the question in your own website.',\r\n placement: 'top',\r\n onShow: function (tour) {\r\n $('#question-details__share-tab a').tab('show');\r\n }\r\n },\r\n {\r\n element: '#question-details__add-tab',\r\n title: 'Add to Quiz Tab',\r\n content: 'Add this question to an existing or new quiz.',\r\n placement: 'top',\r\n onShow: function (tour) {\r\n $('#question-details__add-tab a').tab('show');\r\n }\r\n },\r\n {\r\n element: '#question-details__stats-tab',\r\n title: 'Statistics Tab',\r\n content: 'Anticipate misconceptions by seeing what answers have been given in the past.',\r\n placement: 'top',\r\n onShow: function (tour) {\r\n $('#question-details__stats-tab a').tab('show');\r\n }\r\n },\r\n {\r\n element: '#question-details__report-tab',\r\n title: 'Feedback Tab',\r\n content: 'Provide feedback to the question author. All feedback is reviewed by a moderator.',\r\n placement: 'top',\r\n onShow: function (tour) {\r\n $('#question-details__report-tab a').tab('show');\r\n }\r\n }\r\n ]\r\n }).init();\r\n \r\n $('#tour-start').click(function (event) {\r\n event.preventDefault();\r\n if (tour.ended()) {\r\n tour.restart();\r\n } else {\r\n tour.start();\r\n }\r\n });\r\n \r\n\r\n });\r\n\r\n\r\n function isTouchDevice() {\r\n return true == (\"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch);\r\n }\r\n\r\n});\n","define('pages/questions/edit',['jquery', 'tmpl', 'bootstrap', 'fabric', 'chosen', 'jqueryAutosize', 'spectrum', 'mousetrap', 'jquery.ui.widget', 'load-image', 'canvas-to-blob', 'jqueryIFrameTransport', 'jquery.fileupload', 'jquery.fileupload-process', 'jquery.fileupload-image', 'uniformHeight', 'bililiteRange', 'jquerySendkeys'], function ($, tmpl) {\r\n\r\n // TODO Add some conditional for including excanvas\r\n\r\n $(function () {\r\n \r\n // This function is enirely dependant on the HTML structure. It might be better\r\n // to add data attributes for parentid and ancestorids and use these to find \r\n // the elements you need to show/hide.\r\n $('input[name=selectedSubjectIds]').change(function (event) {\r\n\r\n var parentid = $(this).val();\r\n\r\n if (this.checked) {\r\n $(this)\r\n .closest('.branch')\r\n .children()\r\n .removeClass('hide');\r\n } else {\r\n $(this)\r\n .closest('.branch')\r\n .find('input[name=selectedSubjectIds]')\r\n .not(this)\r\n .attr('checked', false)\r\n .closest('.branch')\r\n .addClass('hide');\r\n }\r\n });\r\n\r\n $('form').submit(function (e) {\r\n\r\n e.preventDefault();\r\n\r\n var correctAnswer = $('input:radio[name=correctAnswer]:checked').val();\r\n //var ageGroup = $('input:radio[name=ageGroup]:checked').val();\r\n\r\n canvas.deactivateAll().renderAll();\r\n\r\n var selectedSubjectIds = $('input[name=selectedSubjectIds]:checked').map(function () {\r\n return this.value;\r\n }).toArray();\r\n \r\n\r\n var viewModel = {\r\n canvas: \"\",\r\n correctAnswer: correctAnswer,\r\n //questionAges: ageGroup,\r\n questionId: $('#QuestionId').val(),\r\n isPublished: $('#IsPublished').val(),\r\n moderation: $('#Moderation').val(),\r\n userId: $('#UserId').val(),\r\n dataURL: \"\",\r\n selectedSubjectIds: selectedSubjectIds,\r\n explanationA: $('#ExplanationA').val(),\r\n explanationB: $('#ExplanationB').val(),\r\n explanationC: $('#ExplanationC').val(),\r\n explanationD: $('#ExplanationD').val()\r\n };\r\n\r\n var canvasOld = JSON.stringify($('#question-canvas').data('json'));\r\n var canvasNew = JSON.stringify(canvas);\r\n\r\n if (canvasNew != canvasOld)\r\n {\r\n viewModel.canvas = canvasNew;\r\n viewModel.dataURL = canvas.toDataURL({\r\n format: 'jpeg',\r\n quality: 1\r\n });\r\n }\r\n\r\n var errorMessages = \"\";\r\n\r\n // TODO Improve JSON validation! This is very lame.\r\n // See for example http://stackoverflow.com/questions/5127813/call-mvc-3-client-side-validation-manually-for-ajax-posts\r\n if (correctAnswer === undefined) {\r\n\r\n errorMessages += '
Please select a correct answer.
';\r\n\r\n }\r\n\r\n //if (ageGroup === undefined) {\r\n\r\n // errorMessages += '
Please select a age group.
';\r\n\r\n //}\r\n\r\n if (selectedSubjectIds === undefined || selectedSubjectIds.length === 0) {\r\n\r\n errorMessages += '
Please select at least one subject.
';\r\n\r\n }\r\n\r\n if (errorMessages === \"\") {\r\n\r\n $.ajax({\r\n url: $(this).attr('action'),\r\n type: 'POST',\r\n data: JSON.stringify(viewModel),\r\n datatype: 'json',\r\n processData: false,\r\n contentType: 'application/json; charset=utf-8',\r\n success: function (message) {\r\n window.location = message.redirectUrl;\r\n }\r\n });\r\n\r\n } else {\r\n\r\n $('#error-container').html(errorMessages);\r\n\r\n }\r\n\r\n });\r\n\r\n function pad(str, length) {\r\n while (str.length < length) {\r\n str = '0' + str;\r\n }\r\n return str;\r\n };\r\n\r\n var getRandomInt = fabric.util.getRandomInt;\r\n\r\n function getRandomColor() {\r\n return (\r\n pad(getRandomInt(0, 255).toString(16), 2) +\r\n pad(getRandomInt(0, 255).toString(16), 2) +\r\n pad(getRandomInt(0, 255).toString(16), 2)\r\n );\r\n }\r\n\r\n // Settings for selection rectangle\r\n fabric.Object.prototype.padding = 5;\r\n fabric.Object.prototype.transparentCorners = false;\r\n\r\n function getRandomNum(min, max) {\r\n return Math.random() * (max - min) + min;\r\n }\r\n\r\n var canvas = new fabric.Canvas('question-canvas');\r\n\r\n var canvasJson = $('#question-canvas').data('json');\r\n\r\n if (canvasJson != '') {\r\n canvas.loadFromJSON(canvasJson);\r\n }\r\n\r\n canvas.backgroundColor = '#ffffff';\r\n canvas.freeDrawingBrush.width = 5;\r\n canvas.renderAll();\r\n\r\n $('#fabric__clear-canvas').click(function () {\r\n if (confirm('Are you sure?')) {\r\n canvas.backgroundColor = '#ffffff';\r\n canvas.clear();\r\n }\r\n });\r\n\r\n $('#fabric__select-mode').click(function () {\r\n canvas.isDrawingMode = false;\r\n var slideWidth = $('#fabric__drawing-tab').width();\r\n $('#fabric__drawing-tab').hide();\r\n $('#fabric__shape-tab > a').tab('show');\r\n });\r\n\r\n $('#fabric__draw-mode').click(function () {\r\n canvas.isDrawingMode = true;\r\n canvas.deactivateAll().renderAll();\r\n $('#fabric__object-tab').hide();\r\n $('#fabric__text-tab').hide();\r\n $('#fabric__drawing-tab').show();\r\n $('#fabric__drawing-tab > a').tab('show');\r\n });\r\n\r\n $('#fabric__add-text').click(function () {\r\n\r\n var oldFontSize = $('#fabric__font-size').prop('value') || 16;\r\n\r\n var placeholder = new fabric.Text('Enter text here', {\r\n left: getRandomInt(350, 400),\r\n top: getRandomInt(350, 400),\r\n fontFamily: $('#fabric__font-family').prop('value') || 'sans-serif',\r\n angle: 0,\r\n fill: $('#fabric__text-colour').spectrum('get').toHexString(),\r\n scaleX: 0.5,\r\n scaleY: 0.5,\r\n fontWeight: $('#fabric__font-bold').hasClass('active') ? 'bold' : '',\r\n fontStyle: $('#fabric__font-italic').hasClass('active') ? 'italic' : '',\r\n fontSize: parseInt(2.5 * oldFontSize, 10), // Correction to make numbers similar to Word\r\n textDecoration: $('#fabric__font-underline').hasClass('active') ? 'underline' : '',\r\n originX: 'left',\r\n hasRotatingPoint: true\r\n });\r\n\r\n canvas.add(placeholder);\r\n canvas.setActiveObject(placeholder);\r\n\r\n if (canvas.isDrawingMode) {\r\n canvas.isDrawingMode = false;\r\n $('#fabric__drawing-tab').hide();\r\n $('#fabric__select-mode').addClass('active');\r\n $('#fabric__draw-mode').removeClass('active');\r\n }\r\n\r\n $('#fabric__object-tab').show();\r\n $('#fabric__text-tab').show();\r\n $('#fabric__text-tab > a').tab('show');\r\n\r\n });\r\n\r\n\r\n $(\"#fabric__background-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n canvas.backgroundColor = colour.toHexString();\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n //clickoutFiresChange: true,\r\n //disabled: true,\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n\r\n //The below pallette is a copy of the Chrome input color type which would\r\n //provide a wonderful fallback, but the pallette is an awful selection of colours.\r\n //['ff8080', 'ffff80', '80ff80', '00ff80', '80ffff', '0080ff', 'ff80c0', 'ff80ff'],\r\n //['ff0000', 'ffff00', '80ff00', '00ff40', '00ffff', '0080c0', '8080c0', 'ff00ff'],\r\n //['804040', 'ff8040', '00ff00', '008080', '004080', '8080ff', '800040', 'ff0080'],\r\n //['800000', 'ff8000', '008000', '008040', '0000ff', '0000a0', '800080', '8000ff'],\r\n //['400000', '804000', '004000', '004040', '000080', '000040', '400040', '400080'],\r\n //['000000', '808000', '808040', '808080', '408080', 'c0c0c0', '300030', 'ffffff']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n function deleteSelection() {\r\n var activeObject = canvas.getActiveObject(),\r\n activeGroup = canvas.getActiveGroup();\r\n if (activeGroup) {\r\n var objectsInGroup = activeGroup.getObjects();\r\n canvas.discardActiveGroup();\r\n objectsInGroup.forEach(function (object) {\r\n canvas.remove(object);\r\n });\r\n } else if (activeObject) {\r\n canvas.remove(activeObject);\r\n }\r\n }\r\n\r\n $('#fabric__remove').click(deleteSelection);\r\n Mousetrap.bind('del', deleteSelection);\r\n\r\n function unselectAll() {\r\n canvas.deactivateAll().renderAll();\r\n }\r\n\r\n Mousetrap.bind('esc', unselectAll);\r\n\r\n // Object Menu\r\n\r\n $(\"#fabric__stroke-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n activeObject.set(\"stroke\", colour.toHexString());\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n\r\n $(\"#fabric__fill-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n activeObject.set(\"fill\", colour.toHexString());\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showAlpha: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $('#fabric__stroke-thickness > li > a').click(function (event) {\r\n event.preventDefault();\r\n canvas.getActiveObject().set('strokeWidth', parseInt($(this).data('width'), 10));\r\n canvas.renderAll();\r\n });\r\n\r\n $('#fabric__opacity a').click(function (event) {\r\n event.preventDefault();\r\n var activeObject = canvas.getActiveObject(),\r\n activeGroup = canvas.getActiveGroup();\r\n\r\n if (activeGroup || activeObject) {\r\n (activeGroup || activeObject).setOpacity($(this).data('opacity') / 100);\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n\r\n $('#fabric__copy').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n\r\n if (!activeObject) return;\r\n\r\n if (fabric.util.getKlass(activeObject.type).async) {\r\n activeObject.clone(function (clone) {\r\n clone.set({ left: activeObject.left + 40, top: activeObject.top + 40 });\r\n canvas.add(clone);\r\n });\r\n } else {\r\n canvas.add(activeObject.clone().set({ left: activeObject.left + 40, top: activeObject.top + 40 }));\r\n }\r\n\r\n canvas.renderAll();\r\n\r\n });\r\n\r\n $('#fabric__flip-horizontal').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n activeObject.flipY = !activeObject.flipY;\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__flip-vertical').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n activeObject.flipX = !activeObject.flipX;\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__bring-to-front').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.bringToFront(activeObject);\r\n }\r\n });\r\n\r\n $('#fabric__bring-forward').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.bringForward(activeObject);\r\n }\r\n });\r\n\r\n $('#fabric__send-backwards').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.sendBackwards(activeObject);\r\n }\r\n });\r\n\r\n $('#fabric__send-to-back').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n canvas.sendToBack(activeObject);\r\n }\r\n });\r\n\r\n // Text\r\n\r\n $('textarea').autosize();\r\n\r\n //$('#fabric__text').focus(function () {\r\n // var activeObject = canvas.getActiveObject();\r\n\r\n // if (activeObject && activeObject.type === 'text') {\r\n // this.value = activeObject.text;\r\n // }\r\n //});\r\n\r\n $('#fabric__text').keyup(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n if (!this.value) {\r\n // canvas.discardActiveObject(); // TODO Check this. Discarding the active object lost connection so no more updates possible seems stupid, you may want to \r\n // remove all text and start typing afresh. discardActiveObject would ruin that. \r\n }\r\n else {\r\n activeObject.setText(this.value);\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-family').change(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fontFamily = this.value.toLowerCase();\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-size').change(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.setFontSize(parseInt(2.5 * this.value, 10)); // 2.5 scaling factor to make similar to Word\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-bold').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fontWeight = (activeObject.fontWeight == 'bold' ? '' : 'bold');\r\n (activeObject.fontWeight === 'bold') ? $(this).addClass('active') : $(this).removeClass('active');\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-italic').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fontStyle = (activeObject.fontStyle == 'italic' ? '' : 'italic');\r\n (activeObject.fontStyle === 'italic') ? $(this).addClass('active') : $(this).removeClass('active');\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__font-underline').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textDecoration = (activeObject.textDecoration == 'underline' ? '' : 'underline');\r\n (activeObject.textDecoration === 'underline') ? $(this).addClass('active') : $(this).removeClass('active');\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $(\"#fabric__text-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.fill = colour.toHexString();\r\n canvas.renderAll();\r\n }\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $(\"#fabric__text-background-colour\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.backgroundColor = colour.toHexString();\r\n canvas.renderAll();\r\n }\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showAlpha: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $('#fabric__text-align-left').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'left';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'left');\r\n if (activeObject.textAlign === 'left') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__text-align-center').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'center';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'center');\r\n if (activeObject.textAlign === 'center') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__text-align-right').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'right';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'right');\r\n if (activeObject.textAlign === 'right') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('#fabric__text-align-justify').click(function () {\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject && activeObject.type === 'text') {\r\n activeObject.textAlign = 'justify';\r\n canvas._adjustPosition && canvas._adjustPosition(activeObject, 'justify');\r\n if (activeObject.textAlign === 'justify') {\r\n $(this).siblings().removeClass('active');\r\n this.className += ' active';\r\n }\r\n else {\r\n this.className = 'btn';\r\n }\r\n canvas.renderAll();\r\n }\r\n });\r\n\r\n $('.js-character').click(function () {\r\n\r\n var $fabricText = $('#fabric__text');\r\n var fabricText = $fabricText[0];\r\n\r\n $fabricText.sendkeys($(this).val());\r\n\r\n var activeObject = canvas.getActiveObject();\r\n if (activeObject) {\r\n if (!fabricText.value) {\r\n // canvas.discardActiveObject(); // TODO Check this. Discarding the active object lost connection so no more updates possible seems stupid, you may want to \r\n // remove all text and start typing afresh. discardActiveObject would ruin that. \r\n }\r\n else {\r\n activeObject.setText(fabricText.value);\r\n }\r\n canvas.renderAll();\r\n }\r\n })\r\n\r\n $('.js-character-toggle').click(function () {\r\n $('.js-character').toggleClass('hide');\r\n })\r\n\r\n\r\n // Drawing\r\n\r\n $(\"#fabric__draw-stroke\").spectrum({\r\n cancelText: \"Cancel\",\r\n change: function (colour) {\r\n canvas.freeDrawingBrush.color = colour.toHexString();\r\n canvas.renderAll();\r\n },\r\n chooseText: \"OK\",\r\n maxSelectionSize: 6,\r\n move: function (color) {\r\n $(this).css(\"color\", color.toHexString());\r\n },\r\n showInitial: true,\r\n showPalette: true,\r\n showSelectionPalette: true,\r\n theme: 'sp-bootstrap',\r\n palette: [\r\n ['ffffff', 'f2f2f2', 'd8d8d8', 'bfbfbf', 'a5a5a5', '7f7f7f'],\r\n ['000000', '7f7f7f', '595959', '3f3f3f', '262626', '0c0c0c'],\r\n ['7030a0', 'e3d0f1', 'c7a3e3', 'ab73d5', '542378', '381750'],\r\n ['ff0000', 'ffcccc', 'fe9999', 'ff6566', 'bf0000', '7f0000'],\r\n ['ffff00', 'ffffcc', 'fffe99', 'ffff65', 'f1c405', 'ffbb02'],\r\n ['00b050', 'bcffda', '79ffb6', '36fe91', '00843b', '005827'],\r\n ['0070c0', 'bfe4ff', '7fcaff', '40afff', '005390', '003760']\r\n ],\r\n localStorageKey: \"spectrum.fabric\"\r\n });\r\n\r\n $('#fabric__draw-thickness > li > a').click(function (event) {\r\n event.preventDefault();\r\n canvas.freeDrawingBrush.width = parseInt($(this).data('width'), 10) || 5;\r\n });\r\n\r\n $('#fabric__shape-triangle').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Triangle({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n width: 100,\r\n height: 100,\r\n opacity: 1\r\n }));\r\n });\r\n\r\n $('#fabric__shape-circle').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Circle({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n radius: 50,\r\n opacity: 1\r\n }));\r\n });\r\n\r\n $('#fabric__shape-square').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Rect({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n width: 100,\r\n height: 100,\r\n opacity: 1\r\n }));\r\n });\r\n\r\n $('#fabric__shape-rectangle').click(function (event) {\r\n event.preventDefault();\r\n canvas.add(new fabric.Rect({\r\n left: fabric.util.getRandomInt(0 + 50, 640 - 50),\r\n top: fabric.util.getRandomInt(0 + 50, 480 - 50),\r\n fill: '#' + getRandomColor(),\r\n width: 100,\r\n height: 60,\r\n opacity: 1\r\n }));\r\n });\r\n\r\n $('#fabric__image-tab').on('click', function (event) {\r\n // A horrible setTimeout solution. Need a promise here or \r\n // some other way of knowing the images have been loaded.\r\n\r\n setTimeout(function () {\r\n $('#fabric__image-tab-pane .thumbnail').uniformHeight();\r\n }, 100);\r\n\r\n });\r\n\r\n function isTouchDevice() {\r\n return true == (\"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch);\r\n }\r\n\r\n if (!isTouchDevice()) {\r\n $('.fabric__image').tooltip({\r\n trigger: 'hover',\r\n title: 'Click to insert'\r\n });\r\n }\r\n // Insert Image\r\n\r\n // TODO Add code to indicate that this picture is associated with this question\r\n // TODO Add equivalent code for the delete method\r\n // TODO Or don't bother recording this in the db and just search through JSON \r\n // for each question to check whether the image is in use before allowing delete.\r\n // Using delegation so new .fabric__image elements receive event.\r\n $('.fabric__images-list').on('click', '.fabric__image', function (event) {\r\n fabric.Image.fromURL($(this).data('url'), function (Img) {\r\n //Img.scale(0.5);\r\n Img.left = 0;\r\n Img.top = 0;\r\n Img.originX = 'left';\r\n Img.originY = 'top';\r\n canvas.add(Img);\r\n });\r\n });\r\n\r\n var uploadButton = $('