Plugin Directory

Changeset 2501805


Ignore:
Timestamp:
03/23/2021 01:24:17 PM (5 years ago)
Author:
vjoondev
Message:

Fixed Bug UNI-249: Alignments of images are now displayed correctly even if the Gutenberg Editor is selected.

Location:
vjoon-wp-adapter/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • vjoon-wp-adapter/trunk/Adapter.php

    r2497085 r2501805  
    77 * Author URI: https://vjoon.com
    88 * Description: vjoon WordPress Adapter for vjoon K4
    9  * Version: 1.0.8
     9 * Version: 1.0.9
    1010 * Text Domain: vj-wp-adapter
    1111 * Domain Path: resources/LocalizedStrings
  • vjoon-wp-adapter/trunk/readme.txt

    r2497085 r2501805  
    3838== Changelog ==
    3939
     40= 1.0.9 =
     41* Fixed Bug UNI-249: Alignments of images are now displayed correctly even if the Gutenberg Editor is selected.
     42
    4043= 1.0.8 =
    4144* Tested with WordPress 5.7
  • vjoon-wp-adapter/trunk/src/Functions.php

    r2489727 r2501805  
    518518               
    519519                case 'getBuildInfo':
    520                     $return_value['result'] = "Build: 158 (75ca891)";
     520                    $return_value['result'] = "Build: 163 (9db654b)";
    521521
    522522                default:
     
    794794     */
    795795    public static function parseResizedImage($content, $img, $dom, $imgid) {
    796         $class = $img->parentNode->getAttribute('class');
     796        $class = isset($img->parentNode) ? $img->parentNode->getAttribute('class') : '';
    797797        $is_resized = "";
    798798        $img_height = '';
  • vjoon-wp-adapter/trunk/src/Gutenberg.php

    r2489727 r2501805  
    108108                }
    109109
    110 
    111110                /*************************************** Convert with DOM Element ***************************************/
    112111                $dom = new \DOMDocument(null, 'UTF-8');
     
    117116                $dom->encoding = 'utf-8';
    118117
    119                 //dom img-Tag, note: be aware of that this element is not child of figure-Tag
    120                 $img_array = $dom->getElementsByTagName('img');
     118                $img_dnl = $dom->getElementsByTagName('img'); //returns DOMNodeList which is LIVE
     119                $img_array = self::array_copy( $img_dnl );
    121120                $img_src_alt_arr = [];
    122                 foreach ($img_array as $img) {
    123                     if ( isset($img->parentNode->nodeName) && $img->parentNode->nodeName != 'figure' ) {
    124                         //parent node is figure-Tag, exclude this, only pure img-Tag
     121                $uniqids = [];
     122                foreach($img_array as $i => $img) {
     123                    if ( isset($img->parentNode->nodeName) && $img->parentNode->nodeName != 'figure' ) {  //if parent node is figure-Tag, then exclude this img, only pure img-Tag
    125124                        $src = $img->getAttribute('src');
    126125                        $alt = $img->getAttribute('alt');
     
    131130                        $src = $img->getAttribute('src');
    132131                        $imgid = Functions::getImageId($src);
    133 
    134                         //note: add wp-image class
    135                         $class = $img->getAttribute('class');
     132           
     133                        $class = $img->getAttribute('class'); //note: add wp-image class
    136134                        if(strpos($class,'wp-image') === false) {
    137135                            $class = empty($class) ? "wp-image-".$imgid : $class." wp-image-".$imgid;
    138136                        }
    139137                        $img->setAttribute('class',$class);
    140 
    141                         //note: remove all data-Attributes! Due to GB BLock Editor marks this as invalid, except Attributes are registered
    142                         if ($img->hasAttributes()) {
     138 
     139                        if ($img->hasAttributes()) { //note: remove all data-Attributes! Due to GB BLock Editor marks this as invalid, except Attributes are registered
    143140                            $toremove = [];
    144141                            foreach($img->attributes as $attr) {
    145142                                if (strpos($attr->nodeName,'data') !== false) {
    146                                     Debug::log($attr->nodeName, 'REMOVE DATA ATTR FROM IMG-TAG');
    147143                                    $toremove[] = $attr->nodeName;
    148144                                }
     
    171167                        }
    172168
    173                         //parent node is figure-Tag
    174                         $class = $img->parentNode->getAttribute('class'); //as string, no matter if single or multiple classes
    175                         if ( strpos( $class, "image") !== false) { //only handle figure tag, if class has image
    176 
    177                             //check if align is available
     169                        $class = isset($img->parentNode) ? $img->parentNode->getAttribute('class') : ''; //as string
     170                        if ( strpos( $class, "image") !== false) { //only handle figure tag, if figure-tag class has 'image'
    178171                            $align = "";
    179172                            $wpcore_class = 'wp-block-image';
     
    181174                                $align = ',"align":"left"';
    182175                                $wpcore_class = "alignleft";
    183                             } elseif (strpos($class,"align-right") !== false) {
     176                            } elseif ( strpos($class,"align-right") !== false ) {
    184177                                $align = ',"align":"right"';
    185178                                $wpcore_class = "alignright";
    186                             } elseif (strpos($class,"align-center") !== false) {
     179                            } elseif ( strpos($class,"align-center") !== false ) {
    187180                                $align = ',"align":"center"';
    188181                                $wpcore_class = "aligncenter";
    189                             } elseif (strpos($class,"style-side") !== false ) {
     182                            } elseif ( strpos($class,"style-side") !== false ) {
    190183                                $align = ',"align":"right"';
    191184                                $wpcore_class = "alignright";
     
    197190                            //note: handle align
    198191                            if (!empty($align)) {
    199                                 //add attribute to figure tag
    200                                 $img->parentNode->setAttribute('class',$wpcore_class.' size-full'.$is_resized);
    201                                
    202                                 /*
    203                                 //postponed: later
    204                                 if (!empty($img_percentage)) {
    205                                     $img->parentNode->setAttribute('style','max-width:'.$img_percentage.'%'); //add style attribute to figure-tag note: this causes a Block Error
    206 
    207                                     //$img->parentNode->setAttribute('data-wp-percent-width',$img_percentage.'%');
    208                                    
    209                                     //$preContent = $dom->createTextNode('<style>.'.(!empty($is_resized)? $is_resized.'-'.$imgid : '').' figure { max-width:'.$img_percentage.'%; }</style>');
    210                                     //$img->parentNode->parentNode->insertBefore($preContent, $img->parentNode);
    211                                 }*/
    212 
    213                                 //add wp core block begin
    214                                 $preContent = $dom->createComment(' wp:image {"id":'.$imgid.',"sizeSlug":"full"'.$align.$img_width.$img_height.',"className":"'.(!empty($is_resized)? $is_resized.'-'.$imgid : '').'"} ');
    215                                 $img->parentNode->parentNode->insertBefore($preContent, $img->parentNode);
    216 
    217                                 //add enclosure div tag begin
    218                                 $preContent = $dom->createTextNode('<div class="wp-block-image'.(!empty($is_resized)? $is_resized.'-'.$imgid : '').'">');
    219                                 $img->parentNode->parentNode->insertBefore($preContent, $img->parentNode);
    220 
    221                                 //wp core block end
    222                                 $postContent = $dom->createComment(' /wp:image ');
    223                                 $img->parentNode->parentNode->insertBefore($postContent, $img->parentNode->nextSibling);
    224 
    225                                 //add enclosure div end
    226                                 $postContent = $dom->createTextNode('</div>');
    227                                 $img->parentNode->parentNode->insertBefore($postContent, $img->parentNode->nextSibling);
     192                                //Handle img as figure Tag Child via DOM Element
     193                                $imgClone = $img->cloneNode();
     194                                $figcap = $img->parentNode->getElementsByTagName('figcaption');
     195                                $figcap = isset($figcap[0]) ? $figcap[0] : False;
     196
     197                                $figClone = $img->parentNode->cloneNode(); //entweder true oder imgClone und figcap als child appenden
     198                                $figClone->appendChild($imgClone);
     199                                if ($figcap) { $figClone->appendChild($figcap); }
     200                                $figClone->setAttribute('class',$wpcore_class.' size-full'.$is_resized);
     201
     202                                $uniqid = 'ghost'.uniqid();
     203                                $uniqids[] = '<'.$uniqid.'>';
     204                                $uniqids[] = '</'.$uniqid.'>';
     205                                $ghost = $dom->createElement($uniqid);
     206
     207                                $div = $dom->createElement('div');
     208                                $div->setAttribute('class','wp-block-image'.(!empty($is_resized)? $is_resized.'-'.$imgid : ''));
     209                                $div->appendChild( $figClone );
     210
     211                                $ghost->appendChild( $dom->createComment(' wp:image {"id":'.$imgid.',"sizeSlug":"full"'.$align.$img_width.$img_height.',"className":"'.(!empty($is_resized)? $is_resized.'-'.$imgid : '').'"} ') );
     212                                $ghost->appendChild( $div );
     213                                $ghost->appendChild( $dom->createComment(' /wp:image ') );
     214
     215                                $img->parentNode->parentNode->replaceChild($ghost, $img->parentNode);
    228216
    229217                            } else {
     
    231219                                $img->parentNode->setAttribute('class',$wpcore_class.(empty($class) ? '' : ' '.$class.$is_resized.(!empty($is_resized)? $is_resized.'-'.$imgid : '')));
    232220
    233                                 //postponed: add also Percentage
    234                                
    235221                                //wp core block begin
    236222                                $preContent = $dom->createComment(' wp:image {"id":'.$imgid.',"className":"'.$class.(!empty($is_resized)? $is_resized.'-'.$imgid : '').'"'.$align.$img_width.$img_height.'} ');
     
    242228                               
    243229                            }
     230                           
     231                            $content = $dom->saveHTML();
     232                        }
     233                    }
     234                }
    244235               
    245                             $content = $dom->saveHTML();
    246                         }
    247                
    248                     }
    249                 }
    250 
    251236                if (strpos($content, '<img') !== false) {
    252237                    $regex = '/src="([^"]*)"/';
     
    276261               
    277262                $content = str_replace(array('<html>','<body>','</html>','</body>'), '', $content);
     263                $content = str_replace($uniqids,'', $content);
    278264
    279265                Debug::log($content,'RETURN CONTENT WITH CONVERTED GUTENBERG BLOCKS');
     
    353339            $dom->removeChild($dom->doctype);
    354340            $tags = $dom->getElementsByTagName($htmlTag);
    355 
    356             foreach ($tags as $tag) {
    357 
     341            $tags_array = self::array_copy( $tags );
     342            $uniqids = [];
     343            foreach($tags_array as $i => $tag) {
    358344                if ($tag->tagName == "blockquote") { //note: special handle p tags in blockquote, which have wp:paragraph
    359345                    $_chs = $tag->childNodes;
     
    369355                }
    370356
    371                 //note: wenn parent ein figure-Tag ist, dann diesen parent löschen und $tag einfügen
    372                 if ( isset($tag->parentNode->nodeName) && $tag->parentNode->nodeName == "figure") {
     357                if ( isset($tag->parentNode->nodeName) && $tag->parentNode->nodeName == "figure") { //note: wenn parent ein figure-Tag ist, dann diesen parent löschen und $tag einfügen
    373358                    $tag->parentNode->parentNode->replaceChild($tag, $tag->parentNode);
    374359                }
     
    389374                }
    390375
    391 
    392376                switch ($htmlTag) {
    393377                    case 'ol':
     
    397381
    398382                    case 'oembed':
    399 
    400383                        $oem = self::cacheEmbedObject($url);
    401384                        self::$oembeded[] = array('url'=>$url,'data'=>$oem);
    402 
    403                         //note: get type and media from URL : rich/instragram, rich/twitter, video/youtube
    404                         //$oem = self::getProvider($url);
    405 
    406                         Debug::log($oem,'DATA BY CACHEEMBEDOBJECT');
    407 
    408385                        $addProviderClass = (strtolower($oem->provider_name) == 'youtube') ? (($class !=='' ) ? $class. ' wp-embed-aspect-16-9 wp-has-aspect-ratio' : 'wp-embed-aspect-16-9 wp-has-aspect-ratio')  : $class;
    409 
    410                         $preContent = $dom->createComment(' wp:' . $namespace.'/'.strtolower($oem->provider_name). ' {"url":"'.$url.'","type":"'.$oem->type.'","providerNameSlug":"'.strtolower($oem->provider_name).'", "className":' .( ($addProviderClass!=='') ? '"' . $addProviderClass . '"' : '""' ). '} ');
    411                         $tag->parentNode->insertBefore($preContent, $tag); //insert <!-- wp: hidden tag -->
    412386
    413387                        //note: add additional figure tag
     
    416390                        //Instagram <figure class="wp-block-embed-instagram wp-block-embed is-type-rich is-provider-instagram">
    417391                       
    418                         $elemfigure = $dom->createTextNode('<figure class="wp-block-embed-'.strtolower($oem->provider_name).' wp-block-embed is-type-'.$oem->type.' is-provider-'.strtolower($oem->provider_name).''.( ($addProviderClass!=='') ? ' '.$addProviderClass : '') .'">');
    419                         $tag->parentNode->insertBefore($elemfigure, $tag);
    420 
    421                         $elemdiv = $dom->createTextNode('<div class="wp-block-embed__wrapper">'.PHP_EOL.$url.PHP_EOL.'</div></figure>');
    422                         $tag->parentNode->insertBefore($elemdiv, $tag);
    423 
    424                         $postContent = $dom->createComment(' /wp:' . $namespace.'/'.strtolower($oem->provider_name).' ' );
    425                         $tag->parentNode->insertBefore($postContent, $tag);
    426 
     392                        $uniqid = 'ghost'.uniqid();
     393                        $uniqids[] = '<'.$uniqid.'>';
     394                        $uniqids[] = '</'.$uniqid.'>';
     395                        $ghost = $dom->createElement($uniqid);
     396
     397                        $div = $dom->createElement('div');
     398                        $div->setAttribute('class','wp-block-embed__wrapper');
     399                        $div->appendChild ( $dom->createTextNode(PHP_EOL.$url.PHP_EOL) );
     400
     401                        $fig = $dom->createElement('figure');
     402                        $fig->setAttribute('class','wp-block-embed-'.strtolower($oem->provider_name).' wp-block-embed is-type-'.$oem->type.' is-provider-'.strtolower($oem->provider_name).''.( ($addProviderClass!=='') ? ' '.$addProviderClass : '') );
     403                        $fig->appendChild( $div );
     404
     405                        $ghost->appendChild( $dom->createComment(' wp:' . $namespace.'/'.strtolower($oem->provider_name). ' {"url":"'.$url.'","type":"'.$oem->type.'","providerNameSlug":"'.strtolower($oem->provider_name).'", "className":' .( ($addProviderClass!=='') ? '"' . $addProviderClass . '"' : '""' ). '} ') );
     406                        $ghost->appendChild( $fig );
     407                        $ghost->appendChild( $dom->createComment(' /wp:' . $namespace.'/'.strtolower($oem->provider_name).' ') );
     408
     409                        $tag->parentNode->replaceChild($ghost, $tag);
    427410                        break;
    428411
     
    436419                //note: additional insert needed Gutenberg Block Tags with moved Class
    437420                if ( $htmlTag === 'table' ) {
    438                     $tag->removeAttribute('class');
    439                     $elem = $dom->createTextNode('<figure class="wp-block-table'.( ($class!=='') ? ' '.$class : '') .'">');
    440                     $tag->parentNode->insertBefore($elem, $tag);
     421                    $tableClone = $tag->cloneNode(true); //full Node
     422                    $tableClone->removeAttribute('class');
     423                    $elem = $dom->createElement('figure');
     424                    $elem->setAttribute('class','wp-block-table'.( ($class!=='') ? ' '.$class : ''));
     425                    $elem->appendChild($tableClone);
     426                    $tag->parentNode->replaceChild($elem, $tag);
    441427                }
    442428 
     
    444430 
    445431            $content = $dom->saveHTML();
    446 
    447             Debug::log($content,'RETURNED BY CONVERTHTMLTAG');
     432            $content = str_replace($uniqids,'', $content);
     433
     434            //Debug::log($content,'RETURNED BY CONVERTHTMLTAG');
    448435            return $content;
    449436        }
     
    458445    private static function getClass($string = ''){
    459446        preg_match('/class="(.+?)"/', $string, $input);
    460         return $input[1];
     447        return isset($input[1]) ? $input[1] : '';
    461448    }
    462449
     
    474461        Debug::log($request->get_params(),'PARAMS FOR INTERNAL WP REST REQUEST');
    475462        $response = rest_do_request($request); //future: im resonse opbject -> data -> provider_name = 'instagram' und -> type = 'rich'
    476         Debug::log($response,'RESPONSE OF INTERNAL WP REST REQUEST');
    477463        $server = rest_get_server();
    478         Debug::log($server,'SERVER OF INTERNAL WP REST REQUEST');
    479464        $data = $server->response_to_data( $response, false);
    480         Debug::log($data,'DATA OF INTERNAL WP REST REQUEST');
    481465
    482466        return $data;
    483467    }
    484468
     469
     470    private static function array_copy($arr) {
     471        $newArray = array();
     472        foreach($arr as $key => $value) {
     473            if ( is_array($value) ) {
     474                $newArray[$key] = self::array_copy($value);
     475            } else if ( is_object($value) ) {
     476                 $newArray[$key] = $value; //clone $value;
     477            } else {
     478                $newArray[$key] = $value;
     479            }
     480        }
     481        return $newArray;
     482    }
     483
    485484}
  • vjoon-wp-adapter/trunk/vendor/autoload.php

    r2489727 r2501805  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInit50ce50c6b04384a330b8ebda5a205601::getLoader();
     7return ComposerAutoloaderInit2a5c7227e82cd35ca70eac91ea6457c3::getLoader();
  • vjoon-wp-adapter/trunk/vendor/composer/autoload_real.php

    r2489727 r2501805  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInit50ce50c6b04384a330b8ebda5a205601
     5class ComposerAutoloaderInit2a5c7227e82cd35ca70eac91ea6457c3
    66{
    77    private static $loader;
     
    2020        }
    2121
    22         spl_autoload_register(array('ComposerAutoloaderInit50ce50c6b04384a330b8ebda5a205601', 'loadClassLoader'), true, true);
     22        spl_autoload_register(array('ComposerAutoloaderInit2a5c7227e82cd35ca70eac91ea6457c3', 'loadClassLoader'), true, true);
    2323        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
    24         spl_autoload_unregister(array('ComposerAutoloaderInit50ce50c6b04384a330b8ebda5a205601', 'loadClassLoader'));
     24        spl_autoload_unregister(array('ComposerAutoloaderInit2a5c7227e82cd35ca70eac91ea6457c3', 'loadClassLoader'));
    2525
    2626        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    2828            require_once __DIR__ . '/autoload_static.php';
    2929
    30             call_user_func(\Composer\Autoload\ComposerStaticInit50ce50c6b04384a330b8ebda5a205601::getInitializer($loader));
     30            call_user_func(\Composer\Autoload\ComposerStaticInit2a5c7227e82cd35ca70eac91ea6457c3::getInitializer($loader));
    3131        } else {
    3232            $map = require __DIR__ . '/autoload_namespaces.php';
  • vjoon-wp-adapter/trunk/vendor/composer/autoload_static.php

    r2489727 r2501805  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInit50ce50c6b04384a330b8ebda5a205601
     7class ComposerStaticInit2a5c7227e82cd35ca70eac91ea6457c3
    88{
    99    public static $prefixLengthsPsr4 = array (
     
    3434    {
    3535        return \Closure::bind(function () use ($loader) {
    36             $loader->prefixLengthsPsr4 = ComposerStaticInit50ce50c6b04384a330b8ebda5a205601::$prefixLengthsPsr4;
    37             $loader->prefixDirsPsr4 = ComposerStaticInit50ce50c6b04384a330b8ebda5a205601::$prefixDirsPsr4;
    38             $loader->prefixesPsr0 = ComposerStaticInit50ce50c6b04384a330b8ebda5a205601::$prefixesPsr0;
     36            $loader->prefixLengthsPsr4 = ComposerStaticInit2a5c7227e82cd35ca70eac91ea6457c3::$prefixLengthsPsr4;
     37            $loader->prefixDirsPsr4 = ComposerStaticInit2a5c7227e82cd35ca70eac91ea6457c3::$prefixDirsPsr4;
     38            $loader->prefixesPsr0 = ComposerStaticInit2a5c7227e82cd35ca70eac91ea6457c3::$prefixesPsr0;
    3939
    4040        }, null, ClassLoader::class);
Note: See TracChangeset for help on using the changeset viewer.