@@ -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 ( ) {
9399super . _bindEvent ( ) ;
94100/** Implement binding events */
95101let 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 ) {
99105var value = $ ( this ) . val ( ) ;
100106if ( 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 ( ) {
118125var 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 ) {
122136var keyA = $ ( a ) . data ( 'key' ) ;
@@ -147,6 +161,16 @@ define([
147161return 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 ) {
361386var item = new com_String ( ) ;
362- item . appendFormatLine ( '<div data-key="{1}" data-installed="{2}">' , 'vp-pm-item' , key , info . installed === true ?'1' :'0' ) ;
387+ item . appendFormatLine ( '<div data-key="{1}" data-installed="{2}" data-seq="{3}" >' , 'vp-pm-item' , key , info . installed === true ?'1' :'0' , index ) ;
363388item . appendFormatLine ( '<div class="{0}" title="{1}">' , 'vp-pm-item-header' , ( info . path ?info . path :'' ) ) ;
364389item . appendFormatLine ( '<label>{0}</label>' , key ) ;
365390if ( info . installed === true ) {
@@ -401,17 +426,25 @@ define([
401426$ ( this . wrapSelector ( '.vp-pm-table' ) ) . html ( '' ) ;
402427
403428let 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+
404437let loadingSpinner = new LoadingSpinner ( $ ( this . wrapSelector ( '.vp-popup-body' ) ) ) ;
405438vpKernel . getPackageList ( packageList ) . then ( function ( resultObj ) {
406439let { result} = resultObj ;
407440let packageInfo = JSON . parse ( result ) ;
408441
409442// load code list
410443var innerFuncCode = new com_String ( ) ;
411- Object . keys ( packageInfo ) . forEach ( key => {
444+ Object . keys ( packageInfo ) . forEach ( ( key , idx ) => {
412445let info = packageInfo [ key ] ; // installed, version, path
413446if ( info ) {
414- var item = that . renderPackageItem ( key , info ) ;
447+ var item = that . renderPackageItem ( key , info , idx ) ;
415448innerFuncCode . append ( item ) ;
416449}
417450} ) ;