diff --git a/medias_fonctions.php b/medias_fonctions.php index ee57551511867e032478c2b9fb38995b2fceca37..4ecee05cdacb09158d080097b489f27345b99a06 100644 --- a/medias_fonctions.php +++ b/medias_fonctions.php @@ -414,3 +414,145 @@ function medias_trouver_modele_emb($extension, $mime_type, $modele_base='file') return $modele_base; } + + +/** + * Liste les classes standards des modèles de documents SPIP. + * + * @note + * le nomage au pluriel est historique. + * préférer au singulier pour toute nouvelle classe. + * + * @param int $id_document + * @param string $media + * @param array $env + * @param array $get + * @return string + */ +function filtre_medias_modele_document_standard_classes_dist($Pile, $id_document, $media) { + $env = $Pile[0]; + $var = $Pile['vars'] ?? []; + + $s = 'spip_document_'; + + $classes = []; + $classes[] = $s . $id_document; + $classes[] = 'spip_documents'; + $classes[] = $s . $media; + if (!empty($env['align'])) { + $classes[] = 'spip_documents_' . $env['align']; + } elseif ($media === 'image') { + $classes[] = 'spip_documents_center'; + } + if (!empty($var['legende'])) { + $classes[] = $s . '--legende'; + } + if (!empty($env['class'])) { + $classes[] = $env['class']; + } + return implode(" ", $classes); +} + + +/** + * Liste les attributs data standards des modèles de documents SPIP. + * + * @param int $id_document + * @param string $media + * @param array $env + * @param array $get + * @return string + */ +function filtre_medias_modele_document_standard_attributs_dist($Pile, $id_document, $media) { + $env = $Pile[0]; + $var = $Pile['vars'] ?? []; + $attrs = []; + + if (!empty($var['legende'])) { + $len = spip_strlen(textebrut($var['legende'])); + // des x. "x" = 32 caratères, "xx" => 64, "xxx" => 128, etc... + $lenx = medias_str_repeat_log($len, 2, "x", 4); + $attrs['data-legende-len'] = $len; + $attrs['data-legende-lenx'] = $lenx; + } + + $res = ""; + foreach($attrs as $attr => $value) { + $res .= "$attr=\"" . attribut_html($value) . "\""; + }; + return $res; +} + + +/** + * Retourne une chaine répétée d'autant de fois le logarithme + * + * @example medias_str_repeat_log(124, 2) + * + * Avec $base = 2 et $remove = 0 + * + * 0 => + * 2 => x + * 4 => xx + * 8 => xxx + * 16 => xxxx + * 32 => xxxxx + * 64 => xxxxxx + * + * @example medias_str_repeat_log(124, 2, "x", 4) + * + * Avec $base = 2 et $remove = 4 + * + * 0 => + * 2 => + * 4 => + * 8 => + * 16 => + * 32 => x + * 64 => xx + * + * @note + * L'inverse (nb caractères => valeur) est donc `pow($base, $nb_char)` + * + * En partant du nombre de "x" on retrouve la fourchette du nombre de départ. + * Si $base = 2 et $remove = 4 : + * + * - "xxx" = 2 ^ (strlen("xxx") + 4) = 2 ^ (3 + 4) = 128 + * - "xxxxx" = 2 ^ (5 + 4) = 512 + + * x = 32, + * xx = 64 + * xxx = 128 + * xxxx = 256 + * xxxxx = 512 + * ... + * + * Ce qui veut dire que "xxx" provient d'une valeur entre 128 et 255. + * + * @note + * C'est surtout utile pour une sélection en CSS (car CSS ne permet pas de sélecteur "lower than" ou "greater than") : + * + * ```spip + * <div class='demo' attr-demo-pad='[(#TEXTE|textebrut|spip_strlen|medias_attr_pad_log)]'>...</div>` + * ``` + * + * ```css + * .demo[attr-demo-pad^="xxxx"] { + * // le contenu fait au moins 256 caractères + * } + * .demo:not([attr-demo-pad^="xxxx"]) { + * // le contenu fait au moins 256 caractères + * } + * ``` + * + * @param float $num + * @param float $log + * @param string $pad_string + * @param int $remove : Nombre de caractères à enlever. + * + * @return string Des x + */ +function medias_str_repeat_log($num, $base = 2, $string = "x", $remove = 0) { + $pad = str_repeat($string, (int)log($num, $base)); + return substr($pad, $remove); +} diff --git a/modeles/audio.html b/modeles/audio.html index 6aaeb5ea1f406b0dfeeda09ed63c161103655ceb..5d47a565a1bd5db0b1ecfc4a0268a5820f0877a6 100644 --- a/modeles/audio.html +++ b/modeles/audio.html @@ -7,7 +7,11 @@ [(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})] #SET{largeur,#ENV{largeur, #LARGEUR|?{#LARGEUR,400}}|max{120}} #SET{duree,#ENV{duree,#DUREE}}[(#SET{duree,[(#GET{duree}|intval|?{[(#GET{duree}|intval)],''})]})] -<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_audio[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})]'[ style='width:(#GET{largeur})px;']> +<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{audio})]"[ + style='width:(#GET{largeur})px;'][ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{audio}) +]> [(#LOGO_DOCUMENT{vignette}|image_reduire{#GET{largeur},0}|vider_attribut{class})] <div class="audio-wrapper"[ style='width:(#GET{largeur})px;max-width:100%;']> <audio class="mejs mejs-#ID_DOCUMENT [ mejs-(#ENV{skin})]" diff --git a/modeles/file.html b/modeles/file.html index 9c379f2d5d49a970d224f9f8378fb2ad9cda7b59..de2fb7f43e47b0bf87bfa1f3eb85a31e8f8484e0 100644 --- a/modeles/file.html +++ b/modeles/file.html @@ -25,7 +25,11 @@ [(#SET{title,[(#TYPE_DOCUMENT) - [(#TAILLE|taille_en_octets)]]})] [(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})] [(#MEDIA|=={image}|oui) #SET{title,#TITRE|sinon{#GET{title}}] -<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_file[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})][ (#ENV{class})] spip_lien_ok' [ style='width:(#GET{width}|max{120})px;']> +<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{file}) ]spip_lien_ok"[ + style='width:(#GET{width}|max{120})px;'][ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{file}) +]> [<a href="(#GET{url})"[ class="(#ENV{lien_class})"] title='[(#GET{title}|attribut_html)]'[ (#ENV{lien}|?{'',type="#MIME_TYPE"})]>]<img src='#GET{fichier}' width='#GET{width}' height='#GET{height}' alt='' />[(#GET{url}|?{</a>})] diff --git a/modeles/file_emb_application.html b/modeles/file_emb_application.html index b31b976e84d41e1c73a91924d0ad83fe6ed8b330..d0d4528fb21d28c3917a209969ccb0d646127638 100644 --- a/modeles/file_emb_application.html +++ b/modeles/file_emb_application.html @@ -5,14 +5,17 @@ - #GET{hauteur} et #GET{largeur} correspondent prioritairement a #ENV, puis #LARGEUR/HAUTEUR sauf si il y a un controleur ] -[(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})] #SET{hauteur,#ENV{hauteur,#HAUTEUR}} #SET{largeur,#ENV{largeur,#LARGEUR}} [(#ENV{controls}=={PlayButton}|?{#SET{hauteur,25},''})][ (#ENV{controls}=={PlayButton}|?{#SET{largeur,40},''})][ (#ENV{controls}=={PositionSlider}|?{#SET{hauteur,25},''})][ (#ENV{controls}=={PositionSlider}|?{#SET{largeur,#GET{largeur}|moins{40}},''}) ][(#ENV{controls,''}|non) -<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_application[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})]'> +[(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})] +<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{application})]"[ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{application}) +]> ][(#EXTENSION|=={swf}|oui) <object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=#ENV{version,'6,0,0,0'}' diff --git a/modeles/file_emb_text.html b/modeles/file_emb_text.html index 34aa3641c8b693427656a2fdc64bc9f60a7d4cc9..7f603e9ec124a37c3469993e8df0cb72234ec256 100644 --- a/modeles/file_emb_text.html +++ b/modeles/file_emb_text.html @@ -1,7 +1,9 @@ <BOUCLE_text (DOCUMENTS types_documents) {id_document=#ENV{id,#ENV{id_document}}} {tout} >[(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})][(#REM) -][<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_text[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})]' -><pre>(#FICHIER|contenu_document{#ENV{charset,auto}}|echapper_tags)</pre> +][<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{text})]"[ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{text}) +]><pre>(#FICHIER|contenu_document{#ENV{charset,auto}}|echapper_tags)</pre> [(#GET{legende}) ]</figure> ]</BOUCLE_text> diff --git a/modeles/file_emb_text_csv.html b/modeles/file_emb_text_csv.html index eb2dd0f2f0a38e9f57b64ac57763bd8da6d52866..e15694fdf1d428941a354e2cf31f318b0ff09a1f 100644 --- a/modeles/file_emb_text_csv.html +++ b/modeles/file_emb_text_csv.html @@ -1,6 +1,9 @@ <BOUCLE_tous (DOCUMENTS types_documents) {id_document=#ID} {tout} >[(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})][(#REM) -]<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_text[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})]'> +]<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{text})]"[ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{text}) +]> [(#FICHIER|contenu_document{#ENV{charset,auto}}|appliquer_filtre{#MIME_TYPE})] [(#GET{legende} ]</figure> diff --git a/modeles/file_emb_text_html.html b/modeles/file_emb_text_html.html index 2fc854cb146133ab2df1d19bb45761066b6c3552..34eba39bff4caa8f25a66991b6caa038de469f5a 100644 --- a/modeles/file_emb_text_html.html +++ b/modeles/file_emb_text_html.html @@ -1,7 +1,9 @@ <BOUCLE_texthtml (DOCUMENTS types_documents) {id_document=#ID} {tout} >[(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})][(#REM) -][<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_text_html[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})]' -><object data="(#URL_DOCUMENT)" width="100%" height="400"><a href="#URL_DOCUMENT">#FICHIER</a></object> +][<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{text_html})]"[ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{text_html}) +]><object data="(#URL_DOCUMENT)" width="100%" height="400"><a href="#URL_DOCUMENT">#FICHIER</a></object> [(#GET{legende}) ]</figure> ]</BOUCLE_texthtml> diff --git a/modeles/image.html b/modeles/image.html index d415b007dd9947fafacd1f080c7e3f9a4c274183..29a89d7e70e1eff761772c3c0f688c8eaa28a0c5 100644 --- a/modeles/image.html +++ b/modeles/image.html @@ -11,7 +11,11 @@ [(#SET{image,#GET{image}|inserer_attribut{alt,#ENV{alt,#ALT}|sinon{''}}})] [(#SET{legende,#INCLURE{fond=modeles/document_legende, env}|trim})] #SET{largeur,#GET{image}|largeur} -<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_image[ spip_documents_(#ENV{align}|sinon{center})][ (#GET{legende}|?{spip_document--legende})][ (#ENV{class})] spip_lien_ok'[ style='width:(#GET{largeur})px;']> +<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{image}) ]spip_lien_ok"[ + style='width:(#GET{largeur})px;'][ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{image}) +]> [<a href="(#ENV{lien})"[ class="(#ENV{lien_class}|concat{#GET{autolien}|?{' mediabox'}})"]>] [(#ENV{lien}|non|et{#GET{autolien}})<a href="#URL_DOCUMENT" class="mediabox" type="#MIME_TYPE">] #GET{image} diff --git a/modeles/video.html b/modeles/video.html index 7f6a21465cc4a87157b0ae754fa0a2fbdd2327aa..5fb1a70dd9983bc34e7fa5cb4d50bdefcfdedfa2 100644 --- a/modeles/video.html +++ b/modeles/video.html @@ -9,7 +9,11 @@ #SET{largeur,#ENV{largeur, #LARGEUR|?{#LARGEUR,480}}|max{120}} #SET{hauteur,#ENV{hauteur, #HAUTEUR|?{#HAUTEUR,300}}|max{75}} #SET{duree,#ENV{duree,#DUREE}}[(#SET{duree,[(#GET{duree}|intval|?{[(#GET{duree}|intval)],''})]})] -<figure class='spip_document_#ID_DOCUMENT spip_documents spip_document_video[ spip_documents_(#ENV{align})][ (#GET{legende}|?{spip_document--legende})]'[ style='width:(#GET{largeur})px;']> +<figure + class="[(#ID_DOCUMENT|medias_modele_document_standard_classes{video})]"[ + style='width:(#GET{largeur})px;'][ + (#ID_DOCUMENT|medias_modele_document_standard_attributs{video}) +]> <div class="video-intrinsic-wrapper" style='height:0;width:#GET{largeur}px;max-width:100%;padding-bottom:[(#GET{hauteur}|div{#GET{largeur}}|mult{100}|round{2})]%;position:relative;'> <div class="video-wrapper" style="position: absolute;top:0;left:0;width:100%;height:100%;"> <video class="mejs mejs-#ID_DOCUMENT[ mejs-(#ENV{skin})]"