fl-builder-admin-settings.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. (function($){
  2. /**
  3. * Helper class for dealing with the builder's admin
  4. * settings page.
  5. *
  6. * @class FLBuilderAdminSettings
  7. * @since 1.0
  8. */
  9. FLBuilderAdminSettings = {
  10. /**
  11. * An instance of wp.media used for uploading icons.
  12. *
  13. * @since 1.4.6
  14. * @access private
  15. * @property {Object} _iconUploader
  16. */
  17. _iconUploader: null,
  18. /**
  19. * Initializes the builder's admin settings page.
  20. *
  21. * @since 1.0
  22. * @method init
  23. */
  24. init: function()
  25. {
  26. this._bind();
  27. this._maybeShowWelcome();
  28. this._initNav();
  29. this._initNetworkOverrides();
  30. this._initLicenseSettings();
  31. this._initMultiSelects();
  32. this._initUserAccessSelects();
  33. this._initUserAccessNetworkOverrides();
  34. this._templatesOverrideChange();
  35. },
  36. /**
  37. * Binds events for the builder's admin settings page.
  38. *
  39. * @since 1.0
  40. * @access private
  41. * @method _bind
  42. */
  43. _bind: function()
  44. {
  45. $('.fl-settings-nav a').on('click', FLBuilderAdminSettings._navClicked);
  46. $('.fl-override-ms-cb').on('click', FLBuilderAdminSettings._overrideCheckboxClicked);
  47. $('.fl-ua-override-ms-cb').on('click', FLBuilderAdminSettings._overrideUserAccessCheckboxClicked);
  48. $('.fl-module-all-cb').on('click', FLBuilderAdminSettings._moduleAllCheckboxClicked);
  49. $('.fl-module-cb').on('click', FLBuilderAdminSettings._moduleCheckboxClicked);
  50. $('input[name=fl-templates-override]').on('keyup click', FLBuilderAdminSettings._templatesOverrideChange);
  51. $('input[name=fl-upload-icon]').on('click', FLBuilderAdminSettings._showIconUploader);
  52. $('.fl-delete-icon-set').on('click', FLBuilderAdminSettings._deleteCustomIconSet);
  53. $('#uninstall-form').on('submit', FLBuilderAdminSettings._uninstallFormSubmit);
  54. $( '.fl-settings-form .dashicons-editor-help' ).tipTip();
  55. },
  56. /**
  57. * Show the welcome page after the license has been saved.
  58. *
  59. * @since 1.7.4
  60. * @access private
  61. * @method _maybeShowWelcome
  62. */
  63. _maybeShowWelcome: function()
  64. {
  65. var onLicense = 'license' == window.location.hash.replace( '#', '' ),
  66. isUpdated = $( '.wrap .updated' ).length,
  67. licenseError = $( '.fl-license-error' ).length;
  68. if ( onLicense && isUpdated && ! licenseError ) {
  69. window.location.hash = 'welcome';
  70. }
  71. },
  72. /**
  73. * Initializes the nav for the builder's admin settings page.
  74. *
  75. * @since 1.0
  76. * @access private
  77. * @method _initNav
  78. */
  79. _initNav: function()
  80. {
  81. var links = $('.fl-settings-nav a'),
  82. hash = window.location.hash,
  83. active = hash === '' ? [] : links.filter('[href~="'+ hash +'"]');
  84. $('a.fl-active').removeClass('fl-active');
  85. $('.fl-settings-form').hide();
  86. if(hash === '' || active.length === 0) {
  87. active = links.eq(0);
  88. }
  89. active.addClass('fl-active');
  90. $('#fl-'+ active.attr('href').split('#').pop() +'-form').fadeIn();
  91. },
  92. /**
  93. * Fires when a nav item is clicked.
  94. *
  95. * @since 1.0
  96. * @access private
  97. * @method _navClicked
  98. */
  99. _navClicked: function()
  100. {
  101. if($(this).attr('href').indexOf('#') > -1) {
  102. $('a.fl-active').removeClass('fl-active');
  103. $('.fl-settings-form').hide();
  104. $(this).addClass('fl-active');
  105. $('#fl-'+ $(this).attr('href').split('#').pop() +'-form').fadeIn();
  106. }
  107. },
  108. /**
  109. * Initializes the checkboxes for overriding network settings.
  110. *
  111. * @since 1.0
  112. * @access private
  113. * @method _initNetworkOverrides
  114. */
  115. _initNetworkOverrides: function()
  116. {
  117. $('.fl-override-ms-cb').each(FLBuilderAdminSettings._initNetworkOverride);
  118. },
  119. /**
  120. * Initializes a checkbox for overriding network settings.
  121. *
  122. * @since 1.0
  123. * @access private
  124. * @method _initNetworkOverride
  125. */
  126. _initNetworkOverride: function()
  127. {
  128. var cb = $(this),
  129. content = cb.closest('.fl-settings-form').find('.fl-settings-form-content');
  130. if(this.checked) {
  131. content.show();
  132. }
  133. else {
  134. content.hide();
  135. }
  136. },
  137. /**
  138. * Fired when a network override checkbox is clicked.
  139. *
  140. * @since 1.0
  141. * @access private
  142. * @method _overrideCheckboxClicked
  143. */
  144. _overrideCheckboxClicked: function()
  145. {
  146. var cb = $(this),
  147. content = cb.closest('.fl-settings-form').find('.fl-settings-form-content');
  148. if(this.checked) {
  149. content.show();
  150. }
  151. else {
  152. content.hide();
  153. }
  154. },
  155. /**
  156. * Initializes custom multi-selects.
  157. *
  158. * @since 1.10
  159. * @access private
  160. * @method _initMultiSelects
  161. */
  162. _initMultiSelects: function()
  163. {
  164. $( 'select[multiple]' ).multiselect( {
  165. selectAll: true,
  166. texts: {
  167. deselectAll : FLBuilderAdminSettingsStrings.deselectAll,
  168. noneSelected : FLBuilderAdminSettingsStrings.noneSelected,
  169. placeholder : FLBuilderAdminSettingsStrings.select,
  170. selectAll : FLBuilderAdminSettingsStrings.selectAll,
  171. selectedOptions : FLBuilderAdminSettingsStrings.selected
  172. }
  173. } );
  174. },
  175. /**
  176. * Initializes user access select options.
  177. *
  178. * @since 1.10
  179. * @access private
  180. * @method _initUserAccessSelects
  181. */
  182. _initUserAccessSelects: function()
  183. {
  184. var config = FLBuilderAdminSettingsConfig,
  185. options = null,
  186. role = null,
  187. select = null,
  188. key = null,
  189. hidden = null;
  190. $( '.fl-user-access-select' ).each( function() {
  191. options = [];
  192. select = $( this );
  193. key = select.attr( 'name' ).replace( 'fl_user_access[', '' ).replace( '][]', '' );
  194. for( role in config.roles ) {
  195. options.push( {
  196. name : config.roles[ role ],
  197. value : role,
  198. checked : 'undefined' == typeof config.userAccess[ key ] ? false : config.userAccess[ key ][ role ]
  199. } );
  200. }
  201. select.multiselect( 'loadOptions', options );
  202. } );
  203. },
  204. /**
  205. * Initializes the checkboxes for overriding user access
  206. * network settings.
  207. *
  208. * @since 1.0
  209. * @access private
  210. * @method _initUserAccessNetworkOverrides
  211. */
  212. _initUserAccessNetworkOverrides: function()
  213. {
  214. $('.fl-ua-override-ms-cb').each(FLBuilderAdminSettings._initUserAccessNetworkOverride);
  215. },
  216. /**
  217. * Initializes a checkbox for overriding user access
  218. * network settings.
  219. *
  220. * @since 1.0
  221. * @access private
  222. * @method _initUserAccessNetworkOverride
  223. */
  224. _initUserAccessNetworkOverride: function()
  225. {
  226. var cb = $(this),
  227. select = cb.closest('.fl-user-access-setting').find('.ms-options-wrap');
  228. if(this.checked) {
  229. select.show();
  230. }
  231. else {
  232. select.hide();
  233. }
  234. },
  235. /**
  236. * Fired when a network override checkbox is clicked.
  237. *
  238. * @since 1.0
  239. * @access private
  240. * @method _overrideCheckboxClicked
  241. */
  242. _overrideUserAccessCheckboxClicked: function()
  243. {
  244. var cb = $(this),
  245. select = cb.closest('.fl-user-access-setting').find('.ms-options-wrap');
  246. if(this.checked) {
  247. select.show();
  248. }
  249. else {
  250. select.hide();
  251. }
  252. },
  253. /**
  254. * Fires when the "all" checkbox in the list of enabled
  255. * modules is clicked.
  256. *
  257. * @since 1.0
  258. * @access private
  259. * @method _moduleAllCheckboxClicked
  260. */
  261. _moduleAllCheckboxClicked: function()
  262. {
  263. if($(this).is(':checked')) {
  264. $('.fl-module-cb').prop('checked', true);
  265. } else {
  266. $('.fl-module-cb').prop('checked', false);
  267. }
  268. },
  269. /**
  270. * Fires when a checkbox in the list of enabled
  271. * modules is clicked.
  272. *
  273. * @since 1.0
  274. * @access private
  275. * @method _moduleCheckboxClicked
  276. */
  277. _moduleCheckboxClicked: function()
  278. {
  279. var allChecked = true;
  280. $('.fl-module-cb').each(function() {
  281. if(!$(this).is(':checked')) {
  282. allChecked = false;
  283. }
  284. });
  285. if(allChecked) {
  286. $('.fl-module-all-cb').prop('checked', true);
  287. }
  288. else {
  289. $('.fl-module-all-cb').prop('checked', false);
  290. }
  291. },
  292. /**
  293. * @since 1.7.4
  294. * @access private
  295. * @method _initLicenseSettings
  296. */
  297. _initLicenseSettings: function()
  298. {
  299. $( '.fl-new-license-form .button' ).on( 'click', FLBuilderAdminSettings._newLicenseButtonClick );
  300. },
  301. /**
  302. * @since 1.7.4
  303. * @access private
  304. * @method _newLicenseButtonClick
  305. */
  306. _newLicenseButtonClick: function()
  307. {
  308. $( '.fl-new-license-form' ).hide();
  309. $( '.fl-license-form' ).show();
  310. },
  311. /**
  312. * Fires when the templates override setting is changed.
  313. *
  314. * @since 1.6.3
  315. * @access private
  316. * @method _templatesOverrideChange
  317. */
  318. _templatesOverrideChange: function()
  319. {
  320. var input = $('input[name=fl-templates-override]'),
  321. val = input.val(),
  322. overrideNodes = $( '.fl-templates-override-nodes' ),
  323. toggle = false;
  324. if ( 'checkbox' == input.attr( 'type' ) ) {
  325. toggle = input.is( ':checked' );
  326. }
  327. else {
  328. toggle = '' !== val;
  329. }
  330. overrideNodes.toggle( toggle );
  331. },
  332. /**
  333. * Shows the media library lightbox for uploading icons.
  334. *
  335. * @since 1.4.6
  336. * @access private
  337. * @method _showIconUploader
  338. */
  339. _showIconUploader: function()
  340. {
  341. if(FLBuilderAdminSettings._iconUploader === null) {
  342. FLBuilderAdminSettings._iconUploader = wp.media({
  343. title: FLBuilderAdminSettingsStrings.selectFile,
  344. button: { text: FLBuilderAdminSettingsStrings.selectFile },
  345. library : { type : 'application/zip' },
  346. multiple: false
  347. });
  348. }
  349. FLBuilderAdminSettings._iconUploader.once('select', $.proxy(FLBuilderAdminSettings._iconFileSelected, this));
  350. FLBuilderAdminSettings._iconUploader.open();
  351. },
  352. /**
  353. * Callback for when an icon set file is selected.
  354. *
  355. * @since 1.4.6
  356. * @access private
  357. * @method _iconFileSelected
  358. */
  359. _iconFileSelected: function()
  360. {
  361. var file = FLBuilderAdminSettings._iconUploader.state().get('selection').first().toJSON();
  362. $( 'input[name=fl-new-icon-set]' ).val( file.id );
  363. $( '#icons-form' ).submit();
  364. },
  365. /**
  366. * Fires when the delete link for an icon set is clicked.
  367. *
  368. * @since 1.4.6
  369. * @access private
  370. * @method _deleteCustomIconSet
  371. */
  372. _deleteCustomIconSet: function()
  373. {
  374. var set = $( this ).data( 'set' );
  375. $( 'input[name=fl-delete-icon-set]' ).val( set );
  376. $( '#icons-form' ).submit();
  377. },
  378. /**
  379. * Fires when the uninstall button is clicked.
  380. *
  381. * @since 1.0
  382. * @access private
  383. * @method _uninstallFormSubmit
  384. * @return {Boolean}
  385. */
  386. _uninstallFormSubmit: function()
  387. {
  388. var result = prompt(FLBuilderAdminSettingsStrings.uninstall.replace(/"/g, '"'), '');
  389. if(result == 'uninstall') {
  390. return true;
  391. }
  392. return false;
  393. }
  394. };
  395. /* Initializes the builder's admin settings. */
  396. $(function(){
  397. FLBuilderAdminSettings.init();
  398. });
  399. })(jQuery);