trAvis - MANAGER
Edit File: wpeditor.js
editor = new Object(); var changed = false; function changeTrue() { changed = true; } function changeReset() { changed = false; } function hasChanged() { return changed; } function checkChanged() { if(hasChanged()) { if(confirm('You have unsaved changes on this page. Are you sure you want to load a new document?')) { changed = false; } else { changed = true; } } return changed; } function checkExtension(extension) { var ext = false; var exts = [ 'gif', 'png', 'jpg', 'jpeg' ]; if(jQuery.inArray(extension, exts) >= 0) { ext = true; } return ext; } (function($){ var c = function(){ }; $.extend(c.prototype, { name:'folders',initialize:function(element, handler){ function ajaxFolders(handler){ if(!checkChanged()) { handler.preventDefault(); var newElement = $(this).closest('li', element); newElement.length || (newElement = element); if(newElement.hasClass(ajaxObject.options.open) && !newElement.hasClass('file')) { newElement.removeClass(ajaxObject.options.open).children('ul').slideUp(); } else if(!newElement.hasClass(ajaxObject.options.open) && newElement.hasClass('file')) { if(checkExtension(newElement.data('extension'))) { return true; } else { var type = $('#content-type').val(); runAjaxRequest(newElement, ajaxObject, 'file', type); } } else { var type = $('#content-type').val(); runAjaxRequest(newElement, ajaxObject, null, type); } } else { return false; } } function runAjaxRequest(newElement, ajaxObject, contentType, type) { if(contentType === 'file'){ var contents = 1; } else { var contents = 0; } if(newElement.data('encoded') === 1) { var path = newElement.data('path'); } else { var path = encodeURI(newElement.data('path')); } var data = { action: 'ajax_folders', dir: path, contents: contents, type: type } if ( type == 'theme' ) { data.wp_editor_ajax_nonce_ajax_folders_themes = WPE.wp_editor_ajax_nonce_ajax_folders_themes; } else if ( type == 'plugin' ) { data.wp_editor_ajax_nonce_ajax_folders_plugins = WPE.wp_editor_ajax_nonce_ajax_folders_plugins; } newElement.addClass(ajaxObject.options.loading), $.post( ajaxObject.options.url, data, function(result){ if(contentType === 'file'){ newElement.removeClass(ajaxObject.options.loading); if(result.content == null) { $('#save-result').html('<div id="save-message" class="WPEditorAjaxError"></div>'); $('#save-message').append('<h3>Warning</h3><p>An error occured while trying to open this file</p>'); $('#save-result').fadeIn(1000).delay(3000).fadeOut(300); } else { var notWritable = ''; if(!result.writable) { $('p.submit').hide(); $('div.writable-error').show(); notWritable = ' <span class="not-writable">(not writable)</span>'; $('.writable_status').html('Browsing'); } else { $('p.submit').show(); $('div.writable-error').hide(); $('.writable_status').html('Editing'); } wp_editor.toTextArea(); $('#new-content').val(result.content); $('#file').val(result.file); $('#path').val(result.path); $('#file_path').val(result.path); $('#extension').val(result.extension); $('.current_file').html(result.file + notWritable); runCodeMirror(result.extension); } } else { newElement.removeClass(ajaxObject.options.loading).addClass(ajaxObject.options.open); result.length && ( newElement.children().remove('ul'), newElement.append('<ul>').children('ul').hide(), $.each(result, function(index, value){ if(checkExtension(value.extension)) { newElement.children('ul').append( $('<li><a href="' + value.url + '" class="nivo-lightbox ' + value.filetype + '">' + value.name + ' <span class="tiny">' + value.filesize + '</span></a></li>').addClass( value.extension + ' ' + value.filetype ).data({ 'path': value.path, 'content': value.content, 'filesize': value.filesize, 'file': value.file, 'extension': value.extension, 'url': value.url, 'writable': value.writable } )); $('a.nivo-lightbox').nivoLightbox(); } else { var writable = ''; var writableClass = ''; if(!value.writable) { writable = '<span class="writable">×</span>'; writableClass = ' not-writable'; } newElement.children('ul').append( $('<li><a href="#" class="' + value.filetype + writableClass + '">' + writable + ' ' + value.name + ' <span class="tiny">' + value.filesize + '</span></a></li>').addClass( value.extension + ' ' + value.filetype ).data({ 'path': value.path, 'content': value.content, 'filesize': value.filesize, 'file': value.file, 'extension': value.extension, 'url': value.url, 'writable': value.writable } )) } }), newElement.find('ul a').bind('click', ajaxFolders), newElement.children('ul').slideDown() ) } }, 'json') } var ajaxObject = this; this.options = $.extend({ url: '', path: '', url: '', encoded: '', content: '', filesize: '', file: '', extension: '', writable: '', open: 'opened', loading: 'loading' }, handler); element.data({ 'path': this.options.path, 'encoded': this.options.encoded, 'content': this.options.content, 'filesize': this.options.filesize, 'file': this.options.file, 'extension': this.options.extension, 'url': this.options.url, 'writable': this.options.writable }).bind('retrieve:finder', ajaxFolders).trigger('retrieve:finder') } }); $.fn[c.prototype.name] = function(){ var b = arguments var g = b[0] ? b[0] : null; return this.each(function(){ var f = $(this); if(c.prototype[g] && f.data(c.prototype.name) && g != 'initialize'){ f.data(c.prototype.name)[g].apply( f.data(c.prototype.name), Array.prototype.slice.call(b, 1) ); } else if(!g || $.isPlainObject(g)){ var e = new c; c.prototype.initialize && e.initialize.apply(e, $.merge([f], b)); f.data(c.prototype.name, e) } else { $.error('Method ' + g + ' does not exist on jQuery.' + c.name) } }) } })(jQuery); (function($){ $(document).ready(function(){ $('#new-content').change(function() { changeTrue(); }); $('#save-result').click(function() { $(this).hide(); }); $('.ajax-settings-form').submit(function() { var data = getFormData($(this).attr('id')); $.ajax({ type: "POST", url: ajaxurl, data: data, dataType: 'json', success: function(result) { $('#save-result').html("<div id='save-message' class='" + result[0] + "'></div>"); $('#save-message').append(result[1]); $('#save-result').fadeIn(1000).delay(3000).fadeOut(300); } }); return false; }); $('.ajax-editor-update').submit(function() { wp_editor.save(); var data = { action: 'save_files', real_file: $('#path').val(), new_content: $('#new-content').val(), file: $('#file').val(), plugin: $('#plugin-dirname').val(), extension: $('#extension').val(), _success: $('#_success').val() } if ( $('#theme-name').length ) { data.wp_editor_ajax_nonce_save_files_themes = WPE.wp_editor_ajax_nonce_save_files_themes; } else if ( $('#plugin-dirname').length ) { data.wp_editor_ajax_nonce_save_files_plugins = WPE.wp_editor_ajax_nonce_save_files_plugins; } $.ajax({ type: "POST", url: ajaxurl, data: data, dataType: 'json', success: function(result) { $('#save-result').html("<div id='save-message' class='" + result[0] + "'></div>"); $('#save-message').append(result[1]); $('#save-result').fadeIn(1000).delay(3000).fadeOut(300); changeReset(); } }); return false; }); $(window).bind('beforeunload', function() { if(hasChanged()) { return 'Leaving this page will undo all changes you have made.'; } }); }); })(jQuery); function enableThemeAjaxBrowser(path) { $jq = jQuery.noConflict(); var c; var url = ajaxurl; $jq('#theme-folders').folders({ url: url, path: path, encoded: 1 }).delegate('a','click',function() { $jq('#theme-folders li').removeClass('selected'); c = $jq(this).parent().addClass('selected').data('path') }); } function enablePluginAjaxBrowser(path) { $jq = jQuery.noConflict(); var c; var url = ajaxurl; $jq('#plugin-folders').folders({ url: url, path: path, encoded: 1 }).delegate('a','click',function() { $jq('#plugin-folders li').removeClass('selected'); c = $jq(this).parent().addClass('selected').data('path') }); } function getFormData(formId) { $jq = jQuery.noConflict(); var theForm = $jq('#' + formId); var str = ''; $jq('input:not([type=checkbox], :radio), input[type=checkbox]:checked, input:radio:checked, select, textarea', theForm).each( function() { var name = $jq(this).attr('name'); var val = encodeURIComponent($jq(this).val()); str += name + '=' + val + '&'; } ); return str.substring(0, str.length-1); } function settingsTabs(tab) { $jq = jQuery.noConflict(); $jq('#settings-' + tab).show(); $jq('#settings-loading').hide(); $jq('#settings-' + tab + '-tab a').addClass('active'); $jq('div.settings-tabs ul li a').click(function(){ var thisClass = $jq(this).attr('id').replace('settings-link-',''); $jq('div.settings-body').hide(); $jq('#settings-' + thisClass).fadeIn(300); $jq('div.settings-tabs ul li a').removeClass('active'); $jq('#settings-link-' + thisClass).addClass('active'); }); }