3
3
var searchResults = [ ] ;
4
4
var pluginData ;
5
5
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
+
6
53
function 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
+ } ) ;
25
72
} ) ;
26
73
}
27
74
28
75
function 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
+ }
55
102
}
56
103
57
104
function 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
+ }
64
111
65
112
function separate_with_commas ( tar_array ) {
66
113
let results = "" ;
@@ -74,7 +121,7 @@ function showResults(results, collapsed) {
74
121
return results ;
75
122
}
76
123
77
- results . forEach ( function ( item ) {
124
+ results . forEach ( function ( item ) {
78
125
// The displayed tag(s)
79
126
let display_item_tag = separate_with_commas ( item . Tags ) ;
80
127
// The displayed version(s)
@@ -83,6 +130,7 @@ function showResults(results, collapsed) {
83
130
let display_item_require = '' ;
84
131
let current_requires = [ ] ;
85
132
let requires_len = 0 ;
133
+ let latestVers = "0.0.0"
86
134
87
135
// Handle multiple versions in repo.json
88
136
for ( let i = 0 ; i < item . Versions . length ; i ++ ) {
@@ -114,6 +162,10 @@ function showResults(results, collapsed) {
114
162
// Linebreak so we display them below eachother
115
163
display_item_require += '\n' ;
116
164
}
165
+
166
+ if ( versionCompare ( latestVers , item . Versions [ i ] . Version ) < 0 ) {
167
+ latestVers = item . Versions [ i ] . Version ;
168
+ }
117
169
}
118
170
119
171
// If there's only a single version, don't show the "All versions: " thing
@@ -124,6 +176,11 @@ function showResults(results, collapsed) {
124
176
display_item_allversions += '</p>' ;
125
177
}
126
178
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
+ } ) ;
129
186
}
0 commit comments