PageRenderTime 29ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/wd-instagram-feed/js/wdi_admin.js

https://bitbucket.org/lovetheidea/hop-website
JavaScript | 1376 lines | 1191 code | 100 blank | 85 comment | 67 complexity | 3e0bea0c4d93b787d7178c2e925751a3 MD5 | raw file
Possible License(s): GPL-2.0, MIT, Apache-2.0, BSD-3-Clause
  1. jQuery(document).ready(function() {
  2. /*Feeds page*/
  3. wdi_controller.bindSaveFeedEvent();
  4. wdi_controller.bindAddNewUserOrHashtagEvent();
  5. jQuery('.display_type input').on('click', function() {
  6. wdi_controller.displaySettingsSection(jQuery(this));
  7. });
  8. /*-----------Conditional Filters-----------*/
  9. wdi_controller.conditionalFiltersTabInit();
  10. /*Themes page*/
  11. wdi_controller.bindSaveThemeEvent();
  12. jQuery('#wdi_add_user_ajax').after(jQuery("<br><label class='wdi_pro_only' for='wdi_add_user_ajax_input'>" + wdi_messages.username_hashtag_multiple + "</label>"));
  13. if(jQuery('body').hasClass('instagram-feed-wd_page_wdi_settings')){
  14. wdi_advanced_option_controller();
  15. }
  16. });
  17. function wdi_advanced_option_controller() {
  18. var $table = jQuery(jQuery('#wdi_user_id').closest('form').find('.form-table').get(1));
  19. $table.addClass('wdi_advanced_option wdi_advanced_option_close');
  20. var tr = "<tr class='wdi_advanced_option_head'><th>ADVANCED OPTIONS</th><td><div class='wdi_advanced_option_icon'></div></td></tr>";
  21. $tr = jQuery(tr);
  22. $table.prepend($tr);
  23. $tr.on('click', function () {
  24. if ($table.hasClass('wdi_advanced_option_open')) {
  25. $table.removeClass('wdi_advanced_option_open');
  26. $table.addClass('wdi_advanced_option_close');
  27. } else {
  28. $table.removeClass('wdi_advanced_option_close');
  29. $table.addClass('wdi_advanced_option_open');
  30. }
  31. });
  32. }
  33. function wdi_controller() {};
  34. /**
  35. * Gets query parameter by name
  36. * @param {String} name [parameter name]
  37. * @return {String} [parameter value]
  38. */
  39. wdi_controller.getParameterByName = function(name) {
  40. name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
  41. var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
  42. results = regex.exec(location.search);
  43. return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
  44. }
  45. /**
  46. * Was tirggerd when redirected from api page
  47. * Sets access token from query string to input
  48. */
  49. wdi_controller.apiRedirected = function() {
  50. var access_token_raw = this.getParameterByName('access_token');
  51. var arr = access_token_raw.split('.');
  52. var validRegEx = /^[^\\\/&?><"']*$/;
  53. for (i = 0; i < arr.length; i++) {
  54. if (arr[i].match(validRegEx) === null) {
  55. return;
  56. }
  57. }
  58. var access_token = arr.join('.');
  59. jQuery(document).ready(function() {
  60. jQuery('#wdi_access_token').attr('value', access_token);
  61. });
  62. //if access token is getted then overwrite it
  63. wdi_controller.instagram.addToken(access_token);
  64. wdi_controller.getUserInfo(access_token);
  65. }
  66. /**
  67. * Used in Settings page for finding access token owners username
  68. * and and for filling it in username input field
  69. *
  70. * @param {String} access_token [Instagram API access token]
  71. */
  72. wdi_controller.getUserInfo = function(access_token) {
  73. this.instagram.getSelfInfo({
  74. success: function(response) {
  75. jQuery('#wdi_user_name').attr('value', response['data']['username']);
  76. jQuery('#wdi_user_id').attr('value', response['data']['id']);
  77. jQuery(document).trigger('wdi_settings_filled');
  78. }
  79. })
  80. }
  81. wdi_controller.oldDisplayType = {};
  82. wdi_controller.displayTypeMemory = {};
  83. /*
  84. * Switches between feeds admin page tabs
  85. */
  86. wdi_controller.switchFeedTabs = function(tabname, section) {
  87. //add tabname in hidden field
  88. jQuery('#wdi_refresh_tab').attr('value', tabname);
  89. //hiding options of other tabs
  90. jQuery('[tab]').each(function() {
  91. if (jQuery(this).attr('tab') != tabname) {
  92. jQuery(this).parent().parent().parent().parent().parent().filter('tr').css('display', 'none');
  93. } else {
  94. jQuery(this).parent().parent().parent().parent().parent().filter('tr').css('display', 'block');
  95. }
  96. });
  97. //hiding all display_type elements
  98. jQuery('.display_type').css('display', 'none');
  99. //showing only requested display_type tab elements
  100. jQuery('.display_type[tab="' + tabname + '"]').css('display', 'block');
  101. //swap active tab class
  102. jQuery('.wdi_feed_tabs').filter('.wdi_feed_tab_active').each(function() {
  103. jQuery(this).removeClass('wdi_feed_tab_active');
  104. });
  105. jQuery('#wdi_' + tabname).addClass('wdi_feed_tab_active');
  106. var selectedSection = jQuery();
  107. var sectionSelectedFLag = false;
  108. if (section != undefined && section != '') {
  109. //check value which came from backend
  110. selectedSection = jQuery('.display_type #' + section).prop('checked', true);
  111. jQuery('#wdi_feed_type').attr('value', section);
  112. //sectionSelectedFLag = true;
  113. }
  114. //find the selected feed_type option
  115. if (!sectionSelectedFLag) {
  116. selectedSection = jQuery('.display_type[tab="' + tabname + '"] input[name="feed_type"]:checked');
  117. if (selectedSection.length != 0) {
  118. sectionSelectedFLag = true;
  119. }
  120. }
  121. //if there are no selected feed_type option then set default option
  122. if (!sectionSelectedFLag) {
  123. //make default section as selected
  124. selectedSection = jQuery('.display_type[tab="' + tabname + '"] #thumbnails');
  125. if (selectedSection.length != 0) {
  126. sectionSelectedFLag = true;
  127. selectedSection.prop('checked', true);
  128. jQuery('#wdi_feed_type').attr('value', 'thumbnails');
  129. };
  130. }
  131. //if under currect tab we have feed_type section then show it
  132. if (sectionSelectedFLag) {
  133. wdi_controller.displaySettingsSection(selectedSection);
  134. }
  135. if( tabname != 'conditional_filters' ){
  136. jQuery( '#wdi-conditional-filters-ui' ).addClass('wdi_hidden');
  137. jQuery( '#wdi_save_feed_apply' ).removeClass( 'wdi_hidden' );
  138. jQuery( '#wdi_cancel_changes' ).removeClass( 'wdi_hidden' );
  139. jQuery( '#wdi_save_feed_submit' ).removeClass( 'wdi_hidden' );
  140. }else{
  141. jQuery( '#wdi-conditional-filters-ui' ).removeClass('wdi_hidden');
  142. jQuery( '#wdi_save_feed_apply' ).addClass( 'wdi_hidden' );
  143. jQuery( '#wdi_cancel_changes' ).addClass( 'wdi_hidden' );
  144. jQuery( '#wdi_save_feed_submit' ).addClass( 'wdi_hidden' );
  145. }
  146. }
  147. /*
  148. * Displays Settings Section for admin pages
  149. */
  150. wdi_controller.displaySettingsSection = function($this) {
  151. var sectionName = $this.attr('id').toLowerCase().trim();
  152. var tab = $this.parent().parent().attr('tab');
  153. var sectionHiddenField = jQuery('#wdi_refresh_section');
  154. wdi_controller.oldDisplayType = {
  155. 'section': sectionName,
  156. 'tab': tab
  157. };
  158. wdi_controller.displayTypeMemory[tab] = wdi_controller.oldDisplayType;
  159. //works only in theme page, because only theme page has #wdi_refresh_section hidden field
  160. if (sectionHiddenField != undefined) {
  161. sectionHiddenField.attr('value', sectionName);
  162. }
  163. var formTable = jQuery('.wdi_border_wrapper .form-table');
  164. jQuery('#wdi_feed_type').attr('value', sectionName);
  165. var i = 0,
  166. j = 0;
  167. var sectionFlag = false;
  168. formTable.find('tr').each(function() {
  169. i++;
  170. var sectionStr = jQuery(this).children().children().children().children().children().attr('section');
  171. if (sectionStr !== undefined) {
  172. sectionFlag = false;
  173. var sections = sectionStr.toLowerCase().trim().split(',');
  174. for (j = 0; j < sections.length; j++) {
  175. if (sections[j] === sectionName) {
  176. jQuery(this).css('display', 'block');
  177. sectionFlag = true;
  178. }
  179. }
  180. if (sectionFlag === false) {
  181. jQuery(this).css('display', 'none');
  182. }
  183. }
  184. });
  185. }
  186. /*
  187. * Switches between themes admin page tabs
  188. */
  189. wdi_controller.switchThemeTabs = function(tabname, section) {
  190. //swap active tab class
  191. jQuery('.wdi_feed_tabs').filter('.wdi_feed_tab_active').each(function() {
  192. jQuery(this).removeClass('wdi_feed_tab_active');
  193. });
  194. jQuery('#wdi_' + tabname).addClass('wdi_feed_tab_active');
  195. //hiding options of other tabs
  196. jQuery('[tab]').each(function() {
  197. if (jQuery(this).attr('tab') != tabname) {
  198. jQuery(this).parent().parent().parent().parent().parent().filter('tr').css('display', 'none');
  199. } else {
  200. jQuery(this).parent().parent().parent().parent().parent().filter('tr').css('display', 'block');
  201. }
  202. });
  203. //hiding all display_type elements
  204. jQuery('.display_type').css('display', 'none');
  205. //showing only requested display_type tab elements
  206. jQuery('.display_type[tab="' + tabname + '"]').css('display', 'block');
  207. //add tabname in hidden field
  208. jQuery('#wdi_refresh_tab').attr('value', tabname);
  209. //add sectionname in hidden field
  210. if (section != undefined && section != '') {
  211. jQuery('#wdi_refresh_section').attr('value', section);
  212. }
  213. //check if any section was previously clicked then set to that section
  214. if (section == undefined && section != '') {
  215. if (wdi_controller.displayTypeMemory[tabname] != undefined) {
  216. jQuery('.display_type #' + wdi_controller.displayTypeMemory[tabname]['section']).trigger('click');
  217. } else {
  218. //default section
  219. jQuery('.display_type[tab="' + tabname + '"]').first().find('input').trigger('click');
  220. }
  221. } else {
  222. jQuery('.display_type #' + section).trigger('click');
  223. }
  224. }
  225. /**
  226. * Binds events to control buttons
  227. */
  228. wdi_controller.bindSaveFeedEvent = function() {
  229. var _this = this;
  230. jQuery('#wdi_save_feed_submit').on('click', function() {
  231. _this.save_feed('save_feed')
  232. });
  233. jQuery('#wdi_save_feed_apply').on('click', function() {
  234. _this.save_feed('apply_changes')
  235. });
  236. jQuery('#wdi_cancel_changes').on('click', function() {
  237. _this.save_feed('cancel')
  238. });
  239. }
  240. /**
  241. * Submits form baset on given task
  242. * if task is cancel then it reloades the page
  243. * @param {String} task [this is self explanatory]
  244. */
  245. wdi_controller.save_feed = function(task) {
  246. if ("cancel" == task) {
  247. window.location = window.location.href;
  248. }
  249. //check if user input field is not empty then cancel save process and make an ajax request
  250. //add user in input field and then after it trigger save,apply or whatever
  251. wdi_controller.checkIfUserNotSaved(task);
  252. if (wdi_controller.waitingAjaxRequestEnd.button != 0) {
  253. return;
  254. };
  255. jQuery('#task').attr('value', task);
  256. var feed_users = this.feed_users,
  257. feed_users_json,
  258. id,
  259. username,
  260. errorInfo,
  261. profile_picture,
  262. defaultUser = {
  263. username: jQuery('#wdi_default_user').val(),
  264. id: jQuery('#wdi_default_user_id').val()
  265. };
  266. if (feed_users.length == 0) {
  267. feed_users.push(defaultUser);
  268. this.updateFeaturedImageSelect(defaultUser['username'], 'add', 'selected');
  269. }
  270. feed_users_json = this.stringifyUserData(feed_users);
  271. jQuery('#WDI_feed_users').val(feed_users_json);
  272. if (task == 'apply_changes' || task == 'save_feed') {
  273. id = jQuery('#wdi_add_or_edit').attr('value');
  274. jQuery('#wdi_current_id').attr('value', id);
  275. }
  276. username = jQuery('#WDI_thumb_user').val();
  277. //errorInfo = '';
  278. profile_picture = this.getUserProfilePic(username);
  279. //if username is selected default user and we don't have default users image then request it
  280. //typeof profile_picture will be undefined when user without adding any user submits form
  281. if ('false' == profile_picture || typeof profile_picture == 'undefined') {
  282. var _this = this;
  283. this.instagram.searchForUsersByName(username, {
  284. success: function(response) {
  285. var vObj = _this.isValidResponse(response),
  286. user = _this.findUser(username, response),
  287. profile_picture;
  288. if (vObj.valid && _this.hasData(response) && user) {
  289. profile_picture = user['profile_picture'];
  290. } else {
  291. profile_picture = '';
  292. }
  293. jQuery('#wdi_feed_thumb').attr('value', profile_picture);
  294. jQuery('#wdi_save_feed').submit();
  295. }
  296. });
  297. } else {
  298. jQuery('#wdi_feed_thumb').attr('value', profile_picture);
  299. jQuery('#wdi_save_feed').submit();
  300. }
  301. }
  302. /**
  303. * Takes user input as argument and makes an
  304. * instagram request for getting meta info such as username and user id
  305. * stores getted data in wdi_controller.feed_users array and updates some admin elements which
  306. * depend on users
  307. *
  308. * @param {String} user_input [username or hashtag, Note. hashtags should start with #]
  309. * @param {String} backend [if is set to 'backend' all confirms will be ignored while making requests]
  310. * @return {Void}
  311. */
  312. wdi_controller.makeInstagramUserRequest = function(user_input, ignoreConfirm) {
  313. var newUser, input_type, _this = this,
  314. selected;
  315. input_type = this.getInputType(user_input);
  316. if (wdi_version.is_pro == 'false') {
  317. if (jQuery('.wdi_user').length == 1) {
  318. alert(wdi_messages.only_one_user_or_hashtag);
  319. return;
  320. }
  321. }
  322. switch (input_type) {
  323. case 'user':
  324. {
  325. this.instagram.searchForUsersByName(user_input, {
  326. success: function(response) {
  327. //contains information about response such as error messages and if
  328. //response is valid or not
  329. var vObj = _this.isValidResponse(response);
  330. if(vObj.valid == false){
  331. alert(vObj.msg);
  332. return;
  333. }
  334. //this is the user object we are searching for, of user does not exists then it is false
  335. var user = _this.findUser(user_input, response);
  336. if (vObj.valid && _this.hasData(response) && user) {
  337. _this.addUser(user);
  338. if (wdi_version.is_pro == 'false') {
  339. if (jQuery('.wdi_user').length == 1) {
  340. jQuery('#wdi_add_user_ajax_input').attr('disabled', 'disabled');
  341. jQuery('#wdi_add_user_ajax_input').attr('placeholder', wdi_messages.available_in_pro);
  342. }
  343. }
  344. } else {
  345. if (!user) {
  346. alert( wdi_messages.user_not_exist.replace("%s",'"'+ user_input + '"'))
  347. } else {
  348. alert(vObj.msg);
  349. }
  350. }
  351. }
  352. });
  353. break;
  354. }
  355. case 'hashtag':
  356. {
  357. var tagname = user_input.substr(1, user_input.length);
  358. tagname = tagname.replace(" ",'');
  359. this.instagram.getTagRecentMedia(tagname, {
  360. success: function(response) {
  361. //contain information about response such as error messages and if
  362. //response is valid or not
  363. var vObj = _this.isValidResponse(response);
  364. if (vObj.valid && _this.hasData(response)) {
  365. _this.addHashtag(tagname, response);
  366. if (wdi_version.is_pro == 'false') {
  367. if (jQuery('.wdi_user').length == 1) {
  368. jQuery('#wdi_add_user_ajax_input').attr('disabled', 'disabled');
  369. jQuery('#wdi_add_user_ajax_input').attr('placeholder', wdi_messages.available_in_pro);
  370. }
  371. }
  372. } else {
  373. if (!_this.hasData(response) && vObj.msg == 'success') {
  374. if (ignoreConfirm != true) {
  375. if (confirm(wdi_messages.hashtag_no_data)) {
  376. _this.addHashtag(tagname, response);
  377. if (wdi_version.is_pro == 'false') {
  378. if (jQuery('.wdi_user').length == 1) {
  379. jQuery('#wdi_add_user_ajax_input').attr('disabled', 'disabled');
  380. jQuery('#wdi_add_user_ajax_input').attr('placeholder', wdi_messages.available_in_pro);
  381. }
  382. }
  383. } else {
  384. jQuery('#wdi_add_user_ajax_input').val('');
  385. };
  386. } else {
  387. _this.addHashtag(tagname, response);
  388. if (wdi_version.is_pro == 'false') {
  389. if (jQuery('.wdi_user').length == 1) {
  390. jQuery('#wdi_add_user_ajax_input').attr('disabled', 'disabled');
  391. jQuery('#wdi_add_user_ajax_input').attr('placeholder', wdi_messages.available_in_pro);
  392. }
  393. }
  394. }
  395. } else {
  396. alert(vObj.msg);
  397. }
  398. }
  399. }
  400. });
  401. break;
  402. }
  403. }
  404. }
  405. /**
  406. * Scans wdi_controller.feed_users array and if duplicate matched then returns false else true
  407. * @param {String} username [name of user we want to check]
  408. * @return {Boolean}
  409. */
  410. wdi_controller.checkForDuplicateUser = function(username) {
  411. for (var i = 0; i < this.feed_users.length; i++) {
  412. if (username == this.feed_users[i]['username']) {
  413. return true;
  414. }
  415. }
  416. return false;
  417. }
  418. wdi_controller.getInputType = function(input) {
  419. switch (input[0]) {
  420. case '#':
  421. {
  422. return 'hashtag';
  423. break;
  424. }
  425. case '%':
  426. {
  427. return 'location';
  428. break;
  429. }
  430. default:
  431. {
  432. return 'user';
  433. break;
  434. }
  435. }
  436. }
  437. /**
  438. * Makes username and id pairs from users array and return json_encoded string
  439. * @param {Array} feed_users [array of feed_users containing username and id and other parameters]
  440. * @return {String} [JSON encoded data]
  441. */
  442. wdi_controller.stringifyUserData = function(feed_users) {
  443. var users = [];
  444. for (var i = 0; i < feed_users.length; i++) {
  445. users.push({
  446. username: feed_users[i]['username'],
  447. id: feed_users[i]['id']
  448. })
  449. }
  450. return JSON.stringify(users);
  451. }
  452. /**
  453. * Binds 'click' and 'enter' event to add user button
  454. *
  455. */
  456. wdi_controller.bindAddNewUserOrHashtagEvent = function() {
  457. jQuery('#wdi_add_user_ajax').on('click', function() {
  458. var user_input = jQuery('#wdi_add_user_ajax_input').val().trim().toLowerCase();
  459. wdi_controller.makeInstagramUserRequest(user_input);
  460. });
  461. jQuery('#wdi_add_user_ajax_input').on("keypress", function(e) {
  462. if (e.keyCode == 13) {
  463. var user_input = jQuery('#wdi_add_user_ajax_input').val().trim().toLowerCase();
  464. wdi_controller.makeInstagramUserRequest(user_input);
  465. return false; // prevent the button click from happening
  466. }
  467. });
  468. }
  469. /**
  470. * Removes users from internal wdi_controller.feed_users array and also
  471. * updates GUI (by removing user elements)
  472. *
  473. * @param {Object} $this [jQuery object of remove user button]
  474. */
  475. wdi_controller.removeFeedUser = function($this) {
  476. var username = $this.parent().find('a span').text();
  477. if ($this.parent().find('a span').hasClass('wdi_hashtag')) {
  478. username = '#' + username;
  479. }
  480. for (var i = 0; i < this.feed_users.length; i++) {
  481. if (this.feed_users[i]['username'] == username) {
  482. this.feed_users.splice(i, 1);
  483. break;
  484. }
  485. }
  486. $this.parent().remove();
  487. //wdi_controller.updateHiddenField();
  488. if (username !== jQuery('#wdi_default_user').val()) {
  489. wdi_controller.updateFeaturedImageSelect(username, 'remove');
  490. }
  491. if(wdi_version.is_pro == 'false'){
  492. if( jQuery('.wdi_user').length == 0 ){
  493. jQuery('#wdi_add_user_ajax_input').removeAttr('disabled');
  494. jQuery('#wdi_add_user_ajax_input').attr('placeholder','');
  495. }
  496. }
  497. }
  498. /**
  499. * Adds or removes users from featured image select
  500. *
  501. * @param {String} username [username of user we want to add/remove]
  502. * @param {String} action [valid options are 'add' and 'remove']
  503. * @param {String} selected [if is set 'selected' then user will be marked as selected in select element]
  504. */
  505. wdi_controller.updateFeaturedImageSelect = function(username, action, selected) {
  506. var select = jQuery('#WDI_thumb_user');
  507. if (selected != 'selected') {
  508. selected = '';
  509. }
  510. switch (action) {
  511. case 'add':
  512. {
  513. //check if there is no duplicate then add
  514. var flag = select.find('option[value="' + username + '"]').length;
  515. if (!flag) {
  516. var option = jQuery('<option ' + selected + ' value="' + username + '">' + username + '</option>');
  517. select.append(option);
  518. }
  519. break;
  520. }
  521. case 'remove':
  522. {
  523. select.find('option[value="' + username + '"]').remove();
  524. break;
  525. }
  526. }
  527. }
  528. ////////////////////////////////////////////////////////////////////////////////
  529. ///////////////////////////////Themes Page//////////////////////////////////////
  530. ////////////////////////////////////////////////////////////////////////////////
  531. wdi_controller.bindSaveThemeEvent = function() {
  532. jQuery('#wdi_save_theme_submit').on('click', function() {
  533. jQuery('#task').attr('value', 'save_feed');
  534. jQuery('#wdi_save_feed').submit();
  535. });
  536. jQuery('#wdi_save_theme_apply').on('click', function() {
  537. jQuery('#task').attr('value', 'apply_changes');
  538. var id = jQuery('#wdi_add_or_edit').attr('value');
  539. jQuery('#wdi_current_id').attr('value', id);
  540. jQuery('#wdi_save_feed').submit();
  541. });
  542. jQuery('#wdi_save_theme_reset').on('click', function() {
  543. jQuery('#task').attr('value', 'reset_changes');
  544. var id = jQuery('#wdi_add_or_edit').attr('value');
  545. jQuery('#wdi_current_id').attr('value', id);
  546. jQuery('#wdi_save_feed').submit();
  547. });
  548. }
  549. /**
  550. * This function is called when one of controll buttons are being clicked
  551. * it checks if user has typed any username in unsername input
  552. * but forgetted to add it then it creates an object called wdi_controller.waitingAjaxRequestEnd
  553. * which previous task
  554. *
  555. * @param {String} task [how to save element save/apply/reset]
  556. * @return {Boolean} [1 if user forgotted to save and 0 if input field was empty]
  557. */
  558. wdi_controller.checkIfUserNotSaved = function(task) {
  559. switch (task) {
  560. case 'save_feed':
  561. {
  562. task = 'submit';
  563. break;
  564. }
  565. case 'apply_changes':
  566. {
  567. task = "apply";
  568. break;
  569. }
  570. case 'reset_changes':
  571. {
  572. task = 'reset';
  573. break;
  574. }
  575. }
  576. //checking if user has typed username in input field but didn't saved it, trigger add action
  577. if (jQuery('#wdi_add_user_ajax_input').val().trim() != '') {
  578. var user_input = jQuery('#wdi_add_user_ajax_input').val().trim().toLowerCase();
  579. wdi_controller.waitingAjaxRequestEnd = {
  580. button: task
  581. };
  582. //making request
  583. wdi_controller.makeInstagramUserRequest(user_input);
  584. return 1;
  585. } else {
  586. wdi_controller.waitingAjaxRequestEnd = {
  587. button: 0
  588. };
  589. return 0;
  590. }
  591. }
  592. /**
  593. * if user was clicked save before ajax request then trigger save after getting info
  594. *
  595. * @param {String} correctUserFlag [if set to false form wouldn't be submitted]
  596. */
  597. wdi_controller.saveFeedAfterAjaxWait = function(correctUserFlag) {
  598. if (wdi_controller.waitingAjaxRequestEnd != undefined) {
  599. //if save button was clicked before ajax request then trigger save button
  600. var save_type_btn = wdi_controller.waitingAjaxRequestEnd.button;
  601. if (correctUserFlag && save_type_btn != 0) {
  602. jQuery('#wdi_save_feed_' + save_type_btn).trigger('click');
  603. }
  604. wdi_controller.waitingAjaxRequestEnd = undefined;
  605. }
  606. }
  607. /**
  608. * Gets cookie value by name
  609. * @param {String} name [cookie name]
  610. * @return {String} [cookie value]
  611. */
  612. wdi_controller.getCookie = function(name) {
  613. var value = "; " + document.cookie;
  614. var parts = value.split("; " + name + "=");
  615. if (parts.length == 2) return parts.pop().split(";").shift();
  616. }
  617. /**
  618. * Checks if response has meta code other then 200 or if it has not any data in it
  619. * then returns false
  620. * @param {Object} response [Instagram API response]
  621. * @return {Boolean}
  622. */
  623. wdi_controller.isValidResponse = function(response) {
  624. var obj = {};
  625. if (typeof response == 'undefined' || typeof response['meta']['code'] == 'undefined' || response['meta']['code'] != 200) {
  626. obj.valid = false;
  627. if (typeof response == 'undefined') {
  628. obj.msg = wdi_messages.instagram_server_error;
  629. } else if (response['meta']['code'] !== 200) {
  630. obj.msg = response['meta']['error_message'];
  631. } else {
  632. obj.msg = '';
  633. }
  634. } else {
  635. obj.valid = true;
  636. obj.msg = 'success';
  637. }
  638. return obj;
  639. }
  640. /**
  641. * Return true if response has data object which is not empty
  642. * @param {Onject} response [instagram API response]
  643. * @return {Boolean} [true or false]
  644. */
  645. wdi_controller.hasData = function(response) {
  646. if (typeof response != 'undefined' && typeof response['data'] != 'undefined' && response['data'].length != 0) {
  647. return true;
  648. } else {
  649. return false;
  650. }
  651. }
  652. /**
  653. * Return true if user is featured user
  654. * @param {String} [user] username we want to check
  655. * @return {Boolean} true or false
  656. */
  657. wdi_controller.thumbUser = function(user) {
  658. return (jQuery('#wdi_thumb_user').val() == user) ? true : false;
  659. }
  660. /**
  661. * finds user by username in instagram api request object
  662. * if user is found then returns user object otherwise returns false
  663. *
  664. * @param {String} username [username we are searching for]
  665. * @param {Object} response [instagram API response]
  666. * @return {Boolenan || Object}
  667. */
  668. wdi_controller.findUser = function(username, response) {
  669. var data = [];
  670. if (typeof response != 'undefined' && typeof response['data'] != 'undefined') {
  671. data = response['data'];
  672. }
  673. for (var i = 0; i < data.length; i++) {
  674. if (data[i]['username'] == username) {
  675. return data[i];
  676. }
  677. }
  678. return false;
  679. }
  680. /**
  681. * Sanitizes hashtag and if it's ok then add it to internal wdi_controller.feed_users array
  682. * besodes that it also updates GUI
  683. *
  684. * @param {String} tagname [name of hashtag to add without '#']
  685. * @param {Object} response [instagram API response]
  686. */
  687. wdi_controller.addHashtag = function(tagname, response) {
  688. //if tagname doesn't contain invalid characters
  689. if (tagname.match(/[~!@$%&*#^()<>?]/) == null) {
  690. if (this.checkForDuplicateUser('#' + tagname) == false) {
  691. var newHashtag = jQuery('<div class="wdi_user"><a target="_blank" href="https://instagram.com/explore/tags/' + tagname + '">' + '<img class="wdi_profile_pic" src="' + wdi_url.plugin_url + '/images/hashtag.png"><span class="wdi_hashtag">' + tagname + '</span><i style="display:table-cell;width:25px;"></i></a><img class="wdi_remove_user" onclick="wdi_controller.removeFeedUser(jQuery(this))" src="' + wdi_url.plugin_url + '/images/delete_user.png"></div>');
  692. jQuery('#wdi_feed_users').append(newHashtag);
  693. jQuery('#wdi_add_user_ajax_input').attr('value', '');
  694. var profile_picture;
  695. if (typeof response != 'undefined') {
  696. profile_picture = (response['data'].length != 0) ? response['data'][0]['images']['thumbnail']['url'] : '';
  697. } else {
  698. profile_picture = '';
  699. }
  700. this.feed_users.push({
  701. username: '#' + tagname,
  702. id: '#' + tagname,
  703. profile_picture: profile_picture
  704. });
  705. var user_input = '#' + tagname;
  706. selected = this.thumbUser(user_input) ? 'selected' : '';
  707. wdi_controller.updateFeaturedImageSelect(user_input, 'add', selected);
  708. } else {
  709. alert('#' + tagname + ' ' + wdi_messages.already_added);
  710. }
  711. } else {
  712. alert(wdi_messages.invalid_hashtag);
  713. }
  714. this.updateConditionalFiltersUi();
  715. wdi_controller.saveFeedAfterAjaxWait(true);
  716. }
  717. /**
  718. * Adds given user to internal array wdi_controller.feed_users and also updates GUI
  719. *
  720. * @param {Object} user [Object conatining user information such as id, username and profile picture]
  721. */
  722. wdi_controller.addUser = function(user) {
  723. if (this.checkForDuplicateUser(user.username) == false) {
  724. newUser = jQuery('<div class="wdi_user"><a target="_blank" href="http://www.instagram.com/' + user.username + '">' + '<img class="wdi_profile_pic" src="' + user['profile_picture'] + '"><span class="wdi_username">' + user.username + '</span><i style="display:table-cell;width:25px;"></i></a><img class="wdi_remove_user" onclick="wdi_controller.removeFeedUser(jQuery(this))" src="' + wdi_url.plugin_url + '/images/delete_user.png"></div>');
  725. jQuery('#wdi_feed_users').append(newUser);
  726. jQuery('#wdi_add_user_ajax_input').attr('value', '');
  727. this.feed_users.push({
  728. username: user['username'],
  729. id: user['id'],
  730. profile_picture: user['profile_picture']
  731. });
  732. } else {
  733. alert(user.username + ' ' + wdi_messages.already_added);
  734. }
  735. //_this.updateHiddenField();
  736. selected = this.thumbUser(user.username) ? 'selected' : '';
  737. this.updateFeaturedImageSelect(user.username, 'add', selected);
  738. this.updateConditionalFiltersUi();
  739. wdi_controller.saveFeedAfterAjaxWait(true);
  740. }
  741. /**
  742. * Scans internal wdi_controller.feed_users array and return profile picture url of given user
  743. * if there is no profile picture then returns blank string
  744. *
  745. * @param {String} username
  746. * @return {String} ['profile picture url of user']
  747. */
  748. wdi_controller.getUserProfilePic = function(username) {
  749. for (var i = 0; i < this.feed_users.length; i++) {
  750. if (username == this.feed_users[i]['username']) {
  751. return this.feed_users[i]['profile_picture'];
  752. }
  753. }
  754. return 'false';
  755. }
  756. /*-------------------------------------------------------------
  757. ----------------Conditional Filters Tab Methods----------------
  758. -------------------------------------------------------------*/
  759. /**
  760. * Initiailizes conditional filter tabs with variables and methods
  761. */
  762. wdi_controller.conditionalFiltersTabInit = function() {
  763. //get data from textarea and display it
  764. this.setInitialFilters();
  765. this.updateFiltersUi();
  766. var _this = this;
  767. jQuery('#wdi_add_filter').on('click', function() {
  768. _this.addConditionalFilter();
  769. jQuery('#wdi_filter_input').val('');
  770. })
  771. jQuery('.wdi_filter_radio').on('click', function() {
  772. jQuery('#wdi_filter_input').trigger('focus');
  773. });
  774. jQuery('#wdi_filter_input').on('keypress', function(e) {
  775. if (e.keyCode == 13) {
  776. _this.addConditionalFilter();
  777. jQuery(this).val('');
  778. return false; // prevent the button click from happening
  779. }
  780. });
  781. conditional_filters_toggler();
  782. jQuery('#WDI_wrap_conditional_filter_enable input').on('change',function(){
  783. conditional_filters_toggler();
  784. })
  785. function conditional_filters_toggler(){
  786. switch(jQuery('#WDI_wrap_conditional_filter_enable input:checked').val()){
  787. case '0':{
  788. jQuery('#WDI_conditional_filters').parent().parent().addClass('wdi_hidden');
  789. jQuery('#WDI_conditional_filter_type').parent().parent().parent().parent().parent().addClass('wdi_hidden');
  790. jQuery('#wdi_final_condition').addClass('wdi_hidden');
  791. jQuery('#WDI_filter_source').addClass('wdi_hidden');
  792. break;
  793. }
  794. case '1':{
  795. jQuery('#WDI_conditional_filters').parent().parent().removeClass('wdi_hidden');
  796. jQuery('#WDI_conditional_filter_type').parent().parent().parent().parent().parent().removeClass('wdi_hidden');
  797. jQuery('#wdi_final_condition').removeClass('wdi_hidden');
  798. jQuery('#WDI_filter_source').removeClass('wdi_hidden');
  799. break;
  800. }
  801. }
  802. }
  803. jQuery('#WDI_conditional_filter_type').on('change',function(){
  804. if(jQuery(this).val() == 'none'){
  805. }else{
  806. jQuery('#WDI_conditional_filters').css('display','block');
  807. }
  808. jQuery(this).parent().find('label').css({
  809. 'line-height' : '24px',
  810. 'height' : '24px',
  811. 'padding' : '2px 5px',
  812. 'display' : 'inline-block',
  813. 'font-size': '15px',
  814. 'color': 'black',
  815. 'font-weight': '500',
  816. '-webkit-user-select': 'none', /* Chrome/Safari */
  817. '-moz-user-select': 'none', /* Firefox */
  818. '-ms-user-select': 'none', /* IE10+ */
  819. /* Rules below not implemented in browsers yet */
  820. '-o-user-select': 'none',
  821. 'user-select': 'none',
  822. });
  823. switch( jQuery(this).val()){
  824. case 'AND':{
  825. jQuery('#WDI_conditional_filters').css('display','block');
  826. jQuery(this).parent().find('label').html(wdi_messages.and_descr);
  827. break;
  828. }
  829. case 'OR':{
  830. jQuery('#WDI_conditional_filters').css('display','block');
  831. jQuery(this).parent().find('label').html(wdi_messages.or_descr);
  832. break;
  833. }
  834. case 'NOR':{
  835. jQuery('#WDI_conditional_filters').css('display','block');
  836. jQuery(this).parent().find('label').html(wdi_messages.nor_descr);
  837. break;
  838. }
  839. }
  840. wdi_controller.updateFiltersUi();
  841. });
  842. //triggering change for updating first time
  843. jQuery('#WDI_conditional_filter_type').trigger('change');
  844. }
  845. /**
  846. * Takes user input and adds new filter based on filter type and user input
  847. */
  848. wdi_controller.addConditionalFilter = function() {
  849. var input = jQuery('#wdi_filter_input').val(),
  850. //filter_type = jQuery('input[name="wdi_filter_type"]:checked').val(),
  851. filter_type = jQuery('#wdi_filter_type').val(),
  852. filter = {};
  853. if( input == '' ) { return; }
  854. input = input.trim();
  855. switch(filter_type){
  856. case 'username':{
  857. if( input[0] == '@' ){
  858. input = input.substr(1,input.length);
  859. }
  860. break;
  861. }
  862. case 'mention':{
  863. if( input[0] == '@' ){
  864. input = input.substr(1,input.length);
  865. }
  866. break;
  867. }
  868. case 'hashtag':{
  869. if( input[0] == '#' ){
  870. input = input.substr(1,input.length);
  871. }
  872. break;
  873. }
  874. case 'url':{
  875. var urlRegex = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
  876. if(!urlRegex.test(input)){
  877. alert(wdi_messages.invalid_url);
  878. return;
  879. }
  880. break;
  881. }
  882. }
  883. filter = {
  884. 'filter_type': filter_type,
  885. 'filter_by': input,
  886. 'id': this.randomId()
  887. };
  888. if( filter_type != null ){
  889. if( !this.filterExists(filter) ){
  890. this.conditionalFilters.push(filter);
  891. this.updateFiltersUi();
  892. }else{
  893. alert(input + ' ' + wdi_messages.already_added);
  894. }
  895. }else{
  896. alert(wdi_messages.selectConditionType);
  897. }
  898. }
  899. /**
  900. * Returns true if filter exists else returns false
  901. * @param {Object} filter [Filter objecr]
  902. * @return {Booleans} [true or false]
  903. */
  904. wdi_controller.filterExists = function(filter) {
  905. for (var i = 0; i < this.conditionalFilters.length; i++) {
  906. if (this.conditionalFilters[i].filter_type == filter.filter_type && this.conditionalFilters[i].filter_by == filter.filter_by) {
  907. return true;
  908. }
  909. }
  910. return false;
  911. }
  912. /**
  913. * Updates #wdi_filters_ui div to the latest version of filters according wdi_controller.conditionalFilters
  914. */
  915. wdi_controller.updateFiltersUi = function(){
  916. var uiElement = jQuery('#wdi_filters_ui').html('');
  917. for( var i = 0; i < this.conditionalFilters.length; i++ ){
  918. if( i == 0 ){
  919. if( this.conditionalFilters.length != 1 ){
  920. switch( jQuery('#WDI_conditional_filter_type').val() ){
  921. case 'AND':{
  922. break;
  923. }
  924. case 'OR':{
  925. uiElement.append(jQuery('<span class="wdi_logic">'+wdi_messages.either+'</span>'));
  926. break;
  927. }
  928. case 'NOR':{
  929. uiElement.append(jQuery('<span class="wdi_logic">'+wdi_messages.neither+'</span>'));
  930. break;
  931. }
  932. }
  933. }else{
  934. switch( jQuery('#WDI_conditional_filter_type').val() ){
  935. case 'AND':{
  936. break;
  937. }
  938. case 'OR':{
  939. break;
  940. }
  941. case 'NOR':{
  942. uiElement.append(jQuery('<span class="wdi_logic">'+wdi_messages.not+'</span>'));
  943. break;
  944. }
  945. }
  946. }
  947. }
  948. var glue;
  949. switch(jQuery('#WDI_conditional_filter_type').val()){
  950. case 'AND':{
  951. glue = wdi_messages.and;
  952. break;
  953. }
  954. case 'OR':{
  955. glue = wdi_messages.or;
  956. break;
  957. }
  958. case 'NOR': {
  959. glue = wdi_messages.nor;
  960. break;
  961. }
  962. }
  963. if( i>=1 ){
  964. uiElement.append(jQuery('<span class="wdi_logic">'+glue+'</span>'));
  965. }
  966. uiElement.append(this.createUiElement(this.conditionalFilters[i]));
  967. }
  968. this.updateFilterTextarea();
  969. }
  970. /**
  971. * Creates jQuery element for filter
  972. * @param {Object} filter [filter object]
  973. * @return {Object} [jQuery Object]
  974. */
  975. wdi_controller.createUiElement = function(filter){
  976. var specialChar;
  977. switch(filter['filter_type']){
  978. case 'mention':{
  979. specialChar = '@';
  980. break;
  981. }
  982. case 'hashtag':{
  983. specialChar = '#';
  984. break;
  985. }
  986. case 'location':{
  987. specialChar = '%';
  988. break;
  989. }
  990. default:{
  991. specialChar = '';
  992. break;
  993. }
  994. }
  995. var filter_item = jQuery('<span data-id="'+filter['id']+'" class="wdi_filter_item wdi_filter_by_'+ filter['filter_type'] +'"></span>').
  996. html(specialChar + filter['filter_by'] + '<span onclick="wdi_controller.removeConditionalFilter(jQuery(this));" class="wdi_remove_filter">X</span>');
  997. return filter_item;
  998. }
  999. /**
  1000. * Used for generating random ids
  1001. * @return {String} [random 5 length string]
  1002. */
  1003. wdi_controller.randomId = function() {
  1004. var text = "";
  1005. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  1006. for (var i = 0; i < 5; i++)
  1007. text += possible.charAt(Math.floor(Math.random() * possible.length));
  1008. return text;
  1009. }
  1010. /**
  1011. * Removes filter from wdi_controller.conditionalFilters array and updates #wdi_filters_ui
  1012. * @param {Object} element [jQuery object]
  1013. */
  1014. wdi_controller.removeConditionalFilter = function(element) {
  1015. var id = element.parent().attr('data-id');
  1016. for (var i = 0; i < this.conditionalFilters.length; i++) {
  1017. if (this.conditionalFilters[i]['id'] == id) {
  1018. this.conditionalFilters.splice(i, 1);
  1019. }
  1020. }
  1021. this.updateFiltersUi();
  1022. }
  1023. /**
  1024. * Updates textarea to the latest version of conditionalFilters json
  1025. */
  1026. wdi_controller.updateFilterTextarea = function() {
  1027. var json,
  1028. filters = this.conditionalFilters;
  1029. json = JSON.stringify(filters);
  1030. jQuery('#wdi_conditional_filters_textarea').val(json);
  1031. }
  1032. /**
  1033. * Gets json from textarea and sets them as conditionalfilters array
  1034. */
  1035. wdi_controller.setInitialFilters = function() {
  1036. var filters = [],
  1037. json = jQuery('#wdi_conditional_filters_textarea').val();
  1038. if (this.isJsonString(json)) {
  1039. filters = JSON.parse(json);
  1040. }
  1041. this.conditionalFilters = filters;
  1042. }
  1043. /**
  1044. * Updates Conditional Filter User interfaces
  1045. */
  1046. wdi_controller.updateConditionalFiltersUi = function(){
  1047. wdi_controller.updateFilterSource();
  1048. }
  1049. /**
  1050. * Updates Conditinal filter source
  1051. */
  1052. wdi_controller.updateFilterSource = function(){
  1053. if(jQuery('input[name="wdi_feed_settings[liked_feed]"]:checked').val() == 'liked'){
  1054. var sourceDiv = jQuery('#wdi_filter_source').html('');
  1055. var singleUserHtml = "<div class='wdi_source_user'><span class='wdi_source_username'>Media I liked</span></div>";
  1056. sourceDiv.html(sourceDiv.html() + singleUserHtml);
  1057. return;
  1058. }
  1059. var users = [],
  1060. username,
  1061. userThumb;
  1062. jQuery('.wdi_user').each(function(){
  1063. if ( jQuery( this ).find( '.wdi_username' ).length != 0 ) {
  1064. username = jQuery( this ).find( '.wdi_username' ).text();
  1065. }else{
  1066. username = jQuery( this ).find( '.wdi_hashtag' ).text();
  1067. }
  1068. userThumb = jQuery( this ).find( 'img' ).attr('src');
  1069. users.push( {
  1070. 'username' : username,
  1071. 'image' : userThumb
  1072. } )
  1073. });
  1074. var sourceDiv = jQuery('#wdi_filter_source').html('');
  1075. for ( var i = 0; i < users.length; i++ ){
  1076. var singleUserHtml = "<div class='wdi_source_user'><span class='wdi_source_img'><img src='" + users[i].image + "'></span><span class='wdi_source_username'>"+users[i].username+"</span></div>";
  1077. sourceDiv.html( sourceDiv.html() + singleUserHtml );
  1078. }
  1079. }
  1080. /**
  1081. * Checks if given string is JSON string
  1082. * @param {String} str [string to check]
  1083. * @return {Boolean} [true or false]
  1084. */
  1085. wdi_controller.isJsonString = function(str) {
  1086. try {
  1087. JSON.parse(str);
  1088. } catch (e) {
  1089. return false;
  1090. }
  1091. return true;
  1092. }
  1093. ///////////////////////////////////////////////////////////////////////////////
  1094. ///////////////Feeds and themes first view functions///////////////////////////
  1095. ////////////////////////////////////////////////////////////////////////////////
  1096. function wdi_spider_select_value(obj) {
  1097. obj.focus();
  1098. obj.select();
  1099. }
  1100. // Set value by id.
  1101. function wdi_spider_set_input_value(input_id, input_value) {
  1102. if (input_value === 'add') {
  1103. if (jQuery('#wdi_access_token').attr('value') == '') {
  1104. alert('Please get your access token');
  1105. }
  1106. }
  1107. if (document.getElementById(input_id)) {
  1108. document.getElementById(input_id).value = input_value;
  1109. }
  1110. }
  1111. // Submit form by id.
  1112. function wdi_spider_form_submit(event, form_id) {
  1113. if (document.getElementById(form_id)) {
  1114. document.getElementById(form_id).submit();
  1115. }
  1116. if (event.preventDefault) {
  1117. event.preventDefault();
  1118. } else {
  1119. event.returnValue = false;
  1120. }
  1121. }
  1122. // Check all items.
  1123. function wdi_spider_check_all_items() {
  1124. wdi_spider_check_all_items_checkbox();
  1125. // if (!jQuery('#check_all').attr('checked')) {
  1126. jQuery('#check_all').trigger('click');
  1127. // }
  1128. }
  1129. function wdi_spider_check_all_items_checkbox() {
  1130. if (jQuery('#check_all_items').attr('checked')) {
  1131. jQuery('#check_all_items').attr('checked', false);
  1132. jQuery('#draganddrop').hide();
  1133. } else {
  1134. var saved_items = (parseInt(jQuery(".displaying-num").html()) ? parseInt(jQuery(".displaying-num").html()) : 0);
  1135. var added_items = (jQuery('input[id^="check_pr_"]').length ? parseInt(jQuery('input[id^="check_pr_"]').length) : 0);
  1136. var items_count = added_items + saved_items;
  1137. jQuery('#check_all_items').attr('checked', true);
  1138. if (items_count) {
  1139. jQuery('#draganddrop').html("<strong><p>Selected " + items_count + " item" + (items_count > 1 ? "s" : "") + ".</p></strong>");
  1140. jQuery('#draganddrop').show();
  1141. }
  1142. }
  1143. }
  1144. function wdi_spider_check_all(current) {
  1145. if (!jQuery(current).attr('checked')) {
  1146. jQuery('#check_all_items').attr('checked', false);
  1147. jQuery('#draganddrop').hide();
  1148. }
  1149. }
  1150. // Set value by id.
  1151. function wdi_spider_set_input_value(input_id, input_value) {
  1152. if (input_value === 'add') {
  1153. if (jQuery('#wdi_access_token').attr('value') == '') {
  1154. alert('Please get your access token');
  1155. }
  1156. }
  1157. if (document.getElementById(input_id)) {
  1158. document.getElementById(input_id).value = input_value;
  1159. }
  1160. }