[yocto] [patchwork][PATCH 3/3] series.js: add patch-selection-checkbox control functions

Jose Lamego jose.a.lamego at linux.intel.com
Mon Feb 27 17:25:35 PST 2017


This change adds control functions for individual and multiple
selection checkboxes.

[YOCTO #10822]

Signed-off-by: Jose Lamego <jose.a.lamego at linux.intel.com>
---
 htdocs/js/series.js | 145 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 125 insertions(+), 20 deletions(-)

diff --git a/htdocs/js/series.js b/htdocs/js/series.js
index bd75790..c4bbb0e 100644
--- a/htdocs/js/series.js
+++ b/htdocs/js/series.js
@@ -1,27 +1,47 @@
 $(document).ready(function(){
     $('[data-toggle="tooltip"]').tooltip()
     revTab=document.getElementById('revs-list')
-    coverView=document.getElementById('cover-letter-view'),
-    patchView=document.getElementById('patch-view'),
+    coverView=document.getElementById('cover-letter-view')
+    patchView=document.getElementById('patch-view')
     patchList=document.getElementById('patches-list')
-
+    patchesInput=$( "input[name^='patches']" )
+    seriesForms=document.getElementById('seriesForm')
+    var patches = new Array()
+    if ($( patchesInput[0] ).value){
+        patches=json_decode($( patchesInput[0] ).value, true)
+    }
+    else{
+        patches=[]
+    }
     revTab.style.border='none'
     revTab.style.background='transparent'
     revTab.style.padding='15px'
     coverView.style.display='block'
     patchView.style.display='none'
     patchList.style.display='none'
+    seriesForms.style.display='none'
 
     document.getElementById('cover-letter-tab').onclick=function(){
         coverView.style.display='block'
         patchView.style.display='none'
         patchList.style.display='none'
+        patches=[]
+        for (i=0; i<patchesInput.length; ++i){
+            $( patchesInput[i] ).prop('value', JSON.stringify(patches))
+        }
     }
 
     document.getElementById('patches-tab').onclick=function(){
         coverView.style.display='none'
         patchList.style.display='block'
         patchView.style.display="none"
+        patches=[]
+        for (i=0; i<patchesInput.length; ++i){
+            $( patchesInput[i] ).prop('value', "")
+        }
+        uncheck_allSel()
+        uncheck_allInput()
+        seriesForms.style.display='none'
     }
 
     $('#revs-list').on('change', function(e){
@@ -31,34 +51,119 @@ $(document).ready(function(){
         jQuery('.tab-content div#'+this.value+'.tab-pane.fade').
         addClass(' in active')
         patchView.style.display='none'
+        uncheck_allSel()
+        uncheck_allInput()
+        patches=[]
+        for (i=0; i<patchesInput.length; ++i){
+            $( patchesInput[i] ).prop('value', "")
+        }
+        seriesForms.style.display='none'
     })
 
     $('.patch-link').on('click', function(){
         var pa=this.getAttribute("data-url")
-        var curr_rev=document.getElementById('revs-list').value
         pa=pa.match(/\d+/)[0]
         coverView.style.display='none'
+        patchList.style.display='none'
         patchView.style.display='block'
         patchView.innerHTML=
         '<p style="text-align:center;">Loading patch...</p>'
-        $("#patch-view").load(
-            this.getAttribute("data-url") + " #patch-body", function() {
-                forms=document.forms
-                for (i=0; i<document.forms.length; i++){
-                    var n=(i + 1)
-                    var patch_field=document.createElement("input")
-                    patch_field.type="hidden"
-                    patch_field.name="patch"
-                    patch_field.value=pa
-                    var div=document.createElement("div")
-                    var this_form=document.forms.item(i)
-                    if (typeof this_form !== "undefined"){
-                        this_form.appendChild(div)
-                        div.appendChild(patch_field)
-                    }
+        uncheck_allInput()
+        uncheck_allSel()
+        patches=[]
+        for (i=0; i<patchesInput.length; ++i){
+            $( patchesInput[i] ).prop('value', "")
+        }
+        seriesForms.style.display='none'
+        $("#patch-view").load(this.getAttribute("data-url") + " #patch-body", 
+                              function(){
+            $( '#patch-view form' ).append(
+                    '<input type="hidden" name="patches" value="['+pa+']"/>')
+        })
+    })
+
+    $( "input[name^='patch_id']" ).change(function(){
+        patchView.style.display="none"
+        uncheck_allSel()
+        var p_id=$(this).attr('name').replace('patch_id:', '')
+        if ($(this).prop('checked')){
+            insert_patchId(p_id)
+            for (i=0; i<patchesInput.length; ++i){
+                $( patchesInput[i] ).prop('value', JSON.stringify(patches))
+            }
+            seriesForms.style.display='block'
+        }
+        else{
+            remove_patchId(p_id)
+            if (patches==""){
+                for (i=0; i<patchesInput.length; ++i){
+                    $( patchesInput[i] ).prop('value', "")
+                }
+                seriesForms.style.display='none'
+            }
+            else{
+                for (i=0; i<patchesInput.length; ++i){
+                    $( patchesInput[i] ).prop('value', JSON.stringify(patches))
                 }
             }
+        }
+    })
+
 
-        )
+    $( "input[name$='sel-all']" ).change(function(){
+        rev=this.getAttribute("name")
+        rev=rev.match(/\d+/)[0]
+        uncheck_allInput()
+        patches=[]
+        boxes=$( "input[name^='patch_id']" )
+        if ( $(this).prop('checked') ){
+            for (i=0; i<boxes.length; ++i){
+                if (boxes[i].getAttribute("data-rev")==rev){
+                    p_id=boxes[i].getAttribute("name")
+                    p_id=p_id.match(/\d+/)[0]
+                    $(boxes[i]).prop('checked', true)
+                    insert_patchId(p_id)
+                }
+                seriesForms.style.display='block'
+            }
+            for (i=0; i<patchesInput.length; ++i){
+                $( patchesInput[i] ).prop('value', JSON.stringify(patches))
+            }
+        }
+        else{
+            seriesForms.style.display='none'
+            for (i=0; i<patchesInput.length; ++i){
+                $( patchesInput[i] ).prop('value', "")
+            }
+        }
     })
+
+    function insert_patchId(id){
+        if (!patches.includes(id)){
+            patches.push(id)
+        }
+    }
+
+    function remove_patchId(id){
+        if (patches.includes(id)){
+            index=patches.indexOf(id)
+            patches.splice(index, 1)
+       }
+    }
+
+    function uncheck_allInput(){
+        boxes=$( "input[name^='patch_id']" )
+        for (i=0; i<boxes.length; ++i){
+            $(boxes[i]).prop("checked", false)
+        }
+    }
+
+    function uncheck_allSel(){
+        sels=$( "input[name$='sel-all']" )
+        for (i=0; i<sels.length; ++i){
+            $(sels[i]).prop("checked", false)
+        }
+
+    }
+
 })
-- 
2.7.4




More information about the yocto mailing list