Няма описание

um-admin-modal.js 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. var $um_tiny_editor = {};
  2. function um_admin_live_update_scripts() {
  3. jQuery('.um-adm-conditional').each( function() {
  4. jQuery(this).trigger('change');
  5. });
  6. if ( jQuery('.um-admin-colorpicker').length ) {
  7. jQuery('.um-admin-colorpicker').wpColorPicker();
  8. }
  9. }
  10. function um_admin_new_modal( id, ajax, size ) {
  11. var modal = jQuery('body').find('.um-admin-overlay');
  12. jQuery('.tipsy').hide();
  13. um_admin_remove_modal();
  14. jQuery('body').addClass('um-admin-modal-open').append('<div class="um-admin-overlay"></div><div class="um-admin-modal"></div>');
  15. jQuery('#' + id).prependTo('.um-admin-modal');
  16. jQuery('#' + id).show();
  17. jQuery('.um-admin-modal').show();
  18. jQuery('.um-admin-modal-head').append('<a href="javascript:void(0);" data-action="UM_remove_modal" class="um-admin-modal-close"><i class="um-faicon-times"></i></a>');
  19. if ( ajax == true ) {
  20. um_admin_modal_size( size );
  21. um_admin_modal_preload();
  22. um_admin_modal_responsive();
  23. } else {
  24. um_admin_modal_responsive();
  25. }
  26. }
  27. function um_tinymce_init( id, content ) {
  28. var object = jQuery('#' + id);
  29. if ( typeof( tinyMCE ) === 'object' && tinyMCE.get( id ) !== null ) {
  30. tinyMCE.triggerSave();
  31. tinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, id );
  32. "4" === tinyMCE.majorVersion ? window.tinyMCE.execCommand( "mceRemoveEditor", !0, id ) : window.tinyMCE.execCommand( "mceRemoveControl", !0, id );
  33. $um_tiny_editor = jQuery('<div>').append( object.parents( '#wp-' + id + '-wrap' ).clone() );
  34. object.parents('#wp-' + id + '-wrap').replaceWith('<div class="um_tiny_placeholder"></div>');
  35. jQuery('.um-admin-editor:visible').html( jQuery( $um_tiny_editor ).html() );
  36. var init;
  37. if( typeof tinyMCEPreInit.mceInit[ id ] == 'undefined' ){
  38. init = tinyMCEPreInit.mceInit[ id ] = tinyMCE.extend( {}, tinyMCEPreInit.mceInit[ id ] );
  39. } else {
  40. init = tinyMCEPreInit.mceInit[ id ];
  41. }
  42. if ( typeof(QTags) == 'function' ) {
  43. QTags( tinyMCEPreInit.qtInit[ id ] );
  44. QTags._buttonsInit();
  45. }
  46. if ( typeof( window.switchEditors ) === 'object' ) {
  47. window.switchEditors.go( id );
  48. }
  49. tinyMCE.init( init );
  50. tinyMCE.get( id ).setContent( content );
  51. object.html( content );
  52. } else {
  53. $um_tiny_editor = jQuery('<div>').append( object.parents('#wp-' + id + '-wrap').clone() );
  54. object.parents('#wp-' + id + '-wrap').replaceWith('<div class="um_tiny_placeholder"></div>');
  55. jQuery('.um-admin-editor:visible').html( jQuery( $um_tiny_editor ).html() );
  56. if ( typeof(QTags) == 'function' ) {
  57. QTags( tinyMCEPreInit.qtInit[ id ] );
  58. QTags._buttonsInit();
  59. }
  60. //use duplicate because it's new element
  61. jQuery('#' + id).html( content );
  62. }
  63. jQuery( 'body' ).on( 'click', '.wp-switch-editor', function() {
  64. var target = jQuery(this);
  65. if ( target.hasClass( 'wp-switch-editor' ) && typeof( window.switchEditors ) === 'object' ) {
  66. var mode = target.hasClass( 'switch-tmce' ) ? 'tmce' : 'html';
  67. window.switchEditors.go( id, mode );
  68. }
  69. });
  70. }
  71. function um_admin_modal_ajaxcall( act_id, arg1, arg2, arg3 ) {
  72. in_row = '';
  73. in_sub_row = '';
  74. in_column = '';
  75. in_group = '';
  76. if ( jQuery('.um-col-demon-settings').data('in_column') ) {
  77. in_row = jQuery('.um-col-demon-settings').data('in_row');
  78. in_sub_row = jQuery('.um-col-demon-settings').data('in_sub_row');
  79. in_column = jQuery('.um-col-demon-settings').data('in_column');
  80. in_group = jQuery('.um-col-demon-settings').data('in_group');
  81. }
  82. var form_mode = jQuery('input[type=hidden][id=form__um_mode]').val();
  83. jQuery.ajax({
  84. url: wp.ajax.settings.url,
  85. type: 'POST',
  86. data: {
  87. action:'um_dynamic_modal_content',
  88. act_id: act_id,
  89. arg1 : arg1,
  90. arg2 : arg2,
  91. arg3: arg3,
  92. in_row: in_row,
  93. in_sub_row: in_sub_row,
  94. in_column: in_column,
  95. in_group: in_group,
  96. nonce: um_admin_scripts.nonce,
  97. form_mode: form_mode
  98. },
  99. complete: function(){
  100. um_admin_modal_loaded();
  101. um_admin_modal_responsive();
  102. },
  103. success: function(data) {
  104. jQuery('.um-admin-modal').find('.um-admin-modal-body').html( data );
  105. um_responsive();
  106. um_admin_live_update_scripts();
  107. jQuery( "#_custom_dropdown_options_source" ).trigger('blur');
  108. if ( jQuery('.um-admin-editor:visible').length > 0 ) {
  109. if ( act_id == 'um_admin_edit_field_popup' ) {
  110. um_tinymce_init( 'um_editor_edit', jQuery('.um-admin-modal:visible .dynamic-mce-content').html() );
  111. } else {
  112. um_tinymce_init( 'um_editor_new', '' );
  113. }
  114. }
  115. if ( act_id === 'um_admin_preview_form' ) {
  116. //fix for overlay in scrollable preview modal
  117. jQuery('.um-admin-preview-overlay').css('height', jQuery('.um-admin-preview-overlay').siblings('.um').outerHeight(true)*1 + 20 + 'px' );
  118. }
  119. um_init_tooltips();
  120. um_admin_init_datetimepicker();
  121. },
  122. error: function(data) {
  123. }
  124. });
  125. return false;
  126. }
  127. function um_admin_modal_responsive() {
  128. var required_margin = jQuery('.um-admin-modal:visible').innerHeight() / 2 + 'px';
  129. jQuery('.um-admin-modal:visible').css({'margin-top': '-' + required_margin });
  130. if ( jQuery('#UM_preview_form .um-s1').length ) {
  131. jQuery("#UM_preview_form .um-s1").select2({
  132. allowClear: true
  133. });
  134. }
  135. if ( jQuery('#UM_preview_form .um-s2').length ) {
  136. jQuery("#UM_preview_form .um-s2").select2({
  137. allowClear: false,
  138. minimumResultsForSearch: 10
  139. });
  140. }
  141. }
  142. function um_admin_remove_modal() {
  143. if ( jQuery('.um-admin-editor:visible').length > 0 ) {
  144. tinyMCE.triggerSave();
  145. if ( jQuery('.um-admin-modal:visible').find('form').parent().attr('id') == 'UM_edit_field' ) {
  146. jQuery('#wp-um_editor_edit-wrap').remove();
  147. /*tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor_edit');
  148. jQuery('.um-hidden-editor-edit').html( jQuery('.um-admin-editor:visible').contents() );
  149. tinyMCE.execCommand('mceAddEditor', true, 'um_editor_edit');*/
  150. } else {
  151. jQuery('#wp-um_editor_new-wrap').remove();
  152. /*tinyMCE.execCommand('mceRemoveEditor', true, 'um_editor_new');
  153. jQuery('.um-hidden-editor-new').html( jQuery('.um-admin-editor:visible').contents() );
  154. tinyMCE.execCommand('mceAddEditor', true, 'um_editor_new');*/
  155. }
  156. jQuery('.um_tiny_placeholder').replaceWith( jQuery( $um_tiny_editor ).html() );
  157. }
  158. jQuery('body').removeClass('um-admin-modal-open');
  159. jQuery('.um-admin-modal div[id^="UM_"]').hide().appendTo('body');
  160. jQuery('.um-admin-modal,.um-admin-overlay').remove();
  161. }
  162. function um_admin_modal_preload() {
  163. jQuery('.um-admin-modal:visible').addClass('loading');
  164. jQuery('.um-admin-modal-body:visible').empty();
  165. }
  166. function um_admin_modal_loaded() {
  167. jQuery('.um-admin-modal:visible').removeClass('loading');
  168. }
  169. function um_admin_modal_size( aclass ) {
  170. jQuery('.um-admin-modal:visible').addClass(aclass);
  171. }
  172. function um_admin_modal_add_attr( id, value ) {
  173. jQuery('.um-admin-modal:visible').data( id, value );
  174. }
  175. /**
  176. Custom modal scripting starts
  177. **/
  178. jQuery(document).ready(function() {
  179. /**
  180. disable link
  181. **/
  182. jQuery(document.body).on('click', '.um-admin-builder a, .um-admin-modal a', function(e){
  183. e.preventDefault();
  184. return false;
  185. });
  186. /**
  187. toggle area
  188. **/
  189. jQuery(document.body).on('click', '.um-admin-btn-toggle a', function(e){
  190. var content = jQuery(this).parent().find('.um-admin-btn-content');
  191. var link = jQuery(this);
  192. if ( content.is(':hidden') ) {
  193. content.show();
  194. link.find('i').removeClass().addClass('um-icon-minus');
  195. link.addClass('active');
  196. } else {
  197. content.hide();
  198. link.find('i').removeClass().addClass('um-icon-plus');
  199. link.removeClass('active');
  200. }
  201. um_admin_modal_responsive();
  202. });
  203. /**
  204. clone a condition
  205. **/
  206. jQuery(document.body).on('click', '.um-admin-new-condition', function() {
  207. if ( jQuery(this).hasClass('disabled') )
  208. return false;
  209. var content = jQuery(this).parents('.um-admin-btn-content'),
  210. length = content.find('.um-admin-cur-condition').length;
  211. if ( length < 5 ) {
  212. //content.find('select').select2('destroy');
  213. var template = jQuery('.um-admin-btn-content').find('.um-admin-cur-condition-template').clone();
  214. template.find('input[type=text]').val('');
  215. template.find('select').val('');
  216. template.appendTo( content );
  217. jQuery(template).removeClass("um-admin-cur-condition-template");
  218. jQuery(template).addClass("um-admin-cur-condition");
  219. um_admin_live_update_scripts();
  220. um_admin_modal_responsive();
  221. } else {
  222. jQuery(this).addClass('disabled');
  223. alert( 'You already have 5 rules' );
  224. }
  225. //need fields refactor
  226. var conditions = jQuery('.um-admin-cur-condition');
  227. jQuery(conditions).each( function ( i ) {
  228. id = i === 0 ? '' : i;
  229. jQuery( this ).find('[id^="_conditional_action"]').attr('name', '_conditional_action' + id);
  230. jQuery( this ).find('[id^="_conditional_action"]').attr('id', '_conditional_action' + id);
  231. jQuery( this ).find('[id^="_conditional_field"]').attr('name', '_conditional_field' + id);
  232. jQuery( this ).find('[id^="_conditional_field"]').attr('id', '_conditional_field' + id);
  233. jQuery( this ).find('[id^="_conditional_operator"]').attr('name', '_conditional_operator' + id);
  234. jQuery( this ).find('[id^="_conditional_operator"]').attr('id', '_conditional_operator' + id);
  235. jQuery( this ).find('[id^="_conditional_value"]').attr('name', '_conditional_value' + id);
  236. jQuery( this ).find('[id^="_conditional_value"]').attr('id', '_conditional_value' + id);
  237. } );
  238. });
  239. /**
  240. reset conditions
  241. **/
  242. jQuery(document.body).on('click', '.um-admin-reset-conditions a', function(){
  243. var content = jQuery(this).parents('.um-admin-btn-content');
  244. content.find('.um-admin-cur-condition').slice(1).remove();
  245. content.find('input[type=text]').val('');
  246. content.find('select').val('');
  247. jQuery('.um-admin-new-condition').removeClass('disabled');
  248. um_admin_live_update_scripts();
  249. um_admin_modal_responsive();
  250. });
  251. /**
  252. remove a condition
  253. **/
  254. jQuery(document.body).on('click', '.um-admin-remove-condition', function(){
  255. var condition = jQuery(this).parents('.um-admin-cur-condition');
  256. jQuery('.um-admin-new-condition').removeClass('disabled');
  257. jQuery('.tipsy').remove();
  258. condition.remove();
  259. //need fields refactor
  260. var conditions = jQuery('.um-admin-cur-condition');
  261. jQuery(conditions).each( function ( i ) {
  262. id = i === 0 ? '' : i;
  263. jQuery( this ).find('[id^="_conditional_action"]').attr('name', '_conditional_action' + id);
  264. jQuery( this ).find('[id^="_conditional_action"]').attr('id', '_conditional_action' + id);
  265. jQuery( this ).find('[id^="_conditional_field"]').attr('name', '_conditional_field' + id);
  266. jQuery( this ).find('[id^="_conditional_field"]').attr('id', '_conditional_field' + id);
  267. jQuery( this ).find('[id^="_conditional_operator"]').attr('name', '_conditional_operator' + id);
  268. jQuery( this ).find('[id^="_conditional_operator"]').attr('id', '_conditional_operator' + id);
  269. jQuery( this ).find('[id^="_conditional_value"]').attr('name', '_conditional_value' + id);
  270. jQuery( this ).find('[id^="_conditional_value"]').attr('id', '_conditional_value' + id);
  271. } );
  272. um_admin_live_update_scripts();
  273. um_admin_modal_responsive();
  274. });
  275. /**
  276. remove modal via action
  277. **/
  278. jQuery(document.body).on('click', '.um-admin-overlay, a[data-action="UM_remove_modal"]', function(){
  279. um_admin_remove_modal();
  280. });
  281. /**
  282. fire new modal
  283. **/
  284. jQuery(document.body).on('click', 'a[data-modal^="UM_"], span[data-modal^="UM_"]', function(e){
  285. e.preventDefault();
  286. var modal_id = jQuery(this).attr('data-modal');
  287. if ( jQuery(this).attr('data-back') ) {
  288. jQuery('#UM_fonticons').find('a.um-admin-modal-back').attr("data-modal", jQuery(this).attr('data-back') );
  289. var current_icon = jQuery( '#' + jQuery(this).attr('data-back') ).find('input#_icon').val();
  290. if ( current_icon == '' ) {
  291. jQuery('#UM_fonticons').find('.um-admin-icons span').removeClass('highlighted');
  292. }
  293. }
  294. if ( jQuery(this).data('dynamic-content') ) {
  295. um_admin_new_modal( modal_id, true, jQuery(this).data('modal-size') );
  296. um_admin_modal_ajaxcall( jQuery(this).data('dynamic-content'), jQuery(this).data('arg1'), jQuery(this).data('arg2'), jQuery(this).data('arg3') );
  297. } else {
  298. um_admin_new_modal( modal_id );
  299. }
  300. return false;
  301. });
  302. /**
  303. choose font icon
  304. **/
  305. jQuery(document.body).on('click', '.um-admin-icons span', function(){
  306. var icon = jQuery(this).attr('data-code');
  307. jQuery(this).parent().find('span').removeClass('highlighted');
  308. jQuery(this).addClass('highlighted');
  309. jQuery('#UM_fonticons').find('a.um-admin-modal-back').attr("data-code", icon);
  310. });
  311. /**
  312. submit font icon
  313. **/
  314. jQuery(document.body).on('click', '#UM_fonticons a.um-admin-modal-back:not(.um-admin-modal-cancel)', function(){
  315. var v_id = '';
  316. var icon_selected = jQuery(this).attr('data-code');
  317. if ( icon_selected != '' ) {
  318. if ( jQuery(this).attr('data-modal') ) {
  319. v_id = '#' + jQuery(this).attr('data-modal');
  320. } else {
  321. v_id = '.postbox';
  322. }
  323. jQuery( v_id ).find('input#_icon,input#_um_icon,input#notice__um_icon,input#um_profile_tab__icon').val( icon_selected );
  324. jQuery( v_id ).find('span.um-admin-icon-value').html('<i class="'+icon_selected+'"></i>');
  325. jQuery( v_id ).find('.um-admin-icon-clear').show();
  326. }
  327. jQuery(this).attr('data-code', '');
  328. if ( v_id == '.postbox' ) {
  329. um_admin_remove_modal();
  330. }
  331. });
  332. /**
  333. restore font icon
  334. **/
  335. jQuery(document.body).on('click', 'span.um-admin-icon-clear', function(){
  336. var element = jQuery(this).parents('p');
  337. jQuery('#UM_fonticons a.um-admin-modal-back').attr('data-code', '');
  338. element.find('input[type="hidden"]').val('');
  339. element.find('.um-admin-icon-value').html( wp.i18n.__( 'No Icon', 'ultimate-member' ) );
  340. element = jQuery(this).parents('td');
  341. element.find('input[type="hidden"]').val('');
  342. element.find('.um-admin-icon-value').html( wp.i18n.__( 'No Icon', 'ultimate-member' ) );
  343. jQuery(this).hide();
  344. });
  345. /**
  346. search font icons
  347. **/
  348. jQuery(document.body).on('keyup blur', '#_icon_search', function(){
  349. if ( jQuery(this).val().toLowerCase() !== '' ) {
  350. jQuery('.um-admin-icons span').hide();
  351. jQuery('.um-admin-icons span[data-code*="'+jQuery(this).val().toLowerCase()+'"]').show();
  352. } else {
  353. jQuery('.um-admin-icons span:hidden').show();
  354. }
  355. um_admin_modal_responsive();
  356. });
  357. /**
  358. * Retrieve options from a callback function
  359. */
  360. jQuery(document.body).on('blur',"#_custom_dropdown_options_source", function(){
  361. var me = jQuery(this);
  362. var _options = jQuery('textarea[id=_options]');
  363. if( me.val() != '' ){
  364. var um_option_callback = me.val();
  365. jQuery.ajax({
  366. url: wp.ajax.settings.url,
  367. type: 'POST',
  368. data: {
  369. action:'um_populate_dropdown_options',
  370. um_option_callback: um_option_callback,
  371. nonce: um_admin_scripts.nonce
  372. },
  373. complete: function(){
  374. },
  375. success: function( response ){
  376. var arr_opts = [];
  377. for (var key in response.data ){
  378. arr_opts.push( response.data[ key ] );
  379. }
  380. _options.val( arr_opts.join('\n') );
  381. }
  382. });
  383. }
  384. });
  385. }); // end jQuery(document).ready