first commit
This commit is contained in:
264
plugins/editors-xtd/pagebuilderckbutton/pagebuilderckbutton.php
Normal file
264
plugins/editors-xtd/pagebuilderckbutton/pagebuilderckbutton.php
Normal file
@@ -0,0 +1,264 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2015 Cédric KEIFLIN alias ced1870
|
||||
* https://www.joomlack.fr
|
||||
* @license GNU/GPL
|
||||
* */
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
/**
|
||||
* Editor Pagebuilderckbutton buton
|
||||
*
|
||||
*/
|
||||
class PlgButtonPagebuilderckbutton extends JPlugin
|
||||
{
|
||||
/**
|
||||
* Load the language file on instantiation.
|
||||
*
|
||||
* @var boolean
|
||||
* @since 3.1
|
||||
*/
|
||||
protected $autoloadLanguage = true;
|
||||
|
||||
/**
|
||||
* Pagebuilderckbutton button
|
||||
*
|
||||
* @param string $name The name of the button to add
|
||||
*
|
||||
*/
|
||||
public function onDisplay($name)
|
||||
{
|
||||
// loads the language files from the component frontend
|
||||
$lang = JFactory::getLanguage();
|
||||
$lang->load('com_pagebuilderck', JPATH_SITE . '/components/com_pagebuilderck', $lang->getTag(), false);
|
||||
|
||||
// load CKBox from the component
|
||||
include_once(JPATH_SITE . '/administrator/components/com_pagebuilderck/helpers/pagebuilderck.php');
|
||||
PagebuilderckHelper::loadCkbox();
|
||||
|
||||
// instantiate variables
|
||||
$doc = JFactory::getDocument();
|
||||
// $getContent = $this->_subject->getContent($name);
|
||||
|
||||
// get the list of pages
|
||||
$pages = json_encode($this->getPages());
|
||||
|
||||
// construct the JS code to manage the operations
|
||||
$js = "
|
||||
/* Function called on button click */
|
||||
function insertPagebuilderckbutton(editor) {
|
||||
pages = " . $pages . ";
|
||||
|
||||
// event.preventDefault();
|
||||
if (typeof(tinyMCE) == 'undefined') {
|
||||
var content = document.getElementById(editor).value;
|
||||
} else {
|
||||
var editor = tinyMCE.activeEditor;
|
||||
var content = editor.getContent({format: 'text'});
|
||||
}
|
||||
var re = /{pagebuilderck\s+(.*?)\s*}/ig;
|
||||
matches = content.match(re);
|
||||
createPagebuilderckPopup();
|
||||
|
||||
var PBCKmodal = jQuery('#pagebuilderckButtonModal');
|
||||
PBCKmodal.empty().append('<div class=\"inner\" />');
|
||||
PBCKmodalBody = PBCKmodal.find('> .inner').css('padding', '10px');
|
||||
PBCKmodalBody.append('<h4 class=pagebuilderckButtonModalTitle >" . JText::_('CK_NEW_TAG', true) . "</h4>');
|
||||
PBCKmodalBody.append('<div class=pagebuilderckButtonModalDesc >" . JText::_('CK_INSERT_NEW_DESC', true) . "</div>');
|
||||
PBCKmodalBody.append('<div class=\"clearfix\">'
|
||||
+'<a class=\"btn btn-primary\" onclick=\"loadPagebuilderckModalEdition(0)\" title=\"" . JText::_('CK_CREATE_NEW_PAGE_DESC', true) . "\"><i class=\"icon icon-new\"></i>" . JText::_('CK_CREATE_NEW_PAGE', true) . "</a>'
|
||||
+' '
|
||||
+'<a class=\"btn btn-primary\" onclick=\"loadPagebuilderckModalInsertChoice()\" title=\"" . JText::_('CK_INSERT_EXISTING_PAGE_DESC', true) . "\"><i class=\"icon icon-plus-2\"></i>" . JText::_('CK_INSERT_EXISTING_PAGE', true) . "</a>'
|
||||
+'</div>');
|
||||
if (matches && matches.length) {
|
||||
PBCKmodalBody.append('<hr style=\"margin:10px 0;\"/>');
|
||||
PBCKmodalBody.append('<h4 class=pagebuilderckButtonModalTitle >" . JText::_('CK_EXISTING_TAGS_FOUND', true) . "</h4>');
|
||||
PBCKmodalBody.append('<div class=pagebuilderckButtonModalDesc >" . JText::_('CK_EXISTING_TAGS_FOUND_DESC', true) . "</div>');
|
||||
for (var i = 0; i < matches.length; i++) {
|
||||
match = matches[i];
|
||||
var id = match.replace('pagebuilderck', '')
|
||||
.replace('{', '')
|
||||
.replace('}', '')
|
||||
.trim();
|
||||
addPagebuilderckEditionChoice(id);
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
// jInsertEditorText('<hr id=\"system-readmore\" />', editor);
|
||||
}
|
||||
}
|
||||
|
||||
/* Called from the modal pages list, to insert the tag from the ID */
|
||||
function insertPagebuilderckTag(id) {
|
||||
// jInsertEditorText('{pagebuilderck '+id+'}', '" . $name . "');
|
||||
tinyMCE.activeEditor.execCommand('mceInsertContent', false, '{pagebuilderck '+id+'}');
|
||||
CKBox.close('#CKBoxPagebuilderckButtonModal .ckboxmodal-footer');
|
||||
}
|
||||
|
||||
/* Create the popup */
|
||||
function createPagebuilderckPopup() {
|
||||
removeFooterSaveButton();
|
||||
if (! document.getElementById('pagebuilderckButtonModal')) {
|
||||
var popup = document.createElement('div');
|
||||
popup.id = 'pagebuilderckButtonModal';
|
||||
popup.className = 'pagebuilderckButtonModal';
|
||||
popup.style.height = '100%';
|
||||
document.body.appendChild(popup);
|
||||
popup.innerHTML = ''
|
||||
+'<h3>" . JText::_('CK_EDIT', true) . "</h3>'
|
||||
+'';
|
||||
}
|
||||
var PBCKmodal = jQuery('#pagebuilderckButtonModal');
|
||||
|
||||
CKBox.open({handler: 'inline', content: 'pagebuilderckButtonModal', style: {padding: '10px'}, id: 'CKBoxPagebuilderckButtonModal' });
|
||||
}
|
||||
|
||||
/* Add a line for each existing page to edit */
|
||||
function addPagebuilderckEditionChoice(id) {
|
||||
pages = " . $pages . ";
|
||||
var PBCKmodal = jQuery('#pagebuilderckButtonModal');
|
||||
var pagetitle = (typeof(pages[id]) != 'undefined') ? '" . JText::_('CK_TITLE', true) . ": <span class=\"label cktitle\">' + pages[id]['title'] + '</span>' : '';
|
||||
PBCKmodal.append('<div class=pagebuilderckButtonModalChoice><span class=\"\">" . JText::_('CK_ID', true) . "</span> : <span class=\"label label-info ckid\">'+id+'</span>' + pagetitle + '<a class=\"btn ckedit\" data-id='+id+' onclick=\"loadPagebuilderckModalEdition('+id+')\" ><i class=\"icon icon-edit\"></i>" . JText::_('CK_EDIT', true) . "</a></div>');
|
||||
}
|
||||
|
||||
/* Load the list of pages to select the one to insert */
|
||||
function loadPagebuilderckModalInsertChoice() {
|
||||
var PBCKmodal = jQuery('#pagebuilderckButtonModal');
|
||||
PBCKmodal.empty();
|
||||
PBCKmodal.prepend('<iframe class=\"iframe\" src=\"".JUri::base(true)."/index.php?option=com_pagebuilderck&view=pages&layout=modal&function=insertPagebuilderckTag&tmpl=component\"></iframe>');
|
||||
}
|
||||
|
||||
/* Load the edition area for the selected page */
|
||||
function loadPagebuilderckModalEdition(id) {
|
||||
var PBCKmodal = jQuery('#pagebuilderckButtonModal');
|
||||
removeFooterSaveButton();
|
||||
addFooterSaveButton();
|
||||
|
||||
PBCKmodal.empty();
|
||||
PBCKmodal.prepend('<iframe class=\"iframe\" src=\"".JUri::base(true)."/index.php?option=com_pagebuilderck&view=page&layout=modal&id='+id+'&tmpl=component\"></iframe>');
|
||||
if (id == 0) {
|
||||
addInsertNewPageButton();
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the insert new page button */
|
||||
function addInsertNewPageButton() {
|
||||
jQuery('#pagebuilderckButtonModal').find('iframe').on('load', function() {
|
||||
var idval = jQuery('#pagebuilderckButtonModal').find('iframe').contents().find('input[name=\"id\"]').val();
|
||||
if (idval != '') {
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-footer').append('<button class=\"ckboxmodal-button btn btn-success saveck\" data-dismiss=\"modal\" aria-hidden=\"true\" onclick=\"jQuery(\'iframe\', jQuery(jQuery(this).parents(\'.ckboxmodal\')[0])).contents().find(\'#applyBtn\').click();insertPagebuilderckTag(' + idval + ')\"><i class=\"icon icon-checkmark\"></i>" . JText::_('CK_INSERT_PAGE_AND_CLOSE', true) . "</button>');
|
||||
}
|
||||
// add automatically the title for the page
|
||||
if (jQuery('#jform_title').length && jQuery('#jform_title').val()) {
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-body iframe').contents().find('input[name=\"title\"]').val(jQuery('#jform_title').val());
|
||||
}
|
||||
});
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-footer .savecloseck').hide();
|
||||
}
|
||||
|
||||
/* Add the save button */
|
||||
function addFooterSaveButton() {
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-footer').append('<button class=\"ckboxmodal-button btn btn-success saveck savecloseck\" data-dismiss=\"modal\" aria-hidden=\"true\" onclick=\"jQuery(\'iframe\', jQuery(jQuery(this).parents(\'.ckboxmodal\')[0])).contents().find(\'#saveBtn\').click();CKBox.close(\'#CKBoxPagebuilderckButtonModal .ckboxmodal-footer\', \'1\');\"><i class=\"icon icon-checkmark\"></i> " . JText::_('CK_SAVE_CLOSE', true) . "</button>');
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-footer').append('<button class=\"ckboxmodal-button btn btn-success saveck\" aria-hidden=\"true\" onclick=\"jQuery(\'iframe\', jQuery(jQuery(this).parents(\'.ckboxmodal\')[0])).contents().find(\'#applyBtn\').click();\"><i class=\"icon icon-checkmark\"></i> " . JText::_('CK_APPLY', true) . "</button>');
|
||||
}
|
||||
|
||||
/* Remove the save button (only needed on edition mode) */
|
||||
function removeFooterSaveButton() {
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-footer .saveck').remove();
|
||||
jQuery('#CKBoxPagebuilderckButtonModal').find('.ckboxmodal-footer .applyck').remove();
|
||||
}
|
||||
";
|
||||
|
||||
$css = '/** fullscreen mode for the Page Builder CK modal **/
|
||||
.pagebuilderckButtonModalFullscreen {
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
right: 0 !important;
|
||||
margin: 0 !important;
|
||||
width: 100% !important;
|
||||
box-sizing: border-box;
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalFullscreen .ckboxmodal-body {
|
||||
max-height: 100% !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalFullscreen iframe {
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalDesc {
|
||||
padding: 0 0 10px 0;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalChoice {
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalChoice .label {
|
||||
margin: 0 7px;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalChoice > span {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalChoice > span.ckid {
|
||||
min-width: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalChoice > span.cktitle {
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModalChoice > span.ckedit {
|
||||
|
||||
}
|
||||
|
||||
.pagebuilderckButtonModal .ckboxmodal-body iframe {
|
||||
border: 0 none !important;
|
||||
max-height: none;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#CKBoxPagebuilderckButtonModal .icon {
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
';
|
||||
|
||||
$doc->addScriptDeclaration($js);
|
||||
$doc->addStyleDeclaration($css);
|
||||
$button = new JObject;
|
||||
$button->modal = false;
|
||||
$button->class = 'btn hasTooltip';
|
||||
$button->onclick = 'insertPagebuilderckbutton(\'' . $name . '\');return false;';
|
||||
$button->text = JText::_('PLG_PAGEBUILDERCKBUTTON');
|
||||
$button->name = 'grid';
|
||||
$button->title = JText::_('PLG_PAGEBUILDERCKBUTTON_DESC');
|
||||
|
||||
$button->link = '#';
|
||||
|
||||
return $button;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the list of published pages with names
|
||||
*
|
||||
* Return Array - The list of pages
|
||||
*/
|
||||
public function getPages() {
|
||||
$db = JFactory::getDbo();
|
||||
$q = "SELECT title, id FROM #__pagebuilderck_pages WHERE state=1";
|
||||
$db->setQuery($q);
|
||||
$db->execute();
|
||||
$pages = $db->loadObjectlist('id');
|
||||
|
||||
return $pages;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension version="3.0" type="plugin" group="editors-xtd" method="upgrade">
|
||||
<name>Button - Pagebuilder CK</name>
|
||||
<author>Cédric KEIFLIN</author>
|
||||
<creationDate>August 2015</creationDate>
|
||||
<copyright>Cédric KEIFLIN</copyright>
|
||||
<license>https://www.gnu.org/licenses/gpl.html</license>
|
||||
<authorEmail>ced1870@gmail.com</authorEmail>
|
||||
<authorUrl>https://www.joomlack.fr</authorUrl>
|
||||
<version>3.0.0</version>
|
||||
<description>Button - Pagebuilder CK. Manage the pages into the editor.</description>
|
||||
<files>
|
||||
<filename plugin="pagebuilderckbutton">pagebuilderckbutton.php</filename>
|
||||
</files>
|
||||
</extension>
|
||||
Reference in New Issue
Block a user