/** * 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> " : ''; $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); }
/** * 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); }
/** * 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; }
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(); }