440 lines
12 KiB
JavaScript
440 lines
12 KiB
JavaScript
jQuery( document ).ready(function () {
|
|
|
|
/*
|
|
* Click handler for the delete button
|
|
* @param event
|
|
*/
|
|
var coauthors_delete_onclick = function( e ) {
|
|
if ( confirm( coAuthorsPlusStrings.confirm_delete ) ) {
|
|
return coauthors_delete( this );
|
|
}
|
|
return false;
|
|
};
|
|
|
|
var $coauthors_loading = jQuery("<span id='ajax-loading'></span>");
|
|
|
|
function coauthors_delete( elem ) {
|
|
|
|
var $coauthor_row = jQuery( elem ).closest( '.coauthor-row' );
|
|
$coauthor_row.remove();
|
|
|
|
// Hide the delete button when there's only one Co-Author
|
|
if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length <= 1 )
|
|
jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).addClass( 'hidden' );
|
|
|
|
return true;
|
|
}
|
|
|
|
var coauthors_edit_onclick = function( event ) {
|
|
var $tag = jQuery( this );
|
|
|
|
var $co = $tag.prev();
|
|
|
|
$tag.hide();
|
|
$co.show()
|
|
.focus()
|
|
;
|
|
|
|
$co.previousAuthor = $tag.text();
|
|
}
|
|
|
|
/*
|
|
* Save co-author
|
|
* @param int Co-Author ID
|
|
* @param string Co-Author Name
|
|
* @param object The autosuggest input box
|
|
*/
|
|
function coauthors_save_coauthor( author, co ) {
|
|
|
|
// get sibling <span> and update
|
|
co.siblings( '.coauthor-tag' )
|
|
.html( author.name )
|
|
.append( coauthors_create_author_gravatar( author ) )
|
|
.show()
|
|
;
|
|
|
|
// Update the value of the hidden input
|
|
co.siblings( 'input[name="coauthors[]"]' ).val( author.nicename );
|
|
}
|
|
|
|
|
|
/*
|
|
* Add co-author
|
|
* @param string Co-Author Name
|
|
* @param object The autosuggest input box
|
|
* @param boolean Initial set up or not?
|
|
*/
|
|
function coauthors_add_coauthor( author, co, init, count ){
|
|
|
|
// Check if editing
|
|
if ( co && co.siblings( '.coauthor-tag' ).length ) {
|
|
coauthors_save_coauthor( author, co );
|
|
} else {
|
|
// Not editing, so we create a new co-author entry
|
|
if ( count == 0 ) {
|
|
var coName = ( count == 0 ) ? 'coauthors-main' : '';
|
|
// Add new co-author to <select>
|
|
//coauthors_select_author( co-author );
|
|
}
|
|
var options = { addDelete: true, addEdit: false };
|
|
|
|
// Create autosuggest box and text tag
|
|
if ( ! co ) var co = coauthors_create_autosuggest( author.name, coName )
|
|
var tag = coauthors_create_author_tag( author );
|
|
var input = coauthors_create_author_hidden_input( author );
|
|
var $gravatar = coauthors_create_author_gravatar( author );
|
|
|
|
tag.append( $gravatar );
|
|
|
|
coauthors_add_to_table( co, tag, input, options );
|
|
|
|
if ( ! init ) {
|
|
// Create new author-suggest and append it to a new row
|
|
var newCO = coauthors_create_autosuggest( '', false );
|
|
coauthors_add_to_table( newCO );
|
|
move_loading( newCO );
|
|
}
|
|
}
|
|
|
|
co.bind( 'blur', coauthors_stop_editing );
|
|
|
|
// Set the value for the auto-suggest box to the co-author's name and hide it
|
|
// unescape() is deprecated, so replacing it with decodeURIComponent() here and every places.
|
|
co.val( decodeURIComponent( author.name ) )
|
|
.hide()
|
|
.unbind( 'focus' )
|
|
;
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/*
|
|
* Add the autosuggest box and text tag to the Co-Authors table
|
|
* @param object Autosuggest input box
|
|
* @param object Text tag
|
|
* @param
|
|
*/
|
|
function coauthors_add_to_table( co, tag, input, options ) {
|
|
if ( co ) {
|
|
var $div = jQuery( '<div/>' )
|
|
.addClass( 'suggest' )
|
|
.addClass( 'coauthor-row' )
|
|
.append( co )
|
|
.append( tag )
|
|
.append( input )
|
|
;
|
|
|
|
//Add buttons to row
|
|
if ( tag ) coauthors_insert_author_edit_cells( $div, options );
|
|
|
|
jQuery( '#coauthors-list' ).append( $div );
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Adds a delete and edit button next to a co-author
|
|
* @param object The row to which the new co-author should be added
|
|
*/
|
|
function coauthors_insert_author_edit_cells( $div, options ){
|
|
|
|
var $options = jQuery( '<div/>' )
|
|
.addClass( 'coauthors-author-options' )
|
|
;
|
|
|
|
if ( options.addDelete ) {
|
|
var deleteBtn = jQuery( '<span/>' )
|
|
.addClass( 'delete-coauthor' )
|
|
.text( coAuthorsPlusStrings.delete_label )
|
|
.bind( 'click', coauthors_delete_onclick )
|
|
;
|
|
$options.append( deleteBtn );
|
|
}
|
|
|
|
$div.append( $options );
|
|
return $div;
|
|
}
|
|
|
|
/*
|
|
* Creates autosuggest input box
|
|
* @param string [optional] Name of the co-author
|
|
* @param string [optional] Name to be applied to the input box
|
|
*/
|
|
function coauthors_create_autosuggest( authorName, inputName ) {
|
|
|
|
if ( ! inputName ) inputName = 'coauthorsinput[]';
|
|
|
|
var $co = jQuery( '<input/>' );
|
|
|
|
$co.attr({
|
|
'class': 'coauthor-suggest'
|
|
, 'name': inputName
|
|
})
|
|
.appendTo( $coauthors_div )
|
|
.suggest( coAuthorsPlus_ajax_suggest_link, {
|
|
onSelect: coauthors_autosuggest_select,
|
|
delay: 1000
|
|
})
|
|
.keydown( coauthors_autosuggest_keydown )
|
|
;
|
|
|
|
if ( authorName )
|
|
$co.attr( 'value', decodeURIComponent( authorName ) );
|
|
else
|
|
$co.attr( 'value', coAuthorsPlusStrings.search_box_text )
|
|
.focus( function(){ $co.val( '' ) } )
|
|
.blur( function(){ $co.val( coAuthorsPlusStrings.search_box_text ) } )
|
|
;
|
|
|
|
return $co;
|
|
|
|
}
|
|
|
|
// Callback for when a user selects a co-author
|
|
function coauthors_autosuggest_select() {
|
|
$this = jQuery( this );
|
|
var vals = this.value.split( '|' );
|
|
|
|
var author = {}
|
|
author.id = jQuery.trim( vals[0] );
|
|
author.login = jQuery.trim( vals[1] );
|
|
author.name = jQuery.trim( vals[2] );
|
|
author.email = jQuery.trim( vals[3] );
|
|
if( author.avatar !== '' ){
|
|
author.avatar = jQuery.trim( vals[5] );
|
|
}
|
|
|
|
// Decode user-nicename if it has special characters in it.
|
|
author.nicename = decodeURIComponent( jQuery.trim( vals[4] ) );
|
|
|
|
if ( author.id=='New' ) {
|
|
coauthors_new_author_display( name );
|
|
} else {
|
|
coauthors_add_coauthor( author, $this );
|
|
// Show the delete button if we now have more than one co-author
|
|
if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length > 1 )
|
|
jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).removeClass( 'hidden' );
|
|
}
|
|
}
|
|
|
|
// Prevent the enter key from triggering a submit
|
|
function coauthors_autosuggest_keydown( e ) {
|
|
if ( e.keyCode == 13 ) {return false;}
|
|
}
|
|
|
|
/*
|
|
* Blur handler for autosuggest input box
|
|
* @param event
|
|
*/
|
|
function coauthors_stop_editing( event ) {
|
|
|
|
var co = jQuery( this );
|
|
var tag = jQuery( co.next() );
|
|
|
|
co.attr( 'value',tag.text() );
|
|
|
|
co.hide();
|
|
tag.show();
|
|
|
|
// editing = false;
|
|
}
|
|
|
|
/*
|
|
* Creates the text tag for a co-author
|
|
* @param string Name of the co-author
|
|
*/
|
|
function coauthors_create_author_tag( author ) {
|
|
|
|
var $tag = jQuery( '<span></span>' )
|
|
.text( decodeURIComponent( author.name ) )
|
|
.attr( 'title', coAuthorsPlusStrings.input_box_title )
|
|
.addClass( 'coauthor-tag' )
|
|
// Add Click event to edit
|
|
.click( coauthors_edit_onclick );
|
|
return $tag;
|
|
}
|
|
|
|
function coauthors_create_author_gravatar( author ) {
|
|
|
|
var $gravatar = jQuery( '<img/>' )
|
|
.attr( 'alt', author.name )
|
|
.attr( 'src', author.avatar )
|
|
.addClass( 'coauthor-gravatar' )
|
|
;
|
|
return $gravatar;
|
|
}
|
|
|
|
/*
|
|
* Creates the text tag for a co-author
|
|
* @param string Name of the co-author
|
|
*/
|
|
function coauthors_create_author_hidden_input ( author ) {
|
|
var input = jQuery( '<input />' )
|
|
.attr({
|
|
'type': 'hidden',
|
|
'id': 'coauthors_hidden_input',
|
|
'name': 'coauthors[]',
|
|
'value': decodeURIComponent( author.nicename )
|
|
})
|
|
;
|
|
|
|
return input;
|
|
}
|
|
|
|
var $coauthors_div = null;
|
|
|
|
/**
|
|
* Initialize the Coauthors UI.
|
|
*
|
|
* @param array List of coauthors objects.
|
|
* Each coauthor object should have the (string) properties:
|
|
* login
|
|
* email
|
|
* name
|
|
* nicename
|
|
*/
|
|
function coauthors_initialize( post_coauthors ) {
|
|
// Add the controls to add co-authors
|
|
|
|
$coauthors_div = jQuery( '#coauthors-edit' );
|
|
|
|
if ( $coauthors_div.length ) {
|
|
// Create the co-authors table
|
|
var table = jQuery( '<div/>' )
|
|
.attr( 'id', 'coauthors-list' )
|
|
;
|
|
$coauthors_div.append( table );
|
|
}
|
|
|
|
// Select co-authors already added to the post
|
|
var addedAlready = [];
|
|
//jQuery('#the-list tr').each(function(){
|
|
var count = 0;
|
|
jQuery.each( post_coauthors, function() {
|
|
coauthors_add_coauthor( this, undefined, true, count );
|
|
count++;
|
|
});
|
|
|
|
// Hide the delete button if there's only one co-author
|
|
if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length < 2 )
|
|
jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).addClass( 'hidden' );
|
|
|
|
|
|
// Create new author-suggest and append it to a new row
|
|
var newCO = coauthors_create_autosuggest( '', false );
|
|
coauthors_add_to_table( newCO );
|
|
|
|
$coauthors_loading = jQuery( '#publishing-action .spinner' ).clone().attr( 'id', 'coauthors-loading' );
|
|
move_loading( newCO );
|
|
|
|
|
|
// Make co-authors sortable so an editor can control the order of the co-authors
|
|
jQuery( '#coauthors-edit' ).ready(function( $ ) {
|
|
$( '#coauthors-list' ).sortable({
|
|
axis: 'y',
|
|
handle: '.coauthor-tag',
|
|
placeholder: 'ui-state-highlight',
|
|
items: 'div.coauthor-row:not(div.coauthor-row:last)',
|
|
containment: 'parent',
|
|
});
|
|
});
|
|
|
|
}
|
|
|
|
|
|
function show_loading() {
|
|
$coauthors_loading.css( 'visibility', 'visible' );
|
|
}
|
|
function hide_loading() {
|
|
$coauthors_loading.css( 'visibility', 'hidden' );
|
|
}
|
|
function move_loading( $input ) {
|
|
$coauthors_loading.insertAfter( $input );
|
|
}
|
|
// Show laoding cursor for autocomplete ajax requests
|
|
jQuery( document ).ajaxSend(function( e, xhr, settings ) {
|
|
if ( settings.url.indexOf( coAuthorsPlus_ajax_suggest_link ) != -1 ) {
|
|
// Including existing authors on the AJAX suggest link
|
|
// allows us to filter them out of the search request
|
|
var existing_authors = jQuery( 'input[name="coauthors[]"]' ).map(function(){return jQuery( this ).val();}).get();
|
|
settings.url = settings.url.split( '&existing_authors' )[0];
|
|
settings.url += '&existing_authors=' + existing_authors.join( ',' );
|
|
show_loading();
|
|
}
|
|
});
|
|
// Hide laoding cursor when autocomplete ajax requests are finished
|
|
jQuery( document ).ajaxComplete(function( e, xhr, settings ) {
|
|
if ( settings.url.indexOf( coAuthorsPlus_ajax_suggest_link ) != -1 )
|
|
hide_loading();
|
|
});
|
|
|
|
if ( 'post-php' == adminpage || 'post-new-php' == adminpage ) {
|
|
var $post_coauthor_logins = jQuery( 'input[name="coauthors[]"]' );
|
|
var $post_coauthor_names = jQuery( 'input[name="coauthorsinput[]"]' );
|
|
var $post_coauthor_emails = jQuery( 'input[name="coauthorsemails[]"]' );
|
|
var $post_coauthor_nicenames = jQuery( 'input[name="coauthorsnicenames[]"]' );
|
|
var $post_coauthoravatars = jQuery( 'input[name="coauthorsavatars[]"]' );
|
|
|
|
var post_coauthors = [];
|
|
|
|
for ( var i = 0; i < $post_coauthor_logins.length; i++ ) {
|
|
post_coauthors.push({
|
|
login: $post_coauthor_logins[i].value,
|
|
name: $post_coauthor_names[i].value,
|
|
email: $post_coauthor_emails[i].value,
|
|
nicename: $post_coauthor_nicenames[i].value,
|
|
avatar: $post_coauthoravatars[i].value,
|
|
});
|
|
}
|
|
|
|
// Remove the read-only co-authors so we don't get craziness
|
|
jQuery( '#coauthors-readonly' ).remove();
|
|
coauthors_initialize( post_coauthors );
|
|
}
|
|
else if ( 'edit-php' == adminpage ) {
|
|
|
|
var wpInlineEdit = inlineEditPost.edit;
|
|
|
|
inlineEditPost.edit = function( id ) {
|
|
|
|
wpInlineEdit.apply( this, arguments )
|
|
|
|
// get the post ID
|
|
var postId = 0
|
|
if ( typeof( id ) == 'object' )
|
|
postId = parseInt( this.getId( id ) )
|
|
|
|
if ( postId > 0 ) {
|
|
|
|
var $postRow = jQuery( '#post-' + postId )
|
|
|
|
// Move the element to the appropriate position in the view
|
|
// JS hack for core bug: https://core.trac.wordpress.org/ticket/26982
|
|
jQuery( '.quick-edit-row .inline-edit-col-left .inline-edit-col' ).find( '.inline-edit-coauthors' ).remove() // remove any previously added elements
|
|
var el = jQuery( '.inline-edit-group.inline-edit-coauthors', '#edit-' + postId );
|
|
el.detach().appendTo( '.quick-edit-row .inline-edit-col-left .inline-edit-col' ).show();
|
|
|
|
// initialize co-authors
|
|
var post_coauthors = jQuery.map( jQuery( '.column-coauthors a', $postRow ), function( el ) {
|
|
return {
|
|
login: jQuery( el ).data( 'user_login' ),
|
|
name: jQuery( el ).data( 'display_name' ),
|
|
email: jQuery( el ).data( 'user_email' ),
|
|
nicename: jQuery( el ).data( 'user_nicename' ),
|
|
avatar: jQuery( el ).data( 'avatar' ),
|
|
}
|
|
});
|
|
|
|
coauthors_initialize( post_coauthors );
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
if ( typeof( console ) === 'undefined' ) {
|
|
var console = {}
|
|
console.log = console.error = function() {};
|
|
}
|