Your IP : 216.73.216.95


Current Path : /var/www/ljmtc/cbt/message/amd/build/
Upload File :
Current File : /var/www/ljmtc/cbt/message/amd/build/message_drawer_view_search.min.js.map

{"version":3,"sources":["../src/message_drawer_view_search.js"],"names":["define","$","CustomEvents","Notification","PubSub","Str","Templates","Repository","Events","USERS_SEARCH_LIMIT","USERS_INITIAL_SEARCH_LIMIT","SELECTORS","BLOCK_ICON_CONTAINER","CANCEL_SEARCH_BUTTON","CONTACTS_CONTAINER","CONTACTS_LIST","EMPTY_MESSAGE_CONTAINER","LIST","LOADING_ICON_CONTAINER","LOADING_PLACEHOLDER","MESSAGES_LIST","MESSAGES_CONTAINER","NON_CONTACTS_CONTAINER","NON_CONTACTS_LIST","SEARCH_ICON_CONTAINER","SEARCH_ACTION","SEARCH_INPUT","SEARCH_RESULTS_CONTAINER","LOAD_MORE_USERS","LOAD_MORE_MESSAGES","BUTTON_TEXT","NO_RESULTS_CONTAINTER","ALL_CONTACTS_CONTAINER","TEMPLATES","getLoggedInUserId","body","attr","getEmptyMessageContainer","find","getLoadingIconContainer","header","getLoadingPlaceholder","getSearchIconContainer","getSearchInput","getSearchResultsContainer","getContactsContainer","getNonContactsContainer","getMessagesContainer","showEmptyMessage","removeClass","hideEmptyMessage","addClass","showLoadingIcon","hideLoadingIcon","showLoadingPlaceholder","hideLoadingPlaceholder","showSearchIcon","hideSearchIcon","showSearchResults","hideSearchResults","showNoSearchResults","container","hideNoSearchResults","showAllContactsSearchResults","hideAllContactsSearchResults","showContactsSearchResults","hideContactsSearchResults","showNonContactsSearchResults","hideNonContactsSearchResults","showMessagesSearchResults","hideMessagesSearchResults","disableSearchInput","prop","enableSearchInput","clearSearchInput","val","clearAllSearchResults","empty","showLoadMoreUsersButton","showLoadMoreMessagesButton","startLoading","stopLoading","showUsersLoadingIcon","root","button","hideUsersLoadingIcon","hideLoadMoreUsersButton","showMessagesLoadingIcon","hideMessagesLoadingIcon","hideLoadMoreMessagesButton","findContact","userId","addContact","contact","nonContactsContainer","nonContact","userid","length","remove","contactsContainer","append","children","removeContact","blockContact","unblockContact","highlightSearch","content","searchText","regex","RegExp","replace","renderContacts","contacts","frompanel","list","render","then","html","renderNonContacts","nonContacts","noncontacts","renderMessages","messages","loadMoreUsers","loggedInUserId","text","limit","offset","loadedAll","searchUsers","results","slice","contactsCount","nonContactsCount","forEach","highlight","fullname","when","counts","catch","error","loadMoreMessages","searchMessages","message","lastmessage","count","search","usersLimit","usersOffset","messagesLimit","messagesOffset","userCounts","messagesCount","registerEventListeners","searchInput","searchEventHandler","e","data","trim","focus","exception","originalEvent","preventDefault","events","enter","activate","on","subscribe","CONTACT_ADDED","CONTACT_REMOVED","CONTACT_BLOCKED","CONTACT_UNBLOCKED","description","namespace","get_string","show","Deferred","resolve","promise"],"mappings":"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","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 the search page of the message drawer.\n *\n * @module     core_message/message_drawer_view_search\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/templates',\n    'core_message/message_repository',\n    'core_message/message_drawer_events',\n],\nfunction(\n    $,\n    CustomEvents,\n    Notification,\n    PubSub,\n    Str,\n    Templates,\n    Repository,\n    Events\n) {\n\n    var MESSAGE_SEARCH_LIMIT = 50;\n    var USERS_SEARCH_LIMIT = 50;\n    var USERS_INITIAL_SEARCH_LIMIT = 3;\n\n    var SELECTORS = {\n        BLOCK_ICON_CONTAINER: '[data-region=\"block-icon-container\"]',\n        CANCEL_SEARCH_BUTTON: '[data-action=\"cancel-search\"]',\n        CONTACTS_CONTAINER: '[data-region=\"contacts-container\"]',\n        CONTACTS_LIST: '[data-region=\"contacts-container\"] [data-region=\"list\"]',\n        EMPTY_MESSAGE_CONTAINER: '[data-region=\"empty-message-container\"]',\n        LIST: '[data-region=\"list\"]',\n        LOADING_ICON_CONTAINER: '[data-region=\"loading-icon-container\"]',\n        LOADING_PLACEHOLDER: '[data-region=\"loading-placeholder\"]',\n        MESSAGES_LIST: '[data-region=\"messages-container\"] [data-region=\"list\"]',\n        MESSAGES_CONTAINER: '[data-region=\"messages-container\"]',\n        NON_CONTACTS_CONTAINER: '[data-region=\"non-contacts-container\"]',\n        NON_CONTACTS_LIST: '[data-region=\"non-contacts-container\"] [data-region=\"list\"]',\n        SEARCH_ICON_CONTAINER: '[data-region=\"search-icon-container\"]',\n        SEARCH_ACTION: '[data-action=\"search\"]',\n        SEARCH_INPUT: '[data-region=\"search-input\"]',\n        SEARCH_RESULTS_CONTAINER: '[data-region=\"search-results-container\"]',\n        LOAD_MORE_USERS: '[data-action=\"load-more-users\"]',\n        LOAD_MORE_MESSAGES: '[data-action=\"load-more-messages\"]',\n        BUTTON_TEXT: '[data-region=\"button-text\"]',\n        NO_RESULTS_CONTAINTER: '[data-region=\"no-results-container\"]',\n        ALL_CONTACTS_CONTAINER: '[data-region=\"all-contacts-container\"]'\n    };\n\n    var TEMPLATES = {\n        CONTACTS_LIST: 'core_message/message_drawer_contacts_list',\n        NON_CONTACTS_LIST: 'core_message/message_drawer_non_contacts_list',\n        MESSAGES_LIST: 'core_message/message_drawer_messages_list'\n    };\n\n    /**\n     * Get the logged in user id.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Number} User id.\n     */\n    var getLoggedInUserId = function(body) {\n        return body.attr('data-user-id');\n    };\n\n    /**\n     * Show the no messages container element.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Object} No messages container element.\n     */\n    var getEmptyMessageContainer = function(body) {\n        return body.find(SELECTORS.EMPTY_MESSAGE_CONTAINER);\n    };\n\n    /**\n     * Get the search loading icon.\n     *\n     * @param  {Object} header Search header container element.\n     * @return {Object} Loading icon element.\n     */\n    var getLoadingIconContainer = function(header) {\n        return header.find(SELECTORS.LOADING_ICON_CONTAINER);\n    };\n\n    /**\n     * Get the loading container element.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Object} Loading container element.\n     */\n    var getLoadingPlaceholder = function(body) {\n        return body.find(SELECTORS.LOADING_PLACEHOLDER);\n    };\n\n    /**\n     * Get the search icon container.\n     *\n     * @param  {Object} header Search header container element.\n     * @return {Object} Search icon container.\n     */\n    var getSearchIconContainer = function(header) {\n        return header.find(SELECTORS.SEARCH_ICON_CONTAINER);\n    };\n\n    /**\n     * Get the search input container.\n     *\n     * @param  {Object} header Search header container element.\n     * @return {Object} Search input container.\n     */\n    var getSearchInput = function(header) {\n        return header.find(SELECTORS.SEARCH_INPUT);\n    };\n\n    /**\n     * Get the search results container.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Object} Search results container.\n     */\n    var getSearchResultsContainer = function(body) {\n        return body.find(SELECTORS.SEARCH_RESULTS_CONTAINER);\n    };\n\n    /**\n     * Get the search contacts container.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Object} Search contacts container.\n     */\n    var getContactsContainer = function(body) {\n        return body.find(SELECTORS.CONTACTS_CONTAINER);\n    };\n\n    /**\n     * Get the search non contacts container.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Object} Search non contacts container.\n     */\n    var getNonContactsContainer = function(body) {\n        return body.find(SELECTORS.NON_CONTACTS_CONTAINER);\n    };\n\n    /**\n     * Get the search messages container.\n     *\n     * @param  {Object} body Search body container element.\n     * @return {Object} Search messages container.\n     */\n    var getMessagesContainer = function(body) {\n        return body.find(SELECTORS.MESSAGES_CONTAINER);\n    };\n\n\n    /**\n     * Show the messages empty container.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showEmptyMessage = function(body) {\n        getEmptyMessageContainer(body).removeClass('hidden');\n    };\n\n    /**\n     * Hide the messages empty container.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideEmptyMessage = function(body) {\n        getEmptyMessageContainer(body).addClass('hidden');\n    };\n\n\n    /**\n     * Show the loading icon.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var showLoadingIcon = function(header) {\n        getLoadingIconContainer(header).removeClass('hidden');\n    };\n\n    /**\n     * Hide the loading icon.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var hideLoadingIcon = function(header) {\n        getLoadingIconContainer(header).addClass('hidden');\n    };\n\n    /**\n     * Show loading placeholder.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showLoadingPlaceholder = function(body) {\n        getLoadingPlaceholder(body).removeClass('hidden');\n    };\n\n    /**\n     * Hide loading placeholder.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideLoadingPlaceholder = function(body) {\n        getLoadingPlaceholder(body).addClass('hidden');\n    };\n\n    /**\n     * Show search icon.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var showSearchIcon = function(header) {\n        getSearchIconContainer(header).removeClass('hidden');\n    };\n\n    /**\n     * Hide search icon.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var hideSearchIcon = function(header) {\n        getSearchIconContainer(header).addClass('hidden');\n    };\n\n    /**\n     * Show search results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showSearchResults = function(body) {\n        getSearchResultsContainer(body).removeClass('hidden');\n    };\n\n    /**\n     * Hide search results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideSearchResults = function(body) {\n        getSearchResultsContainer(body).addClass('hidden');\n    };\n\n    /**\n     * Show the no search results message.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showNoSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.ALL_CONTACTS_CONTAINER).addClass('hidden');\n        container.find(SELECTORS.MESSAGES_CONTAINER).addClass('hidden');\n        container.find(SELECTORS.NO_RESULTS_CONTAINTER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the no search results message.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideNoSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.ALL_CONTACTS_CONTAINER).removeClass('hidden');\n        container.find(SELECTORS.MESSAGES_CONTAINER).removeClass('hidden');\n        container.find(SELECTORS.NO_RESULTS_CONTAINTER).addClass('hidden');\n    };\n\n    /**\n     * Show the whole contacts results area.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showAllContactsSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.ALL_CONTACTS_CONTAINER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the whole contacts results area.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideAllContactsSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.ALL_CONTACTS_CONTAINER).addClass('hidden');\n    };\n\n    /**\n     * Show the contacts results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showContactsSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.CONTACTS_CONTAINER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the contacts results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideContactsSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.CONTACTS_CONTAINER).addClass('hidden');\n    };\n\n    /**\n     * Show the non contacts results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showNonContactsSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.NON_CONTACTS_CONTAINER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the non contacts results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideNonContactsSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.NON_CONTACTS_CONTAINER).addClass('hidden');\n    };\n\n    /**\n     * Show the messages results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var showMessagesSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.MESSAGES_CONTAINER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the messages results.\n     *\n     * @param {Object} body Search body container element.\n     */\n    var hideMessagesSearchResults = function(body) {\n        var container = getSearchResultsContainer(body);\n        container.find(SELECTORS.MESSAGES_CONTAINER).addClass('hidden');\n    };\n\n    /**\n     * Disable the search input.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var disableSearchInput = function(header) {\n        getSearchInput(header).prop('disabled', true);\n    };\n\n    /**\n     * Enable the search input.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var enableSearchInput = function(header) {\n        getSearchInput(header).prop('disabled', false);\n    };\n\n    /**\n     * Clear the search input.\n     *\n     * @param {Object} header Search header container element.\n     */\n    var clearSearchInput = function(header) {\n        getSearchInput(header).val('');\n    };\n\n    /**\n     * Clear all search results\n     *\n     * @param {Object} body Search body container element.\n     */\n    var clearAllSearchResults = function(body) {\n        body.find(SELECTORS.CONTACTS_LIST).empty();\n        body.find(SELECTORS.NON_CONTACTS_LIST).empty();\n        body.find(SELECTORS.MESSAGES_LIST).empty();\n        hideNoSearchResults(body);\n        showAllContactsSearchResults(body);\n        showContactsSearchResults(body);\n        showNonContactsSearchResults(body);\n        showMessagesSearchResults(body);\n        showLoadMoreUsersButton(body);\n        showLoadMoreMessagesButton(body);\n    };\n\n    /**\n     * Update the body and header to indicate the search is loading.\n     *\n     * @param {Object} header Search header container element.\n     * @param {Object} body Search body container element.\n     */\n    var startLoading = function(header, body) {\n        hideSearchIcon(header);\n        hideEmptyMessage(body);\n        hideSearchResults(body);\n        showLoadingIcon(header);\n        showLoadingPlaceholder(body);\n        disableSearchInput(header);\n    };\n\n    /**\n     * Update the body and header to indicate the search has stopped loading.\n     *\n     * @param {Object} header Search header container element.\n     * @param {Object} body Search body container element.\n     */\n    var stopLoading = function(header, body) {\n        showSearchIcon(header);\n        hideEmptyMessage(body);\n        showSearchResults(body);\n        hideLoadingIcon(header);\n        hideLoadingPlaceholder(body);\n        enableSearchInput(header);\n    };\n\n    /**\n     * Show the more users loading icon.\n     *\n     * @param {Object} root The more users container element.\n     */\n    var showUsersLoadingIcon = function(root) {\n        var button = root.find(SELECTORS.LOAD_MORE_USERS);\n        button.prop('disabled', true);\n        button.find(SELECTORS.BUTTON_TEXT).addClass('hidden');\n        button.find(SELECTORS.LOADING_ICON_CONTAINER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the more users loading icon.\n     *\n     * @param {Object} root The more users container element.\n     */\n    var hideUsersLoadingIcon = function(root) {\n        var button = root.find(SELECTORS.LOAD_MORE_USERS);\n        button.prop('disabled', false);\n        button.find(SELECTORS.BUTTON_TEXT).removeClass('hidden');\n        button.find(SELECTORS.LOADING_ICON_CONTAINER).addClass('hidden');\n    };\n\n    /**\n     * Show the load more users button.\n     *\n     * @param {Object} root The users container element.\n     */\n    var showLoadMoreUsersButton = function(root) {\n        root.find(SELECTORS.LOAD_MORE_USERS).removeClass('hidden');\n    };\n\n    /**\n     * Hide the load more users button.\n     *\n     * @param {Object} root The users container element.\n     */\n    var hideLoadMoreUsersButton = function(root) {\n        root.find(SELECTORS.LOAD_MORE_USERS).addClass('hidden');\n    };\n\n    /**\n     * Show the messages are loading icon.\n     *\n     * @param {Object} root Messages root element.\n     */\n    var showMessagesLoadingIcon = function(root) {\n        var button = root.find(SELECTORS.LOAD_MORE_MESSAGES);\n        button.prop('disabled', true);\n        button.find(SELECTORS.BUTTON_TEXT).addClass('hidden');\n        button.find(SELECTORS.LOADING_ICON_CONTAINER).removeClass('hidden');\n    };\n\n    /**\n     * Hide the messages are loading icon.\n     *\n     * @param {Object} root Messages root element.\n     */\n    var hideMessagesLoadingIcon = function(root) {\n        var button = root.find(SELECTORS.LOAD_MORE_MESSAGES);\n        button.prop('disabled', false);\n        button.find(SELECTORS.BUTTON_TEXT).removeClass('hidden');\n        button.find(SELECTORS.LOADING_ICON_CONTAINER).addClass('hidden');\n    };\n\n    /**\n     * Show the load more messages button.\n     *\n     * @param  {Object} root The messages container element.\n     */\n    var showLoadMoreMessagesButton = function(root) {\n        root.find(SELECTORS.LOAD_MORE_MESSAGES).removeClass('hidden');\n    };\n\n    /**\n     * Hide the load more messages button.\n     *\n     * @param  {Object} root The messages container element.\n     */\n    var hideLoadMoreMessagesButton = function(root) {\n        root.find(SELECTORS.LOAD_MORE_MESSAGES).addClass('hidden');\n    };\n\n    /**\n     * Find a contact in the search results.\n     *\n     * @param  {Object} root Search results container element.\n     * @param  {Number} userId User id.\n     * @return {Object} User container element.\n     */\n    var findContact = function(root, userId) {\n        return root.find('[data-contact-user-id=\"' + userId + '\"]');\n    };\n\n    /**\n     * Add a contact to the search results.\n     *\n     * @param {Object} root Search results container.\n     * @param {Object} contact User in contacts list.\n     */\n    var addContact = function(root, contact) {\n        var nonContactsContainer = getNonContactsContainer(root);\n        var nonContact = findContact(nonContactsContainer, contact.userid);\n\n        if (nonContact.length) {\n            nonContact.remove();\n            var contactsContainer = getContactsContainer(root);\n            contactsContainer.removeClass('hidden');\n            contactsContainer.find(SELECTORS.LIST).append(nonContact);\n        }\n\n        if (!nonContactsContainer.find(SELECTORS.LIST).children().length) {\n            nonContactsContainer.addClass('hidden');\n        }\n    };\n\n    /**\n     * Remove a contact from the contacts results.\n     *\n     * @param {Object} root Search results container.\n     * @param {Object} userId Contact user id.\n     */\n    var removeContact = function(root, userId) {\n        var contactsContainer = getContactsContainer(root);\n        var contact = findContact(contactsContainer, userId);\n\n        if (contact.length) {\n            contact.remove();\n            var nonContactsContainer = getNonContactsContainer(root);\n            nonContactsContainer.removeClass('hidden');\n            nonContactsContainer.find(SELECTORS.LIST).append(contact);\n        }\n\n        if (!contactsContainer.find(SELECTORS.LIST).children().length) {\n            contactsContainer.addClass('hidden');\n        }\n    };\n\n    /**\n     * Show the contact is blocked icon.\n     *\n     * @param {Object} root Search results container.\n     * @param {Object} userId Contact user id.\n     */\n    var blockContact = function(root, userId) {\n        var contact = findContact(root, userId);\n        if (contact.length) {\n            contact.find(SELECTORS.BLOCK_ICON_CONTAINER).removeClass('hidden');\n        }\n    };\n\n    /**\n     * Hide the contact is blocked icon.\n     *\n     * @param {Object} root Search results container.\n     * @param {Object} userId Contact user id.\n     */\n    var unblockContact = function(root, userId) {\n        var contact = findContact(root, userId);\n        if (contact.length) {\n            contact.find(SELECTORS.BLOCK_ICON_CONTAINER).addClass('hidden');\n        }\n    };\n\n    /**\n     * Highlight words in search results.\n     *\n     * @param  {String} content HTML to search.\n     * @param  {String} searchText Search text.\n     * @return {String} searchText with search wrapped in matchtext span.\n     */\n    var highlightSearch = function(content, searchText) {\n        if (!content) {\n            return '';\n        }\n        var regex = new RegExp('(' + searchText + ')', 'gi');\n        return content.replace(regex, '<span class=\"matchtext\">$1</span>');\n    };\n\n\n    /**\n     * Render contacts in the contacts search results.\n     *\n     * @param {Object} root Search results container.\n     * @param {Array} contacts List of contacts.\n     * @return {Promise} Renderer promise.\n     */\n    var renderContacts = function(root, contacts) {\n        var container = getContactsContainer(root);\n        var frompanel = root.attr('data-in-panel');\n        var list = container.find(SELECTORS.LIST);\n\n        return Templates.render(TEMPLATES.CONTACTS_LIST, {contacts: contacts, frompanel: frompanel})\n            .then(function(html) {\n                list.append(html);\n                return html;\n            });\n    };\n\n    /**\n     * Render non contacts in the contacts search results.\n     *\n     * @param {Object} root Search results container.\n     * @param {Array} nonContacts List of non contacts.\n     * @return {Promise} Renderer promise.\n     */\n    var renderNonContacts = function(root, nonContacts) {\n        var container = getNonContactsContainer(root);\n        var frompanel = root.attr('data-in-panel');\n        var list = container.find(SELECTORS.LIST);\n\n        return Templates.render(TEMPLATES.NON_CONTACTS_LIST, {noncontacts: nonContacts, frompanel: frompanel})\n            .then(function(html) {\n                list.append(html);\n                return html;\n            });\n    };\n\n    /**\n     * Render messages in the messages search results.\n     *\n     * @param {Object} root Search results container.\n     * @param {Array} messages List of messages.\n     * @return {Promise} Renderer promise.\n     */\n    var renderMessages = function(root, messages) {\n        var container = getMessagesContainer(root);\n        var frompanel = root.attr('data-in-panel');\n        var list = container.find(SELECTORS.LIST);\n\n        return Templates.render(TEMPLATES.MESSAGES_LIST, {messages: messages, frompanel: frompanel})\n            .then(function(html) {\n                list.append(html);\n                return html;\n            });\n    };\n\n    /**\n     * Load more users from the repository and render the results into the users search results.\n     *\n     * @param  {Object} root Search results container.\n     * @param  {Number} loggedInUserId Current logged in user.\n     * @param  {String} text Search text.\n     * @param  {Number} limit Number of users to get.\n     * @param  {Number} offset Load users from\n     * @return {Object} jQuery promise\n     */\n    var loadMoreUsers = function(root, loggedInUserId, text, limit, offset) {\n        var loadedAll = false;\n        showUsersLoadingIcon(root);\n\n        return Repository.searchUsers(loggedInUserId, text, limit + 1, offset)\n            .then(function(results) {\n                var contacts = results.contacts;\n                var noncontacts = results.noncontacts;\n\n                if (contacts.length <= limit && noncontacts.length <= limit) {\n                    loadedAll = true;\n                    return {\n                        contacts: contacts,\n                        noncontacts: noncontacts\n                    };\n                } else {\n                    return {\n                        contacts: contacts.slice(0, limit),\n                        noncontacts: noncontacts.slice(0, limit)\n                    };\n                }\n            })\n            .then(function(results) {\n                var contactsCount = results.contacts.length;\n                var nonContactsCount = results.noncontacts.length;\n\n                if (contactsCount) {\n                    results.contacts.forEach(function(contact) {\n                        contact.highlight = highlightSearch(contact.fullname, text);\n                    });\n                }\n\n                if (nonContactsCount) {\n                    results.noncontacts.forEach(function(contact) {\n                        contact.highlight = highlightSearch(contact.fullname, text);\n                    });\n                }\n\n                return $.when(\n                    contactsCount ? renderContacts(root, results.contacts) : true,\n                    nonContactsCount ? renderNonContacts(root, results.noncontacts) : true\n                )\n                .then(function() {\n                    return {\n                        contactsCount: contactsCount,\n                        nonContactsCount: nonContactsCount\n                    };\n                });\n            })\n            .then(function(counts) {\n                hideUsersLoadingIcon(root);\n\n                if (loadedAll) {\n                    hideLoadMoreUsersButton(root);\n                }\n\n                return counts;\n            })\n            .catch(function(error) {\n                hideUsersLoadingIcon(root);\n                // Rethrow error for other handlers.\n                throw error;\n            });\n    };\n\n    /**\n     * Load more messages from the repository and render the results into the messages search results.\n     *\n     * @param  {Object} root Search results container.\n     * @param  {Number} loggedInUserId Current logged in user.\n     * @param  {String} text Search text.\n     * @param  {Number} limit Number of messages to get.\n     * @param  {Number} offset Load messages from\n     * @return {Object} jQuery promise\n     */\n    var loadMoreMessages = function(root, loggedInUserId, text, limit, offset) {\n        var loadedAll = false;\n        showMessagesLoadingIcon(root);\n\n        return Repository.searchMessages(loggedInUserId, text, limit + 1, offset)\n            .then(function(results) {\n                var messages = results.contacts;\n\n                if (messages.length <= limit) {\n                    loadedAll = true;\n                    return messages;\n                } else {\n                    return messages.slice(0, limit);\n                }\n            })\n            .then(function(messages) {\n                if (messages.length) {\n                    messages.forEach(function(message) {\n                        message.lastmessage = highlightSearch(message.lastmessage, text);\n                    });\n                    return renderMessages(root, messages)\n                        .then(function() {\n                            return messages.length;\n                        });\n                } else {\n                    return messages.length;\n                }\n            })\n            .then(function(count) {\n                hideMessagesLoadingIcon(root);\n\n                if (loadedAll) {\n                    hideLoadMoreMessagesButton(root);\n                }\n\n                return count;\n            })\n            .catch(function(error) {\n                hideMessagesLoadingIcon(root);\n                // Rethrow error for other handlers.\n                throw error;\n            });\n    };\n\n    /**\n     * Search for users and messages.\n     *\n     * @param {Object} header Search header container element.\n     * @param {Object} body Search body container element.\n     * @param {String} searchText Search text.\n     * @param {Number} usersLimit The users limit.\n     * @param {Number} usersOffset The users offset.\n     * @param {Number} messagesLimit The message limit.\n     * @param {Number} messagesOffset The message offset.\n     * @return {Object} jQuery promise\n     */\n    var search = function(header, body, searchText, usersLimit, usersOffset, messagesLimit, messagesOffset) {\n        var loggedInUserId = getLoggedInUserId(body);\n        startLoading(header, body);\n        clearAllSearchResults(body);\n\n        return $.when(\n            loadMoreUsers(body, loggedInUserId, searchText, usersLimit, usersOffset),\n            loadMoreMessages(body, loggedInUserId, searchText, messagesLimit, messagesOffset)\n        )\n        .then(function(userCounts, messagesCount) {\n            var contactsCount = userCounts.contactsCount;\n            var nonContactsCount = userCounts.nonContactsCount;\n\n            stopLoading(header, body);\n\n            if (!contactsCount && !nonContactsCount && !messagesCount) {\n                showNoSearchResults(body);\n            } else {\n                if (!contactsCount && !nonContactsCount) {\n                    hideAllContactsSearchResults(body);\n                } else {\n                    if (!contactsCount) {\n                        hideContactsSearchResults(body);\n                    }\n\n                    if (!nonContactsCount) {\n                        hideNonContactsSearchResults(body);\n                    }\n                }\n\n                if (!messagesCount) {\n                    hideMessagesSearchResults(body);\n                }\n            }\n\n            return;\n        });\n    };\n\n\n    /**\n     * Listen to and handle events for searching.\n     *\n     * @param {Object} header Search header container element.\n     * @param {Object} body Search body container element.\n     */\n    var registerEventListeners = function(header, body) {\n        var loggedInUserId = getLoggedInUserId(body);\n        var searchInput = getSearchInput(header);\n        var searchText = '';\n        var messagesOffset = 0;\n        var usersOffset = 0;\n\n        var searchEventHandler = function(e, data) {\n            searchText = searchInput.val().trim();\n\n            if (searchText !== '') {\n                messagesOffset = 0;\n                usersOffset = 0;\n                search(\n                    header,\n                    body,\n                    searchText,\n                    USERS_INITIAL_SEARCH_LIMIT,\n                    usersOffset,\n                    MESSAGE_SEARCH_LIMIT,\n                    messagesOffset\n                )\n                .then(function() {\n                    searchInput.focus();\n                    usersOffset = usersOffset + USERS_INITIAL_SEARCH_LIMIT;\n                    messagesOffset = messagesOffset + MESSAGE_SEARCH_LIMIT;\n                    return;\n                })\n                .catch(Notification.exception);\n            }\n\n            data.originalEvent.preventDefault();\n        };\n\n        CustomEvents.define(searchInput, [CustomEvents.events.enter]);\n        CustomEvents.define(header, [CustomEvents.events.activate]);\n        CustomEvents.define(body, [CustomEvents.events.activate]);\n\n        searchInput.on(CustomEvents.events.enter, searchEventHandler);\n\n        header.on(CustomEvents.events.activate, SELECTORS.SEARCH_ACTION, searchEventHandler);\n\n        body.on(CustomEvents.events.activate, SELECTORS.LOAD_MORE_MESSAGES, function(e, data) {\n            if (searchText !== '') {\n                loadMoreMessages(body, loggedInUserId, searchText, MESSAGE_SEARCH_LIMIT, messagesOffset)\n                    .then(function() {\n                        messagesOffset = messagesOffset + MESSAGE_SEARCH_LIMIT;\n                        return;\n                    })\n                    .catch(Notification.exception);\n            }\n            data.originalEvent.preventDefault();\n        });\n\n        body.on(CustomEvents.events.activate, SELECTORS.LOAD_MORE_USERS, function(e, data) {\n            if (searchText !== '') {\n                loadMoreUsers(body, loggedInUserId, searchText, USERS_SEARCH_LIMIT, usersOffset)\n                    .then(function() {\n                        usersOffset = usersOffset + USERS_SEARCH_LIMIT;\n                        return;\n                    })\n                    .catch(Notification.exception);\n            }\n            data.originalEvent.preventDefault();\n        });\n\n        header.on(CustomEvents.events.activate, SELECTORS.CANCEL_SEARCH_BUTTON, function() {\n            clearSearchInput(header);\n            showEmptyMessage(body);\n            showSearchIcon(header);\n            hideSearchResults(body);\n            hideLoadingIcon(header);\n            hideLoadingPlaceholder(body);\n            usersOffset = 0;\n            messagesOffset = 0;\n        });\n\n        PubSub.subscribe(Events.CONTACT_ADDED, function(userId) {\n            addContact(body, userId);\n        });\n\n        PubSub.subscribe(Events.CONTACT_REMOVED, function(userId) {\n            removeContact(body, userId);\n        });\n\n        PubSub.subscribe(Events.CONTACT_BLOCKED, function(userId) {\n            blockContact(body, userId);\n        });\n\n        PubSub.subscribe(Events.CONTACT_UNBLOCKED, function(userId) {\n            unblockContact(body, userId);\n        });\n    };\n\n    /**\n     * Setup the search page.\n     *\n     * @param {string} namespace The route namespace.\n     * @param {Object} header Contacts header container element.\n     * @param {Object} body Contacts body container element.\n     * @return {Object} jQuery promise\n     */\n    var show = function(namespace, header, body) {\n        if (!body.attr('data-init')) {\n            registerEventListeners(header, body);\n            body.attr('data-init', true);\n        }\n        var searchInput = getSearchInput(header);\n        searchInput.focus();\n\n        return $.Deferred().resolve().promise();\n    };\n\n    /**\n     * String describing this page used for aria-labels.\n     *\n     * @param {string} namespace The route namespace.\n     * @param {Object} header Contacts header container element.\n     * @return {Object} jQuery promise\n     */\n    var description = function(namespace, header) {\n        if (typeof header !== 'object') {\n            return Str.get_string('messagedrawerviewsearch', 'core_message');\n        }\n        var searchInput = getSearchInput(header);\n        var searchText = searchInput.val().trim();\n        return Str.get_string('messagedrawerviewsearch', 'core_message', searchText);\n    };\n\n    return {\n        show: show,\n        description: description\n    };\n});\n"],"file":"message_drawer_view_search.min.js"}