Guest User

Untitled

a guest
May 26th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.10 KB | None | 0 0
  1. var DNZSearch = new function DNZSearch() {
  2. var self = this;
  3.  
  4. self.serverRoot = null;
  5. self.APIDomain = null;
  6. self.hostedDomain = null;
  7. self.versionNumber = '';
  8. self.searchSlug = null;
  9. self.APIKey = null;
  10. self.stylesheet = '';
  11. self.numberOfResults = 20;
  12. self.logo = null;
  13. self.lastSearch = '';
  14.  
  15. self.initialize = function() {
  16. DNZOptions();
  17.  
  18. self.generateStructure();
  19. if (!self.optionsValid()) return;
  20. self.getStylesheet();
  21. if (self.logo != null) self.insertLogo();
  22.  
  23. document.getElementById('dnz_search_form').onsubmit = self.search;
  24. }
  25.  
  26. self.optionsValid = function() {
  27. var errorBlock = '';
  28.  
  29. if (self.serverRoot == null || self.serverRoot == '') errorBlock += '<h6>Please specify a server root</h6>';
  30. if (self.APIDomain == null || self.APIDomain == '') errorBlock += '<h6>Please specify an API domain</h6>';
  31. if (self.hostedDomain == null || self.hostedDomain == '') errorBlock += '<h6>Please specify a Hosted Search domain</h6>';
  32. if (self.searchSlug == null || self.searchSlug == '') errorBlock += '<h6>Please specify a Search Slug</h6>';
  33. if (self.APIKey == null || self.APIKey == '') errorBlock += '<h6>Please specify an API key</h6>'
  34.  
  35. if (errorBlock != '') {
  36. self.errorMessage(errorBlock);
  37. return false;
  38. }
  39. return true;
  40. }
  41.  
  42. self.errorMessage = function(message) {
  43. var container = document.getElementById('search_result_container');
  44. container.innerHTML = '';
  45. var errorBlock = document.createElement('div');
  46. errorBlock.className = 'dnz_search_block';
  47. errorBlock.innerHTML += message;
  48. container.appendChild(errorBlock);
  49. return;
  50. }
  51.  
  52. self.generateStructure = function() {
  53. var container = document.getElementById('dnz_search');
  54. var title = container.getElementsByTagName('h3')[0];
  55. var logo = container.getElementsByTagName('img')[0];
  56. logo.style.marginTop = '0px';
  57. var form = document.getElementById('dnz_search_form');
  58. container.removeChild(title);
  59. container.removeChild(logo);
  60.  
  61. //Generate and insert the header
  62. var header = document.createElement('div');
  63. header.id = 'dnz_search_header';
  64. container.insertBefore(header, form);
  65. header.appendChild(document.createElement('div'));
  66. header.appendChild(title);
  67.  
  68. form.innerHTML = '<div class="dnz_search_block" id="dnz_search_top">' + form.innerHTML + '</div>';
  69. search_block = document.getElementById('dnz_search_top');
  70. var loading = document.createElement('img');
  71. loading.id = 'dnz_loading';
  72. loading.src = self.serverRoot + 'images/search/loading.gif';
  73. loading.alt = 'Loading';
  74. loading.style.display = 'none';
  75. search_block.insertBefore(loading, document.getElementById('dnz_search_submit'));
  76. search_block.innerHTML += '<div id="dnz_search_top_meta"></div>';
  77.  
  78. container.innerHTML += '<div id="search_result_container"></div>';
  79.  
  80. var footer = document.createElement('div');
  81. footer.id = 'dnz_search_footer';
  82. var wrapper = document.createElement('div');
  83. wrapper.className = 'dnz_wrapper';
  84. footer.appendChild(wrapper);
  85. var padder = document.createElement('div');
  86. padder.style.paddingTop = "12px";
  87. wrapper.appendChild(padder);
  88. wrapper.getElementsByTagName('div')[0].appendChild(logo);
  89. wrapper.appendChild(document.createElement('span'));
  90. container.appendChild(footer);
  91. }
  92.  
  93. self.getStylesheet = function() {
  94. // Insert this.stylesheet into the <head>
  95. var header = document.getElementsByTagName("head")[0]
  96. var stylesheet = document.createElement("link");
  97. stylesheet.type = "text/css";
  98. stylesheet.rel = "stylesheet"
  99. stylesheet.href = this.stylesheet;
  100. stylesheet.media = 'screen';
  101. if (header) header.appendChild(stylesheet);
  102. };
  103.  
  104. self.insertLogo = function() {
  105. var img = document.createElement('img');
  106. img.src = self.logo;
  107. img.className = 'dnz_header_image';
  108. img.alt = document.getElementById('dnz_search_title').innerHTML;
  109. img.title = img.alt;
  110. var h3 = document.createElement('h3');
  111.  
  112. var header = document.getElementById('dnz_search_header');
  113. header.innerHTML = '<div></div>';
  114. h3.appendChild(img)
  115. header.appendChild(h3);
  116.  
  117. var search_top = document.getElementById('dnz_search_top');
  118.  
  119. search_top.innerHTML = '<h4>Search:</h4>' + search_top.innerHTML;
  120. }
  121.  
  122.  
  123. self.search = function() {
  124. self.lastSearch = document.getElementById('dnz_search_field').value;
  125. var request = self.buildRequest(self.lastSearch);
  126. self.sendRequest(request);
  127. self.timeOut = setTimeout('DNZSearch.serverDown()', 10000);
  128. return false;
  129. };
  130.  
  131. self.serverDown = function() {
  132. document.getElementById('dnz_loading').style.display = 'none';
  133. self.errorMessage('<h6>The server timed out</h6>');
  134. };
  135.  
  136. self.buildRequest = function(search_terms) {
  137. // Build a request based on the entered search terms, slug and API key
  138. var url = self.APIDomain + 'custom_searches/' + encodeURIComponent(self.searchSlug) + '.json?';
  139.  
  140. url += 'version_id=' + encodeURIComponent(self.versionNumber);
  141. url += '&search_text=' + encodeURIComponent(search_terms);
  142. url += '&api_key=' + encodeURIComponent(self.APIKey);
  143. url += '&max_results=' + self.numberOfResults;
  144. url += '&jsonp=DNZSearch.processResults';
  145. return url;
  146. };
  147.  
  148. self.sendRequest = function(request) {
  149. // Make a JSONP request with the built request
  150. var tag = document.createElement("script");
  151. tag.type = 'text/javascript';
  152. tag.src = request;
  153. document.getElementsByTagName('body')[0].appendChild(tag);
  154. document.getElementById('dnz_loading').style.display = 'block';
  155. };
  156.  
  157. self.processResults = function(response) {
  158.  
  159. clearTimeout(self.timeOut);
  160. document.getElementById('dnz_loading').style.display = 'none';
  161. var container = document.getElementById('search_result_container');
  162. container.innerHTML = '';
  163.  
  164. console.log(typeof(response));
  165. if (typeof(response) == 'string') {
  166. self.errorMessage('<h6>' + response + '</h6>');
  167. return;
  168. } else if (typeof(response) == 'object') {
  169.  
  170. if (response.results.length == 0) {
  171. self.errorMessage('<h6>No search results</h6>');
  172. return;
  173. }
  174. var resultHead = document.getElementById('dnz_search_top_meta');
  175. resultHead.innerHTML = '';
  176. var resultInsert = document.createElement('div');
  177. resultInsert.id = 'dnz_search_top_images';
  178.  
  179. var count = 1;
  180. for (id in response.results) {
  181. if(count <= 3) {
  182. if (response.results[id].thumbnail_url && response.results[id].thumbnail_url != '') {
  183. var imageLink = document.createElement('a');
  184. imageLink.href = response.results[id].source_url;
  185. imageLink.className = "dnz_image_wrapper";
  186. var img = document.createElement('img');
  187. img.alt = response.results[id].title;
  188. img.style.width = "50px";
  189. img.title = response.results[id].title;
  190. img.src = response.results[id].thumbnail_url;
  191. if (count == 1) imageLink.className = 'dnz_first';
  192. if (count == 3) imageLink.className = 'dnz_last';
  193. imageLink.appendChild(img);
  194. resultInsert.appendChild(imageLink);
  195. count += 1;
  196. }
  197. }
  198. }
  199.  
  200. resultHead.appendChild(resultInsert);
  201.  
  202. if (count > 1) {
  203. if(self.versionNumber != '') {
  204. resultHead.innerHTML += '<a href="' + self.hostedDomain + encodeURIComponent(self.searchSlug) + '/' + encodeURIComponent(self.versionNumber) + '/search?search_text=' + encodeURIComponent(self.lastSearch) + '&category=Images' + '">Show more image results</a>';
  205. } else {
  206. resultHead.innerHTML += '<a href="' + self.hostedDomain + encodeURIComponent(self.searchSlug) + '/search?search_text=' + encodeURIComponent(self.lastSearch) + '&category=Images' + '">Show more image results</a>';
  207. }
  208. }
  209.  
  210. if (response.results.length < self.numberOfResults) {
  211. resultHead.innerHTML += '<p>results 1 - ' + response.results.length + ' of ' + response.result_count + ' for ' + self.lastSearch + '</p>';
  212. } else {
  213. resultHead.innerHTML += '<p>results 1 - ' + self.numberOfResults + ' of ' + response.result_count + ' for ' + self.lastSearch + '</p>';
  214. }
  215. // container.appendChild(resultHead);
  216. var displayedResults = response.results.slice(0, 4);
  217. for (id in displayedResults) {
  218. if (typeof(displayedResults[id]) == 'function') return; //To deal with libraries that extend Array
  219. var row = document.createElement('div');
  220. row.className = 'dnz_search_block';
  221.  
  222. var header = document.createElement('h6');
  223. var link = document.createElement('a');
  224. link.href = displayedResults[id].source_url;
  225. link.href += '?slug=' + encodeURIComponent(self.searchSlug);
  226. link.href += '&api_key=' + encodeURIComponent(self.APIKey);
  227. link.innerHTML = displayedResults[id].title;
  228. header.appendChild(link);
  229. row.appendChild(header);
  230.  
  231. var para = document.createElement('p');
  232. para.innerHTML = displayedResults[id].description;
  233.  
  234. row.appendChild(para);
  235.  
  236. container.appendChild(row);
  237. }
  238.  
  239. //append read more link
  240. var result_list = document.getElementById('search_result_container').getElementsByTagName('div');
  241. var last_result = result_list[result_list.length -1];
  242.  
  243. if(self.versionNumber != '') {
  244. last_result.innerHTML += '<a id="dnz_show_more" href="' + self.hostedDomain + encodeURIComponent(self.searchSlug) + '/' + encodeURIComponent(self.versionNumber) + '/search?search_text=' + encodeURIComponent(self.lastSearch) + '">Show more results</a>';
  245. } else {
  246. last_result.innerHTML += '<a id="dnz_show_more" href="' + self.hostedDomain + encodeURIComponent(self.searchSlug) + '/search?search_text=' + encodeURIComponent(self.lastSearch) + '">Show more results</a>';
  247. }
  248.  
  249. } else {
  250. self.errorMessage('<h6>Invalid response from DNZ server</h6>');
  251. }
  252. };
  253.  
  254. };
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261. var FastInit = {
  262. onload : function() {
  263. if (FastInit.done) { return; }
  264. FastInit.done = true;
  265. for(var x = 0, al = FastInit.f.length; x < al; x++) {
  266. FastInit.f[x]();
  267. }
  268. },
  269. addOnLoad : function() {
  270. var a = arguments;
  271. for(var x = 0, al = a.length; x < al; x++) {
  272. if(typeof a[x] === 'function') {
  273. if (FastInit.done ) {
  274. a[x]();
  275. } else {
  276. FastInit.f.push(a[x]);
  277. }
  278. }
  279. }
  280. },
  281. listen : function() {
  282. if (/WebKit|khtml/i.test(navigator.userAgent)) {
  283. FastInit.timer = setInterval(function() {
  284. if (/loaded|complete/.test(document.readyState)) {
  285. clearInterval(FastInit.timer);
  286. delete FastInit.timer;
  287. FastInit.onload();
  288. }}, 10);
  289. } else if (document.addEventListener) {
  290. document.addEventListener('DOMContentLoaded', FastInit.onload, false);
  291. } else if(!FastInit.iew32) {
  292. if(window.addEventListener) {
  293. window.addEventListener('load', FastInit.onload, false);
  294. } else if (window.attachEvent) {
  295. return window.attachEvent('onload', FastInit.onload);
  296. }
  297. }
  298. },
  299. f:[],done:false,timer:null,iew32:false
  300. };
  301. /*@cc_on @*/
  302. /*@if (@_win32)
  303. FastInit.iew32 = true;
  304. document.write('<script id="__ie_onload" defer src="' + ((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
  305. document.getElementById('__ie_onload').onreadystatechange = function(){if (this.readyState == 'complete') { FastInit.onload(); }};
  306. /*@end @*/
  307. FastInit.listen();
  308.  
  309. FastInit.addOnLoad(DNZSearch.initialize);
Add Comment
Please, Sign In to add comment