{"version":3,"sources":["webpack:///Course/CourseNew/course_main.bundle.js","webpack:///webpack/bootstrap fdcae33949839c1e76f4","webpack:///./Course/CourseNew/course_main.js","webpack:///./Course/CourseNew/QuestionTypes.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","1230","__webpack_exports__","_toConsumableArray","arr","Array","isArray","arr2","length","from","value","__WEBPACK_IMPORTED_MODULE_0__QuestionTypes__","_extends","assign","target","arguments","source","key","_slicedToArray","sliceIterator","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","err","TypeError","closeCourseDialog","_$main","removeClass","detach","appendTo","$","parentItem","_callback","css","bindCourseStep","listSlide","window","course","ListSlide","_$step","find","_$slide_prev","_$slide_next","_$slide_finish","index","findIndex","x","SlideId","ActiveSlide","addClass","empty","off","entries","slide","_$gotoSlide","SlideName","click","checkallQuestionIsCorrect","dialog","modal","dialogClass","width","autoOpen","resizable","title","open","displayActiveSlide","hasClass","console","log","saveCurrentQuestion","markAsReadSlide","IsViewed","post","ContactCourseId","contactcourseid","contactID","User","ContactId","data","_saveQuestioncallback","_requestNum","SlideContentList","assigneeQuestionList","filter","ContentTypeName","map","Question","reviewerQuestionList","qa","params","_$center","remove","Description","src","attr","indexOf","id","split","tempDom","video","outerHTML","append","UrlBackground","youtubeId","_$wrapElement","_$qaElement","item","StringUtils","makeId","_$itemHtml","XAxis","YAxis","Width","Height","ContentText","frEditor","FroalaEditor","toolbarInline","charCounterCount","attribution","fontSizeDefaultSelection","fontSizeSelection","heightMax","height","events","html","set","edit","ContentData","getYoutubeId","includes","Shared","isValidUrl","ContentTex","RenderQuestion","QuestionType","onDataChange","_saveSubscribe","getPDFId","zoom","_scale","changedVal","e","CanMoveNext","moveStatus","CorrectAnswerOption","type","YesNoAnswer","SelectedOptionNumber","valid","content","question","url","regExp","match","startIndex","endIndex","substring","_csWidth","_csHeight","_$courseCenter","document","ready","keyup","keyCode","on","this","location","replace","showCourse","callback","contactid","CourseId","reviewerId","utilities","setLoading","ajax","success","assessmentInfor","ContactFirstName","ResponderFirstname","ContactLastName","ResponderLastname","Gender","ResponderGender","openDialogInfor","des","result","close","Math","min","875","QuestionText","bindDisabled","self","element","props","disabled","answerArea","bindDisplayed","displayed","hide","show","bindValue","questionArea","getVocative","valueProp","activeItem","render","random","toString","substr","DomId","elementTemplate","CharactersLength","StyleColor","StyleFontSize","StyleFontFamily","elementDom","searchVal","lastTxt","searchTxt","setTimeout","preventEventIf","onChange","update","getProps","setProps","QuestionAttachment","style","display","convertByteSize","input","form","file","File","files","formData","FormData","ContactTemplateResponderDetailsID","text","size","val","URL","createObjectURL","FileName","AddData","save","preventDefault","stopPropagation","originalEvent","dataTransfer","trigger","tempLink","createElement","body","appendChild","href","QuestionAttachmentId","setAttribute","download","removeChild","revokeObjectURL","setBusy","contentType","processData","JBErrorCode","Error","gsAlert","message","btnok_text","btnclose_text","ID","QuestionNumber","prop","QuestionDate","datepicker","Date","parseInt","first","dateFormat","changeMonth","changeYear","yearRange","beforeShow","inst","dpDiv","formatDate","QuestionYesNo","each","_thisItem","YesSecondary","secondary","saveSubscribe","NoSecondary","QuestionOption","AllowMultiSelectOption","_content","parent","SelectedOptions","selectedOptions","Option1","Option2","Option3","Option4","Option5","_$lbl","_$chk","prev","otionValue","checked","checkSubActionData","CTRDsId","OptionValue","ResponderType","canNextQuestion","IsDirectRejection","MoveStatus","secondaryElement","closest","QuestionScale","elementWrap","ui","slider","HideNumberOptions","ScaleMinRange","ScaleMaxRange","range","max","step","stop","ScaleSecondary","QuestionMood","QuestionImage","ImageW","ImageH","ImageId","saveCroppie","scaleCroppie","removeCroppie","actions","imagePanel","opts","viewport","boundary","enableExif","enableZoom","enableResize","croppieItem","croppie","img","Image","onload","canvas","ctx","getContext","iw","ih","scale","iwScaled","ihScaled","drawImage","thumb","quality","then","resp","toDataURL","alertify","QuestionVideo","videoRecord","Type","dataChangeCallBack","qaElement","nodeDom","AskAttachmentId","createDownloadSection","itemData","itemElement","attachment","AskAttachmentName","AskAttachmentSize","insertAfter","IsDownloadedAttachment","ContactTemplateResponderDetailsId","toFixed","str","_responder","_heshe","_HeShe","_hisher","_HisHer","_jobTitle","JobTitle","_jobLocation","JobLocation","toLowerCase","_RenderQuestion"],"mappings":"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","file":"Course/CourseNew/course_main.bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1230);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 1230:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__QuestionTypes__ = __webpack_require__(875);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n\n(function () {\n ////courseid\n ////ActiveSlide\n var _$main = null;\n var _callback = null;\n var slideId = null;\n var parentItem = [];\n var assigneeId = null;\n var reviewers = null;\n var _csWidth;\n var _csHeight;\n var _scale;\n var _saveSubscribe = [];\n\n var _$courseCenter = null;\n $(document).ready(function () {\n _$main = $(\"#course_main\");\n _$courseCenter = _$main.find(\".course_center\");\n $(document).keyup(function (e) {\n if (e.keyCode === 27) {\n closeCourseDialog(); // esc\n }\n });\n\n $(\"body\").off(\"click\", \"#course_main .item-text a\").on(\"click\", \"#course_main .item-text a\", function () {\n if ($(this).attr(\"target\")) {\n window.open($(this).attr(\"href\"), '_blank');\n } else {\n window.location.replace($(this).attr(\"href\"));\n }\n });\n\n window.showCourse = function (callback) {\n _callback = callback;\n\n _$main.find(\".course_close\").off().click(function () {\n\n saveCurrentQuestion(\n //call this after save current Question//\n function () {\n closeCourseDialog();\n });\n });\n\n _$main.find(\".slide_finish\").off().click(function () {\n\n if (checkallQuestionIsCorrect() == false) {\n $(\"#try-again-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#try-again-message\").off().click(function () {\n $(\"#try-again-message\").dialog(\"close\");\n });\n }\n });\n\n return;\n }\n\n saveCurrentQuestion(\n //call this after save current Question//\n function () {\n\n $.post(\"/AddEditCourse/SetFinishCourse\", {\n contactid: window.course.ContactId,\n CourseId: window.course.CourseId,\n reviewerId: window.User.ContactId = \"00000000-0000-0000-0000-000000000000\" ? window.course.ContactId : window.User.ContactId\n }, function () {\n closeCourseDialog();\n });\n });\n });\n\n window.utilities.setLoading(true);\n\n $.ajax({\n url: '/Course/GetContactCourseDetails',\n data: { contactcourseid: contactcourseid },\n type: 'GET',\n success: function success(data) {\n $(\"body\").addClass(\"show-course\");\n\n _$main.detach();\n _$main.appendTo(\"body\");\n _$main.addClass(\"active\");\n\n window.course = data;\n\n window.assessmentInfor = {\n ContactFirstName: data.ResponderFirstname,\n ContactLastName: data.ResponderLastname,\n Gender: data.ResponderGender\n };\n if (data.ListSlide && data.ListSlide.length > 0) {\n if (slideId) {\n window.ActiveSlide = data.ListSlide.find(function (x) {\n return x.SlideId == slideId;\n });\n } else {\n window.ActiveSlide = data.ListSlide[0];\n }\n displayActiveSlide();\n } else {\n window.openDialogInfor({\n title: \"Empty course\",\n des: \"This course is empty\",\n success: function success(result) {},\n close: function close(result) {}\n });\n }\n\n window.utilities.setLoading(false);\n\n _csWidth = _$main.find(\".course_slide_details\").width() - 33.333;\n _csHeight = _$main.find(\".course_slide_details\").height() - 33.333;\n\n _scale = Math.min(_csWidth / 900, _csHeight / 675);\n _$courseCenter.css({ width: 900, height: 675 });\n $(\".review-section\").css({ width: 900 });\n }\n });\n };\n });\n\n function closeCourseDialog() {\n\n _$main.removeClass(\"active\");\n _$main.detach();\n _$main.appendTo(\"body\");\n\n $(\"body\").removeClass(\"show-course\");\n\n //reload list\n parentItem = [];\n //course.loadList();\n if (_callback) {\n _callback(true); //this is global callbacks\n $(\".img_logo_header\").removeClass(\"img_logo_header-absolute\");\n $(\".img_logo_header\").css({ \"width\": \"100%\", \"height\": \"100%\" });\n }\n }\n\n function bindCourseStep() {\n var listSlide = window.course.ListSlide;\n\n var _$step = _$main.find(\".course_step\");\n var _$slide_prev = _$main.find(\".slide_prev\");\n var _$slide_next = _$main.find(\".slide_next\");\n var _$slide_finish = _$main.find(\".slide_finish\");\n var index = window.course.ListSlide.findIndex(function (x) {\n return x.SlideId == window.ActiveSlide.SlideId;\n });\n if (index >= window.course.ListSlide.length - 1) {\n _$slide_next.css({ \"display\": \"none\" });\n _$slide_finish.css({ \"display\": \"flex\" });\n } else {\n _$slide_next.css({ \"display\": \"flex\" });\n _$slide_finish.css({ \"display\": \"none\" });\n }\n\n if (index <= 0) {\n _$slide_prev.addClass(\"btn__disabled\");\n } else {\n _$slide_prev.removeClass(\"btn__disabled\");\n }\n\n _$step.empty();\n _$slide_prev.off();\n _$slide_next.off();\n\n //bind slide step\n\n var _loop = function _loop(slide, _index) {\n var _$gotoSlide = $(\"\");\n _$gotoSlide.click(function () {\n\n if (checkallQuestionIsCorrect() == false) {\n $(\"#try-again-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#try-again-message\").off().click(function () {\n $(\"#try-again-message\").dialog(\"close\");\n });\n }\n });\n\n return;\n }\n\n window.ActiveSlide = window.course.ListSlide[_index];\n displayActiveSlide();\n });\n _$gotoSlide.appendTo(_$step);\n };\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = Object.entries(listSlide)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref = _step.value;\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n var _index = _ref2[0];\n var slide = _ref2[1];\n\n _loop(slide, _index);\n }\n\n //bind prev\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n if (!_$slide_prev.hasClass(\"btn__disabled\")) {\n _$slide_prev.click(function () {\n var index = window.course.ListSlide.findIndex(function (x) {\n return x.SlideId == window.ActiveSlide.SlideId;\n });\n console.log(\"index\", index);\n\n if (index > 0) index--;\n window.ActiveSlide = window.course.ListSlide[index];\n displayActiveSlide();\n });\n }\n\n //bind next\n if (!_$slide_next.hasClass(\"btn__disabled\")) {\n _$slide_next.click(function () {\n\n if (checkallQuestionIsCorrect() == false) {\n $(\"#try-again-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#try-again-message\").off().click(function () {\n $(\"#try-again-message\").dialog(\"close\");\n });\n }\n });\n\n return;\n }\n\n saveCurrentQuestion();\n var index = window.course.ListSlide.findIndex(function (x) {\n return x.SlideId == window.ActiveSlide.SlideId;\n });\n console.log(\"index\", index);\n\n if (index < window.course.ListSlide.length - 1) index++;\n window.ActiveSlide = window.course.ListSlide[index];\n displayActiveSlide();\n });\n }\n }\n\n function markAsReadSlide() {\n window.ActiveSlide.IsViewed = true;\n $.post(\"/AddEditCourse/MarkAsReadSlide\", { SlideId: window.ActiveSlide.SlideId, ContactCourseId: contactcourseid, contactID: window.User.ContactId == \"00000000-0000-0000-0000-000000000000\" ? window.course.ContactId : window.User.ContactId }, function (data) {\n\n console.log(\"________mark as read for question___________\", data);\n });\n }\n\n function saveCurrentQuestion(_saveQuestioncallback) {\n ;\n var _requestNum = 0;\n if (window.ActiveSlide && window.ActiveSlide.SlideContentList && window.ActiveSlide.SlideContentList.length > 0) {\n var assigneeQuestionList = window.ActiveSlide.SlideContentList.filter(function (x) {\n return x.ContentTypeName == \"Interactive Responder\";\n }).map(function (x) {\n return x.Question;\n });\n if (assigneeQuestionList && assigneeQuestionList.length > 0) {\n _requestNum += assigneeQuestionList.length;\n }\n if (reviewerQuestionList && reviewerQuestionList.length > 0) {\n _requestNum += reviewerQuestionList.length;\n }\n\n console.log({ \"Remaining\": _requestNum });\n if (_requestNum == 0 && _saveQuestioncallback) {\n _saveQuestioncallback();\n }\n\n if (assigneeQuestionList && assigneeQuestionList.length > 0) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = assigneeQuestionList[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var qa = _step2.value;\n\n if (qa != null) {\n var params = _extends({}, qa);\n params.ContactCourseId = window.contactcourseid;\n $.post(\"/AddEditCourse/SaveActiveAnswer\", params, function (data) {\n\n console.log(\"________update for reviewer question___________\", data);\n _requestNum--;\n if (_requestNum == 0) {\n console.log(\"done request!!\");\n if (_requestNum == 0 && _saveQuestioncallback) {\n _saveQuestioncallback();\n }\n }\n });\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n\n var reviewerQuestionList = window.ActiveSlide.SlideContentList.filter(function (x) {\n return x.ContentTypeName == \"Interactive Reviewer\";\n }).map(function (x) {\n return x.Question;\n });\n\n if (reviewerQuestionList && reviewerQuestionList.length > 0) {\n var _arr = [].concat(_toConsumableArray(reviewerQuestionList));\n\n for (var _i = 0; _i < _arr.length; _i++) {\n var _qa = _arr[_i];\n if (_qa != null) {\n var _params = _extends({}, _qa);\n _params.ContactCourseId = window.contactcourseid;\n $.post(\"/AddEditCourse/SaveActiveAnswer\", _params, function (data) {\n\n console.log(\"________update for reviewer question___________\", data);\n _requestNum--;\n if (_requestNum == 0) {\n console.log(\"done request!!\");\n if (_requestNum == 0 && _saveQuestioncallback) {\n _saveQuestioncallback();\n }\n }\n });\n }\n }\n }\n } else {\n _saveQuestioncallback();\n }\n }\n\n function displayActiveSlide() {\n markAsReadSlide();\n $(\".course_bottom\").css({ \"display\": \"flex\" });\n var _$center = _$main.find(\".course_center\");\n _$center.empty();\n $(\".review-section\").remove();\n bindCourseStep();\n\n var slide = window.ActiveSlide;\n console.log(\"Display Slide\", window.ActiveSlide);\n\n _$main.removeClass(\"has_video_bg\");\n //display backgroud\n if (slide.Description && $(slide.Description).find(\".fr-video\").length > 0) {\n var src = $($(slide.Description).find(\".fr-video\")[0]).find(\"iframe\").attr(\"src\");\n if (src.indexOf(\"?\") > -1) {\n var id = src.split(\"?\")[0].split(\"embed/\")[1];\n src += \"&autoplay=1&controls=0&disablekb=1&loop=1&rel=0&showinfo=0&color=white&iv_load_policy=3&playlist=\" + id;\n } else {\n var id = src.split(\"embed/\")[1];\n src += \"?autoplay=1&controls=0&disablekb=1&loop=1&rel=0&showinfo=0&color=white&iv_load_policy=3&playlist=\" + id;\n }\n\n var tempDom = $($(slide.Description).find(\".fr-video\")[0]).find(\"iframe\").attr(\"src\", src).attr(\"allow\", \"autoplay\").addClass(\"ytb-iframe\");\n\n var video = tempDom[0].outerHTML;\n _$center.append(video);\n _$center.addClass(\"has_video_bg\");\n } else if (slide.UrlBackground) {\n _$center.css(\"background-image\", \"url('\" + slide.UrlBackground + \"')\");\n //_$center.css(\"background-repeat\", \"no-repeat\");\n //_$center.css(\"background-size\", \"100%\");\n _$center.css(\"opacity\", \"0.99\");\n } else {\n _$center.css(\"background\", \"#fff\");\n }\n\n var _loop2 = function _loop2(item) {\n ////display text///\n if (item.ContentTypeName == \"Text\") {\n console.log(\"Froala editor init\");\n var _id = \"\" + window.StringUtils.makeId(6);\n var _$itemHtml = $(\"\\n
\" + item.ContentText + \"
\");\n _$itemHtml.appendTo(_$center);\n\n var frEditor = new FroalaEditor(\"#\" + _id, {\n key: '6LF5g1D4C3I3C5B3E4F-11SLJCKHXOSLMc1YGSGb1ZXHSe1CgB5A4D4A3E3C2A10A19B6B2==',\n toolbarInline: true,\n charCounterCount: false,\n attribution: false,\n fontSizeDefaultSelection: '24',\n fontSizeSelection: true,\n heightMax: $(_$itemHtml).height(),\n events: {\n 'initialized': function initialized() {\n frEditor.html.set(item.ContentText);\n frEditor.edit.off();\n }\n\n }\n });\n } else if (item.ContentTypeName == \"Image\") {\n var _$itemHtml2 = $(\"\\n \");\n _$itemHtml2.appendTo(_$center);\n } else if (item.ContentTypeName == \"Video\") {\n if (item.ContentText) {\n youtubeId = getYoutubeId(item.ContentText);\n\n if (youtubeId.includes(\"youtu\")) {\n var _$itemHtml3 = $(\"\\n \");\n _$itemHtml3.appendTo(_$center);\n } else if (Shared.isValidUrl(item.ContentTex)) {\n var _$itemHtml4 = $(\"\\n \");\n _$itemHtml4.appendTo(_$center);\n } else {\n var _$itemHtml5 = $(\"\\n \\n \");\n _$itemHtml5.appendTo(_$center);\n }\n }\n } else if (item.ContentTypeName == \"Interactive Responder\") {\n _$wrapElement = $(\"
\");\n\n _$wrapElement.appendTo(_$center);\n _$qaElement = Object(__WEBPACK_IMPORTED_MODULE_0__QuestionTypes__[\"a\" /* RenderQuestion */])(item.Question.QuestionType, item.Question, item.Question, onDataChange, _saveSubscribe);\n\n _$qaElement.appendTo(_$wrapElement);\n\n _$qaElement.find(\".preview_video\").css(\"height\", item.Height - _$qaElement.find(\".qa-area\").height());\n }\n //this is list question\n else if (item.ContentTypeName == \"Interactive Reviewer\") {\n\n if (item.Question) {\n console.log(\"____________review_____________\");\n _$wrapElement = $(\"
\");\n\n _$wrapElement.appendTo(_$center);\n _$qaElement = Object(__WEBPACK_IMPORTED_MODULE_0__QuestionTypes__[\"a\" /* RenderQuestion */])(item.Question.QuestionType, item.Question, item.Question, onDataChange, _saveSubscribe);\n\n _$qaElement.appendTo(_$wrapElement);\n\n _$qaElement.find(\".preview_video\").css(\"height\", item.Height - _$qaElement.find(\".qa-area\").height());\n }\n } else if ((item.ContentText || \"\").includes(\"google.com/\")) {\n $(\"\").appendTo(_$center);\n } else if (item.ContentTypeName == \"Power point\" || item.ContentTypeName == \"Word Document\") {\n $(\"\").appendTo(_$center);\n } else if (item.ContentTypeName == \"Pdf document\") {\n $(\"\\n \\n \").appendTo(_$center);\n }\n };\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = slide.SlideContentList[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var item = _step3.value;\n var youtubeId;\n\n var _$wrapElement;\n\n var _$qaElement;\n\n var _$wrapElement;\n\n var _$qaElement;\n\n _loop2(item);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n _$center.css({ zoom: 100 * _scale + \"%\" });\n }\n\n function onDataChange(changedVal, qa, e, CanMoveNext, moveStatus) {\n\n // console.log('item changed!!! ', qa);\n\n\n if (qa.CorrectAnswerOption) {\n if (qa.type == \"YesNo\") {\n if (qa.CorrectAnswerOption == \"true\" && qa.YesNoAnswer == true || qa.CorrectAnswerOption == \"false\" && qa.YesNoAnswer == false) {\n $(\"#great-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#great-message .gs-dismiss\").off().click(function () {\n $(\"#great-message\").dialog(\"close\");\n });\n }\n });\n } else {\n $(\"#try-again-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#try-again-message\").off().click(function () {\n $(\"#try-again-message\").dialog(\"close\");\n });\n }\n });\n }\n }\n\n if (qa.type == \"Option\") {\n\n if (qa.CorrectAnswerOption.split(\",\").includes(qa[\"Option\" + qa.SelectedOptionNumber])) {\n $(\"#great-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#great-message .gs-dismiss\").off().click(function () {\n $(\"#great-message\").dialog(\"close\");\n });\n }\n });\n } else {\n $(\"#try-again-message\").dialog({\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\n width: 300,\n autoOpen: true,\n resizable: false,\n title: \"\",\n open: function open() {\n $(\"#try-again-message\").off().click(function () {\n $(\"#try-again-message\").dialog(\"close\");\n });\n }\n });\n }\n }\n }\n }\n\n function checkallQuestionIsCorrect() {\n var valid = true;\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = window.ActiveSlide.SlideContentList[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var content = _step4.value;\n\n var question = content.Question;\n if (question && question.CorrectAnswerOption) {\n if (question.QuestionType == \"YesNo\") {\n if (question.CorrectAnswerOption == \"true\" && question.YesNoAnswer == false || question.CorrectAnswerOption == \"false\" && question.YesNoAnswer == true) {\n valid = false;\n break;\n }\n }\n\n if (question.QuestionType == \"Option\") {\n if (!question.CorrectAnswerOption.split(\",\").includes(question[\"Option\" + question.SelectedOptionNumber])) {\n valid = false;\n break;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return valid;\n }\n\n function getYoutubeId(url) {\n var regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n var match = url.match(regExp);\n\n if (match && match[2].length === 11) {\n return \"https://www.youtube.com/embed/\" + match[2] + \"?rel=0&enablejsapi=1\";\n } else {\n return url;\n }\n }\n\n function getPDFId(url) {\n if (url.includes(\"id=\")) {\n var startIndex = url.indexOf(\"id=\") + 3;\n var endIndex = url.indexOf(\"/\", startIndex);\n if (endIndex != -1) {\n return url.substring(startIndex, endIndex);\n } else {\n return url.substring(startIndex);\n }\n }\n\n if (url.includes(\"key=\")) {\n var startIndex = url.indexOf(\"key=\") + 4;\n var endIndex = url.indexOf(\"#\", startIndex);\n return url.substring(startIndex, endIndex);\n }\n\n if (url.includes(\"/d/\")) {\n var startIndex = url.indexOf(\"/d/\") + 3;\n var endIndex = url.indexOf(\"/\", startIndex);\n return url.substring(startIndex, endIndex);\n }\n }\n})();\n\n/***/ }),\n\n/***/ 875:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return RenderQuestion; });\n/* unused harmony export getVocative */\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n////////////////////Question Types///////////////////////\nfunction QuestionText() {\n var self = this;\n this.props = {\n type: \"Text\",\n valueProp: \"TextAnswer\",\n element: null,\n questionArea: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n self.props = _extends({}, self.props, props);\n var id = \"txt_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
\\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".textarea[data-for=\" + id + \"]\");\n\n self.answerArea.data(\"QuestionText\", self);\n\n ////bind handler ///\n var searchVal = null;\n var lastTxt = null;\n self.answerArea.off(\"propertychange change paste input\").on(\"propertychange change paste input\", function (e) {\n var searchTxt = $(e.target).html();\n searchVal = setTimeout(function () {\n if (searchTxt == $(e.target).html() && searchTxt != lastTxt) {\n lastTxt = searchTxt;\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (typeof self.props.onChange == \"function\") {\n var changedVal = $(e.target).html();\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal;\n self.props.onChange(changedVal, self.props, e); //data, this, event\n }\n }\n }, 250);\n });\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n\n return elementDom;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.answerArea.attr('contenteditable', false);\n } else {\n self.answerArea.attr('contenteditable', true);\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n self.answerArea.html(self.props[self.props.valueProp]);\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n //self.questionArea.focus();\n };\n\n return this;\n}\n\nfunction QuestionAttachment() {\n var self = this;\n this.props = {\n type: \"Attachment\",\n valueProp: \"AttachmentName\",\n element: null,\n questionArea: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n self.props = _extends({}, self.props, props);\n var id = \"att_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
\\n \\n
Drag and drop or upload file
\\n
\" + (self.props[\"QuestionAttachmentName\"] || \"\") + \" - \" + convertByteSize(self.props[\"QuestionAttachmentSize\"]) + \"
\\n
Download
\\n
\\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".filePicker[data-for=\" + id + \"]\");\n self.input = elementDom.find(\"input[data-for=\" + id + \"]\");\n self.form = elementDom.find(\".qa-attachment[data-for=\" + id + \"]\");\n self.answerArea.data(\"QuestionAttachment\", self);\n\n ////bind handler ///\n self.input.off(\"change\").on(\"change\", function (e) {\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (typeof self.props.onChange == \"function\") {\n var input = self.input;\n\n var file = new File([input[0].files[0]], input[0].files[0].name);\n var formData = new FormData();\n formData.append('filename', file.name);\n formData.append('blob', file);\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\n self.element.find(\".qa-fileName[data-for=\" + id + \"]\").text(file.name + \" - \" + convertByteSize(file.size) + \" \").show();\n self.element.find(\".qa-download[data-for=\" + id + \"]\").show();\n input.val(\"\");\n\n self.URL = URL.createObjectURL(file);\n self.FileName = file.name;\n\n self.props[self.props.valueProp] = file.name;\n self.item[self.props.valueProp] = file.name;\n //self.props.onChange(null, self.props, e);//data, this, event\n self.AddData = formData;\n self.save(e);\n }\n });\n //bind drag and drop\n self.form.on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {\n e.preventDefault();\n e.stopPropagation();\n }).on('dragover dragenter', function () {\n self.form.addClass('is-dragover');\n }).on('dragleave dragend drop', function () {\n self.form.removeClass('is-dragover');\n }).on('drop', function (e) {\n var file = e.originalEvent.dataTransfer.files[0];\n var formData = new FormData();\n formData.append('filename', file.name);\n formData.append('blob', file);\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\n self.element.find(\".qa-fileName[data-for=\" + id + \"]\").text(file.name + \" - \" + convertByteSize(file.size) + \" \").show();\n self.element.find(\".qa-download[data-for=\" + id + \"]\").show();\n\n self.URL = URL.createObjectURL(file);\n self.FileName = file.name;\n\n self.props[self.props.valueProp] = file.name;\n self.item[self.props.valueProp] = file.name;\n //self.props.onChange(null, self.props, e);//data, this, event\n self.AddData = formData;\n self.save(e);\n });\n\n var filePicker = self.element.find(\".filePicker[data-for=\" + id + \"]\");\n filePicker.off(\"click.uploadFile\").on(\"click.uploadFile\", function () {\n self.input.trigger(\"click\");\n });\n var download = self.element.find(\".qa-download[data-for=\" + id + \"]\");\n download.off(\"click.downLoad\").on(\"click.downLoad\", function () {\n\n var tempLink = document.createElement('a');\n document.body.appendChild(tempLink);\n tempLink.style.display = 'none';\n tempLink.href = self.URL || \"/Assessment/GetDocumentByDocumentId?id=\" + self.props.QuestionAttachmentId;\n tempLink.setAttribute('download', self.FileName);\n\n if (typeof tempLink.download === 'undefined') {\n tempLink.setAttribute('target', '_blank');\n }\n\n setTimeout(function () {\n tempLink.click();\n document.body.removeChild(tempLink);\n window.URL.revokeObjectURL(tempLink.href);\n }, 100);\n });\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n\n //self.saveSubscribe.push(self.save);\n\n return elementDom;\n };\n\n this.save = function (e) {\n Shared.setBusy(self.form, true);\n $.ajax({\n url: \"/Assessment/AttachFile\",\n type: 'post',\n data: self.AddData,\n contentType: false,\n processData: false,\n success: function success(data) {\n Shared.setBusy(self.form, false);\n if (data.success == JBErrorCode.Error) {\n window.gsAlert.dialog({\n type: \"danger\",\n dialogClass: \"simple-dlg\",\n title: \"Some thing went wrong\",\n des: data.message,\n btnok_text: \"OK\",\n btnclose_text: \"Cancel\",\n success: function success(result) {},\n close: function close(result) {}\n });\n return;\n }\n\n self.props[self.props.valueProp] = data.ID;\n self.item[self.props.valueProp] = data.ID;\n self.props.onChange(null, self.props, e); //data, this, event\n\n }\n });\n };\n\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.answerArea[0].disabled = true;\n self.answerArea[0].style.display = \"none\";\n } else {\n self.answerArea[0].disabled = false;\n self.answerArea[0].style.display = \"inline-block\";\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n\n if (self.props.disabled === true) {\n self.answerArea[0].style.display = \"none\";\n } else {\n self.answerArea[0].style.display = \"inline-block\";\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n //self.answerArea.html(self.props[self.props.valueProp]);\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n //self.questionArea.focus();\n };\n\n return this;\n}\n\nfunction QuestionNumber() {\n var self = this;\n this.props = {\n type: \"Number\",\n valueProp: \"NumberAnswer\",\n element: null,\n questionArea: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n self.props = _extends({}, self.props, props);\n var id = \"num_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
Please enter a number to answer!
\\n \\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".qa-number[data-for=\" + id + \"]\");\n\n self.answerArea.data(\"QuestionText\", self);\n\n ////bind handler ///\n self.answerArea.off(\"propertychange change paste input\").on(\"propertychange change paste input\", function (e) {\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (typeof self.props.onChange == \"function\") {\n var changedVal = elementDom.find(\".qa-number[data-for=\" + id + \"]\").val();\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal;\n self.props.onChange(changedVal, self.props, e); //data, this, event\n }\n });\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n\n return elementDom;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.answerArea.prop('disabled', true);\n } else {\n self.answerArea.prop('disabled', false);\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n self.answerArea.val(self.props[self.props.valueProp]);\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n //self.questionArea.focus();\n };\n\n return this;\n}\n\nfunction QuestionDate() {\n var self = this;\n this.props = {\n type: \"Date\",\n valueProp: \"DateAnswer\",\n element: null,\n questionArea: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n self.props = _extends({}, self.props, props);\n var id = \"d_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
Please enter a date to answer!
\\n
\\n
\\n \\n
\\n
\\u200B \\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".qa-date[data-for=\" + id + \"]\").first();\n self.answerArea.datepicker({\n dateFormat: 'dd/mm/yy',\n changeMonth: true,\n changeYear: true,\n yearRange: '1900:2100',\n beforeShow: function beforeShow(input, inst) {\n $(inst.dpDiv).addClass('cs-datepicker');\n }\n });\n self.answerArea.data(\"QuestionText\", self);\n\n ////bind handler ///\n self.answerArea.off(\"propertychange change paste input\").on(\"propertychange change paste input\", function (e) {\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (typeof self.props.onChange == \"function\") {\n var changedVal = elementDom.find(\".qa-date[data-for=\" + id + \"]\").val();\n if (!!changedVal) {\n changedVal = $.datepicker.formatDate('yy-mm-dd', elementDom.find(\".qa-date[data-for=\" + id + \"]\").datepicker(\"getDate\")); //changedVal.datepicker(\"getDate\").slice(0, 10)\n }\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal;\n self.props.onChange(changedVal, self.props, e); //data, this, event\n }\n });\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n\n return elementDom;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.answerArea.prop('disabled', true);\n } else {\n self.answerArea.prop('disabled', false);\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n if (self.props[self.props.valueProp] != null) {\n self.answerArea.datepicker('setDate', new Date(parseInt(self.props[self.props.valueProp].replace(/[^0-9 +]/g, ''))));\n }\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n //self.questionArea.focus();\n };\n\n return this;\n}\n\nfunction QuestionYesNo() {\n var self = this;\n this.props = {\n type: \"YesNo\",\n valueProp: \"YesNoAnswer\",\n element: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n ////this ///\n self.props = _extends({}, self.props, props);\n var id = \"yn_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
\\n
Yes
\\n
No
\\n
\\n
\\n
\";\n\n //let elementWrap = $(elementTemplate);\n self.element = $(elementTemplate);\n\n self.questionArea = self.element.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = self.element.find(\".qa-answer[data-for=\" + id + \"]\");\n self.element.data(\"QuestionYesNoAnswer\", self);\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n ////bind handler ///\n self.element.find(\".qa-yesno-item[data-for=\" + id + \"]\").off(\"click\").on(\"click\", function (e) {\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n self.element.find(\".qa-yesno-item[data-for=\" + id + \"]\").removeClass(\"active\");\n\n var _thisItem = $(this);\n _thisItem.addClass(\"active\");\n console.log(_thisItem.data(\"val\"));\n\n if (typeof self.props.onChange == \"function\") {\n var changedVal = _thisItem.data(\"val\");\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal; //reflect item\n self.props.onChange(changedVal, self.props, e, true, null); //data, this, event\n }\n });\n\n if (self.props.YesSecondary != null) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = self.props.YesSecondary[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var secondary = _step.value;\n\n var secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\n secondaryElement.appendTo(self.element);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n if (self.props.NoSecondary != null) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = self.props.NoSecondary[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _secondary = _step2.value;\n\n var _secondaryElement = RenderQuestion(_secondary.QuestionType, _secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\n _secondaryElement.appendTo(self.element);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n\n //self.props.DOM = self.element;\n\n //set update function\n self.item.update = self.update;\n\n //return $ element\n return self.element;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n self.bindDisabled();\n self.bindDisplayed();\n self.bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.element.attr('disabled', true);\n } else {\n self.element.attr('disabled', false);\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n self.element.find(\".qa-yesno-item[data-for=\" + self.id + \"]\").each(function () {\n var _thisItem = $(this);\n if (_thisItem.data(\"val\") === self.props[self.props.valueProp]) {\n _thisItem.addClass(\"active\");\n } else {\n _thisItem.removeClass(\"active\");\n }\n });\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n };\n\n return this;\n}\n\nfunction QuestionOption() {\n var self = this;\n this.props = {\n type: \"Option\",\n valueProp: \"SelectedOptionNumber\",\n selectedOptions: \"SelectedOptions\",\n element: null,\n displayed: true,\n disabled: false,\n Option1: \"\",\n Option2: \"\",\n Option3: \"\",\n Option4: \"\",\n Option5: \"\",\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n ////this ///\n self.props = _extends({}, self.props, props);\n //create template \n var textVal = self.props[self.props.valueProp];\n var id = \"opt_\" + Math.random().toString(36).substr(2);\n\n var elementTemplate = \"
\\n
\\n
\\n
\\n

\\n

\\n

\\n

\\n

\\n

\\n

\\n

\\n

\\n

\\n
\\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.id = id;\n self.item.DomId = id;\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".qa-answer[data-for=\" + id + \"]\");\n self.element.data(\"QuestionOption\", self);\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n ////bind handler ///\n elementDom.find(\".\" + id + \" .chk_lbl\").each(function () {\n var _$lbl = $(this);\n _$lbl.css({\n \"border-color\": self.props.StyleColor || \"#565656c4\"\n });\n _$lbl.off(\"click\").on(\"click\", function (e) {\n var _$chk = _$lbl.prev(\"input[type='checkbox']\");\n\n var otionValue = \"\";\n\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (self.props.AllowMultiSelectOption) {\n _$chk[0].checked = true;\n } else {\n // elementDom.find(`.${id} input[type='checkbox'][id^=${id}]`).attr('checked', false);\n //$(this).attr('checked', true);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = elementDom.find(\".\" + id + \" input[type='checkbox'][id^=\" + id + \"]\")[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _item = _step3.value;\n\n _item.checked = false;\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n _$chk[0].checked = true;\n }\n\n if (typeof self.props.onChange == \"function\") {\n var changedVal = _$chk.val();\n if (self.props.AllowMultiSelectOption) {\n ///for multiple\n if (_$chk[0].checked == true) {\n if (self.props[self.props.selectedOptions]) {\n self.props[self.props.selectedOptions] = self.props[self.props.selectedOptions] + \",\" + changedVal;\n self.item[self.props.selectedOptions] = self.item[self.props.selectedOptions] + \",\" + changedVal;\n } else {\n self.props[self.props.selectedOptions] = changedVal;\n self.item[self.props.selectedOptions] = changedVal;\n }\n } else {\n self.props[self.props.selectedOptions] = self.props[self.props.selectedOptions].replace(\",\" + changedVal, \"\").replace(\"\" + changedVal, \"\");\n self.item[self.props.selectedOptions] = self.item[self.props.selectedOptions].replace(\",\" + changedVal, \"\").replace(\"\" + changedVal, \"\");\n //self.props.onChange(changedVal, self.props, e);//data, this, event\n }\n\n otionValue = self.item[self.props.selectedOptions];\n } else {\n ///for single\n if (_$chk[0].checked == true) {\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal;\n } else {\n self.props[self.props.valueProp] = null;\n self.item[self.props.valueProp] = null;\n //self.props.onChange(changedVal, self.props, e);//data, this, event\n }\n\n otionValue = self.item[self.props.valueProp];\n }\n\n ////////////check if question can move next////\n var checkSubActionData = {\n CTRDsId: self.item.ContactTemplateResponderDetailsID,\n //OptionValue: self.item[self.props.selectedOptions],\n OptionValue: otionValue,\n ResponderType: \"Option\"\n };\n $.ajax({\n type: 'POST',\n url: \"/Assessment/GetAfterAnsweredAction\",\n data: checkSubActionData,\n\n success: function success(data) {\n console.log(data);\n if (typeof self.props.onChange == \"function\") {\n var canNextQuestion = true;\n if ( /*data.IsMoveToStatus ||*/data.IsDirectRejection) {\n canNextQuestion = false;\n }\n self.props.onChange(changedVal, self.props, e, canNextQuestion, data.MoveStatus); //data, this, event\n }\n }\n });\n }\n });\n });\n\n //create secondary\n for (var i = 1; i <= 20; i++) {\n if (self.props[\"Option\" + i + \"Secondary\"] != null) {\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = self.props[\"Option\" + i + \"Secondary\"][Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var secondary = _step4.value;\n\n var secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\n secondaryElement.appendTo(elementDom.find(\"#\" + id + \"_\" + i).closest(\".divQuestionCheckOption.\" + id).find(\".content\"));\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n }\n }\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n return elementDom;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.element.attr('disabled', true);\n } else {\n self.element.attr('disabled', false);\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n\n //bind each element\n self.element.find(\".divQuestionCheckOption.\" + self.id).each(function (index) {\n var _thisItem = $(this);\n if (!self.props[\"Option\" + (index + 1)]) {\n _thisItem.hide();\n }\n });\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n if (self.props.AllowMultiSelectOption) {\n //////for multiple///\n self.element.find(\".\" + self.id + \" input[type='checkbox']\").each(function (index) {\n var _thisItem = $(this);\n var _content = _thisItem.parent().find(\".content\").html(getVocative(self.props[\"Option\" + (index + 1)]));\n if ((self.props.SelectedOptions || \"\").includes(_thisItem.val())) {\n _thisItem.attr('checked', true);\n } else {\n _thisItem.attr('checked', false);\n }\n\n _content.css({\n \"color\": self.props.StyleColor || \"inherit\",\n \"font-size\": self.props.StyleFontSize || \"inherit\",\n \"font-family\": self.props.StyleFontFamily || \"inherit\"\n });\n });\n } else {\n self.element.find(\".\" + self.id + \" input[type='checkbox']\").each(function (index) {\n var _thisItem = $(this);\n var _content = _thisItem.parent().find(\".content\").html(getVocative(self.props[\"Option\" + (index + 1)]));\n if (_thisItem.val() == self.props[self.props.valueProp]) {\n _thisItem.attr('checked', true);\n } else {\n _thisItem.attr('checked', false);\n }\n\n _content.css({\n \"color\": self.props.StyleColor || \"inherit\",\n \"font-size\": self.props.StyleFontSize || \"inherit\",\n \"font-family\": self.props.StyleFontFamily || \"inherit\"\n });\n });\n }\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n };\n\n return this;\n}\n\nfunction QuestionScale() {\n var self = this;\n this.props = {\n type: \"Scale\",\n valueProp: \"ScaleAverage\",\n element: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n ////this ///\n self.props = _extends({}, self.props, props);\n var id = \"scl_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n\n //create template \n var elementWrap = $(\"
\\n
\\n
\\n \" + (self.props.ScaleMinRange != null && self.props.ScaleMaxRange != null ? \"
\" + self.props.ScaleMinRange + \"
\" + self.props.ScaleMaxRange + \"
\" : \"\") + \"\\n
\");\n\n self.element = elementWrap;\n self.questionArea = elementWrap.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementWrap.find(\".qa-answer[data-for=\" + id + \"]\");\n\n elementWrap.data(\"QuestionScale\", self);\n\n ////bind handler ///\n $.ui.slider({\n range: \"min\",\n value: self.props[self.props.valueProp],\n min: self.props.ScaleMinRange,\n max: self.props.ScaleMaxRange,\n step: 1,\n slide: function slide(e, ui) {\n elementWrap.find(\".ui-slider-handle\").first().text(self.props.HideNumberOptions ? \"\" : ui.value); //???this have to take fisrtttttttttt???\n },\n stop: function stop(e, ui) {\n\n var changedVal = ui.value;\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal; //reflect item\n\n self.props.onChange(changedVal, self.props, e, true, null); //data, this, event\n },\n disabled: self.props.disabled\n }, self.answerArea);\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n if (self.props.ScaleSecondary != null) {\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = self.props.ScaleSecondary[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var secondary = _step5.value;\n\n var secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\n secondaryElement.appendTo(elementWrap);\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n }\n\n //return $ element\n //self.props.DOM = elementWrap;\n //set update function\n self.item.update = self.update;\n\n return elementWrap;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.elementWrap == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n //self.element.attr('disabled', true);\n //self.answerArea.slider({ disabled: true });\n $.ui.slider({ disabled: true }, self.answerArea);\n } else {\n //self.element.attr('disabled', false);\n //self.answerArea.slider({ disabled: false });\n $.ui.slider({ disabled: false }, self.answerArea);\n }\n }\n\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n }\n function bindValue() {\n\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n if (self.props[\"ScaleAverage\"]) {\n self.element.find(\".ui-slider-handle\").first().text(self.props[\"ScaleAverage\"]); //???this have to take fisrtttttttttt???\n }\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n };\n\n return this;\n}\n\nfunction QuestionMood() {\n var self = this;\n this.props = {\n type: \"Mood\",\n valueProp: \"SelectedOptionNumber\",\n element: null,\n questionArea: null,\n displayed: true,\n disabled: false,\n activeItem: null\n };\n this.render = function (item, props) {\n self.item = item;\n self.props = _extends({}, self.props, props);\n var id = \"moo_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
\\n
\\n
Poor
\\n
\\n
\\n
Needs Work
\\n
\\n
\\n
Okay
\\n
\\n
\\n
Good
\\n
\\n
\\n
Excellent
\\n
\\n
\\n
\\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".qa-mood[data-for=\" + id + \"]\");\n\n self.answerArea.data(\"QuestionText\", self);\n\n self.answerArea.find(\".mood-value\").off(\"click\").on(\"click\", function (e) {\n self.answerArea.find(\".mood-value\").removeClass(\"active\");\n $(this).addClass(\"active\");\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (typeof self.props.onChange == \"function\") {\n var changedVal = $(this).data(\"for\");\n self.props[self.props.valueProp] = changedVal;\n self.item[self.props.valueProp] = changedVal;\n self.props.onChange(changedVal, self.props, e); //data, this, event\n }\n });\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n\n return elementDom;\n };\n //get props\n this.getProps = function () {\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.answerArea.find(\".mood-value\").off();\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n self.answerArea.find(\".mood-value[data-for=\" + self.props[self.props.valueProp] + \"]\").addClass(\"active\");\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n };\n\n return this;\n}\n\nfunction QuestionImage() {\n var self = this;\n this.props = {\n type: \"Image\",\n valueProp: \"ImageId\",\n element: null,\n questionArea: null,\n displayed: true,\n disabled: false,\n activeItem: null,\n ImageW: null,\n ImageH: null\n };\n this.render = function (item, props) {\n\n self.item = item;\n self.props = _extends({}, self.props, props);\n var id = \"att_\" + Math.random().toString(36).substr(2);\n self.id = id;\n self.item.DomId = id;\n\n //create template \n var elementTemplate = \"
\\n
\\n
\\n
\\n \\n
\\n Upload Image\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
Remove image
\\n
\\n
\";\n var elementDom = $(elementTemplate);\n\n self.element = elementDom;\n self.questionArea = elementDom.find(\".qa-ask[data-for=\" + id + \"]\");\n self.answerArea = elementDom.find(\".image-picker[data-for=\" + id + \"]\");\n self.input = elementDom.find(\"input[data-for=\" + id + \"]\");\n self.form = elementDom.find(\".qa-image[data-for=\" + id + \"]\");\n self.answerArea.data(\"QuestionImage\", self);\n\n self.saveCroppie = elementDom.find(\".image-item-save[data-for=\" + id + \"]\");\n self.scaleCroppie = elementDom.find(\".image-item-scale[data-for=\" + id + \"]\");\n self.removeCroppie = elementDom.find(\".image-item-remove[data-for=\" + id + \"]\");\n\n self.actions = elementDom.find(\".image-actions[data-for=\" + id + \"]\");\n\n self.imagePanel = elementDom.find(\".image-wrap[data-for=\" + id + \"]\");\n\n var opts = {\n viewport: {\n width: self.props.ImageW,\n height: self.props.ImageH\n },\n boundary: {\n width: self.props.ImageW,\n height: self.props.ImageH\n },\n enableExif: true,\n enableZoom: false,\n enableResize: false\n };\n\n if (!self.props[self.props.valueProp]) {\n opts.boundary = {\n width: self.props.ImageW,\n height: self.props.ImageH\n };\n\n opts.enableZoom = true;\n opts.enableResize = true;\n }\n\n self.croppieItem = self.imagePanel.croppie(opts);\n\n if (self.props[self.props.valueProp]) {\n self.croppieItem.croppie('bind', {\n url: \"/Image/GetImage?id=\" + self.props[self.props.valueProp] + \"&imageid=\" + id + \")\"\n });\n }\n\n ////bind handler ///\n self.input.off(\"change\").on(\"change\", function (e) {\n Shared.setBusy(self.form, true);\n if (preventEventIf(e, self.props.disabled)) {\n return;\n }\n if (typeof self.props.onChange == \"function\") {\n var input = self.input;\n\n //var file = new File([input[0].files[0]], input[0].files[0].name);\n\n //self.URL = URL.createObjectURL(file);\n //self.FileName = file.name;\n\n\n var img = new Image();\n\n img.onload = function () {\n var canvas = document.createElement(\"canvas\");\n var ctx = canvas.getContext(\"2d\");\n var iw = img.width;\n var ih = img.height;\n var scale = Math.min(self.props.ImageW / iw, self.props.ImageH / ih);\n var iwScaled = iw * scale;\n var ihScaled = ih * scale;\n canvas.width = iwScaled;\n canvas.height = ihScaled;\n ctx.drawImage(img, 0, 0, iwScaled, ihScaled);\n\n var thumb = new Image();\n thumb.onload = function () {\n\n console.log(\"thumb loaded\");\n\n self.URL = thumb.src;\n self.FileName = input[0].files[0].name;\n\n //\n self.element.find(\".no-image\").removeClass(\"no-image\");\n\n self.imagePanel.croppie(\"destroy\");\n\n self.croppieItem = self.imagePanel.croppie({\n viewport: {\n width: iwScaled,\n height: ihScaled\n },\n boundary: {\n width: iwScaled,\n height: ihScaled\n },\n enableExif: true,\n enableZoom: false\n });\n\n self.imagePanel.croppie(\"bind\", {\n url: self.URL\n });\n\n console.log({ iwScaled: iwScaled, ihScaled: ihScaled });\n console.log(\"saving to server\");\n\n //dont understand why yet\n setTimeout(function () {\n\n self.croppieItem.croppie('result', {\n type: 'blob',\n size: 'original',\n quality: 1\n }).then(function (resp) {\n console.log(resp);\n var formData = new FormData();\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\n formData.append('blob', resp, \"fileupload.png\");\n\n self.AddData = formData;\n self.save(e);\n });\n }, 200);\n };\n thumb.src = canvas.toDataURL(\"image/png\", 1);\n };\n img.src = URL.createObjectURL(input[0].files[0]);\n }\n });\n\n var filePicker = self.element.find(\".image-picker[data-for=\" + id + \"]\");\n filePicker.off(\"click.uploadFile\").on(\"click.uploadFile\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n self.input.trigger(\"click\");\n });\n self.removeCroppie.off(\"click\").on(\"click\", function (e) {\n self.form.addClass(\"no-image\");\n if (self.croppieItem) {\n self.imagePanel.croppie(\"destroy\");\n self.croppieItem = self.imagePanel.croppie({\n viewport: {\n width: self.props.ImageW,\n height: self.props.ImageH\n },\n boundary: {\n width: self.props.ImageW,\n height: self.props.ImageH\n },\n enableExif: true,\n enableZoom: false\n });\n\n self.imagePanel.croppie(\"bind\", {\n url: self.URL\n });\n }\n });\n\n self.saveCroppie.off(\"click\").on(\"click\", function (e) {\n\n console.log(\"saving to server\");\n\n self.croppieItem.croppie('result', {\n type: 'blob',\n size: {\n width: self.props.ImageW,\n height: self.props.ImageH\n }\n }).then(function (resp) {\n var formData = new FormData();\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\n formData.append('blob', resp, \"fileupload.blob\");\n\n self.AddData = formData;\n self.save(e);\n });\n });\n\n self.scaleCroppie.off().on(\"click\", function () {});\n\n ////bind essential props ////\n //disabled\n bindDisabled();\n //displayed\n bindDisplayed();\n //value\n bindValue();\n\n //return $ element\n //self.props.DOM = elementDom;\n //set update function\n self.item.update = self.update;\n\n //self.saveSubscribe.push(self.save);\n\n return elementDom;\n };\n\n this.save = function (e) {\n Shared.setBusy(self.form, true);\n $.ajax({\n url: \"/Assessment/AttachFile\",\n type: 'post',\n data: self.AddData,\n contentType: false,\n processData: false,\n success: function success(data) {\n Shared.setBusy(self.form, false);\n if (data.success == JBErrorCode.Error) {\n window.gsAlert.dialog({\n type: \"danger\",\n dialogClass: \"simple-dlg\",\n title: \"Some thing went wrong\",\n des: data.message,\n btnok_text: \"OK\",\n btnclose_text: \"Cancel\",\n success: function success(result) {},\n close: function close(result) {}\n });\n return;\n }\n\n alertify.success(\"upload image successful\");\n\n self.props[self.props.valueProp] = data.ID;\n self.item[self.props.valueProp] = data.ID;\n\n //more about size of image\n self.item[\"ImageW\"] = self.props[\"ImageW\"];\n self.item[\"ImageH\"] = self.props[\"ImageH\"];\n\n self.props.onChange(null, self.props, e); //data, this, event\n }\n });\n };\n\n //get props\n this.getProps = function () {\n\n //\n //self.props[\"imageWidth\"] = self.image.width();\n //self.props[\"imageHeight\"] = self.image.height();\n //console.log({\n // w: self.image.width(),\n // h: self.image.height()\n //});\n\n return self.props;\n };\n //set props\n this.setProps = function (props) {\n self.props = _extends({}, self.props, props);\n bindDisabled();\n bindDisplayed();\n bindValue();\n };\n\n function bindDisabled() {\n if (self.element == null) {\n return;\n }\n\n if (self.props.disabled === true) {\n self.element.find(\".image-actions\").remove();\n self.answerArea.find(\".image-picker\").remove();\n self.answerArea.find(\".input[type='file']\").remove();\n }\n }\n function bindDisplayed() {\n if (self.element == null) {\n return;\n }\n if (self.props.displayed === false) {\n self.element.hide();\n } else {\n self.element.show();\n }\n\n if (self.props.disabled === true) {\n self.answerArea[0].style.display = \"none\";\n } else {\n self.answerArea[0].style.display = \"inline-block\";\n }\n }\n function bindValue() {\n if (self.element == null) {\n return;\n }\n self.questionArea.html(getVocative(self.props[\"Question\"]));\n //self.answerArea.html(self.props[self.props.valueProp]);\n }\n\n this.update = function () {\n self.props = _extends({}, self.props, self.item);\n bindDisabled();\n bindDisplayed();\n //bindValue();\n //self.questionArea.focus();\n };\n\n return this;\n}\n\nfunction QuestionVideo() {\n\n var video = new videoRecord();\n this.render = video.render;\n return this;\n}\n\nfunction RenderQuestion(Type, item, activeItem, dataChangeCallBack, saveSubscribe, height) {\n var qaElement = null;\n switch (Type) {\n case \"Text\":\n qaElement = new QuestionText();\n break;\n case \"Scale\":\n qaElement = new QuestionScale();\n break;\n case \"YesNo\":\n qaElement = new QuestionYesNo();\n break;\n case \"Option\":\n qaElement = new QuestionOption();\n break;\n case \"Video\":\n qaElement = new QuestionVideo();\n break;\n case \"Date\":\n qaElement = new QuestionDate();\n break;\n case \"Number\":\n qaElement = new QuestionNumber();\n break;\n case \"Attachment\":\n qaElement = new QuestionAttachment();\n break;\n case \"Mood\":\n qaElement = new QuestionMood();\n break;\n case \"Image\":\n qaElement = new QuestionImage();\n break;\n }\n qaElement.saveSubscribe = saveSubscribe;\n var nodeDom = qaElement.render(item, _extends({}, item, { onChange: dataChangeCallBack, height: height }));\n\n if (item.AskAttachmentId != null) {\n createDownloadSection(item, nodeDom);\n }\n return nodeDom;\n}\n\nfunction createDownloadSection(itemData, itemElement) {\n var attachment = $(\"
\\n
\" + (itemData.AskAttachmentName || \"\") + \" - \" + convertByteSize(itemData.AskAttachmentSize) + \"
\\n
Download
\\n
\");\n //\n attachment.insertAfter(itemElement.find(\".qa-ask[data-for=\" + itemData.DomId + \"]\"));\n $(\"
\").insertAfter(attachment);\n var download = $('.qa-download', attachment).show();\n download.off(\"click.downLoad\").on(\"click.downLoad\", function () {\n itemData.IsDownloadedAttachment = true;\n $.post(\"/Assessment/MarkQuestionDownloaded\", { ContactTemplateResponderDetailsId: itemData.ContactTemplateResponderDetailsID }, function () {});\n window.location.href = \"/Assessment/GetDocumentByDocumentId?id=\" + itemData.AskAttachmentId;\n });\n}\n\nfunction convertByteSize(size) {\n if (size >= 1024 * 1024) {\n //MB\n return (size / 1024 / 1024).toFixed(1) + 'MB';\n } else {\n return (size / 1024).toFixed(1) + 'KB';\n }\n}\n\nfunction preventEventIf(e, disabled) {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return true;\n }\n return false;\n};\n\nfunction getVocative(str) {\n var _responder = window.assessmentInfor;\n\n if (str == null || _responder == null) {\n return str;\n }\n var _he = \"he\";\n var _He = \"He\";\n var _his = \"his\";\n var _His = \"His\";\n var _him = \"him\";\n var _Him = \"Him\";\n var _himSelf = \"himself\";\n var _HimSelf = \"Himself\";\n\n var _she = \"she\";\n var _She = \"She\";\n var _her = \"her\";\n var _Her = \"Her\";\n var _herSelf = \"herself\";\n var _HerSelf = \"Herself\";\n\n var _heshe = _responder.ContactFirstName || _responder.ContactLastName;\n var _HeShe = _responder.ContactFirstName || _responder.ContactLastName;\n var _hisher = (_responder.ContactFirstName || _responder.ContactLastName) + \"'s\";\n var _HisHer = (_responder.ContactFirstName || _responder.ContactLastName) + \"'s\";\n var _himher = \"them\";\n var _HimHer = \"Them\";\n var _himherSelf = \"themself\";\n var _HimHerSelf = \"Themself\";\n\n var _jobTitle = _responder.JobTitle ? _responder.JobTitle : \"\";\n var _jobLocation = _responder.JobLocation ? _responder.JobLocation : \"\";\n str = str.replace(\"{Location}\", _jobLocation).replace(\"{VacancyPosition}\", _jobTitle);\n\n if (_responder.Gender && _responder.Gender.toLowerCase() == \"ma\") {\n str = str.replace(/{Responder:heshe}/g, _he).replace(/{Responder:HeShe}/g, _He).replace(/{Responder:hisher}/g, _his).replace(/{Responder:HisHer}/g, _His).replace(/{Responder:himher}/g, _him).replace(/{Responder:HimHer}/g, _Him).replace(/{Responder:himselfherself}/g, _himSelf).replace(/{Responder:HimselfHerself}/g, _HimSelf);\n } else if (_responder.Gender && _responder.Gender.toLowerCase() == \"fe\") {\n str = str.replace(/{Responder:heshe}/g, _she).replace(/{Responder:HeShe}/g, _She).replace(/{Responder:hisher}/g, _her).replace(/{Responder:HisHer}/g, _Her).replace(/{Responder:himher}/g, _her).replace(/{Responder:HimHer}/g, _Her).replace(/{Responder:himselfherself}/g, _herSelf).replace(/{Responder:HimselfHerself}/g, _HerSelf);\n } else {\n str = str.replace(/{Responder:heshe}/g, _heshe).replace(/{Responder:HeShe}/g, _HeShe).replace(/{Responder:hisher}/g, _hisher).replace(/{Responder:HisHer}/g, _HisHer).replace(/{Responder:himher}/g, _himher).replace(/{Responder:HimHer}/g, _HimHer).replace(/{Responder:himselfherself}/g, _himherSelf).replace(/{Responder:HimselfHerself}/g, _HimHerSelf);\n }\n\n return str.replace(/{Responder:FirstName}/ig, _responder.ContactFirstName).replace(/{Responder:LastName}/ig, _responder.ContactLastName);\n}\n\nwindow._RenderQuestion = RenderQuestion;\n\n\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// Course/CourseNew/course_main.bundle.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1230);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fdcae33949839c1e76f4","import { RenderQuestion } from './QuestionTypes'\r\n(() => {\r\n ////courseid\r\n ////ActiveSlide\r\n var _$main = null;\r\n var _callback = null;\r\n var slideId = null;\r\n var parentItem = [];\r\n var assigneeId = null;\r\n var reviewers = null;\r\n var _csWidth;\r\n var _csHeight;\r\n var _scale;\r\n var _saveSubscribe = [];\r\n\r\n var _$courseCenter = null\r\n $(document).ready(function () {\r\n _$main = $(\"#course_main\")\r\n _$courseCenter = _$main.find(\".course_center\")\r\n $(document).keyup(function (e) {\r\n if (e.keyCode === 27) {\r\n closeCourseDialog(); // esc\r\n }\r\n });\r\n\r\n $(\"body\").off(\"click\", \"#course_main .item-text a\").on(\"click\", \"#course_main .item-text a\", function () {\r\n if ($(this).attr(\"target\")) {\r\n window.open($(this).attr(\"href\"), '_blank');\r\n }\r\n else {\r\n window.location.replace($(this).attr(\"href\"));\r\n }\r\n });\r\n\r\n window.showCourse = function (callback) {\r\n _callback = callback;\r\n\r\n _$main.find(\".course_close\").off().click(function () {\r\n\r\n saveCurrentQuestion(\r\n //call this after save current Question//\r\n function () {\r\n closeCourseDialog();\r\n }\r\n );\r\n })\r\n\r\n _$main.find(\".slide_finish\").off().click(function () {\r\n\r\n if (checkallQuestionIsCorrect() == false) {\r\n $(\"#try-again-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#try-again-message\").off().click(function () {\r\n $(\"#try-again-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n\r\n return;\r\n }\r\n\r\n\r\n saveCurrentQuestion(\r\n //call this after save current Question//\r\n function () {\r\n\r\n $.post(\"/AddEditCourse/SetFinishCourse\", {\r\n contactid: window.course.ContactId,\r\n CourseId: window.course.CourseId,\r\n reviewerId: window.User.ContactId = \"00000000-0000-0000-0000-000000000000\" ? window.course.ContactId : window.User.ContactId\r\n }, function () {\r\n closeCourseDialog();\r\n })\r\n\r\n }\r\n );\r\n })\r\n\r\n window.utilities.setLoading(true);\r\n\r\n $.ajax({\r\n url: '/Course/GetContactCourseDetails',\r\n data: { contactcourseid },\r\n type: 'GET',\r\n success: function (data) {\r\n $(\"body\").addClass(\"show-course\");\r\n\r\n _$main.detach();\r\n _$main.appendTo(\"body\");\r\n _$main.addClass(\"active\");\r\n\r\n window.course = data;\r\n\r\n window.assessmentInfor = {\r\n ContactFirstName: data.ResponderFirstname,\r\n ContactLastName: data.ResponderLastname,\r\n Gender: data.ResponderGender\r\n }\r\n if (data.ListSlide && data.ListSlide.length > 0) {\r\n if (slideId) {\r\n window.ActiveSlide = data.ListSlide.find(x => x.SlideId == slideId);\r\n }\r\n else {\r\n window.ActiveSlide = data.ListSlide[0];\r\n }\r\n displayActiveSlide();\r\n }\r\n else {\r\n window.openDialogInfor({\r\n title: \"Empty course\",\r\n des: \"This course is empty\",\r\n success: function (result) {\r\n },\r\n close: function (result) {\r\n },\r\n })\r\n }\r\n\r\n window.utilities.setLoading(false);\r\n\r\n _csWidth = _$main.find(\".course_slide_details\").width() - 33.333;\r\n _csHeight = _$main.find(\".course_slide_details\").height() - 33.333;\r\n\r\n _scale = Math.min(_csWidth / 900, _csHeight / 675);\r\n _$courseCenter.css({ width: 900, height: 675 })\r\n $(\".review-section\").css({ width: 900 })\r\n }\r\n });\r\n }\r\n })\r\n\r\n function closeCourseDialog() {\r\n\r\n _$main.removeClass(\"active\");\r\n _$main.detach();\r\n _$main.appendTo(\"body\");\r\n\r\n $(\"body\").removeClass(\"show-course\");\r\n\r\n //reload list\r\n parentItem = [];\r\n //course.loadList();\r\n if (_callback) {\r\n _callback(true);//this is global callbacks\r\n $(\".img_logo_header\").removeClass(\"img_logo_header-absolute\");\r\n $(\".img_logo_header\").css({ \"width\": \"100%\", \"height\": \"100%\" });\r\n }\r\n }\r\n\r\n\r\n function bindCourseStep() {\r\n var listSlide = window.course.ListSlide;\r\n\r\n var _$step = _$main.find(\".course_step\");\r\n var _$slide_prev = _$main.find(\".slide_prev\");\r\n var _$slide_next = _$main.find(\".slide_next\");\r\n var _$slide_finish = _$main.find(\".slide_finish\");\r\n let index = window.course.ListSlide.findIndex(x => x.SlideId == window.ActiveSlide.SlideId);\r\n if (index >= window.course.ListSlide.length - 1) {\r\n _$slide_next.css({ \"display\": \"none\" })\r\n _$slide_finish.css({ \"display\": \"flex\" })\r\n }\r\n else {\r\n _$slide_next.css({ \"display\": \"flex\" })\r\n _$slide_finish.css({ \"display\": \"none\" })\r\n }\r\n\r\n if (index <= 0) {\r\n _$slide_prev.addClass(\"btn__disabled\");\r\n }\r\n else {\r\n _$slide_prev.removeClass(\"btn__disabled\");\r\n }\r\n\r\n _$step.empty();\r\n _$slide_prev.off();\r\n _$slide_next.off();\r\n\r\n //bind slide step\r\n for (let [index, slide] of Object.entries(listSlide)) {\r\n let _$gotoSlide = $(``)\r\n _$gotoSlide.click(function () {\r\n\r\n if (checkallQuestionIsCorrect() == false) {\r\n $(\"#try-again-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#try-again-message\").off().click(function () {\r\n $(\"#try-again-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n\r\n return;\r\n }\r\n\r\n window.ActiveSlide = window.course.ListSlide[index];\r\n displayActiveSlide();\r\n })\r\n _$gotoSlide.appendTo(_$step)\r\n }\r\n\r\n //bind prev\r\n if (!_$slide_prev.hasClass(\"btn__disabled\")) {\r\n _$slide_prev.click(function () {\r\n let index = window.course.ListSlide.findIndex(x => x.SlideId == window.ActiveSlide.SlideId);\r\n console.log(\"index\", index)\r\n\r\n if (index > 0) index--;\r\n window.ActiveSlide = window.course.ListSlide[index];\r\n displayActiveSlide();\r\n })\r\n }\r\n\r\n //bind next\r\n if (!_$slide_next.hasClass(\"btn__disabled\")) {\r\n _$slide_next.click(function () {\r\n\r\n if (checkallQuestionIsCorrect() == false) {\r\n $(\"#try-again-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#try-again-message\").off().click(function () {\r\n $(\"#try-again-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n\r\n return;\r\n }\r\n\r\n saveCurrentQuestion();\r\n let index = window.course.ListSlide.findIndex(x => x.SlideId == window.ActiveSlide.SlideId);\r\n console.log(\"index\", index)\r\n\r\n if (index < window.course.ListSlide.length - 1) index++;\r\n window.ActiveSlide = window.course.ListSlide[index];\r\n displayActiveSlide();\r\n })\r\n }\r\n }\r\n\r\n function markAsReadSlide() {\r\n window.ActiveSlide.IsViewed = true;\r\n $.post(\"/AddEditCourse/MarkAsReadSlide\", { SlideId: window.ActiveSlide.SlideId, ContactCourseId: contactcourseid, contactID: window.User.ContactId == \"00000000-0000-0000-0000-000000000000\" ? window.course.ContactId : window.User.ContactId }, function (data) {\r\n\r\n console.log(\"________mark as read for question___________\", data);\r\n })\r\n }\r\n\r\n function saveCurrentQuestion(_saveQuestioncallback) {\r\n ;\r\n let _requestNum = 0;\r\n if (window.ActiveSlide && window.ActiveSlide.SlideContentList && window.ActiveSlide.SlideContentList.length > 0) {\r\n let assigneeQuestionList = window.ActiveSlide.SlideContentList.filter(x => x.ContentTypeName == \"Interactive Responder\").map(x => x.Question);\r\n if (assigneeQuestionList && assigneeQuestionList.length > 0) {\r\n _requestNum += assigneeQuestionList.length;\r\n\r\n }\r\n if (reviewerQuestionList && reviewerQuestionList.length > 0) {\r\n _requestNum += reviewerQuestionList.length;\r\n }\r\n\r\n\r\n console.log({ \"Remaining\": _requestNum })\r\n if (_requestNum == 0 && _saveQuestioncallback) {\r\n _saveQuestioncallback();\r\n }\r\n\r\n if (assigneeQuestionList && assigneeQuestionList.length > 0) {\r\n for (let qa of assigneeQuestionList) {\r\n if (qa != null) {\r\n let params = { ...qa };\r\n params.ContactCourseId = window.contactcourseid;\r\n $.post(\"/AddEditCourse/SaveActiveAnswer\", params, function (data) {\r\n\r\n console.log(\"________update for reviewer question___________\", data);\r\n _requestNum--;\r\n if (_requestNum == 0) {\r\n console.log(\"done request!!\")\r\n if (_requestNum == 0 && _saveQuestioncallback) {\r\n _saveQuestioncallback();\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n let reviewerQuestionList = window.ActiveSlide.SlideContentList.filter(x => x.ContentTypeName == \"Interactive Reviewer\").map(x => x.Question);\r\n\r\n if (reviewerQuestionList && reviewerQuestionList.length > 0) {\r\n for (let qa of [...reviewerQuestionList]) {\r\n if (qa != null) {\r\n let params = { ...qa };\r\n params.ContactCourseId = window.contactcourseid;\r\n $.post(\"/AddEditCourse/SaveActiveAnswer\", params, function (data) {\r\n\r\n console.log(\"________update for reviewer question___________\", data);\r\n _requestNum--;\r\n if (_requestNum == 0) {\r\n console.log(\"done request!!\")\r\n if (_requestNum == 0 && _saveQuestioncallback) {\r\n _saveQuestioncallback();\r\n }\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n else {\r\n _saveQuestioncallback();\r\n }\r\n }\r\n\r\n function displayActiveSlide() {\r\n markAsReadSlide();\r\n $(\".course_bottom\").css({ \"display\": \"flex\" })\r\n var _$center = _$main.find(\".course_center\");\r\n _$center.empty();\r\n $(\".review-section\").remove();\r\n bindCourseStep();\r\n\r\n let slide = window.ActiveSlide;\r\n console.log(\"Display Slide\", window.ActiveSlide);\r\n\r\n _$main.removeClass(\"has_video_bg\")\r\n //display backgroud\r\n if (slide.Description && $(slide.Description).find(\".fr-video\").length > 0) {\r\n var src = $($(slide.Description).find(\".fr-video\")[0]).find(\"iframe\").attr(\"src\");\r\n if (src.indexOf(\"?\") > -1) {\r\n var id = src.split(\"?\")[0].split(\"embed/\")[1];\r\n src += `&autoplay=1&controls=0&disablekb=1&loop=1&rel=0&showinfo=0&color=white&iv_load_policy=3&playlist=${id}`;\r\n }\r\n else {\r\n var id = src.split(\"embed/\")[1];\r\n src += `?autoplay=1&controls=0&disablekb=1&loop=1&rel=0&showinfo=0&color=white&iv_load_policy=3&playlist=${id}`;\r\n }\r\n\r\n var tempDom = $($(slide.Description).find(\".fr-video\")[0]).find(\"iframe\").attr(\"src\", src).attr(\"allow\", \"autoplay\").addClass(\"ytb-iframe\");\r\n\r\n var video = tempDom[0].outerHTML;\r\n _$center.append(video);\r\n _$center.addClass(\"has_video_bg\")\r\n }\r\n else if (slide.UrlBackground) {\r\n _$center.css(\"background-image\", `url('${slide.UrlBackground}')`);\r\n //_$center.css(\"background-repeat\", \"no-repeat\");\r\n //_$center.css(\"background-size\", \"100%\");\r\n _$center.css(\"opacity\", \"0.99\");\r\n }\r\n else {\r\n _$center.css(\"background\", \"#fff\");\r\n }\r\n\r\n for (let item of slide.SlideContentList) {\r\n ////display text///\r\n if (item.ContentTypeName == \"Text\") {\r\n console.log(\"Froala editor init\");\r\n let id = `${window.StringUtils.makeId(6)}`;\r\n let _$itemHtml = $(`\r\n
${item.ContentText}
`)\r\n _$itemHtml.appendTo(_$center);\r\n\r\n let frEditor = new FroalaEditor(`#${id}`, {\r\n key: '6LF5g1D4C3I3C5B3E4F-11SLJCKHXOSLMc1YGSGb1ZXHSe1CgB5A4D4A3E3C2A10A19B6B2==',\r\n toolbarInline: true,\r\n charCounterCount: false,\r\n attribution: false,\r\n fontSizeDefaultSelection: '24',\r\n fontSizeSelection: true,\r\n heightMax: $(_$itemHtml).height(),\r\n events: {\r\n 'initialized': function () {\r\n frEditor.html.set(item.ContentText);\r\n frEditor.edit.off();\r\n },\r\n\r\n }\r\n })\r\n }\r\n else if (item.ContentTypeName == \"Image\") {\r\n let _$itemHtml = $(`\r\n `)\r\n _$itemHtml.appendTo(_$center);\r\n }\r\n else if (item.ContentTypeName == \"Video\") {\r\n if (item.ContentText) {\r\n var youtubeId = getYoutubeId(item.ContentText);\r\n if (youtubeId.includes(\"youtu\")) {\r\n let _$itemHtml = $(`\r\n `)\r\n _$itemHtml.appendTo(_$center);\r\n }\r\n else if (Shared.isValidUrl(item.ContentTex)) {\r\n let _$itemHtml = $(`\r\n `)\r\n _$itemHtml.appendTo(_$center);\r\n }\r\n else {\r\n let _$itemHtml = $(`\r\n \r\n `)\r\n _$itemHtml.appendTo(_$center);\r\n }\r\n }\r\n\r\n }\r\n else if (item.ContentTypeName == \"Interactive Responder\") {\r\n var _$wrapElement = $(`
`);\r\n _$wrapElement.appendTo(_$center);\r\n var _$qaElement = RenderQuestion(item.Question.QuestionType, item.Question, item.Question, onDataChange, _saveSubscribe);\r\n _$qaElement.appendTo(_$wrapElement);\r\n\r\n _$qaElement.find(\".preview_video\").css(\"height\", item.Height - _$qaElement.find(\".qa-area\").height());\r\n }\r\n //this is list question\r\n else if (item.ContentTypeName == \"Interactive Reviewer\") {\r\n\r\n if (item.Question) {\r\n console.log(\"____________review_____________\")\r\n var _$wrapElement = $(`
`);\r\n _$wrapElement.appendTo(_$center);\r\n var _$qaElement = RenderQuestion(item.Question.QuestionType, item.Question, item.Question, onDataChange, _saveSubscribe);\r\n _$qaElement.appendTo(_$wrapElement);\r\n\r\n _$qaElement.find(\".preview_video\").css(\"height\", item.Height - _$qaElement.find(\".qa-area\").height());\r\n }\r\n }\r\n else if ((item.ContentText || \"\").includes(\"google.com/\")) {\r\n $(``).appendTo(_$center);\r\n }\r\n else if (item.ContentTypeName == \"Power point\" || item.ContentTypeName == \"Word Document\") {\r\n $(``).appendTo(_$center);\r\n }\r\n else if (item.ContentTypeName == \"Pdf document\") {\r\n $(`\r\n \r\n `).appendTo(_$center);\r\n }\r\n }\r\n\r\n _$center.css({ zoom: `${100 * _scale}%` })\r\n }\r\n\r\n function onDataChange(changedVal, qa, e, CanMoveNext, moveStatus) {\r\n\r\n // console.log('item changed!!! ', qa);\r\n\r\n\r\n if (qa.CorrectAnswerOption) {\r\n if (qa.type == \"YesNo\") {\r\n if ((qa.CorrectAnswerOption == \"true\" && qa.YesNoAnswer == true) || (qa.CorrectAnswerOption == \"false\" && qa.YesNoAnswer == false)) {\r\n $(\"#great-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#great-message .gs-dismiss\").off().click(function () {\r\n $(\"#great-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n }\r\n else {\r\n $(\"#try-again-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#try-again-message\").off().click(function () {\r\n $(\"#try-again-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n }\r\n }\r\n\r\n if (qa.type == \"Option\") {\r\n\r\n if (qa.CorrectAnswerOption.split(\",\").includes(qa[`Option${qa.SelectedOptionNumber}`])) {\r\n $(\"#great-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#great-message .gs-dismiss\").off().click(function () {\r\n $(\"#great-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n }\r\n else {\r\n $(\"#try-again-message\").dialog({\r\n modal: true, dialogClass: \"simple-dlg course-notify-message\",\r\n width: 300,\r\n autoOpen: true,\r\n resizable: false,\r\n title: \"\",\r\n open: function () {\r\n $(\"#try-again-message\").off().click(function () {\r\n $(\"#try-again-message\").dialog(\"close\");\r\n })\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n function checkallQuestionIsCorrect() {\r\n var valid = true;\r\n for (let content of window.ActiveSlide.SlideContentList) {\r\n let question = content.Question;\r\n if (question && question.CorrectAnswerOption) {\r\n if (question.QuestionType == \"YesNo\") {\r\n if ((question.CorrectAnswerOption == \"true\" && question.YesNoAnswer == false)\r\n || (question.CorrectAnswerOption == \"false\" && question.YesNoAnswer == true)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n\r\n if (question.QuestionType == \"Option\") {\r\n if (!question.CorrectAnswerOption.split(\",\").includes(question[`Option${question.SelectedOptionNumber}`])) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n function getYoutubeId(url) {\r\n var regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\r\n var match = url.match(regExp);\r\n\r\n if (match && match[2].length === 11) {\r\n return \"https://www.youtube.com/embed/\" + match[2] + \"?rel=0&enablejsapi=1\"\r\n } else {\r\n return url;\r\n }\r\n }\r\n\r\n function getPDFId(url) {\r\n if (url.includes(\"id=\")) {\r\n var startIndex = url.indexOf(\"id=\") + 3;\r\n var endIndex = url.indexOf(\"/\", startIndex);\r\n if (endIndex != -1) {\r\n return url.substring(startIndex, endIndex);\r\n }\r\n else {\r\n return url.substring(startIndex);\r\n }\r\n }\r\n\r\n if (url.includes(\"key=\")) {\r\n var startIndex = url.indexOf(\"key=\") + 4;\r\n var endIndex = url.indexOf(\"#\", startIndex);\r\n return url.substring(startIndex, endIndex);\r\n }\r\n\r\n if (url.includes(\"/d/\")) {\r\n var startIndex = url.indexOf(\"/d/\") + 3;\r\n var endIndex = url.indexOf(\"/\", startIndex);\r\n return url.substring(startIndex, endIndex);\r\n }\r\n }\r\n\r\n})()\n\n\n// WEBPACK FOOTER //\n// ./Course/CourseNew/course_main.js","\r\n////////////////////Question Types///////////////////////\r\nfunction QuestionText() {\r\n let self = this;\r\n this.props = {\r\n type: \"Text\",\r\n valueProp: \"TextAnswer\",\r\n element: null,\r\n questionArea: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n self.props = { ...self.props, ...props };\r\n let id = `txt_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n //create template \r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
\r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.textarea[data-for=${id}]`);\r\n\r\n self.answerArea.data(\"QuestionText\", self);\r\n\r\n ////bind handler ///\r\n var searchVal = null;\r\n var lastTxt = null;\r\n self.answerArea.off(\"propertychange change paste input\")\r\n .on(\"propertychange change paste input\", (e) => {\r\n let searchTxt = $(e.target).html();\r\n searchVal = setTimeout(function () {\r\n if (searchTxt == $(e.target).html() && searchTxt != lastTxt) {\r\n lastTxt = searchTxt;\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (typeof self.props.onChange == \"function\") {\r\n var changedVal = $(e.target).html();\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;\r\n self.props.onChange(changedVal, self.props, e);//data, this, event\r\n }\r\n }\r\n }, 250);\r\n });\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update\r\n\r\n return elementDom;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed()\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea.attr('contenteditable', false);\r\n }\r\n else {\r\n self.answerArea.attr('contenteditable', true);\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n self.answerArea.html(self.props[self.props.valueProp]);\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n //self.questionArea.focus();\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionAttachment() {\r\n let self = this;\r\n this.props = {\r\n type: \"Attachment\",\r\n valueProp: \"AttachmentName\",\r\n element: null,\r\n questionArea: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n self.props = { ...self.props, ...props };\r\n let id = `att_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n //create template \r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
\r\n \r\n
Drag and drop or upload file
\r\n
${self.props[\"QuestionAttachmentName\"] || \"\"} - ${convertByteSize(self.props[\"QuestionAttachmentSize\"])}
\r\n
Download
\r\n
\r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.filePicker[data-for=${id}]`);\r\n self.input = elementDom.find(`input[data-for=${id}]`);\r\n self.form = elementDom.find(`.qa-attachment[data-for=${id}]`);\r\n self.answerArea.data(\"QuestionAttachment\", self);\r\n\r\n ////bind handler ///\r\n self.input\r\n .off(\"change\")\r\n .on(\"change\", function (e) {\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (typeof self.props.onChange == \"function\") {\r\n var input = self.input;\r\n\r\n var file = new File([input[0].files[0]], input[0].files[0].name);\r\n var formData = new FormData();\r\n formData.append('filename', file.name);\r\n formData.append('blob', file);\r\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\r\n self.element.find(`.qa-fileName[data-for=${id}]`).text(`${file.name} - ${convertByteSize(file.size)} `).show();\r\n self.element.find(`.qa-download[data-for=${id}]`).show();\r\n input.val(\"\");\r\n\r\n self.URL = URL.createObjectURL(file);\r\n self.FileName = file.name;\r\n\r\n self.props[self.props.valueProp] = file.name;\r\n self.item[self.props.valueProp] = file.name;\r\n //self.props.onChange(null, self.props, e);//data, this, event\r\n self.AddData = formData;\r\n self.save(e);\r\n }\r\n })\r\n //bind drag and drop\r\n self.form.on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n })\r\n .on('dragover dragenter', function () {\r\n self.form.addClass('is-dragover');\r\n })\r\n .on('dragleave dragend drop', function () {\r\n self.form.removeClass('is-dragover');\r\n })\r\n .on('drop', function (e) {\r\n var file = e.originalEvent.dataTransfer.files[0];\r\n var formData = new FormData();\r\n formData.append('filename', file.name);\r\n formData.append('blob', file);\r\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\r\n self.element.find(`.qa-fileName[data-for=${id}]`).text(`${file.name} - ${convertByteSize(file.size)} `).show();\r\n self.element.find(`.qa-download[data-for=${id}]`).show();\r\n\r\n self.URL = URL.createObjectURL(file);\r\n self.FileName = file.name;\r\n\r\n self.props[self.props.valueProp] = file.name;\r\n self.item[self.props.valueProp] = file.name;\r\n //self.props.onChange(null, self.props, e);//data, this, event\r\n self.AddData = formData;\r\n self.save(e);\r\n });\r\n\r\n let filePicker = self.element.find(`.filePicker[data-for=${id}]`);\r\n filePicker.off(\"click.uploadFile\").on(\"click.uploadFile\", () => {\r\n self.input.trigger(\"click\");\r\n });\r\n let download = self.element.find(`.qa-download[data-for=${id}]`);\r\n download.off(\"click.downLoad\").on(\"click.downLoad\", () => {\r\n\r\n var tempLink = document.createElement('a');\r\n document.body.appendChild(tempLink);\r\n tempLink.style.display = 'none';\r\n tempLink.href = self.URL || (`/Assessment/GetDocumentByDocumentId?id=${self.props.QuestionAttachmentId}`);\r\n tempLink.setAttribute('download', self.FileName);\r\n\r\n if (typeof tempLink.download === 'undefined') {\r\n tempLink.setAttribute('target', '_blank');\r\n }\r\n\r\n\r\n\r\n setTimeout(function () {\r\n tempLink.click();\r\n document.body.removeChild(tempLink);\r\n window.URL.revokeObjectURL(tempLink.href);\r\n\r\n }, 100)\r\n\r\n });\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update;\r\n\r\n //self.saveSubscribe.push(self.save);\r\n\r\n return elementDom;\r\n }\r\n\r\n this.save = function (e) {\r\n Shared.setBusy(self.form, true)\r\n $.ajax({\r\n url: \"/Assessment/AttachFile\",\r\n type: 'post',\r\n data: self.AddData,\r\n contentType: false,\r\n processData: false,\r\n success: function (data) {\r\n Shared.setBusy(self.form, false)\r\n if (data.success == JBErrorCode.Error) {\r\n window.gsAlert.dialog({\r\n type: \"danger\",\r\n dialogClass: \"simple-dlg\",\r\n title: \"Some thing went wrong\",\r\n des: data.message,\r\n btnok_text: \"OK\",\r\n btnclose_text: \"Cancel\",\r\n success: function (result) {\r\n },\r\n close: function (result) {\r\n },\r\n })\r\n return;\r\n }\r\n\r\n self.props[self.props.valueProp] = data.ID;\r\n self.item[self.props.valueProp] = data.ID;\r\n self.props.onChange(null, self.props, e);//data, this, event\r\n\r\n\r\n }\r\n });\r\n }\r\n\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed()\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea[0].disabled = true;\r\n self.answerArea[0].style.display = \"none\";\r\n }\r\n else {\r\n self.answerArea[0].disabled = false;\r\n self.answerArea[0].style.display = \"inline-block\";\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea[0].style.display = \"none\";\r\n }\r\n else {\r\n self.answerArea[0].style.display = \"inline-block\";\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n //self.answerArea.html(self.props[self.props.valueProp]);\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n //self.questionArea.focus();\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionNumber() {\r\n let self = this;\r\n this.props = {\r\n type: \"Number\",\r\n valueProp: \"NumberAnswer\",\r\n element: null,\r\n questionArea: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n self.props = { ...self.props, ...props };\r\n let id = `num_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n\r\n //create template \r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
Please enter a number to answer!
\r\n \r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.qa-number[data-for=${id}]`);\r\n\r\n self.answerArea.data(\"QuestionText\", self);\r\n\r\n ////bind handler ///\r\n self.answerArea\r\n .off(\"propertychange change paste input\")\r\n .on(\"propertychange change paste input\", function (e) {\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (typeof self.props.onChange == \"function\") {\r\n var changedVal = elementDom.find(`.qa-number[data-for=${id}]`).val();\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;\r\n self.props.onChange(changedVal, self.props, e);//data, this, event\r\n }\r\n })\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update\r\n\r\n return elementDom;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed()\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea.prop('disabled', true);\r\n }\r\n else {\r\n self.answerArea.prop('disabled', false);\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n self.answerArea.val(self.props[self.props.valueProp]);\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n //self.questionArea.focus();\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionDate() {\r\n let self = this;\r\n this.props = {\r\n type: \"Date\",\r\n valueProp: \"DateAnswer\",\r\n element: null,\r\n questionArea: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n self.props = { ...self.props, ...props };\r\n let id = `d_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n\r\n //create template \r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
Please enter a date to answer!
\r\n
\r\n
\r\n \r\n
\r\n
​ \r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.qa-date[data-for=${id}]`).first();\r\n self.answerArea.datepicker({\r\n dateFormat: 'dd/mm/yy',\r\n changeMonth: true,\r\n changeYear: true,\r\n yearRange: '1900:2100',\r\n beforeShow: function (input, inst) {\r\n $(inst.dpDiv).addClass('cs-datepicker');\r\n },\r\n });\r\n self.answerArea.data(\"QuestionText\", self);\r\n\r\n ////bind handler ///\r\n self.answerArea\r\n .off(\"propertychange change paste input\")\r\n .on(\"propertychange change paste input\", function (e) {\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (typeof self.props.onChange == \"function\") {\r\n var changedVal = elementDom.find(`.qa-date[data-for=${id}]`).val();\r\n if (!!changedVal) {\r\n changedVal = $.datepicker.formatDate('yy-mm-dd', elementDom.find(`.qa-date[data-for=${id}]`).datepicker(\"getDate\")) //changedVal.datepicker(\"getDate\").slice(0, 10)\r\n }\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;\r\n self.props.onChange(changedVal, self.props, e);//data, this, event\r\n }\r\n })\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update\r\n\r\n return elementDom;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed()\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea.prop('disabled', true);\r\n }\r\n else {\r\n self.answerArea.prop('disabled', false);\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n if (self.props[self.props.valueProp] != null) {\r\n self.answerArea.datepicker('setDate', new Date(parseInt(self.props[self.props.valueProp].replace(/[^0-9 +]/g, ''))));\r\n\r\n }\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n //self.questionArea.focus();\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionYesNo() {\r\n let self = this;\r\n this.props = {\r\n type: \"YesNo\",\r\n valueProp: \"YesNoAnswer\",\r\n element: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n ////this ///\r\n self.props = { ...self.props, ...props };\r\n let id = `yn_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n\r\n //create template \r\n let elementTemplate = `
\r\n
\r\n
\r\n
\r\n
Yes
\r\n
No
\r\n
\r\n
\r\n
`;\r\n\r\n //let elementWrap = $(elementTemplate);\r\n self.element = $(elementTemplate);\r\n\r\n self.questionArea = self.element.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = self.element.find(`.qa-answer[data-for=${id}]`);\r\n self.element.data(\"QuestionYesNoAnswer\", self);\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n ////bind handler ///\r\n self.element.find(`.qa-yesno-item[data-for=${id}]`).off(\"click\").on(\"click\", function (e) {\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n self.element.find(`.qa-yesno-item[data-for=${id}]`).removeClass(\"active\");\r\n\r\n let _thisItem = $(this);\r\n _thisItem.addClass(\"active\");\r\n console.log(_thisItem.data(\"val\"));\r\n\r\n if (typeof self.props.onChange == \"function\") {\r\n let changedVal = _thisItem.data(\"val\")\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;//reflect item\r\n self.props.onChange(changedVal, self.props, e, true, null);//data, this, event\r\n }\r\n })\r\n\r\n\r\n if (self.props.YesSecondary != null) {\r\n for (let secondary of self.props.YesSecondary) {\r\n let secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\r\n secondaryElement.appendTo(self.element);\r\n }\r\n }\r\n if (self.props.NoSecondary != null) {\r\n for (let secondary of self.props.NoSecondary) {\r\n let secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\r\n secondaryElement.appendTo(self.element);\r\n }\r\n }\r\n\r\n //self.props.DOM = self.element;\r\n\r\n //set update function\r\n self.item.update = self.update\r\n\r\n //return $ element\r\n return self.element;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n self.bindDisabled();\r\n self.bindDisplayed();\r\n self.bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.element.attr('disabled', true);\r\n }\r\n else {\r\n self.element.attr('disabled', false);\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n self.element.find(`.qa-yesno-item[data-for=${self.id}]`).each(function () {\r\n var _thisItem = $(this);\r\n if (_thisItem.data(\"val\") === self.props[self.props.valueProp]) {\r\n _thisItem.addClass(\"active\");\r\n }\r\n else {\r\n _thisItem.removeClass(\"active\");\r\n }\r\n });\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionOption() {\r\n let self = this;\r\n this.props = {\r\n type: \"Option\",\r\n valueProp: \"SelectedOptionNumber\",\r\n selectedOptions: \"SelectedOptions\",\r\n element: null,\r\n displayed: true,\r\n disabled: false,\r\n Option1: \"\",\r\n Option2: \"\",\r\n Option3: \"\",\r\n Option4: \"\",\r\n Option5: \"\",\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n ////this ///\r\n self.props = { ...self.props, ...props };\r\n //create template \r\n var textVal = self.props[self.props.valueProp];\r\n var id = `opt_${Math.random().toString(36).substr(2)}`;\r\n\r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
\r\n

\r\n

\r\n

\r\n

\r\n

\r\n

\r\n

\r\n

\r\n

\r\n

\r\n
\r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.id = id;\r\n self.item.DomId = id;\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.qa-answer[data-for=${id}]`);\r\n self.element.data(\"QuestionOption\", self);\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n ////bind handler ///\r\n elementDom.find(`.${id} .chk_lbl`).each(function () {\r\n let _$lbl = $(this);\r\n _$lbl.css({\r\n \"border-color\": self.props.StyleColor || \"#565656c4\",\r\n })\r\n _$lbl.off(\"click\").on(\"click\", function (e) {\r\n let _$chk = _$lbl.prev(\"input[type='checkbox']\");\r\n\r\n\r\n\r\n var otionValue = \"\";\r\n\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (self.props.AllowMultiSelectOption) {\r\n _$chk[0].checked = true;\r\n }\r\n else {\r\n // elementDom.find(`.${id} input[type='checkbox'][id^=${id}]`).attr('checked', false);\r\n //$(this).attr('checked', true);\r\n for (let item of elementDom.find(`.${id} input[type='checkbox'][id^=${id}]`)) {\r\n item.checked = false;\r\n }\r\n _$chk[0].checked = true;\r\n }\r\n\r\n if (typeof self.props.onChange == \"function\") {\r\n var changedVal = _$chk.val();\r\n if (self.props.AllowMultiSelectOption) {///for multiple\r\n if (_$chk[0].checked == true) {\r\n if (self.props[self.props.selectedOptions]) {\r\n self.props[self.props.selectedOptions] = self.props[self.props.selectedOptions] + \",\" + changedVal\r\n self.item[self.props.selectedOptions] = self.item[self.props.selectedOptions] + \",\" + changedVal\r\n }\r\n else {\r\n self.props[self.props.selectedOptions] = changedVal\r\n self.item[self.props.selectedOptions] = changedVal\r\n }\r\n }\r\n else {\r\n self.props[self.props.selectedOptions] = self.props[self.props.selectedOptions].replace(`,${changedVal}`, ``).replace(`${changedVal}`, ``);\r\n self.item[self.props.selectedOptions] = self.item[self.props.selectedOptions].replace(`,${changedVal}`, ``).replace(`${changedVal}`, ``);\r\n //self.props.onChange(changedVal, self.props, e);//data, this, event\r\n }\r\n\r\n otionValue = self.item[self.props.selectedOptions];\r\n\r\n }\r\n else {///for single\r\n if (_$chk[0].checked == true) {\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;\r\n }\r\n else {\r\n self.props[self.props.valueProp] = null;\r\n self.item[self.props.valueProp] = null;\r\n //self.props.onChange(changedVal, self.props, e);//data, this, event\r\n }\r\n\r\n otionValue = self.item[self.props.valueProp];\r\n }\r\n\r\n ////////////check if question can move next////\r\n var checkSubActionData = {\r\n CTRDsId: self.item.ContactTemplateResponderDetailsID,\r\n //OptionValue: self.item[self.props.selectedOptions],\r\n OptionValue: otionValue,\r\n ResponderType: \"Option\",\r\n }\r\n $.ajax({\r\n type: 'POST',\r\n url: \"/Assessment/GetAfterAnsweredAction\",\r\n data: checkSubActionData,\r\n\r\n success: function (data) {\r\n console.log(data);\r\n if (typeof self.props.onChange == \"function\") {\r\n var canNextQuestion = true;\r\n if (/*data.IsMoveToStatus ||*/ data.IsDirectRejection) {\r\n canNextQuestion = false;\r\n }\r\n self.props.onChange(changedVal, self.props, e, canNextQuestion, data.MoveStatus);//data, this, event\r\n }\r\n }\r\n })\r\n\r\n }\r\n })\r\n })\r\n\r\n //create secondary\r\n for (let i = 1; i <= 20; i++) {\r\n if (self.props[`Option${i}Secondary`] != null) {\r\n for (let secondary of self.props[`Option${i}Secondary`]) {\r\n let secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\r\n secondaryElement.appendTo(elementDom.find(`#${id}_${i}`).closest(`.divQuestionCheckOption.${id}`).find(\".content\"));\r\n }\r\n }\r\n }\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update\r\n return elementDom;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed();\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.element.attr('disabled', true);\r\n }\r\n else {\r\n self.element.attr('disabled', false);\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n\r\n //bind each element\r\n self.element.find(`.divQuestionCheckOption.${self.id}`).each(function (index) {\r\n var _thisItem = $(this);\r\n if (!self.props[\"Option\" + (index + 1)]) {\r\n _thisItem.hide();\r\n }\r\n })\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n if (self.props.AllowMultiSelectOption) {//////for multiple///\r\n self.element.find(`.${self.id} input[type='checkbox']`).each(function (index) {\r\n var _thisItem = $(this);\r\n let _content = _thisItem.parent().find(\".content\").html(getVocative(self.props[\"Option\" + (index + 1)]));\r\n if ((self.props.SelectedOptions || \"\").includes(_thisItem.val())) {\r\n _thisItem.attr('checked', true);\r\n }\r\n else {\r\n _thisItem.attr('checked', false);\r\n }\r\n\r\n _content.css({\r\n \"color\": self.props.StyleColor || \"inherit\",\r\n \"font-size\": self.props.StyleFontSize || \"inherit\",\r\n \"font-family\": self.props.StyleFontFamily || \"inherit\",\r\n })\r\n })\r\n }\r\n else {\r\n self.element.find(`.${self.id} input[type='checkbox']`).each(function (index) {\r\n var _thisItem = $(this);\r\n let _content = _thisItem.parent().find(\".content\").html(getVocative(self.props[\"Option\" + (index + 1)]));\r\n if (_thisItem.val() == self.props[self.props.valueProp]) {\r\n _thisItem.attr('checked', true);\r\n }\r\n else {\r\n _thisItem.attr('checked', false);\r\n }\r\n\r\n _content.css({\r\n \"color\": self.props.StyleColor || \"inherit\",\r\n \"font-size\": self.props.StyleFontSize || \"inherit\",\r\n \"font-family\": self.props.StyleFontFamily || \"inherit\",\r\n })\r\n })\r\n }\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\nfunction QuestionScale() {\r\n let self = this;\r\n this.props = {\r\n type: \"Scale\",\r\n valueProp: \"ScaleAverage\",\r\n element: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n ////this ///\r\n self.props = { ...self.props, ...props };\r\n let id = `scl_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n\r\n\r\n //create template \r\n var elementWrap = $(`
\r\n
\r\n
\r\n ${self.props.ScaleMinRange != null && self.props.ScaleMaxRange != null ?\r\n \"
\"\r\n + self.props.ScaleMinRange\r\n + \"
\"\r\n + self.props.ScaleMaxRange\r\n + \"
\" : \"\"\r\n }\r\n
`)\r\n\r\n self.element = elementWrap;\r\n self.questionArea = elementWrap.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementWrap.find(`.qa-answer[data-for=${id}]`);\r\n\r\n\r\n elementWrap.data(\"QuestionScale\", self);\r\n\r\n ////bind handler ///\r\n $.ui.slider({\r\n range: \"min\",\r\n value: self.props[self.props.valueProp],\r\n min: self.props.ScaleMinRange,\r\n max: self.props.ScaleMaxRange,\r\n step: 1,\r\n slide: function (e, ui) {\r\n elementWrap.find(\".ui-slider-handle\").first().text(self.props.HideNumberOptions ? \"\" : ui.value);//???this have to take fisrtttttttttt???\r\n },\r\n stop: function (e, ui) {\r\n\r\n var changedVal = ui.value;\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;//reflect item\r\n\r\n self.props.onChange(changedVal, self.props, e, true, null);//data, this, event\r\n\r\n },\r\n disabled: self.props.disabled\r\n }, self.answerArea)\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n if (self.props.ScaleSecondary != null) {\r\n for (let secondary of self.props.ScaleSecondary) {\r\n let secondaryElement = RenderQuestion(secondary.QuestionType, secondary, self.props.activeItem, self.props.onChange, self.saveSubscribe);\r\n secondaryElement.appendTo(elementWrap);\r\n }\r\n }\r\n\r\n //return $ element\r\n //self.props.DOM = elementWrap;\r\n //set update function\r\n self.item.update = self.update\r\n\r\n return elementWrap;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed();\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.elementWrap == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n //self.element.attr('disabled', true);\r\n //self.answerArea.slider({ disabled: true });\r\n $.ui.slider({ disabled: true }, self.answerArea)\r\n }\r\n else {\r\n //self.element.attr('disabled', false);\r\n //self.answerArea.slider({ disabled: false });\r\n $.ui.slider({ disabled: false }, self.answerArea)\r\n\r\n }\r\n }\r\n\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n }\r\n function bindValue() {\r\n\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n if (self.props[\"ScaleAverage\"]) {\r\n self.element.find(\".ui-slider-handle\").first().text(self.props[\"ScaleAverage\"]);//???this have to take fisrtttttttttt???\r\n }\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionMood() {\r\n let self = this;\r\n this.props = {\r\n type: \"Mood\",\r\n valueProp: \"SelectedOptionNumber\",\r\n element: null,\r\n questionArea: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null\r\n }\r\n this.render = function (item, props) {\r\n self.item = item;\r\n self.props = { ...self.props, ...props };\r\n let id = `moo_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n //create template \r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
\r\n
\r\n
Poor
\r\n
\r\n
\r\n
Needs Work
\r\n
\r\n
\r\n
Okay
\r\n
\r\n
\r\n
Good
\r\n
\r\n
\r\n
Excellent
\r\n
\r\n
\r\n
\r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.qa-mood[data-for=${id}]`);\r\n\r\n self.answerArea.data(\"QuestionText\", self);\r\n\r\n\r\n self.answerArea.find(`.mood-value`).off(\"click\").on(\"click\", function (e) {\r\n self.answerArea.find(`.mood-value`).removeClass(\"active\");\r\n $(this).addClass(\"active\");\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (typeof self.props.onChange == \"function\") {\r\n var changedVal = $(this).data(\"for\");\r\n self.props[self.props.valueProp] = changedVal;\r\n self.item[self.props.valueProp] = changedVal;\r\n self.props.onChange(changedVal, self.props, e);//data, this, event\r\n }\r\n })\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update\r\n\r\n return elementDom;\r\n }\r\n //get props\r\n this.getProps = function () {\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed()\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea.find(`.mood-value`).off();\r\n }\r\n\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n self.answerArea.find(`.mood-value[data-for=${self.props[self.props.valueProp]}]`).addClass(\"active\");\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n }\r\n\r\n return this;\r\n}\r\n\r\nfunction QuestionImage() {\r\n let self = this;\r\n this.props = {\r\n type: \"Image\",\r\n valueProp: \"ImageId\",\r\n element: null,\r\n questionArea: null,\r\n displayed: true,\r\n disabled: false,\r\n activeItem: null,\r\n ImageW: null,\r\n ImageH: null,\r\n }\r\n this.render = function (item, props) {\r\n \r\n self.item = item;\r\n self.props = { ...self.props, ...props };\r\n let id = `att_${Math.random().toString(36).substr(2)}`;\r\n self.id = id;\r\n self.item.DomId = id;\r\n\r\n //create template \r\n var elementTemplate =\r\n `
\r\n
\r\n
\r\n
\r\n \r\n
\r\n Upload Image\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Remove image
\r\n
\r\n
`;\r\n var elementDom = $(elementTemplate);\r\n\r\n self.element = elementDom;\r\n self.questionArea = elementDom.find(`.qa-ask[data-for=${id}]`);\r\n self.answerArea = elementDom.find(`.image-picker[data-for=${id}]`);\r\n self.input = elementDom.find(`input[data-for=${id}]`);\r\n self.form = elementDom.find(`.qa-image[data-for=${id}]`);\r\n self.answerArea.data(\"QuestionImage\", self);\r\n\r\n self.saveCroppie = elementDom.find(`.image-item-save[data-for=${id}]`);\r\n self.scaleCroppie = elementDom.find(`.image-item-scale[data-for=${id}]`);\r\n self.removeCroppie = elementDom.find(`.image-item-remove[data-for=${id}]`);\r\n\r\n self.actions = elementDom.find(`.image-actions[data-for=${id}]`);\r\n\r\n self.imagePanel = elementDom.find(`.image-wrap[data-for=${id}]`);\r\n\r\n var opts = {\r\n viewport: {\r\n width: self.props.ImageW,\r\n height: self.props.ImageH\r\n },\r\n boundary: {\r\n width: self.props.ImageW,\r\n height: self.props.ImageH\r\n },\r\n enableExif: true,\r\n enableZoom: false,\r\n enableResize: false\r\n }\r\n\r\n if (!self.props[self.props.valueProp]) {\r\n opts.boundary = {\r\n width: self.props.ImageW,\r\n height: self.props.ImageH\r\n }\r\n\r\n opts.enableZoom = true;\r\n opts.enableResize = true;\r\n }\r\n\r\n self.croppieItem = self.imagePanel.croppie(opts);\r\n\r\n if (self.props[self.props.valueProp]) {\r\n self.croppieItem.croppie('bind', {\r\n url: `/Image/GetImage?id=${self.props[self.props.valueProp]}&imageid=${id})`,\r\n });\r\n }\r\n\r\n\r\n ////bind handler ///\r\n self.input\r\n .off(\"change\")\r\n .on(\"change\", function (e) {\r\n Shared.setBusy(self.form, true)\r\n if (preventEventIf(e, self.props.disabled)) {\r\n return;\r\n }\r\n if (typeof self.props.onChange == \"function\") {\r\n var input = self.input;\r\n\r\n //var file = new File([input[0].files[0]], input[0].files[0].name);\r\n\r\n //self.URL = URL.createObjectURL(file);\r\n //self.FileName = file.name;\r\n\r\n\r\n\r\n var img = new Image;\r\n\r\n img.onload = function () {\r\n var canvas = document.createElement(\"canvas\");\r\n var ctx = canvas.getContext(\"2d\");\r\n var iw = img.width;\r\n var ih = img.height;\r\n var scale = Math.min((self.props.ImageW / iw), (self.props.ImageH / ih));\r\n var iwScaled = iw * scale;\r\n var ihScaled = ih * scale;\r\n canvas.width = iwScaled;\r\n canvas.height = ihScaled;\r\n ctx.drawImage(img, 0, 0, iwScaled, ihScaled);\r\n\r\n var thumb = new Image();\r\n thumb.onload = function () {\r\n\r\n console.log(\"thumb loaded\");\r\n\r\n\r\n self.URL = thumb.src;\r\n self.FileName = input[0].files[0].name;\r\n\r\n //\r\n self.element.find(\".no-image\").removeClass(\"no-image\");\r\n\r\n self.imagePanel.croppie(\"destroy\");\r\n\r\n self.croppieItem = self.imagePanel.croppie({\r\n viewport: {\r\n width: iwScaled,\r\n height: ihScaled\r\n },\r\n boundary: {\r\n width: iwScaled,\r\n height: ihScaled\r\n },\r\n enableExif: true,\r\n enableZoom: false,\r\n });\r\n\r\n self.imagePanel.croppie(\"bind\", {\r\n url: self.URL,\r\n });\r\n\r\n console.log({ iwScaled, ihScaled });\r\n console.log(\"saving to server\")\r\n\r\n //dont understand why yet\r\n setTimeout(function () {\r\n\r\n\r\n self.croppieItem.croppie('result', {\r\n type: 'blob',\r\n size: 'original',\r\n quality: 1,\r\n }).then(function (resp) {\r\n console.log(resp)\r\n var formData = new FormData();\r\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\r\n formData.append('blob', resp, \"fileupload.png\");\r\n\r\n self.AddData = formData;\r\n self.save(e);\r\n\r\n\r\n });\r\n\r\n }, 200);\r\n }\r\n thumb.src = canvas.toDataURL(\"image/png\", 1);\r\n\r\n }\r\n img.src = URL.createObjectURL(input[0].files[0]);\r\n\r\n\r\n\r\n\r\n\r\n }\r\n })\r\n\r\n\r\n let filePicker = self.element.find(`.image-picker[data-for=${id}]`);\r\n filePicker.off(\"click.uploadFile\").on(\"click.uploadFile\", (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n self.input.trigger(\"click\");\r\n });\r\n self.removeCroppie.off(\"click\").on(\"click\", function (e) {\r\n self.form.addClass(\"no-image\")\r\n if (self.croppieItem) {\r\n self.imagePanel.croppie(\"destroy\");\r\n self.croppieItem = self.imagePanel.croppie({\r\n viewport: {\r\n width: self.props.ImageW,\r\n height: self.props.ImageH\r\n },\r\n boundary: {\r\n width: self.props.ImageW,\r\n height: self.props.ImageH\r\n },\r\n enableExif: true,\r\n enableZoom: false,\r\n });\r\n\r\n self.imagePanel.croppie(\"bind\", {\r\n url: self.URL,\r\n });\r\n }\r\n })\r\n\r\n\r\n self.saveCroppie.off(\"click\").on(\"click\", function (e) {\r\n\r\n console.log(\"saving to server\")\r\n\r\n self.croppieItem.croppie('result', {\r\n type: 'blob',\r\n size: {\r\n width: self.props.ImageW,\r\n height: self.props.ImageH\r\n }\r\n }).then(function (resp) {\r\n var formData = new FormData();\r\n formData.append('ContactTemplateResponderDetailsID', self.props.ContactTemplateResponderDetailsID);\r\n formData.append('blob', resp, \"fileupload.blob\");\r\n\r\n self.AddData = formData;\r\n self.save(e);\r\n\r\n\r\n });\r\n\r\n\r\n\r\n })\r\n\r\n\r\n self.scaleCroppie.off().on(\"click\", function () {\r\n\r\n })\r\n\r\n ////bind essential props ////\r\n //disabled\r\n bindDisabled();\r\n //displayed\r\n bindDisplayed();\r\n //value\r\n bindValue();\r\n\r\n //return $ element\r\n //self.props.DOM = elementDom;\r\n //set update function\r\n self.item.update = self.update;\r\n\r\n //self.saveSubscribe.push(self.save);\r\n\r\n return elementDom;\r\n }\r\n\r\n this.save = function (e) {\r\n Shared.setBusy(self.form, true)\r\n $.ajax({\r\n url: \"/Assessment/AttachFile\",\r\n type: 'post',\r\n data: self.AddData,\r\n contentType: false,\r\n processData: false,\r\n success: function (data) {\r\n Shared.setBusy(self.form, false)\r\n if (data.success == JBErrorCode.Error) {\r\n window.gsAlert.dialog({\r\n type: \"danger\",\r\n dialogClass: \"simple-dlg\",\r\n title: \"Some thing went wrong\",\r\n des: data.message,\r\n btnok_text: \"OK\",\r\n btnclose_text: \"Cancel\",\r\n success: function (result) {\r\n },\r\n close: function (result) {\r\n },\r\n })\r\n return;\r\n }\r\n\r\n\r\n alertify.success(\"upload image successful\")\r\n\r\n self.props[self.props.valueProp] = data.ID;\r\n self.item[self.props.valueProp] = data.ID;\r\n\r\n //more about size of image\r\n self.item[\"ImageW\"] = self.props[\"ImageW\"];\r\n self.item[\"ImageH\"] = self.props[\"ImageH\"];\r\n\r\n\r\n\r\n \r\n self.props.onChange(null, self.props, e);//data, this, event\r\n }\r\n });\r\n }\r\n\r\n //get props\r\n this.getProps = function () {\r\n\r\n //\r\n //self.props[\"imageWidth\"] = self.image.width();\r\n //self.props[\"imageHeight\"] = self.image.height();\r\n //console.log({\r\n // w: self.image.width(),\r\n // h: self.image.height()\r\n //});\r\n\r\n return self.props;\r\n }\r\n //set props\r\n this.setProps = function (props) {\r\n self.props = { ...self.props, ...props };\r\n bindDisabled();\r\n bindDisplayed()\r\n bindValue();\r\n }\r\n\r\n function bindDisabled() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.element.find(`.image-actions`).remove();\r\n self.answerArea.find(`.image-picker`).remove();\r\n self.answerArea.find(`.input[type='file']`).remove();\r\n }\r\n }\r\n function bindDisplayed() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n if (self.props.displayed === false) {\r\n self.element.hide();\r\n }\r\n else {\r\n self.element.show();\r\n }\r\n\r\n if (self.props.disabled === true) {\r\n self.answerArea[0].style.display = \"none\";\r\n }\r\n else {\r\n self.answerArea[0].style.display = \"inline-block\";\r\n }\r\n }\r\n function bindValue() {\r\n if (self.element == null) {\r\n return;\r\n }\r\n self.questionArea.html(getVocative(self.props[\"Question\"]));\r\n //self.answerArea.html(self.props[self.props.valueProp]);\r\n }\r\n\r\n this.update = function () {\r\n self.props = { ...self.props, ...self.item }\r\n bindDisabled();\r\n bindDisplayed()\r\n //bindValue();\r\n //self.questionArea.focus();\r\n }\r\n\r\n return this;\r\n}\r\n\r\n\r\nfunction QuestionVideo() {\r\n\r\n var video = new videoRecord();\r\n this.render = video.render;\r\n return this;\r\n}\r\n\r\n\r\nfunction RenderQuestion(Type, item, activeItem, dataChangeCallBack, saveSubscribe, height) {\r\n let qaElement = null;\r\n switch (Type) {\r\n case \"Text\":\r\n qaElement = new QuestionText();\r\n break;\r\n case \"Scale\":\r\n qaElement = new QuestionScale();\r\n break;\r\n case \"YesNo\":\r\n qaElement = new QuestionYesNo();\r\n break;\r\n case \"Option\":\r\n qaElement = new QuestionOption();\r\n break;\r\n case \"Video\":\r\n qaElement = new QuestionVideo();\r\n break;\r\n case \"Date\":\r\n qaElement = new QuestionDate();\r\n break;\r\n case \"Number\":\r\n qaElement = new QuestionNumber();\r\n break;\r\n case \"Attachment\":\r\n qaElement = new QuestionAttachment();\r\n break;\r\n case \"Mood\":\r\n qaElement = new QuestionMood();\r\n break;\r\n case \"Image\":\r\n qaElement = new QuestionImage();\r\n break;\r\n }\r\n qaElement.saveSubscribe = saveSubscribe;\r\n var nodeDom = qaElement.render(item, { ...item, onChange: dataChangeCallBack, height });\r\n\r\n if (item.AskAttachmentId != null) {\r\n createDownloadSection(item, nodeDom);\r\n }\r\n return nodeDom;\r\n}\r\n\r\n\r\nfunction createDownloadSection(itemData, itemElement) {\r\n let attachment = $(`
\r\n
${itemData.AskAttachmentName || \"\"} - ${convertByteSize(itemData.AskAttachmentSize)}
\r\n
Download
\r\n
`);\r\n //\r\n attachment.insertAfter(itemElement.find(`.qa-ask[data-for=${itemData.DomId}]`));\r\n $(`
`).insertAfter(attachment);\r\n let download = $('.qa-download', attachment).show();\r\n download.off(\"click.downLoad\").on(\"click.downLoad\", () => {\r\n itemData.IsDownloadedAttachment = true;\r\n $.post(\"/Assessment/MarkQuestionDownloaded\", { ContactTemplateResponderDetailsId: itemData.ContactTemplateResponderDetailsID }, function () {\r\n\r\n });\r\n window.location.href = `/Assessment/GetDocumentByDocumentId?id=${itemData.AskAttachmentId}`;\r\n });\r\n}\r\n\r\nfunction convertByteSize(size) {\r\n if (size >= 1024 * 1024) {//MB\r\n return (size / 1024 / 1024).toFixed(1) + 'MB'\r\n }\r\n else {\r\n return (size / 1024).toFixed(1) + 'KB'\r\n }\r\n}\r\n\r\nfunction preventEventIf(e, disabled) {\r\n if (disabled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nfunction getVocative(str) {\r\n var _responder = window.assessmentInfor;\r\n\r\n if (str == null || _responder == null) {\r\n return str;\r\n }\r\n var _he = \"he\"\r\n var _He = \"He\"\r\n var _his = \"his\"\r\n var _His = \"His\"\r\n var _him = \"him\"\r\n var _Him = \"Him\"\r\n var _himSelf = \"himself\"\r\n var _HimSelf = \"Himself\"\r\n\r\n var _she = \"she\"\r\n var _She = \"She\"\r\n var _her = \"her\"\r\n var _Her = \"Her\"\r\n var _herSelf = \"herself\"\r\n var _HerSelf = \"Herself\"\r\n\r\n var _heshe = (_responder.ContactFirstName || _responder.ContactLastName)\r\n var _HeShe = (_responder.ContactFirstName || _responder.ContactLastName)\r\n var _hisher = `${_responder.ContactFirstName || _responder.ContactLastName}'s`\r\n var _HisHer = `${_responder.ContactFirstName || _responder.ContactLastName}'s`\r\n var _himher = \"them\"\r\n var _HimHer = \"Them\"\r\n var _himherSelf = \"themself\"\r\n var _HimHerSelf = \"Themself\"\r\n\r\n var _jobTitle = _responder.JobTitle ? _responder.JobTitle : \"\";\r\n var _jobLocation = _responder.JobLocation ? _responder.JobLocation : \"\";\r\n str = str.replace(\"{Location}\", _jobLocation)\r\n .replace(\"{VacancyPosition}\", _jobTitle);\r\n\r\n if (_responder.Gender && _responder.Gender.toLowerCase() == \"ma\") {\r\n str = str.replace(/{Responder:heshe}/g, _he)\r\n .replace(/{Responder:HeShe}/g, _He)\r\n .replace(/{Responder:hisher}/g, _his)\r\n .replace(/{Responder:HisHer}/g, _His)\r\n .replace(/{Responder:himher}/g, _him)\r\n .replace(/{Responder:HimHer}/g, _Him)\r\n .replace(/{Responder:himselfherself}/g, _himSelf)\r\n .replace(/{Responder:HimselfHerself}/g, _HimSelf)\r\n\r\n } else if (_responder.Gender && _responder.Gender.toLowerCase() == \"fe\") {\r\n str = str.replace(/{Responder:heshe}/g, _she)\r\n .replace(/{Responder:HeShe}/g, _She)\r\n .replace(/{Responder:hisher}/g, _her)\r\n .replace(/{Responder:HisHer}/g, _Her)\r\n .replace(/{Responder:himher}/g, _her)\r\n .replace(/{Responder:HimHer}/g, _Her)\r\n .replace(/{Responder:himselfherself}/g, _herSelf)\r\n .replace(/{Responder:HimselfHerself}/g, _HerSelf)\r\n }\r\n else {\r\n str = str.replace(/{Responder:heshe}/g, _heshe)\r\n .replace(/{Responder:HeShe}/g, _HeShe)\r\n .replace(/{Responder:hisher}/g, _hisher)\r\n .replace(/{Responder:HisHer}/g, _HisHer)\r\n .replace(/{Responder:himher}/g, _himher)\r\n .replace(/{Responder:HimHer}/g, _HimHer)\r\n .replace(/{Responder:himselfherself}/g, _himherSelf)\r\n .replace(/{Responder:HimselfHerself}/g, _HimHerSelf)\r\n }\r\n\r\n return str.replace(/{Responder:FirstName}/ig, _responder.ContactFirstName).replace(/{Responder:LastName}/ig, _responder.ContactLastName)\r\n}\r\n\r\n\r\nwindow._RenderQuestion = RenderQuestion;\r\n\r\nexport { RenderQuestion, getVocative };\n\n\n// WEBPACK FOOTER //\n// ./Course/CourseNew/QuestionTypes.js"],"sourceRoot":""}