PageSourceSearch

https://www.voiceofcancerpatients.com/app/message/conversation/conversation.controller.js

js voiceofcancerpatients.com collected 2026-09-25 06:12:05 UTC 29,397 bytes, 624 lines download raw bytes

1/**
2 * Created by Team Scry on 25/11/15.
3 */
4'use strict';
5
6angular.module('healthConsulApp')
7    .controller('ConversationCtrl', ['$scope', 'searchService', 'sharedService', '$window', 'Auth', '$location', 'userService', '$routeParams', 'searchFilterService', 'localStorageService', '$filter',
8      function ($scope, searchService, sharedService, $window, Auth, $location, userService, $routeParams, svcSearchMod, localStorageService, $filter) {
9        var postIds = [];
10        var msgOffset = 0;
11        var reference = null;
12        var searchObj = svcSearchMod.Search;
13        var msgMatchLevel = 0;
14        var isEmbedding = 0;
15        var terminateCall = false;
16        var urlObj = {};
17        var searchParams = {};
18
19        $scope.isFuzzy = false;
20        $scope.activeHeader = 'search';
21        $scope.arrWord = [];
22        $scope.filters = [];
23        $scope.loading = true;
24        $scope.suggestions = [];
25        $scope.selectedIndex = -1;
26        $scope.bookmarked = 'Bookmarked';
27        $scope.searchText = '';
28        $scope.messages = [];
29        $scope.filterModels = {};
30        $scope.containerStyle = {"margin-top": "145px"};
31        $scope.messageIds = [];
32        $scope.sideEffectFilters = [];
33        $scope.supportiveTherapyFilters = [];
34        $scope.drugFilters = [];
35        $scope.regimenFilters = [];
36        $scope.supportiveDrugFilters = [];
37        $scope.sentimentFilters = [];
38        $scope.ailmentDomainMap = {};
39        $scope.isOtherCancerStatsVisible = true;
40        $scope.cancerStatsStyle = [{'color': 'rgb(66, 166, 211)'}, {'border': '1px solid rgb(76, 175, 80)'}, {'border': '1px solid rgb(67, 160, 71)'}, {'border': '1px solid #A5D6A7'}
40, {'border': '1px solid rgb(165, 214, 167)'}];
41        $scope.freeTextSuggestions = [];
42        $scope.freeTextCurrIndex = 0;
43        $scope.combinations = [];
44        $scope.loadingMorePost = false;
45        $scope.moreMsgNotAvailable = false;
46        $scope.defaultMsgLength = 1000;
47        $scope.expandAll = false;
48        $scope.searchTextObject = {
49          searchText: "",
50          ftSuggestionInput: [],
51          powerSetWords: []
52        };
53
54        function setFiltersToEmpty() {
55          $scope.filters = [];
56          searchObj.setFiltersToEmpty();
57        }
58
59        $scope.getSuggestions = function () {
60          if (($scope.searchText) && (1 <= $scope.searchText.length)) {
61            $scope.resultsFor = $scope.searchText;
62            $scope.suggestions = [];
63            searchObj.suggestionObject.searchText = $scope.searchText;
64            searchObj.suggestionObject.searchTextArray = $scope.searchText.split(' ');
65            searchObj.suggestionObject = svcSearchMod.getPreprocessedSuggestionObject(searchObj.suggestionObject);
66
67            searchService.getSuggestions(searchObj.suggestionObject.textForSuggestion).success(function (response) {
68              response = response.length > 0 ? (searchObj.processSuggestions(searchObj.suggestionObject.searchTextArray, searchObj.suggestionObject.searchStringToBeReplaced, response)) : null;
69              $scope.suggestions = (response && $scope.searchText && $scope.searchText.length > 0) ? response.slice(0, 10) : [];
70              searchObj.suggestionObject = svcSearchMod.getPostProcessedSuggestionObject($scope.suggestions, searchObj.suggestionObject);
71              $scope.selectedIndex = -1;
72            }).error(function (err) {
73              sharedService.log(err);
74            });
75          } else {
76            $scope.suggestions = [];
77          }
78        };
79
80        $scope.searchPost = function (message_ids) {
81          $scope.msgLoading = true;
82          message_ids = message_ids && message_ids.filter(function (messageId) {
83            return (postIds.indexOf(messageId) === -1);
84          });
85          if (!checkIfOptionItemExist(searchParams.count) && searchParams.count !== "0") $scope.conversationCount = searchParams.count;
86
87          postIds = postIds.concat(message_ids);
88          if (!parseInt($scope.conversationCount)) {
89            if (!checkIfOptionItemExist(searchParams.count) && searchParams.count !== "0") {
90              $scope.conversationCount = searchParams.count;
91            } else if (message_ids && message_ids.messageCount) {
92              $scope.conversationCount = message_ids.messageCount;
93            }
94          }
95          if (message_ids && message_ids.length) {
96            searchService.searchPost(message_ids).success(function (response) {
97              $scope.messages = $scope.messages.concat(response);
98              $scope.updateExpandAll(false);
99              $scope.loading = false;
100              $scope.loadingMorePost = false;
101              if ($scope.arrWord.indexOf($scope.searchText) < 0) $scope.arrWord.push($scope.searchText);
102              $scope.containerStyle = ($scope.filters && $scope.filters.length > 0) ? {"margin-top": "175px"} : {"margin-top": "145px"};
103              if ($scope.ailmentDomain !== 'all') $scope.isOtherCancerStatsVisible = false;
104            }).error(function (err) {
105              $scope.loading = false;
106              $scope.loadingMorePost = false;
107              sharedService.log(err);
108            });
109          } else {
110            $scope.loading = false;
111            $scope.loadingMorePost = false;
112          }
113        };
114
115        $scope.loadMorePost = function () {
116          if (!terminateCall && !$scope.loadingMorePost) {
117            if (msgOffset >= 120 && !Auth.getCurrentUser()._id) {
118              $scope.reqLimitReached = true;
119              return;
120            }
121            if ($scope.messages.length >= $scope.conversationCount) {
122              $scope.moreMsgNotAvailable = true;
123              return;
124            }
125            $scope.loadingMorePost = true;
126            if (searchParams.isFilter) {
127              if (!$scope.moreMsgNotAvailable) {
128                msgOffset = parseInt(msgOffset) + 20;
129              }
130              if (!Object.keys(searchObj.reference_check).length) return;
131              searchObj.isBrandName = 0;
132              searchFilterMessages(urlObj.type, 1, msgOffset, searchParams.query, urlObj.s2 ? 1 : 0);
133            } else {
134              searchService.searchMessages($scope.searchText, 1, msgOffset, msgMatchLevel, isEmbedding,
135                  [], $scope.isFuzzy).success(function (response) {
136                msgMatchLevel = response.matchLevel || 0;
137                isEmbedding = response.isEmbedding || 0;
138                terminateCall = response.terminateCall;
139                msgOffset = response.resetOffset ? 0 : response.offset || 0;
140                $scope.loading = false;
141                if (response.messageIdsArray.length) {
142                  searchService.searchPost(response instanceof Array ? response : response.messageIdsArray)
143                      .success(function (res) {
144                        if (res.length) {
145                          $scope.messages = $scope.messages.concat(res);
146                          $scope.updateExpandAll(false);
147                          postIds = [];
148                        } else {
149                          $scope.freeTextCurrIndex++;
150                        }
151                        $scope.loadingMorePost = false;
152                      })
153                      .error(function (err) {
154                        $scope.loadingMorePost = false;
155                        sharedService.log(err);
156                      });
157                } else {
158                  $scope.loadingMorePost = false;
159                  $scope.loadMorePost();
160                }
161              }).error(function (err) {
162                $scope.loadingMorePost = false;
163                $scope.loading = false;
164                sharedService.log(err);
165              });
166            }
167          }
168        };
169
170        $scope.searchMessages = function (index) {
171          if ((searchObj.queried === $scope.searchText || $scope.searchText.trim().length <= 1) && searchObj.ailmentDomain === $scope.ailmentDomain) {
172            $scope.suggestions = [];
173            return true;
174          }
175          searchObj.ailmentDomain = $scope.ailmentDomain;
176          $scope.loading = true;
177          searchObj.queried = null;
178          if ($scope.suggestions && $scope.suggestions.length) {
179            if ($scope.suggestions[index] === undefined) {
180              for (var key in searchObj.reference_check) {
181                if (searchObj.reference_check.hasOwnProperty(key) && (searchObj.reference_check[key].name.toLowerCase() ===
182                    $scope.searchText.trim().replace(searchObj.suggestionObject.searchStringToBeReplaced, '').toLocaleLowerCase())) {
183                  searchObj.queried = searchObj.reference_check[key].name;
184                  $scope.searchText = searchObj.suggestionObject.searchStringToBeReplaced.length > 1 ? (searchObj.suggestionObject.searchStringToBeReplaced + searchObj.queried) : searchObj.queried;
185                  break;
186                }
187              }
188            } else {
189              searchObj.queried = $scope.suggestions[index].replace(searchObj.suggestionObject.searchStringToBeReplaced, '');
190              $scope.searchText = searchObj.suggestionObject.searchStringToBeReplaced.length > 1 ? (searchObj.suggestionObject.searchStringToBeReplaced + searchObj.queried) : searchObj.queried;
191            }
192          } else {
193            searchObj.queried = $scope.searchText;
194          }
195          reference = searchObj.reference_check[searchObj.queried];
196          msgOffset = 0;
197
198          $scope.searchTextObject.searchText = $scope.searchText;
199          svcSearchMod.refineFreeTextSearchInput($scope.searchTextObject, $scope);
200          /* Seo related computation */
201          var seoFreeTextTermsArr = [];
202          for (var i = 0; i < searchObj.suggestionObject.searchTextArray.length; i++) {
203            if (searchObj.suggestionObject.searchTextArray[i] !== 'and') {
204              seoFreeTextTermsArr.push(searchObj.suggestionObject.searchTextArray[i]);
205            }
206          }
207          var seoType = '';
208          seoFreeTextTermsArr.length === 1 ? seoType = "singleSearch" : seoType = "twoLevelSearch";
209          sharedService.setMetaTags("conversations", seoType, $scope.ailmentDomain, seoFreeTextTermsArr[0], seoFreeTextTermsArr[1]);
210        };
211
212        $scope.mapTypeUrl = function (url) {
213          return sharedService.urlMappings[url];
214        };
215
216        $scope.callMsg = function () {
217          searchService.searchMessages(encodeURIComponent($scope.searchText), 0, msgOffset, msgMatchLevel,
218              isEmbedding, $scope.searchTextObject.ftSuggestionInput, $scope.isFuzzy)
219              .success(function (response) {
220                msgMatchLevel = response.matchLevel || 0;
221                isEmbedding = response.isEmbedding || 0;
222                msgOffset = response.resetOffset ? 0 : response.offset || 0;
223                $scope.searchText = response.resultsFor;
224                $scope.resultsFor = $scope.searchText;
225                $scope.heading = $scope.searchText;
226                $scope.searchPost(response.length ? response : response.messageIdsArray);
227                $scope.suggestions = [];
228                $scope.conversationCount = response.messageCount;
229                $scope.ailmentConversations = response.ailmentConversations;
230                $scope.arrWord = response.highlightKeywords;
231                $scope.arrWord.push($scope.searchText);
232
233                $scope.relatedResultsLoading = true;
234                searchObj.inputData.searchStringList = svcSearchMod.getPowerSet(_.uniq($scope.searchText.trim().split(' ')));
235
236                svcSearchMod.FindDictionaryItems(searchObj.inputData, searchService, 0, svcSearchMod, function (inputArray) {
237
238                  inputArray = svcSearchMod.makeCombinationsOfDictionaryItems(inputArray);
239
240                  inputArray.combinations.ailmentDomain = $scope.ailmentDomain;
241                  if (inputArray.combinations.terms.length) {
242                    searchService.searchResultCount(inputArray.combinations)
243                        .success(function (resp) {
244                          if (resp.length) addUrlsToCombinations(resp);
245                          $scope.relatedResultsLoading = false;
246                          $scope.combinations = resp;
247                        }).error(function (err) {
248                      $scope.relatedResultsLoading = false;
249                      sharedService.log(err);
250                    });
251                  } else {
252                    $scope.combinations = [];
253                    $scope.relatedResultsLoading = false;
254                  }
255                });
256                if ($scope.ailmentDomain !== 'all') $scope.isOtherCancerStatsVisible = false;
257                $scope.arrWord = $scope.arrWord.concat(response.highlightKeywords);
258                $scope.isFilterBoxReq = true;
259              }).error(function (err) {
260            $scope.loading = false;
261            sharedService.log(err);
262          });
263        };
264
265        $scope.addRemoveHelpful = function (msg) {
266          userService.markHelpful(msg)
267              .then(function (res) {
268                $scope.getCurrentUser.helpfulMsg = res.data;
269              }).catch(function () {
270            $scope.errors = {};
271          });
272        };
273
274        function addUrlsToCombinations(objs) {
275          objs.forEach(function (obj) {
276            if (obj.count) {
277              var res = svcSearchMod.getUrlFromCombinations(obj);
278              obj.url = res.url;
279              obj.heading = res.heading;
280              obj.name = res.name;
281              obj.type = res.type;
282            }
283          })
284        }
285
286        $scope.helpfulList = function (postId) {
287          return $scope.getCurrentUser ? svcSearchMod.checkUserBookMarkList($scope.getCurrentUser.helpfulMsg, postId) : false;
288        };
289
290        $scope.openOtherCancers = function (ailment) {
291          var param = {};
292          searchObj.filterTypeArray.forEach(function (filter) {
293            param[filter] = searchObj[filter] && searchObj[filter].length ? searchObj[filter] : '';
294          });
295          if (searchParams.genericName) param.genericName = searchParams.genericName;
296          if (searchParams.count) param.count = "0";
297          if (searchParams.isFilter) param.isFilter = searchParams.isFilter;
298          if (searchParams.queryType) param.queryType = searchParams.queryType;
299          if (searchParams.isBrandNameFilter) param.isBrandNameFilter = searchParams.isBrandNameFilter;
300          /*var url = "/" + ailment.replace(/ /g, "-") + "/conversations/";
301          //searchParams.genericName ? url+='?s='+searchParams.genericName : url = urlObj.type ? (url + urlObj.type + "/") : url;;
302          url = urlObj.type ? (url + urlObj.type + "/") : url;
303          url += urlObj.s.replace(/ /g, "-");*/
304          var url = $location.$$url.replace($scope.ailmentDomain.replace(/ /g, '-'), ailment.replace(/ /g, "-"));
305          $location.url(url);
306        };
307
308        $scope.checkUserBookMarkList = function (postId) {
309          return ($scope.messageIds.indexOf(postId) >= 0);
310        };
311
312        $scope.addBookmark = function (postId) {
313          var uId = Auth.getCurrentUser()._id;
314          if (uId) {
315            $scope.bookmarked = "Bookmarked";
316            userService.addBookmark(uId, postId).success(function () {
317              $scope.messageIds.push(postId);
318            }).error(function (err) {
319              sharedService.log(err);
320            });
321          }
322        };
323
324        $scope.removeBookmark = function (postId) {
325          var uId = Auth.getCurrentUser()._id;
326          if (uId) {
327            $scope.bookmarked = "Bookmark";
328            userService.removeBookmark(uId, postId).success(function () {
329              var index = $scope.messageIds.indexOf(postId);
330              if (index > -1) $scope.messageIds.splice(index, 1);
331            }).error(function (err) {
332              sharedService.log(err);
333            });
334          }
335        };
336
337        $scope.checkKeyDown = function (event) {
338          switch (event.keyCode) {
339            case 40:
340              event.preventDefault();
341              $scope.selectedIndex !== ($scope.suggestions.length - 1) ? $scope.selectedIndex++ : $scope.selectedIndex = 0;
342              $scope.searchText = $scope.suggestions.length ? $scope.suggestions[$scope.selectedIndex] : $scope.searchText;
343              break;
344            case 38:
345              event.preventDefault();
346              $scope.selectedIndex === -1 ? $scope.selectedIndex = 0 : ($scope.selectedIndex !== -1 && $scope.selectedIndex !== 0 ? $scope.selectedIndex-- : $scope.selectedIndex = ($scope.suggestions.length - 1));
347              $scope.searchText = $scope.suggestions.length ? $scope.suggestions[$scope.selectedIndex] : $scope.searchText;
348              break;
349            case 13:
350              event.preventDefault();
351              if (!$scope.loading) {
352                if ($scope.searchText) $scope.setResult($scope.selectedIndex);
353              }
354              break;
355            case 8:
356              searchObj.suggestionObject.isBackSpace = true;
357              break;
358            case 86:
359              if (event.ctrlKey) searchObj.suggestionObject.isPaste = true;
360          }
361        };
362
363        $scope.openUrl = function (domain, text, type) {
364          var url = '/' + domain.replace(/ /g, '-')
365              + sharedService.generateSearchUrl(searchObj, text, type, $scope.isFuzzy);
366          $location.url(url + '/conversations');
367        };
368
369        $scope.openMessages = function (text, type, isFilter, queryType) {
370          localStorageService.set("ailmentConversations", $scope.ailmentConversations);
371          searchParams.isFuzzy = $scope.isFuzzy ? 1 : 0;
372          searchObj.filterTypeArray.forEach(function (filter) {
373            searchParams[filter] = searchObj[filter].length ? searchObj[filter] : [];
374          });
375          searchParams.isFilter = 0;
376          searchParams.source = "me";
377          searchParams.genericName = (searchObj.reference_check && searchObj.reference_check[searchObj.queried]
378              && searchObj.reference_check[searchObj.queried].genericName)
379              ? searchObj.reference_check[searchObj.queried].genericName : '';
380          if (searchObj.queried) searchParams.count = $scope.conversationCount;
381          if (isFilter) searchParams.queryType = queryType;
382          $scope.filterModels && (searchParams = _.merge(searchParams, $scope.filterModels));
383          sharedService.setSearchParams(searchParams);
384          var url = "/" + sharedService.ailmentDomain.replace(/ /g, "-") + "/conversations/?s=" + $filter("spaceToDash")($scope.searchText);
385          $location.url(url);
386        };
387
388        $scope.redirectOrProcessUrl = function (result) {
389          if (result.type === 'generic') {
390            $scope.openMessages(result.q, result.qObj && result.qObj[0].type, true, result.queryType);
391          } else {
392            $scope.openUrl(sharedService.ailmentDomain, result.q, result.qObj[0].type);
393          }
394        };
395
396        $scope.setResult = function (index, name) {
397          index >= 0 && ($scope.searchText = name ? name : ($scope.suggestions.length ? $scope.suggestions[$scope.selectedIndex] : $scope.searchText));
398          if (!$scope.loading) {
399            $scope.loading = true;
400          }
401          setFiltersToEmpty();
402          postIds = [];
403          msgOffset = 0;
404          //searchObj.initialize();
405          searchObj.queried = $scope.searchText;
406          var searchStringList = _.uniq($scope.searchText.trim().split(' '));
407          searchStringList = svcSearchMod.getPowerSet(searchStringList);
408          searchObj.inputData.searchStringList = searchStringList;
409          searchObj.inputData.searchText = $scope.searchText;
410          $scope.suggestions = [];
411          svcSearchMod.getSuggestionsAndUpdateRelevantArrays(searchObj.inputData, 0, searchService, $scope, 1, svcSearchMod);
412        };
413
414        $scope.openTab = function (event, url) {
415          svcSearchMod.openTab(event, url);
416        };
417
418        function searchFilterMessages(type, isPagination, offset, name, isFilter) {
419          var regimenBrandName = '';
420          var drugBrandName = '';
421          if (searchParams.isBrandNameFilter) searchObj.regimenFilters.length ? regimenBrandName = searchObj.regimenFilters.join("") :
422              drugBrandName = searchObj.drugFilters.join("");
423
424          var filterConversationsUrl = searchObj.setFiltersAndUrl(1, name, type, '', '', regimenBrandName, drugBrandName);
425          filterConversationsUrl = '/api/search/all' + filterConversationsUrl.url + '&isPrimary=0&isFilter=' + isFilter + '&isPagination=' + isPagination + '&offset=' + offset + '&isFuzzy=' + ($scope.isFuzzy ? 1 : 0) +
426              (sharedService.UrlFromJson($scope.filterModels) ? sharedService.UrlFromJson($scope.filterModels) : '');
427          /* Seo related computation */
428          var fetchDetailsOfSearched = findNameOfSecondTag("http://" + filterConversationsUrl, searchObj.reference_check[name].type);
429          var seoType = '';
430          if (fetchDetailsOfSearched && fetchDetailsOfSearched.type === 'sentiment') {
431            seoType = "twoLevelSearchSentiment";
432          } else if (!fetchDetailsOfSearched || fetchDetailsOfSearched === 'undefined') {
433            seoType = "singleSearch"
434          } else {
435            seoType = "twoLevelSearch";
436          }
437          sharedService.setMetaTags("conversations", seoType, $scope.ailmentDomain, name, fetchDetailsOfSearched ? fetchDetailsOfSearched.name : '');
438          if (type === 'regimen') {
439            filterConversationsUrl += '&q=' + searchParams.genericName.replace(/ /g, "-") || name.replace(/ /g, "-");
440          } else {
441            filterConversationsUrl += '&q=' + searchParams.genericName || name;
442          }
443          searchService.filterConversations(filterConversationsUrl).success(function (response) {
444            if (response[0].ailmentConversations) $scope.ailmentConversations = response[0].ailmentConversations;
445            if (!$scope.conversationCount) {
446              $scope.conversationCount = response[0].totalMessageCount;
447            }
448            $scope.arrWord.push($scope.searchText);
449            $scope.arrWord = $scope.arrWord.concat(response[0].highlightKeywords);
450            isPagination === 0 && angular.forEach($scope.filters, function (value) {
451              $scope.arrWord.push(value.name);
452            });
453            $scope.resultsFor = $scope.searchText;
454            $scope.searchPost(response[0].messageIds, isPagination, offset);
455          }).error(function (err) {
456            $scope.loading = false;
457            $scope.loadingMorePost = false;
458            sharedService.log(err);
459          });
460        }
461
462        function findNameOfSecondTag(url, typeToExclude) {
463          if (typeToExclude === "drug") {
464            typeToExclude = "drugName"
465          }
466          var URL = new window.URL(url);
467          var arrOfPossibleValues = ['drugName', 'regimen', 'sideEffect', 'supportiveTherapy', 'supportiveDrug', 'sentiment'];
468          for (var i = 0; i < arrOfPossibleValues.length; i++) {
469            if (arrOfPossibleValues[i] !== typeToExclude) {
470              var filterName = URL.searchParams.get(arrOfPossibleValues[i]);
471              if (filterName && filterName !== '') {
472                return {
473                  name: filterName,
474                  type: arrOfPossibleValues[i]
475                }
476              }
477            }
478          }
479        }
480
481        $scope.getUrlFromCombinations = function (obj) {
482          return svcSearchMod.getUrlFromCombinations(obj);
483        };
484
485        $scope.setPasteTrue = function () {
486          searchObj.suggestionObject.isPaste = true;
487        };
488
489        $scope.getCancers = function () {
490          searchService.getCancers()
491              .success(function (resp) {
492                $scope.cancers = resp.data;
493                $scope.cancers.forEach(function (cancer) {
494                  $scope.ailmentDomainMap[cancer.name] = cancer.value;
495                });
496              });
497        };
498
499        $scope.updateExpandAll = function (isExpandUpdate) {
500          if (isExpandUpdate) $scope.expandAll = !$scope.expandAll;
501          $scope.messages.forEach(function (msg) {
502            msg.viewMore = (msg.messageText.length > $scope.defaultMsgLength) && $scope.expandAll;
503          });
504        };
505
506        var checkIfOptionItemExist = function (term) {
507          return ((!term) || (!term.length) || (term === "All") || (term === "Select"));
508        };
509
510        function setUrlObj() {
511          var url = $location.url().split('?')[0].split('/');
512          urlObj = {
513            cancerName: url[1].toLowerCase(),
514            type: url[2].toLowerCase(),
515            s: url[3] ? url[3].replace(/-/g, ' ').toLowerCase() : '',
516            name: url[3] ? url[3].replace(/-/g, ' ').toLowerCase() : '',
517            type2: url[4] ? url[4].toLowerCase() : null,
518            s2: url[5] ? url[5].toLowerCase() : null,
519            type3: url[6] ? url[6].toLowerCase() : null,
520            s3: url[7] ? url[7].toLowerCase() : null
521          };
522          if (urlObj.type === 'conversations') {
523            urlObj.s = $routeParams.s || '';
524            urlObj.s = urlObj.s.replace(/-/g, ' ');
525          }
526          if (urlObj.type2 === 'side-effects') {
527            urlObj.s2 = urlObj.s2.replace(/-/g, ' ');
528          }
529        }
530
531        function setupSearchObject() {
532          searchObj.suggestionObject.isPaste = true;
533          $scope.searchText = searchObj.getSearchTextFromURL(urlObj);
534          searchObj.suggestionObject.searchText = $scope.searchText;
535          searchObj.suggestionObject.searchTextArray = $scope.searchText.split(' ');
536          searchObj.setCategoryFilters(urlObj.type2, urlObj.s2);
537          searchObj.setCategoryFilters(urlObj.type3, urlObj.s3);
538          searchObj.queried = searchParams.query;
539          $scope.filters = searchObj.createFiltersArray();
540          searchObj.isSearchView = false;
541          if (searchParams.isBrandName && searchParams.isBrandName !== "false") searchObj.isBrandName = 1;
542          searchObj.reference_check[searchParams.query] = {
543            genericName: searchParams.genericName,
544            name: urlObj.s,
545            type: searchObj.mapSearchType(urlObj.type)
546          };
547        }
548
549        function showMessages() {
550          setupSearchObject();
551          if (searchParams.isFilter) {
552            var type = searchObj.mapSearchType(searchObj.reference_check[searchParams.query] ?
553                searchObj.reference_check[searchParams.query].type : urlObj.type);
554            searchFilterMessages(type, 0, 0, searchParams.query, urlObj.s2 ? 1 : 0);
555          } else {
556            $scope.searchMessages(-1);
557          }
558        }
559
560        function getSearchSuggestions(name) {
561          return new Promise(function (resolve, reject) {
562            searchService.getSuggestions(name).success(function (response) {
563              for (var i = 0; i < response.length; i++) {
564                if (name.trim() === response[i].name.toLowerCase().trim()) {
565                  searchParams.genericName = response[i].genericName.toLowerCase();
566                  searchParams.query = response[i].name;
567                  break;
568                }
569              }
570              if (!searchParams.genericName) {
571                searchParams.genericName = name;
572                searchParams.query = name;
573              }
574              resolve();
575            });
576          });
577        }
578
579        (function init() {
580          setUrlObj();
581          searchObj.initialize();
582          searchParams = sharedService.getSearchParams();
583          searchParams.isFilter = (urlObj.type === 'conversations') ? 0 : 1;
584          $scope.getCancers();
585          $scope.heading = urlObj.s;
586          $scope.cancerUrl = $routeParams.cancerName;
587          sharedService.ailmentDomain = $routeParams.cancerName.replace(/-/g, ' ');
588          $scope.ailmentDomain = sharedService.ailmentDomain;
589          postIds = [];
590          $scope.filterModels = {};
591          setFiltersToEmpty();
592
593          $scope.isFuzzy = searchParams.isFuzzy === 1;
594          if (searchParams.isFilter && localStorageService.get("ailmentConversations")) {
595            $scope.ailmentConversations = localStorageService.get("ailmentConversations").slice(0);
596          }
597          searchService.fetchCancerFilters(sharedService.ailmentDomain)
598              .success(function (resp) {
599                $scope.cancerFilters = resp.data;
600                $scope.cancerFilters.filters.forEach(function (filter) {
601                  if (searchParams[filter.name.key]) {
602                    $scope.filterModels[filter.name.key] = searchParams[filter.name.key];
603                  }
604                });
605                if (searchParams.genericName && searchParams.query) {
606                  showMessages();
607                } else {
608                  getSearchSuggestions(urlObj.s).then(function () {
609                    showMessages();
610                  });
611                }
612              });
613
614          Auth.isLoggedInAsync(function (loggedIn) {
615            if (loggedIn) {
616              $scope.isLoggedIn = Auth.isLoggedIn();
617              $scope.getCurrentUser = Auth.getCurrentUser();
618              $scope.isAnnotator = Auth.isAnnotator();
619              $scope.isAdmin = Auth.isAdmin();
620              $scope.messageIds = $scope.getCurrentUser.bookmarks || [];
621            }
622          });
623        })();
624      }]);

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.