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(""); 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 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 ' ); $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( '' ) .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( '' ) .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( '' ) .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( '
' ) .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() {}; }