mirror of
https://github.com/espruino/Espruino.git
synced 2025-12-08 19:06:15 +00:00
Remove internal menu object `l` as argument to callback function. This removes a potential for memory leaks and should otherwise have no impact. As no app on the main BangleApps repo seems to use the option. See https://github.com/espruino/Espruino/issues/2567. closes #2567
8 lines
3.6 KiB
JavaScript
8 lines
3.6 KiB
JavaScript
(function(p){function y(a,b){var l=a.step||1;if(!a.noList&&void 0!==a.min&&void 0!==a.max&&20>(a.max-a.min)/l)E.showScroller({h:40,c:(a.max+l-a.min)/l,back:t,remove:n.remove,scrollMin:-24,scroll:-24,draw:(h,d)=>{if(0>h)return g.setFont("12x20").setFontAlign(-1,0).drawString("\x00\f\f\x81\x00\xff\xff\xff\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\xff\xff\xff "+b,d.x+12,d.y+40-12);g.setColor(g.theme.bg2).fillRect({x:d.x+4,y:d.y+2,w:d.w-8,h:d.h-4,r:5});
|
|
h=h*l+a.min;g.setColor(g.theme.fg2).setFont("12x20").setFontAlign(-1,0).drawString(a.format?a.format(h,1):h,d.x+12,d.y+20);g.drawImage(atob(h==a.value?"FBSBAAH4AH/gHgeDgBww8MY/xmf+bH/jz/88//PP/zz/88f+Nn/mY/xjDww4AcHgeAf+AB+A":"FBSBAAH4AH/gHgeDgBwwAMYABmAAbAADwAA8AAPAADwAA8AANgAGYABjAAw4AcHgeAf+AB+A"),d.x+d.w-32,d.y+20-10)},select:function(h){if(!(0>h)){Bangle.buzz(20);a.value=a.min+h*l;if(a.onchange)a.onchange(a.value);u.scroll=q.scroller.scroll;t()}}});else{var c=Bangle.appRect,e=a.value;g.reset().clearRect(c);
|
|
g.setFont("12x20").setFontAlign(0,0).drawString("\x00\f\f\x81\x00\xff\xff\xff\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\xff\xff\xff "+b,c.x+c.w/2,c.y+12);function h(){var f=c.x+c.w/2,m=12+c.y+c.h/2,w=a.format?a.format(e,2):e;g.reset().setColor(g.theme.bg2).fillRect({x:c.x+24,y:c.y+36,w:c.w-48,h:c.h-48,r:5});g.setColor(g.theme.fg2).setFontVector(Math.min(30,100*(c.w-52)/g.setFontVector(100).stringWidth(w))).setFontAlign(0,0).drawString(w,f,m);g.fillPoly([f,m-45,f+15,m-30,
|
|
f-15,m-30]).fillPoly([f,m+45,f+15,m+30,f-15,m+30])}function d(f){if(f)e-=(f||1)*(a.step||1),void 0!==a.min&&e<a.min&&(e=a.wrap?a.max:a.min),void 0!==a.max&&e>a.max&&(e=a.wrap?a.min:a.max),h();else{a.value=e;if(a.onchange)a.onchange(a.value);u.scroll=q.scroller.scroll;t()}}h();var k=0;Bangle.setUI({mode:"custom",back:t,remove:n.remove,redraw:h,drag:f=>{k+=f.dy;for(f.b||(k=0);32<Math.abs(k);)0<k?(k-=32,d(1)):(k+=32,d(-1)),Bangle.buzz(20)},touch:(f,m)=>{Bangle.buzz(20);82>m.y?d(-1):142<m.y?d(1):d()}})}}
|
|
function t(){q.scroller=E.showScroller(u)}if(void 0===p)return g.clearRect(Bangle.appRect),Bangle.setUI();var n=p[""]||{};n.title||(n.title="Menu");var v=n.back||p["< Back"],r=Object.keys(p).filter(a=>""!==a&&"< Back"!=a);r.forEach(a=>{a=p[a];"object"!=typeof a||"boolean"!=typeof a.value||a.format||(a.format=b=>"\x00"+atob(b?"EhKBAH//v/////////////5//x//j//H+eP+Mf/A//h//z//////////3//g":"EhKBAH//v//8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA///3//g"))});var q={draw:()=>q.scroller.draw(),scroller:void 0};
|
|
let x;var u={h:40,c:r.length,scrollMin:-24,scroll:null!=(x=n.scroll)?x:-24,back:v,remove:n.remove,draw:(a,b)=>{if(0>a)return g.setColor(g.theme.fg).setFont("12x20").setFontAlign(-1,0).drawString("\x00\f\f\x81\x00\xff\xff\xff\x00\x00\x00\x00\x0f\xff\xff\xf0\x00\x00\x00\x00\xff\xff\xff "+n.title,b.x+12,b.y+40-12);g.setColor(g.theme.bg2).fillRect({x:b.x+4,y:b.y+2,w:b.w-8,h:b.h-4,r:5});g.setColor(g.theme.fg2).setFont("12x20");var l=24,c=p[r[a]];if("object"==typeof c){var e=c.value;
|
|
c.format&&(e=c.format(e));g.stringMetrics(e).width>b.w/2&&(e=g.wrapString(e,b.w/2).join("\n"));g.setFontAlign(1,0).drawString(e,b.x+b.w-8,b.y+20);l+=g.stringWidth(e)}else"function"==typeof c&&(g.drawImage(atob("CRKBAGA4Hg8DwPB4HgcDg8PB4eHg8HAwAA=="),b.x+b.w-21,b.y+20-9),l+=16);var k;a=null!=(k=c&&c.title)?k:r[a];k=g.wrapString(a,b.w-l);1<k.length&&(k=g.setFont("6x15").wrapString(a,b.w-l));g.setFontAlign(-1,0).drawString(k.join("\n"),b.x+12,b.y+20)},select:function(a){if(0>a)return v&&v();var b=p[r[a]];
|
|
Bangle.buzz(20);if("function"==typeof b)b();else if("object"==typeof b)if("number"==typeof b.value)y(b,r[a]);else{"boolean"==typeof b.value&&(b.value=!b.value);if(b.onchange)b.onchange(b.value);q.scroller.isActive()&&q.scroller.drawItem(a)}}};t();return q}) |