Changeset 5959 in spip-zone


Ignore:
Timestamp:
Oct 6, 2006, 10:19:39 PM (15 years ago)
Author:
fil@…
Message:

capacite d'annuler un widget en redaction et d'y revenir ; c'est les widgets (php) qui definissent leur taille, et plus le js, ca permettra d'en avoir des gros pour des tous petits champs (par exemple, un calendrier pour un widget de date, je suppose).

Location:
_plugins_/_dev_/widgets
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_dev_/widgets/action/widgets_html.php

    r5944 r5959  
    5656                        $type = 'ligne';
    5757
     58                // taille du widget
     59                $w = intval($_GET['w']);
     60                $h = intval($_GET['h']);
     61                if ($w<100) $w=100;
     62                if ($w>700) $w=700;
     63                if ($type == 'texte') {
     64                        if ($h<36) $h=36;
     65                }
     66                elseif ($h<12)
     67                        $hx = htmlspecialchars($_GET['em']);
     68                if ($h>700) $h=700; // hauteur maxi d'un textarea -- pas assez ? trop ?
     69
     70                if (!isset($hx)) $hx = $h.'px';
     71                $style = "width:${w}px; height:${hx};";
     72
    5873                $s = spip_query("SELECT ".$regs[2]." AS val FROM spip_".$regs[1]."s
    5974                WHERE id_".$regs[1]."=".$regs[3]);
    6075                if ($t = spip_fetch_array($s)) {
    61                         echo "<form method='post' action='".self()."'>\n";
     76                        echo "<form method='post' action='".self()."' $style>\n";
    6277                        $n = new SecureWidget($regs[0], $t['val']);
    6378                        echo $n->code();
    64                         echo $n->input($type);
     79                        echo inserer_attribut($n->input($type), 'style', $style);
    6580                        echo '<div style="float:right; width:100px">';
    6681                        echo '<div style="position:absolute;">';
  • _plugins_/_dev_/widgets/widgets.js

    r5955 r5959  
    11
    2 url_widgets_html = 'spip.php?action=widgets_html&class=';
     2url_widgets_html = 'spip.php?action=widgets_html';
    33url_widgets_droits = 'spip.php?action=widgets_droits';
    44SEARCHING = '<img src="dist/images/searching.gif" style="float:right;" />';
     
    66$.cancelwidgets = function() {
    77  $(".widget").each(function(){
    8     var html = $(this).attr('orig_html');
    9     if (html != null) {
    10       // enregistrer le widget avec le contenu modifie, si on veut y revenir
    11       $(this).savewidget();
    12       // puis reafficher le contenu initial
    13       $(this).html(html);
     8    if ($(this).attr('orig_html') != null) {
     9      $(this)
     10      .cancelwidget();
    1411    }
    1512    $(this).removeAttr('orig_html');
     
    2522
    2623$.initwidget = function(me) {
    27     // voir si je suis en mode "widget"
    28     if ($(me).attr('orig_html') != null)
    29       return;
     24  // voir si je suis en mode "widget"
     25  if ($(me).attr('orig_html') != null)
     26    return;
    3027
    31     // voir si je dispose deja du widget (ne marche pas)
    32     if ($(me).attr('widget') != null) {
    33       $(me)
    34       .attr('orig_html', $(me).html())
    35       .html($(me).attr('widget'));
    36       // ici reactiver .ajaxForm() etc...
    37       return;
    38     }
     28  $(me)
     29  .attr('orig_html', $(me).html());
    3930
    40     // charger le formulaire
     31  // voir si je dispose deja du widget
     32  if ($(me).attr('widget') != null) {
     33    // alors on restitue le widget enregistre
    4134    $(me)
    42     .attr('orig_html', $(me).html())
     35    .html($(me).attr('widget'))
     36    // avec sa valeur eventuellement modifiee
     37    .find('.widget-active')[0].value = $(me).attr('valuewidget');
     38    $(me)
     39    .activatewidget();
     40  }
     41  // sinon charger le formulaire
     42  else {
     43    $(me)
    4344    .append(SEARCHING); // icone d'attente
    44     $.get(url_widgets_html+encodeURIComponent(me.className),
    45        function (c) {
    46          var w,h;
    47          w = $(me).width();
    48          h = $(me).height();
    49          $(me)
    50          .html(c)
    51          .find('form')
    52            .ajaxForm(function(c){
    53              $(me)
    54              .html(c.responseText)
    55              .removeAttr('orig_html');
    56            }).onesubmit(function(){
    57              $("form", me)
    58              .append(SEARCHING); // icone d'attente
    59            })
    60            .find(".widget-active")
    61              .css('font', 'inherit') // pour safari
    62              .css({
    63                  'fontSize': $(me).css('fontSize'),
    64                  'fontFamily': $(me).css('fontFamily')
    65              })
    66              // resize widget to fit current space, and a bit more if too small
    67              .each(function() {
    68                if (w<100) w=100;
    69                if (w>700) w=700;
    70                if (this.nodeName.toUpperCase()=='TEXTAREA') {
    71                  if (h<36) h=36;
    72                  h+='px';
    73                } else {
    74                  if (h<12) h=$(me).css('fontSize');
    75                  else h+='px';
    76                }
    77                $(this).css({"width":w+'px',"height":h});
    78              })
    79              .each(function(n){
    80                if (n==0)
    81                  this.focus();
    82              })
    83              .keypress(function(e){
    84                if (e.keyCode == 27) {
    85                  $(me)
    86                  .savewidget()
    87                  .html($(me).attr('orig_html'))
    88                  .removeAttr('orig_html');
    89                }
    90              })
    91            .end()
    92            .find(".cancel_widget")
    93              .click(function(){
    94                $(me)
    95                .savewidget()
    96                .html($(me).attr('orig_html')) // retablir le contenu d'origine
    97                .removeAttr('orig_html');
    98                return false;
    99              })
    100            .end()
    101          .end()
    102          ;
    103        }
    104      );
     45    $.get(url_widgets_html
     46      + '&w=' + $(me).width()
     47      + '&h=' + $(me).height()
     48      + '&em=' + $(me).css('fontSize')
     49      + '&class=' + encodeURIComponent(me.className)
     50     ,
     51      function (c) {
     52        $(me)
     53        .html(c)
     54        .attr('widget',c)
     55        .activatewidget();
     56      }
     57    );
    10558  }
     59}
    10660
    10761$.clickwidget = function(e){
     
    11064}
    11165
    112 // TODO recuperer le HTML "actuel" d'un widget (y compris modifications du contenu) et le sauver dans attr('widget')
    113 $.fn.savewidget = function() {
     66// recupere le contenu "actuel" d'un widget pour recuperer les donnees
     67// si on reouvre le widget apres l'avoir ferme
     68$.fn.cancelwidget = function() {
    11469  this.each(function(){
     70    $(this)
     71    .attr('valuewidget', $('.widget-active',this)[0].value)
     72    .html($(this).attr('orig_html'))
     73    .removeAttr('orig_html');
     74  });
     75  return this;
     76}
     77
     78
     79$.fn.activatewidget = function() {
     80  this.each(function(){
     81    var me = this;
     82    var w,h;
     83    $(me)
     84    .find('form')
     85      .ajaxForm(function(d){
     86        $(me)
     87        .html(d.responseText)
     88        .removeAttr('orig_html');
     89      }).onesubmit(function(){
     90        $("form", me)
     91        .append(SEARCHING); // icone d'attente
     92      })
     93      .find(".widget-active")
     94        .css('font', 'inherit') // pour safari
     95        .css({
     96            'fontSize': $(me).css('fontSize'),
     97            'fontFamily': $(me).css('fontFamily')
     98        })
     99        .each(function(n){
     100          if (n==0)
     101            this.focus();
     102        })
     103        .keypress(function(e){
     104          if (e.keyCode == 27) {
     105            $(me)
     106            .cancelwidget();
     107          }
     108        })
     109      .end()
     110      .find(".cancel_widget")
     111        .click(function(){
     112          $(me)
     113          .cancelwidget();
     114          return false;
     115        })
     116      .end()
     117    .end();
    115118  });
    116119  return this;
Note: See TracChangeset for help on using the changeset viewer.