Plugin Directory

Changeset 3757542


Ignore:
Timestamp:
10/20/2026 10:54:20 PM (25 hours ago)
Author:
ssiddiqi4
Message:

Version 2.1.3 with enhanced MCP

Location:
sidcraft-page-builder
Files:
46 edited
8 copied

Legend:

Unmodified
Added
Removed
  • sidcraft-page-builder/tags/2.1.3/includes/ops/class-maintenance.php

    r3723907 r3757542  
    378378                        || ( isset( $_GET['rest_route'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
    379379                $preview_q = ! empty( $_GET[ self::PREVIEW ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
     380                // Conditional tags return false and raise a notice before the main query.
     381                $ready = function_exists( 'did_action' ) && did_action( 'wp' );
    380382                return array(
    381383                        'is_admin'     => function_exists( 'is_admin' ) && is_admin(),
    … …  
    385387                        'doing_cron'   => function_exists( 'wp_doing_cron' ) ? wp_doing_cron() : ( defined( 'DOING_CRON' ) && DOING_CRON ),
    386388                        'is_rest'      => $rest,
    387                         'is_feed'      => function_exists( 'is_feed' ) && is_feed(),
    388                         'is_preview'   => function_exists( 'is_preview' ) && is_preview(),
    389                         'is_customize' => function_exists( 'is_customize_preview' ) && is_customize_preview(),
     389                        'is_feed'      => $ready && function_exists( 'is_feed' ) && is_feed(),
     390                        'is_preview'   => $ready && function_exists( 'is_preview' ) && is_preview(),
     391                        'is_customize' => $ready && function_exists( 'is_customize_preview' ) && is_customize_preview(),
    390392                        'user_roles'   => $roles,
    391393                        'preview'      => $preview_q,
  • sidcraft-page-builder/tags/2.1.3/includes/ops/page-snapshot-mu.php

    r3746087 r3757542  
    2828 */
    2929function sidcraft_page_builder_snapshot_request_ok() {
     30        // template_redirect runs after the main query; guard direct/early calls.
     31        if ( ! function_exists( 'did_action' ) || ! did_action( 'wp' ) ) {
     32                return false;
     33        }
    3034        $method = isset( $_SERVER['REQUEST_METHOD'] ) ? strtoupper( sanitize_key( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) ) : 'GET';
    3135        if ( 'GET' !== $method && 'HEAD' !== $method ) {
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-alert.php

    r3723907 r3757542  
    99 public function controls(){return ['title'=>'text','text'=>'wysiwyg','type'=>'select','dismissible'=>'switch','dismiss_icon'=>'icon','background'=>'color','border_color'=>'color','title_color'=>'color','text_color'=>'color','dismiss_color'=>'color','dismiss_size'=>'number'];}
    1010 public function render($s,$children=''){
    11   $type=in_array($s['type']??'info',['info','success','warning','danger'],true)?$s['type']:'info';
     11  $type=in_array($s['type']??'info',['info','success','warning','danger'],true)?($s['type']??'info'):'info';
    1212  $vars=$this->style_attr(['--lb-alert-bg'=>$s['background']??'','--lb-alert-border'=>$s['border_color']??'','--lb-alert-title'=>$s['title_color']??'','--lb-alert-text'=>$s['text_color']??'','--lb-alert-dismiss'=>$s['dismiss_color']??'','--lb-alert-dismiss-size'=>$this->unit($s['dismiss_size']??'')]);
    1313  $out='<div class="'.$this->cls($s).' lb-alert lb-alert-'.$type.'" role="alert"'.$vars.'>';
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-button.php

    r3723907 r3757542  
    4040 }
    4141 public function render($s,$children=''){
    42   $size=in_array($s['size']??'medium',self::sizes(),true)?$s['size']:'medium';
     42  $size=in_array($s['size']??'medium',self::sizes(),true)?($s['size']??'medium'):'medium';
    4343  $align=$this->scalar($s['align']??'left','left');
    4444  $align=in_array($align,['left','center','right','justify'],true)?$align:'left';
    … …  
    4848  $t=($s['target']??'_self')==='_blank'?' target="_blank" rel="noopener"':'';
    4949  $id=!empty($s['button_id'])?' id="'.esc_attr(sanitize_html_class($s['button_id'])).'"':'';
    50   $type=in_array($s['button_type']??'default',['default','info','success','warning','danger'],true)?$s['button_type']:'default';
     50  $type=in_array($s['button_type']??'default',['default','info','success','warning','danger'],true)?($s['button_type']??'default'):'default';
    5151  $a='<a class="'.$this->cls($s).' lb-button lb-button-'.sanitize_html_class($size).' lb-button-type-'.sanitize_html_class($type).($icon?' lb-button-has-icon':'').$this->hover_class($s).'"'.$id.' href="'.esc_attr(self::link_href($s['url']??'#')).'"'.$t.'>'.($placement==='before'?$icon.$label:$label.$icon).'</a>';
    5252  return '<div class="lb-button-wrap lb-button-align-'.$align.'">'.$a.'</div>';
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-carousel.php

    r3723907 r3757542  
    7272  if(!$slides)return '<div class="'.$this->cls($s).' lb-carousel-placeholder">'.esc_html__('Choose images for the carousel', 'sidcraft-page-builder').'</div>';
    7373  $show=max(1,min(10,absint($s['slides_to_show']??1)));$scroll=max(1,min($show,absint($s['slides_to_scroll']??1)));
    74   $nav=in_array($s['navigation']??'both',['both','arrows','dots','none'],true)?$s['navigation']:'both';
     74  $nav=in_array($s['navigation']??'both',['both','arrows','dots','none'],true)?($s['navigation']??'both'):'both';
    7575  $linkRaw=is_string($s['link']??null)?$s['link']:'none';
    7676  if(preg_match('~^https?://(none|file|custom)/?$~i',$linkRaw,$lm))$linkRaw=strtolower($lm[1]); // repair values saved as "http://none" by older builds
    … …  
    7878  $effect=($s['effect']??'slide')==='fade'&&$show===1?'fade':'slide';
    7979  $dir=($s['slide_direction']??'ltr')==='rtl'?'rtl':'ltr';
    80   $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?$s['caption']:'none';
    81   $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?$s['caption_align']:'center';
     80  $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?($s['caption']??'none'):'none';
     81  $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?($s['caption_align']??'center'):'center';
    8282  $size=sanitize_key($s['image_size']??'large');
    8383  $height=$this->scalar($s['height']??'');
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-counter.php

    r3723907 r3757542  
    2020  $tag=$this->tag($s['title_tag']??'div',$this->title_tags(),'div');
    2121  $pos=($s['title_position']??'after')==='before'?'before':'after';
    22   $align=in_array($s['align']??'center',['left','center','right'],true)?$s['align']:'center';
     22  $align=in_array($s['align']??'center',['left','center','right'],true)?($s['align']??'center'):'center';
    2323  $vars=$this->style_attr(['--lb-counter-number-color'=>$s['number_color']??'','--lb-counter-title-color'=>$s['title_color']??'','--lb-counter-number-size'=>$this->unit($s['number_size']??''),'--lb-counter-gap'=>$this->unit($s['title_gap']??''),'text-align'=>$align]);
    2424  $title=($s['title']??'')!==''?'<'.$tag.' class="lb-counter-title">'.esc_html($s['title']).'</'.$tag.'>':'';
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-divider.php

    r3723907 r3757542  
    1212 public function controls(){return ['style'=>'select','divider_width'=>'text','align'=>'select','thickness'=>'number','color'=>'color','divider_gap'=>'number','pattern_size'=>'number','look'=>'select','text'=>'text','text_tag'=>'select','icon'=>'icon','unit_align'=>'select','unit_spacing'=>'number','text_color'=>'color','icon_color'=>'color','icon_size'=>'number','icon_view'=>'select'];}
    1313 public function render($s,$children=''){
    14   $style=in_array($s['style']??'solid',self::line_styles(),true)?$s['style']:'solid';
    15   $align=in_array($s['align']??'center',['left','center','right'],true)?$s['align']:'center';
    16   $look=in_array($s['look']??'line',['line','line_text','line_icon'],true)?$s['look']:'line';
    17   $ealign=in_array($s['unit_align']??'center',['left','center','right'],true)?$s['unit_align']:'center';
    18   $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?$s['icon_view']:'default';
     14  $style=in_array($s['style']??'solid',self::line_styles(),true)?($s['style']??'solid'):'solid';
     15  $align=in_array($s['align']??'center',['left','center','right'],true)?($s['align']??'center'):'center';
     16  $look=in_array($s['look']??'line',['line','line_text','line_icon'],true)?($s['look']??'line'):'line';
     17  $ealign=in_array($s['unit_align']??'center',['left','center','right'],true)?($s['unit_align']??'center'):'center';
     18  $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?($s['icon_view']??'default'):'default';
    1919  $vars=$this->style_attr([
    2020   '--lb-divider-width'=>sanitize_text_field((string)($s['divider_width']??'100%')),'--lb-divider-color'=>$s['color']??'','--lb-divider-weight'=>$this->unit(max(1,(float)($s['thickness']??1))),
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-gallery.php

    r3723907 r3757542  
    7676  if(!$url) return '';
    7777  $alt=(string)get_post_meta($id,'_wp_attachment_image_alt',true);
    78   $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?$s['caption']:'none';
     78  $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?($s['caption']??'none'):'none';
    7979  $cap=$capMode!=='none'?Carousel::caption_text($id,$capMode):'';
    8080  $lazy=!isset($s['lazy_load']) || !empty($s['lazy_load']);
    … …  
    8484  $style=$this->item_style($s,$ratio);
    8585  $extra=' class="'.$cls.'" data-lb-ratio="'.esc_attr((string)$ratio).'" style="'.esc_attr($style).'"'.($set!==''?' data-lb-in="'.esc_attr($set).'"':'').($hidden?' hidden':'');
    86   $linkMode=in_array($s['link']??'file',['none','file','attachment'],true)?$s['link']:'file';
     86  $linkMode=in_array($s['link']??'file',['none','file','attachment'],true)?($s['link']??'file'):'file';
    8787  $light=!empty($s['lightbox'])&&$linkMode==='file';
    8888  if($linkMode==='file'){
    … …  
    9999 public function render($s,$children=''){
    100100  $groups=$this->collections($s);
    101   $order=in_array($s['order_by']??'default',['default','random','date','title'],true)?$s['order_by']:'default';
     101  $order=in_array($s['order_by']??'default',['default','random','date','title'],true)?($s['order_by']??'default'):'default';
    102102  $hasMany=($s['mode']??'single')==='multiple' && count($groups)>1;
    103103  $showAll=!isset($s['show_all']) || !empty($s['show_all']);
    104104  $cols=max(1,min(10,absint($this->scalar($s['columns']??4,4))));
    105105  $layout=$this->layout_of($s);
    106   $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?$s['caption_align']:'center';
    107   $last=in_array($s['last_row']??'auto',['auto','fit','grow'],true)?$s['last_row']:'auto';
     106  $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?($s['caption_align']??'center'):'center';
     107  $last=in_array($s['last_row']??'auto',['auto','fit','grow'],true)?($s['last_row']??'auto'):'auto';
    108108  $layoutCls=' is-'.$layout.(($s['image_ratio']??'1:1')==='auto'?' is-ratio-auto':'');
    109109  $items='';$any=false;
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-icon.php

    r3723907 r3757542  
    3030 }
    3131 public function render($s,$children=''){
    32   $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?$s['icon_view']:'default';
    33   $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?$s['shape']:'circle';
     32  $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?($s['icon_view']??'default'):'default';
     33  $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?($s['shape']??'circle'):'circle';
    3434  $svg=\SidcraftPageBuilder\Utils\Icons::svg($s['icon']??'star');
    3535  $inner_class='lb-icon-glyph'.$this->hover_class($s);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-icon_box.php

    r3723907 r3757542  
    99 public function controls(){return ['icon'=>'icon','icon_view'=>'select','shape'=>'select','title'=>'text','title_tag'=>'select','text'=>'wysiwyg','link'=>'url','link_target'=>'select','box_layout'=>'select','content_align'=>'select','vertical_align'=>'select','icon_size'=>'number','icon_space'=>'number','title_space'=>'number','icon_color'=>'color','secondary_color'=>'color','hover_color'=>'color','hover_secondary_color'=>'color','title_color'=>'color','title_hover_color'=>'color','text_color'=>'color','icon_padding'=>'number','icon_border_width'=>'number','icon_radius'=>'number','rotate'=>'number','hover_animation'=>'select'];}
    1010 public function render($s,$children=''){
    11   $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?$s['icon_view']:'default';
    12   $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?$s['shape']:'circle';
    13   $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?$s['box_layout']:'top';
    14   $align=in_array($s['content_align']??'center',['left','center','right'],true)?$s['content_align']:'center';
    15   $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?$s['vertical_align']:'top';
     11  $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?($s['icon_view']??'default'):'default';
     12  $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?($s['shape']??'circle'):'circle';
     13  $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?($s['box_layout']??'top'):'top';
     14  $align=in_array($s['content_align']??'center',['left','center','right'],true)?($s['content_align']??'center'):'center';
     15  $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?($s['vertical_align']??'top'):'top';
    1616  $tag=$this->tag($s['title_tag']??'h3',$this->title_tags(),'h3');
    1717  $vars=$this->style_attr(array_merge($this->icon_vars($s),['--lb-box-icon-space'=>$this->unit($s['icon_space']??''),'--lb-box-title-space'=>$this->unit($s['title_space']??''),'--lb-box-title-color'=>$s['title_color']??'','--lb-box-title-hover'=>$s['title_hover_color']??'','--lb-box-text-color'=>$s['text_color']??'']));
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-icon_list.php

    r3723907 r3757542  
    4747 public function render($s,$children=''){
    4848  $layout=($s['list_layout']??'traditional')==='inline'?'inline':'traditional';
    49   $align=in_array($s['icon_align']??'left',['left','center','right'],true)?$s['icon_align']:'left';
    50   $dstyle=in_array($s['divider_style']??'solid',['solid','double','dotted','dashed'],true)?$s['divider_style']:'solid';
     49  $align=in_array($s['icon_align']??'left',['left','center','right'],true)?($s['icon_align']??'left'):'left';
     50  $dstyle=in_array($s['divider_style']??'solid',['solid','double','dotted','dashed'],true)?($s['divider_style']??'solid'):'solid';
    5151  $vars=$this->style_attr(['--lb-list-gap'=>$this->unit($s['space_between']??''),'--lb-list-icon-size'=>$this->unit($s['icon_size']??''),'--lb-list-icon-color'=>$s['icon_color']??($s['color']??''),'--lb-list-icon-hover'=>$s['icon_hover_color']??'','--lb-list-text-color'=>$s['text_color']??'','--lb-list-text-hover'=>$s['text_hover_color']??'','--lb-list-indent'=>$this->unit($s['text_indent']??''),'--lb-list-divider-style'=>$dstyle,'--lb-list-divider-weight'=>$this->unit($s['divider_weight']??''),'--lb-list-divider-color'=>$s['divider_color']??'','--lb-list-divider-width'=>sanitize_text_field((string)($s['divider_width']??''))]);
    5252  $t=($s['link_target']??'_self')==='_blank'?' target="_blank" rel="noopener"':'';
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-image.php

    r3723907 r3757542  
    7474  elseif($link_to==='custom'&&!empty($s['link']))$img='<a href="'.esc_attr(self::link_href($s['link'])).'" target="'.esc_attr($s['link_target']??'_self').'"'.(($s['link_target']??'')==='_blank'?' rel="noopener"':'').'>'.$img.'</a>';
    7575  $cap='';if(($s['caption_type']??'none')!=='none'){$text=$s['caption']??'';if($text===''&&$id)$text=wp_get_attachment_caption($id)?:'';if($text!=='')$cap='<figcaption class="lb-image-caption">'.esc_html($text).'</figcaption>';}
    76   $self=in_array($s['align_self']??'start',['start','center','end','stretch'],true)?$s['align_self']:'start';
     76  $self=in_array($s['align_self']??'start',['start','center','end','stretch'],true)?($s['align_self']??'start'):'start';
    7777  return '<figure class="'.$this->cls($s).' lb-image'.$this->hover_class($s).'" style="justify-self:stretch;align-self:'.esc_attr($self).';max-width:100%;min-width:0;overflow:hidden;box-sizing:border-box;"'.$this->attrs($s).'>'.$img.$cap.'</figure>';
    7878 }
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-image_box.php

    r3723907 r3757542  
    88 public function controls(){return ['image_id'=>'media','image_url'=>'url','image_size'=>'select','alt'=>'text','title'=>'text','title_tag'=>'select','text'=>'wysiwyg','link'=>'url','link_target'=>'select','box_layout'=>'select','content_align'=>'select','vertical_align'=>'select','image_width'=>'text','image_space'=>'number','title_space'=>'number','image_radius'=>'number','image_opacity'=>'number','image_hover_opacity'=>'number','title_color'=>'color','title_hover_color'=>'color','text_color'=>'color','hover_animation'=>'select'];}
    99 public function render($s,$children=''){
    10   $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?$s['box_layout']:'top';
    11   $align=in_array($s['content_align']??'center',['left','center','right'],true)?$s['content_align']:'center';
    12   $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?$s['vertical_align']:'top';
     10  $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?($s['box_layout']??'top'):'top';
     11  $align=in_array($s['content_align']??'center',['left','center','right'],true)?($s['content_align']??'center'):'center';
     12  $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?($s['vertical_align']??'top'):'top';
    1313  $tag=$this->tag($s['title_tag']??'h3',$this->title_tags(),'h3');
    1414  $vars=$this->style_attr(['--lb-box-image-width'=>sanitize_text_field((string)($s['image_width']??'')),'--lb-box-image-space'=>$this->unit($s['image_space']??''),'--lb-box-title-space'=>$this->unit($s['title_space']??''),'--lb-box-image-radius'=>$this->unit($s['image_radius']??''),'--lb-box-image-opacity'=>$s['image_opacity']??'','--lb-box-image-hover-opacity'=>$s['image_hover_opacity']??'','--lb-box-title-color'=>$s['title_color']??'','--lb-box-title-hover'=>$s['title_hover_color']??'','--lb-box-text-color'=>$s['text_color']??'']);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-nested_tabs.php

    r3723907 r3757542  
    5555  $active=max(0,min(count($slots)-1,absint($s['active']??0)));
    5656  $vertical=($s['orientation']??'horizontal')==='vertical';
    57   $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?$s['tabs_align']:'start';
     57  $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?($s['tabs_align']??'start'):'start';
    5858  $tag=$this->tag($s['title_tag']??'div',$this->title_tags(),'div');
    5959  $uid='lb'.substr(md5(wp_json_encode($slots).(string)($s['css_id']??'').wp_rand()),0,8);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-progress.php

    r3723907 r3757542  
    1010 public function render($s,$children=''){
    1111  $v=max(0,min(100,floatval($s['value']??70)));
    12   $style=in_array($s['bar_style']??'default',['default','info','success','warning','danger'],true)?$s['bar_style']:'default';
     12  $style=in_array($s['bar_style']??'default',['default','info','success','warning','danger'],true)?($s['bar_style']??'default'):'default';
    1313  $tag=$this->tag($s['title_tag']??'span',$this->title_tags(),'span');
    1414  $vars=$this->style_attr(['--lb-bar-color'=>$s['color']??'','--lb-bar-bg'=>$s['background']??'','--lb-bar-height'=>$this->unit($s['bar_height']??''),'--lb-bar-radius'=>$this->unit($s['bar_radius']??''),'--lb-bar-inner-color'=>$s['inner_color']??'','--lb-bar-title-color'=>$s['title_color']??'']);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-social.php

    r3723907 r3757542  
    7373 }
    7474 public function render($s,$children=''){
    75   $shape=in_array($s['shape']??'rounded',['square','rounded','circle'],true)?$s['shape']:'rounded';
     75  $shape=in_array($s['shape']??'rounded',['square','rounded','circle'],true)?($s['shape']??'rounded'):'rounded';
    7676  $scheme=($s['color_scheme']??'official')==='custom'?'custom':'official';
    77   $align=in_array($s['align']??'left',['left','center','right'],true)?$s['align']:'left';
     77  $align=in_array($s['align']??'left',['left','center','right'],true)?($s['align']??'left'):'left';
    7878  $cols=max(0,min(12,absint($s['columns']??0)));
    7979  $vars=$this->style_attr(['--lb-social-size'=>$this->unit($s['size']??''),'--lb-social-padding'=>$this->unit($s['icon_padding']??''),'--lb-social-gap'=>$this->unit($s['gap']??''),'--lb-social-row-gap'=>$this->unit($s['row_gap']??''),'--lb-social-radius'=>$this->unit($s['icon_radius']??''),'--lb-social-bg'=>$scheme==='custom'?($s['color']??''):'','--lb-social-color'=>$s['icon_color']??'','--lb-social-hover-bg'=>$s['hover_color']??'','--lb-social-hover-color'=>$s['hover_icon_color']??'','--lb-social-cols'=>$cols?:'','justify-content'=>$align==='left'?'flex-start':($align==='right'?'flex-end':'center')]);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-star_rating.php

    r3723907 r3757542  
    1313  $rating=max(0,min($max,round(floatval($this->scalar($s['rating']??5,5)),1)));
    1414  $unmarked=($s['unmarked_style']??'solid')==='outline'?'outline':'solid';
    15   $align=in_array($s['align']??'left',['left','center','right','justify'],true)?$s['align']:'left';
     15  $align=in_array($s['align']??'left',['left','center','right','justify'],true)?($s['align']??'left'):'left';
    1616  $vars=$this->style_attr(['--lb-star-size'=>$this->unit($s['size']??''),'--lb-star-gap'=>$this->unit($s['star_gap']??''),'--lb-star-color'=>$s['color']??'','--lb-star-unmarked'=>$s['unmarked_color']??'','--lb-star-title-color'=>$s['title_color']??'','--lb-star-title-gap'=>$this->unit($s['title_gap']??'')]);
    1717  $stars='';
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-tabs.php

    r3723907 r3757542  
    4747  $active=max(0,min(count($rows)-1,absint($s['active']??0)));
    4848  $vertical=($s['orientation']??'horizontal')==='vertical';
    49   $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?$s['tabs_align']:'start';
     49  $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?($s['tabs_align']??'start'):'start';
    5050  $tag=$this->tag($s['title_tag']??'div',$this->title_tags(),'div');
    5151  $uid='lb'.substr(md5(wp_json_encode($rows).microtime(true).wp_rand()),0,8);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-testimonial.php

    r3723907 r3757542  
    3939 protected function item_html($s,$item){
    4040  $pos=($s['image_position']??'aside')==='top'?'top':'aside';
    41   $align=in_array($s['align']??'center',['left','center','right'],true)?$s['align']:'center';
     41  $align=in_array($s['align']??'center',['left','center','right'],true)?($s['align']??'center'):'center';
    4242  $tag=$this->tag($s['name_tag']??'div',$this->title_tags(),'div');
    4343  $author=(string)($item['author']??''); $role=(string)($item['role']??''); $quote=(string)($item['quote']??'');
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-text.php

    r3723907 r3757542  
    4242 public function render($s,$children=''){
    4343  $cols=max(1,min(10,absint($this->scalar($s['text_columns']??1,1))));
    44   $view=in_array($s['drop_cap_view']??'default',['default','stacked','framed'],true)?$s['drop_cap_view']:'default';
     44  $view=in_array($s['drop_cap_view']??'default',['default','stacked','framed'],true)?($s['drop_cap_view']??'default'):'default';
    4545  $vars=$this->style_attr(['--lb-text-columns'=>$cols>1?$cols:'','--lb-text-column-gap'=>$this->unit($s['column_gap']??''),'--lb-paragraph-spacing'=>$this->unit($s['paragraph_spacing']??''),'--lb-link-color'=>$s['link_color']??'','--lb-link-hover'=>$s['link_hover_color']??'','--lb-text-hover'=>$s['hover_color']??'','--lb-drop-cap-color'=>$s['drop_cap_color']??'','--lb-drop-cap-secondary'=>$s['drop_cap_secondary_color']??'','--lb-drop-cap-size'=>$this->unit($s['drop_cap_size']??''),'--lb-drop-cap-space'=>$this->unit($s['drop_cap_space']??''),'--lb-drop-cap-radius'=>$this->unit($s['drop_cap_radius']??''),'--lb-drop-cap-border'=>$this->unit($s['drop_cap_border_width']??'')]);
    4646  $classes=$this->cls($s).' lb-text'.($cols>1?' lb-text-columns':'').(!empty($s['drop_cap'])?' lb-text-drop-cap lb-drop-cap-'.$view:'');
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-text_path.php

    r3723907 r3757542  
    5454  unset($children);
    5555  $text=esc_html($s['text']??'Sidcraft Page Builder');
    56   $kind=in_array($s['path']??'wave',['wave','arc','circle','line'],true)?$s['path']:'wave';
     56  $kind=in_array($s['path']??'wave',['wave','arc','circle','line'],true)?($s['path']??'wave'):'wave';
    5757  $paths=['wave'=>'M 20 80 Q 140 16 260 80 T 500 80 T 740 80 T 980 80','arc'=>'M 36 112 Q 500 8 964 112','circle'=>'M 500 46 A 150 32 0 1 1 499 46','line'=>'M 20 96 H 980'];
    5858  $id=function_exists('wp_unique_id')?wp_unique_id('lb-tp-'):'lb-tp-'.substr(md5(uniqid('',true)),0,8);
  • sidcraft-page-builder/tags/2.1.3/includes/units/class-video.php

    r3723907 r3757542  
    9393  if(!empty($s['loop']))$a.=' loop';
    9494  if(empty($s['download_button']))$a.=' controlsList="nodownload"';
    95   $a.=' preload="'.esc_attr(in_array($s['preload']??'metadata',['none','metadata','auto'],true)?$s['preload']:'metadata').'"';
     95  $a.=' preload="'.esc_attr(in_array($s['preload']??'metadata',['none','metadata','auto'],true)?($s['preload']??'metadata'):'metadata').'"';
    9696  if($poster)$a.=' poster="'.esc_url($poster).'"';
    9797  return '<video'.$a.'><source src="'.$url.'"></video>';
  • sidcraft-page-builder/tags/2.1.3/readme.txt

    r3757239 r3757542  
    1 === Sidcraft Page Builder w/ MCP ===
     1=== Sidcraft Page Builder w/ AI MCP ===
    22Contributors: ssiddiqi4
    33Donate link: https://paypal.me/SSiddiqi275
    4 Tags: page builder, drag and drop, AI-Page-Builder, website builder, templates
     4Tags: page builder, drag and drop, landing page, website builder, templates
    55Requires at least: 6.9
    66Tested up to: 7.1
    77Requires PHP: 7.4
    8 Stable tag: 2.1.2
     8Stable tag: 2.1.3
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    118118[Sidcraft Builder Pro](https://canvasly.pro/price.html#lite-vs-pro) is a separate add-on that adds Theme Builder, popups, display conditions, dynamic tags, Loop Grid and Loop Carousel, 70+ extra units, WooCommerce builder units, hosted payments (Stripe, PayPal, Square, Authorize.Net, Razorpay, Mollie) with Payment Forms, form actions and submissions, custom fonts and icons, custom code, editor notes and an AI assistant with an MCP server. Pro's Login & Register and Payment Form units also include the "Require Cloudflare Turnstile" option.
    119119
    120 Every install also serves a read-only MCP endpoint at `/wp-json/sidcraft-page-builder/v1/mcp`, so AI agents such as Claude Desktop, Cursor and VS Code can read the site, the builder guide, the document schema and pages after signing in with a WordPress application password. Writing pages, templates, design tokens, media, menus, components and store data needs Sidcraft Builder Pro 2.1.2 and its own MCP endpoint.
     120Every install also serves a read-only MCP endpoint at `/wp-json/sidcraft-page-builder/v1/mcp`, so AI agents such as Claude Desktop, Cursor and VS Code can read the site, the builder guide, the document schema and pages after signing in with a WordPress application password. Writing pages, templates, design tokens, media, menus, components and store data needs Sidcraft Builder Pro 2.1.3 and its own MCP endpoint.
    121121
    122122The full unit list and user guide are at [canvasly.pro](https://canvasly.pro/blocks.html). For third-party services used by optional features, see "External services" below.
    … …  
    351351
    352352== Changelog ==
     353
     354= 2.1.3 =
     355* Fixed: PHP warnings from Text, Button, Icon Box, Divider and Icon List units when a saved layout predates a newer setting.
     356* Fixed: "conditional query tag called before the query" notices from early display-rule and maintenance checks.
     357* Fixed: the "translation loading too early" notice by registering bundled translations after setup.
     358* Fixed: the page fallback must-use plugin no longer checks query tags before the main query.
    353359
    354360= 2.1.2 =
  • sidcraft-page-builder/tags/2.1.3/sidcraft-page-builder.php

    r3757230 r3757542  
    33 * Plugin Name: Sidcraft Page Builder
    44 * Description: A lightweight, independent visual page builder for WordPress.
    5  * Version: 2.1.2
     5 * Version: 2.1.3
    66 * Requires at least: 6.9
    77 * Requires PHP: 7.4
    … …  
    5454}
    5555if ( ! defined( 'SIDCRAFT_PAGE_BUILDER_VERSION' ) ) {
    56         define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.2' );
     56        define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.3' );
    5757}
    5858
    … …  
    319319
    320320if ( ! defined( 'SIDCRAFT_PAGE_BUILDER_VERSION' ) ) {
    321         define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.2' );
     321        define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.3' );
    322322}
    323323if ( ! defined( 'SIDCRAFT_PAGE_BUILDER_FILE' ) ) {
    … …  
    347347        require_once $sidcraft_page_builder_controls_file;
    348348}
     349/**
     350 * Register the bundled translations after setup. Registering earlier makes
     351 * WordPress 6.7+ try to load them before `init` when a label is translated
     352 * during plugin load, which logs a "translation loading too early" notice.
     353 *
     354 * @return void
     355 */
     356function sidcraft_page_builder_load_textdomain() {
     357        load_plugin_textdomain( // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- Bundled translations in /languages.
     358                'sidcraft-page-builder',
     359                false,
     360                dirname( plugin_basename( __FILE__ ) ) . '/languages'
     361        );
     362}
     363add_action( 'after_setup_theme', 'sidcraft_page_builder_load_textdomain', 1 );
    349364\SidcraftPageBuilder\Bootstrap\Plugin::instance();
    350365register_activation_hook( __FILE__, array( '\SidcraftPageBuilder\Bootstrap\Plugin', 'activate' ) );
  • sidcraft-page-builder/trunk/includes/ops/class-maintenance.php

    r3723907 r3757542  
    378378                        || ( isset( $_GET['rest_route'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
    379379                $preview_q = ! empty( $_GET[ self::PREVIEW ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
     380                // Conditional tags return false and raise a notice before the main query.
     381                $ready = function_exists( 'did_action' ) && did_action( 'wp' );
    380382                return array(
    381383                        'is_admin'     => function_exists( 'is_admin' ) && is_admin(),
    … …  
    385387                        'doing_cron'   => function_exists( 'wp_doing_cron' ) ? wp_doing_cron() : ( defined( 'DOING_CRON' ) && DOING_CRON ),
    386388                        'is_rest'      => $rest,
    387                         'is_feed'      => function_exists( 'is_feed' ) && is_feed(),
    388                         'is_preview'   => function_exists( 'is_preview' ) && is_preview(),
    389                         'is_customize' => function_exists( 'is_customize_preview' ) && is_customize_preview(),
     389                        'is_feed'      => $ready && function_exists( 'is_feed' ) && is_feed(),
     390                        'is_preview'   => $ready && function_exists( 'is_preview' ) && is_preview(),
     391                        'is_customize' => $ready && function_exists( 'is_customize_preview' ) && is_customize_preview(),
    390392                        'user_roles'   => $roles,
    391393                        'preview'      => $preview_q,
  • sidcraft-page-builder/trunk/includes/ops/page-snapshot-mu.php

    r3746087 r3757542  
    2828 */
    2929function sidcraft_page_builder_snapshot_request_ok() {
     30        // template_redirect runs after the main query; guard direct/early calls.
     31        if ( ! function_exists( 'did_action' ) || ! did_action( 'wp' ) ) {
     32                return false;
     33        }
    3034        $method = isset( $_SERVER['REQUEST_METHOD'] ) ? strtoupper( sanitize_key( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) ) : 'GET';
    3135        if ( 'GET' !== $method && 'HEAD' !== $method ) {
  • sidcraft-page-builder/trunk/includes/units/class-alert.php

    r3723907 r3757542  
    99 public function controls(){return ['title'=>'text','text'=>'wysiwyg','type'=>'select','dismissible'=>'switch','dismiss_icon'=>'icon','background'=>'color','border_color'=>'color','title_color'=>'color','text_color'=>'color','dismiss_color'=>'color','dismiss_size'=>'number'];}
    1010 public function render($s,$children=''){
    11   $type=in_array($s['type']??'info',['info','success','warning','danger'],true)?$s['type']:'info';
     11  $type=in_array($s['type']??'info',['info','success','warning','danger'],true)?($s['type']??'info'):'info';
    1212  $vars=$this->style_attr(['--lb-alert-bg'=>$s['background']??'','--lb-alert-border'=>$s['border_color']??'','--lb-alert-title'=>$s['title_color']??'','--lb-alert-text'=>$s['text_color']??'','--lb-alert-dismiss'=>$s['dismiss_color']??'','--lb-alert-dismiss-size'=>$this->unit($s['dismiss_size']??'')]);
    1313  $out='<div class="'.$this->cls($s).' lb-alert lb-alert-'.$type.'" role="alert"'.$vars.'>';
  • sidcraft-page-builder/trunk/includes/units/class-button.php

    r3723907 r3757542  
    4040 }
    4141 public function render($s,$children=''){
    42   $size=in_array($s['size']??'medium',self::sizes(),true)?$s['size']:'medium';
     42  $size=in_array($s['size']??'medium',self::sizes(),true)?($s['size']??'medium'):'medium';
    4343  $align=$this->scalar($s['align']??'left','left');
    4444  $align=in_array($align,['left','center','right','justify'],true)?$align:'left';
    … …  
    4848  $t=($s['target']??'_self')==='_blank'?' target="_blank" rel="noopener"':'';
    4949  $id=!empty($s['button_id'])?' id="'.esc_attr(sanitize_html_class($s['button_id'])).'"':'';
    50   $type=in_array($s['button_type']??'default',['default','info','success','warning','danger'],true)?$s['button_type']:'default';
     50  $type=in_array($s['button_type']??'default',['default','info','success','warning','danger'],true)?($s['button_type']??'default'):'default';
    5151  $a='<a class="'.$this->cls($s).' lb-button lb-button-'.sanitize_html_class($size).' lb-button-type-'.sanitize_html_class($type).($icon?' lb-button-has-icon':'').$this->hover_class($s).'"'.$id.' href="'.esc_attr(self::link_href($s['url']??'#')).'"'.$t.'>'.($placement==='before'?$icon.$label:$label.$icon).'</a>';
    5252  return '<div class="lb-button-wrap lb-button-align-'.$align.'">'.$a.'</div>';
  • sidcraft-page-builder/trunk/includes/units/class-carousel.php

    r3723907 r3757542  
    7272  if(!$slides)return '<div class="'.$this->cls($s).' lb-carousel-placeholder">'.esc_html__('Choose images for the carousel', 'sidcraft-page-builder').'</div>';
    7373  $show=max(1,min(10,absint($s['slides_to_show']??1)));$scroll=max(1,min($show,absint($s['slides_to_scroll']??1)));
    74   $nav=in_array($s['navigation']??'both',['both','arrows','dots','none'],true)?$s['navigation']:'both';
     74  $nav=in_array($s['navigation']??'both',['both','arrows','dots','none'],true)?($s['navigation']??'both'):'both';
    7575  $linkRaw=is_string($s['link']??null)?$s['link']:'none';
    7676  if(preg_match('~^https?://(none|file|custom)/?$~i',$linkRaw,$lm))$linkRaw=strtolower($lm[1]); // repair values saved as "http://none" by older builds
    … …  
    7878  $effect=($s['effect']??'slide')==='fade'&&$show===1?'fade':'slide';
    7979  $dir=($s['slide_direction']??'ltr')==='rtl'?'rtl':'ltr';
    80   $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?$s['caption']:'none';
    81   $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?$s['caption_align']:'center';
     80  $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?($s['caption']??'none'):'none';
     81  $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?($s['caption_align']??'center'):'center';
    8282  $size=sanitize_key($s['image_size']??'large');
    8383  $height=$this->scalar($s['height']??'');
  • sidcraft-page-builder/trunk/includes/units/class-counter.php

    r3723907 r3757542  
    2020  $tag=$this->tag($s['title_tag']??'div',$this->title_tags(),'div');
    2121  $pos=($s['title_position']??'after')==='before'?'before':'after';
    22   $align=in_array($s['align']??'center',['left','center','right'],true)?$s['align']:'center';
     22  $align=in_array($s['align']??'center',['left','center','right'],true)?($s['align']??'center'):'center';
    2323  $vars=$this->style_attr(['--lb-counter-number-color'=>$s['number_color']??'','--lb-counter-title-color'=>$s['title_color']??'','--lb-counter-number-size'=>$this->unit($s['number_size']??''),'--lb-counter-gap'=>$this->unit($s['title_gap']??''),'text-align'=>$align]);
    2424  $title=($s['title']??'')!==''?'<'.$tag.' class="lb-counter-title">'.esc_html($s['title']).'</'.$tag.'>':'';
  • sidcraft-page-builder/trunk/includes/units/class-divider.php

    r3723907 r3757542  
    1212 public function controls(){return ['style'=>'select','divider_width'=>'text','align'=>'select','thickness'=>'number','color'=>'color','divider_gap'=>'number','pattern_size'=>'number','look'=>'select','text'=>'text','text_tag'=>'select','icon'=>'icon','unit_align'=>'select','unit_spacing'=>'number','text_color'=>'color','icon_color'=>'color','icon_size'=>'number','icon_view'=>'select'];}
    1313 public function render($s,$children=''){
    14   $style=in_array($s['style']??'solid',self::line_styles(),true)?$s['style']:'solid';
    15   $align=in_array($s['align']??'center',['left','center','right'],true)?$s['align']:'center';
    16   $look=in_array($s['look']??'line',['line','line_text','line_icon'],true)?$s['look']:'line';
    17   $ealign=in_array($s['unit_align']??'center',['left','center','right'],true)?$s['unit_align']:'center';
    18   $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?$s['icon_view']:'default';
     14  $style=in_array($s['style']??'solid',self::line_styles(),true)?($s['style']??'solid'):'solid';
     15  $align=in_array($s['align']??'center',['left','center','right'],true)?($s['align']??'center'):'center';
     16  $look=in_array($s['look']??'line',['line','line_text','line_icon'],true)?($s['look']??'line'):'line';
     17  $ealign=in_array($s['unit_align']??'center',['left','center','right'],true)?($s['unit_align']??'center'):'center';
     18  $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?($s['icon_view']??'default'):'default';
    1919  $vars=$this->style_attr([
    2020   '--lb-divider-width'=>sanitize_text_field((string)($s['divider_width']??'100%')),'--lb-divider-color'=>$s['color']??'','--lb-divider-weight'=>$this->unit(max(1,(float)($s['thickness']??1))),
  • sidcraft-page-builder/trunk/includes/units/class-gallery.php

    r3723907 r3757542  
    7676  if(!$url) return '';
    7777  $alt=(string)get_post_meta($id,'_wp_attachment_image_alt',true);
    78   $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?$s['caption']:'none';
     78  $capMode=in_array($s['caption']??'none',['none','title','caption','description'],true)?($s['caption']??'none'):'none';
    7979  $cap=$capMode!=='none'?Carousel::caption_text($id,$capMode):'';
    8080  $lazy=!isset($s['lazy_load']) || !empty($s['lazy_load']);
    … …  
    8484  $style=$this->item_style($s,$ratio);
    8585  $extra=' class="'.$cls.'" data-lb-ratio="'.esc_attr((string)$ratio).'" style="'.esc_attr($style).'"'.($set!==''?' data-lb-in="'.esc_attr($set).'"':'').($hidden?' hidden':'');
    86   $linkMode=in_array($s['link']??'file',['none','file','attachment'],true)?$s['link']:'file';
     86  $linkMode=in_array($s['link']??'file',['none','file','attachment'],true)?($s['link']??'file'):'file';
    8787  $light=!empty($s['lightbox'])&&$linkMode==='file';
    8888  if($linkMode==='file'){
    … …  
    9999 public function render($s,$children=''){
    100100  $groups=$this->collections($s);
    101   $order=in_array($s['order_by']??'default',['default','random','date','title'],true)?$s['order_by']:'default';
     101  $order=in_array($s['order_by']??'default',['default','random','date','title'],true)?($s['order_by']??'default'):'default';
    102102  $hasMany=($s['mode']??'single')==='multiple' && count($groups)>1;
    103103  $showAll=!isset($s['show_all']) || !empty($s['show_all']);
    104104  $cols=max(1,min(10,absint($this->scalar($s['columns']??4,4))));
    105105  $layout=$this->layout_of($s);
    106   $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?$s['caption_align']:'center';
    107   $last=in_array($s['last_row']??'auto',['auto','fit','grow'],true)?$s['last_row']:'auto';
     106  $capAlign=in_array($s['caption_align']??'center',['left','center','right'],true)?($s['caption_align']??'center'):'center';
     107  $last=in_array($s['last_row']??'auto',['auto','fit','grow'],true)?($s['last_row']??'auto'):'auto';
    108108  $layoutCls=' is-'.$layout.(($s['image_ratio']??'1:1')==='auto'?' is-ratio-auto':'');
    109109  $items='';$any=false;
  • sidcraft-page-builder/trunk/includes/units/class-icon.php

    r3723907 r3757542  
    3030 }
    3131 public function render($s,$children=''){
    32   $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?$s['icon_view']:'default';
    33   $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?$s['shape']:'circle';
     32  $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?($s['icon_view']??'default'):'default';
     33  $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?($s['shape']??'circle'):'circle';
    3434  $svg=\SidcraftPageBuilder\Utils\Icons::svg($s['icon']??'star');
    3535  $inner_class='lb-icon-glyph'.$this->hover_class($s);
  • sidcraft-page-builder/trunk/includes/units/class-icon_box.php

    r3723907 r3757542  
    99 public function controls(){return ['icon'=>'icon','icon_view'=>'select','shape'=>'select','title'=>'text','title_tag'=>'select','text'=>'wysiwyg','link'=>'url','link_target'=>'select','box_layout'=>'select','content_align'=>'select','vertical_align'=>'select','icon_size'=>'number','icon_space'=>'number','title_space'=>'number','icon_color'=>'color','secondary_color'=>'color','hover_color'=>'color','hover_secondary_color'=>'color','title_color'=>'color','title_hover_color'=>'color','text_color'=>'color','icon_padding'=>'number','icon_border_width'=>'number','icon_radius'=>'number','rotate'=>'number','hover_animation'=>'select'];}
    1010 public function render($s,$children=''){
    11   $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?$s['icon_view']:'default';
    12   $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?$s['shape']:'circle';
    13   $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?$s['box_layout']:'top';
    14   $align=in_array($s['content_align']??'center',['left','center','right'],true)?$s['content_align']:'center';
    15   $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?$s['vertical_align']:'top';
     11  $view=in_array($s['icon_view']??'default',['default','stacked','framed'],true)?($s['icon_view']??'default'):'default';
     12  $shape=in_array($s['shape']??'circle',['circle','rounded','square'],true)?($s['shape']??'circle'):'circle';
     13  $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?($s['box_layout']??'top'):'top';
     14  $align=in_array($s['content_align']??'center',['left','center','right'],true)?($s['content_align']??'center'):'center';
     15  $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?($s['vertical_align']??'top'):'top';
    1616  $tag=$this->tag($s['title_tag']??'h3',$this->title_tags(),'h3');
    1717  $vars=$this->style_attr(array_merge($this->icon_vars($s),['--lb-box-icon-space'=>$this->unit($s['icon_space']??''),'--lb-box-title-space'=>$this->unit($s['title_space']??''),'--lb-box-title-color'=>$s['title_color']??'','--lb-box-title-hover'=>$s['title_hover_color']??'','--lb-box-text-color'=>$s['text_color']??'']));
  • sidcraft-page-builder/trunk/includes/units/class-icon_list.php

    r3723907 r3757542  
    4747 public function render($s,$children=''){
    4848  $layout=($s['list_layout']??'traditional')==='inline'?'inline':'traditional';
    49   $align=in_array($s['icon_align']??'left',['left','center','right'],true)?$s['icon_align']:'left';
    50   $dstyle=in_array($s['divider_style']??'solid',['solid','double','dotted','dashed'],true)?$s['divider_style']:'solid';
     49  $align=in_array($s['icon_align']??'left',['left','center','right'],true)?($s['icon_align']??'left'):'left';
     50  $dstyle=in_array($s['divider_style']??'solid',['solid','double','dotted','dashed'],true)?($s['divider_style']??'solid'):'solid';
    5151  $vars=$this->style_attr(['--lb-list-gap'=>$this->unit($s['space_between']??''),'--lb-list-icon-size'=>$this->unit($s['icon_size']??''),'--lb-list-icon-color'=>$s['icon_color']??($s['color']??''),'--lb-list-icon-hover'=>$s['icon_hover_color']??'','--lb-list-text-color'=>$s['text_color']??'','--lb-list-text-hover'=>$s['text_hover_color']??'','--lb-list-indent'=>$this->unit($s['text_indent']??''),'--lb-list-divider-style'=>$dstyle,'--lb-list-divider-weight'=>$this->unit($s['divider_weight']??''),'--lb-list-divider-color'=>$s['divider_color']??'','--lb-list-divider-width'=>sanitize_text_field((string)($s['divider_width']??''))]);
    5252  $t=($s['link_target']??'_self')==='_blank'?' target="_blank" rel="noopener"':'';
  • sidcraft-page-builder/trunk/includes/units/class-image.php

    r3723907 r3757542  
    7474  elseif($link_to==='custom'&&!empty($s['link']))$img='<a href="'.esc_attr(self::link_href($s['link'])).'" target="'.esc_attr($s['link_target']??'_self').'"'.(($s['link_target']??'')==='_blank'?' rel="noopener"':'').'>'.$img.'</a>';
    7575  $cap='';if(($s['caption_type']??'none')!=='none'){$text=$s['caption']??'';if($text===''&&$id)$text=wp_get_attachment_caption($id)?:'';if($text!=='')$cap='<figcaption class="lb-image-caption">'.esc_html($text).'</figcaption>';}
    76   $self=in_array($s['align_self']??'start',['start','center','end','stretch'],true)?$s['align_self']:'start';
     76  $self=in_array($s['align_self']??'start',['start','center','end','stretch'],true)?($s['align_self']??'start'):'start';
    7777  return '<figure class="'.$this->cls($s).' lb-image'.$this->hover_class($s).'" style="justify-self:stretch;align-self:'.esc_attr($self).';max-width:100%;min-width:0;overflow:hidden;box-sizing:border-box;"'.$this->attrs($s).'>'.$img.$cap.'</figure>';
    7878 }
  • sidcraft-page-builder/trunk/includes/units/class-image_box.php

    r3723907 r3757542  
    88 public function controls(){return ['image_id'=>'media','image_url'=>'url','image_size'=>'select','alt'=>'text','title'=>'text','title_tag'=>'select','text'=>'wysiwyg','link'=>'url','link_target'=>'select','box_layout'=>'select','content_align'=>'select','vertical_align'=>'select','image_width'=>'text','image_space'=>'number','title_space'=>'number','image_radius'=>'number','image_opacity'=>'number','image_hover_opacity'=>'number','title_color'=>'color','title_hover_color'=>'color','text_color'=>'color','hover_animation'=>'select'];}
    99 public function render($s,$children=''){
    10   $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?$s['box_layout']:'top';
    11   $align=in_array($s['content_align']??'center',['left','center','right'],true)?$s['content_align']:'center';
    12   $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?$s['vertical_align']:'top';
     10  $layout=in_array($s['box_layout']??'top',['top','left','right'],true)?($s['box_layout']??'top'):'top';
     11  $align=in_array($s['content_align']??'center',['left','center','right'],true)?($s['content_align']??'center'):'center';
     12  $valign=in_array($s['vertical_align']??'top',['top','middle','bottom'],true)?($s['vertical_align']??'top'):'top';
    1313  $tag=$this->tag($s['title_tag']??'h3',$this->title_tags(),'h3');
    1414  $vars=$this->style_attr(['--lb-box-image-width'=>sanitize_text_field((string)($s['image_width']??'')),'--lb-box-image-space'=>$this->unit($s['image_space']??''),'--lb-box-title-space'=>$this->unit($s['title_space']??''),'--lb-box-image-radius'=>$this->unit($s['image_radius']??''),'--lb-box-image-opacity'=>$s['image_opacity']??'','--lb-box-image-hover-opacity'=>$s['image_hover_opacity']??'','--lb-box-title-color'=>$s['title_color']??'','--lb-box-title-hover'=>$s['title_hover_color']??'','--lb-box-text-color'=>$s['text_color']??'']);
  • sidcraft-page-builder/trunk/includes/units/class-nested_tabs.php

    r3723907 r3757542  
    5555  $active=max(0,min(count($slots)-1,absint($s['active']??0)));
    5656  $vertical=($s['orientation']??'horizontal')==='vertical';
    57   $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?$s['tabs_align']:'start';
     57  $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?($s['tabs_align']??'start'):'start';
    5858  $tag=$this->tag($s['title_tag']??'div',$this->title_tags(),'div');
    5959  $uid='lb'.substr(md5(wp_json_encode($slots).(string)($s['css_id']??'').wp_rand()),0,8);
  • sidcraft-page-builder/trunk/includes/units/class-progress.php

    r3723907 r3757542  
    1010 public function render($s,$children=''){
    1111  $v=max(0,min(100,floatval($s['value']??70)));
    12   $style=in_array($s['bar_style']??'default',['default','info','success','warning','danger'],true)?$s['bar_style']:'default';
     12  $style=in_array($s['bar_style']??'default',['default','info','success','warning','danger'],true)?($s['bar_style']??'default'):'default';
    1313  $tag=$this->tag($s['title_tag']??'span',$this->title_tags(),'span');
    1414  $vars=$this->style_attr(['--lb-bar-color'=>$s['color']??'','--lb-bar-bg'=>$s['background']??'','--lb-bar-height'=>$this->unit($s['bar_height']??''),'--lb-bar-radius'=>$this->unit($s['bar_radius']??''),'--lb-bar-inner-color'=>$s['inner_color']??'','--lb-bar-title-color'=>$s['title_color']??'']);
  • sidcraft-page-builder/trunk/includes/units/class-social.php

    r3723907 r3757542  
    7373 }
    7474 public function render($s,$children=''){
    75   $shape=in_array($s['shape']??'rounded',['square','rounded','circle'],true)?$s['shape']:'rounded';
     75  $shape=in_array($s['shape']??'rounded',['square','rounded','circle'],true)?($s['shape']??'rounded'):'rounded';
    7676  $scheme=($s['color_scheme']??'official')==='custom'?'custom':'official';
    77   $align=in_array($s['align']??'left',['left','center','right'],true)?$s['align']:'left';
     77  $align=in_array($s['align']??'left',['left','center','right'],true)?($s['align']??'left'):'left';
    7878  $cols=max(0,min(12,absint($s['columns']??0)));
    7979  $vars=$this->style_attr(['--lb-social-size'=>$this->unit($s['size']??''),'--lb-social-padding'=>$this->unit($s['icon_padding']??''),'--lb-social-gap'=>$this->unit($s['gap']??''),'--lb-social-row-gap'=>$this->unit($s['row_gap']??''),'--lb-social-radius'=>$this->unit($s['icon_radius']??''),'--lb-social-bg'=>$scheme==='custom'?($s['color']??''):'','--lb-social-color'=>$s['icon_color']??'','--lb-social-hover-bg'=>$s['hover_color']??'','--lb-social-hover-color'=>$s['hover_icon_color']??'','--lb-social-cols'=>$cols?:'','justify-content'=>$align==='left'?'flex-start':($align==='right'?'flex-end':'center')]);
  • sidcraft-page-builder/trunk/includes/units/class-star_rating.php

    r3723907 r3757542  
    1313  $rating=max(0,min($max,round(floatval($this->scalar($s['rating']??5,5)),1)));
    1414  $unmarked=($s['unmarked_style']??'solid')==='outline'?'outline':'solid';
    15   $align=in_array($s['align']??'left',['left','center','right','justify'],true)?$s['align']:'left';
     15  $align=in_array($s['align']??'left',['left','center','right','justify'],true)?($s['align']??'left'):'left';
    1616  $vars=$this->style_attr(['--lb-star-size'=>$this->unit($s['size']??''),'--lb-star-gap'=>$this->unit($s['star_gap']??''),'--lb-star-color'=>$s['color']??'','--lb-star-unmarked'=>$s['unmarked_color']??'','--lb-star-title-color'=>$s['title_color']??'','--lb-star-title-gap'=>$this->unit($s['title_gap']??'')]);
    1717  $stars='';
  • sidcraft-page-builder/trunk/includes/units/class-tabs.php

    r3723907 r3757542  
    4747  $active=max(0,min(count($rows)-1,absint($s['active']??0)));
    4848  $vertical=($s['orientation']??'horizontal')==='vertical';
    49   $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?$s['tabs_align']:'start';
     49  $align=in_array($s['tabs_align']??'start',['start','center','end','stretch'],true)?($s['tabs_align']??'start'):'start';
    5050  $tag=$this->tag($s['title_tag']??'div',$this->title_tags(),'div');
    5151  $uid='lb'.substr(md5(wp_json_encode($rows).microtime(true).wp_rand()),0,8);
  • sidcraft-page-builder/trunk/includes/units/class-testimonial.php

    r3723907 r3757542  
    3939 protected function item_html($s,$item){
    4040  $pos=($s['image_position']??'aside')==='top'?'top':'aside';
    41   $align=in_array($s['align']??'center',['left','center','right'],true)?$s['align']:'center';
     41  $align=in_array($s['align']??'center',['left','center','right'],true)?($s['align']??'center'):'center';
    4242  $tag=$this->tag($s['name_tag']??'div',$this->title_tags(),'div');
    4343  $author=(string)($item['author']??''); $role=(string)($item['role']??''); $quote=(string)($item['quote']??'');
  • sidcraft-page-builder/trunk/includes/units/class-text.php

    r3723907 r3757542  
    4242 public function render($s,$children=''){
    4343  $cols=max(1,min(10,absint($this->scalar($s['text_columns']??1,1))));
    44   $view=in_array($s['drop_cap_view']??'default',['default','stacked','framed'],true)?$s['drop_cap_view']:'default';
     44  $view=in_array($s['drop_cap_view']??'default',['default','stacked','framed'],true)?($s['drop_cap_view']??'default'):'default';
    4545  $vars=$this->style_attr(['--lb-text-columns'=>$cols>1?$cols:'','--lb-text-column-gap'=>$this->unit($s['column_gap']??''),'--lb-paragraph-spacing'=>$this->unit($s['paragraph_spacing']??''),'--lb-link-color'=>$s['link_color']??'','--lb-link-hover'=>$s['link_hover_color']??'','--lb-text-hover'=>$s['hover_color']??'','--lb-drop-cap-color'=>$s['drop_cap_color']??'','--lb-drop-cap-secondary'=>$s['drop_cap_secondary_color']??'','--lb-drop-cap-size'=>$this->unit($s['drop_cap_size']??''),'--lb-drop-cap-space'=>$this->unit($s['drop_cap_space']??''),'--lb-drop-cap-radius'=>$this->unit($s['drop_cap_radius']??''),'--lb-drop-cap-border'=>$this->unit($s['drop_cap_border_width']??'')]);
    4646  $classes=$this->cls($s).' lb-text'.($cols>1?' lb-text-columns':'').(!empty($s['drop_cap'])?' lb-text-drop-cap lb-drop-cap-'.$view:'');
  • sidcraft-page-builder/trunk/includes/units/class-text_path.php

    r3723907 r3757542  
    5454  unset($children);
    5555  $text=esc_html($s['text']??'Sidcraft Page Builder');
    56   $kind=in_array($s['path']??'wave',['wave','arc','circle','line'],true)?$s['path']:'wave';
     56  $kind=in_array($s['path']??'wave',['wave','arc','circle','line'],true)?($s['path']??'wave'):'wave';
    5757  $paths=['wave'=>'M 20 80 Q 140 16 260 80 T 500 80 T 740 80 T 980 80','arc'=>'M 36 112 Q 500 8 964 112','circle'=>'M 500 46 A 150 32 0 1 1 499 46','line'=>'M 20 96 H 980'];
    5858  $id=function_exists('wp_unique_id')?wp_unique_id('lb-tp-'):'lb-tp-'.substr(md5(uniqid('',true)),0,8);
  • sidcraft-page-builder/trunk/includes/units/class-video.php

    r3723907 r3757542  
    9393  if(!empty($s['loop']))$a.=' loop';
    9494  if(empty($s['download_button']))$a.=' controlsList="nodownload"';
    95   $a.=' preload="'.esc_attr(in_array($s['preload']??'metadata',['none','metadata','auto'],true)?$s['preload']:'metadata').'"';
     95  $a.=' preload="'.esc_attr(in_array($s['preload']??'metadata',['none','metadata','auto'],true)?($s['preload']??'metadata'):'metadata').'"';
    9696  if($poster)$a.=' poster="'.esc_url($poster).'"';
    9797  return '<video'.$a.'><source src="'.$url.'"></video>';
  • sidcraft-page-builder/trunk/readme.txt

    r3757239 r3757542  
    1 === Sidcraft Page Builder w/ MCP ===
     1=== Sidcraft Page Builder w/ AI MCP ===
    22Contributors: ssiddiqi4
    33Donate link: https://paypal.me/SSiddiqi275
    4 Tags: page builder, drag and drop, AI-Page-Builder, website builder, templates
     4Tags: page builder, drag and drop, landing page, website builder, templates
    55Requires at least: 6.9
    66Tested up to: 7.1
    77Requires PHP: 7.4
    8 Stable tag: 2.1.2
     8Stable tag: 2.1.3
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    118118[Sidcraft Builder Pro](https://canvasly.pro/price.html#lite-vs-pro) is a separate add-on that adds Theme Builder, popups, display conditions, dynamic tags, Loop Grid and Loop Carousel, 70+ extra units, WooCommerce builder units, hosted payments (Stripe, PayPal, Square, Authorize.Net, Razorpay, Mollie) with Payment Forms, form actions and submissions, custom fonts and icons, custom code, editor notes and an AI assistant with an MCP server. Pro's Login & Register and Payment Form units also include the "Require Cloudflare Turnstile" option.
    119119
    120 Every install also serves a read-only MCP endpoint at `/wp-json/sidcraft-page-builder/v1/mcp`, so AI agents such as Claude Desktop, Cursor and VS Code can read the site, the builder guide, the document schema and pages after signing in with a WordPress application password. Writing pages, templates, design tokens, media, menus, components and store data needs Sidcraft Builder Pro 2.1.2 and its own MCP endpoint.
     120Every install also serves a read-only MCP endpoint at `/wp-json/sidcraft-page-builder/v1/mcp`, so AI agents such as Claude Desktop, Cursor and VS Code can read the site, the builder guide, the document schema and pages after signing in with a WordPress application password. Writing pages, templates, design tokens, media, menus, components and store data needs Sidcraft Builder Pro 2.1.3 and its own MCP endpoint.
    121121
    122122The full unit list and user guide are at [canvasly.pro](https://canvasly.pro/blocks.html). For third-party services used by optional features, see "External services" below.
    … …  
    351351
    352352== Changelog ==
     353
     354= 2.1.3 =
     355* Fixed: PHP warnings from Text, Button, Icon Box, Divider and Icon List units when a saved layout predates a newer setting.
     356* Fixed: "conditional query tag called before the query" notices from early display-rule and maintenance checks.
     357* Fixed: the "translation loading too early" notice by registering bundled translations after setup.
     358* Fixed: the page fallback must-use plugin no longer checks query tags before the main query.
    353359
    354360= 2.1.2 =
  • sidcraft-page-builder/trunk/sidcraft-page-builder.php

    r3757230 r3757542  
    33 * Plugin Name: Sidcraft Page Builder
    44 * Description: A lightweight, independent visual page builder for WordPress.
    5  * Version: 2.1.2
     5 * Version: 2.1.3
    66 * Requires at least: 6.9
    77 * Requires PHP: 7.4
    … …  
    5454}
    5555if ( ! defined( 'SIDCRAFT_PAGE_BUILDER_VERSION' ) ) {
    56         define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.2' );
     56        define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.3' );
    5757}
    5858
    … …  
    319319
    320320if ( ! defined( 'SIDCRAFT_PAGE_BUILDER_VERSION' ) ) {
    321         define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.2' );
     321        define( 'SIDCRAFT_PAGE_BUILDER_VERSION', '2.1.3' );
    322322}
    323323if ( ! defined( 'SIDCRAFT_PAGE_BUILDER_FILE' ) ) {
    … …  
    347347        require_once $sidcraft_page_builder_controls_file;
    348348}
     349/**
     350 * Register the bundled translations after setup. Registering earlier makes
     351 * WordPress 6.7+ try to load them before `init` when a label is translated
     352 * during plugin load, which logs a "translation loading too early" notice.
     353 *
     354 * @return void
     355 */
     356function sidcraft_page_builder_load_textdomain() {
     357        load_plugin_textdomain( // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- Bundled translations in /languages.
     358                'sidcraft-page-builder',
     359                false,
     360                dirname( plugin_basename( __FILE__ ) ) . '/languages'
     361        );
     362}
     363add_action( 'after_setup_theme', 'sidcraft_page_builder_load_textdomain', 1 );
    349364\SidcraftPageBuilder\Bootstrap\Plugin::instance();
    350365register_activation_hook( __FILE__, array( '\SidcraftPageBuilder\Bootstrap\Plugin', 'activate' ) );
Note: See TracChangeset for help on using the changeset viewer.