// @name Admin Tray - Sub Account Navigation for Canvas // @namespace https://github.com/robert-carroll/ccsd-canvas !function(){"use strict";const e={cfg:{recursive:!0},where:".tray-with-space-for-global-nav",root:"self",instance:location.host+"_subacc_tray",depth:0,stack:[],tree:[],html:"",skipd:function(){if(document.currentScript&&document.currentScript.getAttribute("src").split("?skipd=").length>0){var e=document.currentScript.getAttribute("src").split("?skipd=");return 2==e.length?JSON.parse(decodeURIComponent(e[1])):{}}return{}}(),stash:function(t=null,a=null){return null!=t&&null!=a&&(localStorage.setItem(`${e.instance}.page`,t),localStorage.setItem(`${e.instance}.stack`,JSON.stringify(a))),t=parseInt(localStorage.getItem(`${e.instance}.page`)),a=JSON.parse(localStorage.getItem(`${e.instance}.stack`)),$("li#adm-tray-subacctray .rc-progress")&&$("li#adm-tray-subacctray .rc-progress").text(t),{page:null!=t?t:1,stack:null!=a?a:[]}},list_to_tree:(e,t)=>{var a=(t=t||{}).idKey||"id",r=t.parentKey||"parent",n=t.childrenKey||"children",c={};for(let t=0;t";e.depth++;for(let r in t)a+='
  • ',a+=t[r].children.length?'':"",a+=''+t[r].name+"",t[r].children.length&&(a+=this.tree_to_html(t[r].children,t[r].parentid)),a+="
  • ";return a+="",e.depth--,a},append:t=>{if(!document.querySelector(`${e.where} a[href="/accounts"]`))return;let a=document.getElementById("adm-tray-subacctray");a&&a.remove();let r=document.querySelector(`${e.where} ul li:last-child`),n=document.createElement("li");n.id="adm-tray-subacctray",n.className=r.getAttribute("class"),r.parentNode.insertBefore(n,r.nextSibling).insertAdjacentHTML("beforeend",t)}};e.menu=(()=>{if(e.html=localStorage.getItem(e.instance),null==e.html)return;let t=`
    \n
      ${e.html}`;e.append(t),$("ul#admin-tray-sam").delegate("a.toggle","click",function(){$(this).parent().children("ul").slideToggle(250)}),$("ul#admin-tray-sam").find("ul").hide(),$("#admin-tray-sam-search").on("input",function(){$("#admin-tray-sam-results").html("");let t=$.trim($(this).val()),a="^(?=.*\\b"+t.split(/\s+/).join("\\b)(?=.*\\b")+").*$",r=RegExp(a,"i");t.length>=3&&$("a.sub-acc").each(function(){if(r.test($(this).text())){let t,a="",r=$(this).parent("li").attr("data-depth"),n="";e.skipd[r]&&(a="li:eq("+(t=r-e.skipd[r])+")",n=$(this).parents(a).children("a.sub-acc").prop("outerHTML")+" > "),$("#admin-tray-sam-results").append("
    1. "),$("#admin-tray-sam-results li:last").append(n+$(this).prop("outerHTML"))}})}),$("#adm-tray-subacctray a.reload").on("click",function(){confirm("This will clear and reload the menu...\n...updating with any recent changes.\nDo you want to continue?")&&(localStorage.removeItem(e.instance),e.depth=0,e.stack=[],e.tree=[],e.html="",$("li#adm-tray-subacctray").fadeOut("slow",e.init),e.append('0
      '))})}),e.jj_checkPortal=function(t,a){let r=document.getElementById("nav-tray-portal");r?(void 0!==a&&a.disconnect(),new MutationObserver(e.jj_watchTray).observe(r,{childList:!0,subtree:!0})):void 0===a&&new MutationObserver(e.jj_checkPortal).observe(document.body,{childList:!0})},e.jj_watchTray=function(){let t=document.querySelector('#nav-tray-portal a[href="/accounts"]'),a=document.getElementById("adm-tray-subacctray");if(t&&null!=e.html&&!a&&e.menu(),t&&null==e.html&&!a){let t=parseInt(localStorage.getItem(`${e.instance}.page`));e.append(`${t}
      `)}},e.init=(()=>{if(localStorage.getItem(e.instance))localStorage.getItem(e.instance)&&e.menu();else{let r=e.stash();e.stack=r.stack.length>=1?r.stack:e.stack;var t=r.page>1?r.page+1:1,a=$.Deferred();let n=t=>{$.ajax({headers:{accepts:"application/json+canvas-string-ids"},method:"get",dataType:"json",url:`/api/v1/accounts/${e.root}/sub_accounts`,cache:!1,data:{recursive:e.cfg.recursive,per_page:100,page:t}}).done(function(r,c,s){for(let t in r)e.stack.push({id:r[t].id,parentid:r[t].parent_account_id,name:r[t].name,children:null}),!e.root&&r[t].root_account_id&&(e.root=r[t].root_account_id);-1!=s.getResponseHeader("Link").indexOf('rel="next"')?(e.stash(t,e.stack),n(t+1)):a.resolve()})};n(t),a.then(function(){e.stash(0,{}),e.stack.sort(function(e,t){let a=e.name.toLowerCase(),r=t.name.toLowerCase();return ar?1:0}),e.tree=e.list_to_tree(e.stack,{idKey:"id",parentKey:"parentid",childrenKey:"children"});var t=e.tree_to_html(e.tree,e.root);e.html=localStorage.setItem(e.instance,t),e.menu()})}e.jj_checkPortal()}),e.init()}();