33var searchResults = [ ] ;
44var pluginData ;
55
6+ function versionCompare ( v1 , v2 , options ) {
7+ var lexicographical = options && options . lexicographical ,
8+ zeroExtend = options && options . zeroExtend ,
9+ v1parts = v1 . split ( '.' ) ,
10+ v2parts = v2 . split ( '.' ) ;
11+
12+ function isValidPart ( x ) {
13+ return ( lexicographical ? / ^ \d + [ A - Z a - z ] * $ / : / ^ \d + $ / ) . test ( x ) ;
14+ }
15+
16+ if ( ! v1parts . every ( isValidPart ) || ! v2parts . every ( isValidPart ) ) {
17+ return NaN ;
18+ }
19+
20+ if ( zeroExtend ) {
21+ while ( v1parts . length < v2parts . length ) v1parts . push ( "0" ) ;
22+ while ( v2parts . length < v1parts . length ) v2parts . push ( "0" ) ;
23+ }
24+
25+ if ( ! lexicographical ) {
26+ v1parts = v1parts . map ( Number ) ;
27+ v2parts = v2parts . map ( Number ) ;
28+ }
29+
30+ for ( var i = 0 ; i < v1parts . length ; ++ i ) {
31+ if ( v2parts . length == i ) {
32+ return 1 ;
33+ }
34+
35+ if ( v1parts [ i ] == v2parts [ i ] ) {
36+ continue ;
37+ }
38+ else if ( v1parts [ i ] > v2parts [ i ] ) {
39+ return 1 ;
40+ }
41+ else {
42+ return - 1 ;
43+ }
44+ }
45+
46+ if ( v1parts . length != v2parts . length ) {
47+ return - 1 ;
48+ }
49+
50+ return 0 ;
51+ }
52+
653function fetchData ( ) {
7- fetch ( 'https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json' ) . then ( function ( response ) {
8- return response . text ( ) . then ( function ( text ) {
9- // Remove Comments
10- var rawdata = text . replace ( / [ / s ] [ \/ ] \B .+ / g, "" ) ;
11- console . log ( rawdata ) ;
12- // Parse Data
13- var channel = JSON . parse ( rawdata ) ;
14- pluginData = [ ] ;
15- channel . forEach ( function ( item ) {
16- fetch ( item ) . then ( function ( response ) {
17- return response . json ( ) . then ( function ( json ) {
18- pluginData . push ( json [ 0 ] ) ;
19- console . log ( json [ 0 ] ) ;
20- search ( true ) ;
21- } ) ;
22- } ) ;
23- } ) ;
24- } ) ;
54+ fetch ( 'https://raw.githubusercontent.com/micro-editor/plugin-channel/master/channel.json' ) . then ( function ( response ) {
55+ return response . text ( ) . then ( function ( text ) {
56+ // Remove Comments
57+ var rawdata = text . replace ( / [ / s ] [ \/ ] \B .+ / g, "" ) ;
58+ console . log ( rawdata ) ;
59+ // Parse Data
60+ var channel = JSON . parse ( rawdata ) ;
61+ pluginData = [ ] ;
62+ channel . forEach ( function ( item ) {
63+ fetch ( item ) . then ( function ( response ) {
64+ return response . json ( ) . then ( function ( json ) {
65+ pluginData . push ( json [ 0 ] ) ;
66+ console . log ( json [ 0 ] ) ;
67+ search ( true ) ;
68+ } ) ;
69+ } ) ;
70+ } ) ;
71+ } ) ;
2572} ) ;
2673}
2774
2875function search ( collapse ) {
29- switch ( document . querySelector ( 'input[name="searchby"]:checked' ) . value ) {
30- case 'Name' :
31- console . log ( 'Search by Name' ) ;
32- searchResults = pluginData . filter ( function ( item ) {
33- return item . Name . includes ( document . getElementById ( 'keyword' ) . value ) ;
34- } ) ;
35- console . log ( searchResults ) ;
36- showResults ( searchResults , collapse ) ;
37- break ;
38- case 'Description' :
39- console . log ( 'Search by Description' ) ;
40- searchResults = pluginData . filter ( function ( item ) {
41- return item . Description . includes ( document . getElementById ( 'keyword' ) . value ) ;
42- } ) ;
43- console . log ( searchResults ) ;
44- showResults ( searchResults , collapse ) ;
45- break ;
46- case 'Tags' :
47- console . log ( 'Search by Tags' ) ;
48- searchResults = pluginData . filter ( function ( item ) {
49- return item . Tags . includes ( document . getElementById ( 'keyword' ) . value ) ;
50- } ) ;
51- console . log ( searchResults ) ;
52- showResults ( searchResults , collapse ) ;
53- break ;
54- }
76+ switch ( document . querySelector ( 'input[name="searchby"]:checked' ) . value ) {
77+ case 'Name' :
78+ console . log ( 'Search by Name' ) ;
79+ searchResults = pluginData . filter ( function ( item ) {
80+ return item . Name . includes ( document . getElementById ( 'keyword' ) . value ) ;
81+ } ) ;
82+ console . log ( searchResults ) ;
83+ showResults ( searchResults , collapse ) ;
84+ break ;
85+ case 'Description' :
86+ console . log ( 'Search by Description' ) ;
87+ searchResults = pluginData . filter ( function ( item ) {
88+ return item . Description . includes ( document . getElementById ( 'keyword' ) . value ) ;
89+ } ) ;
90+ console . log ( searchResults ) ;
91+ showResults ( searchResults , collapse ) ;
92+ break ;
93+ case 'Tags' :
94+ console . log ( 'Search by Tags' ) ;
95+ searchResults = pluginData . filter ( function ( item ) {
96+ return item . Tags . includes ( document . getElementById ( 'keyword' ) . value ) ;
97+ } ) ;
98+ console . log ( searchResults ) ;
99+ showResults ( searchResults , collapse ) ;
100+ break ;
101+ }
55102}
56103
57104function showResults ( results , collapsed ) {
58- var table = document . getElementById ( 'results' ) ;
59- table . innerHTML = '' ;
60- var collapseStr = "panel-collapse collapse" ;
61- if ( ! collapsed ) {
62- collapseStr += " in" ;
63- }
105+ var table = document . getElementById ( 'results' ) ;
106+ table . innerHTML = '' ;
107+ var collapseStr = "panel-collapse collapse" ;
108+ if ( ! collapsed ) {
109+ collapseStr += " in" ;
110+ }
64111
65112 function separate_with_commas ( tar_array ) {
66113 let results = "" ;
@@ -74,7 +121,7 @@ function showResults(results, collapsed) {
74121 return results ;
75122 }
76123
77- results . forEach ( function ( item ) {
124+ results . forEach ( function ( item ) {
78125 // The displayed tag(s)
79126 let display_item_tag = separate_with_commas ( item . Tags ) ;
80127 // The displayed version(s)
@@ -83,6 +130,7 @@ function showResults(results, collapsed) {
83130 let display_item_require = '' ;
84131 let current_requires = [ ] ;
85132 let requires_len = 0 ;
133+ let latestVers = "0.0.0"
86134
87135 // Handle multiple versions in repo.json
88136 for ( let i = 0 ; i < item . Versions . length ; i ++ ) {
@@ -114,6 +162,10 @@ function showResults(results, collapsed) {
114162 // Linebreak so we display them below eachother
115163 display_item_require += '\n' ;
116164 }
165+
166+ if ( versionCompare ( latestVers , item . Versions [ i ] . Version ) < 0 ) {
167+ latestVers = item . Versions [ i ] . Version ;
168+ }
117169 }
118170
119171 // If there's only a single version, don't show the "All versions: " thing
@@ -124,6 +176,11 @@ function showResults(results, collapsed) {
124176 display_item_allversions += '</p>' ;
125177 }
126178
127- table . innerHTML += '<div class="panel panel-default">\n <div class="panel-heading" role="tab" id="h-' + item . Name + '">\n <h4 class="panel-title">\n <a role="button" data-toggle="collapse" data-parent="#results"\n href="#c-' + item . Name + '" aria-controls="c-' + item . Name + '">\n ' + item . Name + ' ' + item . Versions [ item . Versions . length - 1 ] . Version + '\n </a>\n </h4>\n </div>\n <div id="c-' + item . Name + '" class="' + collapseStr + '" role="tabpanel" aria-labelledby="h-' + item . Name + '">\n <div class="panel-body">\n <p>' + item . Description + '</p>\n <p><span class="glyphicon glyphicon-tags" aria-hidden="true"></span> ' + display_item_tag + display_item_allversions + display_item_require + '</p>\n <p>To install this plugin, open micro from your CLI,\n press [Crtl + E] then run the command line below.\n Once you are done, restart micro.</p>\n <div class="well">> plugin install ' + item . Name + '</div>\n </div>\n </div>\n </div>' ;
128- } ) ;
179+ var website = "" ;
180+ if ( item . Website != undefined ) {
181+ website = '<a href="' + item . Website + '">' + item . Website + '</a><br>' ;
182+ }
183+
184+ table . innerHTML += '<div class="panel panel-default">\n <div class="panel-heading" role="tab" id="h-' + item . Name + '">\n <h4 class="panel-title">\n <a role="button" data-toggle="collapse" data-parent="#results"\n href="#c-' + item . Name + '" aria-controls="c-' + item . Name + '">\n ' + item . Name + ' ' + latestVers + '\n </a>\n </h4>\n </div>\n <div id="c-' + item . Name + '" class="' + collapseStr + '" role="tabpanel" aria-labelledby="h-' + item . Name + '">\n <div class="panel-body">\n <p>' + item . Description + '</p>\n' + website + '\n <p><span class="glyphicon glyphicon-tags" aria-hidden="true"></span> ' + display_item_tag + display_item_allversions + display_item_require + '</p>\n <p>To install this plugin, run the following command from your CLI</p>\n <div class="well"><code>$ micro -plugin install ' + item . Name + '</code></div>\n </div>\n </div>\n </div>' ;
185+ } ) ;
129186}
0 commit comments