PageSourceSearch

https://www.investagrams.com/Javascript/AngularApp/Controller/User…rUserControlController.js?i_1.68.9766.43169

js investagrams.com collected 2026-10-01 10:15:35 UTC 9,057 bytes, 256 lines download raw bytes

1investagramsAngularApp.controller('searchBarUserControlController',
2    function ($scope, $rootScope, stockApiService) {
3
4        $scope.IsLoading = false;
5
6        $scope.AuthenticatedUserId = gaAuthenticatedUserId;
7
8
9        var typingTimer;                //timer identifier
10        var doneTypingInterval = 500;  //time in ms
11
12        $scope.SearchBar = {
13            Request: {
14                Keyword: ""
15            },
16            ShowSnippet: false,
17            ShowDropdown: false,
18            StockSnippetResult: [],
19            EncodedKeyword: "",
20            RecentSearch: [],
21            MaxRecentSearch: 3,
22
23            searchStockSnippet: function () {
24
25                $scope.IsLoading = true;
26
27                if ($scope.SearchBar.Request.Keyword) {
28
29                    var keyword = encodeURIComponent($scope.SearchBar.Request.Keyword);
30                    var userDefaultExchange;
31
32                    userDefaultExchange = $scope.UserNav.getDefaultExchangeWithChecking();
33
34                    var cvParam = getCacheVersion(Constant.TimeDurationConstant.Seconds.HOURS_8);
35
36                    stockApiService.searchStockSnippet(keyword, userDefaultExchange, 0, 0, cvParam).then(function (result) {
37
38                        $scope.SearchBar.StockSnippetResult = result.data;
39
40                        $scope.IsLoading = false;
41                    },
42                        function (error) {
43                            showErrorResponse(error);
44                            $scope.IsLoading = false;
45                        });
46                }
47
48            },
49
50            doSearchSnippet: function () {
51
52                $scope.IsLoading = true;
53                $scope.SearchBar.StockSnippetResult = [];
54                clearTimeout(typingTimer);
55
56                if ($scope.SearchBar.Request.Keyword) {
57                    typingTimer = setTimeout(function () {
58                        $scope.SearchBar.EncodedKeyword = encodeURIComponent($scope.SearchBar.Request.Keyword);
59                        $scope.SearchBar.ShowSnippet = true;
60                        $scope.SearchBar.searchStockSnippet();
61
62                    }, doneTypingInterval);
63                }
64                else {
65                    $scope.SearchBar.showRecentSearch();
66                    $scope.IsLoading = false;
67                }
68
69
70            },
71
72
73            doSearch: function () {
74                if (!$scope.IsLoading) {
75                    var doDirect = false;
76
77                    $scope.SearchBar.EncodedKeyword = encodeURIComponent($scope.SearchBar.Request.Keyword);
78
79                    if ($scope.SearchBar.StockSnippetResult.length > 0) {
80                        if ($scope.SearchBar.StockSnippetResult[0].StockCode.toUpperCase() == $scope.SearchBar.Request.Keyword.toUpperCase().replace("$", "") ||
81                            $scope.SearchBar.StockSnippetResult[0].StockCodeAndExchange.toUpperCase() == $scope.SearchBar.Request.Keyword.toUpperCase().replace("$", "")) {
82                            doDirect = true;
83                            $scope.SearchBar.searchStock($scope.SearchBar.StockSnippetResult[0]);
84                        }
85
86                    }
87
88                    if (!doDirect) {
89                        if ($scope.SearchBar.Request.Keyword) {
90                            $scope.SearchBar.pushRecentSearch($scope.SearchBar.Request.Keyword);
91                            PageUrlConstant.Search.ExecuteOriginalUrl("Stock", $scope.SearchBar.Request.Keyword);
92                        }
93                    }
94
95
96                }
97            },
98
99            searchStock: function (stock, e) {
100
101                if (e) {
102                    e.preventDefault();
103                }
104
105
106                $scope.SearchBar.pushRecentSearch(stock.StockCode, true, stock);
107
108                if (e && e.target.id == "SearchAiButton") {
109                    PageUrlConstant.InvestaAi.ExecuteOriginalUrl(false, stock.StockCodeAndExchange);
110                }
111                else {
112                    if ($scope.UserNav.ActivePage == "Chart" || $scope.UserNav.ActivePage == "Stock") {
113                        $scope.SearchBar.ShowSnippet = false;
114                        $scope.SearchBar.ShowDropdown = false;
115                        $rootScope.$broadcast("searchStockChartPage", stock.StockCodeAndExchange);
116                    }
117                    else {
118                        PageUrlConstant.ViewStock.ExecuteOriginalUrl(false, stock.StockCodeAndExchange);
119                    }
120                }
121            },
122
123            searchKeyword: function (e, type, keyword) {
124                e.preventDefault();
125
126                if (keyword) {
127                    $scope.SearchBar.Request.Keyword = keyword;
128                }
129
130                $scope.SearchBar.pushRecentSearch($scope.SearchBar.Request.Keyword);
131                PageUrlConstant.Search.ExecuteOriginalUrl(type, $scope.SearchBar.Request.Keyword);
132            },
133
134            pushRecentSearch: function (keyword, isStock, stockSnippetData) {
135                var search = {
136                    IsStock: false,
137                    Keyword: keyword,
138                    StockSnippetData: null,
139                }
140
141                search.EncodedKeyword = $scope.SearchBar.EncodedKeyword;
142
143                if (isStock) {
144                    search.IsStock = true;
145                    search.StockSnippetData = stockSnippetData;
146                } 
147
148                var recentSearch = $scope.SearchBar.RecentSearch;
149                if (recentSearch.length > 0) {
150
151                    var dupeIndex = recentSearch.findIndex(function (item) {
152                        return (item["Keyword"] == search["Keyword"]);
153                    });
154
155                    if (dupeIndex < 0) {
156                        recentSearch.unshift(search);
157                    }
158                    else {
159                        recentSearch.splice(dupeIndex, 1);
160                        recentSearch.unshift(search);
161                    }
162
163                    if (recentSearch.length > $scope.SearchBar.MaxRecentSearch) {
164                        recentSearch.pop();
165                    }
166                }
167                else {
168                    recentSearch.push(search);
169                }
170
171                LocalStorageCache.RecentSearch.Set($scope.SearchBar.RecentSearch);
172            },
173
174
175            showRecentSearch: function () {
176                if ($scope.SearchBar.RecentSearch.length > 0 && !$scope.SearchBar.Request.Keyword) {
177                    $scope.SearchBar.ShowDropdown = true;
178                }
179            },
180
181            clearRecentSearch: function () {
182                bootbox.dialog({
183                    message: "Are you sure you want to clear all recent searches?",
184                    title: "Clear Recent Searches",
185                    backdrop: true,
186                    onEscape: true,
187                    buttons: {
188                        no: {
189                            label: "Cancel",
190                            className: "btn-outline-secondary",
191                            callback: function () {
192
193                            }
194                        },
195                        yes: {
196                            label: "Clear",
197                            className: "btn-outline-danger",
198                            callback: function () {
199                                $scope.SearchBar.RecentSearch = [];
200                                LocalStorageCache.RecentSearch.Remove();
201                            }
202                        }
203                    }
204                });
205            }
206
207        };
208
209
210
211        $(document).mouseup(function (e) {
212
213            if ($scope.SearchBar.ShowSnippet) {
214
215                var container = $("#searchBarUserControlContainer");
216
217                if (!container.is(e.target) // if the target of the click isn't the container...
218                    && container.has(e.target).length === 0) // ... nor a descendant of the container
219                {
220                    $scope.SearchBar.ShowSnippet = false;
221                    $scope.SearchBar.ShowDropdown = false;
222
223                    // You should let angular know about the update that you have made, so that it can refresh the UI
224                    $scope.$digest();
225                }
226
227            }
228
229
230        });
231
232
233
234        $scope.$on("searchBarKeyword", function (event, arg) {
235            $scope.SearchBar.Request.Keyword = arg;
236            $scope.SearchBar.EncodedKeyword = encodeURIComponent($scope.SearchBar.Request.Keyword);
237        });
238
239
240
241        $scope.initValue = function () {
242            var recentSearch = LocalStorageCache.RecentSearch.Get();
243
244            if (recentSearch) {
245                $scope.SearchBar.RecentSearch = recentSearch;
246            }
247
248
249        };
250
251
252        $scope.initValue();
253
254
255    }
256);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.