@@ -17,10 +17,11 @@ define([
1717 'vp_base/js/com/com_util' ,
1818 'vp_base/js/com/com_Const' ,
1919 'vp_base/js/com/com_String' ,
20+ 'vp_base/js/com/component/SuggestInput' ,
2021 'vp_base/js/com/component/PopupComponent' ,
2122 'vp_base/js/com/component/FileNavigation' ,
2223 'vp_base/js/com/component/LoadingSpinner'
23- ] , function ( ifHtml , ifCss , com_util , com_Const , com_String , PopupComponent , FileNavigation , LoadingSpinner ) {
24+ ] , function ( ifHtml , ifCss , com_util , com_Const , com_String , SuggestInput , PopupComponent , FileNavigation , LoadingSpinner ) {
2425
2526 /**
2627 * PackageManager
@@ -89,18 +90,24 @@ define([
8990 }
9091 }
9192
93+ _unbindEvent ( ) {
94+ super . _unbindEvent ( ) ;
95+ $ ( document ) . off ( 'change' , this . wrapSelector ( '.vp-pm-search' ) ) ;
96+ }
97+
9298 _bindEvent ( ) {
9399 super . _bindEvent ( ) ;
94100 /** Implement binding events */
95101 let that = this ;
96102
97103 // search item
98- $ ( this . wrapSelector ( '.vp-pm-search' ) ) . on ( 'change' , function ( evt ) {
104+ $ ( document ) . on ( 'change' , this . wrapSelector ( '.vp-pm-search' ) , function ( evt ) {
99105 var value = $ ( this ) . val ( ) ;
100106 if ( value != '' ) {
101107 $ ( that . wrapSelector ( '.vp-pm-item' ) ) . hide ( ) ;
102108 $ ( that . wrapSelector ( '.vp-pm-item' ) ) . filter ( function ( ) {
103- return $ ( this ) . data ( 'key' ) . search ( value ) >= 0 ;
109+ let key = $ ( this ) . data ( 'key' ) ;
110+ return key . search ( value . toLowerCase ( ) ) >= 0 ;
104111 } ) . show ( ) ;
105112 } else {
106113 $ ( that . wrapSelector ( '.vp-pm-item' ) ) . show ( ) ;
@@ -116,7 +123,14 @@ define([
116123 // sort item
117124 $ ( this . wrapSelector ( '.vp-pm-sort-menu-item' ) ) . on ( 'click' , function ( ) {
118125 var menu = $ ( this ) . data ( 'menu' ) ;
119- if ( menu === 'name' ) {
126+ if ( menu === 'registered' ) {
127+ // sort by name
128+ $ ( that . wrapSelector ( '.vp-pm-item' ) ) . sort ( function ( a , b ) {
129+ var keyA = parseInt ( $ ( a ) . data ( 'seq' ) ) ;
130+ var keyB = parseInt ( $ ( b ) . data ( 'seq' ) ) ;
131+ return keyA > keyB ? 1 : - 1
132+ } ) . appendTo ( $ ( that . wrapSelector ( '.vp-pm-table' ) ) )
133+ } else if ( menu === 'name' ) {
120134 // sort by name
121135 $ ( that . wrapSelector ( '.vp-pm-item' ) ) . sort ( function ( a , b ) {
122136 var keyA = $ ( a ) . data ( 'key' ) ;
@@ -147,6 +161,16 @@ define([
147161 return insA > insB ? 1 : - 1
148162 } ) . appendTo ( $ ( that . wrapSelector ( '.vp-pm-table' ) ) )
149163 }
164+ $ ( that . wrapSelector ( '.vp-pm-sort-menu-box' ) ) . hide ( ) ;
165+ } ) ;
166+
167+ // reload package list
168+ $ ( this . wrapSelector ( '.vp-pm-func-reload' ) ) . on ( 'click' , function ( ) {
169+ // reset search keyword
170+ $ ( that . wrapSelector ( '.vp-pm-search' ) ) . val ( '' ) ;
171+
172+ // load package list
173+ that . loadPackageList ( ) ;
150174 } ) ;
151175
152176 // add package
@@ -355,11 +379,12 @@ define([
355379 *
356380 * @param {String } key
357381 * @param {Object } info installed, version, path
382+ * @param {number } index sequence of initial package list
358383 * @returns
359384 */
360- renderPackageItem ( key , info ) {
385+ renderPackageItem ( key , info , index ) {
361386 var item = new com_String ( ) ;
362- item . appendFormatLine ( '<div class="{0}" data-key="{1}" data-installed="{2}">' , 'vp-pm-item' , key , info . installed === true ?'1' :'0' ) ;
387+ item . appendFormatLine ( '<div class="{0}" data-key="{1}" data-installed="{2}" data-seq="{3}" >' , 'vp-pm-item' , key , info . installed === true ?'1' :'0' , index ) ;
363388 item . appendFormatLine ( '<div class="{0}" title="{1}">' , 'vp-pm-item-header' , ( info . path ?info . path :'' ) ) ;
364389 item . appendFormatLine ( '<label>{0}</label>' , key ) ;
365390 if ( info . installed === true ) {
@@ -401,17 +426,25 @@ define([
401426 $ ( this . wrapSelector ( '.vp-pm-table' ) ) . html ( '' ) ;
402427
403428 let packageList = Object . keys ( this . packageLib ) ;
429+
430+ // set auto search
431+ let searchInput = new SuggestInput ( ) ;
432+ searchInput . addClass ( 'vp-pm-search vp-input' ) ;
433+ searchInput . setPlaceholder ( "Search" ) ;
434+ searchInput . setSuggestList ( function ( ) { return packageList ; } ) ;
435+ $ ( this . wrapSelector ( '.vp-pm-search' ) ) . replaceWith ( searchInput . toTagString ( ) ) ;
436+
404437 let loadingSpinner = new LoadingSpinner ( $ ( this . wrapSelector ( '.vp-popup-body' ) ) ) ;
405438 vpKernel . getPackageList ( packageList ) . then ( function ( resultObj ) {
406439 let { result } = resultObj ;
407440 let packageInfo = JSON . parse ( result ) ;
408441
409442 // load code list
410443 var innerFuncCode = new com_String ( ) ;
411- Object . keys ( packageInfo ) . forEach ( key => {
444+ Object . keys ( packageInfo ) . forEach ( ( key , idx ) => {
412445 let info = packageInfo [ key ] ; // installed, version, path
413446 if ( info ) {
414- var item = that . renderPackageItem ( key , info ) ;
447+ var item = that . renderPackageItem ( key , info , idx ) ;
415448 innerFuncCode . append ( item ) ;
416449 }
417450 } ) ;
0 commit comments