Plugin Directory

Changeset 2681436


Ignore:
Timestamp:
02/18/2022 03:09:45 PM (4 years ago)
Author:
dougwollison
Message:

Version 2.9.2 release, pulled from GitHub

Location:
nlingual
Files:
70 added
16 edited

Legend:

Unmodified
Added
Removed
  • nlingual/trunk/includes/class-nlingual-backend.php

    r2339414 r2681436  
    195195     * This prevents login issues when accessing /en/wp-admin or similar.
    196196     *
     197     * @since 2.9.2 Fix wp_redirect() call, specify redirected-by.
    197198     * @since 2.6.0
    198199     */
     
    200201        if ( ( $the_url = Rewriter::process_url() ) && isset( $the_url->meta['language'] ) ) {
    201202            if ( $the_url->meta['source'] !== 'query' ) {
    202                 if ( wp_redirect( $the_url->build(), $status ) ) {
     203                if ( wp_redirect( $the_url->build(), 302, 'nLingual' ) ) {
    203204                    exit;
    204205                }
     
    656657     * Print the content of the language/translations column.
    657658     *
     659     * @since 2.9.2 Restructure to list each language rather than each translation,
     660     *              with a create link for missing translations.
    658661     * @since 2.1.0 Added bypass of language_is_required.
    659662     * @since 2.0.0
     
    692695        printf( '<strong>%s</strong>', $language->system_name );
    693696
    694         // Now print out the translations
    695         $translations = Translator::get_post_translations( $post_id );
    696         if ( $translations ) {
    697             echo '<ul>';
    698             foreach ( $translations as $language_id => $post ) {
    699                 if ( $language = Registry::get_language( $language_id ) ) {
    700                     echo '<li>';
    701                     printf( '<input type="hidden" class="nl-translation-%d" value="%d" />', $language->id, $post );
    702                     $link = sprintf( '<a href="%s" target="_blank">%s</a>', get_edit_post_link( $post ), get_the_title( $post ) ?: __( '(no title)' ) );
    703                     /* translators: %1$s = The name of the language, %2$s = The title of the post, wrapped in a link */
    704                     _efx( '%1$s: %2$s', 'language: title', 'nlingual', $language->system_name, $link );
    705                     echo '<li>';
     697        // Print links to either existing translations or Translate This actions.
     698        $links = array();
     699        foreach ( Registry::languages() as $other_language ) {
     700            if ( $language->id === $other_language->id ) {
     701                continue;
     702            }
     703
     704            $translation = Translator::get_post_translation( $post_id, $other_language );
     705
     706            $link = sprintf( '<input type="hidden" class="nl-translation-%d" value="%d" />', $other_language->id, $translation );
     707            if ( $translation ) {
     708                $title = get_the_title( $translation );
     709                // Edit or view link depending on permissions
     710                if ( $edit_link = get_edit_post_link( $translation ) ) {
     711                    $link .= sprintf( '<a href="%s" target="_blank">%s</a>', $edit_link, $title ?: __( '(no title)' ) );
     712                } else {
     713                    $link .= sprintf( '<a href="%s" target="_blank">%s</a>', get_permalink( $translation ), $title ?: __( '(no title)' ) );
    706714                }
    707             }
    708             echo '</ul>';
     715            } elseif ( $translation_link = get_translate_post_link( $post_id, $other_language->id ) ) {
     716                $link .= sprintf( '<a href="%s" target="_blank">%s</a>', $translation_link, __( '[Create translation]' ) );
     717            } else {
     718                $link .= __( '[No translation]' );
     719            }
     720
     721            /* translators: %1$s = The name of the language, %2$s = The title of the post, wrapped in a link */
     722            $links[] = _fx( '%1$s: %2$s', 'language: title', 'nlingual', $other_language->system_name, $link );
     723        }
     724        if ( $links ) {
     725            echo '<ul><li>' . implode( '</li><li>', $links ) . '</li></ul>';
    709726        }
    710727    }
     
    13211338     * Will redirect to the edit screen for the new translation.
    13221339     *
     1340     * @since 2.9.2 Add permissions check, redirected-by for wp_redirect().
    13231341     * @since 2.6.0
    13241342     *
     
    13391357        if ( ! $post ) {
    13401358            wp_die( __( 'Error creating translation: specified post not found.', 'nlingual' ) );
     1359        }
     1360
     1361        // Check permissions, must be able to create posts
     1362        $post_type_obj = get_post_type_object( $post->post_type );
     1363        if ( current_user_can( $post_type_obj->create_posts ) ) {
     1364            wp_die( __( 'You are now allowed to create a translation for this post.', 'nlingual' ) );
    13411365        }
    13421366
     
    13901414
    13911415        // Redirect to the edit screen
    1392         if ( wp_redirect( $edit_link, 302 ) ) {
     1416        if ( wp_redirect( $edit_link, 302, 'nLingual' ) ) {
    13931417            exit;
    13941418        }
  • nlingual/trunk/includes/class-nlingual-frontend.php

    r2449432 r2681436  
    129129     * or if the language requested is inactive.
    130130     *
     131     * @since 2.9.2 Specify redirected-by for wp_redirect().
    131132     * @since 2.9.1 Added check for sitemap requests.
    132133     * @since 2.6.0 Allow inactive language if user is logged in.
     
    209210            // Exit if redirect was successful
    210211            header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
    211             if ( wp_redirect( $redirect_url, $status ) ) {
     212            if ( wp_redirect( $redirect_url, $status, 'nLingual' ) ) {
    212213                exit;
    213214            }
     
    289290     * Replaces the registered nav menus with versions for each active language.
    290291     *
     292     * @since 2.9.2 Ensure $_wp_registered_nav_menus is populated.
    291293     * @since 2.0.0
    292294     *
     
    298300        global $_wp_registered_nav_menus;
    299301
    300         $locations = self::localize_locations( 'nav_menu', $locations, $_wp_registered_nav_menus );
     302        if ( $_wp_registered_nav_menus ) {
     303            $locations = self::localize_locations( 'nav_menu', $locations, $_wp_registered_nav_menus );
     304        }
    301305
    302306        return $locations;
     
    306310     * Replaces the registered sidebars with versions for each active language.
    307311     *
     312     * @since 2.9.2 Ensure $wp_registered_sidebars is populated.
    308313     * @since 2.0.0
    309314     *
     
    315320        global $wp_registered_sidebars;
    316321
    317         $locations = self::localize_locations( 'sidebar', $locations, $wp_registered_sidebars );
     322        if ( $wp_registered_sidebars ) {
     323            $locations = self::localize_locations( 'sidebar', $locations, $wp_registered_sidebars );
     324        }
    318325
    319326        return $locations;
     
    345352        }
    346353
     354        // If the location is set but not already localizable, localize the items
     355        $localize_items = $theme_location && ! Registry::is_location_supported( 'nav_menu', $theme_location );
     356
     357        /**
     358         * Filters the result.
     359         *
     360         * @since 2.9.2
     361         *
     362         * @param bool   $localize_items Wether or not to localize menu items.
     363         * @param object $menu           The menu being considered.
     364         * @param array  $items          The items for the menu.
     365         */
     366        $localize_items = apply_filters( 'nlingual_localize_menu_items', $localize_items, $menu, $items );
     367
    347368        // Don't bother if the location wasn't found or is already localizable
    348         if ( $theme_location && ! Registry::is_location_supported( 'nav_menu', $theme_location ) ) {
     369        if ( $localize_items ) {
    349370            // Loop through each item, attempt to localize
    350371            foreach ( $items as $item ) {
     
    781802     * Add a Translate This node/menu to the Admin Bar.
    782803     *
     804     * @since 2.9.2 Check create_posts rather than edit_post, ensure
     805     *              links are added before registering menu.
    783806     * @since 2.6.0
    784807     *
     
    794817        && Translator::get_post_language( $current_object->ID, 'true value' )
    795818        && ( $post_type_object = get_post_type_object( $current_object->post_type ) )
    796         && current_user_can( 'edit_post', $current_object->ID )
     819        && current_user_can( $post_type_object->cap->create_posts )
    797820        && $post_type_object->show_in_admin_bar ) {
    798821            // Compile a list of missing language translations
     
    809832            }
    810833
    811             // Add the menu item
    812             $label = property_exists( $post_type_object->labels, 'translate_item' ) ? $post_type_object->labels->translate_item : __( 'Translate This', 'nlingual' );
    813             $wp_admin_bar->add_menu( array(
    814                 'id' => 'nlingual',
    815                 'title' => $label,
    816             ) );
    817 
    818834            // Add links for each missing language
     835            $has_links = false;
    819836            foreach ( $missing_translations as $language ) {
    820                 $wp_admin_bar->add_node( array(
    821                     'parent' => 'nlingual',
    822                     'id' => 'nlingual-' . $language->slug,
    823                     'title' => _f( 'Translate to %s', 'nlingual', $language->system_name ),
    824                     'href' => get_translate_post_link( $current_object->ID, $language->id ),
     837                $translate_link = get_translate_post_link( $current_object->ID, $language->id );
     838                if ( $translate_link ) {
     839                    $has_links = true;
     840                    $wp_admin_bar->add_node( array(
     841                        'parent' => 'nlingual',
     842                        'id' => 'nlingual-' . $language->slug,
     843                        'title' => _f( 'Translate to %s', 'nlingual', $language->system_name ),
     844                        'href' => $translate_link,
     845                    ) );
     846                }
     847            }
     848
     849            // Add the menu item if we have links
     850            if ( $has_links ) {
     851                $label = property_exists( $post_type_object->labels, 'translate_item' ) ? $post_type_object->labels->translate_item : __( 'Translate This', 'nlingual' );
     852                $wp_admin_bar->add_menu( array(
     853                    'id' => 'nlingual',
     854                    'title' => $label,
    825855                ) );
    826856            }
  • nlingual/trunk/includes/class-nlingual-localizer.php

    r2375574 r2681436  
    412412            }
    413413            // For terms, check for taxonomy
    414             elseif ( $meta_type == 'post' ) {
     414            elseif ( $meta_type == 'term' ) {
    415415                // Default to general edit-tags base
    416416                $args['screen'] = array( 'base', 'edit-tags' );
  • nlingual/trunk/includes/class-nlingual-manager.php

    r2449445 r2681436  
    437437                    'domain' => __( 'Subdomain', 'nlingual' ),
    438438                ),
     439            ),
     440            'use_accepted_language'  => array(
     441                'title' => __( 'Use visitor’s browser language?', 'nlingual' ),
     442                'help'  => __( 'Unless requesting the page in another language, visitors will be redirected to the language their browser uses, if available.', 'nlingual' ),
     443                'type'  => 'checkbox',
    439444            ),
    440445            'skip_default_l10n' => array(
  • nlingual/trunk/includes/class-nlingual-registry.php

    r2375574 r2681436  
    118118        // - The URL redirection method
    119119        'url_rewrite_method' => 'get',
     120        // - Use visitor's browser language
     121        'use_accepted_language' => true,
    120122        // - The skip default language localizing option
    121123        'skip_default_l10n' => true,
     
    361363     * @param bool   $inverse Optional. The inverse option to pass to Languages->filter().
    362364     *
    363      * @return Language The languages collection (optionally filtered).
     365     * @return Languages The languages collection (optionally filtered).
    364366     */
    365367    public static function languages( $filter = null, $value = null, $inverse = false ) {
     
    781783
    782784        // Accepted language matches another, does not apply
    783         $accepted_language = self::accepted_language();
    784         if ( $accepted_language && ! self::is_language_default( $accepted_language ) ) {
    785             // This allows localization of the default language
    786             // in order to override using the accepted language
    787             return false;
     785        if ( self::get( 'use_accepted_language' ) ) {
     786            $accepted_language = self::accepted_language();
     787            if ( $accepted_language && ! self::is_language_default( $accepted_language ) ) {
     788                // This allows localization of the default language
     789                // in order to override using the accepted language
     790                return false;
     791            }
    788792        }
    789793
  • nlingual/trunk/includes/class-nlingual-rewriter.php

    r2449432 r2681436  
    374374     * Attempt to localize the current page URL.
    375375     *
     376     * @since 2.9.2 Fix handling for paginated posts/pages.
    376377     * @since 2.9.0 Add checks for SINGLE term/post_type query.
    377378     * @since 2.8.9 Unset s in query string when getting search link.
     
    398399     */
    399400    public static function localize_here( $language = null ) {
    400         global $wp_query;
     401        global $wp_query, $wp_rewrite;
    401402
    402403        // Ensure $language is a Language, defaulting to current
     
    418419        // If the queried object is a post, use it's permalink
    419420        elseif ( is_a( $queried_object, 'WP_Post' ) ) {
    420             // Get the permalink for the translation in the specified language if applicable
     421            // Switch to the translation if applicable
    421422            if ( Registry::is_post_type_supported( $queried_object->post_type ) ) {
    422423                $translation = Translator::get_post_translation( $queried_object->ID, $language, 'return self' );
    423                 $url = get_permalink( $translation );
    424             } else {
    425                 $url = get_permalink( $queried_object->ID );
     424                $queried_object = get_post( $translation );
    426425            }
    427426
    428427            // Relocalize the URL
     428            $url = get_permalink( $queried_object->ID );
    429429            $url = self::localize_url( $url, $language );
     430
     431            // Handle pagination (e.g. nextpage) if present
     432            // mostly copied from _wp_link_page()
     433            if ( ( $page = get_query_var( 'page' ) ) && $page > 1 ) {
     434                if ( ! get_option( 'permalink_structure' ) || in_array( $queried_object->post_status, array( 'draft', 'pending' ), true ) ) {
     435                    $url = add_query_arg( 'page', $page, $url );
     436                } else {
     437                    $url .= user_trailingslashit( $page, 'single_paged' );
     438                }
     439            }
    430440        } else {
    431441            // Switch to the language (redundant for current one but doesn't matter)
     
    451461            // Author archive? Get the link
    452462            elseif ( is_author() ) {
    453                 $url = get_the_author_posts_link( get_queried_object_id() );
     463                $url = get_author_posts_url( get_queried_object_id() );
    454464            }
    455465            // Date archive? Get link
     
    487497        // Check if paged and add entry to $url_data
    488498        if ( is_paged() ) {
    489             $the_url->page = get_query_var( 'paged' );
     499            $the_url->page = get_query_var( 'paged' ) ?: get_query_var( 'page' );
    490500        }
    491501
  • nlingual/trunk/includes/class-nlingual-settings.php

    r2375574 r2681436  
    377377     * Build a sync settings interface.
    378378     *
     379     * @since 2.9.2 Ensure post_format is included if object type supports it
    379380     * @since 2.4.0 Ensure post_fields/terms/meta entries are present.
    380381     * @since 2.0.0
     
    412413        // Taxonomies values
    413414        $post_taxs = get_object_taxonomies( $post_type, 'objects' );
     415        // post_format won't be retrieved for custom post types, check support
     416        if ( ! isset( $post_taxs['post_format'] ) && post_type_supports( $post_type, 'post-formats' ) ) {
     417            $post_taxs['post_format'] = get_taxonomy( 'post_format' );
     418        }
    414419        foreach ( $post_taxs as &$tax ) {
    415420            $tax = $tax->labels->name;
  • nlingual/trunk/includes/class-nlingual-synchronizer.php

    r2375574 r2681436  
    137137     * Copy desired post fields, meta data, and terms from the original to target.
    138138     *
     139     * @since 2.9.2 Need to slash data for sync; blocks break otherwise.
    139140     * @since 2.8.7 Fix date sync to bypass date clearing on draft targets.
    140141     * @since 2.8.5 Fixed get_rules() call to specify post_type.
     
    243244            // Apply the updates
    244245            $changes[ 'ID' ] = $target->ID;
    245             wp_update_post( $changes );
     246            wp_update_post( wp_slash( $changes ) );
    246247        }
    247248
     
    354355     * All fields, meta data and terms are copied.
    355356     *
     357     * @since 2.9.2 Need to slash data for cloning; blocks break otherwise.
    356358     * @since 2.9.0 Drop custom title support.
    357359     * @since 2.8.0 Copy only mandatory post fields, leave the rest to sync_posts().
     
    406408
    407409        // Insert and get the ID
    408         $translation = wp_insert_post( $post_data );
     410        $translation = wp_insert_post( wp_slash( $post_data ) );
    409411
    410412        // Check if it worked
  • nlingual/trunk/includes/class-nlingual-system.php

    r2449432 r2681436  
    417417            Frontend::restore_all_hooks();
    418418            Backend::restore_all_hooks();
    419             AJAX::restore_all_hooks();
    420419            Manager::restore_all_hooks();
    421420            Documenter::restore_all_hooks();
     
    447446            Frontend::remove_all_hooks();
    448447            Backend::remove_all_hooks();
    449             AJAX::remove_all_hooks();
    450448            Manager::remove_all_hooks();
    451449            Documenter::remove_all_hooks();
     
    462460     * Detect the language based on the request or browser info.
    463461     *
     462     * @since 2.9.2 Check use_accepted_language before retrieving.
    464463     * @since 2.9.0 Drop redirect handling, let Frontend handle it.
    465464     * @since 2.7.0 Checked for skip_default_l10n option before getting accepted language.
     
    489488        }
    490489        // Fallback to the accepted language
    491         elseif ( $language = Registry::accepted_language() ) {
     490        elseif ( Registry::get( 'use_accepted_language' ) && $language = Registry::accepted_language() ) {
    492491            $source = 'accept';
    493492        }
     
    982981        foreach ( $languages as $language ) {
    983982            $language_slugs[] = $language->slug;
    984             $language_ids[] = (string) $language->id;
     983            $language_ids[] = $language->id;
     984        }
     985
     986        $default_slugs = array( Registry::current_language()->slug );
     987        if ( ! Registry::get( 'language_is_required' ) ) {
     988            $language_ids[] = 0;
     989            $default_slugs[] = 0;
    985990        }
    986991
    987992        $query_params[ $query_var ] = array(
    988             'default'           => Registry::current_language()->slug,
     993            'default'           => $default_slugs,
    989994            'description'       => __( 'Limit result set to posts assigned one or more registered languages.', 'nlingual' ),
    990995            'type'              => 'array',
    991996            'items'             => array(
    992997                'enum'          => array_merge( $language_slugs, $language_ids ),
    993                 'type'          => 'string',
     998                'type'          => array( 'string', 'number' ),
    994999            ),
    9951000        );
     
    10121017
    10131018        if ( $languages = $request->get_param( $query_var ) ) {
    1014             $args[ $query_var ] = $languages;
     1019            $args[ $query_var ] = array_map( 'strval', $languages );
    10151020        }
    10161021
  • nlingual/trunk/includes/class-nlingual-url.php

    r2464358 r2681436  
    166166     * Export the URL back into a string.
    167167     *
     168     * @since 2.9.2 Check for permalink struct for $page compiling.
    168169     * @since 2.9.1 Drop $query use, rewrite $args compiling.
    169170     * @since 2.9.0 Fixed path being modified during build.
     
    176177     */
    177178    public function build() {
     179        global $wp_rewrite;
     180
    178181        $url = '';
    179182
     
    210213        $path = $this->path;
    211214
    212         // If the page property is present, add it to the path
     215        // If the page property is present, add it to args or path
    213216        if ( $this->page ) {
    214             $path = rtrim( $path, '/' ) . sprintf( '/page/%d/', rtrim( $this->page, '/' ) );
     217            if ( ! get_option( 'permalink_structure' ) ) {
     218                $this->args['page'] = $this->page;
     219            } else {
     220                $path .= user_trailingslashit( "{$wp_rewrite->pagination_base}/" . $this->page, 'single_paged' );
     221            }
    215222        }
    216223
  • nlingual/trunk/includes/functions-nlingual.php

    r2419759 r2681436  
    127127 * Generate a link to create a clone of a post for translation.
    128128 *
     129 * @since 2.9.2 Add create_posts permissions check.
    129130 * @since 2.6.0
    130131 *
     
    132133 * @param int $language_id The ID of the language to translate to.
    133134 *
    134  * @return string The URL to use.
     135 * @return string|null The URL to use.
    135136 */
    136137function get_translate_post_link( $post_id, $language_id ) {
     138    $post = get_post( $post_id );
     139    if ( ! $post ) {
     140        return null;
     141    }
     142
     143    $post_type_obj = get_post_type_object( $post->post_type );
     144    if ( ! current_user_can( $post_type_obj->cap->create_posts ) ) {
     145        return null;
     146    }
     147
    137148    $url = admin_url( 'admin-post.php?' ) . http_build_query( array(
    138149        'action' => 'nl_new_translation',
  • nlingual/trunk/js/admin.js

    r2375574 r2681436  
    421421
    422422        if ( typeof tinymce === 'object' ) {
     423            function localizeEditor( editor ) {
     424                var $field = $( editor.getElement() ),
     425                    $control = $field.data( '$nl_localizer' );
     426
     427                if ( ! $control ) {
     428                    return;
     429                }
     430
     431                editor.on( 'init', () => {
     432                    $( editor.getContainer() ).parent().after( $control );
     433                } );
     434
     435                $field.on( 'nl:localizer:update', () => {
     436                    // Get the content, clean it
     437                    var content = wpEditor.removep( editor.getContent() );
     438
     439                    $field.val( content );
     440                } );
     441
     442                $field.on( 'nl:localizer:change', () => {
     443                    // Get the value, process it
     444                    var content = wpEditor.autop( $field.val() );
     445
     446                    editor.setContent( content );
     447                } );
     448            }
     449
     450            // Handle existing editors
     451            tinymce.editors.forEach( localizeEditor );
     452
     453            // Backwards compatiblity; catch any late-registered editors
    423454            tinymce.on( 'SetupEditor', e => {
    424455                // TinyMCE 4.7 changes callback arg to event CONTAINING editor
    425456                var editor = e.editor || e;
    426457
    427                 var $field = $( editor.getElement() ),
    428                     $control = $field.data( '$nl_localizer' );
    429 
    430                 if ( ! $control ) {
    431                     return;
    432                 }
    433 
    434                 editor.on( 'init', () => {
    435                     $( editor.getContainer() ).parent().after( $control );
    436                 } );
    437 
    438                 $field.on( 'nl:localizer:update', () => {
    439                     // Get the content, clean it
    440                     var content = wpEditor.removep( editor.getContent() );
    441 
    442                     $field.val( content );
    443                 } );
    444 
    445                 $field.on( 'nl:localizer:change', () => {
    446                     // Get the value, process it
    447                     var content = wpEditor.autop( $field.val() );
    448 
    449                     editor.setContent( content );
    450                 } );
     458                localizeEditor( editor );
    451459            } );
    452460
  • nlingual/trunk/js/admin.min.js

    r2375574 r2681436  
    1 !function(){"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n})(e)}function e(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(n)))return;var t=[],a=!0,l=!1,i=void 0;try{for(var r,o=n[Symbol.iterator]();!(a=(r=o.next()).done)&&(t.push(r.value),!e||t.length!==e);a=!0);}catch(n){l=!0,i=n}finally{try{a||null==o.return||o.return()}finally{if(l)throw i}}return t}(n,e)||function(n,e){if(!n)return;if("string"==typeof n)return t(n,e);var a=Object.prototype.toString.call(n).slice(8,-1);"Object"===a&&n.constructor&&(a=n.constructor.name);if("Map"===a||"Set"===a)return Array.from(n);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return t(n,e)}(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function t(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,a=new Array(e);t<e;t++)a[t]=n[t];return a}var a,l,i,r,o,c,d,s;a=window.nLingual={},l=a.Framework={},i=l.Language=Backbone.Model.extend({defaults:{system_name:"",native_name:"",short_name:"",iso_code:"",slug:"",locale_name:"",direction:"",active:!0}}),r=l.LanguageSet=Backbone.Collection.extend({model:i}),o=l.LocalizableField=Backbone.Model.extend({idAttribute:"field",defaults:{field_id:"",values:"",nonce:""}}),c=l.LocalizableFieldSet=Backbone.Collection.extend({model:o}),d=a.Languages=new r,s=a.LocalizableFields=new c,jQuery((function(t){t(".nl-checkall").change((function(){var n=t(this).data("name");t('input[name="'.concat(n,'[]"]')).attr("checked",this.checked)})),t(".nl-matchall").change((function(){var n=t(this).data("name");t('[name="'.concat(n,'"]')).val(this.checked?"*":"")})),t(".nl-section-content").hide(),t(".nl-section-toggle").each((function(){t(this).data("text",t(this).text())})).click((function(){var n=t(this),e=n.parent();e.toggleClass("open");var a=e.hasClass("open");e.find(".nl-section-content").animate({height:"toggle"}),n.text(n.data(a?"alt":"text"))})),t(".nl-preview").on("nl:render",(function(){var n,e=d.get(t("#nlingual_default_language").val()),a=e&&e.get("slug")||"en",l=t("#nlingual_query_var").val()||"nl_language",i=t("#nlingual_skip_default_l10n").is(":checked"),r=t("#nlingual_post_language_override").is(":checked");n=t(this).hasClass("nl-url-preview")?t(this).data(i?"excluded":"included"):t(this).hasClass("nl-override-preview")?t(this).data(r?"on":"off"):t(this).data("format"),t(this).text(n.replace(/%l/g,a).replace(/%v/g,l))})).trigger("nl:render"),t("#nlingual_default_language").change((function(){t(".nl-preview").trigger("nl:render")})),t("#nlingual_skip_default_l10n").change((function(){t(".nl-preview").trigger("nl:render")})),t("#nlingual_post_language_override").change((function(){t(".nl-preview").trigger("nl:render")})),t("#nlingual_query_var").on("keyup change",(function(){t(".nl-preview").trigger("nl:render")})),t(".nl-preview").hide().filter(".nl-redirect-get").show(),t('input[name="nlingual_options[url_rewrite_method]"]').change((function(){var n=t(this).val();this.checked&&n&&t(".nl-preview").hide().filter(".nl-redirect-".concat(n)).show()})).change(),t("#nlingual_languages").each((function(){var n=t(this),e=t("#nl_language_preset"),l=t("#nl_language_list"),r=t("#nl_language_add"),o=t("#nl_language_row").text(),c=-1;for(var s in l.sortable({items:"tr",containment:"parent",handle:".handle"}),a.presets)e.append('<option value="'.concat(s,'">').concat(a.presets[s].system_name,"</option>"));function u(n){var e=o.replace(/%id%/g,n.id);for(var a in n.attributes){var i=new RegExp("%"+a+"%","g");e=e.replace(i,n.get(a))}var r=t(e);r.find('.nl-language-direction input[value="'.concat(n.get("direction"),'"]')).attr("checked",!0),r.find(".nl-language-active input").attr("checked",n.get("active")),l.append(r).sortable("refresh")}d.each(u),r.click((function(){var n;if(e.val()){var t=e.val();(n=new i(a.presets[t])).set("iso_code",t),e.val(null)}else n=new i;n.id=c,n.set("slug",n.get("iso_code")),n.set("active",!0),u(n),c--})),n.on("change",".nl-language-delete input",(function(){var n=t(this).parents("tr").first();n.toggleClass("todelete",this.checked),n.find("input").not(this).attr("disabled",this.checked)})),n.on("change",".nl-language-system_name input",(function(){var n=t(this).parents("tr").first(),e=t(this).val(),a=n.find(".nl-language-locale_name input"),l=n.find(".nl-language-iso_code input"),i=n.find(".nl-language-slug input");l.val()||l.val(e.substr(0,2).toLowerCase()),a.val()||a.val(l.val()),i.val()||i.val(l.val())}))}));var l=t('<div class="nl-localizer"></div>').html((function(){var n='<div class="nl-localizer-toggle" title="'.concat(nlingualL10n.LocalizeThis,'"></div>');return d.each((function(e){var t=nlingualL10n.LocalizeFor.replace("%s",e.get("system_name"));n+='<div class="nl-localizer-option" title="'.concat(t,'" data-nl_language="').concat(e.id,'">\n\t\t\t\t\t<div class="nl-option-text" data-slug="').concat(e.get("slug"),'">').concat(e.get("system_name"),"</div>\n\t\t\t\t</div>")})),n}));s.each((function(n){var e=n.get("field_id"),i=n.get("values"),r=n.get("nonce"),o=!1,c=t("#"+e);if(0!==c.length&&c.is("input, textarea")){var s;c.addClass("nl-localizable-input"),c.hasClass("wp-editor-area")?s=c.parents(".wp-editor-wrap"):(c.wrap('<div class="nl-localizable"></div>'),s=c.parent());var u=l.clone();c.data("$nl_localizer",u),u.data("nl_current_language",a.default_language),u.data("$nl_localizer_field",c);var g=t('<input type="hidden" />');g.attr("name",c.attr("name")),g.val(c.val()),g.appendTo(s),u.data("$nl_localized_".concat(a.default_language),g),d.each((function(n){if(a.default_language!==n.id){var e=i[n.id]||null,l=t('<input type="hidden" />');l.attr("name","nlingual_localized[".concat(c.attr("name"),"][").concat(n.id,"]")),l.val(e),u.data("$nl_localized_".concat(n.id),l),l.appendTo(s),""!==e&&null!==e&&(o=!0)}})),o&&u.find('[data-nl_language="'.concat(a.default_language,'"]')).addClass("nl-current"),s.append('<input type="hidden" name="_nl_l10n_nonce['.concat(n.id,']" value="').concat(r,'" />')),u.appendTo(s)}})),t("body").on("click",".nl-localizer-option",(function(){var n=t(this),e=n.parent(),l=n.data("nl_language")||a.default_language;t(this).addClass("nl-current").siblings().removeClass("nl-current");var i=e.data("$nl_localizer_field"),r=e.data("$nl_localized_".concat(l));i.trigger("nl:localizer:update"),e.data("nl_current_language",l);var o=r.val(),c=r.attr("name");i.val(o).attr("name",c),i.trigger("nl:localizer:change")})),t("body").on("input nl:localizer:update nl:localizer:save",".nl-localizable-input",(function(){var n=t(this).data("$nl_localizer"),e=n.data("nl_current_language");n.data("$nl_localized_".concat(e)).val(this.value)}));var r=wp.oldEditor||wp.editor;if("object"===("undefined"==typeof tinymce?"undefined":n(tinymce))){tinymce.on("SetupEditor",(function(n){var e=n.editor||n,a=t(e.getElement()),l=a.data("$nl_localizer");l&&(e.on("init",(function(){t(e.getContainer()).parent().after(l)})),a.on("nl:localizer:update",(function(){var n=r.removep(e.getContent());a.val(n)})),a.on("nl:localizer:change",(function(){var n=r.autop(a.val());e.setContent(n)})))}));var o=tinymce.Editor.prototype.save;tinymce.Editor.prototype.save=function(){o.apply(this,arguments),this.fire("SavedContent"),t(this.getElement()).trigger("nl:localizer:save")}}if(t(".nl-language-input").change((function(){var n=t(this).val(),e=t(this).parents(".nl-translation-manager");e.find(".nl-manage-translations").toggleClass("hidden","0"===n),e.find(".nl-translation-field").show(),e.find(".nl-translation-"+n).hide()})).change(),t(".nl-translation-field").each((function(){var n=t(this).find(".nl-input").val(),e=t(this).find(".nl-add-translation"),a=t(this).find(".nl-edit-translation");a.hide(),parseInt(n,10)&&(e.hide(),a.show())})),t(".nl-add-translation").click((function(){var n=t(this).parents(".nl-field"),a=n.find(".nl-input"),l=n.find(".nl-add-translation"),i=n.find(".nl-edit-translation"),r=t("#post_ID").val(),o=t("#nl_language").val(),c=a.parents(".nl-field").data("nl_language");window.open(nlingualL10n.admin_post+"?"+t.param({action:"nl_new_translation",post_id:r,post_language_id:o,translation_language_id:c}),"_blank").onload=function(){var n=e(this.location.href.match(/post=(\d+)/),2)[1];a.val(n),l.hide(),i.show().attr("title")}})),t(".nl-edit-translation").click((function(){var n=t(this).parents(".nl-field").find(".nl-input").val();if("new"===n||parseInt(n,10)<=0)alert(nlingualL10n.NoPostSelected);else{var e=t(this).data("url").replace("%d",n);window.open(e)}})),"object"===("undefined"==typeof inlineEditPost?"undefined":n(inlineEditPost))){var c=inlineEditPost.edit;inlineEditPost.edit=function(n){c.apply(this,arguments);var e=n&&parseInt(this.getId(n),10)||0,a=t("#post-".concat(e)),l=t("#edit-".concat(e)),i=a.find(".nl-nonce").val();l.find(".nl-nonce").val(i);var r=a.find(".nl-language").val();l.find(".nl-language-input").val(r).change(),l.find(".nl-translation-field").each((function(){var n=t(this).data("nl_language"),e=a.find(".nl-translation-".concat(n)).val();t(this).find("select").val(e||0)}))}}if("object"===("undefined"==typeof inlineEditTax?"undefined":n(inlineEditTax))){var u=inlineEditTax.edit;inlineEditTax.edit=function(){u.apply(this,arguments)}}}))}();
     1(()=>{var n=window.nLingual={},e=n.Framework={},a=e.Language=Backbone.Model.extend({defaults:{system_name:"",native_name:"",short_name:"",iso_code:"",slug:"",locale_name:"",direction:"",active:!0}}),t=e.LanguageSet=Backbone.Collection.extend({model:a}),l=e.LocalizableField=Backbone.Model.extend({idAttribute:"field",defaults:{field_id:"",values:"",nonce:""}}),i=e.LocalizableFieldSet=Backbone.Collection.extend({model:l}),r=n.Languages=new t,d=n.LocalizableFields=new i;jQuery((e=>{e(".nl-checkall").change((function(){var n=e(this).data("name");e(`input[name="${n}[]"]`).attr("checked",this.checked)})),e(".nl-matchall").change((function(){var n=e(this).data("name");e(`[name="${n}"]`).val(this.checked?"*":"")})),e(".nl-section-content").hide(),e(".nl-section-toggle").each((function(){e(this).data("text",e(this).text())})).click((function(){var n=e(this),a=n.parent();a.toggleClass("open");var t=a.hasClass("open");a.find(".nl-section-content").animate({height:"toggle"}),n.text(n.data(t?"alt":"text"))})),e(".nl-preview").on("nl:render",(function(){var n,a=r.get(e("#nlingual_default_language").val()),t=a&&a.get("slug")||"en",l=e("#nlingual_query_var").val()||"nl_language",i=e("#nlingual_skip_default_l10n").is(":checked"),d=e("#nlingual_post_language_override").is(":checked");n=e(this).hasClass("nl-url-preview")?e(this).data(i?"excluded":"included"):e(this).hasClass("nl-override-preview")?e(this).data(d?"on":"off"):e(this).data("format"),e(this).text(n.replace(/%l/g,t).replace(/%v/g,l))})).trigger("nl:render"),e("#nlingual_default_language").change((function(){e(".nl-preview").trigger("nl:render")})),e("#nlingual_skip_default_l10n").change((function(){e(".nl-preview").trigger("nl:render")})),e("#nlingual_post_language_override").change((function(){e(".nl-preview").trigger("nl:render")})),e("#nlingual_query_var").on("keyup change",(function(){e(".nl-preview").trigger("nl:render")})),e(".nl-preview").hide().filter(".nl-redirect-get").show(),e('input[name="nlingual_options[url_rewrite_method]"]').change((function(){var n=e(this).val();this.checked&&n&&e(".nl-preview").hide().filter(`.nl-redirect-${n}`).show()})).change(),e("#nlingual_languages").each((function(){var t=e(this),l=e("#nl_language_preset"),i=e("#nl_language_list"),d=e("#nl_language_add"),o=e("#nl_language_row").text(),s=-1;i.sortable({items:"tr",containment:"parent",handle:".handle"});for(const e in n.presets)l.append(`<option value="${e}">${n.presets[e].system_name}</option>`);function c(n){var a=o.replace(/%id%/g,n.id);for(const e in n.attributes){const t=new RegExp("%"+e+"%","g");a=a.replace(t,n.get(e))}var t=e(a);t.find(`.nl-language-direction input[value="${n.get("direction")}"]`).attr("checked",!0),t.find(".nl-language-active input").attr("checked",n.get("active")),i.append(t).sortable("refresh")}r.each(c),d.click((function(){var e;if(l.val()){const t=l.val();(e=new a(n.presets[t])).set("iso_code",t),l.val(null)}else e=new a;e.id=s,e.set("slug",e.get("iso_code")),e.set("active",!0),c(e),s--})),t.on("change",".nl-language-delete input",(function(){var n=e(this).parents("tr").first();n.toggleClass("todelete",this.checked),n.find("input").not(this).attr("disabled",this.checked)})),t.on("change",".nl-language-system_name input",(function(){var n=e(this).parents("tr").first(),a=e(this).val(),t=n.find(".nl-language-locale_name input"),l=n.find(".nl-language-iso_code input"),i=n.find(".nl-language-slug input");l.val()||l.val(a.substr(0,2).toLowerCase()),t.val()||t.val(l.val()),i.val()||i.val(l.val())}))}));var t=e('<div class="nl-localizer"></div>').html((function(){var n=`<div class="nl-localizer-toggle" title="${nlingualL10n.LocalizeThis}"></div>`;return r.each((e=>{var a=nlingualL10n.LocalizeFor.replace("%s",e.get("system_name"));n+=`<div class="nl-localizer-option" title="${a}" data-nl_language="${e.id}">\n\t\t\t\t\t<div class="nl-option-text" data-slug="${e.get("slug")}">${e.get("system_name")}</div>\n\t\t\t\t</div>`})),n}));d.each((a=>{var l=a.get("field_id"),i=a.get("values"),d=a.get("nonce"),o=!1,s=e("#"+l);if(0!==s.length&&s.is("input, textarea")){var c;s.addClass("nl-localizable-input"),s.hasClass("wp-editor-area")?c=s.parents(".wp-editor-wrap"):(s.wrap('<div class="nl-localizable"></div>'),c=s.parent());var g=t.clone();s.data("$nl_localizer",g),g.data("nl_current_language",n.default_language),g.data("$nl_localizer_field",s);var u=e('<input type="hidden" />');u.attr("name",s.attr("name")),u.val(s.val()),u.appendTo(c),g.data(`$nl_localized_${n.default_language}`,u),r.each((a=>{if(n.default_language!==a.id){var t=i[a.id]||null,l=e('<input type="hidden" />');l.attr("name",`nlingual_localized[${s.attr("name")}][${a.id}]`),l.val(t),g.data(`$nl_localized_${a.id}`,l),l.appendTo(c),""!==t&&null!==t&&(o=!0)}})),o&&g.find(`[data-nl_language="${n.default_language}"]`).addClass("nl-current"),c.append(`<input type="hidden" name="_nl_l10n_nonce[${a.id}]" value="${d}" />`),g.appendTo(c)}})),e("body").on("click",".nl-localizer-option",(function(){var a=e(this),t=a.parent(),l=a.data("nl_language")||n.default_language;e(this).addClass("nl-current").siblings().removeClass("nl-current");var i=t.data("$nl_localizer_field"),r=t.data(`$nl_localized_${l}`);i.trigger("nl:localizer:update"),t.data("nl_current_language",l);var d=r.val(),o=r.attr("name");i.val(d).attr("name",o),i.trigger("nl:localizer:change")})),e("body").on("input nl:localizer:update nl:localizer:save",".nl-localizable-input",(function(){var n=e(this).data("$nl_localizer"),a=n.data("nl_current_language");n.data(`$nl_localized_${a}`).val(this.value)}));var l=wp.oldEditor||wp.editor;if("object"==typeof tinymce){function i(n){var a=e(n.getElement()),t=a.data("$nl_localizer");t&&(n.on("init",(()=>{e(n.getContainer()).parent().after(t)})),a.on("nl:localizer:update",(()=>{var e=l.removep(n.getContent());a.val(e)})),a.on("nl:localizer:change",(()=>{var e=l.autop(a.val());n.setContent(e)})))}tinymce.editors.forEach(i),tinymce.on("SetupEditor",(n=>{i(n.editor||n)}));var o=tinymce.Editor.prototype.save;tinymce.Editor.prototype.save=function(){o.apply(this,arguments),this.fire("SavedContent"),e(this.getElement()).trigger("nl:localizer:save")}}if(e(".nl-language-input").change((function(){var n=e(this).val(),a=e(this).parents(".nl-translation-manager");a.find(".nl-manage-translations").toggleClass("hidden","0"===n),a.find(".nl-translation-field").show(),a.find(".nl-translation-"+n).hide()})).change(),e(".nl-translation-field").each((function(){var n=e(this).find(".nl-input").val(),a=e(this).find(".nl-add-translation"),t=e(this).find(".nl-edit-translation");t.hide(),parseInt(n,10)&&(a.hide(),t.show())})),e(".nl-add-translation").click((function(){var n=e(this).parents(".nl-field"),a=n.find(".nl-input"),t=n.find(".nl-add-translation"),l=n.find(".nl-edit-translation"),i=e("#post_ID").val(),r=e("#nl_language").val(),d=a.parents(".nl-field").data("nl_language");window.open(nlingualL10n.admin_post+"?"+e.param({action:"nl_new_translation",post_id:i,post_language_id:r,translation_language_id:d}),"_blank").onload=function(){var[,n]=this.location.href.match(/post=(\d+)/);a.val(n),t.hide(),l.show().attr("title")}})),e(".nl-edit-translation").click((function(){var n=e(this).parents(".nl-field").find(".nl-input").val();if("new"===n||parseInt(n,10)<=0)alert(nlingualL10n.NoPostSelected);else{var a=e(this).data("url").replace("%d",n);window.open(a)}})),"object"==typeof inlineEditPost){const n=inlineEditPost.edit;inlineEditPost.edit=function(a){n.apply(this,arguments);var t=a&&parseInt(this.getId(a),10)||0,l=e(`#post-${t}`),i=e(`#edit-${t}`),r=l.find(".nl-nonce").val();i.find(".nl-nonce").val(r);var d=l.find(".nl-language").val();i.find(".nl-language-input").val(d).change(),i.find(".nl-translation-field").each((function(){var n=e(this).data("nl_language"),a=l.find(`.nl-translation-${n}`).val();e(this).find("select").val(a||0)}))}}if("object"==typeof inlineEditTax){const n=inlineEditTax.edit;inlineEditTax.edit=function(){n.apply(this,arguments)}}}))})();
    22//# sourceMappingURL=admin.min.js.map
  • nlingual/trunk/js/admin.min.js.map

    r2375574 r2681436  
    1 {"version":3,"sources":["admin.js"],"names":["nL","Framework","Language","LanguageSet","LocalizableField","LocalizableFieldSet","Languages","LocalizableFields","window","nLingual","Backbone","Model","extend","defaults","system_name","native_name","short_name","iso_code","slug","locale_name","direction","active","Collection","model","idAttribute","field_id","values","nonce","jQuery","$","change","name","this","data","concat","attr","checked","val","hide","each","text","click","$toggle","$section","parent","toggleClass","open","hasClass","find","animate","height","on","format","language","get","qvar","skip","is","override","replace","trigger","filter","show","method","$manager","$preset","$list","$addBtn","languageRowTemplate","languageRowIndex","preset","sortable","items","containment","handle","presets","append","buildLangRow","row","id","prop","attributes","regex","RegExp","$row","set","parents","first","not","$locale_name","$iso_code","$slug","substr","toLowerCase","$localizerTemplate","html","nlingualL10n","LocalizeThis","title","LocalizeFor","field","hasLocalized","$field","length","$wrap","addClass","wrap","$control","clone","default_language","$unlocalized","appendTo","localized","$localized","$option","siblings","removeClass","value","wpEditor","wp","oldEditor","editor","tinymce","_typeof","e","getElement","getContainer","after","content","removep","getContent","autop","setContent","oldEditorSave","Editor","prototype","save","apply","arguments","fire","$parent","$add","$edit","parseInt","$input","post_id","post_language_id","translation_language_id","admin_post","param","action","onload","_slicedToArray","location","href","match","target","alert","NoPostSelected","url","inlineEditPost","wpInlineEditPost_edit","edit","post","getId","$postRow","$editRow","post_language","translation","inlineEditTax","wpInlineEditTax_edit"],"mappings":"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","sourcesContent":["/* globals jQuery, alert, wp, Backbone, tinymce, inlineEditPost, inlineEditTax, nlingualL10n */\n( () => {\n\tvar nL = window.nLingual = {};\n\n\t// =========================\n\t// ! Backbone Stuff\n\t// =========================\n\n\tvar Framework = nL.Framework = {};\n\n\t// Language model\n\tvar Language = Framework.Language = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tsystem_name : '',\n\t\t\tnative_name : '',\n\t\t\tshort_name  : '',\n\t\t\tiso_code    : '',\n\t\t\tslug        : '',\n\t\t\tlocale_name : '',\n\t\t\tdirection   : '',\n\t\t\tactive      : true,\n\t\t},\n\t} );\n\n\t// Languages collection\n\tvar LanguageSet = Framework.LanguageSet = Backbone.Collection.extend( {\n\t\tmodel: Language,\n\t} );\n\n\t// LocalizableField model\n\tvar LocalizableField = Framework.LocalizableField = Backbone.Model.extend( {\n\t\tidAttribute : 'field',\n\t\tdefaults    : {\n\t\t\tfield_id : '',\n\t\t\tvalues   : '',\n\t\t\tnonce    : '',\n\t\t},\n\t} );\n\n\t// LocalizableFieldSet collection\n\tvar LocalizableFieldSet = Framework.LocalizableFieldSet = Backbone.Collection.extend( {\n\t\tmodel: LocalizableField,\n\t} );\n\n\t// =========================\n\t// ! Setup Main Collections\n\t// =========================\n\n\tvar Languages = nL.Languages = new LanguageSet();\n\tvar LocalizableFields = nL.LocalizableFields = new LocalizableFieldSet();\n\n\t// =========================\n\t// ! jQuery Stuff\n\t// =========================\n\n\tjQuery( $ => {\n\t\t// =========================\n\t\t// ! Setings Pages\n\t\t// =========================\n\n\t\t// Check all fields of a matching name\n\t\t$( '.nl-checkall' ).change( function() {\n\t\t\tvar name = $( this ).data( 'name' );\n\t\t\t$( `input[name=\"${name}[]\"]` ).attr( 'checked', this.checked );\n\t\t} );\n\t\t$( '.nl-matchall' ).change( function() {\n\t\t\tvar name = $( this ).data( 'name' );\n\t\t\t$( `[name=\"${name}\"]` ).val( this.checked ? '*' : '' );\n\t\t} );\n\n\t\t// Hide all sections by default\n\t\t$( '.nl-section-content' ).hide();\n\n\t\t// Add toggle feature for sections\n\t\t$( '.nl-section-toggle' ).each( function() {\n\t\t\t$( this ).data( 'text', $( this ).text() );\n\t\t} ).click( function() {\n\t\t\tvar $toggle  = $( this );\n\t\t\tvar $section = $toggle.parent();\n\n\t\t\t$section.toggleClass( 'open' );\n\t\t\tvar open = $section.hasClass( 'open' );\n\n\t\t\t$section.find( '.nl-section-content' ).animate( { height: 'toggle' } );\n\n\t\t\t$toggle.text( $toggle.data( open ? 'alt' : 'text' ) );\n\t\t} );\n\n\t\t// Handle rendering of the previews\n\t\t$( '.nl-preview' ).on( 'nl:render', function() {\n\t\t\t// Get the default language slug, defaulting to \"en\"\n\t\t\tvar language = Languages.get( $( '#nlingual_default_language' ).val() );\n\n\t\t\tvar slug = language && language.get( 'slug' ) || 'en';\n\n\t\t\t// Get the query var, defaulting to \"nl_language\"\n\t\t\tvar qvar = $( '#nlingual_query_var' ).val() || 'nl_language';\n\n\t\t\t// Get the skip and override options\n\t\t\tvar skip = $( '#nlingual_skip_default_l10n' ).is( ':checked' );\n\t\t\tvar override = $( '#nlingual_post_language_override' ).is( ':checked' );\n\n\t\t\t// Get the format; some previews are dependent on options\n\t\t\tvar format;\n\t\t\tif ( $( this ).hasClass( 'nl-url-preview' ) ) {\n\t\t\t\tformat = $( this ).data( skip ? 'excluded' : 'included' );\n\t\t\t} else if ( $( this ).hasClass( 'nl-override-preview' ) ) {\n\t\t\t\tformat = $( this ).data( override ? 'on' : 'off' );\n\t\t\t} else {\n\t\t\t\tformat = $( this ).data( 'format' );\n\t\t\t}\n\n\t\t\t// Update the preview\n\t\t\t$( this ).text(\n\t\t\t\tformat\n\t\t\t\t.replace( /%l/g, slug )\n\t\t\t\t.replace( /%v/g, qvar )\n\t\t\t);\n\t\t} ).trigger( 'nl:render' );\n\n\t\t// Changing any of these will trigger re-rendering of the previews\n\t\t$( '#nlingual_default_language' ).change( function() {\n\t\t\t$( '.nl-preview' ).trigger( 'nl:render' );\n\t\t} );\n\t\t$( '#nlingual_skip_default_l10n' ).change( function() {\n\t\t\t$( '.nl-preview' ).trigger( 'nl:render' );\n\t\t} );\n\t\t$( '#nlingual_post_language_override' ).change( function() {\n\t\t\t$( '.nl-preview' ).trigger( 'nl:render' );\n\t\t} );\n\t\t$( '#nlingual_query_var' ).on( 'keyup change', function() {\n\t\t\t$( '.nl-preview' ).trigger( 'nl:render' );\n\t\t} );\n\n\t\t// Default to GET version of previews\n\t\t$( '.nl-preview' ).hide().filter( '.nl-redirect-get' ).show();\n\n\t\t// Changing the method will change which previews are shown\n\t\t$( 'input[name=\"nlingual_options[url_rewrite_method]\"]' ).change( function() {\n\t\t\tvar method = $( this ).val();\n\n\t\t\t// Ignore if it's not checked or somehow has no value\n\t\t\tif ( ! this.checked || ! method ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Show the associated preview while hiding the others\n\t\t\t$( '.nl-preview' ).hide().filter( `.nl-redirect-${method}` ).show();\n\t\t} ).change();\n\n\t\t// =========================\n\t\t// ! Language Manager\n\t\t// =========================\n\n\t\t$( '#nlingual_languages' ).each( function() {\n\t\t\t// Elements\n\t\t\tvar $manager = $( this );\n\t\t\tvar $preset  = $( '#nl_language_preset' );\n\t\t\tvar $list    = $( '#nl_language_list' );\n\t\t\tvar $addBtn  = $( '#nl_language_add' );\n\n\t\t\tvar languageRowTemplate = $( '#nl_language_row' ).text();\n\t\t\tvar languageRowIndex = -1;\n\n\t\t\t// Setup sortability\n\t\t\t$list.sortable( {\n\t\t\t\titems       : 'tr',\n\t\t\t\tcontainment : 'parent',\n\t\t\t\thandle      : '.handle',\n\t\t\t} );\n\n\t\t\t// Load preset selector\n\t\t\tfor ( const preset in nL.presets ) {\n\t\t\t\t$preset.append( `<option value=\"${preset}\">${nL.presets[ preset ].system_name}</option>` );\n\t\t\t}\n\n\t\t\t// Row builder utility\n\t\t\tfunction buildLangRow( language ) {\n\t\t\t\tvar row = languageRowTemplate.replace( /%id%/g, language.id );\n\n\t\t\t\t// Loop through properties and replace\n\t\t\t\tfor ( const prop in language.attributes ) {\n\t\t\t\t\tconst regex = new RegExp( '%' + prop + '%', 'g' );\n\t\t\t\t\trow = row.replace( regex, language.get( prop ) );\n\t\t\t\t}\n\n\t\t\t\t// Parse the row into a new element\n\t\t\t\tvar $row = $( row );\n\n\t\t\t\t// Check correct direction checkbox\n\t\t\t\t$row.find( `.nl-language-direction input[value=\"${language.get( 'direction' )}\"]` ).attr( 'checked', true );\n\n\t\t\t\t// Check active checkbox if true\n\t\t\t\t$row.find( '.nl-language-active input' ).attr( 'checked', language.get( 'active' ) );\n\n\t\t\t\t// Add the row to the table\n\t\t\t\t$list.append( $row ).sortable( 'refresh' );\n\t\t\t}\n\n\t\t\t// Load table with current languages\n\t\t\tLanguages.each( buildLangRow );\n\n\t\t\t// Add button functionality\n\t\t\t$addBtn.click( function() {\n\t\t\t\tvar language;\n\n\t\t\t\t// Check if preset was selected,\n\t\t\t\t// otherwise make blank language\n\t\t\t\tif ( $preset.val() ) {\n\t\t\t\t\tconst preset = $preset.val();\n\t\t\t\t\tlanguage = new Language( nL.presets[ preset ] );\n\t\t\t\t\tlanguage.set( 'iso_code', preset );\n\n\t\t\t\t\t// Reset preset selector\n\t\t\t\t\t$preset.val( null );\n\t\t\t\t} else {\n\t\t\t\t\tlanguage = new Language();\n\t\t\t\t}\n\n\t\t\t\t// Default values\n\t\t\t\tlanguage.id = languageRowIndex;\n\t\t\t\tlanguage.set( 'slug', language.get( 'iso_code' ) );\n\t\t\t\tlanguage.set( 'active', true );\n\n\t\t\t\tbuildLangRow( language );\n\n\t\t\t\tlanguageRowIndex--;\n\t\t\t} );\n\n\t\t\t// Delete button functionality\n\t\t\t$manager.on( 'change', '.nl-language-delete input', function() {\n\t\t\t\tvar $row = $( this ).parents( 'tr' ).first(); // Get the parent row\n\n\t\t\t\t// Toggle delete class and inputs\n\t\t\t\t$row.toggleClass( 'todelete', this.checked );\n\t\t\t\t$row.find( 'input' ).not( this ).attr( 'disabled', this.checked );\n\t\t\t} );\n\n\t\t\t// Auto-fill locale_name, iso_code and slug\n\t\t\t$manager.on( 'change', '.nl-language-system_name input', function() {\n\t\t\t\tvar $row = $( this ).parents( 'tr' ).first(); // Get the parent row\n\n\t\t\t\t// Get the text\n\t\t\t\tvar system_name = $( this ).val();\n\n\t\t\t\t// Get the other fields\n\t\t\t\tvar $locale_name = $row.find( '.nl-language-locale_name input' );\n\t\t\t\tvar $iso_code    = $row.find( '.nl-language-iso_code input' );\n\t\t\t\tvar $slug        = $row.find( '.nl-language-slug input' );\n\n\t\t\t\t// No ISO? Assume first 2 characters of system name\n\t\t\t\tif ( ! $iso_code.val() ) {\n\t\t\t\t\t$iso_code.val( system_name.substr( 0, 2 ).toLowerCase() );\n\t\t\t\t}\n\n\t\t\t\t// No locale? Assume same as ISO code\n\t\t\t\tif ( ! $locale_name.val() ) {\n\t\t\t\t\t$locale_name.val( $iso_code.val() );\n\t\t\t\t}\n\n\t\t\t\t// No slug? Assume same as ISO code\n\t\t\t\tif ( ! $slug.val() ) {\n\t\t\t\t\t$slug.val( $iso_code.val() );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// =========================\n\t\t// ! Input Localizer\n\t\t// =========================\n\n\t\t// Setup the base localizer\n\t\tvar $localizerTemplate = $( '<div class=\"nl-localizer\"></div>' ).html( function() {\n\t\t\tvar html = `<div class=\"nl-localizer-toggle\" title=\"${nlingualL10n.LocalizeThis}\"></div>`;\n\n\t\t\tLanguages.each( language => {\n\t\t\t\tvar title = nlingualL10n.LocalizeFor.replace( '%s', language.get( 'system_name' ) );\n\t\t\t\thtml += `<div class=\"nl-localizer-option\" title=\"${title}\" data-nl_language=\"${language.id}\">\n\t\t\t\t\t<div class=\"nl-option-text\" data-slug=\"${language.get( 'slug' )}\">${language.get( 'system_name' )}</div>\n\t\t\t\t</div>`;\n\t\t\t} );\n\n\t\t\treturn html;\n\t\t} );\n\n\t\tLocalizableFields.each( field => {\n\t\t\tvar field_id = field.get( 'field_id' );\n\t\t\tvar values   = field.get( 'values' );\n\t\t\tvar nonce    = field.get( 'nonce' );\n\n\t\t\tvar hasLocalized = false;\n\n\t\t\t// Get the field if it exists and is an input/textarea\n\t\t\tvar $field = $( '#' + field_id );\n\t\t\tif ( $field.length === 0 || ! $field.is( 'input, textarea' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$field.addClass( 'nl-localizable-input' );\n\n\t\t\t// Check if it's a tinymce editor field\n\t\t\tvar $wrap;\n\t\t\tif ( $field.hasClass( 'wp-editor-area' ) ) {\n\t\t\t\t// Use the editor wrapper as the container\n\t\t\t\t$wrap = $field.parents( '.wp-editor-wrap' );\n\t\t\t} else {\n\t\t\t\t// Wrap the field in a container\n\t\t\t\t$field.wrap( '<div class=\"nl-localizable\"></div>' );\n\t\t\t\t$wrap = $field.parent();\n\t\t\t}\n\n\t\t\t// Create the control\n\t\t\tvar $control = $localizerTemplate.clone();\n\n\t\t\t// Store the control reference in the field\n\t\t\t$field.data( '$nl_localizer', $control );\n\n\t\t\t// Store the current language of the control\n\t\t\t$control.data( 'nl_current_language', nL.default_language );\n\n\t\t\t// Store the field and wrapper reference in the control\n\t\t\t$control.data( '$nl_localizer_field', $field );\n\n\t\t\t// Create the storage input for the unlocalized field\n\t\t\tvar $unlocalized = $( '<input type=\"hidden\" />' );\n\t\t\t$unlocalized.attr( 'name', $field.attr( 'name' ) );\n\t\t\t$unlocalized.val( $field.val() );\n\n\t\t\t// Add to the wrapper\n\t\t\t$unlocalized.appendTo( $wrap );\n\n\t\t\t// Store the unlocalized input reference in the control\n\t\t\t$control.data( `$nl_localized_${nL.default_language}`, $unlocalized );\n\n\t\t\t// Add hidden storage inputs\n\t\t\tLanguages.each( language => {\n\t\t\t\t// Skip the default language\n\t\t\t\tif ( nL.default_language === language.id ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Get the localized version of the value\n\t\t\t\tvar localized = values[ language.id ] || null;\n\n\t\t\t\t// Create a hidden field for the input\n\t\t\t\tvar $localized = $( '<input type=\"hidden\" />' );\n\t\t\t\t$localized.attr( 'name', `nlingual_localized[${$field.attr( 'name' )}][${language.id}]` );\n\t\t\t\t$localized.val( localized );\n\n\t\t\t\t// Store it for later use\n\t\t\t\t$control.data( `$nl_localized_${language.id}`, $localized );\n\n\t\t\t\t// Add to the wrapper\n\t\t\t\t$localized.appendTo( $wrap );\n\n\t\t\t\tif ( '' !== localized && null !== localized ) {\n\t\t\t\t\thasLocalized = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Add the current class to the default language if localized versions are set\n\t\t\tif ( hasLocalized ) {\n\t\t\t\t$control.find( `[data-nl_language=\"${nL.default_language}\"]` ).addClass( 'nl-current' );\n\t\t\t}\n\n\t\t\t// Add the nonce field\n\t\t\t$wrap.append( `<input type=\"hidden\" name=\"_nl_l10n_nonce[${field.id}]\" value=\"${nonce}\" />` );\n\n\t\t\t// Add the control at the end\n\t\t\t$control.appendTo( $wrap );\n\t\t} );\n\n\t\t$( 'body' ).on( 'click', '.nl-localizer-option', function() {\n\t\t\t// Get the localizer control, and the selected language\n\t\t\tvar $option  = $( this );\n\t\t\tvar $control = $option.parent();\n\t\t\tvar language = $option.data( 'nl_language' ) || nL.default_language;\n\n\t\t\t// Mark this as the new current one\n\t\t\t$( this ).addClass( 'nl-current' ).siblings().removeClass( 'nl-current' );\n\n\t\t\t// Get the current field and the localized storage field\n\t\t\tvar $field     = $control.data( '$nl_localizer_field' );\n\t\t\tvar $localized = $control.data( `$nl_localized_${language}` );\n\n\t\t\t// Before we begin changing stuff, trigger an update on the field\n\t\t\t$field.trigger( 'nl:localizer:update' );\n\n\t\t\t// Update the controls current language\n\t\t\t$control.data( 'nl_current_language', language );\n\n\t\t\t// Get the value/name of the target localized field\n\t\t\tvar value = $localized.val();\n\t\t\tvar name  = $localized.attr( 'name' );\n\n\t\t\t// Swap the field's value/name\n\t\t\t$field.val( value ).attr( 'name', name );\n\n\t\t\t// Trigger a change event, for potential extensibility\n\t\t\t$field.trigger( 'nl:localizer:change' );\n\t\t} );\n\n\t\t$( 'body' ).on( 'input nl:localizer:update nl:localizer:save', '.nl-localizable-input', function() {\n\t\t\t// Get the control reference and it's current language\n\t\t\tvar $control = $( this ).data( '$nl_localizer' );\n\t\t\tvar language = $control.data( 'nl_current_language' );\n\n\t\t\t// Get the localized storage field\n\t\t\tvar $localized = $control.data( `$nl_localized_${language}` );\n\n\t\t\t// Update it with the current value\n\t\t\t$localized.val( this.value );\n\t\t} );\n\n\t\t// =========================\n\t\t// ! - TinyMCE Extensions\n\t\t// =========================\n\n\t\t// Get the classic editor api\n\t\tvar wpEditor = wp.oldEditor || wp.editor;\n\n\t\tif ( typeof tinymce === 'object' ) {\n\t\t\ttinymce.on( 'SetupEditor', e => {\n\t\t\t\t// TinyMCE 4.7 changes callback arg to event CONTAINING editor\n\t\t\t\tvar editor = e.editor || e;\n\n\t\t\t\tvar $field = $( editor.getElement() ),\n\t\t\t\t\t$control = $field.data( '$nl_localizer' );\n\n\t\t\t\tif ( ! $control ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\teditor.on( 'init', () => {\n\t\t\t\t\t$( editor.getContainer() ).parent().after( $control );\n\t\t\t\t} );\n\n\t\t\t\t$field.on( 'nl:localizer:update', () => {\n\t\t\t\t\t// Get the content, clean it\n\t\t\t\t\tvar content = wpEditor.removep( editor.getContent() );\n\n\t\t\t\t\t$field.val( content );\n\t\t\t\t} );\n\n\t\t\t\t$field.on( 'nl:localizer:change', () => {\n\t\t\t\t\t// Get the value, process it\n\t\t\t\t\tvar content = wpEditor.autop( $field.val() );\n\n\t\t\t\t\teditor.setContent( content );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\tvar oldEditorSave = tinymce.Editor.prototype.save;\n\t\t\ttinymce.Editor.prototype.save = function() {\n\t\t\t\toldEditorSave.apply( this, arguments );\n\n\t\t\t\tthis.fire( 'SavedContent' );\n\t\t\t\t$( this.getElement() ).trigger( 'nl:localizer:save' );\n\t\t\t};\n\t\t}\n\n\t\t// =========================\n\t\t// ! Meta Box and Quick/Bulk Edit\n\t\t// =========================\n\n\t\t// Update visible translation fields based on current language\n\t\t$( '.nl-language-input' ).change( function() {\n\t\t\tvar id = $( this ).val();\n\t\t\tvar $parent = $( this ).parents( '.nl-translation-manager' );\n\n\t\t\t// Toggle visibility of the translations interface if language isn't set\n\t\t\t$parent.find( '.nl-manage-translations' ).toggleClass( 'hidden', id === '0' );\n\n\t\t\t// Show all translation fields by default\n\t\t\t$parent.find( '.nl-translation-field' ).show();\n\n\t\t\t// Hide the one for the current language\n\t\t\t$parent.find( '.nl-translation-' + id ).hide();\n\t\t} ).change(); // Update on page load\n\n\t\t// Show/Hide the Add/Edit buttons based on value\n\t\t$( '.nl-translation-field' ).each( function() {\n\t\t\tvar value = $( this ).find( '.nl-input' ).val();\n\n\t\t\tvar $add = $( this ).find( '.nl-add-translation' );\n\t\t\tvar $edit = $( this ).find( '.nl-edit-translation' );\n\n\t\t\t$edit.hide();\n\t\t\tif ( parseInt( value, 10 ) ) {\n\t\t\t\t$add.hide();\n\t\t\t\t$edit.show();\n\t\t\t}\n\t\t} );\n\n\t\t// Create a new translation for the assocaited language\n\t\t$( '.nl-add-translation' ).click( function() {\n\t\t\tvar $field                  = $( this ).parents( '.nl-field' );\n\t\t\tvar $input                  = $field.find( '.nl-input' );\n\t\t\tvar $add                    = $field.find( '.nl-add-translation' );\n\t\t\tvar $edit                   = $field.find( '.nl-edit-translation' );\n\t\t\tvar post_id                 = $( '#post_ID' ).val();\n\t\t\tvar post_language_id        = $( '#nl_language' ).val();\n\t\t\tvar translation_language_id = $input.parents( '.nl-field' ).data( 'nl_language' );\n\n\t\t\tvar editWindow = window.open( nlingualL10n.admin_post + '?' + $.param( {\n\t\t\t\taction: 'nl_new_translation',\n\t\t\t\tpost_id,\n\t\t\t\tpost_language_id,\n\t\t\t\ttranslation_language_id,\n\t\t\t} ), '_blank' );\n\n\t\t\teditWindow.onload = function() {\n\t\t\t\tvar [ , id ] = this.location.href.match( /post=(\\d+)/ );\n\n\t\t\t\t$input.val( id );\n\n\t\t\t\t$add.hide();\n\t\t\t\t$edit.show().attr( 'title' );\n\t\t\t};\n\t\t} );\n\n\t\t// Open the editor for the selected translation\n\t\t$( '.nl-edit-translation' ).click( function() {\n\t\t\t// Get the parent field\n\t\t\tvar $field = $( this ).parents( '.nl-field' );\n\n\t\t\t// Get the selected value\n\t\t\tvar target = $field.find( '.nl-input' ).val();\n\n\t\t\t// Throw error if target isn't a valid post\n\t\t\tif ( target === 'new' || parseInt( target, 10 ) <= 0 ) {\n\t\t\t\talert( nlingualL10n.NoPostSelected );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Build the edit URL and open in a new tab\n\t\t\tvar url = $( this ).data( 'url' ).replace( '%d', target );\n\t\t\twindow.open( url );\n\t\t} );\n\n\t\t// =========================\n\t\t// ! WP API Extensions\n\t\t// =========================\n\n\t\t// Extend inlineEditPost if available\n\t\tif ( typeof inlineEditPost === 'object' ) {\n\t\t\tconst wpInlineEditPost_edit = inlineEditPost.edit;\n\n\t\t\t// Replace with new function\n\t\t\tinlineEditPost.edit = function( post ) {\n\t\t\t\t// Start by calling the original for default behaviour\n\t\t\t\twpInlineEditPost_edit.apply( this, arguments );\n\n\t\t\t\t// Get the post ID\n\t\t\t\tvar post_id = post && parseInt( this.getId( post ), 10 ) || 0;\n\n\t\t\t\t// Get the post and edit rows\n\t\t\t\tvar $postRow = $( `#post-${post_id}` );\n\t\t\t\tvar $editRow = $( `#edit-${post_id}` );\n\n\t\t\t\t// Update the nonce field\n\t\t\t\tvar nonce = $postRow.find( '.nl-nonce' ).val();\n\t\t\t\t$editRow.find( '.nl-nonce' ).val( nonce );\n\n\t\t\t\t// Update the language field\n\t\t\t\tvar post_language = $postRow.find( '.nl-language' ).val();\n\t\t\t\t$editRow.find( '.nl-language-input' ).val( post_language ).change();\n\n\t\t\t\t// Update the translations fields\n\t\t\t\t$editRow.find( '.nl-translation-field' ).each( function() {\n\t\t\t\t\tvar id = $( this ).data( 'nl_language' );\n\t\t\t\t\tvar translation = $postRow.find( `.nl-translation-${id}` ).val();\n\n\t\t\t\t\t$( this ).find( 'select' ).val( translation || 0 );\n\t\t\t\t} );\n\t\t\t};\n\t\t}\n\n\t\t// Extend inlineEditTax if available\n\t\tif ( typeof inlineEditTax === 'object' ) {\n\t\t\tconst wpInlineEditTax_edit = inlineEditTax.edit;\n\n\t\t\t// Replace with new function\n\t\t\tinlineEditTax.edit = function( /* id */ ) {\n\n\t\t\t\t// Start by calling the original for default behaviour\n\t\t\t\twpInlineEditTax_edit.apply( this, arguments );\n\t\t\t};\n\t\t}\n\t} );\n} )();\n"]}
     1{"version":3,"sources":["admin.js"],"names":[],"mappings":"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"}
  • nlingual/trunk/nlingual.php

    r2464358 r2681436  
    44Plugin URI: https://github.com/dougwollison/nlingual
    55Description: Easy to manage Multilingual system, with theme development utilities and post data synchronization.
    6 Version: 2.9.1.2
     6Version: 2.9.2
    77Author: Doug Wollison
    88Author URI: https://dougw.me
     
    5151 * @var string
    5252 */
    53 define( 'NL_PLUGIN_VERSION', '2.9.1.2' );
     53define( 'NL_PLUGIN_VERSION', '2.9.2' );
    5454
    5555/**
  • nlingual/trunk/readme.txt

    r2464358 r2681436  
    33Tags: multilingual, language, bilingual, translation
    44Requires at least: 4.9
    5 Tested up to: 5.6.0
     5Tested up to: 5.9.0
    66Requires PHP: 5.6.20
    7 Stable tag: 2.9.1.2
     7Stable tag: 2.9.2
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    8080**Details on each release can be found [on the GitHub releases page](https://github.com/dougwollison/nlingual/releases) for this project.**
    8181
     82= 2.9.2 =
     83Quality of life improvements, Localizer/Synchronizer/Rewriter fixes, opt-out for accepted language.
     84
    8285= 2.9.1.2 =
    8386Hotfix: remove syntax error on php < 7.3
Note: See TracChangeset for help on using the changeset viewer.