Пример #1
0
 /**
  * DEFINE shortcode content
  *
  * @param array|null $atts
  * @param array|null $content
  *
  * @return string
  */
 public function element_shortcode($atts = null, $content = null)
 {
     $document = JFactory::getDocument();
     $document->addStyleSheet(JSNPB_ELEMENT_URL . '/tab/assets/css/tab.css', 'text/css');
     $arr_params = JSNPagebuilderHelpersShortcode::shortcodeAtts($this->config['params'], $atts);
     extract($arr_params);
     $initial_open = intval($initial_open);
     $tab_position = $tab_position;
     $random_id = JSNPagebuilderHelpersShortcode::generateRandomString();
     $tab_navigator = array();
     $tab_navigator[] = '<ul class="nav nav-tabs">';
     // extract icons of tab items
     $sub_sc_data = JSNPagebuilderHelpersShortcode::extractSubShortcode($content);
     $sub_sc_data = $sub_sc_data[$this->config['has_subshortcode']];
     $items_data = array('icons' => array(), 'heading' => array());
     foreach ($sub_sc_data as $idx => $shortcode) {
         $extract_params = JSNPagebuilderHelpersShortcode::shortcodeParseAtts($shortcode);
         $items_data['icons'][] = !empty($extract_params['icon']) ? "<i class='{$extract_params['icon']}'></i>&nbsp;" : '';
         $items_data['heading'][] = isset($extract_params['heading']) ? $extract_params['heading'] : '';
     }
     $sub_shortcode = empty($content) ? JSNPagebuilderHelpersShortcode::removeAutop($content) : JSNPagebuilderHelpersBuilder::generateShortCode($content, false, 'frontend', true);
     $items = explode('<!--seperate-->', $sub_shortcode);
     $items = array_filter($items);
     $initial_open = $initial_open > count($items) ? 1 : $initial_open;
     if ($fade_effect == 'yes') {
         $fade_effect = 'fade in';
     } else {
         $fade_effect = '';
     }
     foreach ($items as $idx => $item) {
         $active = $idx + 1 == $initial_open ? 'active' : '';
         $item = str_replace('{index}', $random_id . '_' . $idx, $item);
         $item = str_replace('{active}', $active, $item);
         $item = str_replace('{fade_effect}', $fade_effect, $item);
         $items[$idx] = $item;
         $active_li = $idx + 1 == $initial_open ? "class='active'" : '';
         $href = "#pane_" . $random_id . '_' . $idx;
         $tab_navigator[] = "<li {$active_li}><a href='{$href}' data-toggle='tab'>{$items_data['icons'][$idx]}{$items_data['heading'][$idx]}</a></li>";
     }
     $sub_shortcode = implode('', $items);
     $tab_content = "<div class='tab-content'>{$sub_shortcode}</div>";
     // update min-height of each tab content in case tap position is left/right
     if (in_array($tab_position, array('left', 'right'))) {
         $min_height = 36 * count($items);
         $tab_content = str_replace('STYLE', "style='min-height: {$min_height}px'", $tab_content);
     }
     $tab_navigator[] = '</ul>';
     $tab_positions = array('top' => '', 'left' => 'tabs-left', 'right' => 'tabs-right', 'bottom' => 'tabs-below');
     $extra_class = $tab_positions[$tab_position];
     if ($tab_position == 'bottom') {
         $tab_content .= implode('', $tab_navigator);
     } else {
         $tab_content = implode('', $tab_navigator) . $tab_content;
     }
     $html_element = "<div class='tabbable {$extra_class}' id='tab_{ID}'>{$tab_content}</div>";
     $html_element = str_replace('{ID}', "{$random_id}", $html_element);
     return $this->element_wrapper($html_element, $arr_params);
 }
Пример #2
0
 /**
  * DEFINE shortcode content
  *
  * @param type $atts
  * @param type $content
  * 
  * @return string
  */
 public function element_shortcode($atts = null, $content = null)
 {
     $document = JFactory::getDocument();
     $document->addStyleSheet(JSNPB_ELEMENT_URL . '/accordion/assets/css/accordion.css', 'text/css');
     $arr_params = JSNPagebuilderHelpersShortcode::shortcodeAtts($this->config['params'], $atts);
     $initial_open = intval($arr_params['initial_open']);
     $multi_open = $arr_params['multi_open'];
     $filter = $arr_params['filter'];
     $random_id = JSNPagebuilderHelpersShortcode::generateRandomString();
     $script = "";
     $scriptFilter = "";
     if ($multi_open == "yes") {
         $script .= "<script type='text/javascript'>( function (\$) {\n\t\t\t\t\t\$( document ).ready( function ()\n\t\t\t\t\t{\n\t\t\t\t\t\t\$( '#accordion_{$random_id} .panel-title a' ).click( function(e ){\n\t\t\t\t\t\t\tvar collapse_item = \$( '#accordion_{$random_id} '+this.hash )\n\t\t\t\t\t\t\tcollapse_item.collapse( 'toggle' )\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} )( JoomlaShine.jQuery );</script>";
     } else {
         // some case the collapse doesn't work, need this code
         $script .= "<script type='text/javascript'>( function (\$) {\n\t\t\t\t\t\$( document ).ready( function ()\n\t\t\t\t\t{\n\t\t\t\t\t\t\$( '#accordion_{$random_id} .panel-collapse' ).click( function(e ){\n\t\t\t\t\t\t\tvar collapse_item = \$( '#accordion_{$random_id} '+this.hash )\n\t\t\t\t\t\t\t\$( '#accordion_{$random_id} .panel-body' ).each(function(){\n\t\t\t\t\t\t\t\t\$( this ).addClass( 'panel-collapse' );\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcollapse_item.removeClass( 'panel-collapse' );\n\t\t\t\t\t\t\tcollapse_item.attr( 'style', '' );\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} )( JoomlaShine.jQuery );</script>";
     }
     $sub_shortcode = empty($content) ? JSNPagebuilderHelpersShortcode::removeAutop($content) : JSNPagebuilderHelpersBuilder::generateShortCode($content, false, 'frontend', true);
     $items = explode("<!--seperate-->", $sub_shortcode);
     // remove empty element
     $items = array_filter($items);
     $initial_open = $initial_open > count($items) ? 1 : $initial_open;
     foreach ($items as $idx => $item) {
         $open = $idx + 1 == $initial_open ? "in" : "";
         $item = str_replace("{index}", $random_id . $idx, $item);
         $item = str_replace("{show_hide}", $open, $item);
         $items[$idx] = $item;
     }
     $sub_shortcode = implode("", $items);
     $filter_html = "";
     if ($filter == "yes") {
         $sub_sc_data = JSNPagebuilderHelpersShortcode::extractSubShortcode($content);
         $sub_sc_data = $sub_sc_data[$this->config['has_subshortcode']];
         $tags = array();
         $tags[] = 'all';
         foreach ($sub_sc_data as $shortcode) {
             $extract_params = JSNPagebuilderHelpersShortcode::shortcodeParseAtts($shortcode);
             $tags[] = isset($extract_params["tag"]) ? $extract_params["tag"] : '';
         }
         $tags = array_filter($tags);
         if (count($tags) > 1) {
             $tags = implode(",", $tags);
             $tags = explode(",", $tags);
             $tags = array_unique($tags);
             $filter_html = "<ul id='filter_{$random_id}' class='nav nav-pills elementFilter' style='margin-bottom:2px;'>";
             foreach ($tags as $idx => $value) {
                 $active = $idx == 0 ? "active" : "";
                 $filter_html .= "<li class='{$active}'><a href='#' class='" . str_replace(" ", "_", $value) . "'>" . ucfirst($value) . "</a></li>";
             }
             $filter_html .= "</ul>";
             // remove "All" tag
             array_shift($tags);
             $inner_tags = implode(',', $tags);
             $scriptFilter .= "<script type='text/javascript'>( function (\$) {\n\t\t\t\t\$( document ).ready( function ()\n\t\t\t\t\t{\n\t\t\t\t\t\twindow.parent.jQuery.noConflict()( '#jsn_view_modal').contents().find( 'data-tag' ).text( '{$inner_tags}')\n\t\t\t\t\t\tvar parent_criteria = '#filter_{$random_id}'\n\t\t\t\t\t\tvar clientsClone = \$( '#accordion_{$random_id}' );\n\t\t\t\t\t\tvar tag_to_filter = 'div';\n\t\t\t\t\t\tvar class_to_filter = '.panel-default';\n\t\n\t\t\t\t\t\t\$( parent_criteria + ' a' ).click( function(e ) {\n\t\t\t\t\t\t\t// stop running filter\n\t\t\t\t\t\t\t\$( class_to_filter ).each(function(){\n\t\t\t\t\t\t\t\t\$( this ).stop( true )\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\t\t\t//active clicked criteria\n\t\t\t\t\t\t\t\$( parent_criteria + ' li' ).removeClass( 'active' );\n\t\t\t\t\t\t\t\$( this ).parent().addClass( 'active' );\n\t\n\t\t\t\t\t\t\tvar filterData = \$( this ).attr( 'class' );\n\t\t\t\t\t\t\tvar filters;\n\t\t\t\t\t\t\tif( filterData == 'all' ){\n\t\t\t\t\t\t\t\tfilters = clientsClone.find( tag_to_filter );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfilters = clientsClone.find( tag_to_filter + '[data-tag~='+ filterData +']' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclientsClone.find( class_to_filter ).each(function(){\n\t\t\t\t\t\t\t\t\$( this ).fadeOut();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfilters.each(function(){\n\t\t\t\t\t\t\t\t\$( this ).fadeIn();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} )( jQuery )</script>";
         }
     }
     $html = '<div class="panel-group" id="accordion_{ID}">' . $sub_shortcode . '</div>';
     $html = str_replace("{ID}", "{$random_id}", $html);
     $html .= $script . $scriptFilter;
     return $this->element_wrapper($filter_html . $html, $arr_params);
 }
Пример #3
0
    /**
     * Method to print element settings
     */
    public function settings()
    {
        $js = '
			var JSNPbParams	= {pbstrings : {}};
			JSNPbParams.rootUrl = \'' . JUri::root() . '\';
			JSNPbParams.pbstrings.NO_ITEM_FOUND = \'' . JText::_('No %s found') . '\';
			JSNPbParams.pbstrings.SINGLE_ENTRY = \'' . JText::_('Single %s') . '\';
			JSNPbParams.pbstrings.SETTINGS = \'' . JText::_('Settings') . '\';
			JSNPbParams.pbstrings.INVALID_LINK = \'' . JText::_('The link is invalid') . '\';
			JSNPbParams.pbstrings.COPY = \'' . JText::_('copy') . '\';
			JSNPbParams.pbstrings.EMPTY = \'' . JText::_('(Untitled)') . '\';
			JSNPbParams.pbstrings.SELECT_DES_MARKER = \'' . JText::_('Select Destination Marker') . '\';
			JSNPbParams.pbstrings.ALERT_DELETE_ROW = \'' . JText::_('Are you sure you want to delete the whole row including all elements it contains?') . '\';
			JSNPbParams.pbstrings.ALERT_DELETE_COLUMN = \'' . JText::_('Are you sure you want to delete the whole column including all elements it contains?') . '\';
			JSNPbParams.pbstrings.ALERT_DELETE_ELEMENT = \'' . JText::_('Are you sure you want to delete the element?') . '\';
		';
        JSNPagebuilderHelpersFunctions::print_asset_tag($js, 'js', null, true);
        $shortcode = JRequest::getString('shortcode');
        $params = isset($_POST['params']) ? $_POST['params'] : '';
        // TODO: move under assets inside shortcode
        // Add common js library for elements.
        JSNPagebuilderHelpersFunctions::print_asset_tag(JSNPB_FRAMEWORK_ASSETS . '/3rd-party/jquery-tipsy/jquery.tipsy.js', 'js');
        JSNPagebuilderHelpersFunctions::print_asset_tag(JSNPB_FRAMEWORK_ASSETS . '/3rd-party/jquery-tipsy/tipsy.css', 'css');
        JSNPagebuilderHelpersFunctions::print_asset_tag(JSNPB_FRAMEWORK_ASSETS . '/joomlashine/css/jsn-general.css', 'css');
        // for accordion_item, buttonbar_item,
        JSNPagebuilderHelpersFunctions::print_asset_tag(JSNPB_FRAMEWORK_ASSETS . '/joomlashine/css/jsn-fonticomoon.css', 'css');
        // for accordion_item, buttonbar_item,
        $extract_params = '';
        $shortcodeHelper = new JSNPagebuilderHelpersShortcode();
        $data = array();
        if (!empty($shortcode)) {
            // elements
            $class = $shortcodeHelper->getShortcodeClass($shortcode);
            if (class_exists($class)) {
                // Get all regitered element shortcodes
                global $JSNPbElements;
                $elements = $JSNPbElements->getElements();
                $instance = isset($elements[strtolower($class)]) ? $elements[strtolower($class)] : null;
                // Init and register new instance if it not
                if (!is_object($instance)) {
                    $instance = new $class();
                }
                if (!empty($params)) {
                    $params = stripslashes($params);
                    $params = urldecode($params);
                } else {
                    $params = $instance->config['shortcode_structure'];
                }
                // Add neccessary assets for the shortcode
                $instance->backend_element_assets();
                if (!empty($params)) {
                    $extract_params = JSNPagebuilderHelpersShortcode::extractParams($params, $shortcode);
                    // if have sub-shortcode, get content
                    if (!empty($instance->config['has_subshortcode'])) {
                        $sub_sc_data = JSNPagebuilderHelpersShortcode::extractSubShortcode($params, true);
                        $extract_params['sub_sc_content'] = $sub_sc_data;
                    }
                    // MODIFY $instance->items
                    $shortcodeHelper->generateShortcodeParams($instance->items, NULL, $extract_params, TRUE);
                    // recall this to re-extract params
                    $instance->shortcode_data();
                }
                // get Modal setting box
                $settings = $instance->items;
                $shortcodeAterfix = substr($shortcode, -5);
                $showPreview = true;
                if ($shortcodeAterfix == '_item') {
                    $showPreview = false;
                }
                if ($shortcode == 'pb_row') {
                    $showPreview = false;
                }
                $modalContent = $shortcodeHelper->getShortcodeModalSettings($settings, $shortcode, $extract_params);
            }
        }
        $html[] = '';
        if ($showPreview) {
            $html[] = '<div id="jsn_column1" class="pull-left">';
        }
        $html[] = '<div class="jsn-bootstrap" id="settings-form-container">
			<div id="modalOptions" class="form-horizontal">
				' . $modalContent . '
				<div id="modalAction"></div>
			</div>
			<textarea class="hidden" id="shortcode_content" name="shortcode_content">' . $params . '</textarea>
			<textarea class="hidden" id="pb_share_data"  ></textarea>
			<textarea class="hidden" id="pb_merge_data"  ></textarea>
			<textarea class="hidden" id="pb_extract_data"  ></textarea>
			<input type="hidden" id="pb_previewing" value="0" />
			<input id="shortcode_name" name="shortcode_name" type="hidden" value="' . $shortcode . '" />
		</div>';
        if ($showPreview) {
            $html[] = '</div>';
        }
        if ($showPreview) {
            $html[] = '<div id="jsn_column2" class="pull-left">
			<div class="preview_title">' . JText::_("Preview") . '</div>
			<div id="framePreview" class="preview_border">
				<div id="iframeLoading" class="iframe_loading_border"><div class="iframe_loading_image"><img src="components/com_pagebuilder/assets/images/icons-32/ajax-loader.gif"></div></div>
				<div class="control-group">
					<div id="preview_container">
						<iframe id="shortcode_preview_iframe" scrolling="auto" name="shortcode_preview_iframe" class="shortcode_preview_iframe" width="100%"></iframe>
						<div id="preview"></div>
					</div>
				</div>
			</div>
		</div>';
        }
        $html[] = '<div class="clearfix"></div>';
        echo implode('', $html);
        exit;
    }
Пример #4
0
    public function display($tpl = null)
    {
        JSNHtmlAsset::addScript(JSNPB_ADMIN_URL . '/assets/js/shortcodesetting/settings-handler.js');
        $js = '
			var JSNPbParams	= {pbstrings : {}};
			JSNPbParams.rootUrl = \'' . JUri::root() . '\';
			JSNPbParams.pbstrings.NO_ITEM_FOUND = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_NO_ITEM_FOUND') . '\';
			JSNPbParams.pbstrings.SINGLE_ENTRY = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_SINGLE_ENTRY') . '\';
			JSNPbParams.pbstrings.SETTINGS = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_SETTINGS') . '\';
			JSNPbParams.pbstrings.INVALID_LINK = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_THE_LINK_IS_INVALID') . '\';
			JSNPbParams.pbstrings.COPY = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_COPY') . '\';
			JSNPbParams.pbstrings.EMPTY = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_EMPTY') . '\';
			JSNPbParams.pbstrings.SELECT_DES_MARKER = \'' . JText::_('JSN_PAGEBUILDER_CONTROLLERS_SHORTCODE_SELECT_DES_MARKER') . '\';
		';
        JSNHtmlAsset::addInlineScript($js);
        $shortcode = JRequest::getString('shortcode');
        $params = '';
        // Get params from session then clear the session
        if (isset($_SESSION[JSNPB_SHORTCODE_SESSION_NAME][$shortcode]['params'])) {
            $params = $_SESSION[JSNPB_SHORTCODE_SESSION_NAME][$shortcode]['params'];
            $params = json_decode($params);
            $_SESSION[JSNPB_SHORTCODE_SESSION_NAME][$shortcode]['params'] = '';
        }
        // TODO: move under assets inside shortcode
        // Add common js library for elements.
        JSNHtmlAsset::addScript(JSNPB_FRAMEWORK_ASSETS . '/3rd-party/jquery-tipsy/jquery.tipsy.js');
        JSNHtmlAsset::addStyle(JSNPB_FRAMEWORK_ASSETS . '/3rd-party/jquery-tipsy/tipsy.css');
        JSNHtmlAsset::addStyle(JSNPB_FRAMEWORK_ASSETS . '/joomlashine/css/jsn-general.css');
        // for accordion_item, buttonbar_item,
        JSNHtmlAsset::addStyle(JSNPB_FRAMEWORK_ASSETS . '/joomlashine/css/jsn-fonticomoon.css');
        // for accordion_item, buttonbar_item,
        $extract_params = '';
        $shortcodeHelper = new JSNPagebuilderHelpersShortcode();
        $data = array();
        if (!empty($shortcode)) {
            // elements
            $class = $shortcodeHelper->getShortcodeClass($shortcode);
            if (class_exists($class)) {
                // Get all regitered element shortcodes
                global $JSNPbElements;
                $elements = $JSNPbElements->getElements();
                $instance = isset($elements[strtolower($class)]) ? $elements[strtolower($class)] : null;
                // Init and register new instance if it not
                if (!is_object($instance)) {
                    $instance = new $class();
                }
                if (!empty($params)) {
                    $params = stripslashes($params);
                    $params = urldecode($params);
                } else {
                    $params = $instance->config['shortcode_structure'];
                }
                // Add neccessary assets for the shortcode
                $instance->backend_element_assets();
                // process require_js at backend setting
                if (isset($instance->config['exception']['require_js'])) {
                    $requires = $instance->config['exception']['require_js'];
                    foreach ($requires as $i => $require) {
                        if (file_exists(JSNPB_ASSETS_PATH . $require)) {
                            JSNHtmlAsset::addScript(JSNPB_ASSETS_PATH . $require);
                        }
                    }
                }
                if (!empty($params)) {
                    $extract_params = JSNPagebuilderHelpersShortcode::extractParams($params, $shortcode);
                    // if have sub-shortcode, get content
                    if (!empty($instance->config['has_subshortcode'])) {
                        $sub_sc_data = JSNPagebuilderHelpersShortcode::extractSubShortcode($params, true);
                        $extract_params['sub_sc_content'] = $sub_sc_data;
                    }
                    // MODIFY $instance->items
                    $shortcodeHelper->generateShortcodeParams($instance->items, NULL, $extract_params, TRUE);
                    // recall this to re-extract params
                    $instance->shortcode_data();
                }
                // get Modal setting box
                $settings = $instance->items;
                $shortcodeAterfix = substr($shortcode, -5);
                $showPreview = true;
                if ($shortcodeAterfix == '_item') {
                    $showPreview = false;
                }
                if ($shortcode == 'pb_row') {
                    $showPreview = false;
                }
                $modalContent = $shortcodeHelper->getShortcodeModalSettings($settings, $shortcode, $extract_params);
                $this->assign('content', $modalContent);
                $this->assign('params', $params);
                $this->assign('shortcodeName', $shortcode);
                $this->assign('showPreview', $showPreview);
            }
        }
        return parent::display();
    }