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.
305 lines
8.6 KiB
305 lines
8.6 KiB
<?php
|
|
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Definir la config de la box lity qui est la box par defaut
|
|
* @param $config
|
|
* @return mixed
|
|
*/
|
|
function mediabox_lity_config($config) {
|
|
$config['_libs']['lity'] = [
|
|
'nom' => 'Lity',
|
|
'css' => [
|
|
'lib/lity/lity.css',
|
|
'lity/css/lity.mediabox.css'
|
|
],
|
|
'js' => [
|
|
'lib/lity/lity.js',
|
|
'lity/js/lity.mediabox.js',
|
|
]
|
|
];
|
|
|
|
if (empty($config['lity'])) {
|
|
$config['lity'] = [];
|
|
}
|
|
|
|
$config['lity'] = array_merge(
|
|
[
|
|
'skin' => '_simple-dark',
|
|
'maxWidth' => '90%',
|
|
'maxHeight' => '90%',
|
|
'minWidth' => '400px',
|
|
'minHeight' => '',
|
|
'slideshow_speed' => '2500',
|
|
'opacite' => '0.9',
|
|
]
|
|
, $config['lity']
|
|
);
|
|
|
|
if (!empty($config['lity']['skin'])
|
|
and $box_skin = $config['lity']['skin']) {
|
|
|
|
if ($box_skin === 'none') {
|
|
$config['_libs']['lity']['css'] = [];
|
|
}
|
|
else {
|
|
$config['_libs']['lity']['css'][] = ($config['_public'] ? '' : 'prive/') . "lity/skins/{$box_skin}/lity.css";
|
|
}
|
|
}
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* Calculer la config mediabox en fonction de l'espace prive/public ou l'on se trouve et de la config definie via le formulaire
|
|
* @param null|bool $public
|
|
* @return array
|
|
*/
|
|
function mediabox_config($public = null) {
|
|
include_spip('inc/filtres');
|
|
include_spip('inc/config');
|
|
$config = lire_config('mediabox', array());
|
|
|
|
// conversion a la volee de l'ancienne config toute melangee
|
|
if (empty($config['box_type']) and empty($config['colorbox']) and !empty($config['transition'])) {
|
|
// on convertit l'ancienne config colorbox pour ne pas la perdre
|
|
$config['colorbox'] = [];
|
|
foreach (['skin', 'transition', 'speed', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight', 'slideshow_speed', 'opacite'] as $k) {
|
|
if (!empty($config[$k])) {
|
|
$config['colorbox'][$k] = $config[$k];
|
|
unset($config[$k]);
|
|
}
|
|
}
|
|
|
|
// et on passe a lity en heritant des config possibles
|
|
$config['box_type'] = 'lity';
|
|
if (empty($config['lity'])) {
|
|
$config['lity'] = [];
|
|
foreach (['maxWidth', 'maxHeight', 'minWidth', 'minHeight', 'slideshow_speed', 'opacite'] as $k) {
|
|
if (!empty($config['colorbox'][$k])) {
|
|
$config['lity'][$k] = $config['colorbox'][$k];
|
|
}
|
|
}
|
|
}
|
|
|
|
ecrire_config('mediabox', $config);
|
|
}
|
|
|
|
$config = array_merge(array(
|
|
'active' => 'oui',
|
|
'namespace' => 'box',
|
|
'traiter_toutes_images' => 'oui',
|
|
'selecteur_galerie' => '#documents_portfolio a[type=\'image/jpeg\'],#documents_portfolio a[type=\'image/png\'],#documents_portfolio a[type=\'image/gif\']',
|
|
'selecteur_commun' => '.mediabox',
|
|
'splash_url' => '',
|
|
'splash_width' => '600px',
|
|
'splash_height' => '90%',
|
|
'box_type' => 'lity',
|
|
), $config);
|
|
|
|
$config['_public'] = (is_null($public) ? !test_espace_prive() : !!$public);
|
|
$config['_libs'] = [];
|
|
|
|
if ($config['_public'] === false) {
|
|
$config = array_merge($config, array(
|
|
'active' => 'oui',
|
|
'selecteur_galerie' => '#portfolios a[type^=\'image/\']',
|
|
'selecteur_commun' => '.mediabox, .iconifier a[href$=jpg],.iconifier a[href$=png],.iconifier a[href$=gif]',
|
|
'splash_url' => '',
|
|
'box_type' => 'lity',
|
|
));
|
|
$config['lity'] = array_merge(
|
|
!empty($config['lity']) ? $config['lity'] : [],
|
|
[
|
|
'skin' => 'simple-white',
|
|
'maxWidth' => '90%',
|
|
'maxHeight' => '95%',
|
|
'minWidth' => '600px',
|
|
'minHeight' => '300px',
|
|
'opacite' => '0.9',
|
|
]
|
|
);
|
|
}
|
|
|
|
// Gerer aussi les liens internes de SPIP
|
|
if (!test_espace_prive() and $config['splash_url']) {
|
|
include_spip('inc/filtres_ecrire');
|
|
$config['splash_url'] = url_absolue(extraire_attribut(lien_article_virtuel($config['splash_url']), 'href'));
|
|
}
|
|
|
|
// declarer lity
|
|
$config = mediabox_lity_config($config);
|
|
|
|
// et d'autres boxs si besoin via un pipeline
|
|
$config = pipeline('mediabox_config', $config);
|
|
|
|
|
|
// charger la config du theme uniquement dans le public
|
|
// et forcer une config par defaut si rien de selectionne
|
|
if ($config['_public']) {
|
|
if (empty($config['box_type']) or empty($config['_libs'][$config['box_type']])) {
|
|
$config['box_type'] = 'lity';
|
|
if (empty($config['lity'])) {
|
|
$config['lity'] = array();
|
|
}
|
|
}
|
|
$box_type = $config['box_type'];
|
|
|
|
if ( !empty($config[$box_type]['skin'])
|
|
and $box_skin = $config[$box_type]['skin']
|
|
and include_spip("$box_type/$box_skin/mediabox_config_theme")
|
|
and function_exists($f = "mediabox_config_{$box_type}_$box_skin")
|
|
and $config_theme = $f($config)) {
|
|
$config = $config_theme;
|
|
}
|
|
}
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* Injecter les CSS + le JS inline (qui doit arriver avant les css pour des raisons de chargement non bloquant)
|
|
* @param string $flux
|
|
* @return string
|
|
*/
|
|
function mediabox_insert_head_css($flux) {
|
|
$config = mediabox_config();
|
|
if ($config['active'] == 'oui') {
|
|
|
|
$css_files = [];
|
|
|
|
if ($box_type = $config['box_type']
|
|
and !empty($config['_libs'][$box_type]['css'])) {
|
|
$css_files = array_merge($css_files, $config['_libs'][$box_type]['css']);
|
|
}
|
|
|
|
foreach($css_files as $file) {
|
|
if ($f = find_in_path($file)) {
|
|
if (substr($file, -5) === '.html') {
|
|
$f = produire_fond_statique(substr($file, 0, -5), $config);
|
|
}
|
|
else {
|
|
$f = timestamp(direction_css($f));
|
|
}
|
|
$flux .= "\n" . '<link rel="stylesheet" href="' . $f . '" type="text/css" media="all" />';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialiser la config de la mediabox
|
|
*/
|
|
$js_config = [
|
|
'auto_detect' => true,
|
|
'ns' => $config['namespace'],
|
|
'tt_img' => ($config['traiter_toutes_images'] == 'oui' ? true : false),
|
|
'sel_g' => $config['selecteur_galerie'],
|
|
'sel_c' => $config['selecteur_commun'],
|
|
'str_ssStart' => _T('mediabox:boxstr_slideshowStart'),
|
|
'str_ssStop' => _T('mediabox:boxstr_slideshowStop'),
|
|
'str_cur' => _T('mediabox:boxstr_current', array('current' => '{current}', 'total' => '{total}')),
|
|
'str_prev' => _T('mediabox:boxstr_previous'),
|
|
'str_next' => _T('mediabox:boxstr_next'),
|
|
'str_close' => _T('mediabox:boxstr_close'),
|
|
'str_loading' => _T('mediabox:boxstr_loading'),
|
|
'str_petc' => _T('mediabox:boxstr_press_escape_to_close'),
|
|
'str_dialTitDef' => _T('mediabox:boxstr_dialog_title_default'),
|
|
'str_dialTitMed' => _T('mediabox:boxstr_dialog_title_medias'),
|
|
'splash_url' => $config['splash_url'],
|
|
];
|
|
// plus la config specifique de la box selectionnee
|
|
if (!empty($config['box_type']) and !empty($config[$config['box_type']])) {
|
|
$js_config[$config['box_type']] = $config[$config['box_type']];
|
|
}
|
|
// Si c'est une image, on la chargera avec une redimentionnement automatique
|
|
// Sinon, chargement dans une iframe
|
|
if ($config['splash_url']) {
|
|
$extension = pathinfo($config['splash_url'], PATHINFO_EXTENSION);
|
|
if (in_array($extension, ['gif', 'png', 'jpg', 'jpeg'])) {
|
|
$js_config['splash_iframe'] = false;
|
|
} else {
|
|
$js_config['splash_iframe'] = true;
|
|
$js_config['splash_width'] = $config['splash_width'];
|
|
$js_config['splash_height'] = $config['splash_height'];
|
|
}
|
|
if (isset($config['splash_days'])) {
|
|
$js_config['splash_days'] = $config['splash_days'];
|
|
}
|
|
}
|
|
$configmediabox = '<script type="text/javascript">/* <![CDATA[ */
|
|
var mediabox_settings=' . json_encode(mediabox_echappe_js_config($js_config)) . ';' . "\n";
|
|
$flux = $configmediabox . '/* ]]> */</script>' . "\n" . $flux;
|
|
}
|
|
|
|
return $flux;
|
|
}
|
|
|
|
/**
|
|
* Encoder/echapper les arguments de la config JS injectee dans le html
|
|
* @param $config
|
|
* @return array|mixed|string|string[]
|
|
*/
|
|
function mediabox_echappe_js_config($config) {
|
|
if (is_array($config)) {
|
|
return array_map('mediabox_echappe_js_config', $config);
|
|
}
|
|
|
|
if (is_string($config)) {
|
|
if (strpos($config, '&') !== false) {
|
|
if (!function_exists('html2unicode')) {
|
|
include_spip('inc/charsets');
|
|
}
|
|
$config = unicode2charset(html2unicode($config));
|
|
}
|
|
if (strpos($config, '<') !== false) {
|
|
$config = str_replace('<', '<', $config);
|
|
}
|
|
}
|
|
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* Injecter les scripts js
|
|
* @param string $flux
|
|
* @return string
|
|
*/
|
|
function mediabox_insert_head($flux) {
|
|
$config = mediabox_config();
|
|
if ($config['active'] == 'oui') {
|
|
|
|
$js_files = [];
|
|
if ($box_type = $config['box_type']
|
|
and !empty($config['_libs'][$box_type]['js'])) {
|
|
$js_files = array_merge($js_files, $config['_libs'][$box_type]['js']);
|
|
}
|
|
|
|
$js_files[] = 'javascript/spip.mediabox.js';
|
|
if ($config['splash_url']) {
|
|
$js_files[] = 'javascript/splash.mediabox.js';
|
|
}
|
|
foreach ($js_files as $file) {
|
|
if ($f = find_in_path($file)) {
|
|
$flux .= "\n". '<script src="' . timestamp($f) . '" type="text/javascript"></script>';
|
|
}
|
|
}
|
|
}
|
|
|
|
return $flux;
|
|
}
|
|
|
|
/**
|
|
* Activer le plugin js cookie.js si on a configurer la splasg url
|
|
* @param $plugins
|
|
* @return mixed
|
|
*/
|
|
function mediabox_jquery_plugins($plugins) {
|
|
$config = mediabox_config();
|
|
if ($config['splash_url']) {
|
|
$plugins[] = 'javascript/js.cookie.js';
|
|
}
|
|
|
|
return $plugins;
|
|
}
|