{"version":3,"file":"sm.portal.vm.studentInbox.widget.min.js","names":["jQuery","sm","window","portal","extend","widget","InboxViewModel","this","UnreadCount","ko","observable","ReadCount","CommunicationGeneratedText","vm","custom","setCustomLocalizeKey","Messages","observableArray","MessageViewModel","UnreadMessages","computed","unread","Array","unreadCnt","i","length","msg","utility","isNullOrEmpty","Received","push","ArchivedMessages","archived","archivedCnt","NewMessageTabVisible","LoadModel","container","Payload","list","removeAll","msgModel","Loaded","IsCommError","IsError","CommErrorMessages","CommErrorHeader","HandleCommError","title","messages","getResourceValue","HandleError","header","msgs","GetModelData","studentID","url","_baseApiUri","ajax","type","dataType","contentType","headers","processData","crossDomain","xhrFields","withCredentials","success","data","textStatus","jqXHR","smapi","access","ApiContainerModel","Status","ValidationTitle","ValidationMessages","self","ui","readyPage","error","exception","statusText","responseMsg","responseText","parseJSON","Message","messageToUser","formatString","viewModel","e","NewMessage","SendMessage","communicationsArea","Communications","ExtractATO","Html","val","text","html","block","message","JSON","stringify","attr","role","setTimeout","CancelMessage","LoadCommunicationSection","unblock","animate","scrollTop","offset","top","click","CKEDITOR","instances","htmlReply","destroy","BroadcastIdentifier","ID","Subject","FromDisplay","FromAddress","ToAddress","DisplayFromAddress","DisplayHtml","Fulfilled","FulfilledDate","WaitingForResponse","ReceivedResponse","ResponseDate","GID","ReceivedDate","RelatedContactID","DateCreatedJS","source","isoDateTime","Date","DateCreated","getLocalizedDate","toLocaleTimeString","subscribe","div","find","processedHTML","ReplyToMessage","fromAddress","subject","oldContent","replace","replyTextArea","ckeditor","toolbar","uiColor","fullPage","allowedContent","ArchiveMessage","todaysDate","UpdateMessageStatus","UnArchiveMessage","messageObject","mapping","toJS","currentMessage","Profile","PrimaryEmailAddress","ContactID","_currentPersonId"],"sources":["assets/js/viewmodels/academic/sm.portal.vm.studentInbox.widget.js"],"mappings":"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","ignoreList":[],"sourcesContent":["(function (jQuery, undefined) {\r\n var sm = window.sm = window.sm || {};\r\n var windowProxy;\r\n var actionQueue = [];\r\n\r\n if (typeof sm.portal === \"undefined\") {\r\n jQuery.extend(sm, { portal: {} });\r\n }\r\n if (typeof sm.portal.widget === \"undefined\") {\r\n jQuery.extend(sm.portal, { widget: {} });\r\n }\r\n\r\n // Communications Inbox ViewModel\r\n // Multi-Part Model\r\n function InboxViewModel() {\r\n\r\n // Properties\r\n this.UnreadCount = ko.observable();\r\n this.ReadCount = ko.observable();\r\n this.CommunicationGeneratedText = ko.observable('Error');\r\n sm.portal.vm.custom.setCustomLocalizeKey(this); \r\n\r\n // Data List Properties\r\n this.Messages = ko.observableArray([new sm.portal.widget.MessageViewModel()]);\r\n\r\n // Filtered View Computed Properties\r\n this.UnreadMessages = ko.computed(function () {\r\n var unread = Array();\r\n var unreadCnt = 0;\r\n for (var i = 0; i < this.Messages().length; i++) {\r\n\r\n var msg = this.Messages()[i];\r\n if (sm.portal.utility.isNullOrEmpty(msg.Received()) || msg.Received() == false) {\r\n unread.push(msg);\r\n unreadCnt += 1;\r\n }\r\n }\r\n\r\n this.UnreadCount(unreadCnt);\r\n return unread;\r\n\r\n }, this);\r\n this.ArchivedMessages = ko.computed(function () {\r\n var archived = Array();\r\n var archivedCnt = 0;\r\n for (var i = 0; i < this.Messages().length; i++) {\r\n\r\n var msg = this.Messages()[i];\r\n if (msg.Received() == true) {\r\n archived.push(msg);\r\n archivedCnt += 1;\r\n }\r\n }\r\n\r\n this.ReadCount(archivedCnt);\r\n return archived;\r\n\r\n }, this);\r\n\r\n // Show Hide Properties\r\n this.NewMessageTabVisible = ko.observable(false);\r\n\r\n // Loading\r\n this.LoadModel = function (container) {\r\n\r\n // Set properties\r\n this.UnreadCount(container.Payload.UnreadCount);\r\n this.ReadCount(container.Payload.ReadCount);\r\n\r\n // Set list\r\n var list = container.Payload.Messages;\r\n this.Messages.removeAll();\r\n for (var i = 0; i < list.length; i++) {\r\n var msgModel = new sm.portal.widget.MessageViewModel();\r\n msgModel.LoadModel(list[i]);\r\n this.Messages.push(msgModel);\r\n }\r\n this.Loaded(true);\r\n };\r\n this.Loaded = ko.observable(false);\r\n this.IsCommError = ko.observable(false);\r\n this.IsError = ko.observable(false);\r\n this.CommErrorMessages = ko.observableArray();\r\n this.CommErrorHeader = ko.observable();\r\n this.HandleCommError = function (title, messages) {\r\n this.IsCommError(true);\r\n this.CommErrorMessages(messages);\r\n if (sm.portal.utility.isNullOrEmpty(title)) {\r\n this.CommErrorHeader(sm.portal.utility.getResourceValue('ThereWasAnError'));\r\n } else {\r\n this.CommErrorHeader(title);\r\n }\r\n };\r\n this.HandleError = function (header, msgs) {\r\n this.IsError(true);\r\n this.CommErrorMessages(msgs);\r\n if (sm.portal.utility.isNullOrEmpty(header)) {\r\n this.CommErrorHeader(sm.portal.utility.getResourceValue('ThereWasAnError'));\r\n } else {\r\n this.CommErrorHeader(header);\r\n }\r\n };\r\n\r\n // Data Retrieval (NOTE: this could be handled via the parent view model, but this is here as a stand-alone)\r\n this.GetModelData = function (studentID) {\r\n var url = _baseApiUri + 'api/student360/getprofilesection/?sec=communication&studentid=' + studentID\r\n jQuery.ajax({\r\n url: url,\r\n type: 'GET',\r\n dataType: 'json',\r\n contentType: 'application/json; charset=utf-8',\r\n headers: {\r\n \"x-api-version\": '1' //,\r\n },\r\n processData: false,\r\n crossDomain: true,\r\n\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n success: function (data, textStatus, jqXHR) {\r\n var container = new smapi.access.ApiContainerModel(data.Status, data.Payload, data.ValidationTitle, data.ValidationMessages);\r\n\r\n if (data.Status == 'success') {\r\n self.LoadModel(container);\r\n }\r\n sm.portal.ui.readyPage();\r\n },\r\n error: function (jqXHR, exception) {\r\n\r\n var statusText = jqXHR.statusText;\r\n var responseMsg = sm.portal.utility.getResourceValue('UnknownError');\r\n\r\n if (jqXHR != null && !sm.portal.utility.isNullOrEmpty(jqXHR.responseText)) {\r\n responseMsg = jQuery.parseJSON(jqXHR.responseText).Message;\r\n }\r\n var messageToUser = sm.portal.utility.formatString(\"{0} - {1}\", statusText, responseMsg);\r\n try {\r\n viewModel.HandleError(sm.portal.utility.getResourceValue('ErrorAccessingPage'), [messageToUser]);\r\n } catch (e) { }\r\n }\r\n });\r\n };\r\n\r\n // Action Functions\r\n this.NewMessage = ko.observable(new sm.portal.widget.MessageViewModel());\r\n this.SendMessage = function () {\r\n var communicationsArea = jQuery(\"#sm360Communications div.widgetContent\");\r\n var data = viewModel.Communications().NewMessage().ExtractATO();\r\n var url = _baseApiUri + sm.portal.utility.formatString('api/student360/sendmessage');\r\n\r\n\r\n // This only applies in the reply use-case, since we're including the 'original' message with\r\n // the reply. This ensures that anything that was typed into the WYSIWYG makes it back to the model.\r\n if (jQuery('#htmlReply').length > 0 && data.Html !== jQuery('#htmlReply').val()) {\r\n data.Html = jQuery('#htmlReply').val();\r\n }\r\n\t \r\n\t // encode Html\r\n data.Html = jQuery('
').text(data.Html).html();\r\n \r\n // block the appropriate widget content\r\n communicationsArea.block({ message: sm.portal.utility.getResourceValue('SendingMessage') });\r\n\r\n jQuery.ajax({\r\n url: url,\r\n type: 'POST',\r\n dataType: 'json',\r\n data: JSON.stringify(data),\r\n contentType: 'application/json; charset=utf-8',\r\n headers: {\r\n \"x-api-version\": '1' //,\r\n },\r\n processData: false,\r\n crossDomain: true,\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n success: function (data, textStatus, jqXHR) {\r\n\r\n var container = new smapi.access.ApiContainerModel(data.Status, data.Payload, data.ValidationTitle, data.ValidationMessages);\r\n if (data.Status == 'saved') {\r\n // Show the results message, hide the rest \r\n // Show Message to user of successful sent\r\n jQuery(\"div.blockUI.blockMsg\").attr({ \"role\": \"alert\", \"aria-live\": \"polite\"});\r\n jQuery(\"div.blockUI.blockMsg\").html(sm.portal.utility.getResourceValue('MessageSent_Exclamation'));\r\n \r\n setTimeout(function () {\r\n viewModel.Communications().IsCommError(false);\r\n viewModel.Communications().CommErrorHeader(\"\");\r\n viewModel.Communications().CommErrorMessages([]);\r\n\r\n viewModel.Communications().CancelMessage();\r\n viewModel.LoadCommunicationSection();\r\n\r\n viewModel.Communications().NewMessageTabVisible(false);\r\n\r\n communicationsArea.unblock();\r\n }, 2000);\r\n\r\n } else if (data.Status == 'validationerror') {\r\n\r\n viewModel.Communications().HandleCommError(container.ValidationTitle, container.ValidationMessages); \r\n communicationsArea.unblock();\r\n\r\n } else if (data.Status == 'error') {\r\n\r\n viewModel.Communications().HandleCommError(container.ValidationTitle, container.ValidationMessages);\r\n communicationsArea.unblock();\r\n //setting focus to dynamically added error message\r\n jQuery('html, body').animate({\r\n scrollTop: jQuery(\"#sm360Communications\").offset().top\r\n }, 500);\r\n }\r\n },\r\n error: function (jqXHR, exception) {\r\n viewModel.HandleError(exception);\r\n }\r\n });\r\n\r\n };\r\n this.CancelMessage = function () {\r\n // Clear the NewMessage property\r\n viewModel.Communications().NewMessage(new sm.portal.widget.MessageViewModel());\r\n jQuery(\"li[data-activate-tab='unreadMessages']\").click();\r\n viewModel.Communications().NewMessageTabVisible(false);\r\n\r\n // clear out the wysiwyg if needed\r\n if (jQuery(CKEDITOR.instances.htmlReply).length > 0) {\r\n CKEDITOR.instances.htmlReply.destroy(true);\r\n }\r\n };\r\n\r\n var self = this;\r\n return self;\r\n };\r\n\r\n function MessageViewModel() {\r\n var self = this;\r\n\r\n this.BroadcastIdentifier = ko.observable();\r\n this.ID = ko.observable();\r\n this.Subject = ko.observable();\r\n this.FromDisplay = ko.observable();\r\n this.FromAddress = ko.observable();\r\n this.ToAddress = ko.observable();\r\n this.DisplayFromAddress = ko.computed(function () {\r\n \r\n if (!sm.portal.utility.isNullOrEmpty(this.FromDisplay())) {\r\n return this.FromDisplay();\r\n }\r\n return this.FromAddress();\r\n\r\n }, this);\r\n this.Html = ko.observable();\r\n this.DisplayHtml = ko.observable();\r\n this.Fulfilled = ko.observable();\r\n this.FulfilledDate = ko.observable();\r\n this.WaitingForResponse = ko.observable();\r\n this.ReceivedResponse = ko.observable();\r\n this.ResponseDate = ko.observable();\r\n this.GID = ko.observable();\r\n this.Received = ko.observable();\r\n this.ReceivedDate = ko.observable();\r\n this.RelatedContactID = ko.observable();\r\n this.DateCreatedJS = ko.observable();\r\n\r\n this.LoadModel = function (source) {\r\n this.BroadcastIdentifier(source.BroadcastIdentifier);\r\n this.ID(source.ID);\r\n this.Subject(source.Subject);\r\n this.FromDisplay(source.FromDisplay);\r\n this.FromAddress(source.FromAddress);\r\n this.ToAddress(source.ToAddress);\r\n this.Html(source.Html);\r\n this.Fulfilled(source.Fulfilled);\r\n this.FulfilledDate(source.FulfilledDate);\r\n this.WaitingForResponse(source.WaitingForResponse);\r\n this.ReceivedResponse(source.ReceivedResponse);\r\n this.ResponseDate(source.ResponseDate);\r\n this.GID(source.GID);\r\n this.Received(source.Received);\r\n this.ReceivedDate(source.ReceivedDate);\r\n this.RelatedContactID(source.RelatedContactID);\r\n let isoDateTime = new Date(source.DateCreated);\r\n this.DateCreatedJS(sm.portal.utility.getLocalizedDate(isoDateTime) + \" \" + isoDateTime.toLocaleTimeString());\r\n };\r\n\r\n this.Html.subscribe(function (html) {\r\n // Sets iframe hyperlink target to main window\r\n var div = jQuery('
').html(html);\r\n div.find('a').attr('target', '_top');\r\n var processedHTML = div.html();\r\n\r\n self.DisplayHtml(processedHTML);\r\n });\r\n\r\n this.ReplyToMessage = function () {\r\n // Get the From address - it's the new To Address\r\n var fromAddress = this.FromAddress();\r\n var subject = 'RE: ' + this.Subject();\r\n var oldContent = \"---- Original Message Below ----
\" + this.Html().replace(//g, '').replace(/<\\/body><\\/html>/g, '');\r\n var replyTextArea = jQuery('#htmlReply').length > 0 ? jQuery('#htmlReply') : null;\r\n\r\n viewModel.Communications().NewMessage().ToAddress(fromAddress);\r\n viewModel.Communications().NewMessage().Subject(subject);\r\n viewModel.Communications().NewMessage().Html(oldContent);\r\n viewModel.Communications().NewMessageTabVisible(true);\r\n jQuery(\"li[data-activate-tab='composeMessage']\").click();\r\n\r\n\r\n // init ckeditor after 'reply to' is called. Otherwise, the data\r\n // that ckeditor needs may or may not be ready (AYNC)\r\n // This ensures that we're ready to init ckeditor with the 'old' message data.\r\n // The default KO Binding Handler still works under normal (not pushing data upon init) use-cases.\r\n\r\n if (replyTextArea != null) {\r\n jQuery(replyTextArea).ckeditor({\r\n toolbar: 'basic',\r\n uiColor: '#afafaf',\r\n fullPage: false,\r\n allowedContent: false\r\n });\r\n }\r\n\r\n \r\n };\r\n this.ArchiveMessage = function () {\r\n this.Received(true);\r\n this.ReceivedDate(sm.portal.utility.todaysDate());\r\n this.UpdateMessageStatus();\r\n };\r\n this.UnArchiveMessage = function () {\r\n this.Received(false);\r\n this.ReceivedDate('');\r\n this.UpdateMessageStatus();\r\n };\r\n\r\n this.ExtractATO = function () {\r\n // be sure updates to the textarea are reflected here\r\n var messageObject = ko.mapping.toJS(this);\r\n var currentMessage = jQuery('#htmlReply').val();\r\n var data = {\r\n BroadcastIdentifier: messageObject.BroadcastIdentifier,\r\n ID: messageObject.ID,\r\n Subject: messageObject.Subject,\r\n FromAddress: viewModel.Profile().PrimaryEmailAddress(), // viewModel.PrimaryEmailAddress(),\r\n ToAddress: messageObject.ToAddress,\r\n Html: currentMessage,\r\n GID: messageObject.GID,\r\n ContactID: _currentPersonId,\r\n DateCreatedJS: sm.portal.utility.todaysDate()\r\n };\r\n\r\n return data;\r\n\r\n };\r\n\r\n this.UpdateMessageStatus = function () {\r\n var url = _baseApiUri + sm.portal.utility.formatString('api/student360/markmessage?id={0}&read={1}', this.ID(), this.Received());\r\n\r\n jQuery.ajax({\r\n url: url,\r\n type: 'GET',\r\n dataType: 'json',\r\n contentType: 'application/json; charset=utf-8',\r\n headers: {\r\n \"x-api-version\": '1' //,\r\n },\r\n processData: false,\r\n crossDomain: true,\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n success: function (data, textStatus, jqXHR) {\r\n\r\n var container = new smapi.access.ApiContainerModel(data.Status, data.Payload, data.ValidationTitle, data.ValidationMessages);\r\n if (data.Status == 'saved') {\r\n // Show the results message, hide the rest \r\n viewModel.LoadCommunicationSection();\r\n\r\n } else if (data.Status == 'validationerror') {\r\n\r\n viewModel.HandleError(container.ValidationTitle, container.ValidationMessages);\r\n // TODO: Identify and highlight the associated fields (if possible)\r\n\r\n } else if (data.Status == 'error') {\r\n\r\n viewModel.HandleError(container.ValidationTitle, container.ValidationMessages);\r\n }\r\n },\r\n error: function (jqXHR, exception) {\r\n viewModel.HandleError(exception);\r\n }\r\n });\r\n };\r\n };\r\n\r\n jQuery.extend(true, sm.portal.widget, {\r\n InboxViewModel: InboxViewModel,\r\n MessageViewModel: MessageViewModel\r\n });\r\n})(jQuery);"]}