/** * INVISION POWER BOARD v3 * * Topics View Javascript File * @author Matt Mecham, Brandon Farber, Josh Williams * @since 2008 */ /** * "ACP" Class. Designed for ... ACP Replacements Functions * @author (v.1.0.0) Matt Mecham */ function IPBReplacements() { /** * Template groups * * @var array */ this.ReplacementsData = {}; /** * Current template bit * * @var array */ this.currentReplacement = ''; /** * Current set ID * * @var array */ this.currentSetData = {}; /** * Replacements Names * * @var hash */ this.cssNames = { 'replacementsRow' : 'row2', 'replacementsHover' : 'replacementsHover' }; /** * INIT Applications */ this.init = function() { /* Build Replacements list */ this.buildReplacementsList(); }; /** * Load css groups */ this.loadReplacementsGroups = function() { /* Grab the JSON for the template bits for the current template group */ url = ipb.vars['base_url'] + "app=core&module=ajax&section=replacements&do=getReplacementsGroups&setID=" + this.currentSetData['set_id'] + '&secure_key=' + ipb.vars['md5_hash']; new Ajax.Request( url.replace( /&/g, '&' ), { method: 'GET', onSuccess: function (t ) { if ( t.responseText.match( /^(\s+?)?\{/ ) ) { $('tplate_debug').innerHTML += "\n" + t.responseText; eval( "var json = " + t.responseText ); if ( json['error'] ) { alert( json['error'] ); return; } else { IPB3Replacements.ReplacementsData = json; IPB3Replacements.buildReplacementsList(); } } else { alert( "Ooops. Something went wrong. Does this help?: " + t.responseText ); } }, onException: function( f,e ){ alert( "Exception: " + e ); }, onFailure: function( t ){ alert( "Failure: " + t.responseText ); } } ); }; /** * Save Replacements */ this.saveReplacement = function( replacement_id ) { /* Grab the JSON for the template bits for the current template group */ url = ipb.vars['base_url'] + "app=core&module=ajax&section=replacements&do=saveReplacement&setID=" + this.currentSetData['set_id'] + '&replacement_id=' + replacement_id + '&secure_key=' + ipb.vars['md5_hash']; /* Set up params */ var params = { 'replacement_content' : $F('tplate_editBox_' + replacement_id ), 'replacement_set_id' : this.currentSetData['set_id'], '_replacement_key' : $F('tplate_keyBox_' + replacement_id ), 'type' : ( replacement_id == 0 ) ? 'add' : 'edit' }; new Ajax.Request( url.replace( /&/g, '&' ), { method: 'POST', parameters: params, onSuccess: function (t ) { if ( t.responseText.match( /^(\s+?)?\{/ ) ) { eval( "var json = " + t.responseText ); if ( json['error'] ) { alert( json['error'] ); return; } else { IPB3Replacements.ReplacementsData = json; IPB3Replacements.buildReplacementsList(); if ( json['errors'] ) { /* Something inline would be very nice here.. rather than this ugly alert */ alert("Message: " + json['errors'] ); } else { alert("Message: Saved!"); } } } else { alert( "Ooops. Something went wrong. Does this help?: " + t.responseText ); } }, onException: function( f,e ){ alert( "Exception: " + e ); }, onFailure: function( t ){ alert( "Failure: " + t.responseText ); } } ); }; /** * Revert css */ this.revertReplacement = function( replacement_id ) { /* Make sure we're mean it... */ if ( $('tplate_replacementsRow_' + replacement_id ).hasClassName( 'tplateRow_new') ) { if ( ! confirm( "REMOVE Replacements file?\n This will remove this replacement in ALL skins!" ) ) { return false; } } else { if ( ! confirm( "Revert Replacements file?\n All changes WILL be lost!" ) ) { return false; } } /* Grab the JSON for the template bits for the current template group */ url = ipb.vars['base_url'] + "app=core&module=ajax&section=replacements&do=revertReplacement&setID=" + this.currentSetData['set_id'] + '&replacement_id=' + replacement_id + '&secure_key=' + ipb.vars['md5_hash']; new Ajax.Request( url.replace( /&/g, '&' ), { method: 'GET', onSuccess: function (t ) { if ( t.responseText.match( /^(\s+?)?\{/ ) ) { eval( "var json = " + t.responseText ); if ( json['error'] ) { alert( json['error'] ); return; } else { IPB3Replacements.ReplacementsData = json; IPB3Replacements.buildReplacementsList(); if ( json['errors'] ) { /* Something inline would be very nice here.. rather than this ugly alert */ alert("Message: " + json['errors'] ); } } } else { alert( "Ooops. Something went wrong. Does this help?: " + t.responseText ); } }, onException: function( f,e ){ alert( "Exception: " + e ); }, onFailure: function( t ){ alert( "Failure: " + t.responseText ); } } ); }; /** * Add Replacements form */ this.addReplacementsForm = function() { IPB3Replacements.showReplacementsEditor( 0 ); }; /** * Shows the template editor */ this.showReplacementsEditor = function( replacement_id ) { /* Close any open editors */ IPB3Replacements.cancelReplacements(); var _tplate = new Template( $('tplate_replacementsEditor').innerHTML ); var _keys = Object.keys( IPB3Replacements.ReplacementsData['replacements'] ).sort(); var _data = {}; /* Get replacement Data */ if ( replacement_id ) { _keys.each( function( i ) { if ( IPB3Replacements.ReplacementsData['replacements'][ i ]['replacement_id'] == replacement_id ) { _data = IPB3Replacements.ReplacementsData['replacements'][ i ]; } } ); } else { _data = { 'replacement_id' : 0, 'replacement_key' : '', 'SAFE_replacement_content' : '' }; } var _div = document.createElement( "DIV" ); _div.id = 'tplate_editorWrapper'; _div.update( _tplate.evaluate( _data ) ); document.body.appendChild( _div ); /* New? */ if ( ! replacement_id || ( _data['replacement_added_to'] == IPB3Replacements.currentSetData['set_id'] ) ) { $( 'tplate_keyBoxWrap_' + replacement_id ).show(); } /* Adjust title */ if ( ! replacement_id ) { $('tplate_title_' + replacement_id ).update("Adding Replacement"); } ipb.positionCenter( 'tplate_editor_' + replacement_id ); }; /** * Preview the replacement */ this.previewReplacement = function( replacement_id ) { /* Close any open editors */ IPB3Replacements.closePreview(); var _tplate = new Template( $('tplate_replacementsPreview').innerHTML ); var _keys = Object.keys( IPB3Replacements.ReplacementsData['replacements'] ).sort(); var _data = {}; /* Get replacement Data */ _keys.each( function( i ) { if ( IPB3Replacements.ReplacementsData['replacements'][ i ]['replacement_id'] == replacement_id ) { _data = IPB3Replacements.ReplacementsData['replacements'][ i ]; } } ); /* For mat.... oh, for me? */ _data['_preview'] = _data['replacement_content'].escapeHTML(); /* But, is it an image? */ if ( _data['replacement_content'].startsWith( "