@@ -3,19 +3,20 @@ import style from './style.scss';
3
3
import tag from 'html-tag-js' ;
4
4
5
5
const loader = acode . require ( 'loader' ) ;
6
-
6
+ const select = acode . require ( 'select' ) ;
7
+ const cAlert = acode . require ( 'alert' ) ;
7
8
8
9
class AddPackage {
9
10
10
11
async init ( $page ) {
11
12
let command = {
12
- name : "Add Package " ,
13
- description : "Add Package " ,
13
+ name : "Module Adder " ,
14
+ description : "Module Adder " ,
14
15
exec : this . run . bind ( this ) ,
15
16
}
16
17
editorManager . editor . commands . addCommand ( command ) ;
17
- $page . id = 'acode-plugin-packageAdder ' ;
18
- $page . settitle ( "Add Package " ) ;
18
+ $page . id = 'acode-plugin-moduleAdder ' ;
19
+ $page . settitle ( "Module Adder " ) ;
19
20
this . $page = $page ;
20
21
this . $style = tag ( 'style' , {
21
22
textContent : style ,
@@ -94,30 +95,41 @@ class AddPackage {
94
95
field4 . append ( ...[ lb4 , this . filesList ] ) ;
95
96
this . $plugPage2 . append ( headerDiv ) ;
96
97
this . $plugPage2 . append ( mainDiv ) ;
98
+ this . footer = tag ( 'div' , {
99
+ className : "footer" ,
100
+ } ) ;
97
101
this . $backBtn = tag ( 'button' , {
98
102
textContent : "Back" ,
103
+ className : "backBtn" ,
99
104
} ) ;
100
- this . $plugPage2 . append ( this . $backBtn ) ;
105
+ this . $addLibBtn = tag ( 'button' , {
106
+ textContent : "Add Library" ,
107
+ className : "addLibBtn" ,
108
+ } ) ;
109
+ this . footer . append ( ...[ this . $backBtn , this . $addLibBtn ] ) ;
110
+ this . $plugPage2 . append ( this . footer ) ;
101
111
this . $backBtn . onclick = this . backToPage1 . bind ( this ) ;
112
+ this . $addLibBtn . onclick = this . addLibrary . bind ( this ) ;
113
+ this . versionSelector . onchange = this . changeVersion . bind ( this ) ;
102
114
document . head . append ( this . $style ) ;
103
115
const onhide = this . $page . onhide ;
104
116
this . $page . onhide = ( ) => {
105
- this . $plugPage2 . classList . toggle ( 'hide' ) ;
106
- this . $plugPage1 . classList . toggle ( 'hide' ) ;
117
+ this . $plugPage2 . classList . add ( 'hide' ) ;
118
+ this . $plugPage1 . classList . add ( 'hide' ) ;
107
119
}
108
120
onhide ( ) ;
109
121
}
110
122
111
123
async run ( ) {
112
- this . loadLibraries ( 'https://api.cdnjs.com/libraries?fields=filename,description,github&limit=10' ) ;
113
- this . $plugPage1 . classList . toggle ( 'hide' ) ;
114
124
this . $page . show ( ) ;
125
+ this . loadLibraries ( 'https://api.cdnjs.com/libraries?fields=filename,description,github&limit=10' ) ;
126
+ this . $plugPage1 . classList . remove ( 'hide' ) ;
115
127
}
116
128
117
129
async loadLibraries ( url ) {
118
130
try {
119
131
this . pkgLists . innerHTML = '' ;
120
- loader . create ( 'Loading' , 'Fetching data from api ' ) ;
132
+ loader . create ( 'Loading' , 'Fetching data... ' ) ;
121
133
const response = await fetch ( url ) ;
122
134
let data = await response . json ( ) ;
123
135
loader . destroy ( ) ;
@@ -152,7 +164,7 @@ class AddPackage {
152
164
li . onclick = this . pkgDetails . bind ( this , obj . name ) ;
153
165
} ) ;
154
166
} catch ( e ) {
155
- window . toast ( e , 5000 ) ;
167
+ this . closePlugin ( ) ;
156
168
}
157
169
}
158
170
@@ -165,30 +177,76 @@ class AddPackage {
165
177
166
178
let url = `https://api.cdnjs.com/libraries/${ libNme } ?fields=name,author,description,filename,version,versions,repository,license,assets` ;
167
179
try {
168
- loader . create ( 'Loading' , 'Fetching data from api ' ) ;
180
+ loader . create ( 'Loading' , 'Fetching data... ' ) ;
169
181
const response = await fetch ( url ) ;
170
182
let data = await response . json ( ) ;
171
183
loader . destroy ( ) ;
172
- this . $plugPage1 . classList . toggle ( 'hide' ) ;
173
- this . $plugPage2 . classList . toggle ( 'hide' ) ;
184
+ this . $plugPage1 . classList . add ( 'hide' ) ;
185
+ this . $plugPage2 . classList . remove ( 'hide' ) ;
174
186
this . libName . textContent = data . name ;
175
187
this . descrTxt . textContent = data . description ;
176
188
this . lisenceTxt . textContent = data . license ;
177
189
this . authrTxt . textContent = data . author ;
178
190
179
- for ( let i = 0 ; i < data . versions . length ; i ++ ) {
180
- if ( data . versions [ i ] == data . version ) {
181
- this . versionSelector . innerHTML += `<option value="${ data . versions [ i ] } " selected>${ data . versions [ i ] } </option>` ;
191
+ const filteredVersions = data . versions . filter ( version => {
192
+ return ! version . includes ( 'alpha' ) && ! version . includes ( 'beta' ) && ! version . includes ( 'rc' ) && ! version . includes ( 'csp' ) && ! version . includes ( 'migration' ) ;
193
+ } ) ;
194
+ let last50 = filteredVersions . slice ( - 50 ) ;
195
+
196
+ for ( let i = 0 ; i < last50 . length ; i ++ ) {
197
+ if ( last50 [ i ] == data . version ) {
198
+ this . versionSelector . innerHTML += `<option value="${ last50 [ i ] } " selected>${ last50 [ i ] } </option>` ;
182
199
} else {
183
- this . versionSelector . innerHTML += `<option value="${ data . versions [ i ] } ">${ data . versions [ i ] } </option>` ;
200
+ this . versionSelector . innerHTML += `<option value="${ last50 [ i ] } ">${ last50 [ i ] } </option>` ;
184
201
}
185
202
}
203
+ this . filesList . innerHTML = "" ;
186
204
let files = data . assets [ 0 ] . files ;
187
205
for ( let i = 0 ; i < files . length ; i ++ ) {
188
- this . filesList . innerHTML += `<li>${ files [ i ] } </li>` ;
206
+ const list = tag ( 'li' ) ;
207
+ const filesCheckBox = tag ( 'input' , {
208
+ type : "checkbox" ,
209
+ className : "filesCheckBox" ,
210
+ value : files [ i ] ,
211
+ } ) ;
212
+ const filesLabel = tag ( 'p' , {
213
+ textContent : files [ i ] ,
214
+ className : "filesLabel"
215
+ } ) ;
216
+ list . append ( ...[ filesCheckBox , filesLabel ] ) ;
217
+ this . filesList . append ( list ) ;
218
+ }
219
+ } catch ( e ) {
220
+ this . closePlugin ( ) ;
221
+ }
222
+ }
223
+
224
+ async changeVersion ( ) {
225
+ let pkg_nme = this . libName . textContent ;
226
+ let selectedVersion = this . versionSelector . value ;
227
+
228
+ let url = `https://api.cdnjs.com/libraries/${ pkg_nme } /${ selectedVersion } ` ;
229
+ try {
230
+ loader . create ( 'Loading' , 'Fetching files...' ) ;
231
+ const response = await fetch ( url ) ;
232
+ let data = await response . json ( ) ;
233
+ loader . destroy ( ) ;
234
+ this . filesList . innerHTML = '' ;
235
+ for ( let i = 0 ; i < data . files . length ; i ++ ) {
236
+ const list = tag ( 'li' ) ;
237
+ const filesCheckBox = tag ( 'input' , {
238
+ type : "checkbox" ,
239
+ className : "filesCheckBox" ,
240
+ value : data . files [ i ] ,
241
+ } ) ;
242
+ const filesLabel = tag ( 'p' , {
243
+ textContent : data . files [ i ] ,
244
+ } ) ;
245
+ list . append ( ...[ filesCheckBox , filesLabel ] ) ;
246
+ this . filesList . append ( list ) ;
189
247
}
190
248
} catch ( e ) {
191
- window . toast ( e , 5000 ) ;
249
+ this . closePlugin ( ) ;
192
250
}
193
251
}
194
252
@@ -197,10 +255,28 @@ class AddPackage {
197
255
this . $plugPage1 . classList . toggle ( 'hide' ) ;
198
256
}
199
257
258
+ closePlugin ( ) {
259
+ this . $page . hide ( ) ;
260
+ cAlert ( 'Error' , 'Connection error, check your internet and Try Again!' ) ;
261
+ loader . destroy ( ) ;
262
+ }
263
+
264
+ async addLibrary ( ) {
265
+ const addLibTypeSelector = await select ( 'Select Type' , [ "Api" , "Download Files" ] , { default : "Api" , } ) ;
266
+ let filesCheckbox = document . querySelectorAll ( ".filesCheckBox" ) ;
267
+ let filesArray = [ ] ;
268
+ for ( var i = 0 ; i < filesCheckbox . length ; i ++ ) {
269
+ if ( filesCheckbox [ i ] . checked ) {
270
+ filesArray . push ( filesCheckbox [ i ] . value ) ;
271
+ }
272
+ }
273
+ window . toast ( filesArray , 4000 ) ;
274
+ }
275
+
200
276
async destroy ( ) {
201
277
let command = {
202
- name : "Add Package " ,
203
- description : "Add Package " ,
278
+ name : "Module Adder " ,
279
+ description : "Module Adder " ,
204
280
exec : this . run . bind ( this ) ,
205
281
}
206
282
editorManager . editor . commands . removeCommand ( command ) ;
0 commit comments