Added the incredible Front End Editor plugin

This commit is contained in:
Kenneth Reitz
2010-04-04 09:13:10 -04:00
parent 09a27eef7f
commit 7d7ecb0b83
66 changed files with 10267 additions and 0 deletions
+147
View File
@@ -0,0 +1,147 @@
<?php
class FEE_Admin extends scbBoxesPage {
function setup() {
$this->textdomain = 'front-end-editor';
$this->args = array('page_title' => __('Front-end Editor', $this->textdomain));
$this->boxes = array(
array('fields', __('Fields', $this->textdomain), 'normal'),
array('settings', __('Settings', $this->textdomain), 'side'),
);
}
function page_head() {
?>
<style type="text/css">
#fields table {
clear: none;
width: auto;
float: left;
margin-right: 1em !important;
}
#fields thead th {
background: #F1F1F1;
padding: 5px 8px 8px;
line-height: 1;
font-size: 11px;
}
#fields .check-column, #fields th, #fields td {padding-left: 0 !important}
#fields .submit {
clear: both !important;
}
</style>
<?php
}
function fields_handler() {
if ( ! isset($_POST['manage_fields']) )
return;
$disabled = array();
foreach ( array_keys( FEE_Core::get_fields() ) as $field )
if ( ! isset($_POST[$field]) )
$disabled[] = $field;
$this->options->disabled = $disabled;
$this->admin_msg();
}
function fields_box() {
// Separate fields
$post_fields = $other_fields = array();
foreach ( FEE_Core::get_fields() as $field => $args )
if ( 'post' == call_user_func(array($args['class'], 'get_object_type') ) )
$post_fields[$field] = $args;
else
$other_fields[$field] = $args;
echo html('p', __('Enable or disable editable fields', $this->textdomain));
$tables = self::fields_table(__('Post fields', $this->textdomain), $post_fields);
$tables .= self::fields_table(__('Other fields', $this->textdomain), $other_fields);
echo $this->form_wrap($tables, '', 'manage_fields');
}
private function fields_table($title, $fields) {
$thead =
html('thead',
html('tr',
html('th scope="col" class="check-column"', '<input type="checkbox" />')
.html('th scope="col"', $title)
)
);
$tbody = '';
foreach ( $fields as $field => $args )
$tbody .=
html('tr',
html('th scope="row" class="check-column"',
$this->input(array(
'type' => 'checkbox',
'name' => $field,
'checked' => ! @in_array($field, $this->options->disabled)
))
)
.html('td', $args['title'])
);
return html('table class="widefat"', $thead . $tbody);
}
function settings_handler() {
if ( !isset($_POST['save_settings']) )
return;
foreach ( array('rich', 'chunks', 'reset_date', 'highlight', 'tooltip') as $key )
$this->options->$key = (bool) @$_POST[$key];
$this->admin_msg();
}
function settings_box() {
$rows = array(
array(
'desc' => __('Enable the WYSIWYG editor', $this->textdomain),
'type' => 'checkbox',
'name' => 'rich',
),
array(
'desc' => __('Edit one paragraph at a time, instead of an entire post', $this->textdomain),
'type' => 'checkbox',
'name' => 'chunks',
),
array(
'desc' => __('Reset the post date on each edit', $this->textdomain),
'type' => 'checkbox',
'name' => 'reset_date',
),
array(
'desc' => __('Highlight editable elements', $this->textdomain),
'type' => 'checkbox',
'name' => 'highlight',
),
array(
'desc' => __('Display a tooltip above editable elements', $this->textdomain),
'type' => 'checkbox',
'name' => 'tooltip',
),
);
$out = '';
foreach ( $rows as $row )
$out .= html('p', $this->input($row));
echo $this->form_wrap($out, '', 'save_settings');
}
}
@@ -0,0 +1,240 @@
<?php
abstract class FEE_Core {
static $options;
private static $fields;
private static $active_fields;
private static $instances = array();
private static $plugin_url;
private static $version;
private static $nonce = 'front-editor';
static function init($options, $version) {
self::$options = $options;
self::$version = $version;
add_action('front_end_editor_fields', array(__CLASS__, 'make_instances'), 100);
add_action('wp_ajax_front-editor', array(__CLASS__, 'ajax_response'));
add_action('template_redirect', array(__CLASS__, '_init'));
}
static function _init() {
if ( ! is_user_logged_in() || apply_filters('front_end_editor_disable', false) )
return;
add_action('wp_head', array(__CLASS__, 'add_filters'), 100);
add_action('wp_footer', array(__CLASS__, 'scripts'));
if ( self::$options->highlight )
add_action('wp_head', array(__CLASS__, 'highlight'));
}
static function highlight() {
?>
<style type='text/css'>.fee-field:hover, .fee-field:hover > * {background-color: #ffffa5}</style>
<?php
}
static function scripts() {
$wrapped = FEE_Field_Base::get_wrapped();
if ( empty($wrapped) )
return;
$url = plugins_url('editor/', __FILE__);
$css_dev = defined('STYLE_DEBUG') && STYLE_DEBUG ? '.dev' : '';
$js_dev = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : '';
// Prepare data
$field_types = array();
foreach ( self::$active_fields as $name => $args )
$field_types[$name] = $args['type'];
$data = array(
'save_text' => __('Save', 'front-end-editor'),
'cancel_text' => __('Cancel', 'front-end-editor'),
'fields' => $field_types,
'ajax_url' => admin_url('admin-ajax.php'),
'spinner' => admin_url('images/loading.gif'),
'nonce' => wp_create_nonce(self::$nonce),
);
$css_dependencies = array();
$js_dependencies = array('jquery');
// qTip
if ( self::$options->tooltip ) {
$data['tooltip'] = array(
'icon' => $url . 'editor.png',
'text' => __('Double-click to edit', 'front-end-editor')
);
wp_register_script('jquery-qtip', $url . "jquery.qtip$js_dev.js", array(), '1.0-rc3', true);
$js_dependencies[] = 'jquery-qtip';
}
// Autosuggest
if ( array_key_exists('terminput', $wrapped) ) {
$js_dependencies[] = 'suggest';
}
// Rich Editor
if ( array_key_exists('rich', $wrapped) ) {
$data['nicedit'] = apply_filters('front_end_editor_nicedit', array(
'iconsPath' => $url . 'nicedit/nicEditorIcons.gif',
'buttonList' => array(
'bold', 'italic', 'strikethrough',
'left','center', 'right',
'fontFormat', 'fontFamily', 'forecolor',
'removeformat',
'ul', 'ol',
'link', 'image',
'xhtml'
)
));
wp_register_script('nicedit', $url . "nicedit/nicEdit$js_dev.js", array(), '0.9r23', true);
$js_dependencies[] = 'nicedit';
}
// Thickbox
if ( array_key_exists('image', $wrapped) || array_key_exists('thumbnail', $wrapped) ) {
$data['admin_url'] = admin_url();
$data['image'] = array(
'change' => __('Change Image', 'front-end-editor'),
'revert' => '(' . __('Clear', 'front-end-editor') . ')',
'tb_close' => get_bloginfo('wpurl') . '/wp-includes/js/thickbox/tb-close.png',
);
$css_dependencies[] = 'thickbox';
$js_dependencies[] = 'thickbox';
wp_register_script('livequery', $url . 'livequery.js', array('jquery'), '1.1.0-pre', true);
$js_dependencies[] = 'livequery';
}
// Core script
wp_register_style('front-end-editor', $url . "editor$css_dev.css", $css_dependencies, self::$version);
wp_register_script('front-end-editor', $url . "editor$js_dev.js", $js_dependencies, self::$version, true);
?>
<script type='text/javascript'>
var FrontEndEditor = {};
FrontEndEditor.data = <?php echo json_encode($data) ?>;
</script>
<?php
scbUtil::do_scripts('front-end-editor');
scbUtil::do_styles('front-end-editor');
}
// Register a new editable field
static function register() {
list ( $filter, $args ) = func_get_arg(0);
if ( ! is_subclass_of($args['class'], 'FEE_Field_Base') ) {
trigger_error($args['class'] . " must be a subclass of " . 'FEE_Field_Base', E_USER_ERROR);
return false;
}
if ( isset(self::$fields[$filter]) )
$args = wp_parse_args($args, self::$fields[$filter]);
else
$args = wp_parse_args($args, array(
'title' => ucfirst(str_replace('_', ' ', $filter)),
'type' => 'input',
'priority' => 11,
'argc' => 1
));
self::$fields[$filter] = $args;
return true;
}
static function make_instances() {
self::$active_fields = self::get_fields();
foreach ( (array) self::$options->disabled as $name )
unset(self::$active_fields[$name]);
foreach ( self::$active_fields as $name => $args ) {
extract($args);
self::$instances[$name] = new $class($name, $type);
}
}
static function add_filters() {
foreach ( self::$active_fields as $name => $args ) {
extract($args);
$instance = self::$instances[$name];
add_filter($name, array($instance, 'wrap'), $priority, $argc);
}
}
static function get_fields() {
return self::$fields;
}
static function get_args($filter) {
return self::$fields[$filter];
}
static function ajax_response() {
// Is user trusted?
check_ajax_referer(self::$nonce, 'nonce');
$id = $_POST['item_id'];
$name = $_POST['name'];
$type = $_POST['type'];
$action = $_POST['callback'];
// Is the current field defined?
if ( ! $instance = self::$instances[$name] )
die(-1);
// Does the user have the right to do this?
if ( ! $instance->check($id) || ! $instance->allow($id) )
die(-1);
$args = self::get_args($name);
if ( $action == 'save' ) {
$content = stripslashes_deep($_POST['content']);
$result = $instance->save($id, $content);
$result = @apply_filters($name, $result);
}
elseif ( $action == 'get' ) {
$result = $instance->get($id);
if ( $type == 'rich' )
$result = wpautop($result);
}
die($result);
}
}
/*
Registers a new editable field
@param string $filter
@param array $args(
'class' => string The name of the field handler class (mandatory)
'title' => string The user-friendly title (optional)
'type' => string: 'input' | 'textarea' | 'rich' | 'image' (default: input)
'priority' => integer (default: 11)
'argc' => integer (default: 1)
)
*/
function register_fronted_field() {
return FEE_Core::register(func_get_args());
}
@@ -0,0 +1 @@
.fee-field,.fee-form{margin:0!important;padding:0!important;border-width:0!important;}div.fee-form,textarea.fee-form-content{clear:both!important;width:100%!important;}.fee-form-spinner{border:0!important;width:16px!important;height:16px!important;}div.fee-form button{margin-top:5px;}span.fee-form input{margin-right:5px;}.fee-form button+button{margin-left:5px;}.fee-form button{text-decoration:none!important;line-height:14px!important;font-size:11px!important;vertical-align:middle!important;padding:2px 8px!important;cursor:pointer!important;-moz-border-radius:11px;-khtml-border-radius:11px;-webkit-border-radius:11px;border-radius:11px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;-khtml-box-sizing:content-box;box-sizing:content-box;}button.fee-form-save{background-color:#23779f;color:#fff;border:1px solid #1c5e7f;font-weight:bold;}.fee-form-save:hover{border:1px solid #000!important;}button.fee-form-cancel{background-color:#fcfcfc;color:#808080;border:1px solid #ddd;}.fee-form-cancel:hover{border:1px solid #666!important;}.nicEdit-selected:focus{outline:none;}.fee-suggest-results{padding:0;margin:0;list-style:none;position:absolute;display:none;z-index:10000;border-width:1px;border-style:solid;}.fee-suggest-results li{padding:2px 5px;white-space:nowrap;text-align:left;}.fee-suggest-match{text-decoration:underline;}.fee-suggest-over{cursor:pointer;}.fee-suggest-results{background-color:#fff;border-color:#808080;}.fee-suggest-results li{color:#101010;}.fee-suggest-match{color:#000;}.fee-suggest-over{background-color:#f0f0b8;}#TB_window #TB_title{background-color:#222;color:#CFCFCF;height:27px;}#fee-img-revert{display:block;float:left;padding:6px 10px 0;}#fee-img-revert:link,#fee-img-revert:active,#fee-img-revert:visited{color:#21759B!important;}#fee-img-revert:hover{color:#D54E21!important;}
@@ -0,0 +1,104 @@
/* Main */
.fee-field, .fee-form {
margin: 0 !important;
padding: 0 !important;
border-width: 0 !important;
}
div.fee-form, textarea.fee-form-content {
clear: both !important;
width: 100% !important;
}
.fee-form-spinner {
border: 0 !important;
width: 16px !important;
height: 16px !important;
}
/* Buttons */
div.fee-form button {margin-top: 5px}
span.fee-form input {margin-right: 5px}
.fee-form button + button {margin-left: 5px}
.fee-form button {
text-decoration: none !important;
line-height: 14px !important;
font-size: 11px !important;
vertical-align: middle !important;
padding: 2px 8px !important;
cursor: pointer !important;
-moz-border-radius: 11px;
-khtml-border-radius: 11px;
-webkit-border-radius: 11px;
border-radius: 11px;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
-khtml-box-sizing: content-box;
box-sizing: content-box;
}
button.fee-form-save {
background-color: #23779f;
color: #fff;
border: 1px solid #1c5e7f;
font-weight: bold;
}
.fee-form-save:hover {
border: 1px solid #000 !important;
}
button.fee-form-cancel {
background-color: #fcfcfc;
color: #808080;
border: 1px solid #ddd;
}
.fee-form-cancel:hover {
border: 1px solid #666 !important;
}
/* Rich Editor */
.nicEdit-selected:focus {
outline: none;
}
/* Suggest */
.fee-suggest-results {
padding: 0;
margin: 0;
list-style: none;
position: absolute;
display: none;
z-index: 10000;
border-width: 1px;
border-style: solid;
}
.fee-suggest-results li {padding: 2px 5px; white-space: nowrap; text-align: left}
.fee-suggest-match {text-decoration: underline}
.fee-suggest-over {cursor: pointer}
/* Suggest colors */
.fee-suggest-results {background-color: #fff; border-color: #808080}
.fee-suggest-results li {color: #101010}
.fee-suggest-match {color: #000}
.fee-suggest-over {background-color: #f0f0b8}
/* Image */
#TB_window #TB_title {
background-color: #222;
color: #CFCFCF;
height: 27px;
}
#fee-img-revert {
display: block;
float: left;
padding: 6px 10px 0;
}
#fee-img-revert:link, #fee-img-revert:active, #fee-img-revert:visited {
color: #21759B !important;
}
#fee-img-revert:hover {
color: #D54E21 !important;
}
@@ -0,0 +1,669 @@
(function($){
if ( FrontEndEditor._loaded )
return;
FrontEndEditor._loaded = true;
// http://ejohn.org/blog/simple-javascript-inheritance/
// Inspired by base2 and Prototype
(function(){
var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
// The base Class implementation (does nothing)
this.Class = function(){};
// Create a new Class that inherits from this class
Class.extend = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
// Copy the properties over onto the new prototype
for (var name in prop) {
// Check if we're overwriting an existing function
prototype[name] = ( typeof prop[name] == "function" &&
typeof _super[name] == "function" && fnTest.test(prop[name]) ) ?
(function(name, fn){
return function() {
var tmp = this._super;
// Add a new ._super() method that is the same method
// but on the super-class
this._super = _super[name];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, prop[name]) :
prop[name];
}
// The dummy class constructor
function Class() {
// All construction is actually done in the init method
if ( !initializing && this.init )
this.init.apply(this, arguments);
}
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.constructor = Class;
// And make this class extendable
Class.extend = arguments.callee;
return Class;
};
})();
// _____Actual code starts here_____
var spinner = $('<img>').attr({
'src': FrontEndEditor.data.spinner,
'class': 'front-editor-spinner'
});
var is_overlay = function($el) {
var attr = [$el.attr('id'), $el.attr("class"), $el.attr("rel")];
var tokens = ['lightbox', 'thickbox', 'shutter', 'awppost_link'];
for ( var i in tokens )
for ( var j in attr )
if ( attr[j].indexOf(tokens[i]) != -1 )
return true;
return false;
};
var resume = function() {
if ( FrontEndEditor._trap )
return;
var $link = FrontEndEditor._to_click;
if ( typeof $link == 'undefined' )
return;
/*
var ev_reference;
var ev_capture = function(ev) { ev_reference = ev; }
var onClick = $link.attr('onclick');
$link.bind('click', ev_capture);
if ( typeof onClick == 'function' )
$link.bind('click', onClick);
$link.click();
$link.unbind('click', ev_capture);
if ( typeof onClick == 'function' )
$link.unbind('click', onClick);
if ( ev_reference.isDefaultPrevented() )
return;
*/
if ( typeof $link.attr('href') != 'undefined' && $link.attr('href') != '#' ) {
if ( $link.attr('target') == '_blank' )
window.open($link.attr('href'));
else
window.location.href = $link.attr('href');
}
delete FrontEndEditor._to_click;
};
var fieldTypes = {};
fieldTypes['base'] = Class.extend({
init: function($el, type, name, id) {
var self = this;
self.set_el($el);
self.type = type;
self.name = name;
self.id = id;
self.bind(self.el, 'click', self.click);
self.bind(self.el, 'dblclick', self.dblclick);
},
set_el: function($el) {
var self = this;
self.el = $el;
// From a > .front-ed > content
// To .front-ed > a > content
var $parent = self.el.parents('a');
if ( ! $parent.length )
return;
var $link = $parent.clone(true)
.html(self.el.html());
var $wrap = self.el.clone(true)
.html($link);
$parent.replaceWith($wrap);
self.el = $wrap;
self.switched = true;
},
click: function(ev) {
// if ( typeof FrontEndEditor._to_click != 'undefined' )
// return;
var $el = $(ev.target).closest('a');
if ( ! $el.length )
return;
if ( is_overlay($el) )
return;
ev.stopImmediatePropagation();
ev.preventDefault();
FrontEndEditor._to_click = $el;
setTimeout(resume, 300);
},
dblclick: function(ev) {
var self = this;
ev.stopPropagation();
ev.preventDefault();
FrontEndEditor._trap = true;
},
get_content: null /* function() */,
set_content: null /* function(content) */,
ajax_get_handler: null /* function(content) */,
ajax_set_handler: null /* function(content) */,
ajax_get: function() {
var self = this;
var data = {
'nonce': FrontEndEditor.data.nonce,
'action': 'front-editor',
'callback': 'get',
'name': self.name,
'type': self.type,
'item_id': self.id
};
$.post(FrontEndEditor.data.ajax_url, data, function(response){
self.ajax_get_handler(response);
});
},
ajax_set: function(content) {
var self = this;
content = content || self.get_content();
var data = {
'nonce': FrontEndEditor.data.nonce,
'action': 'front-editor',
'callback': 'save',
'name': self.name,
'type': self.type,
'item_id': self.id,
'content': content
};
$.post(FrontEndEditor.data.ajax_url, data, function(response){
self.ajax_set_handler(response);
});
},
// Event utility: this = self
bind: function(element, event, callback) {
var self = this;
element.bind(event, function(ev) {
callback.call(self, ev);
});
}
});
fieldTypes['image'] = fieldTypes['base'].extend({
dblclick: function(ev) {
var self = this;
self._super(ev);
self.open_box();
},
open_box: function() {
var self = this;
tb_show(FrontEndEditor.data.image.change, FrontEndEditor.data.admin_url +
'/media-upload.php?post_id=0&type=image&TB_iframe=true&width=640&editable_image=1');
var $revert = $('<a id="fee-img-revert" href="#">').text(FrontEndEditor.data.image.revert);
$revert.click(function(ev){
self.ajax_set(-1);
});
$('#TB_ajaxWindowTitle').after($revert);
$('#TB_closeWindowButton img').attr('src', FrontEndEditor.data.image.tb_close);
self.bind($('#TB_iframeContent'), 'load', self.replace_button);
},
replace_button: function(ev) {
var self = this;
var $frame = $(ev.target).contents();
$('.media-item', $frame).livequery(function(){
var $item = $(this);
var $button = $('<a href="#" class="button">').text(FrontEndEditor.data.image.change);
$button.click(function(ev){
self.ajax_set(self.get_content($item));
});
$(this).find(':submit, #go_button').replaceWith($button);
});
},
get_content: function($item) {
var $field;
// Media library
$field = $item.find('.urlfile');
if ( $field.length )
return $field.attr('title');
// From URL (embed)
$field = $item.find('#embed-src');
if ( $field.length )
return $field.val();
// From URL
$field = $item.find('#src');
if ( $field.length )
return $field.val();
return false;
},
ajax_set_handler: function(url) {
var self = this;
if ( url == -1 ) {
window.location.reload(true);
} else {
self.el.find('img').attr('src', url);
tb_remove();
}
}
});
fieldTypes['thumbnail'] = fieldTypes['image'].extend({
replace_button: function(ev) {
var self = this;
var $frame = $(ev.target).contents();
$frame.find('#tab-type_url').remove();
self._super(ev);
},
get_content: function($item) {
return $item.attr('id').replace('media-item-', '');
}
});
fieldTypes['input'] = fieldTypes['base'].extend({
init: function($el, type, name, id) {
var self = this;
self.spinner = spinner.clone();
self._super($el, type, name, id);
},
input_tag: '<input type="text">',
create_input: function() {
var self = this;
self.input = $(self.input_tag);
self.input.attr({
'id': 'edit_' + self.el.attr('id'),
'class': 'fee-form-content'
}).prependTo(self.form);
},
set_input: function(content) {
var self = this;
self.input.val(content);
},
get_content: function() {
var self = this;
return self.input.val();
},
set_content: function(content) {
var self = this;
if ( self.switched )
self.el.find('a').html(content);
else
self.el.html(content);
},
ajax_get: function() {
var self = this;
self.el.hide().after(self.spinner.show());
self.create_input();
self._super();
},
ajax_set: function() {
var self = this;
self.el.before(self.spinner.show());
self._super();
},
ajax_get_handler: function(content) {
var self = this;
self.spinner.hide().replaceWith(self.form);
self.set_input(content);
self.input.focus();
},
ajax_set_handler: function(content) {
var self = this;
self.set_content(content);
self.spinner.hide();
self.el.show();
},
dblclick: function(ev) {
var self = this;
self._super(ev);
self.form_handler();
},
form_handler: function() {
var self = this;
// Button actions
var form_remove = function(with_spinner) {
FrontEndEditor._trap = false;
self.form.remove();
if ( with_spinner === true )
self.el.before(self.spinner.show());
else
self.el.show();
self.el.trigger('fee_remove_form');
};
var form_submit = function() {
self.ajax_set();
form_remove(true);
};
// Button markup
self.save_button = $('<button>').addClass('fee-form-save').text(FrontEndEditor.data.save_text).click(form_submit);
self.cancel_button = $('<button>').addClass('fee-form-cancel').text(FrontEndEditor.data.cancel_text).click(form_remove);
// Create form
var inline = self.type == 'input' || self.type == 'terminput';
self.form = inline ? $('<span>') : $('<div>');
self.form
.addClass('fee-form')
.addClass('fee-type-' + self.type)
.addClass('fee-filter-' + self.name)
.append(self.save_button)
.append(self.cancel_button);
self.bind(self.form, 'keypress', self.keypress);
self.ajax_get();
},
keypress: function(ev) {
var self = this;
var keys = {ENTER: 13, ESCAPE: 27};
var code = (ev.keyCode || ev.which || ev.charCode || 0);
if ( code == keys.ENTER && self.type == 'input' )
self.save_button.click();
if ( code == keys.ESCAPE )
self.cancel_button.click();
}
});
fieldTypes['terminput'] = fieldTypes['input'].extend({
set_input: function(content) {
var self = this;
self._super(content);
self.input.suggest(FrontEndEditor.data.ajax_url + '?action=ajax-tag-search&tax=' + self.id.split('#')[1], {
multiple: true,
resultsClass: 'fee-suggest-results',
selectClass: 'fee-suggest-over',
matchClass: 'fee-suggest-match'
});
}
});
fieldTypes['textarea'] = fieldTypes['input'].extend({
input_tag: '<textarea rows="10">'
});
fieldTypes['rich'] = fieldTypes['textarea'].extend({
set_input: function(content) {
var self = this;
self._super(content);
self.editor = new nicEditor(FrontEndEditor.data.nicedit).panelInstance(self.input.attr('id'));
self.form.find('.nicEdit-main').focus();
},
get_content: function() {
var self = this;
return self.pre_wpautop(self.input.val());
},
// Copied from wp-admin/js/editor.dev.js
pre_wpautop: function(content) {
var blocklist1, blocklist2;
// Protect pre|script tags
content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
a = a.replace(/<br ?\/?>[\r\n]*/g, '<wp_temp>');
return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '<wp_temp>');
});
// Pretty it up for the source editor
blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset';
content = content.replace(new RegExp('\\s*</('+blocklist1+')>\\s*', 'g'), '</$1>\n');
content = content.replace(new RegExp('\\s*<(('+blocklist1+')[^>]*)>', 'g'), '\n<$1>');
// Mark </p> if it has any attributes.
content = content.replace(/(<p [^>]+>.*?)<\/p>/g, '$1</p#>');
// Sepatate <div> containing <p>
content = content.replace(/<div([^>]*)>\s*<p>/gi, '<div$1>\n\n');
// Remove <p> and <br />
content = content.replace(/\s*<p>/gi, '');
content = content.replace(/\s*<\/p>\s*/gi, '\n\n');
content = content.replace(/\n[\s\u00a0]+\n/g, '\n\n');
content = content.replace(/\s*<br ?\/?>\s*/gi, '\n');
// Fix some block element newline issues
content = content.replace(/\s*<div/g, '\n<div');
content = content.replace(/<\/div>\s*/g, '</div>\n');
content = content.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi, '\n\n[caption$1[/caption]\n\n');
content = content.replace(/caption\]\n\n+\[caption/g, 'caption]\n\n[caption');
blocklist2 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset';
content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'g'), '\n<$1>');
content = content.replace(new RegExp('\\s*</('+blocklist2+')>\\s*', 'g'), '</$1>\n');
content = content.replace(/<li([^>]*)>/g, '\t<li$1>');
if ( content.indexOf('<object') != -1 ) {
content = content.replace(/<object[\s\S]+?<\/object>/g, function(a){
return a.replace(/[\r\n]+/g, '');
});
}
// Unmark special paragraph closing tags
content = content.replace(/<\/p#>/g, '</p>\n');
content = content.replace(/\s*(<p [^>]+>[\s\S]*?<\/p>)/g, '\n$1');
// Trim whitespace
content = content.replace(/^\s+/, '');
content = content.replace(/[\s\u00a0]+$/, '');
// put back the line breaks in pre|script
content = content.replace(/<wp_temp>/g, '\n');
return content;
},
ajax_set: function() {
var self = this;
self.editor.nicInstances[0].saveContent();
self._super();
}
});
// export
FrontEndEditor.fieldTypes = fieldTypes;
$(document).ready(function($) {
// Widget fields hack: Add data-fee attr to each element
$('.fee-filter-widget_title, .fee-filter-widget_text').each(function() {
var $el = $(this);
var id = $el.parents('.widget').attr('id');
if ( id )
$el.attr('data-fee', id);
else
// undo wrap; can't find widget id
$el.replaceWith($el.html());
});
// Create field instances
$.each(FrontEndEditor.data.fields, function(name, type) {
$('.fee-filter-' + name).each(function() {
var $el = $(this);
var id = $el.attr('data-fee');
var parts = id.split('#');
switch (name) {
case 'post_meta': type = parts[2]; break;
case 'editable_option': type = parts[1]; break;
}
new fieldTypes[type]($el, type, name, id);
});
});
// Tooltip init
if ( FrontEndEditor.data.tooltip ) {
$.fn.qtip.styles.fee = {
height: 10,
paddingTop: '4px',
paddingRight: '5px',
paddingBottom: '6px',
paddingLeft: '25px',
background: '#bbbebf url(' + FrontEndEditor.data.tooltip.icon + ') top left no-repeat',
color: '#ffffff',
textAlign: 'left',
lineHeight: '100%',
fontFamily: 'sans-serif',
fontSize: '14px',
opacity: '0.75',
border: {
width: 0,
radius: 5,
color: '#bbbebf'
},
tip: 'bottomLeft',
name: 'dark'
};
$('.fee-field').qtip({
content: FrontEndEditor.data.tooltip.text,
position: { corner: { target: 'topMiddle' }, adjust: { x: 0, y: -40 } },
show: {
effect: 'fade'
},
style: {
name: 'fee'
}
});
}
});
})(jQuery);
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
/* Copyright (c) 2008 Brandon Aaron (http://brandonaaron.net)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* Version: 1.0.3
* Requires jQuery 1.1.3+
* Docs: http://docs.jquery.com/Plugins/livequery
*/
(function($){$.extend($.fn,{livequery:function(type,fn,fn2){var self=this,q;if($.isFunction(type)){fn2=fn,fn=type,type=undefined}$.each($.livequery.queries,function(i,query){if(self.selector==query.selector&&self.context==query.context&&type==query.type&&(!fn||fn.$lqguid==query.fn.$lqguid)&&(!fn2||fn2.$lqguid==query.fn2.$lqguid)){return(q=query)&&false}});q=q||new $.livequery(this.selector,this.context,type,fn,fn2);q.stopped=false;q.run();return this},expire:function(type,fn,fn2){var self=this;if($.isFunction(type)){fn2=fn,fn=type,type=undefined}$.each($.livequery.queries,function(i,query){if(self.selector==query.selector&&self.context==query.context&&(!type||type==query.type)&&(!fn||fn.$lqguid==query.fn.$lqguid)&&(!fn2||fn2.$lqguid==query.fn2.$lqguid)&&!this.stopped){$.livequery.stop(query.id)}});return this}});$.livequery=function(selector,context,type,fn,fn2){this.selector=selector;this.context=context||document;this.type=type;this.fn=fn;this.fn2=fn2;this.elements=[];this.stopped=false;this.id=$.livequery.queries.push(this)-1;fn.$lqguid=fn.$lqguid||$.livequery.guid++;if(fn2){fn2.$lqguid=fn2.$lqguid||$.livequery.guid++}return this};$.livequery.prototype={stop:function(){var query=this;if(this.type){this.elements.unbind(this.type,this.fn)}else{if(this.fn2){this.elements.each(function(i,el){query.fn2.apply(el)})}}this.elements=[];this.stopped=true},run:function(){if(this.stopped){return}var query=this;var oEls=this.elements,els=$(this.selector,this.context),nEls=els.not(oEls);this.elements=els;if(this.type){nEls.bind(this.type,this.fn);if(oEls.length>0){$.each(oEls,function(i,el){if($.inArray(el,els)<0){$.event.remove(el,query.type,query.fn)}})}}else{nEls.each(function(){query.fn.apply(this)});if(this.fn2&&oEls.length>0){$.each(oEls,function(i,el){if($.inArray(el,els)<0){query.fn2.apply(el)}})}}}};$.extend($.livequery,{guid:0,queries:[],queue:[],running:false,timeout:null,checkQueue:function(){if($.livequery.running&&$.livequery.queue.length){var length=$.livequery.queue.length;while(length--){$.livequery.queries[$.livequery.queue.shift()].run()}}},pause:function(){$.livequery.running=false},play:function(){$.livequery.running=true;$.livequery.run()},registerPlugin:function(){$.each(arguments,function(i,n){if(!$.fn[n]){return}var old=$.fn[n];$.fn[n]=function(){var r=old.apply(this,arguments);$.livequery.run();return r}})},run:function(id){if(id!=undefined){if($.inArray(id,$.livequery.queue)<0){$.livequery.queue.push(id)}}else{$.each($.livequery.queries,function(id){if($.inArray(id,$.livequery.queue)<0){$.livequery.queue.push(id)}})}if($.livequery.timeout){clearTimeout($.livequery.timeout)}$.livequery.timeout=setTimeout($.livequery.checkQueue,20)},stop:function(id){if(id!=undefined){$.livequery.queries[id].stop()}else{$.each($.livequery.queries,function(id){$.livequery.queries[id].stop()})}}});$.livequery.registerPlugin("append","prepend","after","before","wrap","attr","removeAttr","addClass","removeClass","toggleClass","empty","remove");$(function(){$.livequery.play()});var init=$.prototype.init;$.prototype.init=function(a,c){var r=init.apply(this,arguments);if(a&&a.selector){r.context=a.context,r.selector=a.selector}if(typeof a=="string"){r.context=c||document,r.selector=a}return r};$.prototype.init.prototype=$.prototype})(jQuery);
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

@@ -0,0 +1,117 @@
<?php
// All field classes should extend from this one or one of it's descendants
abstract class FEE_Field_Base {
private $filter;
private $input_type;
private static $wrapped = array();
/**
* Constructor; nothing fancy
* @return null
*/
final public function __construct($filter, $type) {
$this->filter = $filter;
$this->input_type = $type;
$this->setup();
}
/**
* The type of object this field operates with
* @return string
*/
abstract public static function get_object_type();
/**
* Optional actions to be done once per instance
* @return null
*/
protected function setup() {}
/**
* Mark the field as editable
* @return string Wrapped content
*/
public function wrap($content, $object_id, $inline = false) {
if ( ! $this->allow($object_id) )
return $content;
self::$wrapped[$this->input_type] = true;
if ( is_null($content) )
$content = '';
if ( ! is_scalar($content) )
trigger_error("scalar expected. " . gettype($content) . " given", E_USER_WARNING);
$class = 'fee-field fee-filter-' . $this->filter;
$object_id = esc_attr($object_id);
$wrap_tag = ( $inline || in_array($this->input_type, array('input', 'terminput', 'image')) ) ? 'span' : 'div';
return html("$wrap_tag class='{$class}' data-fee='{$object_id}'", $content);
}
/**
* Retrieve the current data for the field
* @return string Unfiltered content
*/
abstract public function get($object_id);
/**
* Save the data retrieved from the field
* @return string Saved content
*/
abstract public function save($object_id, $content);
/**
* Check user permissions
* @return bool
*/
abstract public function check($object_id = 0);
/**
* Generate a standard placeholder
* @return string
*/
protected function placeholder() {
return '[' . __('empty', 'front-end-editor') . ']';
}
protected function placehold($content) {
if ( empty($content) )
$content = $this->placeholder();
return $content;
}
/**
* Get the filter of the current instance
* @return string
*/
final protected function get_filter() {
return $this->filter;
}
/**
* Allow external code to block editing for certain objects
* @return bool
*/
final public function allow($object_id) {
return apply_filters('front_end_editor_allow_' . $this->get_object_type(), true, $object_id, $this->filter, $this->input_type);
}
/**
* Get the list of used input types
* @return array
*/
final public static function get_wrapped() {
return self::$wrapped;
}
}
@@ -0,0 +1,380 @@
<?php
// Handles comment_text field
class FEE_Field_Comment extends FEE_Field_Base {
static function get_object_type() {
return 'comment';
}
function wrap($content) {
global $comment;
if ( ! $this->check($comment->comment_ID) )
return $content;
return parent::wrap(wpautop($content), $comment->comment_ID);
}
function get($comment_id) {
$comment = get_comment($comment_id);
return $comment->comment_content;
}
function save($comment_id, $content) {
wp_update_comment(array(
'comment_ID' => $comment_id,
'comment_content' => $content
));
return $content;
}
function check($comment_id = 0) {
if ( current_user_can('moderate_comments') )
return true;
global $user_ID;
$comment = get_comment($comment_id);
return $user_ID == $comment->user_id;
}
}
// Handles single_*_title fields
class FEE_Field_Single_Title extends FEE_Field_Base {
static function get_object_type() {
return 'term';
}
private $taxonomy;
protected function setup() {
remove_filter($this->get_filter(), 'strip_tags');
list($a, $tax, $b) = explode('_', $this->get_filter());
$translate = array(
'cat' => 'category',
'tag' => 'post_tag'
);
$this->taxonomy = $translate[$tax];
}
function wrap($title) {
if ( ! $this->check() )
return $title;
if ( ! $term = get_term_by('name', $title, $this->taxonomy) )
return $title;
return parent::wrap($title, $term->term_id);
}
function get($term_id) {
return get_term_field('name', $term_id, $this->taxonomy, 'edit');
}
function save($term_id, $title) {
wp_update_term($term_id, $this->taxonomy, array('name' => $title));
return $title;
}
function check($id = 0) {
return current_user_can('manage_categories');
}
}
// Handles the_author_description field
class FEE_Field_Author_Desc extends FEE_Field_Base {
static function get_object_type() {
return 'user';
}
function wrap($content, $author_id = '') {
if ( ! $author_id )
$author_id = $this->guess_author_id();
if ( ! $author_id )
return $content;
if ( ! $this->check($author_id) )
return $content;
$content = $this->placehold($content);
return parent::wrap($content, $author_id);
}
// Retrieve the current data for the field
function get($author_id) {
return get_usermeta($author_id, 'description');
}
function save($author_id, $content) {
update_usermeta($author_id, 'description', $content);
return $content;
}
function check($author_id = 0) {
if ( current_user_can('edit_users') )
return true;
global $user_ID;
return $user_ID == $author_id;
}
// WP < 2.9
function guess_author_id() {
if ( function_exists('get_the_author_meta') )
return get_the_author_meta('id');
global $authordata;
return $authordata->ID;
}
}
// Handles widget_text and widget_title fields
class FEE_Field_Widget extends FEE_Field_Base {
protected $field;
static function get_object_type() {
return 'widget';
}
protected function setup() {
$this->field = str_replace('widget_', '', $this->get_filter());
}
function wrap($content) {
if ( ! $this->check() )
return $content;
if ( 'text' == $this->field )
$content = $this->placehold($content);
return parent::wrap($content, 0);
}
function get($id) {
return $this->do_('get', $id);
}
function save($id, $content) {
return $this->do_('save', $id, $content);
}
private function do_($action, $id, $content = '') {
list($widget_type, $widget_id) = explode('-', $id);
$widget_key = 'widget_' . $widget_type;
$widgets = get_option($widget_key);
$data =& $widgets[$widget_id][$this->field];
if ( 'get' == $action ) {
return $data;
}
if ( 'save' == $action ) {
$data = $content;
update_option($widget_key, $widgets);
if ( 'text' == $widget_type
&& 'text' == $this->field
&& $widgets[$widget_id]['filter'] )
$content = wpautop($content);
if ( 'text' == $this->field )
$content = $this->placehold($content);
return $content;
}
}
function check($id = 0) {
return current_user_can('edit_themes');
}
}
// Handles bloginfo fields
class FEE_Field_Bloginfo extends FEE_Field_Base {
static function get_object_type() {
return 'option';
}
function wrap($content, $show) {
if ( ! $this->check() )
return $content;
if ( empty($show) && $content == get_option('blogname') )
$show = 'name';
if ( $show != 'description' && $show != 'name' )
return $content;
return parent::wrap($content, $show);
}
function get($show) {
return get_option('blog' . $show);
}
function save($show, $content) {
update_option('blog' . $show, $content);
return $content;
}
function check($key = 0) {
return current_user_can('manage_options');
}
}
// Handles editable_option fields
class FEE_Field_Option extends FEE_Field_Base {
static function init($file) {
register_uninstall_hook($file, array(__CLASS__, 'uninstall'));
}
static function uninstall() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE 'editable!_option!_%' ESCAPE '!'");
}
static function get_object_type() {
return 'option';
}
function wrap($content, $key, $type) {
if ( ! $this->check($key) )
return $content;
$content = $this->placehold($content);
$id = implode('#', array($key, $type));
return parent::wrap($content, $id);
}
function get($id) {
list($key, $type) = explode('#', $id);
return get_option($key);
}
function save($id, $content) {
list($key, $type) = explode('#', $id);
update_option($key, $content);
$content = $this->placehold($content);
return $content;
}
function check($key = 0) {
return current_user_can('manage_options');
}
}
function editable_option($key, $safety = true, $type = 'input', $echo = true) {
if ( $safety )
$key = "editable_option_$key";
$output = apply_filters('editable_option', get_option($key), $key, $type);
if ( $echo )
echo $output;
return $output;
}
// Handles editable_image fields
class FEE_Field_Image extends FEE_Field_Base {
static function init($file) {
register_uninstall_hook($file, array(__CLASS__, 'uninstall'));
}
static function uninstall() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE 'editable!_image!_%' ESCAPE '!'");
}
static function get_object_type() {
return 'option';
}
function wrap($img, $key) {
if ( ! $this->check() )
return $img;
return parent::wrap($img, $key);
}
function get($id) {
return get_option(self::get_key($id));
}
function save($id, $url) {
if ( $url == -1 )
delete_option(self::get_key($id));
else
update_option(self::get_key($id), $url);
return $url;
}
function check($id = 0) {
return current_user_can('edit_themes');
}
private static function get_key($key) {
return 'editable_image_' . trim(strip_tags($key));
}
}
function editable_image($key, $default_url, $extra_attr = '', $echo = true) {
$attr = wp_parse_args($extra_attr, array(
'id' => $key
));
if ( ! $src = FEE_Field_Image::get($key) )
$src = $default_url;
$attr['src'] = $src;
$attr_str = '';
foreach ( $attr as $a_key => $a_value ) {
$a_key = trim(strip_tags($a_key));
$a_value = trim(esc_attr($a_value));
if ( empty($a_key) )
continue;
$attr_str .= " $a_key='$a_value'";
}
$attr_str = ltrim($attr_str);
$img = apply_filters('editable_image', "<img $attr_str />", $key, $default_url);
if ( $echo )
echo $img;
return $img;
}
@@ -0,0 +1,369 @@
<?php
// Handles the_title and the_content fields
class FEE_Field_Post extends FEE_Field_Base {
protected $field;
protected function setup() {
$this->field = str_replace('the_', 'post_', $this->get_filter());
}
static function get_object_type() {
return 'post';
}
function wrap($content, $post_id = 0) {
if ( ! $post_id = $this->_get_id($post_id) )
return $content;
return parent::wrap($content, $post_id);
}
protected function _get_id($post_id = 0, $in_loop = true ) {
if ( $in_loop && !in_the_loop() )
return false;
if ( ! $post_id )
$post_id = get_the_ID();
if ( ! $post_id || ! $this->check($post_id) )
return false;
return $post_id;
}
function get($post_id) {
return get_post_field($this->field, $post_id);
}
function save($post_id, $content) {
$postdata = array(
'ID' => $post_id,
$this->field => $content
);
if ( FEE_Core::$options->reset_date ) {
$postdata['post_date'] = current_time('mysql');
$postdata['post_date_gmt'] = current_time('mysql', 1);
}
// reset slug
if ( $this->field == 'post_title' ) {
$current_slug = get_post_field('post_name', $post_id);
$current_title = get_post_field('post_title', $post_id);
// update only if not explicitly set
if ( empty($current_slug) || $current_slug == sanitize_title_with_dashes($current_title) ) {
$new_slug = sanitize_title_with_dashes($content);
$postdata['post_name'] = $new_slug;
}
}
wp_update_post((object) $postdata);
$this->set_post_global($post_id);
return $content;
}
function check($post_id = 0) {
return current_user_can('edit_' . get_post_type($post_id), $post_id);
}
protected function set_post_global($post_id) {
$GLOBALS['post'] = get_post($post_id);
}
}
// Handles <p> tags in the_content
class FEE_Field_Chunks extends FEE_Field_Post {
const delim = "\n\n";
function wrap($content, $post_id = 0) {
if ( ! $post_id = $this->_get_id($post_id) )
return $content;
$chunks = $this->split($content);
foreach ( $chunks as $i => $chunk )
$content = str_replace($chunk, FEE_Field_Base::wrap($chunk, "$post_id#$i", true), $content);
return $content;
}
function get($post_id) {
list($post_id, $chunk_id) = explode('#', $post_id);
$field = get_post_field('post_content', $post_id);
$chunks = $this->split($field, true);
return @$chunks[$chunk_id];
}
function save($post_id, $chunk_content) {
list($post_id, $chunk_id) = explode('#', $post_id);
$content = get_post_field('post_content', $post_id);
$chunks = $this->split($content, true);
$chunk_content = trim($chunk_content);
$content = str_replace($chunks[$chunk_id], $chunk_content, $content);
$postdata = array(
'ID' => $post_id,
'post_content' => $content
);
wp_update_post((object) $postdata);
$this->set_post_global($post_id);
// Refresh the page if a new chunk is added
if ( empty($chunk_content) || FALSE !== strpos($chunk_content, self::delim) )
$this->force_refresh();
die($chunk_content);
}
// Split content into chunks
protected function split($content, $autop = false) {
if ( $autop )
$content = wpautop($content);
preg_match_all("#<p>(.*?)</p>#", $content, $matches);
return $matches[1];
}
protected function force_refresh() {
die("<script language='javascript'>location.reload(true)</script>");
}
}
// Handles the_excerpt field
class FEE_Field_Excerpt extends FEE_Field_Post {
function get($post_id) {
$post = get_post($post_id);
$excerpt = $post->post_excerpt;
if ( empty($excerpt) ) {
$this->set_post_global($post_id);
$excerpt = $this->trim_excerpt($post->post_content);
}
return $excerpt;
}
function save($post_id, $excerpt) {
$default_excerpt = $this->get($post_id);
if ( $excerpt == $default_excerpt )
return $excerpt;
$postdata = array(
'ID' => $post_id,
'post_excerpt' => $excerpt
);
wp_update_post((object) $postdata);
$this->set_post_global($post_id);
if ( empty($excerpt) )
return $default_excerpt;
return $excerpt;
}
// Copy-paste from wp_trim_excerpt()
private function trim_excerpt($text) {
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]&gt;', $text);
$text = strip_tags($text);
$excerpt_length = apply_filters('excerpt_length', 55);
$words = explode(' ', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, '[...]');
$text = implode(' ', $words);
}
return apply_filters('get_the_excerpt', $text);
}
}
// Handles the_terms field
class FEE_Field_Terms extends FEE_Field_Post {
function wrap($content, $taxonomy, $before, $sep, $after) {
if ( ! $post_id = $this->_get_id() )
return $content;
$content = $this->placehold(str_replace(array($before, $after), '', $content));
$id = implode('#', array($post_id, $taxonomy));
return $before . FEE_Field_Base::wrap($content, $id) . $after;
}
function get($id) {
list($post_id, $taxonomy) = explode('#', $id);
$tags = get_terms_to_edit($post_id, $taxonomy);
$tags = str_replace(',', ', ', $tags);
return $tags;
}
function save($id, $terms) {
list($post_id, $taxonomy) = explode('#', $id);
wp_set_post_terms($post_id, $terms, $taxonomy);
$response = get_the_term_list($post_id, $taxonomy, '', ', '); // todo: store $sep somehow
return $this->placehold($response);
}
}
// Handles the_tags field
class FEE_Field_Tags extends FEE_Field_Terms {
function wrap($content, $before, $sep, $after) {
return parent::wrap($content, 'post_tag', $before, $sep, $after);
}
}
// Handles the_category field
class FEE_Field_Category extends FEE_Field_Terms {
function wrap($content, $sep, $parents) {
return parent::wrap($content, 'category', '', $sep, '');
}
function save($id, $categories) {
list($post_id, $taxonomy) = explode('#', $id);
$cat_ids = array();
foreach ( explode(',', $categories) as $cat_name ) {
if ( ! $cat = get_cat_ID(trim($cat_name)) ) {
$args = wp_insert_term($cat_name, $taxonomy);
if ( is_wp_error($args) )
continue;
$cat = $args['term_id'];
}
$cat_ids[] = $cat;
}
wp_set_post_categories($post_id, $cat_ids);
$response = get_the_term_list($post_id, $taxonomy, '', ', ');
return $this->placehold($response);
}
}
// Handles the post thumbnail
class FEE_Field_Thumbnail extends FEE_Field_Post {
function wrap($html, $post_id, $post_thumbnail_id, $size) {
if ( ! $post_id = $this->_get_id($post_id, false) )
return $content;
$id = implode('#', array($post_id, $size));
return FEE_Field_Base::wrap($html, $id);
}
function get($id) {
list($post_id, $size) = explode('#', $id);
return get_post_thumbnail_id($post_id);
}
function save($id, $thumbnail_id) {
list($post_id, $size) = explode('#', $id);
if ( -1 == $thumbnail_id ) {
delete_post_meta($post_id, '_thumbnail_id');
return -1;
}
update_post_meta($post_id, '_thumbnail_id', $thumbnail_id);
list($url) = image_downsize($thumbnail_id, $size);
return $url;
}
}
// Handles post_meta field
class FEE_Field_Meta extends FEE_Field_Post {
function wrap($data, $post_id, $key, $type, $single) {
if ( $this->check($post_id) ) {
if ( $single )
$data = array($this->placehold($data));
$r = array();
foreach ( $data as $i => $val ) {
$id = implode('#', array($post_id, $key, $type, $i));
$r[$i] = FEE_Field_Base::wrap($val, $id);
}
}
else {
$r = (array) $data;
}
if ( $single )
return $r[0];
return $r;
}
function get($id) {
list($post_id, $key, $type, $i) = explode('#', $id);
$data = get_post_meta($post_id, $key);
return @$data[$i];
}
function save($id, $new_value) {
list($post_id, $key, $type, $i) = explode('#', $id);
$data = get_post_meta($post_id, $key);
$old_value = @$data[$i];
update_post_meta($post_id, $key, $new_value, $old_value);
return $new_value;
}
}
function editable_post_meta($post_id, $key, $type = 'input', $echo = true) {
$data = get_editable_post_meta($post_id, $key, $type, true);
if ( ! $echo )
return $data;
echo $data;
}
function get_editable_post_meta($post_id, $key, $type = 'input', $single = false) {
$data = get_post_meta($post_id, $key, $single);
return apply_filters('post_meta', $data, $post_id, $key, $type, $single);
}
@@ -0,0 +1,178 @@
<?php
/*
Plugin Name: Front-end Editor
Version: 1.8
Description: Allows you to edit your posts without going through the admin interface
Author: scribu
Author URI: http://scribu.net/
Plugin URI: http://scribu.net/wordpress/front-end-editor
Text Domain: front-end-editor
Domain Path: /lang
Copyright (C) 2010 scribu.net (scribu@gmail.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Load scbFramework
require dirname(__FILE__) . '/scb/load.php';
function _fee_init() {
$dir = dirname(__FILE__);
// Load translations
load_plugin_textdomain('front-end-editor', '', basename($dir) . '/lang');
// Load files
require_once $dir . '/core.php';
foreach ( array('base', 'post', 'other') as $name )
require_once "$dir/fields/$name.php";
// Load options
$options = new scbOptions('front-end-editor', __FILE__, array(
'disabled' => array(),
'highlight' => true,
'tooltip' => true,
'rich' => true,
'chunks' => false,
'reset_date' => false
));
FEE_Core::init($options, '1.8');
FEE_Field_Image::init(__FILE__);
if ( is_admin() ) {
require_once $dir . '/admin.php';
scbAdminPage::register('Fee_Admin', __FILE__, $options);
}
}
_fee_init();
function fee_register_defaults() {
$fields = array(
'the_title' => array(
'title' => __('Post title', 'front-end-editor'),
'class' => 'FEE_Field_Post',
'type' => 'input',
),
'the_content' => array(
'title' => __('Post content', 'front-end-editor'),
'class' => FEE_Core::$options->chunks ? 'FEE_Field_Chunks' : 'FEE_Field_Post',
'type' => FEE_Core::$options->rich ? 'rich' : 'textarea',
),
'the_excerpt' => array(
'title' => __('Post excerpt', 'front-end-editor'),
'class' => 'FEE_Field_Excerpt',
'type' => 'textarea',
),
'the_category' => array(
'title' => __('Post categories', 'front-end-editor'),
'class' => 'FEE_Field_Category',
'argc' => 3,
'type' => 'terminput',
),
'the_tags' => array(
'title' => __('Post tags', 'front-end-editor'),
'class' => 'FEE_Field_Tags',
'argc' => 4,
'type' => 'terminput',
),
'the_terms' => array(
'title' => __('Post terms', 'front-end-editor'),
'class' => 'FEE_Field_Terms',
'argc' => 5,
'type' => 'terminput',
),
'post_meta' => array(
'title' => __('Post custom fields', 'front-end-editor'),
'class' => 'FEE_Field_Meta',
'argc' => 5,
),
'post_thumbnail_html' => array(
'title' => __('Post thumbnail', 'front-end-editor'),
'class' => 'FEE_Field_Thumbnail',
'argc' => 4,
'type' => 'thumbnail',
),
'comment_text' => array(
'title' => __('Comment text', 'front-end-editor'),
'class' => 'FEE_Field_Comment',
'type' => 'textarea',
),
'single_cat_title' => array(
'title' => __('Category title', 'front-end-editor'),
'class' => 'FEE_Field_Single_Title',
),
'single_tag_title' => array(
'title' => __('Tag title', 'front-end-editor'),
'class' => 'FEE_Field_Single_Title',
),
'the_author_description' => array(
'title' => __('Author description', 'front-end-editor'),
'class' => 'FEE_Field_Author_Desc',
'type' => 'textarea',
'argc' => 2,
),
'widget_title' => array(
'title' => __('Widget title', 'front-end-editor'),
'class' => 'FEE_Field_Widget',
),
'widget_text' => array(
'title' => __('Text widget content', 'front-end-editor'),
'class' => 'FEE_Field_Widget',
'type' => FEE_Core::$options->rich ? 'rich' : 'textarea',
),
'bloginfo' => array(
'title' => __('Site title and description', 'front-end-editor'),
'class' => 'FEE_Field_Bloginfo',
'argc' => 2,
),
'editable_option' => array(
'title' => __('Site options', 'front-end-editor'),
'class' => 'FEE_Field_Option',
'argc' => 3,
),
'editable_image' => array(
'title' => __('Theme images', 'front-end-editor'),
'class' => 'FEE_Field_Image',
'type' => 'image',
'argc' => 2,
),
);
foreach ( $fields as $filter => $args )
register_fronted_field($filter, $args);
// Safe hook for new editable fields to be registered
do_action('front_end_editor_fields');
}
add_action('init', 'fee_register_defaults');
@@ -0,0 +1,132 @@
"Project-Id-Version: Clean Options\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-08-15 15:41+0300\n"
"PO-Revision-Date: 2009-08-17 02:11+0300\n"
"Last-Translator: Fat Cow <zhr@tut.by>\n"
"Language-Team: Fat Cow <zhr@tut.by>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Belarusian\n"
"X-Poedit-Country: BELARUS\n"
"X-Poedit-KeywordsList: __\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-SearchPath-0: ..\n"
#: admin.php:10
msgid "Fields"
msgstr "Палі"
#: admin.php:11
#: scb/AdminPage.php:275
msgid "Settings"
msgstr "Налады"
#: admin.php:41
#: admin.php:85
#: scb/AdminPage.php:107
msgid "Settings <strong>saved</strong>."
msgstr "Налады <strong>захаваны</strong>."
#: admin.php:47
msgid "Enable or disable editable fields"
msgstr "Уключыць ці адключыць рэдагуемыя палі"
#: admin.php:53
msgid "Field name"
msgstr "Імя поля"
#: admin.php:74
#: admin.php:106
msgid "Save changes"
msgstr "Захаваць налады"
#: admin.php:92
msgid "Rich text editor"
msgstr "RTE-рэдактар"
#: admin.php:93
msgid "Enable the WYSIWYG editor"
msgstr "Уключыць WYSIWYG рэдактар"
#: admin.php:99
msgid "Edit paragraphs"
msgstr "Рэдагаваць абзацы"
#: admin.php:100
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Рэдагаваць абзац замест цэлага паста"
#: core.php:98
msgid "Save"
msgstr "Захаваць"
#: core.php:99
msgid "Cancel"
msgstr "Адмена"
#: fields.php:42
msgid "empty"
msgstr "ачыціць"
#: fields.php:442
msgid "Post/page title"
msgstr "Загаловак паста/старонкі"
#: fields.php:448
msgid "Post/page content"
msgstr "Утрыманне паста/старонкі"
#: fields.php:454
msgid "Post/page excerpt"
msgstr "Вытрымка паста/старонкі"
#: fields.php:460
msgid "Post tags"
msgstr "Тэгі паста"
#: fields.php:466
#, fuzzy
msgid "Post terms"
msgstr "Тэгі паста"
#: fields.php:472
msgid "Post/page custom fields"
msgstr "Карыстацкія палі паста/старонкі"
#: fields.php:478
msgid "Comment text"
msgstr "Тэкст каментара"
#: fields.php:484
msgid "Text widget content"
msgstr "Утрыманне тэкставага виджета"
#: fields.php:489
msgid "Text widget title"
msgstr "Загаловак тэкставага виджета"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Front-end рэдактар"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Дазволіць вам рэдагаваць пост без выкарыстання адміністратарскай панэлі"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
#~ msgid "[none]"
#~ msgstr "[не]"
@@ -0,0 +1,175 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor 1.6.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-07 18:18+0100\n"
"PO-Revision-Date: \n"
"Last-Translator: Team Blogos <wordpress@blogos.dk>\n"
"Language-Team: Team Blogos <wordpress@blogos.dk>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2;plural=n != 1;\n"
"X-Poedit-Language: Danish\n"
"X-Poedit-Country: DENMARK\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-KeywordsList: __;_c;_e;__ngettext:1,2;__ngettext_noop:1,2;_n:1,2;_nc:1,2;_n_noop:1,2\n"
"X-Poedit-Basepath: d:\\wordpress\\plugins\\front-end-editor\n"
"X-Poedit-SearchPath-0: d:\\wordpress\\plugins\\front-end-editor\n"
#: d:\wordpress\plugins\front-end-editor/admin.php:7
msgid "Front-end Editor"
msgstr "Front-end Editor"
#: d:\wordpress\plugins\front-end-editor/admin.php:10
msgid "Fields"
msgstr "Feltnavne"
#: d:\wordpress\plugins\front-end-editor/admin.php:11
#: d:\wordpress\plugins\front-end-editor/scb/AdminPage.php:329
msgid "Settings"
msgstr "Indstillinger"
#: d:\wordpress\plugins\front-end-editor/admin.php:51
#: d:\wordpress\plugins\front-end-editor/admin.php:104
#: d:\wordpress\plugins\front-end-editor/scb/AdminPage.php:101
msgid "Settings <strong>saved</strong>."
msgstr "Indstillingerne <strong>gemt</strong>."
#: d:\wordpress\plugins\front-end-editor/admin.php:63
msgid "Enable or disable editable fields"
msgstr "Aktivér eller deaktivér redigerbare felter"
#: d:\wordpress\plugins\front-end-editor/admin.php:65
msgid "Post fields"
msgstr "Indlægsfelter"
#: d:\wordpress\plugins\front-end-editor/admin.php:66
msgid "Other fields"
msgstr "Andre felter"
#: d:\wordpress\plugins\front-end-editor/admin.php:110
msgid "Rich text editor"
msgstr "Rich text editor"
#: d:\wordpress\plugins\front-end-editor/admin.php:111
msgid "Enable the WYSIWYG editor"
msgstr "Aktivér WYSIWYG-editoren"
#: d:\wordpress\plugins\front-end-editor/admin.php:117
msgid "Edit paragraphs"
msgstr "Redigér afsnit"
#: d:\wordpress\plugins\front-end-editor/admin.php:118
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Redigér et afsnit ad gangen, i stedet for et helt indlæg"
#: d:\wordpress\plugins\front-end-editor/admin.php:124
msgid "Highlighting"
msgstr "Fremhævelser"
#: d:\wordpress\plugins\front-end-editor/admin.php:125
msgid "Highlight editable elements"
msgstr "Fremhæv redigerbare elementer"
#: d:\wordpress\plugins\front-end-editor/core.php:58
msgid "Save"
msgstr "Gem"
#: d:\wordpress\plugins\front-end-editor/core.php:59
msgid "Cancel"
msgstr "Annullér"
#: d:\wordpress\plugins\front-end-editor/core.php:90
msgid "Change Image"
msgstr "Ændr billede"
#: d:\wordpress\plugins\front-end-editor/core.php:91
msgid "Use default"
msgstr "Brug standard"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:68
msgid "Post title"
msgstr "Titel på indlæg"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:74
msgid "Post content"
msgstr "Indhold af indlæg"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:80
msgid "Post excerpt"
msgstr "Indlægsuddrag"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:86
msgid "Post category"
msgstr "Indlægskategori"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:93
msgid "Post tags"
msgstr "Indlægs-tags"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:100
msgid "Post terms"
msgstr "Indlægs-terms"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:107
msgid "Post custom fields"
msgstr "Brugerdefinerede indlægsfelter"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:113
msgid "Comment text"
msgstr "Kommentartekst"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:119
msgid "Category title"
msgstr "Titel på kategori"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:124
msgid "Tag title"
msgstr "Titel på tag"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:129
msgid "Author description"
msgstr "Forfatterbeskrivelse"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:136
msgid "Widget title"
msgstr "Widgettitel"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:141
msgid "Text widget content"
msgstr "Indhold af tekst-widgets"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:147
msgid "Site title and description"
msgstr "Sitetitel og -beskrivelse"
#: d:\wordpress\plugins\front-end-editor/front-end-editor.php:153
msgid "Theme images"
msgstr "Tema-billeder"
#: d:\wordpress\plugins\front-end-editor/fields/base.php:79
msgid "empty"
msgstr "tom"
#: d:\wordpress\plugins\front-end-editor/scb/AdminPage.php:112
#: d:\wordpress\plugins\front-end-editor/scb/AdminPage.php:123
msgid "Save Changes"
msgstr "Gem ændringer"
#~ msgid "Field name"
#~ msgstr "Feltnavn"
#~ msgid "[none]"
#~ msgstr "[ingen]"
#~ msgid "http://scribu.net/wordpress/front-end-editor"
#~ msgstr "http://scribu.net/wordpress/front-end-editor"
#~ msgid ""
#~ "Allows you to edit your posts without going through the admin interface"
#~ msgstr ""
#~ "Lader dig redigere dine indlæg uden at skulle gøre gennem "
#~ "administrationspanelet"
#~ msgid "scribu"
#~ msgstr "scribu"
#~ msgid "http://scribu.net/"
#~ msgstr "http://scribu.net/"
@@ -0,0 +1,170 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR scribu
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor 1.5a\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-11-28 16:53+0200\n"
"PO-Revision-Date: 2009-11-29 17:36+0100\n"
"Last-Translator: G F <gottfried@pips.at>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.5a) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:7
msgid "Front-end Editor"
msgstr "Front-end Editor"
#: admin.php:10
msgid "Fields"
msgstr "Felder"
#: admin.php:11
#: scb/AdminPage.php:310
msgid "Settings"
msgstr "Einstellungen"
#: admin.php:51
#: admin.php:105
#: scb/AdminPage.php:101
msgid "Settings <strong>saved</strong>."
msgstr "Einstellungen <strong>gespeichert</strong>."
#: admin.php:63
msgid "Enable or disable editable fields"
msgstr "Editierbare Felder aktivieren"
#: admin.php:66
msgid "Post fields"
msgstr "Post Felder"
#: admin.php:67
msgid "Other fields"
msgstr "Andere Felder"
#: admin.php:111
msgid "Rich text editor"
msgstr "Rich Text Editor"
#: admin.php:112
msgid "Enable the WYSIWYG editor"
msgstr "WYSIWYG-Editor aktivieren"
#: admin.php:118
msgid "Edit paragraphs"
msgstr "Absätze editieren"
#: admin.php:119
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Nur einen Absatz editieren statt den ganzen Text"
#: admin.php:125
msgid "Highlighting"
msgstr "Hervorheben"
#: admin.php:126
msgid "Highlight editable elements"
msgstr "Editierbare Elemente hervorheben"
#: core.php:96
msgid "Save"
msgstr "OK"
#: core.php:97
msgid "Cancel"
msgstr "abbrechen"
#: core.php:105
msgid "Use default"
msgstr "Standardeinsetllungen verwenden"
#: core.php:108
msgid "Change Image"
msgstr "Bild ändern"
#: core.php:273
msgid "empty"
msgstr "leer"
#: front-end-editor.php:69
msgid "Post title"
msgstr "Post Titel"
#: front-end-editor.php:75
msgid "Post content"
msgstr "Post Inhalt"
#: front-end-editor.php:81
msgid "Post excerpt"
msgstr "Post Exzerpt"
#: front-end-editor.php:87
msgid "Post tags"
msgstr "Post Tags"
#: front-end-editor.php:93
msgid "Post terms"
msgstr "Post Terms"
#: front-end-editor.php:99
msgid "Post custom fields"
msgstr "Post Custom Felder"
#: front-end-editor.php:105
msgid "Comment text"
msgstr "Kommentartext"
#: front-end-editor.php:111
msgid "Category title"
msgstr "Kategorie"
#: front-end-editor.php:116
msgid "Tag title"
msgstr "Tag"
#: front-end-editor.php:121
msgid "Author description"
msgstr "Autor"
#: front-end-editor.php:128
msgid "Text widget content"
msgstr "Text Widget Inhalt"
#: front-end-editor.php:134
msgid "Text widget title"
msgstr "Text Widget Titel"
#: front-end-editor.php:139
msgid "Site title and description"
msgstr "Titel und Beschreibung der Seite"
#: front-end-editor.php:145
msgid "Theme images"
msgstr "Themen Bilder"
#: scb/AdminPage.php:111
msgid "Save Changes"
msgstr "Änderungen speichern"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Erlaubt Posts und Seiten direkt zu ändern ohne Dashboard"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,70 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-04-07 17:11+0300\n"
"PO-Revision-Date: 2009-04-08 17:40+0200\n"
"Last-Translator: scribu <scribu@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.php:35
msgid "Settings saved"
msgstr "Opciones guardadas"
#: admin.php:41
msgid "Enable or disable editable fields"
msgstr "Active o desactive los campos editables"
#: admin.php:47
msgid "Field name"
msgstr "Campos"
#: admin.php:64
#: admin.php:77
msgid "Save changes"
msgstr "Guardar cambios"
#: admin.php:69
msgid "Rich text editor"
msgstr "Editor de texto visual"
#: admin.php:70
msgid "Enable the WYSIWYG editor"
msgstr "Activar editor WYSIWYG"
#: admin.php:76
msgid "Settings"
msgstr "Opciones"
#: front-end-editor.php:106
msgid "Save"
msgstr "Guardar"
#: front-end-editor.php:107
msgid "Cancel"
msgstr "Cancelar"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Front-end Editor"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
# Descripci&oacute;n de una extensi&oacute;n
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Permite editar sus entradas y p&aacute;ginas sin necesidad de entrar en la administraci&oacute;n de Wordpress"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,70 @@
"Project-Id-Version: Front-end Editor 0.8\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-04-07 17:11+0300\n"
"PO-Revision-Date: 2009-04-08 11:23-0300\n"
"Last-Translator: Esteban <etruel@gmail.com>\n"
"Language-Team: ROMANIAN <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Spanish\n"
"X-Poedit-Country: SPAIN\n"
#: admin.php:35
msgid "Settings saved"
msgstr "Opciones guardadas"
#: admin.php:41
msgid "Enable or disable editable fields"
msgstr "Active o desactive los campos editables"
#: admin.php:47
msgid "Field name"
msgstr "Campos"
#: admin.php:64
#: admin.php:77
msgid "Save changes"
msgstr "Guardar cambios"
#: admin.php:69
msgid "Rich text editor"
msgstr "Editor de texto visual"
#: admin.php:70
msgid "Enable the WYSIWYG editor"
msgstr "Activar editor WYSIWYG"
#: admin.php:76
msgid "Settings"
msgstr "Opciones"
#: front-end-editor.php:106
msgid "Save"
msgstr "Guardar"
#: front-end-editor.php:107
msgid "Cancel"
msgstr "Cancelar"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Front-end Editor"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
# Descripci&oacute;n de una extensi&oacute;n
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Permite editar sus entradas y p&aacute;ginas sin necesidad de entrar en la administraci&oacute;n de Wordpress"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,156 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR scribu
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor 1.4 / Estonian\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-11-06 16:58+0200\n"
"PO-Revision-Date: 2009-11-11 21:31+0200\n"
"Last-Translator: \n"
"Language-Team: Aivar Luht <aivarluht@planet.ee>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Estonian\n"
"X-Poedit-Country: ESTONIA\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.4) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:9
msgid "Front-end Editor"
msgstr "Front-end Editor"
#: admin.php:12
msgid "Fields"
msgstr "Väljad"
#: admin.php:13
#: scb/AdminPage.php:338
msgid "Settings"
msgstr "Seaded"
#: admin.php:44
#: admin.php:88
#: scb/AdminPage.php:105
msgid "Settings <strong>saved</strong>."
msgstr "Seaded <strong>salvestatud</strong>."
#: admin.php:50
msgid "Enable or disable editable fields"
msgstr "Luba või keela muudetavad väljad"
#: admin.php:56
msgid "Field name"
msgstr "Välja nimi"
#: admin.php:95
msgid "Rich text editor"
msgstr "Visuaalredaktor"
#: admin.php:96
msgid "Enable the WYSIWYG editor"
msgstr "Aktiveeri WYSIWYG redaktor"
#: admin.php:102
msgid "Edit paragraphs"
msgstr "Lõikude toimetamine"
#: admin.php:103
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Toimeta üks lõik korraga, mitte kogu postitus"
#: admin.php:109
msgid "Highlighting"
msgstr "Esile tõstmine"
#: admin.php:110
msgid "Highlight editable elements"
msgstr "Tõsta muudetavad osad esile"
#: core.php:146
msgid "Save"
msgstr "Salvesta"
#: core.php:147
msgid "Cancel"
msgstr "Tühista"
#: core.php:272
msgid "empty"
msgstr "tühjenda"
#: fields.php:591
msgid "Post title"
msgstr "Postituse pealkiri"
#: fields.php:597
msgid "Post content"
msgstr "Postituse sisu"
#: fields.php:603
msgid "Post excerpt"
msgstr "Postituse väljavõte"
#: fields.php:609
msgid "Post tags"
msgstr "Postituse sildid"
#: fields.php:615
msgid "Post terms"
msgstr "Postituse tingimused"
#: fields.php:621
msgid "Post custom fields"
msgstr "Postituse lisaväljad"
#: fields.php:627
msgid "Comment text"
msgstr "Kommentaari tekst"
#: fields.php:633
msgid "Category title"
msgstr "Rubriigi pealkiri"
#: fields.php:638
msgid "Tag title"
msgstr "Sildi pealkiri"
#: fields.php:643
msgid "Author description"
msgstr "Autori kirjeldus"
#: fields.php:650
msgid "Text widget content"
msgstr "Tekstmooduli sisu"
#: fields.php:656
msgid "Text widget title"
msgstr "Tekstmooduli pealkiri"
#: fields.php:661
msgid "Site title and description"
msgstr "Veebilehe pealkiri ja kirjeldus"
#: scb/AdminPage.php:163
msgid "Save Changes"
msgstr "Salvesta Muudatused"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Lubab postituste toimetamist haldusliidesest läbi käimata"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,203 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor v0.8\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-04-16 17:41+0300\n"
"PO-Revision-Date: 2009-04-16 17:42+0200\n"
"Last-Translator: scribu <scribu@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Poedit-Language: French\n"
"X-Poedit-Country: FRANCE\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
"X-Poedit-Basepath: ../\n"
"X-Poedit-Bookmarks: \n"
"X-Poedit-SearchPath-0: .\n"
"X-Textdomain-Support: yes"
#: admin.php:64
#@ front-end-editor
msgid "Enable or disable editable fields"
msgstr "Activer ou désactiver les champs éditables"
#: admin.php:111
#@ front-end-editor
msgid "Enable the WYSIWYG editor"
msgstr "Activer l'éditeur WYSIWYG"
#: admin.php:12
#: scb/AdminPage.php:329
#@ front-end-editor
msgid "Settings"
msgstr "Réglages"
#: front-end-editor.php:91
#@ front-end-editor
msgid "Post tags"
msgstr "Tags du billet"
#: front-end-editor.php:118
#@ front-end-editor
msgid "Comment text"
msgstr "Commentaires"
#: front-end-editor.php:146
#@ front-end-editor
msgid "Text widget content"
msgstr "Contenu des widgets texte"
#: core.php:59
#@ front-end-editor
msgid "Save"
msgstr "Sauvegarder"
#: core.php:60
#@ front-end-editor
msgid "Cancel"
msgstr "Annuler"
#: admin.php:11
#@ front-end-editor
msgid "Fields"
msgstr "Champs"
#: scb/AdminPage.php:272
#@ front-end-editor
msgid "Settings <strong>saved</strong>."
msgstr "Réglages <strong>sauvegardés</strong>."
#: admin.php:117
#@ front-end-editor
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Éditer paragraphe par paragraphe plutôt que le contenu entier du billet."
#: admin.php:8
#@ front-end-editor
msgid "Front-end Editor"
msgstr ""
#: fields/base.php:82
#@ front-end-editor
msgid "empty"
msgstr "vide "
#: front-end-editor.php:98
#@ front-end-editor
msgid "Post terms"
msgstr "Termes du billet "
#: front-end-editor.php:134
#@ front-end-editor
msgid "Author description"
msgstr "Description de l'auteur "
#: scb/AdminPage.php:158
#: scb/AdminPage.php:169
#@ front-end-editor
msgid "Save Changes"
msgstr "Sauvegarder les modifications"
#: admin.php:129
#@ front-end-editor
msgid "Highlight editable elements"
msgstr "Surlignage des éléments éditables"
#: front-end-editor.php:152
#@ front-end-editor
msgid "Site title and description"
msgstr "Titre du site et description"
#: front-end-editor.php:66
#@ front-end-editor
msgid "Post title"
msgstr "Titre du billet"
#: front-end-editor.php:72
#@ front-end-editor
msgid "Post content"
msgstr "Contenu du billet"
#: front-end-editor.php:78
#@ front-end-editor
msgid "Post excerpt"
msgstr "Extrait du billet"
#: front-end-editor.php:105
#@ front-end-editor
msgid "Post custom fields"
msgstr "Champs personnalisés du billet"
#: front-end-editor.php:124
#@ front-end-editor
msgid "Category title"
msgstr "Titre de catégorie"
#: front-end-editor.php:129
#@ front-end-editor
msgid "Tag title"
msgstr "Titre de tag"
#: admin.php:66
#@ front-end-editor
msgid "Post fields"
msgstr "Champs des billets"
#: admin.php:67
#@ front-end-editor
msgid "Other fields"
msgstr "Autres champs"
#: core.php:110
#@ front-end-editor
msgid "Change Image"
msgstr "Changer d'image"
#: front-end-editor.php:164
#@ front-end-editor
msgid "Theme images"
msgstr "Images du thème"
#: front-end-editor.php:141
#@ front-end-editor
msgid "Widget title"
msgstr "Titre de widget"
#: admin.php:123
#@ front-end-editor
msgid "Reset the post date on each edit"
msgstr "Réinitialiser la date de billet pour chaque édition "
#: core.php:111
#@ front-end-editor
msgid "Clear"
msgstr "Nettoyer"
#: front-end-editor.php:84
#@ front-end-editor
msgid "Post categories"
msgstr "Catégories de billet"
#: front-end-editor.php:111
#@ front-end-editor
msgid "Post thumbnail"
msgstr "Miniature de billet "
#: front-end-editor.php:158
#@ front-end-editor
msgid "Site options"
msgstr "Options du site"
#: admin.php:134
#@ front-end-editor
msgid "Display a tooltip above editable elements"
msgstr "Afficher une info bulle au dessus des éléments éditables"
#: core.php:74
#@ front-end-editor
msgid "Double-click to edit"
msgstr "Double cliquer pour éditer"
@@ -0,0 +1,175 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor Georgian\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2010-01-01 19:11+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Levani <levani9191@gmail.com>\n"
"Language-Team: Georgianisation.site88.net <levani9191@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: Georgian\n"
"X-Poedit-Country: GEORGIA\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.6) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:7
msgid "Front-end Editor"
msgstr "Front-end Editor"
#: admin.php:10
msgid "Fields"
msgstr "ველები"
#: admin.php:11
#: scb/AdminPage.php:314
msgid "Settings"
msgstr "პარამეტრები"
#: admin.php:51
#: admin.php:104
#: scb/AdminPage.php:101
msgid "Settings <strong>saved</strong>."
msgstr "პარამეტრები <strong>დამახსოვრებულია</strong>."
#: admin.php:63
msgid "Enable or disable editable fields"
msgstr "რედაქტირებადი ველების ჩართვა გამორთვა"
#: admin.php:65
msgid "Post fields"
msgstr "პოსტის ველები"
#: admin.php:66
msgid "Other fields"
msgstr "სხვა ველები"
#: admin.php:110
msgid "Rich text editor"
msgstr "ტექსტური რედაქტორი"
#: admin.php:111
msgid "Enable the WYSIWYG editor"
msgstr "WYSIWYG რედაქტორის ჩართვა"
#: admin.php:117
msgid "Edit paragraphs"
msgstr "პარაგრაფების რედაქტირება"
#: admin.php:118
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "ერთ ჯერზე შეცვალე მხოლოდ ერთი პარაგრაფი, მთელი პოსტის ნაცვლად."
#: admin.php:124
msgid "Highlighting"
msgstr "გამოყოფა"
#: admin.php:125
msgid "Highlight editable elements"
msgstr "გამოყავი რედაქტირებადი ველები"
#: core.php:58
msgid "Save"
msgstr "დამახსოვრება"
#: core.php:59
msgid "Cancel"
msgstr "გაუქმება"
#: core.php:90
msgid "Change Image"
msgstr "სურათის შეცვლა"
#: core.php:91
msgid "Use default"
msgstr "სტანდარტულის გამოყენება"
#: fields/base.php:79
msgid "empty"
msgstr "ცარიელი"
#: front-end-editor.php:68
msgid "Post title"
msgstr "პოსტის სათაური"
#: front-end-editor.php:74
msgid "Post content"
msgstr "პოსტის შენაარსი"
#: front-end-editor.php:80
msgid "Post excerpt"
msgstr "პოსტის ამონაწერი"
#: front-end-editor.php:86
msgid "Post category"
msgstr "პოსტის კატეგორია"
#: front-end-editor.php:93
msgid "Post tags"
msgstr "პოსტის ტეგები"
#: front-end-editor.php:100
msgid "Post terms"
msgstr "პოსტის term-ები."
#: front-end-editor.php:107
msgid "Post custom fields"
msgstr "პოსტის დამატებითი ველები"
#: front-end-editor.php:113
msgid "Comment text"
msgstr "კომენტარის ტექსტი"
#: front-end-editor.php:119
msgid "Category title"
msgstr "კატეგორიის სათაური"
#: front-end-editor.php:124
msgid "Tag title"
msgstr "ტეგის სათაური"
#: front-end-editor.php:129
msgid "Author description"
msgstr "ავტორის აღწერა"
#: front-end-editor.php:136
msgid "Widget title"
msgstr "ვიდგეტის სათაური"
#: front-end-editor.php:141
msgid "Text widget content"
msgstr "ტექსტური ვიდგეტის შინაარსი"
#: front-end-editor.php:147
msgid "Site title and description"
msgstr "საიტის სათაური და აღწერა"
#: front-end-editor.php:153
msgid "Theme images"
msgstr "დიზაინის სურათები"
#: scb/AdminPage.php:111
msgid "Save Changes"
msgstr "ცვლილებების დამახსოვრება"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "საშუალებას გაძლევთ განახორციელოთ ცვლილებები ადმინ პანელში შეუსვლელად"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
#~ msgid "Field name"
#~ msgstr "ველის სახელი"
@@ -0,0 +1,195 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor in italiano\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2010-04-01 04:57+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Gianni Diurno (aka gidibao) <gidibao[at]gmail[dot]com>\n"
"Language-Team: Gianni Diurno | gidibao.net <gidibao[at]gmail[dot]com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Italian\n"
"X-Poedit-Country: ITALY\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.8a5) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:8
msgid "Front-end Editor"
msgstr "Front-end Editor"
#: admin.php:11
msgid "Fields"
msgstr "Campi"
#: admin.php:12
#: scb/AdminPage.php:329
msgid "Settings"
msgstr "Impostazioni"
#: admin.php:64
msgid "Enable or disable editable fields"
msgstr "Attiva o disattiva i campi modificabili"
#: admin.php:66
msgid "Post fields"
msgstr "Campi articolo"
#: admin.php:67
msgid "Other fields"
msgstr "Altri campi"
#: admin.php:111
msgid "Enable the WYSIWYG editor"
msgstr "Attiva l'editor WYSIWYG"
#: admin.php:117
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Modifica un paragrafo alla volta invece di operare su tutto l'articolo"
#: admin.php:123
msgid "Reset the post date on each edit"
msgstr "Ripristina la data dell'articolo ad ogni modifica"
#: admin.php:129
msgid "Highlight editable elements"
msgstr "Evidenzia gli elementi modificabili"
#: admin.php:134
msgid "Display a tooltip above editable elements"
msgstr "Mostra un tooltip sopra gli elementi modificabili"
#: core.php:59
msgid "Save"
msgstr "Salva"
#: core.php:60
msgid "Cancel"
msgstr "Annulla"
#: core.php:74
msgid "Double-click to edit"
msgstr "Doppio click per modificare"
#: core.php:110
msgid "Change Image"
msgstr "Cambia immagine"
#: core.php:111
msgid "Clear"
msgstr "Svuota"
#: fields/base.php:82
msgid "empty"
msgstr "vuoto"
#: front-end-editor.php:66
msgid "Post title"
msgstr "Titolo articolo"
#: front-end-editor.php:72
msgid "Post content"
msgstr "Contenuto articolo"
#: front-end-editor.php:78
msgid "Post excerpt"
msgstr "Riassunto articolo"
#: front-end-editor.php:84
msgid "Post categories"
msgstr "Categorie articolo"
#: front-end-editor.php:91
msgid "Post tags"
msgstr "Tag articolo"
#: front-end-editor.php:98
msgid "Post terms"
msgstr "Termini articolo"
#: front-end-editor.php:105
msgid "Post custom fields"
msgstr "Campi personalizzati articolo"
#: front-end-editor.php:111
msgid "Post thumbnail"
msgstr "Miniatura articolo"
#: front-end-editor.php:118
msgid "Comment text"
msgstr "Testo commenti"
#: front-end-editor.php:124
msgid "Category title"
msgstr "Titolo categoria"
#: front-end-editor.php:129
msgid "Tag title"
msgstr "Titolo tag"
#: front-end-editor.php:134
msgid "Author description"
msgstr "Descrizione autore"
#: front-end-editor.php:141
msgid "Widget title"
msgstr "Titolo widget"
#: front-end-editor.php:146
msgid "Text widget content"
msgstr "Contenuto widget di testo"
#: front-end-editor.php:152
msgid "Site title and description"
msgstr "Nome e descrizione del sito"
#: front-end-editor.php:158
msgid "Site options"
msgstr "Opzioni sito"
#: front-end-editor.php:164
msgid "Theme images"
msgstr "Immagini tema"
#: scb/AdminPage.php:158
#: scb/AdminPage.php:169
msgid "Save Changes"
msgstr "Salva le modifiche"
#: scb/AdminPage.php:272
msgid "Settings <strong>saved</strong>."
msgstr "Le impostazioni sono state <strong>salvate</strong>."
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Ti permette la modifica dei tuoi articoli senza utilizzare l'interfaccia di amministrazione"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
#~ msgid "Rich text editor"
#~ msgstr "Editor avanzato"
#~ msgid "Edit paragraphs"
#~ msgstr "Modifica paragrafi"
#~ msgid "Date reset"
#~ msgstr "Ripristina la data"
#~ msgid "Highlighting"
#~ msgstr "Evidenziatore"
#~ msgid "Use default"
#~ msgstr "Utilizza predefinito"
#~ msgid "Field name"
#~ msgstr "Nome campo"
#~ msgid "[none]"
#~ msgstr "[nessuno]"
#~ msgid "Install now"
#~ msgstr "Installa subito"
@@ -0,0 +1,98 @@
"Project-Id-Version: front end editor\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-04-12 13:43+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: tapsu <tapsu@fiptips.com>\n"
"Language-Team: kzh <kzh.v.soonic@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Japanese\n"
"X-Poedit-Country: JAPAN\n"
"X-Poedit-SourceCharset: utf-8\n"
#: admin.php:27
msgid "Settings saved"
msgstr "設定は保存されました"
#: admin.php:33
msgid "Enable or disable editable fields"
msgstr "編集できるフィールドを切り替えます"
#: admin.php:39
msgid "Field name"
msgstr "フィールド名"
#: admin.php:56
#: admin.php:69
msgid "Save changes"
msgstr "設定を更新する"
#: admin.php:61
msgid "Rich text editor"
msgstr "リッチテキストエディタ"
#: admin.php:62
msgid "Enable the WYSIWYG editor"
msgstr "WYSIWYGエディタを有効にする"
#: admin.php:68
msgid "Settings"
msgstr "設定"
#: fields.php:211
msgid "Post/page title"
msgstr "投稿またはページのタイトル"
#: fields.php:216
msgid "Post/page content"
msgstr "投稿またはページの本文"
#: fields.php:221
msgid "Post tags"
msgstr "タグ"
#: fields.php:226
msgid "Post/page custom fields"
msgstr "カスタムフィールド"
#: fields.php:231
msgid "Comment text"
msgstr "コメント本文"
#: fields.php:236
msgid "Text widget content"
msgstr "テキストウィジェットの内容"
#: fields.php:240
msgid "Text widget title"
msgstr "テキストウィジェットタイトル"
#: front-end-editor.php:114
msgid "Save"
msgstr "保存"
#: front-end-editor.php:115
msgid "Cancel"
msgstr "キャンセル"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Front-end Editor"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "管理画面を使わずに、投稿を直接編集できます"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,77 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor v0.8.4\n"
"PO-Revision-Date: 2009-04-10 23:37+0200\n"
"Last-Translator: admin <ron@fr-fanatic.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Poedit-Language: Dutch\n"
"X-Poedit-Country: NETHERLANDS\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;__ngettext_noop:1,2;_c\n"
"X-Poedit-Basepath: ../\n"
"X-Poedit-SearchPath-0: ."
#: admin.php:27
msgid "Settings saved"
msgstr "Instellingen opgeslagen"
#: admin.php:33
msgid "Enable or disable editable fields"
msgstr "Inschakelen of uitschakelen bewerkbare velden"
#: admin.php:39
msgid "Field name"
msgstr "Veldnaam"
#: admin.php:56
#: admin.php:69
msgid "Save changes"
msgstr "Sla de wijzigingen op"
#: admin.php:61
msgid "Rich text editor"
msgstr "Rich text editor"
#: admin.php:62
msgid "Enable the WYSIWYG editor"
msgstr "Schakel de WYSIWYG-editor in"
#: admin.php:68
msgid "Settings"
msgstr "Instellingen"
#: fields.php:176
msgid "Post/page title"
msgstr "Artikel/pagina titel"
#: fields.php:181
msgid "Post/page content"
msgstr "Artikel/pagina inhoud"
#: fields.php:186
msgid "Post tags"
msgstr "Artikel tags"
#: fields.php:191
msgid "Comment text"
msgstr "Commentaar tekst"
#: fields.php:196
msgid "Text widget content"
msgstr "Tekst widget inhoud"
#: fields.php:200
msgid "Text widget title"
msgstr "Tekst widget titel"
#: front-end-editor.php:111
msgid "Save"
msgstr "Bewaar"
#: front-end-editor.php:112
msgid "Cancel"
msgstr "Annuleren"
@@ -0,0 +1,53 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor v0.8.2\n"
"PO-Revision-Date: 2009-04-09 13:40-0500\n"
"Last-Translator: admin <john.ivar.myrstad@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Poedit-Language: Norwegian-Nynorsk\n"
"X-Poedit-Country: NORWAY\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;__ngettext_noop:1,2;_c\n"
"X-Poedit-Basepath: ../\n"
"X-Poedit-SearchPath-0: ."
#: admin.php:27
msgid "Settings saved"
msgstr "Innstillinger lagret"
#: admin.php:33
msgid "Enable or disable editable fields"
msgstr "Aktivere eller deaktivere redigerbart felt"
#: admin.php:39
msgid "Field name"
msgstr "Feltnavn"
#: admin.php:56
#: admin.php:69
msgid "Save changes"
msgstr "Lagre endringer"
#: admin.php:61
msgid "Rich text editor"
msgstr "Rik tekst-editor"
#: admin.php:62
msgid "Enable the WYSIWYG editor"
msgstr "Aktiver WYSIWYG-editor"
#: admin.php:68
msgid "Settings"
msgstr "Innstillinger"
#: front-end-editor.php:109
msgid "Save"
msgstr "Lagre"
#: front-end-editor.php:110
msgid "Cancel"
msgstr "Avbryt"
@@ -0,0 +1,131 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-08-25 19:18+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: BoreS <BoreSer@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Russian\n"
"X-Poedit-Country: RUSSIAN FEDERATION\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.2b) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:9
msgid "Front-end Editor"
msgstr "Edytor bezpośredni"
#: admin.php:12
msgid "Fields"
msgstr "Pola"
#: admin.php:13
#: scb/AdminPage.php:338
msgid "Settings"
msgstr "Ustawienia"
#: admin.php:43
#: admin.php:87
#: scb/AdminPage.php:105
msgid "Settings <strong>saved</strong>."
msgstr "Ustawienia <strong>zapisane</strong>."
#: admin.php:49
msgid "Enable or disable editable fields"
msgstr "Włącz lub wyłącz edytowalne pola"
#: admin.php:55
msgid "Field name"
msgstr "Nazw apola"
#: admin.php:94
msgid "Rich text editor"
msgstr "Pełny edytor tekstowy"
#: admin.php:95
msgid "Enable the WYSIWYG editor"
msgstr "Włącz edytor WYSIWYG"
#: admin.php:101
msgid "Edit paragraphs"
msgstr "Edytuj paragrafy"
#: admin.php:102
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Jednorazowo edytuj jeden paragraf zamiast całego wpisu"
#: core.php:109
msgid "Save"
msgstr "Zapisz"
#: core.php:110
msgid "Cancel"
msgstr "Anuluj"
#: core.php:235
msgid "empty"
msgstr "pusty"
#: fields.php:453
msgid "Post/page title"
msgstr "Tytuł strony/wpisu"
#: fields.php:459
msgid "Post/page content"
msgstr "Treść strony/wpisu"
#: fields.php:465
msgid "Post/page excerpt"
msgstr "Opis skrócony strony/wpisu"
#: fields.php:471
msgid "Post tags"
msgstr "Tagi wpisu"
#: fields.php:477
msgid "Post terms"
msgstr "Regulamin wpisu"
#: fields.php:483
msgid "Post/page custom fields"
msgstr "Dodatkowe pola wpisu/strony"
#: fields.php:489
msgid "Comment text"
msgstr "Treść komentarzy"
#: fields.php:495
msgid "Author description"
msgstr "Opis autora"
#: fields.php:502
msgid "Text widget content"
msgstr "Treść widgetów tekstowych"
#: fields.php:508
msgid "Text widget title"
msgstr "Tytuł widgetów tekstowych"
#: scb/AdminPage.php:163
msgid "Save Changes"
msgstr "Zapisz zmiany"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://www.expromo.pl"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Pozwala na edycję stron i wpisów bez przechodzenia do panelu administracji."
#. Author of an extension
msgid "scribu"
msgstr "expromo"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://www.expromo.pl"
@@ -0,0 +1,125 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-08-15 15:41+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Fernanda Foertter <foertter@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.php:10
msgid "Fields"
msgstr "Campos "
#: admin.php:11
#: scb/AdminPage.php:275
msgid "Settings"
msgstr "Opçoes"
#: admin.php:41
#: admin.php:85
#: scb/AdminPage.php:107
msgid "Settings <strong>saved</strong>."
msgstr "Opcões <strong>guardadas</strong>."
#: admin.php:47
msgid "Enable or disable editable fields"
msgstr "Ativar ou desativar os campos editaveis"
#: admin.php:53
msgid "Field name"
msgstr "Campos"
#: admin.php:74
#: admin.php:106
msgid "Save changes"
msgstr "Guardar mudanças"
#: admin.php:92
msgid "Rich text editor"
msgstr "Editor de texto visual"
#: admin.php:93
msgid "Enable the WYSIWYG editor"
msgstr "Ativar editor WYSIWYG"
#: admin.php:99
msgid "Edit paragraphs"
msgstr "Editar Paragrafos"
#: admin.php:100
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Editar cada paragrafo de cada vez, nao somente o texto inteiro."
#: core.php:98
msgid "Save"
msgstr "Guardar"
#: core.php:99
msgid "Cancel"
msgstr "Cancelar"
#: fields.php:42
msgid "empty"
msgstr "vazio"
#: fields.php:442
msgid "Post/page title"
msgstr "Titulo do(a) post/pagina"
#: fields.php:448
msgid "Post/page content"
msgstr "Conteùdo do(a) post/pagina"
#: fields.php:454
msgid "Post/page excerpt"
msgstr "Trecho do(a) post/pagina"
#: fields.php:460
msgid "Post tags"
msgstr "Tags do Post"
#: fields.php:466
msgid "Post terms"
msgstr "Categorias do Post"
#: fields.php:472
msgid "Post/page custom fields"
msgstr "Campos costumizados do(a) post/pagina"
#: fields.php:478
msgid "Comment text"
msgstr "Texto de comentarios"
#: fields.php:484
msgid "Text widget content"
msgstr "Conteùdo do widget de texto"
#: fields.php:489
msgid "Text widget title"
msgstr "Titulo do widget de texto"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Editor de Frente"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
# Descripci&oacute;n de una extensi&oacute;n
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Permite editar o texto em suas paginas sem entrar no painel de administracão do Wordpress"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,198 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR scribu
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor 0.7.0.1\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2010-04-01 04:57+0300\n"
"PO-Revision-Date: 2010-04-01 04:58+0200\n"
"Last-Translator: scribu <scribu@gmail.com>\n"
"Language-Team: ROMANIAN <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.8a5) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:8
msgid "Front-end Editor"
msgstr ""
#: admin.php:11
msgid "Fields"
msgstr "Câmpuri"
#: admin.php:12
#: scb/AdminPage.php:329
msgid "Settings"
msgstr "Setări"
#: admin.php:64
msgid "Enable or disable editable fields"
msgstr "Activează sau dezactivează câmpurile editabile"
#: admin.php:66
msgid "Post fields"
msgstr "Câmpuri articol"
#: admin.php:67
msgid "Other fields"
msgstr "Alte câmpuri"
#: admin.php:111
msgid "Enable the WYSIWYG editor"
msgstr "Activează editorul WYSIWYG"
#: admin.php:117
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Editează câte un singur paragraf, în loc de articolul întreg"
#: admin.php:123
msgid "Reset the post date on each edit"
msgstr "Resetează data postului la fiecare editare"
#: admin.php:129
msgid "Highlight editable elements"
msgstr "Scoate în evidență elementele editabile"
#: admin.php:134
msgid "Display a tooltip above editable elements"
msgstr "Afișează un tooltip deasupra elementelor editabile"
#: core.php:59
msgid "Save"
msgstr "Salvează"
#: core.php:60
msgid "Cancel"
msgstr "Anulează"
#: core.php:74
msgid "Double-click to edit"
msgstr "Fă dublu-click pentru a edita"
#: core.php:110
msgid "Change Image"
msgstr "Schimbă imaginea"
#: core.php:111
msgid "Clear"
msgstr "Golește"
#: fields/base.php:82
msgid "empty"
msgstr "gol"
#: front-end-editor.php:66
msgid "Post title"
msgstr "Titlu articol"
#: front-end-editor.php:72
msgid "Post content"
msgstr "Conținut articol"
#: front-end-editor.php:78
msgid "Post excerpt"
msgstr "Extras articol"
#: front-end-editor.php:84
msgid "Post categories"
msgstr "Categorii articol"
#: front-end-editor.php:91
msgid "Post tags"
msgstr "Etichete articol"
#: front-end-editor.php:98
msgid "Post terms"
msgstr "Termeni articol"
#: front-end-editor.php:105
msgid "Post custom fields"
msgstr "Câmpuri personalizate articol"
#: front-end-editor.php:111
msgid "Post thumbnail"
msgstr "Miniatură articol"
#: front-end-editor.php:118
msgid "Comment text"
msgstr "Text comentariu"
#: front-end-editor.php:124
msgid "Category title"
msgstr "Titlu categorie"
#: front-end-editor.php:129
msgid "Tag title"
msgstr "Titlu etichetă"
#: front-end-editor.php:134
msgid "Author description"
msgstr "Descriere autor"
#: front-end-editor.php:141
msgid "Widget title"
msgstr "Titlu widget"
#: front-end-editor.php:146
msgid "Text widget content"
msgstr "Conținut widget text"
#: front-end-editor.php:152
msgid "Site title and description"
msgstr "Titlu și descriere site"
#: front-end-editor.php:158
msgid "Site options"
msgstr "Setări site"
#: front-end-editor.php:164
msgid "Theme images"
msgstr "Imagini temă"
#: scb/AdminPage.php:158
#: scb/AdminPage.php:169
msgid "Save Changes"
msgstr "Salvează schimbările"
#: scb/AdminPage.php:272
msgid "Settings <strong>saved</strong>."
msgstr "Setări <strong>salvate</strong>."
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr ""
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Permite editarea articolelor fără a merge în interfața de administrare"
#. Author of an extension
msgid "scribu"
msgstr ""
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr ""
#~ msgid "Rich text editor"
#~ msgstr "Editor de text avansat"
#~ msgid "Edit paragraphs"
#~ msgstr "Editează paragrafe"
#~ msgid "Date reset"
#~ msgstr "Resetare dată"
#~ msgid "Highlighting"
#~ msgstr "Evidențiere"
#~ msgid "Use default"
#~ msgstr "Folosește imaginea implicită"
#~ msgid "Field name"
#~ msgstr "Nume câmp"
#~ msgid "Save changes"
#~ msgstr "Salvează schimbările"
#~ msgid "[none]"
#~ msgstr "[niciuna]"
@@ -0,0 +1,131 @@
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-08-25 19:18+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: BoreS <BoreSer@gmail.com>\n"
"Language-Team: BoreS <BoreSer@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Russian\n"
"X-Poedit-Country: RUSSIAN FEDERATION\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.2b) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:9
msgid "Front-end Editor"
msgstr "Front-end Editor"
#: admin.php:12
msgid "Fields"
msgstr "Поля"
#: admin.php:13
#: scb/AdminPage.php:338
msgid "Settings"
msgstr "Настройки"
#: admin.php:43
#: admin.php:87
#: scb/AdminPage.php:105
msgid "Settings <strong>saved</strong>."
msgstr "Настройки <strong>сохранены</strong>."
#: admin.php:49
msgid "Enable or disable editable fields"
msgstr "Включить или отключить редактируемые поля"
#: admin.php:55
msgid "Field name"
msgstr "Название поля"
#: admin.php:94
msgid "Rich text editor"
msgstr "Расширенный редактор текста"
#: admin.php:95
msgid "Enable the WYSIWYG editor"
msgstr "Включить визуальный редактор"
#: admin.php:101
msgid "Edit paragraphs"
msgstr "Редактирвать абзацы"
#: admin.php:102
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Редактировать абзац вместо целого поста"
#: core.php:109
msgid "Save"
msgstr "Сохранить"
#: core.php:110
msgid "Cancel"
msgstr "Отменить"
#: core.php:235
msgid "empty"
msgstr "пусто"
#: fields.php:453
msgid "Post/page title"
msgstr "Заголовок сообщения/страницы"
#: fields.php:459
msgid "Post/page content"
msgstr "Содержимое сообщения/страницы"
#: fields.php:465
msgid "Post/page excerpt"
msgstr "Выдержка сообщения/страницы"
#: fields.php:471
msgid "Post tags"
msgstr "Метки сообщения"
#: fields.php:477
msgid "Post terms"
msgstr "Термины сообщения"
#: fields.php:483
msgid "Post/page custom fields"
msgstr "Настраиваемые поля сообщения/страницы"
#: fields.php:489
msgid "Comment text"
msgstr "Текст комментария"
#: fields.php:495
msgid "Author description"
msgstr "Описание автора"
#: fields.php:502
msgid "Text widget content"
msgstr "Содержимое текстового виджета"
#: fields.php:508
msgid "Text widget title"
msgstr "Заголовок текстового виджета"
#: scb/AdminPage.php:163
msgid "Save Changes"
msgstr "Сохранить изменения"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Позволяет редактировать сообщения без использования администраторской панели"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,119 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR scribu
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
"Project-Id-Version: Front-end Editor 1.0a\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-06-14 18:58+0300\n"
"PO-Revision-Date: 2009-06-16 19:40+0100\n"
"Last-Translator: Müfit Kiper <kontakt@kitkonsult.se>\n"
"Language-Team: Swedish - Svenska <kontakt@kitkonsult.se>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Swedish\n"
"X-Poedit-Country: SWEDEN\n"
"X-Poedit-SourceCharset: utf-8\n"
#: admin.php:32
msgid "Settings <strong>saved</strong>."
msgstr "Inställningar <strong>sparade</strong>."
#: admin.php:38
msgid "Enable or disable editable fields"
msgstr "Aktivera eller inaktivera redigerbara fält"
#: admin.php:44
msgid "Field name"
msgstr "Fältnamn"
#: admin.php:65
#: admin.php:85
msgid "Save changes"
msgstr "Spara ändringar"
#: admin.php:67
msgid "Settings"
msgstr "Inställningar"
#: admin.php:71
msgid "Rich text editor"
msgstr "Avancerad textredigerare"
#: admin.php:72
msgid "Enable the WYSIWYG editor"
msgstr "Aktivera WYSIWYG-redigeraren"
#: admin.php:78
msgid "Edit paragraphs"
msgstr "Redigera stycken (paragrafer)"
#: admin.php:79
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Redigera ett stycke (paragraf) åt gången istället för hela inlägget"
#: core.php:98
msgid "Save"
msgstr "Spara"
#: core.php:99
msgid "Cancel"
msgstr "Avbryt"
#: fields.php:391
msgid "Post/page title"
msgstr "Sidans/Inläggets rubrik"
#: fields.php:397
msgid "Post/page content"
msgstr "Sidans/Inläggets brödtext"
#: fields.php:403
msgid "Post/page excerpt"
msgstr "Sidans/Inläggets ingress"
#: fields.php:409
msgid "Post tags"
msgstr "Sidans etiketter"
#: fields.php:415
msgid "Post/page custom fields"
msgstr "Sidans/Inläggets speciella fält"
#: fields.php:421
msgid "Comment text"
msgstr "Kommentartext"
#: fields.php:427
msgid "Text widget content"
msgstr "Text widgets innehåll"
#: fields.php:432
msgid "Text widget title"
msgstr "Text widgets rubrik"
#: inc/scb-check.php:45
msgid "Install now"
msgstr "Installera nu"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Front-end Editor"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Gör det möjligt att redigera dina inlägg och sidor utan att behöva gå bakvägen via administrationsgränssnittet"
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,121 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2009-07-04 19:18+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: scribu <scribu@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: admin.php:10
msgid "Fields"
msgstr "Alanlar"
#: admin.php:11
#: inc/scb/AdminPage.php:275
msgid "Settings"
msgstr "Ayarlar"
#: admin.php:41
#: admin.php:85
#: inc/scb/AdminPage.php:107
msgid "Settings <strong>saved</strong>."
msgstr "Ayarlar <strong>kaydedildi</strong>."
#: admin.php:47
msgid "Enable or disable editable fields"
msgstr "Düzenlenebilecek alanları etkinleştir veya pasifleştir"
#: admin.php:53
msgid "Field name"
msgstr "Alan adı"
#: admin.php:74
#: admin.php:106
msgid "Save changes"
msgstr "Değişiklikleri kaydet"
#: admin.php:92
msgid "Rich text editor"
msgstr "Görsel metin düzenleyicisi "
#: admin.php:93
msgid "Enable the WYSIWYG editor"
msgstr "WYSIWYG'yi etkinleştir"
#: admin.php:99
msgid "Edit paragraphs"
msgstr "Paragraflari düzenle"
#: admin.php:100
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr "Bütün bir yazıyı düzenlemek yerine, paragrafları birer birer düzenle"
#: core.php:98
msgid "Save"
msgstr "Kaydet"
#: core.php:99
msgid "Cancel"
msgstr "İptal"
#: fields.php:241
msgid "[none]"
msgstr "[hiçbiri]"
#: fields.php:397
msgid "Post/page title"
msgstr "Yazı/sayfa başlığı"
#: fields.php:403
msgid "Post/page content"
msgstr "Yazı/sayfa içeriği"
#: fields.php:409
msgid "Post/page excerpt"
msgstr "Yazı/sayfa özeti"
#: fields.php:415
msgid "Post tags"
msgstr "Yazı etiketleri"
#: fields.php:421
msgid "Post/page custom fields"
msgstr "Yazı/sayfa özel alanları"
#: fields.php:427
msgid "Comment text"
msgstr "Yorum metni"
#: fields.php:433
msgid "Text widget content"
msgstr "Metin widget içeriği"
#: fields.php:438
msgid "Text widget title"
msgstr "Metin widget başlığı"
#. Plugin Name of an extension
msgid "Front-end Editor"
msgstr "Front-end Editor"
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr "http://scribu.net/wordpress/front-end-editor"
# Descripci&oacute;n de una extensi&oacute;n
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr "Admin ekranına girmeden yazılarınızı değiştirmenizi sağlar. "
#. Author of an extension
msgid "scribu"
msgstr "scribu"
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr "http://scribu.net/"
@@ -0,0 +1,179 @@
# Translation of the WordPress plugin Front-end Editor 1.8a5 by scribu.
# Copyright (C) 2010 scribu
# This file is distributed under the same license as the Front-end Editor package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Front-end Editor 1.8a5\n"
"Report-Msgid-Bugs-To: http://wordpress.org/tag/front-end-editor\n"
"POT-Creation-Date: 2010-04-01 04:57+0300\n"
"PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. #-#-#-#-# front-end-editor.pot (Front-end Editor 1.8a5) #-#-#-#-#
#. Plugin Name of an extension
#: admin.php:8
msgid "Front-end Editor"
msgstr ""
#: admin.php:11
msgid "Fields"
msgstr ""
#: admin.php:12 scb/AdminPage.php:329
msgid "Settings"
msgstr ""
#: admin.php:64
msgid "Enable or disable editable fields"
msgstr ""
#: admin.php:66
msgid "Post fields"
msgstr ""
#: admin.php:67
msgid "Other fields"
msgstr ""
#: admin.php:111
msgid "Enable the WYSIWYG editor"
msgstr ""
#: admin.php:117
msgid "Edit one paragraph at a time, instead of an entire post"
msgstr ""
#: admin.php:123
msgid "Reset the post date on each edit"
msgstr ""
#: admin.php:129
msgid "Highlight editable elements"
msgstr ""
#: admin.php:134
msgid "Display a tooltip above editable elements"
msgstr ""
#: core.php:59
msgid "Save"
msgstr ""
#: core.php:60
msgid "Cancel"
msgstr ""
#: core.php:74
msgid "Double-click to edit"
msgstr ""
#: core.php:110
msgid "Change Image"
msgstr ""
#: core.php:111
msgid "Clear"
msgstr ""
#: fields/base.php:82
msgid "empty"
msgstr ""
#: front-end-editor.php:66
msgid "Post title"
msgstr ""
#: front-end-editor.php:72
msgid "Post content"
msgstr ""
#: front-end-editor.php:78
msgid "Post excerpt"
msgstr ""
#: front-end-editor.php:84
msgid "Post categories"
msgstr ""
#: front-end-editor.php:91
msgid "Post tags"
msgstr ""
#: front-end-editor.php:98
msgid "Post terms"
msgstr ""
#: front-end-editor.php:105
msgid "Post custom fields"
msgstr ""
#: front-end-editor.php:111
msgid "Post thumbnail"
msgstr ""
#: front-end-editor.php:118
msgid "Comment text"
msgstr ""
#: front-end-editor.php:124
msgid "Category title"
msgstr ""
#: front-end-editor.php:129
msgid "Tag title"
msgstr ""
#: front-end-editor.php:134
msgid "Author description"
msgstr ""
#: front-end-editor.php:141
msgid "Widget title"
msgstr ""
#: front-end-editor.php:146
msgid "Text widget content"
msgstr ""
#: front-end-editor.php:152
msgid "Site title and description"
msgstr ""
#: front-end-editor.php:158
msgid "Site options"
msgstr ""
#: front-end-editor.php:164
msgid "Theme images"
msgstr ""
#: scb/AdminPage.php:158 scb/AdminPage.php:169
msgid "Save Changes"
msgstr ""
#: scb/AdminPage.php:272
msgid "Settings <strong>saved</strong>."
msgstr ""
#. Plugin URI of an extension
msgid "http://scribu.net/wordpress/front-end-editor"
msgstr ""
#. Description of an extension
msgid "Allows you to edit your posts without going through the admin interface"
msgstr ""
#. Author of an extension
msgid "scribu"
msgstr ""
#. Author URI of an extension
msgid "http://scribu.net/"
msgstr ""
+319
View File
@@ -0,0 +1,319 @@
=== Front-end Editor ===
Contributors: scribu
Donate link: http://scribu.net/paypal
Tags: inline, editor, edit-in-place, visual, wysiwyg
Requires at least: 2.8
Tested up to: 3.0
Stable tag: trunk
Want to edit something? Just double-click it!
== Description ==
Front-end Editor is a plugin that lets you make changes to your content *directly* from your site. No need to load the admin backend just to correct a typo.
To edit something, just double-click it!
The main goals are to be as *fast* as possible and to be *compatible with any theme*.
**Editable fields:**
<ul>
<li><strong>posts & pages</strong>
<ul>
<li>title</li>
<li>content</li>
<li>excerpt</li>
<li>categories</li>
<li>tags</li>
<li>custom taxonomies</li>
<li>custom fields</li>
<li>thumbnail</li>
</ul></li>
<li><strong>comments</strong>
<ul>
<li>content</li>
</ul></li>
<li><strong>authors</strong>
<ul>
<li>description</li>
</ul></li>
<li><strong>widgets</strong>
<ul>
<li>title</li>
<li>text widget content</li>
</ul></li>
<li><strong>titles</strong>
<ul>
<li>category</li>
<li>tag</li>
</ul></li>
<li><strong>site info</strong>
<ul>
<li>title</li>
<li>description</li>
<li>options</li>
</ul></li>
<li><strong>theme images</strong>
</ul>
There is a settings page where you can disable editable fields that you don't want.
**Translations:**
* Danish - [Georg](http://wordpress.blogos.dk/)
* Dutch - [Ron Hartman](http://www.fr-fanatic.com/)
* French - [Li-An](http://www.li-an.fr)
* Italian - [Gianni Diurno](http://gidibao.net)
* Georgian - Levani Melikishvili
* German - Gottfried
* Japaneze - kzh
* Norwegian - John Myrstad
* Polish - [Expromo](http://expromo.pl)
* Portuguese - [Fernanda Foertter](http://www.hpcprogrammer.com)
* Belarusian - [M. Comfi](http://www.comfi.com)
* Russian - BoreS
* Spanish - [Esteban](http://netmdp.com/)
* Swedish - [Müfit Kiper](http://kitkonsult.se/)
* Turkish - [Burak Gulbahce](http://www.saylangoz.com/wordpress/)
If you want to translate this plugin, please read [this](http://scribu.net/wordpress/translating-plugins.html).
== Installation ==
You can either install it automatically from the WordPress admin, or do it manually:
1. Unzip "Front-end Editor" archive and put the folder into your plugins folder (/wp-content/plugins/).
1. Activate the plugin from the Plugins menu.
== Frequently Asked Questions ==
= Error on activation: "Parse error: syntax error, unexpected T_CLASS..." =
Make sure your host is running PHP 5. Add this line to wp-config.php to check:
`var_dump(PHP_VERSION);`
= Why doesn't it work with my theme? =
See [Common Mistakes in Themes](http://scribu.net/wordpress/front-end-editor/common-mistakes-in-themes.html).
= Does it work with WP Super Cache? =
To avoid problems with WP Super Cache or W3 Total Cache, you have to disable caching for logged-in users.
= If I use this plugin, won't everybody be able to edit my content? =
No. To edit a field, a user must be logged in and have the right permissions. For example, to edit the post content from the front-end, a user must be able to edit the post content from the regular back-end editor.
= How can I change the hover color? =
You can add this line to *style.css* in your theme directory:
`.fee-field:hover, .fee-field:hover * {background-color: mycolor !important}`
where *mycolor* is one of these values: [CSS colors](http://www.w3schools.com/CSS/css_colors.asp).
= How can I edit custom fields? =
Since custom fields can be used in so many ways, you have to make some code replacements in your theme:
Replace something like this:
`<?php echo get_post_meta($post->ID, 'my_key', true); ?>`
with this:
`<?php editable_post_meta(get_the_ID(), 'my_key', 'textarea'); ?>`
The third parameter is optional and allows you to pick which type of field you want: *input*, *textarea* or *rich*.
If you have a custom field with multiple values, you can use `get_editable_post_meta()`. For example:
`
<ul>
<?php
$values = get_editable_post_meta(get_the_ID(), 'my_key');
foreach ( $values as $value )
echo '<li>' . $value . '</li>';
?>
</ul>
`
= How can I make theme images editable? =
Again, you have to modify your theme's code. Replace something like this:
`<img src="<?php bloginfo('template_url'); ?>/images/header_1.jpg" width="970" height="140" alt="<?php bloginfo('name'); ?> header image 1" title="<?php bloginfo('name'); ?> header image 1" />`
with this:
`<?php editable_image('header-1',
get_bloginfo('template_url') . '/images/header_1.jpg',
array('width' => 970, 'height' => 140, 'alt' => get_bloginfo('name')));
?>`
The editable_image() template tag is located in fields/other.php.
= Can I make my own editable fields? =
Yes, but you have to know your way around WordPress' internals. Here is the [developer guide](http://scribu.net/wordpress/front-end-editor/developer-guide.html) to get you started.
== Screenshots ==
1. The tooltip
2. Editing the post content
3. Editing the post title
4. Changing a theme image
5. The settings page
== Changelog ==
= 1.8 =
* added tooltip
* restyled buttons
* fixed widget editing
* exposed JavaScript field types
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-8.html)
= 1.7.2 =
* fixed narrow textarea problem
* fixed IE8 error
* included nicEdit upload plugin
= 1.7.1 =
* made date reset optional
* better lightbox detection
= 1.7 =
* new editable fields: post thumbnails & arbitrary options
* added font-family and font-color buttons to nicEdit
* made the nicEdit configuration filterable
* dropped Growfield from textareas
* load CSS only when needed
* standardized CSS ids and classes
* renamed hooks from 'front_ed_*' to 'front_end_editor_*'
* fixed: when editing the post content, the post date isn't updated
* fixed: when editing tags, the input bounces to a new line
* fixed: after editing linked post title, the title is not linked anymore
* fixed: editable_post_meta() doesn't work outside The Loop
* fixed: warning when a NULL is passed to FEE_Field_Base::wrap()
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-7.html)
= 1.6.1 =
* fixed escaping issues
= 1.6 =
* new editable field: post categories
* added editing of custom fields with multiple values
* added editing of any widget title
* improved script loading
* added placeholder to editable_post_meta
* fixed issue with comment paragraphs
* fixed issues with the $post global
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-6.html)
= 1.5.1 =
* fixed auto-upgrade error
* added German translation
= 1.5 =
* new editable field: theme images
* switched to NicEdit
* don't remove blockquotes when editing a single paragraph
* better handling of text widgets
* compress JS & CSS
* compatibility with Ajaxed WordPress plugin
* added ES translation
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-5.html)
= 1.4 =
* new editable fields: category title and tag title
* added $echo parameter to editable_post_meta()
* easier way to restrict editable content
* don't load CSS & JS if the current user can't edit any of the fields
* switched from Autogrow to Growfield (fixes IE compatibility)
* added Georgian translation
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-4.html)
= 1.3.3 =
* fixed duplicate header error
= 1.3.2 =
* site title bugfix
= 1.3.1 =
* settings page bugfix
* updated translations
= 1.3 =
* new editable fields: site title & site description
* the rich editor respects .alignleft etc.
* ability to add extra css to the rich editor via front-end-editor.css
* added Polish translation
* use id="" instead of rel=""
* postThumbs compatibility
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-3.html)
= 1.2.1 =
* widget bugfix
= 1.2 =
* made author description editable
* yellow background while hovering over editable field
* experimental wysiwyg autogrow
* hopefully valid xHTML
* HTML code is cleaned up before saving
* added Portuguese translation
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-2.html)
= 1.1.4 =
* fix white screen error for non-admins
= 1.1.3 =
* css bugfix
* added Belarusian translation
* updated italian translation
= 1.1 =
* new editable field: post terms
* usability improvements
* added Turkish translation
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-1.html)
= 1.0.6 =
* fixed links with target="_blank"
* inputs and textareas are focused after double-clicking
* added Russian translation
= 1.0.5 =
* added align buttons, fixed autogrow issue
* the_title and the_tags improvements
* added Swedish translation
= 1.0 =
* single paragraph editing
* [more info](http://scribu.net/wordpress/front-end-editor/fee-1-0.html)
= 0.9 =
* new editable field: post custom fields
* [more info](http://scribu.net/wordpress/front-end-editor/fee-0-9.html)
= 0.8 =
* rich text editor (jWYSIWYG)
* l10n
* [more info](http://scribu.net/wordpress/front-end-editor/fee-0-8.html)
= 0.7 =
* settings page
* [more info](http://scribu.net/wordpress/front-end-editor/fee-0-7.html)
= 0.6 =
* new editable field: post tags
* [more info](http://scribu.net/wordpress/front-end-editor/fee-0-6.html)
= 0.5 =
* initial release
* [more info](http://scribu.net/wordpress/front-end-editor/fee-0-5.html)
+418
View File
@@ -0,0 +1,418 @@
<?php
/*
Creates an admin page
You must set $this->args and define the page_content() method
*/
abstract class scbAdminPage {
/** Page args
* $toplevel string If not empty, will create a new top level menu
* $icon string Path to an icon for the top level menu
* $parent string (default: options-general.php)
* $capability string (default: 'manage_options')
* $page_title string (mandatory)
* $menu_title string (default: $page_title)
* $page_slug string (default: sanitized $page_title)
* $nonce string (default: $page_slug)
* $action_link string|bool Text of the action link on the Plugins page (default: 'Settings')
*/
protected $args;
// URL to the current plugin directory.
// Useful for adding css and js files
protected $plugin_url;
// Created at page init
protected $pagehook;
// scbOptions object holder
// Normally, it's used for storing formdata
protected $options;
// l10n
protected $textdomain;
// Formdata used for filling the form elements
protected $formdata = array();
// Registration component
private static $registered = array();
static function register($class, $file, $options = null) {
if ( isset(self::$registered[$class]) )
return false;
self::$registered[$class] = array($file, $options);
add_action('_admin_menu', array(__CLASS__, '_pages_init'));
return true;
}
static function replace($old_class, $new_class) {
if ( ! isset(self::$registered[$old_class]) )
return false;
self::$registered[$new_class] = self::$registered[$old_class];
unset(self::$registered[$old_class]);
return true;
}
static function remove($class) {
if ( ! isset(self::$registered[$class]) )
return false;
unset(self::$registered[$class]);
return true;
}
static function _pages_init() {
foreach ( self::$registered as $class => $args )
new $class($args[0], $args[1]);
}
// ____________MAIN METHODS____________
// Constructor
function __construct($file, $options = NULL) {
if ( $options !== NULL ) {
$this->options = $options;
$this->formdata = $this->options->get();
}
$this->file = $file;
$this->plugin_url = plugin_dir_url($file);
$this->setup();
$this->check_args();
add_action('admin_menu', array($this, 'page_init'));
add_filter('contextual_help', array($this, '_contextual_help'), 10, 2);
if ( $this->args['action_link'] )
add_filter('plugin_action_links_' . plugin_basename($file), array($this, '_action_link'));
}
// This is where all the page args can be set
function setup(){}
// This is where the css and js go
// Both wp_enqueue_*() and inline code can be added
function page_head(){}
// This is where the contextual help goes
// @return string
function page_help(){}
// A generic page header
function page_header() {
echo "<div class='wrap'>\n";
screen_icon();
echo "<h2>" . $this->args['page_title'] . "</h2>\n";
}
// This is where the page content goes
abstract function page_content();
// A generic page footer
function page_footer() {
echo "</div>\n";
}
// This is where the form data should be validated
function validate($new_data, $old_data) {
return $new_data;
}
// A generic form handler
function form_handler() {
if ( empty($_POST['action']) )
return false;
check_admin_referer($this->nonce);
foreach ( $this->formdata as $name => $value )
$new_data[$name] = @$_POST[$name];
$this->formdata = $this->validate($new_data, $this->formdata);
if ( isset($this->options) )
$this->options->update($this->formdata);
$this->admin_msg();
}
// ____________UTILITIES____________
// Generates a form submit button
function submit_button($value = '', $action = 'action', $class = "button") {
if ( is_array($value) ) {
extract(wp_parse_args($value, array(
'value' => __('Save Changes', $this->textdomain),
'action' => 'action',
'class' => 'button',
'ajax' => true
)));
if ( ! $ajax )
$class .= ' no-ajax';
}
else {
if ( empty($value) )
$value = __('Save Changes', $this->textdomain);
}
$input_args = array(
'type' => 'submit',
'names' => $action,
'values' => $value,
'extra' => '',
'desc' => false
);
if ( ! empty($class) )
$input_args['extra'] = "class='{$class}'";
$output = "<p class='submit'>\n" . scbForms::input($input_args) . "</p>\n";
return $output;
}
/*
Mimics scbForms::form_wrap()
$this->form_wrap($content); // generates a form with a default submit button
$this->form_wrap($content, false); // generates a form with no submit button
// the second argument is sent to submit_button()
$this->form_wrap($content, array(
'text' => 'Save changes',
'name' => 'action',
'ajax' => true,
));
*/
function form_wrap($content, $submit_button = true) {
if ( is_array($submit_button) ) {
$content .= call_user_func(array($this, 'submit_button'), $submit_button);
} elseif ( true === $submit_button ) {
$content .= $this->submit_button();
} elseif ( false !== strpos($submit_button, '<input') ) {
$content .= $submit_button;
} elseif ( false !== $submit_button ) {
$button_args = array_slice(func_get_args(), 1);
$content .= call_user_func_array(array($this, 'submit_button'), $button_args);
}
return scbForms::form_wrap($content, $this->nonce);
}
// See scbForms::input()
function input($args, $options = NULL) {
if ( $options === NULL )
$options = $this->formdata;
return scbForms::input($args, $options);
}
// See scbForms::form()
function form($rows, $options = NULL) {
if ( $options === NULL )
$options = $this->formdata;
return scbForms::form($rows, $options, $this->nonce);
}
// See scbForms::table()
function table($rows, $options = NULL) {
if ( $options === NULL )
$options = $this->formdata;
return scbForms::table($rows, $options);
}
// See scbForms::table_row()
function table_row($row, $options = NULL) {
if ( $options === NULL )
$options = $this->formdata;
return scbForms::table_row($row, $options);
}
// Mimics scbForms::form_table()
function form_table($rows, $options = NULL) {
$output = $this->table($rows, $options);
$args = array_slice(func_get_args(), 2);
array_unshift($args, $output);
return call_user_func_array(array($this, 'form_wrap'), $args);
}
// Mimics scbForms::form_table_wrap()
function form_table_wrap($content) {
$output = self::table_wrap($content);
$args = array_slice(func_get_args(), 1);
array_unshift($args, $output);
return call_user_func_array(array($this, 'form_wrap'), $args);
}
// Generates a standard admin notice
function admin_msg($msg = '', $class = "updated") {
if ( empty($msg) )
$msg = __('Settings <strong>saved</strong>.', $this->textdomain);
echo "<div class='$class fade'><p>$msg</p></div>\n";
}
// Wraps a string in a <script> tag
function js_wrap($string) {
return "\n<script type='text/javascript'>\n" . $string . "\n</script>\n";
}
// Wraps a string in a <style> tag
function css_wrap($string) {
return "\n<style type='text/css'>\n" . $string . "\n</style>\n";
}
// ____________INTERNAL METHODS____________
function __call($method, $args) {
return call_user_func_array(array('scbForms', $method), $args);
}
// Registers a page
function page_init() {
extract($this->args);
if ( ! $toplevel ) {
$this->pagehook = add_submenu_page($parent, $page_title, $menu_title, $capability, $page_slug, array($this, '_page_content_hook'));
} else {
$func = 'add_' . $toplevel . '_page';
$this->pagehook = $func($page_title, $menu_title, $capability, $page_slug, array($this, '_page_content_hook'), $icon_url);
}
if ( ! $this->pagehook )
return;
if ( $ajax_submit ) {
$this->ajax_response();
add_action('admin_footer', array($this, 'ajax_submit'), 20);
}
add_action('admin_print_styles-' . $this->pagehook, array($this, 'page_head'));
}
private function check_args() {
if ( empty($this->args['page_title']) )
trigger_error('Page title cannot be empty', E_USER_WARNING);
$this->args = wp_parse_args($this->args, array(
'toplevel' => '',
'icon' => '',
'parent' => 'options-general.php',
'capability' => 'manage_options',
'menu_title' => $this->args['page_title'],
'page_slug' => '',
'nonce' => '',
'action_link' => __('Settings', $this->textdomain),
'ajax_submit' => false,
));
if ( empty($this->args['page_slug']) )
$this->args['page_slug'] = sanitize_title_with_dashes($this->args['menu_title']);
if ( empty($this->args['nonce']) )
$this->nonce = $this->args['page_slug'];
}
function _contextual_help($help, $screen) {
if ( is_object($screen) )
$screen = $screen->id;
if ( $screen == $this->pagehook && $actual_help = $this->page_help() )
return $actual_help;
return $help;
}
function ajax_response() {
if ( ! isset($_POST['_ajax_submit']) || $_POST['_ajax_submit'] != $this->pagehook )
return;
$this->form_handler();
die;
}
function ajax_submit() {
global $page_hook;
if ( $page_hook != $this->pagehook )
return;
?>
<script type="text/javascript">
jQuery(document).ready(function($){
var $spinner = $(new Image()).attr('src', '<?php echo admin_url("images/wpspin_light.gif"); ?>');
$(':submit').click(function(ev){
var $submit = $(this);
var $form = $submit.parents('form');
if ( $submit.hasClass('no-ajax') || $form.attr('method').toLowerCase() != 'post' )
return true;
var $this_spinner = $spinner.clone();
$submit.before($this_spinner).hide();
var data = $form.serializeArray();
data.push({name: $submit.attr('name'), value: $submit.val()});
data.push({name: '_ajax_submit', value: '<?php echo $this->pagehook; ?>'});
$.post(location.href, data, function(response){
var $prev = $('.wrap > .updated, .wrap > .error');
var $msg = $(response).hide().insertAfter($('.wrap h2'));
if ( $prev.length > 0 )
$prev.fadeOut('slow', function(){ $msg.fadeIn('slow'); });
else
$msg.fadeIn('slow');
$this_spinner.hide();
$submit.show();
});
ev.stopPropagation();
ev.preventDefault();
});
});
</script>
<?php
}
function _page_content_hook() {
$this->form_handler();
$this->page_header();
$this->page_content();
$this->page_footer();
}
function _action_link($links) {
$url = add_query_arg('page', $this->args['page_slug'], admin_url($this->args['parent']));
$links[] = "<a href='$url'>" . $this->args['action_link'] . "</a>";
return $links;
}
}
+226
View File
@@ -0,0 +1,226 @@
<?php
/*
Creates an admin page with widgets, similar to the dashboard
For example, if you defined the boxes like this:
$this->boxes = array(
array('settings', 'Settings box', 'normal')
...
);
You must also define two methods in your class for each box:
function settings_box() - this is where the box content is echoed
function settings_handler() - this is where the box settings are saved
...
*/
abstract class scbBoxesPage extends scbAdminPage {
/*
A box definition looks like this:
array($slug, $title, $column);
Available columns: normal, side, column3, column4
*/
protected $boxes = array();
function __construct($file, $options = null) {
parent::__construct($file, $options);
// too late
scbUtil::add_uninstall_hook($this->file, array($this, 'uninstall'));
}
function page_init() {
if ( !isset($this->args['columns']) )
$this->args['columns'] = 2;
parent::page_init();
add_action('load-' . $this->pagehook, array($this, 'boxes_init'));
add_filter('screen_layout_columns', array($this, 'columns'));
}
function default_css() {
?>
<style type="text/css">
.meta-box-sortables {margin: 0 5px !important}
.inside {clear:both; overflow:hidden; padding: 10px 10px 0 10px !important}
.inside table {margin: 0 !important; padding: 0 !important}
.inside table td {vertical-align: middle !important}
.inside table .regular-text {width: 100% !important}
.inside .form-table th {width: 30%; max-width: 200px; padding: 10px 0 !important}
.inside .widefat .check-column {padding-bottom: 7px !important}
.inside p, .inside table {margin: 0 0 10px 0 !important}
.inside p.submit {float:left !important; padding: 0 !important}
</style>
<?php
}
function page_content() {
$this->default_css();
global $screen_layout_columns;
if ( isset($screen_layout_columns) ) {
$hide2 = $hide3 = $hide4 = '';
switch ( $screen_layout_columns ) {
case 4:
$width = 'width:24.5%;';
break;
case 3:
$width = 'width:32.67%;';
$hide4 = 'display:none;';
break;
case 2:
$width = 'width:49%;';
$hide3 = $hide4 = 'display:none;';
break;
default:
$width = 'width:98%;';
$hide2 = $hide3 = $hide4 = 'display:none;';
}
}
?>
<div id='<?php echo $this->pagehook ?>-widgets' class='metabox-holder'>
<?php
echo "\t<div class='postbox-container' style='$width'>\n";
do_meta_boxes( $this->pagehook, 'normal', '' );
echo "\t</div><div class='postbox-container' style='{$hide2}$width'>\n";
do_meta_boxes( $this->pagehook, 'side', '' );
echo "\t</div><div class='postbox-container' style='{$hide3}$width'>\n";
do_meta_boxes( $this->pagehook, 'column3', '' );
echo "\t</div><div class='postbox-container' style='{$hide4}$width'>\n";
do_meta_boxes( $this->pagehook, 'column4', '' );
?>
</div></div>
<?php
}
function page_footer() {
$this->_boxes_js_init();
parent::page_footer();
}
function form_handler() {
if ( empty($_POST) )
return;
check_admin_referer($this->nonce);
// Box handler
foreach ( $this->boxes as $box ) {
$args = isset($box[4]) ? $box[4] : array();
$handler = $box[0] . '_handler';
if ( method_exists($this, $handler) )
call_user_func_array(array($this, $handler), $args);
}
if ( $this->options )
$this->formdata = $this->options->get();
}
function columns($columns) {
$columns[$this->pagehook] = $this->args['columns'];
return $columns;
}
function uninstall() {
global $wpdb;
$hook = str_replace('-', '', $this->pagehook);
foreach ( array('metaboxhidden', 'closedpostboxes', 'wp_metaboxorder', 'screen_layout') as $option )
$keys[] = "'{$option}_{$hook}'";
$keys = '(' . implode(', ', $keys) . ')';
$wpdb->query("
DELETE FROM {$wpdb->usermeta}
WHERE meta_key IN {$keys}
");
}
function boxes_init() {
wp_enqueue_script('common');
wp_enqueue_script('wp-lists');
wp_enqueue_script('postbox');
$registered = array();
foreach($this->boxes as $box_args) {
@list($name, $title, $context, $priority, $args) = $box_args;
if ( empty($title) )
$title = ucfirst($name);
if ( empty($context) )
$context = 'normal';
if ( empty($priority) )
$priority = 'default';
if ( empty($args) )
$args = array();
if ( isset($registered[$name]) ) {
if ( empty($args) )
trigger_error("Duplicate box name: $name", E_USER_NOTICE);
$name = $this->_increment($name);
} else {
$registered[$name] = true;
}
add_meta_box($name, $title, array($this, '_intermediate_callback'), $this->pagehook, $context, $priority, $args);
}
}
// Make it so that $args is actually what's passed to the callback
function _intermediate_callback($_, $box) {
list($name) = explode('-', $box['id']);
call_user_func_array(array($this, $name . '_box'), $box['args']);
}
private function _increment($name) {
$parts = explode('-', $name);
if ( isset($parts[1]) )
$parts[1]++;
else
$parts[1] = 2;
return implode('-', $parts);
}
// Adds necesary code for JS to work
function _boxes_js_init() {
echo $this->js_wrap(
<<<EOT
//<![CDATA[
jQuery(document).ready( function($){
// close postboxes that should be closed
$('.if-js-closed').removeClass('if-js-closed').addClass('closed');
// postboxes setup
postboxes.add_postbox_toggles('$this->pagehook');
});
//]]>
EOT
);
?>
<form style='display: none' method='get' action=''>
<p>
<?php
wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
?>
</p>
</form>
<?php
}
}
+464
View File
@@ -0,0 +1,464 @@
<?php
class scbForms {
const token = '%input%';
/* Generates one or more form elements of the same type,
including <select>s and <textarea>s.
$args = array (
'type' => string (mandatory)
'name' => string | array (mandatory)
'value' => string | array
'desc' => string | array | false
'desc_pos' => 'before' | 'after' | 'foo %input% bar' (default: after)
'extra' => string (default: class="regular-text")
);
$formdata = associative array with the formdata with which to fill the elements
*/
protected static $args;
protected static $formdata = array();
static function input($args, $formdata = array()) {
$args = self::validate_data($args);
$error = false;
foreach ( array('name', 'value') as $key ) {
$old = $key . 's';
if ( isset($args[$old]) ) {
$args[$key] = $args[$old];
unset($args[$old]);
}
}
if ( !isset($args['name']) || empty($args['name']) )
return trigger_error("Empty name", E_USER_WARNING);
self::$args = $args;
self::$formdata = self::validate_data($formdata);
switch ( $args['type'] ) {
case 'select': return self::_select();
case 'textarea': return self::_textarea();
default: return self::_input();
}
}
// Deprecated
static function select($args, $options = array()) {
if ( !empty($options) )
$args['value'] = $options;
self::$args = $args;
return self::_select();
}
// Deprecated
static function textarea($args, $content = '') {
if ( !empty($content) )
$args['value'] = $content;
self::$args = $args;
return self::_textarea();
}
// ____________UTILITIES____________
// Generates a table wrapped in a form
static function form_table($rows, $formdata = NULL) {
$output = '';
foreach ( $rows as $row )
$output .= self::table_row($row, $formdata);
$output = self::form_table_wrap($output);
return $output;
}
// Generates a form
static function form($inputs, $formdata = NULL, $nonce) {
$output = '';
foreach ( $inputs as $input )
$output .= self::input($input, $formdata);
$output = self::form_wrap($output, $nonce);
return $output;
}
// Generates a table
static function table($rows, $formdata = NULL) {
$output = '';
foreach ( $rows as $row )
$output .= self::table_row($row, $formdata);
$output = self::table_wrap($output);
return $output;
}
// Generates a table row
static function table_row($args, $formdata = NULL) {
return self::row_wrap($args['title'], self::input($args, $formdata));
}
// ____________WRAPPERS____________
// Wraps the given content in a <form><table>
static function form_table_wrap($content, $nonce = 'update_options') {
$output = self::table_wrap($content);
$output = self::form_wrap($output, $nonce);
return $output;
}
// Wraps the given content in a <form>
static function form_wrap($content, $nonce = 'update_options') {
$output = "\n<form method='post' action=''>\n";
$output .= $content;
$output .= wp_nonce_field($action = $nonce, $name = "_wpnonce", $referer = true , $echo = false);
$output .= "\n</form>\n";
return $output;
}
// Wraps the given content in a <table>
static function table_wrap($content) {
$output = "\n<table class='form-table'>\n" . $content . "\n</table>\n";
return $output;
}
// Wraps the given content in a <tr><td>
static function row_wrap($title, $content) {
return "\n<tr>\n\t<th scope='row'>" . $title . "</th>\n\t<td>\n\t\t" . $content . "\t</td>\n\n</tr>";
}
// ____________PRIVATE METHODS____________
// Recursivly transform empty arrays to ''
private static function validate_data($data) {
if ( ! is_array($data) )
return $data;
if ( empty($data) )
return '';
foreach ( $data as $key => &$value )
$value = self::validate_data($value);
return $data;
}
// From multiple inputs to single inputs
private static function _input() {
extract(wp_parse_args(self::$args, array(
'name' => NULL,
'value' => NULL,
'desc' => NULL,
'checked' => NULL,
)));
$m_name = is_array($name);
$m_value = is_array($value);
$m_desc = is_array($desc);
// Correct name
if ( !$m_name && $m_value
&& 'checkbox' == $type
&& false === strpos($name, '[')
)
$args['name'] = $name = $name . '[]';
// Expand names or values
if ( !$m_name && !$m_value ) {
$a = array($name => $value);
}
elseif ( $m_name && !$m_value ) {
$a = array_fill_keys($name, $value);
}
elseif ( !$m_name && $m_value ) {
$a = array_fill_keys($value, $name);
}
else {
$a = array_combine($name, $value);
}
// Correct descriptions
$_after = '';
if ( isset($desc) && !$m_desc && false === strpos($desc, self::token) ) {
if ( $m_value ) {
$_after = $desc;
$args['desc'] = $desc = $value;
}
elseif ( $m_name ) {
$_after = $desc;
$args['desc'] = $desc = $name;
}
}
// Determine what goes where
if ( !$m_name && $m_value ) {
$i1 = 'val';
$i2 = 'name';
} else {
$i1 = 'name';
$i2 = 'val';
}
$func = in_array($type, array('checkbox', 'radio')) ? '_checkbox_single' : '_input_single';
// Set constant args
$const_args = self::array_extract(self::$args, array('type', 'desc_pos', 'checked'));
if ( isset($extra) )
$const_args['extra'] = explode(' ', $extra);
$i = 0;
foreach ( $a as $name => $val ) {
$cur_args = $const_args;
if ( $$i1 !== NULL )
$cur_args['name'] = $$i1;
if ( $$i2 !== NULL )
$cur_args['value'] = $$i2;
// Set desc
if ( is_array($desc) )
$cur_args['desc'] = $desc[$i];
elseif ( isset($desc) )
$cur_args['desc'] = $desc;
// Find relevant formdata
$match = NULL;
if ( $checked === NULL ) {
$match = @self::$formdata[str_replace('[]', '', $$i1)];
if ( is_array($match) ) {
$match = $match[$i];
}
} else if ( is_array($checked) ) {
$cur_args['checked'] = isset($checked[$i]) && $checked[$i];
}
$output[] = self::$func($cur_args, $match);
$i++;
}
return implode("\n", $output) . $_after;
}
// Handle args for checkboxes and radio inputs
private static function _checkbox_single($args, $data) {
$args = wp_parse_args($args, array(
'name' => NULL,
'value' => true,
'desc_pos' => 'after',
'desc' => NULL,
'checked' => NULL,
'extra' => array(),
));
foreach ( $args as $key => &$val )
$$key = &$val;
unset($val);
if ( $checked === NULL && $value == $data )
$checked = true;
if ( $checked )
$extra[] = 'checked="checked"';
if ( $desc === NULL && !is_bool($value) )
$desc = str_replace('[]', '', $value);
return self::_input_gen($args);
}
// Handle args for text inputs
private static function _input_single($args, $data) {
$args = wp_parse_args($args, array(
'value' => stripslashes($data),
'desc_pos' => 'after',
'extra' => array('class="regular-text"'),
));
foreach ( $args as $key => &$val )
$$key = &$val;
unset($val);
if ( FALSE === strpos($name, '[') )
$extra[] = "id='{$name}'";
return self::_input_gen($args);
}
// Generate html with the final args
private static function _input_gen($args) {
extract(wp_parse_args($args, array(
'name' => NULL,
'value' => NULL,
'desc' => NULL,
'extra' => array()
)));
$extra = self::validate_extra($extra, $name);
$value = esc_attr($value);
$input = "<input name='{$name}' value='{$value}' type='{$type}'{$extra} /> ";
return self::add_label($input, $desc, $desc_pos);
}
private static function _select() {
extract(wp_parse_args(self::$args, array(
'name' => '',
'value' => array(),
'text' => '',
'selected' => array('foo'), // hack to make default blank
'extra' => '',
'numeric' => false, // use numeric array instead of associative
'desc' => '',
'desc_pos' => '',
)), EXTR_SKIP);
if ( empty($value) )
$value = array('' => '');
if ( !is_array($value) )
return trigger_error("'value' argument is expected to be an array", E_USER_WARNING);
if ( !self::is_associative($value) && !$numeric )
$value = array_combine($value, $value);
if ( isset(self::$formdata[$name]) )
$cur_val = self::$formdata[$name];
else
$cur_val = $selected;
if ( false === $text ) {
$opts = '';
} else {
$opts = "\t<option value=''";
if ( $cur_val === array('foo') )
$opts .= " selected='selected'";
$opts .= ">{$text}</option>\n";
}
foreach ( $value as $key => $value ) {
if ( empty($key) || empty($value) )
continue;
$cur_extra = array();
if ( (string) $key == (string) $cur_val )
$cur_extra[] = "selected='selected'";
$cur_extra = self::validate_extra($cur_extra, $key);
$opts .= "\t<option value='{$key}'{$cur_extra}>{$value}</option>\n";
}
$extra = self::validate_extra($extra, $name);
$input = "<select name='{$name}'$extra>\n{$opts}</select>";
return self::add_label($input, $desc, $desc_pos);
}
private static function _textarea() {
extract(wp_parse_args(self::$args, array(
'name' => '',
'extra' => 'class="widefat"',
'value' => '',
'escaped' => false,
)), EXTR_SKIP);
if ( !$escaped )
$value = wp_htmledit_pre(stripslashes($value));
$extra = self::validate_extra($extra, $name);
return "<textarea name='{$name}'{$extra}>\n{$value}\n</textarea>\n";
}
private static function add_label($input, $desc, $desc_pos) {
if ( empty($desc_pos) )
$desc_pos = 'after';
$label = '';
if ( false === strpos($desc, self::token) ) {
switch ($desc_pos) {
case 'before': $label = $desc . ' ' . self::token; break;
case 'after': $label = self::token . ' ' . $desc;
}
} else {
$label = $desc;
}
$label = trim(str_replace(self::token, $input, $label));
if ( empty($desc) )
$output = $input . "\n";
else
$output = "<label>{$label}</label>\n";
return $output;
}
private static function validate_extra($extra, $name, $implode = true) {
if ( !is_array($extra) )
$extra = explode(' ', $extra);
if ( empty($extra) )
return '';
return ' ' . ltrim(implode(' ', $extra));
}
// Utilities
private static function is_associative($array) {
if ( !is_array($array) || empty($array) )
return false;
$keys = array_keys($array);
return array_keys($keys) !== $keys;
}
private static function array_extract($array, $keys) {
$r = array();
foreach ( $keys as $key )
if ( isset($array[$key]) )
$r[$key] = $array[$key];
return $r;
}
}
// PHP < 5.2
if ( !function_exists('array_fill_keys') ) :
function array_fill_keys($keys, $value) {
if ( !is_array($keys) )
trigger_error('First argument is expected to be an array.' . gettype($keys) . 'given', E_USER_WARNING);
$r = array();
foreach ( $keys as $key )
$r[$key] = $value;
return $r;
}
endif;
+160
View File
@@ -0,0 +1,160 @@
<?php
// Usage: http://scribu.net/wordpress/scb-framework/scb-options.html
class scbOptions {
protected $defaults; // the default value(s)
protected $key; // the option name
protected $data; // the option value
public $wp_filter_id; // used by WP hooks
/**
* Create a new set of options
*
* @param key Option name
* @param string Reference to main plugin file
* @param array An associative array of default values
*/
function __construct($key, $file, $defaults = '') {
$this->key = $key;
$this->defaults = $defaults;
$this->data = get_option($this->key);
if ( is_array($this->defaults) ) {
$this->data = (array) $this->data;
register_activation_hook($file, array($this, '_update_reset'));
}
scbUtil::add_uninstall_hook($file, array($this, '_delete'));
}
/**
* Get all data fields, certain fields or a single field
*
* @param string|array $field The field(s) to get
* @return mixed Whatever is in those fields
*/
function get($field = '') {
return $this->_get($field, $this->data);
}
/**
* Get all default fields, certain fields or a single field
*
* @param string|array $field The field(s) to get
* @return mixed Whatever is in those fields
*/
function get_defaults($field = '') {
return $this->_get($field, $this->defaults);
}
/**
* Set all data fields, certain fields or a single field
*
* @param string|array $field The field to update or an associative array
* @param mixed $value The new value (ignored if $field is array)
* @return null
*/
function set($field, $value = '') {
if ( is_array($field) )
$newdata = $field;
else
$newdata = array($field => $value);
$this->update(array_merge($this->data, $newdata));
}
/**
* Remove any keys that are not in the defaults array
*/
function cleanup() {
$r = array();
if ( ! is_array($this->defaults) )
return false;
foreach ( array_keys($this->defaults) as $key )
$r[$key] = $this->data[$key];
$this->update($r);
return true;
}
/**
* Update raw data
*
* @param mixed $newdata
* @return null
*/
function update($newdata) {
if ( $this->data === $newdata )
return;
$this->data = $newdata;
update_option($this->key, $this->data);
}
/**
* Reset option to defaults
*
* @return null
*/
function reset() {
$this->update($this->defaults);
}
//_____INTERNAL METHODS_____
// Get one, more or all fields from an array
private function _get($field, $data) {
if ( empty($field) )
return $data;
if ( is_string($field) )
return $data[$field];
foreach ( $field as $key )
if ( isset($data[$key]) )
$result[] = $data[$key];
return $result;
}
// Magic method: $options->field
function __get($field) {
return $this->data[$field];
}
// Magic method: $options->field = $value
function __set($field, $value) {
$this->set($field, $value);
}
// Magic method: isset($options->field)
function __isset($field) {
return isset($this->data[$field]);
}
// Add new fields with their default values
function _update_reset() {
$this->update(array_merge($this->defaults, $this->data));
}
// Delete option
function _delete() {
delete_option($this->key);
}
// DEPRECATED
function update_part($data) {
$this->set($data);
}
}
@@ -0,0 +1,168 @@
<?php
class scbUtil {
// Force script enqueue
static function do_scripts($handles) {
global $wp_scripts;
if ( ! is_a($wp_scripts, 'WP_Scripts') )
$wp_scripts = new WP_Scripts();
$wp_scripts->do_items((array) $handles);
}
// Force style enqueue
static function do_styles($handles) {
self::do_scripts('jquery');
global $wp_styles;
if ( ! is_a($wp_styles, 'WP_Styles') )
$wp_styles = new WP_Styles();
ob_start();
$wp_styles->do_items((array) $handles);
$content = str_replace(array('"', "\n"), array("'", ''), ob_get_clean());
echo "<script type='text/javascript'>\n";
echo "jQuery(document).ready(function($) {\n";
echo "$('head').prepend(\"$content\");\n";
echo "});\n";
echo "</script>";
}
// Extract $keys from $array
static function array_extract($array, $keys) {
$r = array();
foreach ( $keys as $key )
if ( array_key_exists($key, $array) )
$r[$key] = $array[$key];
return $r;
}
// Prepare an array for an IN statement
static function array_to_sql($values) {
foreach ( $values as &$val )
$val = "'" . esc_sql(trim($val)) . "'";
return implode(',', $values);
}
// Have more than one uninstall hooks; also prevents an UPDATE query on each page load
static function add_uninstall_hook($plugin, $callback) {
register_uninstall_hook($plugin, '__return_false'); // dummy
add_action('uninstall_' . plugin_basename($plugin), $callback);
}
}
// _____Simple debug utility_____
if ( ! class_exists('scbDebug') ):
class scbDebug {
private $args;
function __construct($args) {
$this->args = $args;
register_shutdown_function(array($this, '_delayed'));
}
function _delayed() {
if ( !current_user_can('administrator') )
return;
$this->raw($this->args);
}
static function raw($args) {
echo "<pre>";
foreach ( $args as $arg )
if ( is_array($arg) || is_object($arg) )
print_r($arg);
else
var_dump($arg);
echo "</pre>";
}
}
endif;
if ( ! function_exists('debug') ):
function debug() {
$args = func_get_args();
// integrate with FirePHP
if ( class_exists('FirePHP') ) {
$firephp = FirePHP::getInstance(true);
$firephp->group('debug');
foreach ( $args as $arg )
$firephp->log($arg);
$firephp->groupEnd();
return;
}
new scbDebug($args);
}
endif;
if ( ! function_exists('debug_raw') ):
function debug_raw() {
$args = func_get_args();
scbDebug::raw($args);
}
endif;
// _____Minimalist HTML framework_____
if ( ! function_exists('html') ):
function html($tag, $content = '') {
list($closing) = explode(' ', $tag, 2);
return "<{$tag}>{$content}</{$closing}>";
}
endif;
// Generate an <a> tag
if ( ! function_exists('html_link') ):
function html_link($url, $title = '') {
if ( empty($title) )
$title = $url;
return sprintf("<a href='%s'>%s</a>", $url, $title);
}
endif;
// _____Compatibility layer_____
// WP < 3.0
if ( ! function_exists('__return_false') ) :
function __return_false() {
return false;
}
endif;
// WP < ?
if ( ! function_exists('__return_true') ) :
function __return_true() {
return true;
}
endif;
// WP < ?
if ( ! function_exists('set_post_field') ) :
function set_post_field($field, $value, $post_id) {
global $wpdb;
$post_id = absint($post_id);
$value = sanitize_post_field($field, $value, $post_id, 'db');
return $wpdb->update($wpdb->posts, array($field => $value), array('ID' => $post_id));
}
endif;
+70
View File
@@ -0,0 +1,70 @@
<?php
/*
To load scbFramework, you just need to add this line at the beginning of your plugin:
require_once dirname(__FILE__) . '/scb/load.php';
*/
if ( !class_exists('scbLoad3') ) :
class scbLoad3 {
private static $candidates;
static function init($rev, $file, $classes) {
$dir = dirname($file);
self::$candidates[$rev] = $dir;
self::load($dir . '/', $classes);
add_action('activated_plugin', array(__CLASS__, 'reorder'));
}
static function reorder() {
krsort(self::$candidates);
$dir = dirname(plugin_basename(reset(self::$candidates)));
$current = get_option('active_plugins', array());
$found = false;
foreach ( $current as $i => $plugin ) {
$plugin_dir = dirname($plugin);
if ( $plugin_dir == $dir ) {
$found = true;
break;
}
}
if ( !$found || 0 == $i )
return;
unset($current[$i]);
array_unshift($current, $plugin);
update_option('active_plugins', $current);
}
private static function load($path, $classes) {
foreach ( $classes as $class_name ) {
if ( class_exists($class_name) )
continue;
$fpath = $path . substr($class_name, 3) . '.php';
@include $fpath;
}
}
static function get_candidates() {
return self::$candidates;
}
}
endif;
scbLoad3::init(1, __FILE__, array(
'scbOptions', 'scbForms', 'scbAdminPage', 'scbBoxesPage',
'scbWidget', 'scbCron', 'scbTable', 'scbUtil', 'scbRewrite',
));
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB