You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

328 lines
14 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
use Tiki\File\SlideshowHelper;
function wikiplugin_slideshow_info()
{
return [
'name' => tra('Slideshow'),
'documentation' => 'Slideshow',
'description' => tra('Create a slideshow from the content of a wiki page'),
'prefs' => [ 'wikiplugin_slideshow', 'feature_slideshow' ],
'iconname' => 'tv',
'introduced' => 7,
'tags' => [ 'basic' ],
'params' => [
'theme' => [
'required' => false,
'name' => tra('Theme'),
'description' => tra('The theme you want to use for the slideshow, default will be what you choose from
the admin panel under Look and Feel for jQuery UI'),
'filter' => 'text',
'default' => 'black',
'since' => '19.0',
'options' => [
['text' => 'Black: Black background, white text, blue links', 'value' => 'black'],
['text' => 'Blood: Dark gray background, dark text, maroon links', 'value' => 'blood'],
['text' => 'Beige: Beige background, dark text, brown links', 'value' => 'beige'],
['text' => 'League: Gray background, white text, blue links', 'value' => 'league'],
['text' => 'Moon: Navy blue background, blue links', 'value' => 'moon'],
['text' => 'Night: Black background, thick white text, orange links', 'value' => 'night'],
['text' => 'Serif: Cappuccino background, gray text, brown links', 'value' => 'serif'],
['text' => 'Simple: White background, black text, blue links', 'value' => 'simple'],
['text' => 'Sky: Blue background, thin dark text, blue links', 'value' => 'sky'],
['text' => 'Solarized: Cream-colored background, dark green text, blue links', 'value' => 'solarized'],
],
],
'parallaxBackgroundImage' => [
'required' => false,
'name' => tra('Parallax Background Image'),
'description' => tr(
'URL of the background image to use in your slideshow, overrides %0',
'<code>backgroundcolor</code>'
),
'filter' => 'url',
'accepted' => tra('Valid URL'),
'default' => '',
'since' => '19.0',
],
'parallaxBackgroundSize' => [
'required' => false,
'name' => tra('Parallax Background Size'),
'description' => tra('syntax, e.g. "2100px 900px" - currently only pixels are supported (don\'t use % or auto)'),
'default' => '',
'since' => '19.0'
],
'parallaxBackgroundHorizontal' => [
'required' => false,
'name' => tra('Parallax Background Horizontal'),
'description' => tra('Number of pixels to move the parallax background per slide, Calculated automatically unless specified. Set to 0 to disable movement along an axis'),
'default' => null,
'since' => '19.0'
],
'parallaxBackgroundVertical' => [
'required' => false,
'name' => tra('Parallax Background Vertical'),
'description' => '',
'default' => null,
'since' => '19.0'
],
'transition' => [
'required' => false,
'name' => tra('Transition'),
'description' => tra(' Transition style'),
'filter' => 'word',
'default' => 'zoom',
'since' => '19.0',
'options' => [
['text' => 'Zoom', 'value' => 'zoom'],
['text' => 'Fade', 'value' => 'fade'],
['text' => 'Slide', 'value' => 'slide'],
['text' => 'Convex', 'value' => 'convex'],
['text' => 'Concave', 'value' => 'concave'],
['text' => 'off', 'value' => ''],
],
],
'transitionSpeed' => [
'required' => false,
'name' => tra('Transition Speed'),
'description' => tra('Transition Speed'),
'filter' => 'word',
'default' => '',
'since' => '19.0',
'options' => [
['text' => 'Default', 'value' => 'default'],
['text' => 'Fast', 'value' => 'fast'],
['text' => 'Slow', 'value' => 'slow'],
],
],
'backgroundTransition' => [
'required' => false,
'name' => tra('Background Transition'),
'description' => tra('Transition style for full page slide backgrounds'),
'filter' => 'word',
'default' => 'fade',
'since' => '19.0',
'options' => [
['text' => 'None', 'value' => 'none'],
['text' => 'Fade', 'value' => 'fade'],
['text' => 'Slide', 'value' => 'slide'],
['text' => 'Convex', 'value' => 'convex'],
['text' => 'Concave', 'value' => 'concave'],
['text' => 'Zoom', 'value' => 'zoom'],
],
],
'controls' => [
'required' => false,
'name' => tra('Controls'),
'description' => tra('Display presentation control arrows'),
'filter' => 'word',
'default' => 'y',
'since' => '19.0',
'options' => [
['text' => 'True', 'value' => 'y'],
['text' => 'False', 'value' => 'n'],
],
],
'controlsLayout' => [
'required' => false,
'name' => tra('Controls Layout'),
'description' => tra('Determines where controls appear, "edges" or "bottom-right"'),
'filter' => 'word',
'default' => 'bottom-right',
'since' => '19.0',
'options' => [
['text' => 'Bottom-Right', 'value' => 'bottom-right'],
['text' => 'Edges', 'value' => 'edges'],
],
],
'controlsBackArrows' => [
'required' => false,
'name' => tra('Controls Back Arrows'),
'description' => tra('Visibility rule for backwards navigation arrows; "faded", "hidden" or "visible"'),
'filter' => 'word',
'default' => 'faded',
'since' => '19.0',
'options' => [
['text' => 'Faded', 'value' => 'faded'],
['text' => 'Hidden', 'value' => 'hidden'],
['text' => 'Visible', 'value' => 'visible'],
],
],
'progress' => [
'required' => false,
'name' => tra('Progress'),
'description' => tra('Display a presentation progress bar'),
'filter' => 'word',
'default' => 'y',
'since' => '19.0',
'options' => [
['text' => 'True', 'value' => 'y'],
['text' => 'False', 'value' => 'n'],
],
],
'slideNumber' => [
'required' => false,
'name' => tra('Slide Number'),
'description' => tra('Display the page number of the current slide'),
'filter' => 'word',
'default' => 'n',
'since' => '19.0',
'options' => [
['text' => 'True', 'value' => 'y'],
['text' => 'False', 'value' => 'n'],
],
],
'fragments' => [
'required' => false,
'name' => tra('Fragments'),
'description' => tra('Turns fragments on and off globally'),
'filter' => 'word',
'default' => 'y',
'since' => '19.0',
'options' => [
['text' => 'On', 'value' => 'y'],
['text' => 'Off', 'value' => 'n'],
],
],
'fragmentClass' => [
'required' => false,
'name' => tra('Fragment Effects'),
'description' => tra(''),
'filter' => 'word',
'default' => 'grow',
'since' => '19.0',
'options' => [
['text' => 'Grow', 'value' => 'grow'],
['text' => 'Shrink', 'value' => 'shrink'],
['text' => 'Fade-OUT', 'value' => 'fade-out'],
['text' => 'Fade-UP', 'value' => 'fade-up'],
['text' => 'Current-Visible', 'value' => 'current-visible'],
],
],
'fragmentHighlightColor' => [
'required' => false,
'name' => tra('Fragment Highlight Color'),
'description' => tra(''),
'filter' => 'word',
'default' => 'blue',
'since' => '19.0',
'options' => [
['text' => 'None', 'value' => 'none'],
['text' => 'Red', 'value' => 'red'],
['text' => 'Green', 'value' => 'green'],
['text' => 'Blue', 'value' => 'blue']
],
],
'autoSlide' => [
'required' => false,
'name' => tra('Auto Slide'),
'description' => tra('Number of milliseconds between automatically proceeding to the next slide, disabled when set to 0, this value can be overwritten by using a data-autoslide attribute on your slides'),
'filter' => 'digits',
'default' => '0',
'since' => '19.0',
],
'autoSlideStoppable' => [
'required' => false,
'name' => tra('Auto Slide Stoppable'),
'description' => tra('Stop auto-sliding after user input'),
'filter' => 'word',
'default' => 'y',
'since' => '19.0',
'options' => [
['text' => 'On', 'value' => 'y'],
['text' => 'Off', 'value' => 'n'],
],
],
'alignImage' => [
'required' => false,
'name' => tra('Auto-align Images'),
'description' => tra('Automatically move images to left hand side of slide text, will only align images greater than 200px in width'),
'filter' => 'word',
'default' => 'n',
'since' => '19.0',
'options' => [
['text' => 'Off', 'value' => 'n'],
['text' => 'On', 'value' => 'y']
],
],
],
];
}
function wikiplugin_slideshow($data, $params)
{
if (strstr($_SERVER['PHP_SELF'], 'tiki-slideshow.php') == '') {
if (strstr($_SERVER['PHP_SELF'], 'tiki-index.php')) {
return '<a class="btn btn-primary hidden-print" data-role="button" data-inline="true" title="Start Slideshow" href="./tiki-slideshow.php?page='
. $_REQUEST['page'] . '">' . tr('Start Slideshow Presentation') . '</a>';
}
return;
}
if (! empty($_REQUEST['pdf'])) {
global $pdfStyles;
if (isset($params['parallaxBackgroundImage'])) {
$pdfStyles = '<style>@page,body,div.reveal{background-image-resize:0 !important;
background-image:url("' . $params['parallaxBackgroundImage'] . '") !important;}</style>';
}
}
$params = array_merge(SlideshowHelper::getDefaultPluginValues(), $params);
$revealSettings = SlideshowHelper::getRevealSettingsAsString($params);
$headerlib = TikiLib::lib('header');
if (! isset($_REQUEST['theme'])) {
$headerlib->add_cssfile('vendor_bundled/vendor/npm-asset/reveal.js/css/theme/' . $params['theme'] . '.css', 1);
$headerlib->add_js(
'$( "#showtheme" ).val( "' . $params['theme'] . '" );'
);
}
if ($params['alignImage'] == 'y') {
$headerlib->add_js('(function(){
var images = [];
$("section table tr").each(function(){
var tr=this;
var imgsrc="";
var minwidth="";
if($(this).text().length>20 && window.innerHeight < window.innerWidth){ //checking for text content and screen orientation
$(this).find("img").each(function(){
if(this.width>200 ){
$(tr).find("td").attr("style","vertical-align:top");
imgsrc=this.src;
minwidth=(this.width)/2;
this.remove();
if(minwidth>450){ //to avoid distortion of text, in case of large image
minwidth=450;
}
}
});
if(imgsrc!="") {
var tableData = $("<td style=\"width:50%\"><img src="+imgsrc+" style=\"min-width:"+minwidth+"px;max-height:85%\"></td>");
$(this).append(tableData);
}
}
})
})()');
}
$headerlib->add_js(
"Reveal.configure({" . $revealSettings . "});
var fragments='" . $params['fragments'] . "';
var fragmentClass='" . $params['fragmentClass'] . "';
var fragmentHighlightColor='highlight-" . $params['fragmentHighlightColor'] . "';"
);
}