Difference between revisions of "M.js"

From ProgZoo
Jump to navigation Jump to search
(Created page with " let $i = id => document.getElementById(id); let $q = (p,context) => Array.from((context||document).querySelectorAll(p)); function sort(ls,f){ let ret = [...ls]; if (f==...")
 
Line 1: Line 1:
  let $i = id => document.getElementById(id);
  /* returns a new element for a given tag with properties and children */
  let $q = (p,context) => Array.from((context||document).querySelectorAll(p));
/* Example use...
function sort(ls,f){
  document.body.append($m('div',{style:'border:solid;padding:1ex;'},[
  let ret = [...ls];
  'This is a button ',
  if (f===undefined){
  $m('button',{onclick:()=>alert('Hello World')},'Say Hello')
    ret.sort();
  ]));
  }else{
    ret.sort((a,b)=>f(a)>=f(b));
  }
  return ret;
}
  let range = n => [...new Array(n)].map((_,i)=>i);
  function $m(tag,props,children){
  function $m(tag,props,children){
   let args = [...arguments];
   let args = [...arguments];
Line 38: Line 32:
   return ret;
   return ret;
  }
  }
/* renaming */
let $i = id => document.getElementById(id);
/* querySelectorAll as a list */
let $q = (p,context) => Array.from((context||document).querySelectorAll(p));
/* returns a copy sorted by key function f */
function sort(ls,f){
  let ret = [...ls];
  if (f===undefined){
    ret.sort();
  }else{
    ret.sort((a,b)=>f(a)>=f(b));
  }
  return ret;
}
/* like python... returns a list of integers */
let range = n => [...new Array(n)].map((_,i)=>i);

Revision as of 15:46, 19 November 2023

/* returns a new element for a given tag with properties and children */
/* Example use...
document.body.append($m('div',{style:'border:solid;padding:1ex;'},[
  'This is a button ',
  $m('button',{onclick:()=>alert('Hello World')},'Say Hello')
]));
function $m(tag,props,children){
 let args = [...arguments];
 let ret = document.createElement(args.shift());
 for(let a of args){
   if (typeof a === "string")
     ret.innerHTML = a;
   else if (Array.isArray(a)){
     for(let c of a){
       if (typeof c === 'string'){
           ret.appendChild(document.createTextNode(c))
       }else{
           ret.appendChild(c);
       }
     }
   }else{
     for(let k in a){
       if (k === 'text'){
         ret.innerText = a[k];
       }else if (k.startsWith('on'))
         ret.addEventListener(k.substring(2),a[k]);
       else
         ret.setAttribute(k,props[k]);
     }
   }
 }
 return ret;
}
/* renaming */
let $i = id => document.getElementById(id);
/* querySelectorAll as a list */
let $q = (p,context) => Array.from((context||document).querySelectorAll(p));
/* returns a copy sorted by key function f */
function sort(ls,f){
 let ret = [...ls];
 if (f===undefined){
   ret.sort();
 }else{
   ret.sort((a,b)=>f(a)>=f(b));
 }
 return ret;
}
/* like python... returns a list of integers */
let range = n => [...new Array(n)].map((_,i)=>i);