LSformElement :: select_object : Add ordered feature
authorBenjamin Renard <brenard@easter-eggs.com>
Wed, 21 Jan 2015 15:35:23 +0000 (16:35 +0100)
committerBenjamin Renard <brenard@easter-eggs.com>
Wed, 21 Jan 2015 15:35:23 +0000 (16:35 +0100)
doc/conf/LSattribute/LSattr_html/LSattr_html_select_object.docbook
public_html/images/default/down.png [new file with mode: 0644]
public_html/images/default/up.png [new file with mode: 0644]
public_html/includes/class/class.LSformElement_select_object.php
public_html/includes/js/LSformElement_select_object_field.js

index b0cd3c1..0fb33f1 100644 (file)
@@ -13,6 +13,7 @@
      'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',
      'value_attribute' => '[Nom de l'attribut clé des LSobjects]'
    ),
+   'ordered' => [Booléen],
    'sort' => [Booléen],
    'sortDirection' => '[ASC|DESC]'
 ),]]>
 </varlistentry>
 
 <varlistentry>
+  <term>ordered</term>
+  <listitem>
+    <simpara>Booléen définissant si la liste des objets choisis doit être
+    ordonnable ou non (Faux par défaut). Cela aura pour effet d'activer une
+    fonctionnalité dynamique de l'interface permettant de remonter ou descendre
+    dans la liste les objets choisis.</simpara>
+    <note><simpara>Cette fonctionnalité désactive automatiquement le trie des
+    objets à l'affichage.</simpara></note>
+  </listitem>
+</varlistentry>
+
+<varlistentry>
   <term>sort</term>
   <listitem>
     <simpara>Booléen définissant si la liste des objets choisis doit être
diff --git a/public_html/images/default/down.png b/public_html/images/default/down.png
new file mode 100644 (file)
index 0000000..7f5acc2
Binary files /dev/null and b/public_html/images/default/down.png differ
diff --git a/public_html/images/default/up.png b/public_html/images/default/up.png
new file mode 100644 (file)
index 0000000..276836e
Binary files /dev/null and b/public_html/images/default/up.png differ
index 75f3af7..efd880d 100644 (file)
@@ -67,6 +67,9 @@ class LSformElement_select_object extends LSformElement {
           'object_type' => $this -> selectableObject,
           'addBtn' => _('Modify'),
           'deleteBtns' => _('Delete'),
+          'up_label' => _('Move up'),
+          'down_label' => _('Move down'),
+          'ordered' => (($this -> params['html_options']['ordered'])?1:0),
           'multiple' => (($this -> params['multiple'])?1:0),
           'filter64' => (($this -> params['html_options']['selectable_object']['filter'])?base64_encode($this -> params['html_options']['selectable_object']['filter']):''),
           'noValueLabel' => _('No set value'),
@@ -90,7 +93,7 @@ class LSformElement_select_object extends LSformElement {
       }
     }
 
-    if (!isset($this -> params['html_options']['sort']) || $this -> params['html_options']['sort']) {
+    if ((!isset($this -> params['html_options']['sort']) || $this -> params['html_options']['sort']) && !$this -> params['html_options']['ordered']) {
       uasort($this -> values,array($this,'_sortTwoValues'));
     }
 
index 911e98f..7c98f63 100644 (file)
@@ -17,6 +17,7 @@ var LSformElement_select_object_field = new Class({
       
       // Delete btns
       this.ul.getElements('a.LSformElement_select_object').each(function(a){
+        this.addOrderedBtns(a);
         this.addDeleteBtn(a);
       },this);
       
@@ -62,6 +63,45 @@ var LSformElement_select_object_field = new Class({
       varLSdefault.addHelpInfo(btn,'LSformElement_select_object','delete');
     },
     
+    addOrderedBtns: function(a) {
+      if (!this.params.ordered) {
+        return true;
+      }
+      var btn_down = new Element('img');
+      btn_down.addClass('btn');
+      btn_down.setProperties({
+        src:    varLSdefault.imagePath('down'),
+        alt:    this.params.down_label
+      });
+      btn_down.addEvent('click',this.onDownBtnClick.bind(this,btn_down));
+      btn_down.injectAfter(a);
+
+      var btn_up = new Element('img');
+      btn_up.addClass('btn');
+      btn_up.setProperties({
+        src:    varLSdefault.imagePath('up'),
+        alt:    this.params.up_label
+      });
+      btn_up.addEvent('click',this.onUpBtnClick.bind(this,btn_up));
+      btn_up.injectAfter(a);
+    },
+
+    onUpBtnClick: function(btn) {
+      var li = btn.getParent();
+      var prev = li.getPrevious('li');
+      if ($type(prev) && !prev.hasClass('LSformElement_select_object_addBtn')) {
+        li.inject(prev,'before');
+      }
+    },
+
+    onDownBtnClick: function(btn) {
+      var li = btn.getParent();
+      var next = li.getNext('li');
+      if ($type(next)) {
+        li.inject(next,'after');
+      }
+    },
+
     addSingleAddBtn: function(insideEl) {
       this.addBtn = new Element('img');
       this.addBtn.setProperty('src',varLSdefault.imagePath('modify'));
@@ -190,6 +230,7 @@ var LSformElement_select_object_field = new Class({
         input.addClass('LSformElement_select_object');
         input.injectAfter(a);
         
+        this.addOrderedBtns(a);
         this.addDeleteBtn(a);
         
         li.injectInside(this.ul);