PageSourceSearch

https://www.royaldraw.com/app/js/controllers/search.controller.js

js royaldraw.com collected 2026-10-03 22:00:24 UTC 5,221 bytes, 151 lines download raw bytes

1'use strict';
2
3angular
4 .module('app')
5 .controller(
6	'searchController',
7	['$scope', '$stateParams', '$timeout', 'apiService', 'subscService',
8	function($scope, $stateParams, $timeout, apiService, subscService) {
9		//console.log('searchController()');
10
11		$scope.init = function (){
12			//console.log('init() in searchController()');
13
14			// Setup scope
15			$scope.id = 'searchController';
16			$scope.scopeLoading = false;
17			$scope.searchLoading = false;
18			$scope.searched = false;
19			$scope.searchTimeout = null;
20			$scope.subscSearchResultsData = [];
21			$scope.newsSearchResultsData = [];
22			$scope.model = {};
23			$scope.model.searchText = ( defined($stateParams.q) ) ? $stateParams.q : '';
24
25			// Initiate search if we have a query on-load
26			if ( $scope.model.searchText.length ) {
27				$scope.search($scope.model.searchText);
28			}
29
30		}
31
32		$scope.searchTextChanged = function( $event ){
33			//console.log('searchTextChanged() in searchController()');
34			//console.log('$scope.model.searchText="' + $scope.model.searchText + '"');
35
36			// Cancel a previous search so searches don't pile up when the user types quickly
37			if ( $scope.searchTimeout ) {
38				//console.log('Cancelling previous $scope.searchTimeout in searchTextChanged() in searchController()');
39				var result = $timeout.cancel($scope.searchTimeout);
40				//console.log('result=' + result); console.dir(result);
41			}
42
43			// Skip if no search text
44			if ( ! $scope.model.searchText.length ) {
45				$scope.subscSearchResultsData = [];
46				$scope.newsSearchResultsData = [];
47				return;
48			}
49
50			// Fire off a search
51			var searchDelay = getConfValue('web.search_delay');
52			//console.log('searchDelay=' + searchDelay);
53			$scope.searchTimeout = $timeout(function(){
54				//console.log('searchTimeout() in searchTextChanged() in searchController()');
55				$scope.search($scope.model.searchText);
56			}, searchDelay);
57			$scope.searchTimeout.then(function successCallback ( result ) {
58				//console.log('searchTimeout() successCallback() in searchTextChanged() in searchController()');
59				$scope.searchTimeout = null;
60			}, function failureCallback ( result ) {
61				//console.log('searchTimeout() failureCallback() in searchTextChanged() in searchController()');
62				$scope.searchTimeout = null;
63			});
64
65		};
66
67		// (string) -> [{}]
68		// Return search result data for given search text
69		$scope.search = function( searchText ){
70			//console.log('search() in searchController()');
71			//console.log('searchText="' + searchText + '"');
72			$scope.searched = true;
73			$scope.searchLoading = true;
74			$scope.getSearch({searchText: searchText}).then(function successCallback ( result ) {
75				//console.log('getSearch() successCallback in search() in searchController()');
76				//console.log('result='); console.dir(result);
77
78				// Setup scope and process
79				$scope.subscSearchResultsData = [];
80				$scope.newsSearchResultsData = [];
81				var searchResultsData = result.data;
82				for ( var i = 0; i < searchResultsData.length; i++ ) {
83
84					// Process by type
85					var searchResultData = searchResultsData[i];
86					if ( searchResultData.type == 'SUBSC' ) {
87						$scope.subscSearchResultsData.push( searchResultData );
88					} else {
89						$scope.newsSearchResultsData.push( searchResultData );
90					}
91
92				}
93
94				// Unflag loading
95				$scope.searchLoading = false;
96
97				// Refresh scope
98				$scope.$apply();
99
100			}, function failureCallback ( result ) {
101				console.error('getSearch() failureCallback in search() in searchController()');
102				console.error('result='); console.dir(result);
103				$scope.searchLoading = false;
104			});
105		};
106
107		// () -> Promise
108		// Returns a promise and resolves with search results data
109		$scope.getSearch = function ( options ) {
110			//console.log('getSearch() in searchController()');
111			if ( ! options ) options = {};
112
113			// Options
114			var searchText = ( options.hasOwnProperty('searchText') && defined(options['searchText']) ) ? options['searchText'] : null;
115			//console.log('searchText="' + searchText + '"');
116
117			return new Promise( function(resolve, reject){
118				var url = '/api/search.php?action=search';
119				if ( defined(searchText) ) url += '&searchText=' + encodeURIComponent(searchText);
120				apiService.callAPI(url, {}, 'GET', {/*no data*/}, function (result) {
121					//console.log('apiService.callAPI() url="' + url + '" callback in getSearch() in searchController()');
122					//console.log('result='); console.dir(result);
123					if (result.success) {
124						var apiResponse = result.apiResponse.data;
125						var apiData = apiResponse.data;
126						resolve({data: apiData});
127					} else {
128						console.error('Failure result in apiService.callAPI() url="' + url + '" callback in getSearch() in searchController()');
129						console.error('result='); console.dir(result);
130						reject({message: 'apiService.callAPI() failure: result.success="' + result.success + '"'});
131					}
132
133				});
134			});
135		};
136
137
138
139		$scope.$on('$viewContentLoaded', function(){
140			//console.log('$viewContentLoaded in searchController()');
141		});
142
143		$scope.$on('$destroy', function(){ // Always stop background tasks (eg. timeouts, intervals) on-destroy to avoid memory leaks.
144			//console.log('$destroy in searchController()');
145		});
146
147		// Initialize
148		$scope.init();
149
150	}]
151);

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.