[ Index ] |
PHP Cross Reference of GlotPress |
[Summary view] [Print] [Text view]
1 /* global $gp_glossary_options, $gp, confirm */ 2 /* eslint camelcase: "off", no-alert: "off" */ 3 $gp.glossary = ( 4 function( $ ) { 5 return { 6 7 current: null, 8 9 init: function( table ) { 10 $gp.init(); 11 if ( '' === $gp_glossary_options.can_edit ) { 12 return; 13 } 14 $gp.glossary.table = table; 15 $gp.glossary.install_hooks(); 16 }, 17 18 install_hooks: function() { 19 $( $gp.glossary.table ) 20 .on( 'click', 'a.edit', $gp.glossary.hooks.show ) 21 .on( 'dblclick', 'tr td', $gp.glossary.hooks.show ) 22 .on( 'click', 'button.cancel', $gp.glossary.hooks.hide ) 23 .on( 'click', 'button.delete', $gp.glossary.hooks.del ) 24 .on( 'click', 'button.save', $gp.glossary.hooks.ok ); 25 }, 26 27 show: function( event, element ) { 28 var preview, row_id, editor; 29 30 event.preventDefault(); 31 32 preview = element.closest( 'tr' ); 33 row_id = preview.data( 'id' ); 34 editor = $( '#editor-' + row_id ); 35 if ( ! editor.length ) { 36 return; 37 } 38 if ( $gp.glossary.current ) { 39 $gp.glossary.hide(); 40 } 41 editor.preview = preview; 42 editor.row_id = row_id; 43 $gp.glossary.current = editor; 44 editor.addClass( 'active' ); 45 editor.show(); 46 editor.preview.hide(); 47 if ( $( 'a.add-entry' ).hasClass( 'open' ) ) { 48 $( 'a.add-entry' ).click(); 49 } 50 $( 'input:first', editor ).focus(); 51 }, 52 53 hide: function( editor ) { 54 editor = editor ? editor : $gp.glossary.current; 55 if ( ! editor ) { 56 return; 57 } 58 editor.hide(); 59 editor.preview.show(); 60 editor.removeClass( 'active' ); 61 $gp.glossary.current = null; 62 }, 63 64 save: function( button ) { 65 var editor, data; 66 67 if ( ! $gp.glossary.current ) { 68 return; 69 } 70 71 button.prop( 'disabled', true ); 72 $gp.notices.notice( 'Saving…' ); 73 74 editor = $gp.glossary.current; 75 76 data = { 77 _gp_route_nonce: button.data( 'nonce' ), 78 }; 79 80 $( '#editor-' + editor.row_id ).find( 'input, select, textarea' ).each( function() { 81 data[ $( this ).attr( 'name' ) ] = this.value; 82 } ); 83 84 $.ajax( { 85 type: 'POST', 86 url: $gp_glossary_options.url, 87 data: data, 88 dataType: 'json', 89 success: function( response ) { 90 button.prop( 'disabled', false ); 91 $gp.notices.success( 'Saved!' ); 92 $gp.glossary.replace_current( response ); 93 }, 94 error: function( xhr, msg ) { 95 button.prop( 'disabled', false ); 96 msg = xhr.responseText ? 'Error: ' + xhr.responseText : 'Error saving the glossary item!'; 97 $gp.notices.error( msg ); 98 }, 99 } ); 100 }, 101 102 del: function( event, button ) { 103 var result, editor, data, preview; 104 105 event.preventDefault(); 106 107 result = confirm( $gp_glossary_options.ge_delete_ays ); 108 if ( ! result ) { 109 return; 110 } 111 editor = button.closest( 'tr' ); 112 preview = editor.prev( 'tr' ); 113 114 data = { 115 _gp_route_nonce: button.data( 'nonce' ), 116 }; 117 118 editor.find( 'input, select, textarea' ).each( function() { 119 data[ $( this ).attr( 'name' ) ] = this.value; 120 } ); 121 122 $.ajax( { 123 type: 'POST', 124 url: $gp_glossary_options.delete_url, 125 data: data, 126 success: function() { 127 $gp.notices.success( 'Deleted!' ); 128 editor.fadeOut( 'fast', function() { 129 this.remove(); 130 } ); 131 preview.remove(); 132 if ( 1 === $( 'tr', $gp.glossary.table ).length ) { 133 $gp.glossary.table.remove(); 134 } 135 }, 136 error: function( xhr, msg ) { 137 msg = xhr.responseText ? 'Error: ' + xhr.responseText : 'Error deleting the glossary item!'; 138 $gp.notices.error( msg ); 139 }, 140 } ); 141 }, 142 143 replace_current: function( html ) { 144 var old_current; 145 146 if ( ! $gp.glossary.current ) { 147 return; 148 } 149 150 $gp.glossary.current.after( html ); 151 old_current = $gp.glossary.current; 152 old_current.preview.remove(); 153 old_current.remove(); 154 $gp.glossary.current.preview.fadeIn( 800 ); 155 }, 156 157 hooks: { 158 show: function( event ) { 159 $gp.glossary.show( event, $( this ) ); 160 }, 161 del: function( event ) { 162 $gp.glossary.del( event, $( this ) ); 163 }, 164 hide: function() { 165 $gp.glossary.hide(); 166 return false; 167 }, 168 ok: function() { 169 $gp.glossary.save( $( this ) ); 170 return false; 171 }, 172 }, 173 174 }; 175 }( jQuery ) 176 ); 177 178 jQuery( function( $ ) { 179 $gp.glossary.init( $( '#glossary' ) ); 180 } );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:01:07 2024 | Cross-referenced by PHPXref 0.7.1 |