1
- const siteVersion = "2.2 .0" ; // site version is different from skript version
1
+ const siteVersion = "2.3 .0" ; // site version is different from skript version
2
2
const ghAPI = "https://api.github.com/repos/SkriptLang/Skript" ;
3
3
4
4
// ID Scroll
@@ -88,25 +88,38 @@ document.querySelectorAll(".new-element").forEach((e) => {
88
88
} )
89
89
90
90
// <> Search Bar
91
- const versionComparePattern = / .* ?( \d \. \d (?: \. \d | ) ) ( \+ | - | ) .* / gi ;
92
- const versionPattern = / ? v (?: e r s i o n | ) : ( \d \ .\d (?: \ .\d | - (?: b e t a | a l p h a | d e v ) \d * | ) ) ( \+ | - | ) / gi;
91
+ const versionComparePattern = / .* ?( \d + ) . ( \d + ) (?: . ( \d + ) ) ? .* / i ;
92
+ const versionPattern = / ? v (?: e r s i o n | ) : ( \d + .\d + (?: .\d + ) ? ) (?: - [ ^ \s + - ] + ) ? ( [ + - ] ) ? / gi;
93
93
const typePattern = / ? t (?: y p e | ) : ( \w + ) / gi;
94
94
const newPattern = / ? i s : ( n e w ) / gi;
95
95
const resultsFoundText = "result(s) found" ;
96
96
97
- function versionCompare ( base , target ) { // Return -1, 0, 1
98
- base = base . replaceAll ( versionComparePattern , "$1" ) . replaceAll ( / [ ^ 0 - 9 ] / gi, "" ) ;
99
- target = target . replaceAll ( versionComparePattern , "$1" ) . replaceAll ( / [ ^ 0 - 9 ] / gi, "" ) ;
97
+ function versionParse ( version ) {
98
+ const matches = versionComparePattern . exec ( version ) ;
99
+ if ( matches == null )
100
+ return null ;
101
+ return [
102
+ parseInt ( matches [ 1 ] ) , // major
103
+ parseInt ( matches [ 2 ] ) , // minor
104
+ matches [ 3 ] !== undefined ? parseInt ( matches [ 3 ] ) : 0 // patch
105
+ ]
106
+ }
100
107
101
- base = parseInt ( base ) < 100 ? parseInt ( base ) * 10 : parseInt ( base ) ; // convert ten's to hundred's to fix (2.5.1+ not triggering 2.6 by converting 26 -> 260)
102
- target = parseInt ( target ) < 100 ? parseInt ( target ) * 10 : parseInt ( target ) ;
108
+ function versionCompare ( baseArr , targetArr ) { // Return -1, 0, 1
109
+ // compare in order of major.minor.patch
110
+ for ( let i = 0 ; i <= 2 ; i ++ ) {
111
+ let baseVer = baseArr [ i ] ;
112
+ let targetVer = targetArr [ i ] ;
113
+ // compare versions (target in relation to base)
114
+ if ( targetVer > baseVer )
115
+ return 1 ;
116
+ if ( targetVer < baseVer )
117
+ return - 1 ;
118
+ // equal, try next parts
119
+ }
103
120
104
- if ( target > base )
105
- return 1
106
- if ( target == base )
107
- return 0
108
- if ( target < base )
109
- return - 1
121
+ // they must be equal
122
+ return 0 ;
110
123
}
111
124
112
125
var searchBar ;
@@ -141,7 +154,7 @@ if (content) {
141
154
let options = "<select id='search-version' name='versions' id='versions' onchange='checkVersionFilter()'></select>"
142
155
content . insertAdjacentHTML ( 'afterbegin' , `<span>${ options } </span>` ) ;
143
156
options = document . getElementById ( "search-version" ) ;
144
-
157
+
145
158
getApiValue ( null , "skript-versions" , "tags?per_page=83&page=2" , ( data , isCached ) => { // 83 and page 2 matters to filter dev branches (temporary solution)
146
159
if ( isCached )
147
160
data = data . split ( "," ) ;
@@ -153,7 +166,7 @@ if (content) {
153
166
} else {
154
167
tag = data [ i ] [ "name" ] ;
155
168
}
156
- tags . push ( tag . replaceAll ( / ( .* ) - ( d e v | b e t a | a l p h a ) .* / gi, "$1" ) ) ;
169
+ tags . push ( tag . replaceAll ( / ( .* ? ) - .* / gi, "$1" ) ) ;
157
170
}
158
171
159
172
tags = [ ...new Set ( tags ) ] // remove duplicates
@@ -195,7 +208,7 @@ function checkVersionFilter() {
195
208
}
196
209
197
210
function searchNow ( value = "" ) {
198
- if ( value != "" ) // Update searchBar value
211
+ if ( value !== "" ) // Update searchBar value
199
212
searchBar . value = value ;
200
213
201
214
let allElements = document . querySelectorAll ( ".item-wrapper" ) ;
@@ -211,11 +224,14 @@ function searchNow(value = "") {
211
224
let verExec = versionPattern . exec ( searchValue ) ;
212
225
version = verExec [ 1 ] ;
213
226
if ( verExec . length > 2 ) {
214
- versionAndUp = verExec [ 2 ] == "+" == true ;
215
- versionAndDown = verExec [ 2 ] == "-" == true ;
227
+ versionAndUp = verExec [ 2 ] === "+" ;
228
+ versionAndDown = verExec [ 2 ] === "-" ;
216
229
}
217
230
searchValue = searchValue . replaceAll ( versionPattern , "" ) // Don't include filters in the search
218
231
}
232
+ let versionArr = null ;
233
+ if ( version !== "" )
234
+ versionArr = versionParse ( version ) ;
219
235
220
236
// Type
221
237
let filterType ;
@@ -227,7 +243,7 @@ function searchNow(value = "") {
227
243
// News
228
244
let filterNew ;
229
245
if ( searchValue . match ( newPattern ) ) {
230
- filterNew = newPattern . exec ( searchValue ) [ 1 ] == "new" ;
246
+ filterNew = newPattern . exec ( searchValue ) [ 1 ] === "new" ;
231
247
searchValue = searchValue . replaceAll ( newPattern , "" )
232
248
}
233
249
@@ -247,22 +263,27 @@ function searchNow(value = "") {
247
263
248
264
// Version check
249
265
let versionFound ;
250
- if ( version != "" ) {
251
- versionFound = versionCompare ( version , document . querySelectorAll ( `#${ e . id } .item-details:nth-child(2) td:nth-child(2)` ) [ 0 ] . textContent ) == 0 ;
252
-
253
- if ( versionAndUp || versionAndDown ) {
254
- let versions = document . querySelectorAll ( `#${ e . id } .item-details:nth-child(2) td:nth-child(2)` ) [ 0 ] . textContent . split ( "," ) ;
255
- for ( const v in versions ) { // split on ',' without space in case some version didn't have space and versionCompare will handle it
256
- if ( versionAndUp ) {
257
- if ( versionCompare ( version , versions [ v ] ) == 1 ) {
258
- versionFound = true ;
259
- break ; // Performance
260
- }
261
- } else if ( versionAndDown ) {
262
- if ( versionCompare ( version , versions [ v ] ) == - 1 ) {
263
- versionFound = true ;
264
- break ; // Performance
265
- }
266
+ if ( versionArr !== null ) { // if we parsed a version
267
+ const versions = document . querySelectorAll ( `#${ e . id } .item-details:nth-child(2) td:nth-child(2)` ) [ 0 ] . innerHTML . split ( / , | < b r \/ ? > / i) ;
268
+ for ( const v of versions ) {
269
+ const targetArr = versionParse ( v ) ;
270
+ if ( targetArr === null ) // treat as version not matching
271
+ continue ;
272
+ let result = versionCompare ( versionArr , targetArr ) ;
273
+ if ( versionAndUp ) {
274
+ if ( result >= 0 ) {
275
+ versionFound = true ;
276
+ break ;
277
+ }
278
+ } else if ( versionAndDown ) {
279
+ if ( result < 0 ) { // exclude current version
280
+ versionFound = true ;
281
+ break ;
282
+ }
283
+ } else {
284
+ if ( result === 0 ) {
285
+ versionFound = true ;
286
+ break ;
266
287
}
267
288
}
268
289
}
0 commit comments