@@ -2,6 +2,8 @@ const PREFIX_EDIT = "edit-";
22const PREFIX_REMOVE = "remove-" ;
33const PREFIX_SAVE = "save-" ;
44const PREFIX_CANCEL = "cancel-" ;
5+ const PREFIX_DOWN = "down-"
6+ const PREFIX_UP = "up-"
57const MODE_NEW = "new" ;
68const MODE_EDIT = "edit" ;
79
@@ -28,6 +30,13 @@ function removeClass(ele,cls)
2830 }
2931}
3032
33+ Array . prototype . move = function ( from , to ) {
34+ if ( from >= 0 && from < this . length && to >= 0 && to < this . length )
35+ {
36+ this . splice ( to , 0 , this . splice ( from , 1 ) [ 0 ] ) ;
37+ }
38+ } ;
39+
3140function getId ( fullString , prefixToRemove )
3241{
3342 return parseInt ( fullString . substring ( prefixToRemove . length ) ) ;
@@ -109,17 +118,60 @@ async function displayPresets()
109118 row . remove ( ) ;
110119 } ;
111120
112- for ( let i = 0 ; i < presets . length ; i ++ )
121+ let presetCount = presets . length ;
122+ for ( let i = 0 ; i < presetCount ; i ++ )
113123 {
114- let presetIndex = i + 1 ;
115- console . log ( "(display) Add item " + presetIndex + ": " + presets [ i ] . name ) ;
124+ let presetNum = i + 1 ;
125+ let isFirst = ( i == 0 ) ;
126+ let isLast = ( i == presetCount - 1 ) ;
127+ console . log ( "(display) Add item " + presetNum + ": " + presets [ i ] . name ) ;
128+
129+ let myId = presets [ i ] . id ;
116130
117131 // Make the row, the annoying but safe way
118132 let tr = document . createElement ( "tr" ) ;
119133 tr . className = "presetItem" ;
120134
135+ let tdP = document . createElement ( "td" ) ;
136+
137+ let imgDown = document . createElement ( "img" ) ;
138+ imgDown . width = 12 ;
139+ imgDown . height = 12 ;
140+ if ( isLast )
141+ {
142+ imgDown . src = "images/arrow_none.png" ;
143+ }
144+ else
145+ {
146+ imgDown . src = "images/arrow_down.png" ;
147+ imgDown . title = "Move Down" ;
148+ imgDown . id = PREFIX_DOWN + i ;
149+ imgDown . addEventListener ( 'click' , moveDown ) ;
150+ }
151+ tdP . appendChild ( imgDown ) ;
152+
153+ tdP . appendChild ( document . createTextNode ( " " ) ) ;
154+
155+ let imgUp = document . createElement ( "img" ) ;
156+ imgUp . width = 12 ;
157+ imgUp . height = 12 ;
158+ if ( isFirst )
159+ {
160+ imgUp . src = "images/arrow_none.png" ;
161+ }
162+ else
163+ {
164+ imgUp . src = "images/arrow_up.png" ;
165+ imgUp . title = "Move Up" ;
166+ imgUp . id = PREFIX_UP + i ;
167+ imgUp . addEventListener ( 'click' , moveUp ) ;
168+ }
169+ tdP . appendChild ( imgUp ) ;
170+
171+ tr . appendChild ( tdP ) ;
172+
121173 let tdK = document . createElement ( "td" ) ;
122- tdK . textContent = "Alt+" + presetIndex ;
174+ tdK . textContent = "Alt+" + presetNum ;
123175 tr . appendChild ( tdK ) ;
124176
125177 let tdW = document . createElement ( "td" ) ;
@@ -138,14 +190,14 @@ async function displayPresets()
138190
139191 let btnE = document . createElement ( "button" ) ;
140192 btnE . type = "button" ;
141- btnE . id = PREFIX_EDIT + presets [ i ] . id ;
193+ btnE . id = PREFIX_EDIT + myId ;
142194 btnE . textContent = "Edit" ;
143195 btnE . addEventListener ( 'click' , editPreset ) ;
144196 tdA . appendChild ( btnE ) ;
145197
146198 let btnR = document . createElement ( "button" ) ;
147199 btnR . type = "button" ;
148- btnR . id = PREFIX_REMOVE + presets [ i ] . id ;
200+ btnR . id = PREFIX_REMOVE + myId ;
149201 btnR . textContent = "Remove" ;
150202 btnR . addEventListener ( 'click' , removePreset ) ;
151203 tdA . appendChild ( btnR ) ;
@@ -215,7 +267,7 @@ async function editPreset(e)
215267 let tr = e . target . parentElement . parentElement ;
216268
217269 // Replace values with editable versions
218- let tdW = tr . children [ 1 ]
270+ let tdW = tr . children [ 2 ]
219271 let inW = document . createElement ( "input" ) ;
220272 inW . type = "text" ;
221273 inW . id = "editWidth" ;
@@ -225,7 +277,7 @@ async function editPreset(e)
225277 tdW . textContent = "" ;
226278 tdW . appendChild ( inW ) ;
227279
228- let tdH = tr . children [ 2 ]
280+ let tdH = tr . children [ 3 ]
229281 let inH = document . createElement ( "input" ) ;
230282 inH . type = "text" ;
231283 inH . id = "editHeight" ;
@@ -235,7 +287,7 @@ async function editPreset(e)
235287 tdH . textContent = "" ;
236288 tdH . appendChild ( inH ) ;
237289
238- let tdN = tr . children [ 3 ]
290+ let tdN = tr . children [ 4 ]
239291 let inN = document . createElement ( "input" ) ;
240292 inN . type = "text" ;
241293 inN . id = "editName" ;
@@ -246,7 +298,7 @@ async function editPreset(e)
246298 tdN . appendChild ( inN ) ;
247299
248300 // Offer a different set of actions
249- let tdA = tr . children [ 4 ] ;
301+ let tdA = tr . children [ 5 ] ;
250302 tdA . textContent = "" ;
251303
252304 let btnS = document . createElement ( "button" ) ;
@@ -263,7 +315,7 @@ async function editPreset(e)
263315 btnC . addEventListener ( 'click' , cancelEdits ) ;
264316 tdA . appendChild ( btnC ) ;
265317
266- let tdS = tr . children [ 5 ] ;
318+ let tdS = tr . children [ 6 ] ;
267319 tdS . id = "editStatus" ;
268320
269321 e . preventDefault ( ) ;
@@ -329,6 +381,34 @@ async function removePreset(e)
329381 e . preventDefault ( ) ;
330382}
331383
384+ async function moveDown ( e )
385+ {
386+ let myPos = getId ( e . target . id , PREFIX_DOWN ) ;
387+ console . log ( "(move) Moving down from " + myPos ) ;
388+
389+ let storage = await browser . storage . local . get ( "presets" ) ;
390+ let presets = storage . presets ;
391+ presets . move ( myPos , myPos + 1 ) ;
392+ await browser . storage . local . set ( { "presets" : presets } ) ;
393+ displayPresets ( ) ;
394+
395+ e . preventDefault ( ) ;
396+ }
397+
398+ async function moveUp ( e )
399+ {
400+ let myPos = getId ( e . target . id , PREFIX_UP ) ;
401+ console . log ( "(move) Moving up from " + myPos ) ;
402+
403+ let storage = await browser . storage . local . get ( "presets" ) ;
404+ let presets = storage . presets ;
405+ presets . move ( myPos , myPos - 1 ) ;
406+ await browser . storage . local . set ( { "presets" : presets } ) ;
407+ displayPresets ( ) ;
408+
409+ e . preventDefault ( ) ;
410+ }
411+
332412window . addEventListener ( "resize" , showCurrentSize ) ;
333413document . addEventListener ( "DOMContentLoaded" , displayPresets ) ;
334414document . querySelector ( "#addNew" ) . addEventListener ( "click" , addPreset ) ;
0 commit comments