Uutiset:

SMF 2.1.4 has been released! Take it for a spin! Read more.

Main Menu
Advertisement:

Code: [Sélectionner]

Aloittaja lance_yien, syyskuu 23, 2009, 11:33:38 AP

« edellinen - seuraava »

lance_yien

Bonjour à tous,

Comment ajouter l'option [Sélectionner] dans les textes sous forme de "Code" (si possible sans installer de Mod suppémentaire)?

Merci! ;)

GravuTrad

texte

c'est automatique avec le bbcode "code" dans la version 2, pas dans la version 1.   pour quelle version d'smf?
On a toujours besoin d'un plus petit que soi! (Petit!Petit!)


Think about Search function before posting.
Pensez à la fonction Recherche avant de poster.


lance_yien

Re,

Il doit bien y avoir une solution!
J'en ai vraiment besoin et et je voudrai m'épargner le changement vers une autre version.

Merci ;)

maximus23

#4
Bonjour,

Voici ma solution testée et éprouvée :)

Sources/Subs.php

Rechercher :


   array(
    'tag' => 'code',
    'type' => 'unparsed_content',
    'content' => '<div class="codeheader">' . $txt['smf238'] . ':</div><div class="code">' . ($context['browser']['is_gecko'] ? '<pre style="margin-top: 0; display: inline;">$1</pre>' : '$1') . '</div>',
    // !!! Maybe this can be simplified?
    'validate' => isset($disabled['code']) ? null : create_function('&$tag, &$data, $disabled', '
     global $context;
     if (!isset($disabled['code']))
     {
      $php_parts = preg_split('~(&lt;?php|?&gt;)~', $data, -1, PREG_SPLIT_DELIM_CAPTURE);
      for ($php_i = 0, $php_n = count($php_parts); $php_i < $php_n; $php_i++)
      {
       // Do PHP code coloring?
       if ($php_parts[$php_i] != '&lt;?php')
        continue;
       $php_string = '';
       while ($php_i + 1 < count($php_parts) && $php_parts[$php_i] != '?&gt;')
       {
        $php_string .= $php_parts[$php_i];
        $php_parts[$php_i++] = '';
       }
       $php_parts[$php_i] = highlight_php_code($php_string . $php_parts[$php_i]);
      }
      // Fix the PHP code stuff...
      $data = str_replace("<pre style="display: inline;"> </pre>", " ", implode('', $php_parts));
      // Older browsers are annoying, aren't they?
      if ($context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'])
       $data = str_replace(" ", "<pre style="display: inline;"> </pre>", $data);
      elseif (!$context['browser']['is_gecko'])
       $data = str_replace(" ", "<span style="white-space: pre;"> </span>", $data);
     }'),
    'block_level' => true,
   ),
   array(
    'tag' => 'code',
    'type' => 'unparsed_equals_content',
    'content' => '<div class="codeheader">' . $txt['smf238'] . ': ($2)</div><div class="code">' . ($context['browser']['is_gecko'] ? '<pre style="margin-top: 0; display: inline;">$1</pre>' : '$1') . '</div>',
    // !!! Maybe this can be simplified?
    'validate' => isset($disabled['code']) ? null : create_function('&$tag, &$data, $disabled', '
     global $context;
     if (!isset($disabled['code']))
     {
      $php_parts = preg_split('~(&lt;?php|?&gt;)~', $data[0], -1, PREG_SPLIT_DELIM_CAPTURE);
      for ($php_i = 0, $php_n = count($php_parts); $php_i < $php_n; $php_i++)
      {
       // Do PHP code coloring?
       if ($php_parts[$php_i] != '&lt;?php')
        continue;
       $php_string = '';
       while ($php_i + 1 < count($php_parts) && $php_parts[$php_i] != '?&gt;')
       {
        $php_string .= $php_parts[$php_i];
        $php_parts[$php_i++] = '';
       }
       $php_parts[$php_i] = highlight_php_code($php_string . $php_parts[$php_i]);
      }
      // Fix the PHP code stuff...
      $data[0] = str_replace("<pre style="display: inline;"> </pre>", " ", implode('', $php_parts));
      // Older browsers are annoying, aren't they?
      if ($context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'])
       $data = str_replace(" ", "<pre style="display: inline;"> </pre>", $data);
      elseif (!$context['browser']['is_gecko'])
       $data = str_replace(" ", "<span style="white-space: pre;"> </span>", $data);
     }'),
    'block_level' => true,
   ),


Remplacer par :

   array(
    'tag' => 'code',
    'type' => 'unparsed_content',
    'content' => '<div class="codeheader">' . $txt['code'] . ': <a href="javascript:void(0);" onclick="return smfSelectText(this);" class="codeoperation">' . $txt['code_select'] . '</a></div><code>$1</code>',
    // !!! Maybe this can be simplified?
    'validate' => isset($disabled['code']) ? null : create_function('&$tag, &$data, $disabled', '
     global $context;
     if (!isset($disabled['code']))
     {
      $php_parts = preg_split('~(&lt;?php|?&gt;)~', $data, -1, PREG_SPLIT_DELIM_CAPTURE);
      for ($php_i = 0, $php_n = count($php_parts); $php_i < $php_n; $php_i++)
      {
       // Do PHP code coloring?
       if ($php_parts[$php_i] != '&lt;?php')
        continue;
       $php_string = '';
       while ($php_i + 1 < count($php_parts) && $php_parts[$php_i] != '?&gt;')
       {
        $php_string .= $php_parts[$php_i];
        $php_parts[$php_i++] = '';
       }
       $php_parts[$php_i] = highlight_php_code($php_string . $php_parts[$php_i]);
      }
      // Fix the PHP code stuff...
      $data = str_replace("<pre style="display: inline;"> </pre>", " ", implode('', $php_parts));
      // Older browsers are annoying, aren't they?
      if ($context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'])
       $data = str_replace(" ", "<pre style="display: inline;"> </pre>", $data);
      elseif (!$context['browser']['is_gecko'])
       $data = str_replace(" ", "<span style="white-space: pre;"> </span>", $data);
      else
       $data = str_replace(" ", "&nbsp;&nbsp;&nbsp;", $data);
     }'),
    'block_level' => true,
   ),
   array(
    'tag' => 'code',
    'type' => 'unparsed_equals_content',
    'content' => '<div class="codeheader">' . $txt['code'] . ': ($2) <a href="#" onclick="return smfSelectText(this);" class="codeoperation">' . $txt['code_select'] . '</a></div><code>$1</code>',
    // !!! Maybe this can be simplified?
    'validate' => isset($disabled['code']) ? null : create_function('&$tag, &$data, $disabled', '
     global $context;
     if (!isset($disabled['code']))
     {
      $php_parts = preg_split('~(&lt;?php|?&gt;)~', $data[0], -1, PREG_SPLIT_DELIM_CAPTURE);
      for ($php_i = 0, $php_n = count($php_parts); $php_i < $php_n; $php_i++)
      {
       // Do PHP code coloring?
       if ($php_parts[$php_i] != '&lt;?php')
        continue;
       $php_string = '';
       while ($php_i + 1 < count($php_parts) && $php_parts[$php_i] != '?&gt;')
       {
        $php_string .= $php_parts[$php_i];
        $php_parts[$php_i++] = '';
       }
       $php_parts[$php_i] = highlight_php_code($php_string . $php_parts[$php_i]);
      }
      // Fix the PHP code stuff...
      $data[0] = str_replace("<pre style="display: inline;"> </pre>", " ", implode('', $php_parts));
      // Older browsers are annoying, aren't they?
      if ($context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'])
       $data = str_replace(" ", "<pre style="display: inline;"> </pre>", $data);
      elseif (!$context['browser']['is_gecko'])
       $data = str_replace(" ", "<span style="white-space: pre;"> </span>", $data);
      else
       $data = str_replace(" ", "&nbsp;&nbsp;&nbsp;", $data);
     }'),
    'block_level' => true,
   ),



Themes/default/script.js

Rechercher :


function ajax_indicator(turn_on)
{
var indicator = document.getElementById("ajax_in_progress");
if (indicator != null)
{
  if (navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf("MSIE 7") == -1)
  {
   indicator.style.top = document.documentElement.scrollTop;
  }
  indicator.style.display = turn_on ? "block" : "none";
}
}


Ajouter Après :


// Get the text in a code tag.
function smfSelectText(oCurElement, bActOnElement)
{
// The place we're looking for is one div up, and next door - if it's auto detect.
if (typeof(bActOnElement) == 'boolean' && bActOnElement)
  var oCodeArea = document.getElementById(oCurElement);
else
  var oCodeArea = oCurElement.parentNode.nextSibling;
if (typeof(oCodeArea) != 'object' || oCodeArea == null)
  return false;
// Start off with my favourite, internet explorer.
if (document.body.createTextRange)
{
  var oCurRange = document.body.createTextRange();
  oCurRange.moveToElementText(oCodeArea);
  oCurRange.select();
}
// Firefox at el.
else if (window.getSelection)
{
  var oCurSelection = window.getSelection();
  // Safari is special!
  if (oCurSelection.setBaseAndExtent)
  {
   var oLastChild = oCodeArea.lastChild;
   oCurSelection.setBaseAndExtent(oCodeArea, 0, oLastChild, typeof(oLastChild.innerText) == 'undefined' ? oLastChild.textContent.length : oLastChild.innerText.length);
  }
  else
  {
   var curRange = document.createRange();
   curRange.selectNodeContents(oCodeArea);
   oCurSelection.removeAllRanges();
   oCurSelection.addRange(curRange);
  }
}
return false;
}


Themes/default/languages/Modifications.french.php

Rechercher :


?>


Ajouter Avant :


$txt['code'] = 'Code ';
$txt['code_select'] = 'Sélectionner';


Themes/default/style.css

Chercher :


/* A code block - maybe even PHP. */
.code
{
color: #000000;
background-color: #dddddd;
font-family: "courier new", "times new roman", monospace;
font-size: x-small;
line-height: 1.3em;
/* Put a nice border around it. */
border: 1px solid #000000;
margin: 1px auto 1px auto;
padding: 1px;
width: 99%;
/* Don't wrap its contents, and show scrollbars. */
white-space: nowrap;
overflow: auto;
/* Stop after about 24 lines, and just show a scrollbar. */
max-height: 24em;
}
/* The "Quote:" and "Code:" header parts... */
.quoteheader, .codeheader
{
color: #000000;
text-decoration: none;
font-style: normal;
font-weight: bold;
font-size: x-small;
line-height: 1.2em;
}


Remplacer par :


/* A code block - maybe even PHP. */
code
{
color: #000000;
background-color: #dddddd;
display: block;
font-family: "courier new", "times new roman", monospace;
font-size: x-small;
line-height: 1.3em;
/* Put a nice border around it. */
border: 1px solid #000000;
margin: 1px auto 1px auto;
padding: 1px;
width: 99%;
overflow: auto;
white-space: nowrap;
/* Stop after about 24 lines, and just show a scrollbar. */
max-height: 24em;
}
/* The "Quote:" and "Code:" header parts... */
.quoteheader, .codeheader
{
color: #000000;
text-decoration: none;
font-style: normal;
font-weight: bold;
font-size: x-small;
line-height: 1.2em;
width: 100%;
}
/* For links to change the code stuff... */
.codeoperation
{
font-weight: normal;
}
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

lance_yien

#5
Lainaus käyttäjältä: maximus23 - lokakuu 01, 2009, 07:35:20 AP
Voici ma solution testée et éprouvée :)

Merci maximus23, tu me donne un espoir :)

Malheureusement ça n'affiche pas l'option chez moi.

Thème testé "Default" et "Dilder Multicolor"

Edité pour ajouter ceci:

les données du .css n'influent pas: pas d'encadrement ni de couleur de fond

maximus23

Bonsoir,

J'ai refait le test plusieurs fois et ici tout est ok :)

Tu es sur de n'avoir rien oublié ? tu as bien mis le script ? etc ?

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

GravuTrad

à le faire en dûr autant le faire en mod....
On a toujours besoin d'un plus petit que soi! (Petit!Petit!)


Think about Search function before posting.
Pensez à la fonction Recherche avant de poster.

maximus23

Bonsoir,

Lance_yien avait demandé sans mod donc voilà :) Si j'ai le temps je le ferai :)

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

GravuTrad

c'est justement à lance_yien que je disais ça lol...pour essayer de le convaincre que c'est mieux en mod lol...

car là le changement de code fait est clairement la base d'un mod lol...
On a toujours besoin d'un plus petit que soi! (Petit!Petit!)


Think about Search function before posting.
Pensez à la fonction Recherche avant de poster.

maximus23

Bonsoir,

Voilà j'ai ficelé cela en mod expérimental .Si quelqu'un à du local pour tester ce serait une bonne chose  :) Bien raffraîchir la page après installation pour réinitialiser le Js :)



Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

maximus23

Lainaus käyttäjältä: lance_yien - lokakuu 01, 2009, 10:01:09 AP
Lainaus käyttäjältä: maximus23 - lokakuu 01, 2009, 07:35:20 AP
Voici ma solution testée et éprouvée :)

Merci maximus23, tu me donne un espoir :)

Malheureusement ça n'affiche pas l'option chez moi.

Thème testé "Default" et "Dilder Multicolor"

Edité pour ajouter ceci:

les données du .css n'influent pas: pas d'encadrement ni de couleur de fond

Les données n'influent pas car tu n'as pas raffraîchis ta page et vidé ton cache pour prendre en compte les modifications :)

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

lance_yien

Salut vous deux,

Lainaus käyttäjältä: GravuTrad - lokakuu 01, 2009, 05:42:43 IP
c'est justement à lance_yien que je disais ça lol...pour essayer de le convaincre que c'est mieux en mod lol...

car là le changement de code fait est clairement la base d'un mod lol...

J'avais dit si possible :)
--

Lainaus käyttäjältä: maximus23 - lokakuu 01, 2009, 07:35:37 IP
Bonsoir,

Voilà j'ai ficelé cela en mod expérimental .Si quelqu'un à du local pour tester ce serait une bonne chose  :) Bien raffraîchir la page après installation pour réinitialiser le Js :)

J'ai annulé toutes les modifications manuelles et je l'ai installé. Il fonctionne TRÈS BIEN

Encore, MERCI ;)

GravuTrad

tu peux peut être le soumettre à la team smf maximus non?
On a toujours besoin d'un plus petit que soi! (Petit!Petit!)


Think about Search function before posting.
Pensez à la fonction Recherche avant de poster.

lance_yien

Lainaus käyttäjältä: GravuTrad - lokakuu 02, 2009, 04:28:11 AP
tu peux peut être le soumettre à la team smf maximus non?

Excellente idée :)
--

Si ça peut rendre service: chez moi, j'étais obligé de vider les caches IE  et FF pour que ça prenne effet.

Bon courage!

maximus23

Bonsoir,

Cela peut se faire mais bon le mod est ficelé entre deux corrections donc il n'est pas très soigné pour être proposé pour le moment à la Team :) Toujours cet éternel manque de temps :)

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

Advertisement: