| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | define([ "require", "backbone", "hbs!tmpl/search/GlobalSearchLayoutView_tmpl", "utils/Utils", "utils/UrlLinks", "utils/Globals", "jquery-ui" ], function(require, Backbone, GlobalSearchLayoutViewTmpl, Utils, UrlLinks, Globals) {    "use strict";    var GlobalSearchLayoutView = Backbone.Marionette.LayoutView.extend({        _viewName: "GlobalSearchLayoutView",        template: GlobalSearchLayoutViewTmpl,        regions: {            RSearchLayoutView: "#r_searchLayout"        },        ui: {            globalSearch: "[data-id='globalSearch']",            clearGlobalSearch: "[data-id='clearGlobalSearch']",            detailSearch: "[data-id='detailSearch']",            searchLayoutView: ".searchLayoutView"        },        events: function() {            var events = {};            return events["click " + this.ui.clearGlobalSearch] = function() {                this.ui.globalSearch.val(""), this.ui.globalSearch.atlasAutoComplete("search"),                 this.ui.clearGlobalSearch.removeClass("in");            }, events["click " + this.ui.detailSearch] = function() {                this.ui.searchLayoutView.toggleClass("open"), this.fromDefaultSearch !== !0 && $("body").toggleClass("global-search-active");            }, events;        },        initialize: function(options) {            _.extend(this, _.pick(options, "value", "closeOnSubmit", "fromDefaultSearch", "initialView", "classificationDefCollection", "entityDefCollection", "typeHeaders", "searchVent", "enumDefCollection", "searchTableColumns")),             this.bindEvents();        },        bindEvents: function() {            var that = this;            $("body").on("click", function(e) {                that.isDestroyed || "detailSearch" === that.$(e.target).data("id") || 0 === $(e.target).parents(".searchLayoutView").length && that.ui.searchLayoutView.hasClass("open") && that.ui.searchLayoutView.removeClass("open");            });        },        onRender: function() {            this.initializeGlobalSearch(), this.renderSearchLayoutView();        },        onBeforeDestroy: function() {            this.ui.searchLayoutView.removeClass("open"), this.ui.globalSearch.atlasAutoComplete("destroy");        },        fetchSearchData: function(options) {            var request = options.request, response = options.response, term = request.term, data = {}, sendResponse = function() {                var query = data.query, suggestions = data.suggestions;                void 0 !== query && void 0 !== suggestions && response(data);            };            $.ajax({                url: UrlLinks.searchApiUrl("quick"),                contentType: "application/json",                data: {                    query: term,                    limit: 5,                    offset: 0                },                cache: !0,                success: function(response) {                    var rData = response.searchResults.entities || [];                    data.query = {                        category: "entities",                        data: rData,                        order: 1                    }, sendResponse();                }            }), $.ajax({                url: UrlLinks.searchApiUrl("suggestions"),                contentType: "application/json",                data: {                    prefixString: term                },                cache: !0,                success: function(response) {                    var rData = response.suggestions || [];                    data.suggestions = {                        category: "suggestions",                        data: rData,                        order: 2                    }, sendResponse();                }            });        },        getSearchString: function(str) {            return str && str.length && null === str.match(/[+\-&|!(){}[\]^"~*?:/]/g) ? str + "*" : str;        },        triggerBasicSearch: function(query) {            Utils.setUrl({                url: "#!/search/searchResult?query=" + encodeURIComponent(query) + "&searchType=basic",                mergeBrowserUrl: !1,                trigger: !0,                updateTabState: !0            });        },        renderSearchLayoutView: function() {            var that = this;            require([ "views/search/SearchLayoutView" ], function(SearchLayoutView) {                that.RSearchLayoutView.show(new SearchLayoutView(_.extend({                    isHeaderSearch: !0,                    onSubmit: function() {                        that.ui.searchLayoutView.removeClass("open");                    }                }, that.options)));            });        },        initializeSearchValue: function() {            if (this.options.value) {                CommonViewFunction.generateQueryOfFilter(this.options.value);            }        },        closeSearch: function() {            this.ui.globalSearch.atlasAutoComplete("close");        },        initializeGlobalSearch: function() {            var that = this;            this.ui.globalSearch.atlasAutoComplete({                minLength: 1,                autoFocus: !1,                search: function() {                    that.ui.searchLayoutView.hasClass("open") || $(this).siblings("span.fa-search").removeClass("fa-search").addClass("fa-refresh fa-spin-custom");                },                focus: function(event, ui) {                    return !1;                },                open: function() {                    $(this).siblings("span.fa-refresh").removeClass("fa-refresh fa-spin-custom").addClass("fa-search");                },                select: function(event, ui) {                    var item = ui && ui.item;                    event.preventDefault(), event.stopPropagation();                    var $el = $(this);                    return _.isString(item) ? ($el.val(item), $el.data("valSelected", !0), that.triggerBasicSearch(item)) : _.isObject(item) && item.guid && Utils.setUrl({                        url: "#!/detailPage/" + item.guid,                        mergeBrowserUrl: !1,                        trigger: !0                    }), $el.blur(), !0;                },                source: function(request, response) {                    that.ui.searchLayoutView.hasClass("open") || that.fetchSearchData({                        request: request,                        response: response                    });                }            }).focus(function() {                that.ui.searchLayoutView.hasClass("open") || $(this).atlasAutoComplete("search");            }).keyup(function(event) {                "" === $(this).val().trim() ? 13 == event.keyCode ? (this.value = "*", that.triggerBasicSearch("*")) : that.ui.clearGlobalSearch.removeClass("in") : (that.ui.clearGlobalSearch.addClass("in"),                 13 == event.keyCode && ($(this).data("valSelected") !== !0 ? (that.closeSearch(),                 that.triggerBasicSearch($(this).val())) : $(this).data("valSelected", !1)));            }).atlasAutoComplete("instance")._renderItem = function(ul, searchItem) {                if (searchItem) {                    var data = searchItem.data, searchTerm = this.term, getHighlightedTerm = function(resultStr) {                        try {                            return resultStr.replace(new RegExp(searchTerm, "gi"), function(foundStr) {                                return "<span class='searched-term'>" + foundStr + "</span>";                            });                        } catch (error) {                            return resultStr;                        }                    };                    if (data) {                        if (0 == data.length) return $("<li class='empty'></li>").append("<span class='empty-message'>No " + searchItem.category + " found</span>").appendTo(ul);                        var items = [];                        return _.each(data, function(item) {                            var li = null;                            if (_.isObject(item)) {                                item.itemText = Utils.getName(item) + " (" + item.typeName + ")";                                var options = {};                                if (void 0 === item.serviceType) {                                    if (void 0 === Globals.serviceTypeMap[item.typeName] && that.entityDefCollection) {                                        var defObj = that.entityDefCollection.fullCollection.find({                                            name: item.typeName                                        });                                        defObj && (Globals.serviceTypeMap[item.typeName] = defObj.get("serviceType"));                                    }                                } else void 0 === Globals.serviceTypeMap[item.typeName] && (Globals.serviceTypeMap[item.typeName] = item.serviceType);                                item.serviceType = Globals.serviceTypeMap[item.typeName], options.entityData = item;                                var img = $('<img src="' + Utils.getEntityIconPath(options) + '">').on("error", function(error, s) {                                    this.src = Utils.getEntityIconPath(_.extend(options, {                                        errorUrl: this.src                                    }));                                }), span = $("<span>" + getHighlightedTerm(item.itemText) + "</span>").prepend(img);                                li = $("<li class='with-icon'>").append(span);                            } else li = $("<li>").append("<span>" + getHighlightedTerm(_.escape(item)) + "</span>");                            li.data("ui-autocomplete-item", item), searchItem.category && items.push(li.attr("aria-label", searchItem.category + " : " + (_.isObject(item) ? item.itemText : item)));                        }), ul.append(items);                    }                }            };        }    });    return GlobalSearchLayoutView;});
 |