diff --git a/.gitattributes b/.gitattributes index aade0b366ecc9490fc7029cbb3b083f417fbb253..9d131a3a9c266406775e3bf4f53fb92b2b715cc1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -32,6 +32,8 @@ dist/images/aide-48_rtl.png -text dist/images/aide.gif -text dist/images/aide_rtl.gif -text dist/images/annonce.gif -text +dist/images/arrow_left.gif -text +dist/images/arrow_right.gif -text dist/images/article-24.gif -text dist/images/asuivre-24.gif -text dist/images/asuivre-48.png -text @@ -100,6 +102,7 @@ dist/images/langues-12.gif -text dist/images/langues-24.gif -text dist/images/langues-modif-12.gif -text dist/images/langues-off-12.gif -text +dist/images/loader.gif -text dist/images/logo-spip.gif -text dist/images/logo_spip.jpg -text dist/images/loupe-moins.gif -text @@ -222,8 +225,10 @@ dist/javascript/async_upload.js -text dist/javascript/dragdrop_interface.js -text dist/javascript/form.js -text dist/javascript/jquery-1.0.3.js -text +dist/javascript/jtip.js -text dist/javascript/pause.js -text dist/jquery.js.html -text +dist/jtip.css -text dist/modeles/article_mots.html -text dist/modeles/article_traductions.html -text dist/modeles/doc.html -text @@ -407,6 +412,7 @@ ecrire/exec/gadgets.php -text ecrire/exec/grouper_mots.php -text ecrire/exec/iconifier.php -text ecrire/exec/import_all.php -text +ecrire/exec/info_plugin.php -text ecrire/exec/informer.php -text ecrire/exec/informer_auteur.php -text ecrire/exec/install.php -text diff --git a/dist/images/arrow_left.gif b/dist/images/arrow_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..4c9e5c66bda8fa0b1e78bd144ba5349c7c26131f Binary files /dev/null and b/dist/images/arrow_left.gif differ diff --git a/dist/images/arrow_right.gif b/dist/images/arrow_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..3252c359e276df642fa30a804284645dc1aeac72 Binary files /dev/null and b/dist/images/arrow_right.gif differ diff --git a/dist/images/loader.gif b/dist/images/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..32af9875a41d87a018252b23b87c2c985db35c9e Binary files /dev/null and b/dist/images/loader.gif differ diff --git a/dist/javascript/jtip.js b/dist/javascript/jtip.js new file mode 100644 index 0000000000000000000000000000000000000000..2903f3f6a35e56a1b7a8917c5230b4e9396994e9 --- /dev/null +++ b/dist/javascript/jtip.js @@ -0,0 +1,97 @@ +/* + * JTip + * By Cody Lindley (http://www.codylindley.com) + * Under an Attribution, Share Alike License + * JTip is built on top of the very light weight jquery library. + */ + +//on page load (as soon as its ready) call JT_init +$(document).ready(JT_init); + +function JT_init(){ + $("a.jTip") + .hover(function(){JT_show(this.href,this.id,this.name)},function(){$('#JT').remove()}) + .click(function(){return false}); +} + +function JT_show(url,linkId,title){ + if(title == false)title=" "; + var de = document.documentElement; + var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; + var hasArea = w - getAbsoluteLeft(linkId); + var clickElementy = getAbsoluteTop(linkId) - 3; //set y position + + var queryString = url.replace(/^[^\?]+\??/,''); + var params = parseQuery( queryString ); + if(params['width'] === undefined){params['width'] = 250}; + if(params['link'] !== undefined){ + $('#' + linkId).bind('click',function(){window.location = params['link']}); + $('#' + linkId).css('cursor','pointer'); + } + + if(hasArea>((params['width']*1)+75)){ + $("body").append("<div id='JT' style='width:"+params['width']*1+"px'><div id='JT_arrow_left'></div><div id='JT_close_left'>"+title+"</div><div id='JT_copy'><div class='JT_loader'><div></div></div>");//right side + var arrowOffset = getElementWidth(linkId) + 11; + var clickElementx = getAbsoluteLeft(linkId) + arrowOffset; //set x position + }else{ + $("body").append("<div id='JT' style='width:"+params['width']*1+"px'><div id='JT_arrow_right' style='left:"+((params['width']*1)+1)+"px'></div><div id='JT_close_right'>"+title+"</div><div id='JT_copy'><div class='JT_loader'><div></div></div>");//left side + var clickElementx = getAbsoluteLeft(linkId) - ((params['width']*1) + 15); //set x position + } + + $('#JT').css({left: clickElementx+"px", top: clickElementy+"px"}); + $('#JT').show(); + $('#JT_copy').load(url); + +} + +function getElementWidth(objectId) { + x = document.getElementById(objectId); + return x.offsetWidth; +} + +function getAbsoluteLeft(objectId) { + // Get an object left position from the upper left viewport corner + o = document.getElementById(objectId) + oLeft = o.offsetLeft // Get left position from the parent object + while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element + oParent = o.offsetParent // Get parent object reference + oLeft += oParent.offsetLeft // Add parent left position + o = oParent + } + return oLeft +} + +function getAbsoluteTop(objectId) { + // Get an object top position from the upper left viewport corner + o = document.getElementById(objectId) + oTop = o.offsetTop // Get top position from the parent object + while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element + oParent = o.offsetParent // Get parent object reference + oTop += oParent.offsetTop // Add parent top position + o = oParent + } + return oTop +} + +function parseQuery ( query ) { + var Params = new Object (); + if ( ! query ) return Params; // return empty object + var Pairs = query.split(/[;&]/); + for ( var i = 0; i < Pairs.length; i++ ) { + var KeyVal = Pairs[i].split('='); + if ( ! KeyVal || KeyVal.length != 2 ) continue; + var key = unescape( KeyVal[0] ); + var val = unescape( KeyVal[1] ); + val = val.replace(/\+/g, ' '); + Params[key] = val; + } + return Params; +} + +function blockEvents(evt) { + if(evt.target){ + evt.preventDefault(); + }else{ + evt.returnValue = false; + } +} \ No newline at end of file diff --git a/dist/jtip.css b/dist/jtip.css new file mode 100644 index 0000000000000000000000000000000000000000..d793c85c8a6899489b73e5db56762fdef77908f7 --- /dev/null +++ b/dist/jtip.css @@ -0,0 +1,98 @@ +/* - - - - - - CSS Document - - - - - - - - - + +Title : Global style sheet for client-side web development +Author : Cody Lindley + +- - - - - - - - - - - - - - - - - - - - - */ + +.formInfo a, .formInfo a:active, formInfo a:visited{ + background-color: #f66; + font-size: 1.3em; + font-weight:bold; + padding:1px 2px; + margin-left:5px; + color:#FFFFFF; + text-decoration: none; + float: right; +} + +.formInfo a:hover{ + color:#660000; + text-decoration: none; +} + +/* ---------->>> jtip <<<---------------------------------------------------------------*/ + +#JT_arrow_left{ + background-image: url(images/arrow_left.gif); + background-repeat: no-repeat; + background-position: left top; + position: absolute; + z-index:101; + left:-12px; + height:23px; + width:10px; + top:-3px; +} + +#JT_arrow_right{ + background-image: url(images/arrow_right.gif); + background-repeat: no-repeat; + background-position: left top; + position: absolute; + z-index:101; + height:23px; + width:11px; + top:-2px; +} + +#JT { + position: absolute; + z-index:100; + border: 2px solid #CCCCCC; + background-color: #fff; +} + +#JT_copy{ + padding:10px 10px 10px 10px; + color:#333333; +} + +.JT_loader{ + background-image: url(images/loader.gif); + background-repeat: no-repeat; + background-position: center center; + width:100%; + height:12px; +} + +#JT_close_left{ + background-color: #CCCCCC; + text-align: left; + padding-left: 8px; + padding-bottom: 5px; + padding-top: 2px; + font-weight:bold; +} + +#JT_close_right{ + background-color: #CCCCCC; + text-align: left; + padding-left: 8px; + padding-bottom: 5px; + padding-top: 2px; + font-weight:bold; +} + +#JT_copy p{ +margin:3px 0; +} + +#JT_copy img{ + padding: 1px; + border: 1px solid #CCCCCC; +} + +.jTip{ +cursor:help; +} diff --git a/ecrire/exec/admin_plugin.php b/ecrire/exec/admin_plugin.php index 2a4879d6e97f173a5a9890c6e3e505750f0fd57c..2088b3cce6263847f6de4b5bcbb2047de47f188c 100644 --- a/ecrire/exec/admin_plugin.php +++ b/ecrire/exec/admin_plugin.php @@ -40,8 +40,10 @@ function exec_admin_plugin() { global $couleur_claire; $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page(_T('icone_admin_plugin'), "configuration", "plugin"); - echo "<style type='text/css'>\n"; $dir_img_pack = _DIR_IMG_PACK; + echo "<link rel='stylesheet' href='".find_in_path('jtip.css')."' type='text/css' media='screen' />"; + echo "<script src='"._DIR_JAVASCRIPT."jtip.js' type='text/javascript'></script>"; + echo "<style type='text/css'>\n"; echo <<<EOF div.cadre-padding ul li { list-style:none ; @@ -232,11 +234,9 @@ function affiche_arbre_plugins($liste_plugins,$liste_plugins_actifs){ $maxiter=1000; echo http_script(" $(document).ready( - function() - { + function(){ $('input.check').click(function(){\$(this).parent().toggleClass('nomplugin_on');}); - } - );"); + });"); while (count($liste_plugins) && $maxiter--){ // le rep suivant $dir = dirname(reset($liste_plugins)); @@ -274,8 +274,13 @@ function ligne_plug($plug_file, $actif, $id){ $s .= "</div>"; } + $etat = 'dev'; + if (isset($info['etat'])) + $etat = $info['etat']; + $nom = typo($info['nom']); // puce d'etat du plugin // <etat>dev|experimental|test|stable</etat> + $s .= "<span class='formInfo'><a href='".generer_url_ecrire('info_plugin',"plug=$plug_file&width=500")."' class='jTip' name=\"".attribut_html($nom)."\" id='aide_$plug_file'>?</a></span>"; $s .= "<span class='$etat'> </span>"; if (!$erreur){ $s .= "<input type='checkbox' name='statusplug_$plug_file' value='O' id='label_$id_input'"; @@ -284,38 +289,15 @@ function ligne_plug($plug_file, $actif, $id){ } $id_input++; - $s .= bouton_block_invisible("$plug_file"); + //$s .= bouton_block_invisible("$plug_file"); - $s .= ($actif?"":"").typo($info['nom']).($actif?"":""); + $s .= $nom; $s .= "</div>"; - // TODO : n'afficher que les actifs, les autres en AHAH - if (true - OR $actif - OR _SPIP_AJAX!=1) # va-t-on afficher le bloc ? + // afficher les details d'un plug en secours + if (_request('plug')==$plug_file) $s .= affiche_bloc_plugin($plug_file, $info); return $s; } - -// http://doc.spip.org/@affiche_bloc_plugin -function affiche_bloc_plugin($plug_file, $info) { - $s .= debut_block_invisible("$plug_file"); - $s .= "<div class='detailplugin'>"; - $s .= _T('version') .' '. $info['version'] . " | <strong>$titre_etat</strong><br/>"; - $s .= _T('repertoire_plugins') .' '. $plug_file . "<br/>"; - - if (isset($info['description'])) - $s .= "<hr/>" . propre($info['description']) . "<br/>"; - - if (isset($info['auteur'])) - $s .= "<hr/>" . _T('auteur') .' '. propre($info['auteur']) . "<br/>"; - if (isset($info['lien'])) - $s .= "<hr/>" . _T('info_url') .' '. propre($info['lien']) . "<br/>"; - $s .= "</div>"; - $s .= fin_block(); - - return $s; -} - ?> diff --git a/ecrire/exec/info_plugin.php b/ecrire/exec/info_plugin.php new file mode 100644 index 0000000000000000000000000000000000000000..4c5621020bfd299b5886e20442a38f80f5dc06de --- /dev/null +++ b/ecrire/exec/info_plugin.php @@ -0,0 +1,13 @@ +<?php + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('inc/plugin'); + +function exec_info_plugin() { + $plug = _request('plug'); + $info = plugin_get_infos($plug); + ajax_retour(affiche_bloc_plugin($plug_file, $info)); +} + +?> \ No newline at end of file diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php index b8355397258602b203ef7b87fab2e486713ea7e1..8fc6c6c2279986ca5d3f0c15f7b2139c66284888 100644 --- a/ecrire/inc/plugin.php +++ b/ecrire/inc/plugin.php @@ -441,4 +441,47 @@ function verifie_include_plugins() { spip_log("desactivation des plugins suite a suppression du repertoire"); } } + +// http://doc.spip.org/@affiche_bloc_plugin +function affiche_bloc_plugin($plug_file, $info) { + // puce d'etat du plugin + // <etat>dev|experimental|test|stable</etat> + $etat = 'dev'; + if (isset($info['etat'])) + $etat = $info['etat']; + switch ($etat) { + case 'experimental': + $puce = 'puce-rouge.gif'; + $titre_etat = _T('plugin_etat_experimental'); + break; + case 'test': + $puce = 'puce-orange.gif'; + $titre_etat = _T('plugin_etat_test'); + break; + case 'stable': + $puce = 'puce-verte.gif'; + $titre_etat = _T('plugin_etat_stable'); + break; + default: + $puce = 'puce-poubelle.gif'; + $titre_etat = _T('plugin_etat_developpement'); + break; + } + + $s .= "<div class='detailplugin verdana2'>"; + $s .= _T('version') .' '. $info['version'] . " | <strong>$titre_etat</strong><br/>"; + $s .= _T('repertoire_plugins') .' '. $plug_file . "<br/>"; + + if (isset($info['description'])) + $s .= "<hr/>" . propre($info['description']) . "<br/>"; + + if (isset($info['auteur'])) + $s .= "<hr/>" . _T('auteur') .' '. propre($info['auteur']) . "<br/>"; + if (isset($info['lien'])) + $s .= "<hr/>" . _T('info_url') .' '. propre($info['lien']) . "<br/>"; + $s .= "</div>"; + + return $s; +} + ?>