Plugin Directory

Changeset 3423181


Ignore:
Timestamp:
12/18/2025 06:40:49 PM (2 months ago)
Author:
analogwp
Message:

Update to version 1.7.0 from GitHub

Location:
analogwp-library
Files:
2 added
14 edited
1 copied

Legend:

Unmodified
Added
Removed
  • analogwp-library/tags/1.7.0/analogwp-library.php

    r3396722 r3423181  
    1111 * Plugin URI:  https://analogwp.com/custom-library-for-elementor
    1212 * Description: Custom Library for Elementor creates the foundation for a design framework that will help you create better, more consistent websites with Elementor.
    13  * Version:     1.6.1
     13 * Version:     1.7.0
    1414 * Author:      AnalogWP
    1515 * Author URI:  https://analogwp.com/
     
    1919 * Requires at least: 6.0
    2020 * Requires PHP: 7.4
    21  * Elementor tested up to: 3.33.2
    22  * Elementor Pro tested up to: 3.33.1
     21 * Elementor tested up to: 3.33.6
     22 * Elementor Pro tested up to: 3.33.2
    2323 */
    2424
     
    2828define( 'AGWP_LIBRARY_PHP_MINIMUM', '7.4' );
    2929define( 'AGWP_LIBRARY_WP_MINIMUM', '6.0' );
    30 define( 'AGWP_LIBRARY_VERSION', '1.6.1' );
     30define( 'AGWP_LIBRARY_VERSION', '1.7.0' );
    3131define( 'AGWP_LIBRARY_PLUGIN_FILE', __FILE__ );
    3232define( 'AGWP_LIBRARY_PLUGIN_URL', plugin_dir_url( AGWP_LIBRARY_PLUGIN_FILE ) );
  • analogwp-library/tags/1.7.0/assets/js/admin-settings.js

    r3396722 r3423181  
    190190
    191191            $.post(
    192                 'https://analogwp.com/?ang-api=cl_bfcm_discount_code',
     192                'https://analogwp.com/?ang-api=pro_discount_code',
    193193                {
    194194                    email: email,
    195195                    first_name: JSON.stringify( fname ),
    196196                    last_name: JSON.stringify( lname ),
     197                    slug: 'custom-library',
    197198                }
    198199            ).done( function( res ) {
  • analogwp-library/tags/1.7.0/inc/Featuresets/rollback/class-init.php

    r3384542 r3423181  
    5050     */
    5151    public function add_rollback_data( $data ) {
    52         $data['rollback_url']      = wp_nonce_url( admin_url( 'admin-post.php?action=analog_custom_library_rollback&version=VERSION' ), 'analog_custom_library_rollback' );
    53         $data['rollback_versions'] = self::get_rollback_versions();
     52        $data['rollback_url'] = wp_nonce_url( admin_url( 'admin-post.php?action=analog_custom_library_rollback&version=VERSION' ), 'analog_custom_library_rollback' );
    5453
    5554        return $data;
     
    142141                }
    143142
    144                 $current_index++;
     143                ++$current_index;
    145144                $rollback_versions[] = $version;
    146145            }
  • analogwp-library/tags/1.7.0/inc/Featuresets/rollback/class-rollbacker.php

    r3384542 r3423181  
    127127                background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIzIiBoZWlnaHQ9IjQyIiB2aWV3Qm94PSIwIDAgMjIzIDQyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI5Ljg0NTcgNC4zMTc1NkMyNi41OTc4IC0xLjQzOTE4IDE4LjQwMjIgLTEuNDM5MTkgMTUuMTU0MyA0LjMxNzU2TDEuMTI3MjMgMjkuMTc5N0MtMi4wOTU3NiAzNC44OTIyIDEuOTc2ODMgNDIgOC40NzI5NiA0MkgzNi41MjdDNDMuMDIzMiA0MiA0Ny4wOTU4IDM0Ljg5MjIgNDMuODcyOCAyOS4xNzk3TDI5Ljg0NTcgNC4zMTc1NlpNMjguNzc0MSAyMS41MDZDMjYgMTYuNTg5MSAxOSAxNi41ODkxIDE2LjIyNTkgMjEuNTA2QzEzLjQ3MzEgMjYuMzg1MiAxNi45NTE2IDMyLjQ1NiAyMi41IDMyLjQ1NkMyOC4wNDg0IDMyLjQ1NiAzMS41MjY5IDI2LjM4NTIgMjguNzc0MSAyMS41MDZaIiBmaWxsPSIjMUExQTFBIi8+CjxwYXRoIGQ9Ik03MC4zNiAzNC4zNkM2OC43NzYgMzQuMzYgNjcuMzQ4IDMzLjk2NCA2Ni4wNzYgMzMuMTcyQzY0LjgwNCAzMi4zOCA2My44MDggMzEuMyA2My4wODggMjkuOTMyQzYyLjM2OCAyOC41NjQgNjIuMDA4IDI3LjAyOCA2Mi4wMDggMjUuMzI0QzYyLjAwOCAyMy41OTYgNjIuMzY4IDIyLjA0OCA2My4wODggMjAuNjhDNjMuODA4IDE5LjMxMiA2NC44MDQgMTguMjMyIDY2LjA3NiAxNy40NEM2Ny4zNDggMTYuNjQ4IDY4Ljc3NiAxNi4yNTIgNzAuMzYgMTYuMjUyQzcxLjYwOCAxNi4yNTIgNzIuNzI0IDE2LjUwNCA3My43MDggMTcuMDA4Qzc0LjY5MiAxNy41MTIgNzUuNDcyIDE4LjIyIDc2LjA0OCAxOS4xMzJDNzYuNjQ4IDIwLjAyIDc2Ljk3MiAyMS4wMjggNzcuMDIgMjIuMTU2VjI4LjQyQzc2Ljk3MiAyOS41NzIgNzYuNjQ4IDMwLjU5MiA3Ni4wNDggMzEuNDhDNzUuNDcyIDMyLjM2OCA3NC42OTIgMzMuMDc2IDczLjcwOCAzMy42MDRDNzIuNzI0IDM0LjEwOCA3MS42MDggMzQuMzYgNzAuMzYgMzQuMzZaTTcxLjIyNCAzMC4wMDRDNzIuNTQ0IDMwLjAwNCA3My42MTIgMjkuNTcyIDc0LjQyOCAyOC43MDhDNzUuMjQ0IDI3LjgyIDc1LjY1MiAyNi42OCA3NS42NTIgMjUuMjg4Qzc1LjY1MiAyNC4zNzYgNzUuNDYgMjMuNTcyIDc1LjA3NiAyMi44NzZDNzQuNzE2IDIyLjE1NiA3NC4yIDIxLjYwNCA3My41MjggMjEuMjJDNzIuODggMjAuODEyIDcyLjExMiAyMC42MDggNzEuMjI0IDIwLjYwOEM3MC4zNiAyMC42MDggNjkuNTkyIDIwLjgxMiA2OC45MiAyMS4yMkM2OC4yNzIgMjEuNjA0IDY3Ljc1NiAyMi4xNTYgNjcuMzcyIDIyLjg3NkM2Ny4wMTIgMjMuNTcyIDY2LjgzMiAyNC4zNzYgNjYuODMyIDI1LjI4OEM2Ni44MzIgMjYuMjI0IDY3LjAxMiAyNy4wNTIgNjcuMzcyIDI3Ljc3MkM2Ny43NTYgMjguNDY4IDY4LjI3MiAyOS4wMiA2OC45MiAyOS40MjhDNjkuNTkyIDI5LjgxMiA3MC4zNiAzMC4wMDQgNzEuMjI0IDMwLjAwNFpNNzUuNCAzNFYyOS4zMkw3Ni4xNTYgMjUuMDcyTDc1LjQgMjAuODk2VjE2LjYxMkg4MC4wOFYzNEg3NS40Wk05NS45NTIxIDM0VjI0LjAyOEM5NS45NTIxIDIyLjk5NiA5NS42MjgxIDIyLjE1NiA5NC45ODAxIDIxLjUwOEM5NC4zMzIxIDIwLjg2IDkzLjQ5MjEgMjAuNTM2IDkyLjQ2MDEgMjAuNTM2QzkxLjc4ODEgMjAuNTM2IDkxLjE4ODEgMjAuNjggOTAuNjYwMSAyMC45NjhDOTAuMTMyMSAyMS4yNTYgODkuNzEyMSAyMS42NjQgODkuNDAwMSAyMi4xOTJDODkuMTEyMSAyMi43MiA4OC45NjgxIDIzLjMzMiA4OC45NjgxIDI0LjAyOEw4Ny4xMzIxIDIzLjA5MkM4Ny4xMzIxIDIxLjcyNCA4Ny40MjAxIDIwLjUzNiA4Ny45OTYxIDE5LjUyOEM4OC41OTYxIDE4LjQ5NiA4OS40MTIxIDE3LjY5MiA5MC40NDQxIDE3LjExNkM5MS41MDAxIDE2LjU0IDkyLjY4ODEgMTYuMjUyIDk0LjAwODEgMTYuMjUyQzk1LjI4MDEgMTYuMjUyIDk2LjQyMDEgMTYuNTc2IDk3LjQyODEgMTcuMjI0Qzk4LjQzNjEgMTcuODQ4IDk5LjIyODEgMTguNjc2IDk5LjgwNDEgMTkuNzA4QzEwMC4zOCAyMC43MTYgMTAwLjY2OCAyMS44MDggMTAwLjY2OCAyMi45ODRWMzRIOTUuOTUyMVpNODQuMjUyMSAzNFYxNi42MTJIODguOTY4MVYzNEg4NC4yNTIxWk0xMTEuNzM5IDM0LjM2QzExMC4xNTUgMzQuMzYgMTA4LjcyNyAzMy45NjQgMTA3LjQ1NSAzMy4xNzJDMTA2LjE4MyAzMi4zOCAxMDUuMTg3IDMxLjMgMTA0LjQ2NyAyOS45MzJDMTAzLjc0NyAyOC41NjQgMTAzLjM4NyAyNy4wMjggMTAzLjM4NyAyNS4zMjRDMTAzLjM4NyAyMy41OTYgMTAzLjc0NyAyMi4wNDggMTA0LjQ2NyAyMC42OEMxMDUuMTg3IDE5LjMxMiAxMDYuMTgzIDE4LjIzMiAxMDcuNDU1IDE3LjQ0QzEwOC43MjcgMTYuNjQ4IDExMC4xNTUgMTYuMjUyIDExMS43MzkgMTYuMjUyQzExMi45ODcgMTYuMjUyIDExNC4xMDMgMTYuNTA0IDExNS4wODcgMTcuMDA4QzExNi4wNzEgMTcuNTEyIDExNi44NTEgMTguMjIgMTE3LjQyNyAxOS4xMzJDMTE4LjAyNyAyMC4wMiAxMTguMzUxIDIxLjAyOCAxMTguMzk5IDIyLjE1NlYyOC40MkMxMTguMzUxIDI5LjU3MiAxMTguMDI3IDMwLjU5MiAxMTcuNDI3IDMxLjQ4QzExNi44NTEgMzIuMzY4IDExNi4wNzEgMzMuMDc2IDExNS4wODcgMzMuNjA0QzExNC4xMDMgMzQuMTA4IDExMi45ODcgMzQuMzYgMTExLjczOSAzNC4zNlpNMTEyLjYwMyAzMC4wMDRDMTEzLjkyMyAzMC4wMDQgMTE0Ljk5MSAyOS41NzIgMTE1LjgwNyAyOC43MDhDMTE2LjYyMyAyNy44MiAxMTcuMDMxIDI2LjY4IDExNy4wMzEgMjUuMjg4QzExNy4wMzEgMjQuMzc2IDExNi44MzkgMjMuNTcyIDExNi40NTUgMjIuODc2QzExNi4wOTUgMjIuMTU2IDExNS41NzkgMjEuNjA0IDExNC45MDcgMjEuMjJDMTE0LjI1OSAyMC44MTIgMTEzLjQ5MSAyMC42MDggMTEyLjYwMyAyMC42MDhDMTExLjczOSAyMC42MDggMTEwLjk3MSAyMC44MTIgMTEwLjI5OSAyMS4yMkMxMDkuNjUxIDIxLjYwNCAxMDkuMTM1IDIyLjE1NiAxMDguNzUxIDIyLjg3NkMxMDguMzkxIDIzLjU3MiAxMDguMjExIDI0LjM3NiAxMDguMjExIDI1LjI4OEMxMDguMjExIDI2LjIyNCAxMDguMzkxIDI3LjA1MiAxMDguNzUxIDI3Ljc3MkMxMDkuMTM1IDI4LjQ2OCAxMDkuNjUxIDI5LjAyIDExMC4yOTkgMjkuNDI4QzExMC45NzEgMjkuODEyIDExMS43MzkgMzAuMDA0IDExMi42MDMgMzAuMDA0Wk0xMTYuNzc5IDM0VjI5LjMyTDExNy41MzUgMjUuMDcyTDExNi43NzkgMjAuODk2VjE2LjYxMkgxMjEuNDU5VjM0SDExNi43NzlaTTEyNS42MzEgMzRWNy45NzJIMTMwLjM0N1YzNEgxMjUuNjMxWk0xNDIuNjk4IDM0LjM2QzE0MC45NDYgMzQuMzYgMTM5LjM2MiAzMy45NjQgMTM3Ljk0NiAzMy4xNzJDMTM2LjU1NCAzMi4zNTYgMTM1LjQzOCAzMS4yNjQgMTM0LjU5OCAyOS44OTZDMTMzLjc4MiAyOC41MDQgMTMzLjM3NCAyNi45NTYgMTMzLjM3NCAyNS4yNTJDMTMzLjM3NCAyMy41NDggMTMzLjc4MiAyMi4wMjQgMTM0LjU5OCAyMC42OEMxMzUuNDE0IDE5LjMxMiAxMzYuNTMgMTguMjMyIDEzNy45NDYgMTcuNDRDMTM5LjM2MiAxNi42MjQgMTQwLjkzNCAxNi4yMTYgMTQyLjY2MiAxNi4yMTZDMTQ0LjQzOCAxNi4yMTYgMTQ2LjAyMiAxNi42MjQgMTQ3LjQxNCAxNy40NEMxNDguODMgMTguMjMyIDE0OS45NDYgMTkuMzEyIDE1MC43NjIgMjAuNjhDMTUxLjU3OCAyMi4wMjQgMTUxLjk4NiAyMy41NDggMTUxLjk4NiAyNS4yNTJDMTUxLjk4NiAyNi45NTYgMTUxLjU3OCAyOC41MDQgMTUwLjc2MiAyOS44OTZDMTQ5Ljk0NiAzMS4yNjQgMTQ4LjgzIDMyLjM1NiAxNDcuNDE0IDMzLjE3MkMxNDYuMDIyIDMzLjk2NCAxNDQuNDUgMzQuMzYgMTQyLjY5OCAzNC4zNlpNMTQyLjY2MiAyOS45NjhDMTQzLjU1IDI5Ljk2OCAxNDQuMzMgMjkuNzc2IDE0NS4wMDIgMjkuMzkyQzE0NS42OTggMjguOTg0IDE0Ni4yMjYgMjguNDMyIDE0Ni41ODYgMjcuNzM2QzE0Ni45NyAyNy4wMTYgMTQ3LjE2MiAyNi4yIDE0Ny4xNjIgMjUuMjg4QzE0Ny4xNjIgMjQuMzc2IDE0Ni45NyAyMy41NzIgMTQ2LjU4NiAyMi44NzZDMTQ2LjIwMiAyMi4xOCAxNDUuNjc0IDIxLjY0IDE0NS4wMDIgMjEuMjU2QzE0NC4zMyAyMC44NDggMTQzLjU1IDIwLjY0NCAxNDIuNjYyIDIwLjY0NEMxNDEuNzk4IDIwLjY0NCAxNDEuMDMgMjAuODQ4IDE0MC4zNTggMjEuMjU2QzEzOS42ODYgMjEuNjQgMTM5LjE1OCAyMi4xOCAxMzguNzc0IDIyLjg3NkMxMzguMzkgMjMuNTcyIDEzOC4xOTggMjQuMzc2IDEzOC4xOTggMjUuMjg4QzEzOC4xOTggMjYuMiAxMzguMzkgMjcuMDE2IDEzOC43NzQgMjcuNzM2QzEzOS4xNTggMjguNDMyIDEzOS42ODYgMjguOTg0IDE0MC4zNTggMjkuMzkyQzE0MS4wMyAyOS43NzYgMTQxLjc5OCAyOS45NjggMTQyLjY2MiAyOS45NjhaTTE2Mi4yOTQgNDEuNzA0QzE2MC40NDYgNDEuNzA0IDE1OC44MTQgNDEuMzY4IDE1Ny4zOTggNDAuNjk2QzE1NS45ODIgNDAuMDQ4IDE1NC44NTQgMzkuMTI0IDE1NC4wMTQgMzcuOTI0TDE1Ny4wMDIgMzQuOTM2QzE1Ny42NzQgMzUuNzI4IDE1OC40MTggMzYuMzI4IDE1OS4yMzQgMzYuNzM2QzE2MC4wNzQgMzcuMTY4IDE2MS4wODIgMzcuMzg0IDE2Mi4yNTggMzcuMzg0QzE2My43MjIgMzcuMzg0IDE2NC44NzQgMzcuMDEyIDE2NS43MTQgMzYuMjY4QzE2Ni41NzggMzUuNTI0IDE2Ny4wMSAzNC40OTIgMTY3LjAxIDMzLjE3MlYyOC44MTZMMTY3LjgwMiAyNUwxNjcuMDQ2IDIxLjE4NFYxNi42MTJIMTcxLjcyNlYzMy4xQzE3MS43MjYgMzQuODI4IDE3MS4zMTggMzYuMzI4IDE3MC41MDIgMzcuNkMxNjkuNzEgMzguODk2IDE2OC42MDYgMzkuOTA0IDE2Ny4xOSA0MC42MjRDMTY1Ljc3NCA0MS4zNDQgMTY0LjE0MiA0MS43MDQgMTYyLjI5NCA0MS43MDRaTTE2Mi4wNzggMzMuNTMyQzE2MC41MTggMzMuNTMyIDE1OS4xMTQgMzMuMTYgMTU3Ljg2NiAzMi40MTZDMTU2LjYxOCAzMS42NDggMTU1LjYzNCAzMC42MDQgMTU0LjkxNCAyOS4yODRDMTU0LjIxOCAyNy45NjQgMTUzLjg3IDI2LjQ4OCAxNTMuODcgMjQuODU2QzE1My44NyAyMy4yMjQgMTU0LjIxOCAyMS43NiAxNTQuOTE0IDIwLjQ2NEMxNTUuNjM0IDE5LjE2OCAxNTYuNjE4IDE4LjE0OCAxNTcuODY2IDE3LjQwNEMxNTkuMTE0IDE2LjYzNiAxNjAuNTE4IDE2LjI1MiAxNjIuMDc4IDE2LjI1MkMxNjMuMzc0IDE2LjI1MiAxNjQuNTE0IDE2LjUwNCAxNjUuNDk4IDE3LjAwOEMxNjYuNTA2IDE3LjUxMiAxNjcuMjk4IDE4LjIwOCAxNjcuODc0IDE5LjA5NkMxNjguNDUgMTkuOTYgMTY4Ljc2MiAyMC45OCAxNjguODEgMjIuMTU2VjI3LjYyOEMxNjguNzYyIDI4Ljc4IDE2OC40MzggMjkuODEyIDE2Ny44MzggMzAuNzI0QzE2Ny4yNjIgMzEuNjEyIDE2Ni40NyAzMi4zMDggMTY1LjQ2MiAzMi44MTJDMTY0LjQ3OCAzMy4yOTIgMTYzLjM1IDMzLjUzMiAxNjIuMDc4IDMzLjUzMlpNMTYzLjAxNCAyOS4yNDhDMTYzLjg3OCAyOS4yNDggMTY0LjYyMiAyOS4wNjggMTY1LjI0NiAyOC43MDhDMTY1Ljg5NCAyOC4zMjQgMTY2LjM5OCAyNy44MDggMTY2Ljc1OCAyNy4xNkMxNjcuMTE4IDI2LjQ4OCAxNjcuMjk4IDI1LjczMiAxNjcuMjk4IDI0Ljg5MkMxNjcuMjk4IDI0LjAyOCAxNjcuMTE4IDIzLjI3MiAxNjYuNzU4IDIyLjYyNEMxNjYuMzk4IDIxLjk3NiAxNjUuODk0IDIxLjQ3MiAxNjUuMjQ2IDIxLjExMkMxNjQuNjIyIDIwLjcyOCAxNjMuODc4IDIwLjUzNiAxNjMuMDE0IDIwLjUzNkMxNjIuMTUgMjAuNTM2IDE2MS4zOTQgMjAuNzI4IDE2MC43NDYgMjEuMTEyQzE2MC4wOTggMjEuNDcyIDE1OS41OTQgMjEuOTg4IDE1OS4yMzQgMjIuNjZDMTU4Ljg3NCAyMy4zMDggMTU4LjY5NCAyNC4wNTIgMTU4LjY5NCAyNC44OTJDMTU4LjY5NCAyNS43MDggMTU4Ljg3NCAyNi40NTIgMTU5LjIzNCAyNy4xMjRDMTU5LjU5NCAyNy43NzIgMTYwLjA5OCAyOC4yODggMTYwLjc0NiAyOC42NzJDMTYxLjM5NCAyOS4wNTYgMTYyLjE1IDI5LjI0OCAxNjMuMDE0IDI5LjI0OFpNMTgwLjUxMyAzNEwxNzMuOTk3IDE2LjYxMkgxNzguNzQ5TDE4Mi45OTcgMjkuMjQ4TDE4MS41NTcgMjkuMjg0TDE4NS45MTMgMTYuNjEySDE4OS4zMzNMMTkzLjY4OSAyOS4yODRMMTkyLjI0OSAyOS4yNDhMMTk2LjQ5NyAxNi42MTJIMjAxLjI0OUwxOTQuNzY5IDM0SDE5MS4zNDlMMTg2Ljk1NyAyMS45NzZIMTg4LjI4OUwxODMuODk3IDM0SDE4MC41MTNaTTIxMy4xODUgMzQuMzZDMjExLjkzNyAzNC4zNiAyMTAuODA5IDM0LjEwOCAyMDkuODAxIDMzLjYwNEMyMDguNzkzIDMzLjA3NiAyMDcuOTg5IDMyLjM2OCAyMDcuMzg5IDMxLjQ4QzIwNi43ODkgMzAuNTkyIDIwNi40NjUgMjkuNTcyIDIwNi40MTcgMjguNDJWMjIuMjY0QzIwNi40NjUgMjEuMTEyIDIwNi43ODkgMjAuMDkyIDIwNy4zODkgMTkuMjA0QzIwOC4wMTMgMTguMjkyIDIwOC44MTcgMTcuNTcyIDIwOS44MDEgMTcuMDQ0QzIxMC44MDkgMTYuNTE2IDIxMS45MzcgMTYuMjUyIDIxMy4xODUgMTYuMjUyQzIxNC43OTMgMTYuMjUyIDIxNi4yMzMgMTYuNjQ4IDIxNy41MDUgMTcuNDRDMjE4Ljc3NyAxOC4yMzIgMjE5Ljc3MyAxOS4zMTIgMjIwLjQ5MyAyMC42OEMyMjEuMjM3IDIyLjA0OCAyMjEuNjA5IDIzLjU5NiAyMjEuNjA5IDI1LjMyNEMyMjEuNjA5IDI3LjAyOCAyMjEuMjM3IDI4LjU2NCAyMjAuNDkzIDI5LjkzMkMyMTkuNzczIDMxLjMgMjE4Ljc3NyAzMi4zOCAyMTcuNTA1IDMzLjE3MkMyMTYuMjMzIDMzLjk2NCAyMTQuNzkzIDM0LjM2IDIxMy4xODUgMzQuMzZaTTIwMy41MzcgNDEuMjcyVjE2LjYxMkgyMDguMjUzVjIxLjE4NEwyMDcuNDYxIDI1LjM5NkwyMDguMjE3IDI5LjYwOFY0MS4yNzJIMjAzLjUzN1pNMjEyLjM1NyAzMC4wMDRDMjEzLjIyMSAzMC4wMDQgMjEzLjk4OSAyOS44MTIgMjE0LjY2MSAyOS40MjhDMjE1LjMzMyAyOS4wMiAyMTUuODQ5IDI4LjQ2OCAyMTYuMjA5IDI3Ljc3MkMyMTYuNTkzIDI3LjA1MiAyMTYuNzg1IDI2LjIyNCAyMTYuNzg1IDI1LjI4OEMyMTYuNzg1IDI0LjM3NiAyMTYuNTkzIDIzLjU3MiAyMTYuMjA5IDIyLjg3NkMyMTUuODQ5IDIyLjE1NiAyMTUuMzMzIDIxLjYwNCAyMTQuNjYxIDIxLjIyQzIxMy45ODkgMjAuODEyIDIxMy4yMjEgMjAuNjA4IDIxMi4zNTcgMjAuNjA4QzIxMS41MTcgMjAuNjA4IDIxMC43NjEgMjAuODEyIDIxMC4wODkgMjEuMjJDMjA5LjQxNyAyMS42MDQgMjA4Ljg4OSAyMi4xNTYgMjA4LjUwNSAyMi44NzZDMjA4LjE0NSAyMy41NzIgMjA3Ljk2NSAyNC4zNzYgMjA3Ljk2NSAyNS4yODhDMjA3Ljk2NSAyNi4yMjQgMjA4LjE0NSAyNy4wNTIgMjA4LjUwNSAyNy43NzJDMjA4Ljg4OSAyOC40NjggMjA5LjQwNSAyOS4wMiAyMTAuMDUzIDI5LjQyOEMyMTAuNzI1IDI5LjgxMiAyMTEuNDkzIDMwLjAwNCAyMTIuMzU3IDMwLjAwNFoiIGZpbGw9IiMxQTFBMUEiLz4KPC9zdmc+Cg==");
    128128                background-repeat: no-repeat;
    129                 transform: translate(50%);
     129                transform: translate(10%);
    130130            }
    131131        </style>
    132132        <?php
    133     }
    134 
    135     /**
    136      * Apply package.
    137      *
    138      * Change the plugin data when WordPress checks for updates. This method
    139      * modifies package data to update the plugin from a specific URL containing
    140      * the version package.
    141      *
    142      * @access protected
    143      */
    144     protected function apply_package() {
    145         $update_plugins = get_site_transient( 'update_plugins' );
    146         if ( ! is_object( $update_plugins ) ) {
    147             $update_plugins = new \stdClass();
    148         }
    149 
    150         $plugin_info = new \stdClass();
    151         $plugin_info->new_version = $this->version;
    152         $plugin_info->slug = $this->plugin_slug;
    153         $plugin_info->package = $this->package_url;
    154         $plugin_info->url = 'https://analogwp.com/';
    155 
    156         $update_plugins->response[ $this->plugin_name ] = $plugin_info;
    157 
    158         set_site_transient( 'update_plugins', $update_plugins );
    159133    }
    160134
     
    167141     */
    168142    protected function upgrade() {
    169         require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
     143        if ( ! class_exists( 'WP_Upgrader_Skin' ) ) {
     144            require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
     145        }
    170146
    171         $upgrader_args = array(
    172             'url' => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ),
     147        require_once __DIR__ . '/class-rollback-downgrader-skin.php';
     148
     149        $skin_args = array(
     150            'url'    => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ),
    173151            'plugin' => $this->plugin_name,
    174             'nonce' => 'upgrade-plugin_' . $this->plugin_name,
    175             'title' => esc_html__( 'Rollback to Previous Version', 'analogwp-library' ),
     152            'nonce'  => 'upgrade-plugin_' . $this->plugin_name,
     153            'title'  => esc_html__( 'Rollback to Previous Version', 'analogwp-library' ),
    176154        );
    177155
    178156        $this->print_inline_style();
    179157
    180         $upgrader = new \Plugin_Upgrader( new \Plugin_Upgrader_Skin( $upgrader_args ) );
    181         $upgrader->upgrade( $this->plugin_name );
     158        $skin     = new Rollback_Downgrader_Skin( $skin_args );
     159        $upgrader = new \Plugin_Upgrader( $skin );
     160
     161        // IMPORTANT: initialize + install strings so feedback() can map keys.
     162        $upgrader->init();
     163        $upgrader->upgrade_strings();
     164        $upgrader->run(
     165            array(
     166                'package'                     => $this->package_url,
     167                'destination'                 => WP_PLUGIN_DIR,
     168                'abort_if_destination_exists' => false,
     169                'clear_working'               => true,
     170                'hook_extra'                  => array(
     171                    'plugin' => $this->plugin_name,
     172                    'type'   => 'plugin',
     173                    'action' => 'update',
     174                ),
     175            )
     176        );
    182177    }
    183178
     
    190185     */
    191186    public function run() {
    192         $this->apply_package();
    193187        $this->upgrade();
    194188    }
  • analogwp-library/tags/1.7.0/inc/Settings/Views/html-admin-settings.php

    r3396722 r3423181  
    8282            <?php if ( ! Plugin::instance()->has_pro_active() ) : ?>
    8383                <div class="upgrade-box special">
    84                     <h3>Upgrade to Custom Library Pro with<br/>80% discount in a Lifetime Deal</h3>
     84                    <h3>🔥 Upgrade to Custom Library PRO with a Special Discount</h3>
    8585
    86                     <p>Black Friday + Cyber Monday Special!<br/>We have <b>already applied 50% discount sitewide</b>—enter your email to <b>get an extra 30% code on top</b>. Limited-time offer!</p>
     86                    <p>Get additional features like <strong>Custom Branding/White-Label, Import/Export Templates, Role-Based Access Controls, Priority support and so much more</strong> while helping us support its development and maintenance.</p>
    8787
    8888                    <form id="js-ang-custom-library-request-discount" method="post">
  • analogwp-library/tags/1.7.0/languages/analogwp-library-analog-custom-library-app.json

    r3396722 r3423181  
    1 {"domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural_forms":"nplurals=2; plural=(n!=1);","lang":"en"},"Custom Library for Elementor":[""],"https://analogwp.com/custom-library-for-elementor":[""],"Custom Library for Elementor creates the foundation for a design framework that will help you create better, more consistent websites with Elementor.":[""],"AnalogWP":[""],"https://analogwp.com/":[""],"Custom Library for Elementor requires PHP version %s":[""],"Error Activating":[""],"Custom Library for Elementor requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT RUNNING.":[""],"Custom Library for Elementor requires Elementor v%s or newer in order to work. Please update Elementor to the latest version.":[""],"Update Elementor Now":[""],"Custom Library for Elementor is not working because you need to activate the Elementor plugin.":[""],"Activate Elementor Now":[""],"Custom Library for Elementor is not working because you need to install the Elementor plugin.":[""],"Install Elementor Now":[""],"Settings":[""],"Library":[""],"Something went wrong.":[""],"Template":[""],"Block":[""],"Add Custom Library for Elementor":[""],"Library is now synced":[""],"Something is not right, please try again.":[""],"Get unlimited access to the Custom Library for Elementor library and features with the PRO version.":[""],"View Plans":[""],"Templates":[""],"Blocks":[""],"Exit preview":[""],"Open in new tab":[""],"Import Template":[""],"Custom Library Settings":[""],"Custom Library":[""],"Your settings have been saved.":[""],"The changes you made will be lost if you navigate away from this page.":[""],"Select Image":[""],"Use this image":[""],"Pro":[""],"Upgrade to Pro":[""],"Toggle":[""],"Change Image":[""],"Revert to Default":[""],"Import":[""],"Go":[""],"Export All":[""],"Custom Library for Elementor Shortcuts":[""],"Templates Library":[""],"Theme Custom Library for Elementor":[""],"Add to library":[""],"Custom Library for Elementor Logo":[""],"Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!":[""],"View Documentation":[""],"Documentation":[""],"Get Support":[""],"Invalid Template ID.":[""],"No options key provided.":[""],"Setting updated.":[""],"Back to Library":[""],"Loading icon":[""],"Search Templates":[""],"The %s has been imported and is now available in the":[""],"Elementor %s library":[""],"Ok, thanks":[""],"No Templates found":[""],"Loading Templates...":[""],"Insert":[""],"Library Settings":[""],"Save changes":[""],"Your Email":[""],"First Name":[""],"Send me the coupon":[""],"By submitting your details, you agree to our %s.":[""],"privacy policy":[""],"Version Control":[""],"Rollback Versions":[""],"If you are having issues with current version of Custom Library, you can rollback to a previous stable version.":[""],"Rollback Custom Library":[""],"Reinstall this version":[""],"Tools":[""],"Updated successfully":[""],"Update failed! Please try again":[""],"Run Update":[""],"%1$s ? %2$s template(s)":[""],"Update Library Templates":[""],"This action will update any templates found to be outdated in the Custom Library from their source template in Elementor template library.":[""],"Note: Outdated templates are templates that were created before the current version of this plugin. You only need to run this when you think there is a problem in the Custom Library.":[""],"No outdated templates found.":[""],"Failed to update outdated templates.":[""],"Misc":[""],"Remove Data on Uninstall":[""],"Check this box to remove all data stored by Custom Library for Elementor plugin, including license info, user settings, import history etc.":[""],"Importer / Exporter":[""],"Templates Importer":[""],"Imports .json or .zip files exported only via the Custom Library Pro templates exporter.":[""],"Templates Exporter":[""],"Exports all the templates published and available in the Custom Library.":[""],"General":[""],"General Settings":[""],"Hide default Elementor Template library icon from editor.":[""],"Hide default Elementor Template library popup from editor.":[""],"Placeholder image":[""],"Replace the default placeholder image.":[""],"Trigger icon":[""],"Replace the trigger icon.":[""],"Library Access":[""],"Show to All":[""],"Show only to specific roles":[""],"Show only to specific users":[""],"Settings Access":[""],"Please note, by default all administrators have settings access even if it is not explicitly set here to avoid accidental lockouts.":[""],"Design":[""],"Library popup style":[""],"Compact (popup)":[""],"Fullscreen":[""],"Template columns":[""],"2 Columns":[""],"3 Columns":[""],"Auto":[""],"Categories location":[""],"Sidebar":[""],"Horizontal":[""],"None":[""],"Show categories template count":[""],"Library title":[""],"Show Buttons on hover":[""],"Show Preview Button":[""],"Show Edit Button":[""],"Header colors":[""],"Header Background":[""],"Header Text":[""],"Header Border Bottom":[""],"Categories colors":[""],"Categories Background":[""],"Categories Text":[""],"Active Category Text":[""],"Button styles":[""],"Button Background Color":[""],"Button Text Color":[""],"Button Border Color":[""],"Button Border Radius":[""],"Button Border Width":[""],"Rollback to Previous Version":[""],"Sorry, you are not allowed to rollback Custom Library plugin for this site.":[""],"Error occurred, the version selected is invalid. Try selecting different version.":[""],"Save":[""],"Enter Template Name":[""],"Add to Custom Library":[""],"Give your template a name":[""],"Cloud Templates":[""],"Upgrade":[""],"Connect":[""],"Site Templates":[""],"Note: Custom Library sync requires \"Site Templates\" to be checked as well.":[""],"You?ve saved 100% of the templates in your plan.":[""],"To get more space %s":[""],"Upgrade now":[""],"Learn more about the":[""],"Template Library":[""],"Unable to sanitize this file hence it wasn't uploaded!":[""],"Full Size":[""],"Thumbnail":[""],"Medium":[""],"Large":[""],"settings title\u0004Enable SVG Uploads":[""]}}}
     1{"domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural_forms":"nplurals=2; plural=(n!=1);","lang":"en"},"Custom Library for Elementor":[""],"https://analogwp.com/custom-library-for-elementor":[""],"Custom Library for Elementor creates the foundation for a design framework that will help you create better, more consistent websites with Elementor.":[""],"AnalogWP":[""],"https://analogwp.com/":[""],"Custom Library for Elementor requires PHP version %s":[""],"Error Activating":[""],"Custom Library for Elementor requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT RUNNING.":[""],"Custom Library for Elementor requires Elementor v%s or newer in order to work. Please update Elementor to the latest version.":[""],"Update Elementor Now":[""],"Custom Library for Elementor is not working because you need to activate the Elementor plugin.":[""],"Activate Elementor Now":[""],"Custom Library for Elementor is not working because you need to install the Elementor plugin.":[""],"Install Elementor Now":[""],"Settings":[""],"Library":[""],"Something went wrong.":[""],"Template":[""],"Block":[""],"Add Custom Library for Elementor":[""],"Library is now synced":[""],"Something is not right, please try again.":[""],"Get unlimited access to the Custom Library for Elementor library and features with the PRO version.":[""],"View Plans":[""],"Templates":[""],"Blocks":[""],"Exit preview":[""],"Open in new tab":[""],"Import Template":[""],"Custom Library Settings":[""],"Custom Library":[""],"Your settings have been saved.":[""],"The changes you made will be lost if you navigate away from this page.":[""],"Select Image":[""],"Use this image":[""],"Pro":[""],"Upgrade to Pro":[""],"Toggle":[""],"Change Image":[""],"Revert to Default":[""],"Import":[""],"Go":[""],"Export All":[""],"Custom Library for Elementor Shortcuts":[""],"Templates Library":[""],"Theme Custom Library for Elementor":[""],"Add to library":[""],"Custom Library for Elementor Logo":[""],"Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!":[""],"View Documentation":[""],"Documentation":[""],"Get Support":[""],"Invalid Template ID.":[""],"No options key provided.":[""],"Setting updated.":[""],"Back to Library":[""],"Loading icon":[""],"Search Templates":[""],"The %s has been imported and is now available in the":[""],"Elementor %s library":[""],"Ok, thanks":[""],"No Templates found":[""],"Loading Templates...":[""],"Insert":[""],"Library Settings":[""],"Save changes":[""],"Your Email":[""],"First Name":[""],"Send me the coupon":[""],"By submitting your details, you agree to our %s.":[""],"privacy policy":[""],"Version Control":[""],"Rollback Versions":[""],"If you are having issues with current version of Custom Library, you can rollback to a previous stable version.":[""],"Rollback Custom Library":[""],"Reinstall this version":[""],"Tools":[""],"Updated successfully":[""],"Update failed! Please try again":[""],"Run Update":[""],"%1$s ? %2$s template(s)":[""],"Update Library Templates":[""],"This action will update any templates found to be outdated in the Custom Library from their source template in Elementor template library.":[""],"Note: Outdated templates are templates that were created before the current version of this plugin. You only need to run this when you think there is a problem in the Custom Library.":[""],"No outdated templates found.":[""],"Failed to update outdated templates.":[""],"Misc":[""],"Remove Data on Uninstall":[""],"Check this box to remove all data stored by Custom Library for Elementor plugin, including license info, user settings, import history etc.":[""],"Importer / Exporter":[""],"Templates Importer":[""],"Imports .json or .zip files exported only via the Custom Library Pro templates exporter.":[""],"Templates Exporter":[""],"Exports all the templates published and available in the Custom Library.":[""],"General":[""],"General Settings":[""],"Hide default Elementor Template library icon from editor.":[""],"Hide default Elementor Template library popup from editor.":[""],"Placeholder image":[""],"Replace the default placeholder image.":[""],"Trigger icon":[""],"Replace the trigger icon.":[""],"Library Access":[""],"Show to All":[""],"Show only to specific roles":[""],"Show only to specific users":[""],"Settings Access":[""],"Please note, by default all administrators have settings access even if it is not explicitly set here to avoid accidental lockouts.":[""],"Design":[""],"Library popup style":[""],"Compact (popup)":[""],"Fullscreen":[""],"Template columns":[""],"2 Columns":[""],"3 Columns":[""],"Auto":[""],"Categories location":[""],"Sidebar":[""],"Horizontal":[""],"None":[""],"Show categories template count":[""],"Library title":[""],"Show Buttons on hover":[""],"Show Preview Button":[""],"Show Edit Button":[""],"Header colors":[""],"Header Background":[""],"Header Text":[""],"Header Border Bottom":[""],"Categories colors":[""],"Categories Background":[""],"Categories Text":[""],"Active Category Text":[""],"Button styles":[""],"Button Background Color":[""],"Button Text Color":[""],"Button Border Color":[""],"Button Border Radius":[""],"Button Border Width":[""],"Rollback to Previous Version":[""],"Rolling back plugin?":[""],"Rollback failed during installation.":[""],"Rollback complete. The plugin files have been restored.":[""],"Go to Plugins page":[""],"Sorry, you are not allowed to rollback Custom Library plugin for this site.":[""],"Error occurred, the version selected is invalid. Try selecting different version.":[""],"Save":[""],"Enter Template Name":[""],"Add to Custom Library":[""],"Give your template a name":[""],"Cloud Templates":[""],"Upgrade":[""],"Connect":[""],"Site Templates":[""],"Note: Custom Library sync requires \"Site Templates\" to be checked as well.":[""],"You?ve saved 100% of the templates in your plan.":[""],"To get more space %s":[""],"Upgrade now":[""],"Learn more about the":[""],"Template Library":[""],"Unable to sanitize this file hence it wasn't uploaded!":[""],"Full Size":[""],"Thumbnail":[""],"Medium":[""],"Large":[""],"settings title\u0004Enable SVG Uploads":[""]}}}
  • analogwp-library/tags/1.7.0/languages/analogwp-library.pot

    r3396722 r3423181  
    44msgid ""
    55msgstr ""
    6 "Project-Id-Version: analogwp-library 1.6.1\n"
     6"Project-Id-Version: analogwp-library 1.7.0\n"
    77"Report-Msgid-Bugs-To: AnalogWP <EMAIL>\n"
    88"MIME-Version: 1.0\n"
     
    1010"Content-Type: text/plain; charset=iso-8859-1\n"
    1111"Plural-Forms: nplurals=2; plural=(n!=1);\n"
    12 "POT-Creation-Date: 2025-11-16T19:13:34.673Z\n"
     12"POT-Creation-Date: 2025-12-18T18:40:27.845Z\n"
    1313"PO-Revision-Date: 2025-MO-DA HO:MI+ZONE\n"
    1414"Last-Translator: AnalogWP <EMAIL>\n"
     
    633633msgstr ""
    634634
    635 #: inc/Featuresets/rollback/class-rollbacker.php:175
    636 #: inc/Featuresets/rollback/class-init.php:94
     635#: inc/Featuresets/rollback/class-rollbacker.php:153
     636#: inc/Featuresets/rollback/class-init.php:93
    637637msgid "Rollback to Previous Version"
    638638msgstr ""
    639639
    640 #: inc/Featuresets/rollback/class-init.php:67
     640#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:32
     641msgid "Rolling back plugin?"
     642msgstr ""
     643
     644#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:74
     645msgid "Rollback failed during installation."
     646msgstr ""
     647
     648#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:85
     649msgid "Rollback complete. The plugin files have been restored."
     650msgstr ""
     651
     652#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:90
     653msgid "Go to Plugins page"
     654msgstr ""
     655
     656#: inc/Featuresets/rollback/class-init.php:66
    641657msgid "Sorry, you are not allowed to rollback Custom Library plugin for this site."
    642658msgstr ""
    643659
    644 #: inc/Featuresets/rollback/class-init.php:75
     660#: inc/Featuresets/rollback/class-init.php:74
    645661msgid ""
    646662"Error occurred, the version selected is invalid. Try selecting different "
  • analogwp-library/trunk/analogwp-library.php

    r3396722 r3423181  
    1111 * Plugin URI:  https://analogwp.com/custom-library-for-elementor
    1212 * Description: Custom Library for Elementor creates the foundation for a design framework that will help you create better, more consistent websites with Elementor.
    13  * Version:     1.6.1
     13 * Version:     1.7.0
    1414 * Author:      AnalogWP
    1515 * Author URI:  https://analogwp.com/
     
    1919 * Requires at least: 6.0
    2020 * Requires PHP: 7.4
    21  * Elementor tested up to: 3.33.2
    22  * Elementor Pro tested up to: 3.33.1
     21 * Elementor tested up to: 3.33.6
     22 * Elementor Pro tested up to: 3.33.2
    2323 */
    2424
     
    2828define( 'AGWP_LIBRARY_PHP_MINIMUM', '7.4' );
    2929define( 'AGWP_LIBRARY_WP_MINIMUM', '6.0' );
    30 define( 'AGWP_LIBRARY_VERSION', '1.6.1' );
     30define( 'AGWP_LIBRARY_VERSION', '1.7.0' );
    3131define( 'AGWP_LIBRARY_PLUGIN_FILE', __FILE__ );
    3232define( 'AGWP_LIBRARY_PLUGIN_URL', plugin_dir_url( AGWP_LIBRARY_PLUGIN_FILE ) );
  • analogwp-library/trunk/assets/js/admin-settings.js

    r3396722 r3423181  
    190190
    191191            $.post(
    192                 'https://analogwp.com/?ang-api=cl_bfcm_discount_code',
     192                'https://analogwp.com/?ang-api=pro_discount_code',
    193193                {
    194194                    email: email,
    195195                    first_name: JSON.stringify( fname ),
    196196                    last_name: JSON.stringify( lname ),
     197                    slug: 'custom-library',
    197198                }
    198199            ).done( function( res ) {
  • analogwp-library/trunk/inc/Featuresets/rollback/class-init.php

    r3384542 r3423181  
    5050     */
    5151    public function add_rollback_data( $data ) {
    52         $data['rollback_url']      = wp_nonce_url( admin_url( 'admin-post.php?action=analog_custom_library_rollback&version=VERSION' ), 'analog_custom_library_rollback' );
    53         $data['rollback_versions'] = self::get_rollback_versions();
     52        $data['rollback_url'] = wp_nonce_url( admin_url( 'admin-post.php?action=analog_custom_library_rollback&version=VERSION' ), 'analog_custom_library_rollback' );
    5453
    5554        return $data;
     
    142141                }
    143142
    144                 $current_index++;
     143                ++$current_index;
    145144                $rollback_versions[] = $version;
    146145            }
  • analogwp-library/trunk/inc/Featuresets/rollback/class-rollbacker.php

    r3384542 r3423181  
    127127                background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIzIiBoZWlnaHQ9IjQyIiB2aWV3Qm94PSIwIDAgMjIzIDQyIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI5Ljg0NTcgNC4zMTc1NkMyNi41OTc4IC0xLjQzOTE4IDE4LjQwMjIgLTEuNDM5MTkgMTUuMTU0MyA0LjMxNzU2TDEuMTI3MjMgMjkuMTc5N0MtMi4wOTU3NiAzNC44OTIyIDEuOTc2ODMgNDIgOC40NzI5NiA0MkgzNi41MjdDNDMuMDIzMiA0MiA0Ny4wOTU4IDM0Ljg5MjIgNDMuODcyOCAyOS4xNzk3TDI5Ljg0NTcgNC4zMTc1NlpNMjguNzc0MSAyMS41MDZDMjYgMTYuNTg5MSAxOSAxNi41ODkxIDE2LjIyNTkgMjEuNTA2QzEzLjQ3MzEgMjYuMzg1MiAxNi45NTE2IDMyLjQ1NiAyMi41IDMyLjQ1NkMyOC4wNDg0IDMyLjQ1NiAzMS41MjY5IDI2LjM4NTIgMjguNzc0MSAyMS41MDZaIiBmaWxsPSIjMUExQTFBIi8+CjxwYXRoIGQ9Ik03MC4zNiAzNC4zNkM2OC43NzYgMzQuMzYgNjcuMzQ4IDMzLjk2NCA2Ni4wNzYgMzMuMTcyQzY0LjgwNCAzMi4zOCA2My44MDggMzEuMyA2My4wODggMjkuOTMyQzYyLjM2OCAyOC41NjQgNjIuMDA4IDI3LjAyOCA2Mi4wMDggMjUuMzI0QzYyLjAwOCAyMy41OTYgNjIuMzY4IDIyLjA0OCA2My4wODggMjAuNjhDNjMuODA4IDE5LjMxMiA2NC44MDQgMTguMjMyIDY2LjA3NiAxNy40NEM2Ny4zNDggMTYuNjQ4IDY4Ljc3NiAxNi4yNTIgNzAuMzYgMTYuMjUyQzcxLjYwOCAxNi4yNTIgNzIuNzI0IDE2LjUwNCA3My43MDggMTcuMDA4Qzc0LjY5MiAxNy41MTIgNzUuNDcyIDE4LjIyIDc2LjA0OCAxOS4xMzJDNzYuNjQ4IDIwLjAyIDc2Ljk3MiAyMS4wMjggNzcuMDIgMjIuMTU2VjI4LjQyQzc2Ljk3MiAyOS41NzIgNzYuNjQ4IDMwLjU5MiA3Ni4wNDggMzEuNDhDNzUuNDcyIDMyLjM2OCA3NC42OTIgMzMuMDc2IDczLjcwOCAzMy42MDRDNzIuNzI0IDM0LjEwOCA3MS42MDggMzQuMzYgNzAuMzYgMzQuMzZaTTcxLjIyNCAzMC4wMDRDNzIuNTQ0IDMwLjAwNCA3My42MTIgMjkuNTcyIDc0LjQyOCAyOC43MDhDNzUuMjQ0IDI3LjgyIDc1LjY1MiAyNi42OCA3NS42NTIgMjUuMjg4Qzc1LjY1MiAyNC4zNzYgNzUuNDYgMjMuNTcyIDc1LjA3NiAyMi44NzZDNzQuNzE2IDIyLjE1NiA3NC4yIDIxLjYwNCA3My41MjggMjEuMjJDNzIuODggMjAuODEyIDcyLjExMiAyMC42MDggNzEuMjI0IDIwLjYwOEM3MC4zNiAyMC42MDggNjkuNTkyIDIwLjgxMiA2OC45MiAyMS4yMkM2OC4yNzIgMjEuNjA0IDY3Ljc1NiAyMi4xNTYgNjcuMzcyIDIyLjg3NkM2Ny4wMTIgMjMuNTcyIDY2LjgzMiAyNC4zNzYgNjYuODMyIDI1LjI4OEM2Ni44MzIgMjYuMjI0IDY3LjAxMiAyNy4wNTIgNjcuMzcyIDI3Ljc3MkM2Ny43NTYgMjguNDY4IDY4LjI3MiAyOS4wMiA2OC45MiAyOS40MjhDNjkuNTkyIDI5LjgxMiA3MC4zNiAzMC4wMDQgNzEuMjI0IDMwLjAwNFpNNzUuNCAzNFYyOS4zMkw3Ni4xNTYgMjUuMDcyTDc1LjQgMjAuODk2VjE2LjYxMkg4MC4wOFYzNEg3NS40Wk05NS45NTIxIDM0VjI0LjAyOEM5NS45NTIxIDIyLjk5NiA5NS42MjgxIDIyLjE1NiA5NC45ODAxIDIxLjUwOEM5NC4zMzIxIDIwLjg2IDkzLjQ5MjEgMjAuNTM2IDkyLjQ2MDEgMjAuNTM2QzkxLjc4ODEgMjAuNTM2IDkxLjE4ODEgMjAuNjggOTAuNjYwMSAyMC45NjhDOTAuMTMyMSAyMS4yNTYgODkuNzEyMSAyMS42NjQgODkuNDAwMSAyMi4xOTJDODkuMTEyMSAyMi43MiA4OC45NjgxIDIzLjMzMiA4OC45NjgxIDI0LjAyOEw4Ny4xMzIxIDIzLjA5MkM4Ny4xMzIxIDIxLjcyNCA4Ny40MjAxIDIwLjUzNiA4Ny45OTYxIDE5LjUyOEM4OC41OTYxIDE4LjQ5NiA4OS40MTIxIDE3LjY5MiA5MC40NDQxIDE3LjExNkM5MS41MDAxIDE2LjU0IDkyLjY4ODEgMTYuMjUyIDk0LjAwODEgMTYuMjUyQzk1LjI4MDEgMTYuMjUyIDk2LjQyMDEgMTYuNTc2IDk3LjQyODEgMTcuMjI0Qzk4LjQzNjEgMTcuODQ4IDk5LjIyODEgMTguNjc2IDk5LjgwNDEgMTkuNzA4QzEwMC4zOCAyMC43MTYgMTAwLjY2OCAyMS44MDggMTAwLjY2OCAyMi45ODRWMzRIOTUuOTUyMVpNODQuMjUyMSAzNFYxNi42MTJIODguOTY4MVYzNEg4NC4yNTIxWk0xMTEuNzM5IDM0LjM2QzExMC4xNTUgMzQuMzYgMTA4LjcyNyAzMy45NjQgMTA3LjQ1NSAzMy4xNzJDMTA2LjE4MyAzMi4zOCAxMDUuMTg3IDMxLjMgMTA0LjQ2NyAyOS45MzJDMTAzLjc0NyAyOC41NjQgMTAzLjM4NyAyNy4wMjggMTAzLjM4NyAyNS4zMjRDMTAzLjM4NyAyMy41OTYgMTAzLjc0NyAyMi4wNDggMTA0LjQ2NyAyMC42OEMxMDUuMTg3IDE5LjMxMiAxMDYuMTgzIDE4LjIzMiAxMDcuNDU1IDE3LjQ0QzEwOC43MjcgMTYuNjQ4IDExMC4xNTUgMTYuMjUyIDExMS43MzkgMTYuMjUyQzExMi45ODcgMTYuMjUyIDExNC4xMDMgMTYuNTA0IDExNS4wODcgMTcuMDA4QzExNi4wNzEgMTcuNTEyIDExNi44NTEgMTguMjIgMTE3LjQyNyAxOS4xMzJDMTE4LjAyNyAyMC4wMiAxMTguMzUxIDIxLjAyOCAxMTguMzk5IDIyLjE1NlYyOC40MkMxMTguMzUxIDI5LjU3MiAxMTguMDI3IDMwLjU5MiAxMTcuNDI3IDMxLjQ4QzExNi44NTEgMzIuMzY4IDExNi4wNzEgMzMuMDc2IDExNS4wODcgMzMuNjA0QzExNC4xMDMgMzQuMTA4IDExMi45ODcgMzQuMzYgMTExLjczOSAzNC4zNlpNMTEyLjYwMyAzMC4wMDRDMTEzLjkyMyAzMC4wMDQgMTE0Ljk5MSAyOS41NzIgMTE1LjgwNyAyOC43MDhDMTE2LjYyMyAyNy44MiAxMTcuMDMxIDI2LjY4IDExNy4wMzEgMjUuMjg4QzExNy4wMzEgMjQuMzc2IDExNi44MzkgMjMuNTcyIDExNi40NTUgMjIuODc2QzExNi4wOTUgMjIuMTU2IDExNS41NzkgMjEuNjA0IDExNC45MDcgMjEuMjJDMTE0LjI1OSAyMC44MTIgMTEzLjQ5MSAyMC42MDggMTEyLjYwMyAyMC42MDhDMTExLjczOSAyMC42MDggMTEwLjk3MSAyMC44MTIgMTEwLjI5OSAyMS4yMkMxMDkuNjUxIDIxLjYwNCAxMDkuMTM1IDIyLjE1NiAxMDguNzUxIDIyLjg3NkMxMDguMzkxIDIzLjU3MiAxMDguMjExIDI0LjM3NiAxMDguMjExIDI1LjI4OEMxMDguMjExIDI2LjIyNCAxMDguMzkxIDI3LjA1MiAxMDguNzUxIDI3Ljc3MkMxMDkuMTM1IDI4LjQ2OCAxMDkuNjUxIDI5LjAyIDExMC4yOTkgMjkuNDI4QzExMC45NzEgMjkuODEyIDExMS43MzkgMzAuMDA0IDExMi42MDMgMzAuMDA0Wk0xMTYuNzc5IDM0VjI5LjMyTDExNy41MzUgMjUuMDcyTDExNi43NzkgMjAuODk2VjE2LjYxMkgxMjEuNDU5VjM0SDExNi43NzlaTTEyNS42MzEgMzRWNy45NzJIMTMwLjM0N1YzNEgxMjUuNjMxWk0xNDIuNjk4IDM0LjM2QzE0MC45NDYgMzQuMzYgMTM5LjM2MiAzMy45NjQgMTM3Ljk0NiAzMy4xNzJDMTM2LjU1NCAzMi4zNTYgMTM1LjQzOCAzMS4yNjQgMTM0LjU5OCAyOS44OTZDMTMzLjc4MiAyOC41MDQgMTMzLjM3NCAyNi45NTYgMTMzLjM3NCAyNS4yNTJDMTMzLjM3NCAyMy41NDggMTMzLjc4MiAyMi4wMjQgMTM0LjU5OCAyMC42OEMxMzUuNDE0IDE5LjMxMiAxMzYuNTMgMTguMjMyIDEzNy45NDYgMTcuNDRDMTM5LjM2MiAxNi42MjQgMTQwLjkzNCAxNi4yMTYgMTQyLjY2MiAxNi4yMTZDMTQ0LjQzOCAxNi4yMTYgMTQ2LjAyMiAxNi42MjQgMTQ3LjQxNCAxNy40NEMxNDguODMgMTguMjMyIDE0OS45NDYgMTkuMzEyIDE1MC43NjIgMjAuNjhDMTUxLjU3OCAyMi4wMjQgMTUxLjk4NiAyMy41NDggMTUxLjk4NiAyNS4yNTJDMTUxLjk4NiAyNi45NTYgMTUxLjU3OCAyOC41MDQgMTUwLjc2MiAyOS44OTZDMTQ5Ljk0NiAzMS4yNjQgMTQ4LjgzIDMyLjM1NiAxNDcuNDE0IDMzLjE3MkMxNDYuMDIyIDMzLjk2NCAxNDQuNDUgMzQuMzYgMTQyLjY5OCAzNC4zNlpNMTQyLjY2MiAyOS45NjhDMTQzLjU1IDI5Ljk2OCAxNDQuMzMgMjkuNzc2IDE0NS4wMDIgMjkuMzkyQzE0NS42OTggMjguOTg0IDE0Ni4yMjYgMjguNDMyIDE0Ni41ODYgMjcuNzM2QzE0Ni45NyAyNy4wMTYgMTQ3LjE2MiAyNi4yIDE0Ny4xNjIgMjUuMjg4QzE0Ny4xNjIgMjQuMzc2IDE0Ni45NyAyMy41NzIgMTQ2LjU4NiAyMi44NzZDMTQ2LjIwMiAyMi4xOCAxNDUuNjc0IDIxLjY0IDE0NS4wMDIgMjEuMjU2QzE0NC4zMyAyMC44NDggMTQzLjU1IDIwLjY0NCAxNDIuNjYyIDIwLjY0NEMxNDEuNzk4IDIwLjY0NCAxNDEuMDMgMjAuODQ4IDE0MC4zNTggMjEuMjU2QzEzOS42ODYgMjEuNjQgMTM5LjE1OCAyMi4xOCAxMzguNzc0IDIyLjg3NkMxMzguMzkgMjMuNTcyIDEzOC4xOTggMjQuMzc2IDEzOC4xOTggMjUuMjg4QzEzOC4xOTggMjYuMiAxMzguMzkgMjcuMDE2IDEzOC43NzQgMjcuNzM2QzEzOS4xNTggMjguNDMyIDEzOS42ODYgMjguOTg0IDE0MC4zNTggMjkuMzkyQzE0MS4wMyAyOS43NzYgMTQxLjc5OCAyOS45NjggMTQyLjY2MiAyOS45NjhaTTE2Mi4yOTQgNDEuNzA0QzE2MC40NDYgNDEuNzA0IDE1OC44MTQgNDEuMzY4IDE1Ny4zOTggNDAuNjk2QzE1NS45ODIgNDAuMDQ4IDE1NC44NTQgMzkuMTI0IDE1NC4wMTQgMzcuOTI0TDE1Ny4wMDIgMzQuOTM2QzE1Ny42NzQgMzUuNzI4IDE1OC40MTggMzYuMzI4IDE1OS4yMzQgMzYuNzM2QzE2MC4wNzQgMzcuMTY4IDE2MS4wODIgMzcuMzg0IDE2Mi4yNTggMzcuMzg0QzE2My43MjIgMzcuMzg0IDE2NC44NzQgMzcuMDEyIDE2NS43MTQgMzYuMjY4QzE2Ni41NzggMzUuNTI0IDE2Ny4wMSAzNC40OTIgMTY3LjAxIDMzLjE3MlYyOC44MTZMMTY3LjgwMiAyNUwxNjcuMDQ2IDIxLjE4NFYxNi42MTJIMTcxLjcyNlYzMy4xQzE3MS43MjYgMzQuODI4IDE3MS4zMTggMzYuMzI4IDE3MC41MDIgMzcuNkMxNjkuNzEgMzguODk2IDE2OC42MDYgMzkuOTA0IDE2Ny4xOSA0MC42MjRDMTY1Ljc3NCA0MS4zNDQgMTY0LjE0MiA0MS43MDQgMTYyLjI5NCA0MS43MDRaTTE2Mi4wNzggMzMuNTMyQzE2MC41MTggMzMuNTMyIDE1OS4xMTQgMzMuMTYgMTU3Ljg2NiAzMi40MTZDMTU2LjYxOCAzMS42NDggMTU1LjYzNCAzMC42MDQgMTU0LjkxNCAyOS4yODRDMTU0LjIxOCAyNy45NjQgMTUzLjg3IDI2LjQ4OCAxNTMuODcgMjQuODU2QzE1My44NyAyMy4yMjQgMTU0LjIxOCAyMS43NiAxNTQuOTE0IDIwLjQ2NEMxNTUuNjM0IDE5LjE2OCAxNTYuNjE4IDE4LjE0OCAxNTcuODY2IDE3LjQwNEMxNTkuMTE0IDE2LjYzNiAxNjAuNTE4IDE2LjI1MiAxNjIuMDc4IDE2LjI1MkMxNjMuMzc0IDE2LjI1MiAxNjQuNTE0IDE2LjUwNCAxNjUuNDk4IDE3LjAwOEMxNjYuNTA2IDE3LjUxMiAxNjcuMjk4IDE4LjIwOCAxNjcuODc0IDE5LjA5NkMxNjguNDUgMTkuOTYgMTY4Ljc2MiAyMC45OCAxNjguODEgMjIuMTU2VjI3LjYyOEMxNjguNzYyIDI4Ljc4IDE2OC40MzggMjkuODEyIDE2Ny44MzggMzAuNzI0QzE2Ny4yNjIgMzEuNjEyIDE2Ni40NyAzMi4zMDggMTY1LjQ2MiAzMi44MTJDMTY0LjQ3OCAzMy4yOTIgMTYzLjM1IDMzLjUzMiAxNjIuMDc4IDMzLjUzMlpNMTYzLjAxNCAyOS4yNDhDMTYzLjg3OCAyOS4yNDggMTY0LjYyMiAyOS4wNjggMTY1LjI0NiAyOC43MDhDMTY1Ljg5NCAyOC4zMjQgMTY2LjM5OCAyNy44MDggMTY2Ljc1OCAyNy4xNkMxNjcuMTE4IDI2LjQ4OCAxNjcuMjk4IDI1LjczMiAxNjcuMjk4IDI0Ljg5MkMxNjcuMjk4IDI0LjAyOCAxNjcuMTE4IDIzLjI3MiAxNjYuNzU4IDIyLjYyNEMxNjYuMzk4IDIxLjk3NiAxNjUuODk0IDIxLjQ3MiAxNjUuMjQ2IDIxLjExMkMxNjQuNjIyIDIwLjcyOCAxNjMuODc4IDIwLjUzNiAxNjMuMDE0IDIwLjUzNkMxNjIuMTUgMjAuNTM2IDE2MS4zOTQgMjAuNzI4IDE2MC43NDYgMjEuMTEyQzE2MC4wOTggMjEuNDcyIDE1OS41OTQgMjEuOTg4IDE1OS4yMzQgMjIuNjZDMTU4Ljg3NCAyMy4zMDggMTU4LjY5NCAyNC4wNTIgMTU4LjY5NCAyNC44OTJDMTU4LjY5NCAyNS43MDggMTU4Ljg3NCAyNi40NTIgMTU5LjIzNCAyNy4xMjRDMTU5LjU5NCAyNy43NzIgMTYwLjA5OCAyOC4yODggMTYwLjc0NiAyOC42NzJDMTYxLjM5NCAyOS4wNTYgMTYyLjE1IDI5LjI0OCAxNjMuMDE0IDI5LjI0OFpNMTgwLjUxMyAzNEwxNzMuOTk3IDE2LjYxMkgxNzguNzQ5TDE4Mi45OTcgMjkuMjQ4TDE4MS41NTcgMjkuMjg0TDE4NS45MTMgMTYuNjEySDE4OS4zMzNMMTkzLjY4OSAyOS4yODRMMTkyLjI0OSAyOS4yNDhMMTk2LjQ5NyAxNi42MTJIMjAxLjI0OUwxOTQuNzY5IDM0SDE5MS4zNDlMMTg2Ljk1NyAyMS45NzZIMTg4LjI4OUwxODMuODk3IDM0SDE4MC41MTNaTTIxMy4xODUgMzQuMzZDMjExLjkzNyAzNC4zNiAyMTAuODA5IDM0LjEwOCAyMDkuODAxIDMzLjYwNEMyMDguNzkzIDMzLjA3NiAyMDcuOTg5IDMyLjM2OCAyMDcuMzg5IDMxLjQ4QzIwNi43ODkgMzAuNTkyIDIwNi40NjUgMjkuNTcyIDIwNi40MTcgMjguNDJWMjIuMjY0QzIwNi40NjUgMjEuMTEyIDIwNi43ODkgMjAuMDkyIDIwNy4zODkgMTkuMjA0QzIwOC4wMTMgMTguMjkyIDIwOC44MTcgMTcuNTcyIDIwOS44MDEgMTcuMDQ0QzIxMC44MDkgMTYuNTE2IDIxMS45MzcgMTYuMjUyIDIxMy4xODUgMTYuMjUyQzIxNC43OTMgMTYuMjUyIDIxNi4yMzMgMTYuNjQ4IDIxNy41MDUgMTcuNDRDMjE4Ljc3NyAxOC4yMzIgMjE5Ljc3MyAxOS4zMTIgMjIwLjQ5MyAyMC42OEMyMjEuMjM3IDIyLjA0OCAyMjEuNjA5IDIzLjU5NiAyMjEuNjA5IDI1LjMyNEMyMjEuNjA5IDI3LjAyOCAyMjEuMjM3IDI4LjU2NCAyMjAuNDkzIDI5LjkzMkMyMTkuNzczIDMxLjMgMjE4Ljc3NyAzMi4zOCAyMTcuNTA1IDMzLjE3MkMyMTYuMjMzIDMzLjk2NCAyMTQuNzkzIDM0LjM2IDIxMy4xODUgMzQuMzZaTTIwMy41MzcgNDEuMjcyVjE2LjYxMkgyMDguMjUzVjIxLjE4NEwyMDcuNDYxIDI1LjM5NkwyMDguMjE3IDI5LjYwOFY0MS4yNzJIMjAzLjUzN1pNMjEyLjM1NyAzMC4wMDRDMjEzLjIyMSAzMC4wMDQgMjEzLjk4OSAyOS44MTIgMjE0LjY2MSAyOS40MjhDMjE1LjMzMyAyOS4wMiAyMTUuODQ5IDI4LjQ2OCAyMTYuMjA5IDI3Ljc3MkMyMTYuNTkzIDI3LjA1MiAyMTYuNzg1IDI2LjIyNCAyMTYuNzg1IDI1LjI4OEMyMTYuNzg1IDI0LjM3NiAyMTYuNTkzIDIzLjU3MiAyMTYuMjA5IDIyLjg3NkMyMTUuODQ5IDIyLjE1NiAyMTUuMzMzIDIxLjYwNCAyMTQuNjYxIDIxLjIyQzIxMy45ODkgMjAuODEyIDIxMy4yMjEgMjAuNjA4IDIxMi4zNTcgMjAuNjA4QzIxMS41MTcgMjAuNjA4IDIxMC43NjEgMjAuODEyIDIxMC4wODkgMjEuMjJDMjA5LjQxNyAyMS42MDQgMjA4Ljg4OSAyMi4xNTYgMjA4LjUwNSAyMi44NzZDMjA4LjE0NSAyMy41NzIgMjA3Ljk2NSAyNC4zNzYgMjA3Ljk2NSAyNS4yODhDMjA3Ljk2NSAyNi4yMjQgMjA4LjE0NSAyNy4wNTIgMjA4LjUwNSAyNy43NzJDMjA4Ljg4OSAyOC40NjggMjA5LjQwNSAyOS4wMiAyMTAuMDUzIDI5LjQyOEMyMTAuNzI1IDI5LjgxMiAyMTEuNDkzIDMwLjAwNCAyMTIuMzU3IDMwLjAwNFoiIGZpbGw9IiMxQTFBMUEiLz4KPC9zdmc+Cg==");
    128128                background-repeat: no-repeat;
    129                 transform: translate(50%);
     129                transform: translate(10%);
    130130            }
    131131        </style>
    132132        <?php
    133     }
    134 
    135     /**
    136      * Apply package.
    137      *
    138      * Change the plugin data when WordPress checks for updates. This method
    139      * modifies package data to update the plugin from a specific URL containing
    140      * the version package.
    141      *
    142      * @access protected
    143      */
    144     protected function apply_package() {
    145         $update_plugins = get_site_transient( 'update_plugins' );
    146         if ( ! is_object( $update_plugins ) ) {
    147             $update_plugins = new \stdClass();
    148         }
    149 
    150         $plugin_info = new \stdClass();
    151         $plugin_info->new_version = $this->version;
    152         $plugin_info->slug = $this->plugin_slug;
    153         $plugin_info->package = $this->package_url;
    154         $plugin_info->url = 'https://analogwp.com/';
    155 
    156         $update_plugins->response[ $this->plugin_name ] = $plugin_info;
    157 
    158         set_site_transient( 'update_plugins', $update_plugins );
    159133    }
    160134
     
    167141     */
    168142    protected function upgrade() {
    169         require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
     143        if ( ! class_exists( 'WP_Upgrader_Skin' ) ) {
     144            require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
     145        }
    170146
    171         $upgrader_args = array(
    172             'url' => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ),
     147        require_once __DIR__ . '/class-rollback-downgrader-skin.php';
     148
     149        $skin_args = array(
     150            'url'    => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ),
    173151            'plugin' => $this->plugin_name,
    174             'nonce' => 'upgrade-plugin_' . $this->plugin_name,
    175             'title' => esc_html__( 'Rollback to Previous Version', 'analogwp-library' ),
     152            'nonce'  => 'upgrade-plugin_' . $this->plugin_name,
     153            'title'  => esc_html__( 'Rollback to Previous Version', 'analogwp-library' ),
    176154        );
    177155
    178156        $this->print_inline_style();
    179157
    180         $upgrader = new \Plugin_Upgrader( new \Plugin_Upgrader_Skin( $upgrader_args ) );
    181         $upgrader->upgrade( $this->plugin_name );
     158        $skin     = new Rollback_Downgrader_Skin( $skin_args );
     159        $upgrader = new \Plugin_Upgrader( $skin );
     160
     161        // IMPORTANT: initialize + install strings so feedback() can map keys.
     162        $upgrader->init();
     163        $upgrader->upgrade_strings();
     164        $upgrader->run(
     165            array(
     166                'package'                     => $this->package_url,
     167                'destination'                 => WP_PLUGIN_DIR,
     168                'abort_if_destination_exists' => false,
     169                'clear_working'               => true,
     170                'hook_extra'                  => array(
     171                    'plugin' => $this->plugin_name,
     172                    'type'   => 'plugin',
     173                    'action' => 'update',
     174                ),
     175            )
     176        );
    182177    }
    183178
     
    190185     */
    191186    public function run() {
    192         $this->apply_package();
    193187        $this->upgrade();
    194188    }
  • analogwp-library/trunk/inc/Settings/Views/html-admin-settings.php

    r3396722 r3423181  
    8282            <?php if ( ! Plugin::instance()->has_pro_active() ) : ?>
    8383                <div class="upgrade-box special">
    84                     <h3>Upgrade to Custom Library Pro with<br/>80% discount in a Lifetime Deal</h3>
     84                    <h3>🔥 Upgrade to Custom Library PRO with a Special Discount</h3>
    8585
    86                     <p>Black Friday + Cyber Monday Special!<br/>We have <b>already applied 50% discount sitewide</b>—enter your email to <b>get an extra 30% code on top</b>. Limited-time offer!</p>
     86                    <p>Get additional features like <strong>Custom Branding/White-Label, Import/Export Templates, Role-Based Access Controls, Priority support and so much more</strong> while helping us support its development and maintenance.</p>
    8787
    8888                    <form id="js-ang-custom-library-request-discount" method="post">
  • analogwp-library/trunk/languages/analogwp-library-analog-custom-library-app.json

    r3396722 r3423181  
    1 {"domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural_forms":"nplurals=2; plural=(n!=1);","lang":"en"},"Custom Library for Elementor":[""],"https://analogwp.com/custom-library-for-elementor":[""],"Custom Library for Elementor creates the foundation for a design framework that will help you create better, more consistent websites with Elementor.":[""],"AnalogWP":[""],"https://analogwp.com/":[""],"Custom Library for Elementor requires PHP version %s":[""],"Error Activating":[""],"Custom Library for Elementor requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT RUNNING.":[""],"Custom Library for Elementor requires Elementor v%s or newer in order to work. Please update Elementor to the latest version.":[""],"Update Elementor Now":[""],"Custom Library for Elementor is not working because you need to activate the Elementor plugin.":[""],"Activate Elementor Now":[""],"Custom Library for Elementor is not working because you need to install the Elementor plugin.":[""],"Install Elementor Now":[""],"Settings":[""],"Library":[""],"Something went wrong.":[""],"Template":[""],"Block":[""],"Add Custom Library for Elementor":[""],"Library is now synced":[""],"Something is not right, please try again.":[""],"Get unlimited access to the Custom Library for Elementor library and features with the PRO version.":[""],"View Plans":[""],"Templates":[""],"Blocks":[""],"Exit preview":[""],"Open in new tab":[""],"Import Template":[""],"Custom Library Settings":[""],"Custom Library":[""],"Your settings have been saved.":[""],"The changes you made will be lost if you navigate away from this page.":[""],"Select Image":[""],"Use this image":[""],"Pro":[""],"Upgrade to Pro":[""],"Toggle":[""],"Change Image":[""],"Revert to Default":[""],"Import":[""],"Go":[""],"Export All":[""],"Custom Library for Elementor Shortcuts":[""],"Templates Library":[""],"Theme Custom Library for Elementor":[""],"Add to library":[""],"Custom Library for Elementor Logo":[""],"Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!":[""],"View Documentation":[""],"Documentation":[""],"Get Support":[""],"Invalid Template ID.":[""],"No options key provided.":[""],"Setting updated.":[""],"Back to Library":[""],"Loading icon":[""],"Search Templates":[""],"The %s has been imported and is now available in the":[""],"Elementor %s library":[""],"Ok, thanks":[""],"No Templates found":[""],"Loading Templates...":[""],"Insert":[""],"Library Settings":[""],"Save changes":[""],"Your Email":[""],"First Name":[""],"Send me the coupon":[""],"By submitting your details, you agree to our %s.":[""],"privacy policy":[""],"Version Control":[""],"Rollback Versions":[""],"If you are having issues with current version of Custom Library, you can rollback to a previous stable version.":[""],"Rollback Custom Library":[""],"Reinstall this version":[""],"Tools":[""],"Updated successfully":[""],"Update failed! Please try again":[""],"Run Update":[""],"%1$s ? %2$s template(s)":[""],"Update Library Templates":[""],"This action will update any templates found to be outdated in the Custom Library from their source template in Elementor template library.":[""],"Note: Outdated templates are templates that were created before the current version of this plugin. You only need to run this when you think there is a problem in the Custom Library.":[""],"No outdated templates found.":[""],"Failed to update outdated templates.":[""],"Misc":[""],"Remove Data on Uninstall":[""],"Check this box to remove all data stored by Custom Library for Elementor plugin, including license info, user settings, import history etc.":[""],"Importer / Exporter":[""],"Templates Importer":[""],"Imports .json or .zip files exported only via the Custom Library Pro templates exporter.":[""],"Templates Exporter":[""],"Exports all the templates published and available in the Custom Library.":[""],"General":[""],"General Settings":[""],"Hide default Elementor Template library icon from editor.":[""],"Hide default Elementor Template library popup from editor.":[""],"Placeholder image":[""],"Replace the default placeholder image.":[""],"Trigger icon":[""],"Replace the trigger icon.":[""],"Library Access":[""],"Show to All":[""],"Show only to specific roles":[""],"Show only to specific users":[""],"Settings Access":[""],"Please note, by default all administrators have settings access even if it is not explicitly set here to avoid accidental lockouts.":[""],"Design":[""],"Library popup style":[""],"Compact (popup)":[""],"Fullscreen":[""],"Template columns":[""],"2 Columns":[""],"3 Columns":[""],"Auto":[""],"Categories location":[""],"Sidebar":[""],"Horizontal":[""],"None":[""],"Show categories template count":[""],"Library title":[""],"Show Buttons on hover":[""],"Show Preview Button":[""],"Show Edit Button":[""],"Header colors":[""],"Header Background":[""],"Header Text":[""],"Header Border Bottom":[""],"Categories colors":[""],"Categories Background":[""],"Categories Text":[""],"Active Category Text":[""],"Button styles":[""],"Button Background Color":[""],"Button Text Color":[""],"Button Border Color":[""],"Button Border Radius":[""],"Button Border Width":[""],"Rollback to Previous Version":[""],"Sorry, you are not allowed to rollback Custom Library plugin for this site.":[""],"Error occurred, the version selected is invalid. Try selecting different version.":[""],"Save":[""],"Enter Template Name":[""],"Add to Custom Library":[""],"Give your template a name":[""],"Cloud Templates":[""],"Upgrade":[""],"Connect":[""],"Site Templates":[""],"Note: Custom Library sync requires \"Site Templates\" to be checked as well.":[""],"You?ve saved 100% of the templates in your plan.":[""],"To get more space %s":[""],"Upgrade now":[""],"Learn more about the":[""],"Template Library":[""],"Unable to sanitize this file hence it wasn't uploaded!":[""],"Full Size":[""],"Thumbnail":[""],"Medium":[""],"Large":[""],"settings title\u0004Enable SVG Uploads":[""]}}}
     1{"domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural_forms":"nplurals=2; plural=(n!=1);","lang":"en"},"Custom Library for Elementor":[""],"https://analogwp.com/custom-library-for-elementor":[""],"Custom Library for Elementor creates the foundation for a design framework that will help you create better, more consistent websites with Elementor.":[""],"AnalogWP":[""],"https://analogwp.com/":[""],"Custom Library for Elementor requires PHP version %s":[""],"Error Activating":[""],"Custom Library for Elementor requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT RUNNING.":[""],"Custom Library for Elementor requires Elementor v%s or newer in order to work. Please update Elementor to the latest version.":[""],"Update Elementor Now":[""],"Custom Library for Elementor is not working because you need to activate the Elementor plugin.":[""],"Activate Elementor Now":[""],"Custom Library for Elementor is not working because you need to install the Elementor plugin.":[""],"Install Elementor Now":[""],"Settings":[""],"Library":[""],"Something went wrong.":[""],"Template":[""],"Block":[""],"Add Custom Library for Elementor":[""],"Library is now synced":[""],"Something is not right, please try again.":[""],"Get unlimited access to the Custom Library for Elementor library and features with the PRO version.":[""],"View Plans":[""],"Templates":[""],"Blocks":[""],"Exit preview":[""],"Open in new tab":[""],"Import Template":[""],"Custom Library Settings":[""],"Custom Library":[""],"Your settings have been saved.":[""],"The changes you made will be lost if you navigate away from this page.":[""],"Select Image":[""],"Use this image":[""],"Pro":[""],"Upgrade to Pro":[""],"Toggle":[""],"Change Image":[""],"Revert to Default":[""],"Import":[""],"Go":[""],"Export All":[""],"Custom Library for Elementor Shortcuts":[""],"Templates Library":[""],"Theme Custom Library for Elementor":[""],"Add to library":[""],"Custom Library for Elementor Logo":[""],"Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!":[""],"View Documentation":[""],"Documentation":[""],"Get Support":[""],"Invalid Template ID.":[""],"No options key provided.":[""],"Setting updated.":[""],"Back to Library":[""],"Loading icon":[""],"Search Templates":[""],"The %s has been imported and is now available in the":[""],"Elementor %s library":[""],"Ok, thanks":[""],"No Templates found":[""],"Loading Templates...":[""],"Insert":[""],"Library Settings":[""],"Save changes":[""],"Your Email":[""],"First Name":[""],"Send me the coupon":[""],"By submitting your details, you agree to our %s.":[""],"privacy policy":[""],"Version Control":[""],"Rollback Versions":[""],"If you are having issues with current version of Custom Library, you can rollback to a previous stable version.":[""],"Rollback Custom Library":[""],"Reinstall this version":[""],"Tools":[""],"Updated successfully":[""],"Update failed! Please try again":[""],"Run Update":[""],"%1$s ? %2$s template(s)":[""],"Update Library Templates":[""],"This action will update any templates found to be outdated in the Custom Library from their source template in Elementor template library.":[""],"Note: Outdated templates are templates that were created before the current version of this plugin. You only need to run this when you think there is a problem in the Custom Library.":[""],"No outdated templates found.":[""],"Failed to update outdated templates.":[""],"Misc":[""],"Remove Data on Uninstall":[""],"Check this box to remove all data stored by Custom Library for Elementor plugin, including license info, user settings, import history etc.":[""],"Importer / Exporter":[""],"Templates Importer":[""],"Imports .json or .zip files exported only via the Custom Library Pro templates exporter.":[""],"Templates Exporter":[""],"Exports all the templates published and available in the Custom Library.":[""],"General":[""],"General Settings":[""],"Hide default Elementor Template library icon from editor.":[""],"Hide default Elementor Template library popup from editor.":[""],"Placeholder image":[""],"Replace the default placeholder image.":[""],"Trigger icon":[""],"Replace the trigger icon.":[""],"Library Access":[""],"Show to All":[""],"Show only to specific roles":[""],"Show only to specific users":[""],"Settings Access":[""],"Please note, by default all administrators have settings access even if it is not explicitly set here to avoid accidental lockouts.":[""],"Design":[""],"Library popup style":[""],"Compact (popup)":[""],"Fullscreen":[""],"Template columns":[""],"2 Columns":[""],"3 Columns":[""],"Auto":[""],"Categories location":[""],"Sidebar":[""],"Horizontal":[""],"None":[""],"Show categories template count":[""],"Library title":[""],"Show Buttons on hover":[""],"Show Preview Button":[""],"Show Edit Button":[""],"Header colors":[""],"Header Background":[""],"Header Text":[""],"Header Border Bottom":[""],"Categories colors":[""],"Categories Background":[""],"Categories Text":[""],"Active Category Text":[""],"Button styles":[""],"Button Background Color":[""],"Button Text Color":[""],"Button Border Color":[""],"Button Border Radius":[""],"Button Border Width":[""],"Rollback to Previous Version":[""],"Rolling back plugin?":[""],"Rollback failed during installation.":[""],"Rollback complete. The plugin files have been restored.":[""],"Go to Plugins page":[""],"Sorry, you are not allowed to rollback Custom Library plugin for this site.":[""],"Error occurred, the version selected is invalid. Try selecting different version.":[""],"Save":[""],"Enter Template Name":[""],"Add to Custom Library":[""],"Give your template a name":[""],"Cloud Templates":[""],"Upgrade":[""],"Connect":[""],"Site Templates":[""],"Note: Custom Library sync requires \"Site Templates\" to be checked as well.":[""],"You?ve saved 100% of the templates in your plan.":[""],"To get more space %s":[""],"Upgrade now":[""],"Learn more about the":[""],"Template Library":[""],"Unable to sanitize this file hence it wasn't uploaded!":[""],"Full Size":[""],"Thumbnail":[""],"Medium":[""],"Large":[""],"settings title\u0004Enable SVG Uploads":[""]}}}
  • analogwp-library/trunk/languages/analogwp-library.pot

    r3396722 r3423181  
    44msgid ""
    55msgstr ""
    6 "Project-Id-Version: analogwp-library 1.6.1\n"
     6"Project-Id-Version: analogwp-library 1.7.0\n"
    77"Report-Msgid-Bugs-To: AnalogWP <EMAIL>\n"
    88"MIME-Version: 1.0\n"
     
    1010"Content-Type: text/plain; charset=iso-8859-1\n"
    1111"Plural-Forms: nplurals=2; plural=(n!=1);\n"
    12 "POT-Creation-Date: 2025-11-16T19:13:34.673Z\n"
     12"POT-Creation-Date: 2025-12-18T18:40:27.845Z\n"
    1313"PO-Revision-Date: 2025-MO-DA HO:MI+ZONE\n"
    1414"Last-Translator: AnalogWP <EMAIL>\n"
     
    633633msgstr ""
    634634
    635 #: inc/Featuresets/rollback/class-rollbacker.php:175
    636 #: inc/Featuresets/rollback/class-init.php:94
     635#: inc/Featuresets/rollback/class-rollbacker.php:153
     636#: inc/Featuresets/rollback/class-init.php:93
    637637msgid "Rollback to Previous Version"
    638638msgstr ""
    639639
    640 #: inc/Featuresets/rollback/class-init.php:67
     640#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:32
     641msgid "Rolling back plugin?"
     642msgstr ""
     643
     644#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:74
     645msgid "Rollback failed during installation."
     646msgstr ""
     647
     648#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:85
     649msgid "Rollback complete. The plugin files have been restored."
     650msgstr ""
     651
     652#: inc/Featuresets/rollback/class-rollback-downgrader-skin.php:90
     653msgid "Go to Plugins page"
     654msgstr ""
     655
     656#: inc/Featuresets/rollback/class-init.php:66
    641657msgid "Sorry, you are not allowed to rollback Custom Library plugin for this site."
    642658msgstr ""
    643659
    644 #: inc/Featuresets/rollback/class-init.php:75
     660#: inc/Featuresets/rollback/class-init.php:74
    645661msgid ""
    646662"Error occurred, the version selected is invalid. Try selecting different "
Note: See TracChangeset for help on using the changeset viewer.