json-object-editor
Version:
JOE the Json Object Editor | Platform Edition
1 lines • 212 kB
JavaScript
if($c.isMobile()){document.getElementsByTagName('html')[0].className+=' touch'}else{document.getElementsByTagName('html')[0].className+=' no-touch'}window._joeEditingHash=false;var _webworkers=false;var _joeworker;if(!!window.Worker){_webworkers=true}var joe_web_dir='//'+location.hostname+':'+(location.port||((location.protocol=="https:")?443:80))+"/JsonObjectEditor/";if(location&&location.origin=='file://'){joe_web_dir=location.href.slice(0,location.href.lastIndexOf('/')+1)}__docWriter=function(src,type,cancelWrite){var type=type||'js';var html='';switch(type.toLowerCase()){case'js':case'javascript':html+='<script type="text/javascript" src="'+src+'"></script>';break;case'css':case'stylesheet':html+='<link href="'+src+'" rel="stylesheet" type="text/css">';break}if(!cancelWrite){document.write(html)}return html};__loadAdditionalFiles=function(){var bonuses='';if(typeof jQuery=='undefined'){__docWriter(joe_web_dir+"js/libs/jquery-1.11.3.min.js",'js')+__docWriter(joe_web_dir+"js/libs/jquery-ui.min.js")}bonuses+=__docWriter(joe_web_dir+"js/libs/jquery.ui.touch-punch.min.js");if(typeof Craydent=='undefined'||(!Craydent.VERSION||Craydent.VERSION<'1.7.37')){bonuses+=__docWriter(joe_web_dir+"js/libs/craydent-1.8.1.js",'js',true)}document.write(bonuses)};function __require(file,callback){var head=document.getElementsByTagName("head")[0];var script=document.createElement('script');script.src=file;script.type='text/javascript';script.onload=callback;script.onreadystatechange=function(){if(this.readyState=='complete'){callback()}}head.appendChild(script)}function JsonObjectEditor(specs){var self=this;self.initialDocumentTitle=document.title;$c.TEMPLATE_VARS.push({variable:'/textarea',value:'</textarea>'},{variable:'textarea',value:'<textarea>'},{variable:'SERVER',value:'//'+$c.SERVER});initialized=false;var colCount=1;var listMode=false;var gridMode=false;var tableMode=false,tableSpecs;var multiEdit=false;this.VERSION='1.0.1';window._joes=window._joes||[];this.joe_index=window._joes.length;if(!window._joes.length){window._joe=this}this.Error={log:[],add:function(message,error,data){var payload={caller:arguments.callee.caller,callerargs:arguments.callee.caller.arguments,message:message,error:error,stack:new Error(error).stack,data:data,timestamp:(new Date()).toISOString(),_id:cuid()};self.Error.log.push(payload);logit('[error]: '+message)},show:function(){self.show(self.Error.log,{schema:{title:'${message}',idprop:'_id',listView:{title:'<joe-title>${message}</joe-title><joe-subtitle>${timestamp}</joe-subtitle>',listWindowTitle:'Errors'},fields:['error:code','message','stack:code',{name:'data',type:'content',run:function(data,obj){return'<div><pre>'+tryEval(data)+'</pre></div>'}},'callerargs:code','timestamp:guid','_id']}})}};window._joes.push(this);this.Cache={static:{},list:[],lookup:{},clear:function(){self.Cache.lookup={};self.Cache.list=[]},remove:function(id){},get:function(id,specs){var cacheitem=self.Cache.lookup[id];if(cacheitem&&typeof cacheitem.value=="function"&&cacheitem.type=="callback"){return cacheitem.value(cacheitem.data,cacheitem.id)}if(!cacheitem){var obj=self.search(id)[0]||false;if(obj){self.Cache.add(obj,{id:id})return obj}return false}return cacheitem.value},callback:function(id){var cacheitem=self.Cache.lookup[id];if(typeof cacheitem.value=="function"){return cacheitem.value(cacheitem.data,cacheitem.id)}else{logit('cache item is not a function')}},add:function(value,specs){var specs=specs||{};var obj=$.extend({id:specs.id||cuid(),value:value,parent:self.joe_index},specs);self.Cache.list.push(obj.id);self.Cache.lookup[obj.id]=obj;return obj}};this.Cache.set=this.Cache.add;this.history=[];var defaults={localStorage:false,container:'body',joeprofile:{lockedFields:['joeUpdated'],hiddenFields:[]},profiles:{},fields:{},schemas:{'rendering':{title:'HTML Rendering',callback:function(){alert('yo')}}},compact:false,useControlEnter:true,useEscapeKey:false,autoInit:false,dynamicDisplay:($(window).height()<800&&$c.isMobile())?12:20,sans:false,listSubMenu:true,documentTitle:false,style:{inset:true,cards:true},speechRecognition:false};this.specs=$.extend({},defaults,specs||{});if(this.specs.localStorage&&typeof(Storage)==="undefined"){alert('no local storage');this.specs.LocalStorage=false}this.Data={};this.Render={};this.container=$(this.specs.container);this.fields=this.specs.fields;this.Fields={reset:function(propname){var field=self.Fields.get(propname);self.current.object[propname]=field.reset;self.Fields.rerender(propname)}};this.schemas=this.specs.schemas;for(var s in _joe.schemas){_joe.schemas[s].__schemaname=_joe.schemas[s].name=s;_joe.schemas[s]._id=cuid()}this.current={};this.current.clear=function(){self.current.list=null;self.current.subsets=null;self.current.subset=null;self.current.filters={};self.current.fields=[];self.current.schema=null;self.current.object=null;self.current.reset={};self.current.cache={};self.current.title=null;self.current.keyword='';if(_joes.length==1){document.title=self.initialDocumentTitle}};this.defaultProfile=this.specs.defaultProfile||this.specs.joeprofile;this.current.profile=this.defaultProfile;this.ace_editors={};this.Render.stripeColor=function(opt,colorfunc){var color=self.propAsFuncOrValue((colorfunc||opt.stripecolor),opt,null,_jco());var title='';if(color&&$c.isObject(color)){title=' title="'+color.title+'" ';color=color.color}var h='<joe-stripe-color '+title+(color&&'style="background-color:'+color+';"'||'')+'></joe-stripe-color>';return h};this.Render.bgColor=function(opt,colorfunc){var color=self.propAsFuncOrValue((colorfunc||opt.bgcolor),opt,null,_jco());if(color&&$c.isObject(color)){color=color.color}var h='<joe-bg-color '+(color&&'style="background-color:'+color+';"'||'')+'></joe-bg-color>';return h};this.Render.itemCheckbox=function(listItem,schema,specs){var specs=specs||{};var checkbox=self.propAsFuncOrValue(self.getCascadingProp('checkbox',schema));var idprop=specs.idprop||self.getIDProp();if(checkbox){var cbox_prop=checkbox;var cbox_percentage=null;var cbox_title='';if($.type(checkbox)=="object"){cbox_prop=checkbox.prop;cbox_title=checkbox.title||cbox_prop;cbox_percentage=self.propAsFuncOrValue(checkbox.percentage,listItem)}var checked=[true,'true'].contains(listItem[cbox_prop])?'checked':'';checkbox='<joe-checkbox title="'+cbox_title+'" '+'class="'+checked+'"'+'onclick="_joe.checkItem(\''+listItem[idprop]+'\',\''+cbox_prop+'\',null,this)">'+((cbox_percentage!==false&&checkbox.hasOwnProperty('percentage'))?'<joe-checkbox-percentage>'+Math.round(cbox_percentage*100)+'%</joe-checkbox-percentage>':'')+'</joe-checkbox>'}else{checkbox=''}return checkbox}this.init=function(callback){if(initialized){return false}beginLogGroup('JOE init');self.current.clear();var html=self.renderFramework(self.renderEditorHeader()+self.renderEditorContent()+self.renderEditorFooter());self.container.append(html);self.overlay=$('.joe-overlay[data-joeindex='+self.joe_index+']');self.panel=self.overlay.find('.joe-overlay-panel');self.initKeyHandlers();self.Speech.init();self.readHashLink();window.addEventListener("hashchange",function(newH,oldH){var useHash=$GET('!')||location.hash;if(!useHash||self.joe_index!=0||!specs.useHashlink){return false}if(!window._joeEditingHash){self.readHashLink()}},false);var respond_timeout;$(window).on('resize',function(){clearTimeout(respond_timeout);respond_timeout=setTimeout(self.respond,200)});initialized=true;self.respond();endLogGroup();callback&&callback()};this.initKeyHandlers=function(){if(self.specs.useBackButton){window.onkeydown=function(e){var code=e.keyCode var nonBackElements=['input','select','textarea'];var isInputElement=nonBackElements.indexOf(e.target.tagName.toLowerCase())!=-1;if(code==8){if(isInputElement){}else{self.goBack();return false}}else if([37,39,38,40,13,16,17].indexOf(code)==-1){if(e.altKey){switch(code){case 70:self.quickFind();if(e.stopPropagation)e.stopPropagation();if(e.preventDefault)e.preventDefault();break;case 78:self.quickAdd();if(e.stopPropagation)e.stopPropagation();if(e.preventDefault)e.preventDefault();break}}else{if(listMode){var inSearchfield=false;if($(document.activeElement)&&$(document.activeElement)[0]!=$('.joe-submenu-search-field')[0]){self.overlay.find('.joe-submenu-search-field').focus();inSearchfield=true;$('.joe-panel-content-option.keyboard-selected').removeClass('keyboard-selected')}}else{if(e.ctrlKey||e.metaKey){switch(code){case 83:if(self.container.find('.joe-button.joe-quicksave-button').length){self.updateObject(null,null,true);if(e.stopPropagation)e.stopPropagation();if(e.preventDefault)e.preventDefault()}break}}}}}else{var autocompleteField=$('.joe-text-autocomplete.active').length;if(autocompleteField){var sel='.joe-text-autocomplete-option.visible'+'.keyboard-selected';var keyboardSelectedIndex=($(sel).length)?$(sel).index():-1;switch(code){case 38:keyboardSelectedIndex--;if(keyboardSelectedIndex>-1){keyboardSelectOption('.joe-text-autocomplete-option.visible')}break;case 40:keyboardSelectedIndex++;if(keyboardSelectedIndex<$('.joe-text-autocomplete-option.visible').length){keyboardSelectOption('.joe-text-autocomplete-option.visible')}break;case 13:if(keyboardSelectedIndex!=-1){$(sel).click()}break}}if(listMode){if(e.altKey){if(self.current.subsets){var subindex=self.current.subsets.indexOf(self.current.subset)+1;switch(code){case 38:$('joe-subset-option').eq(subindex-1).click();break;case 40:$('joe-subset-option').eq(subindex+1).click();break}}}else{var keyboardSelectedIndex=($('.joe-panel-content-option.keyboard-selected').length)?$('.joe-panel-content-option.keyboard-selected').index():-1;switch(code){case 38:keyboardSelectedIndex--;if(keyboardSelectedIndex>-1){keyboardSelectOption('.joe-panel-content-option',top)}break;case 40:keyboardSelectedIndex++;if(keyboardSelectedIndex<currentListItems.length){keyboardSelectOption('.joe-panel-content-option',top)}break;case 13:if(keyboardSelectedIndex!=-1){$('.joe-panel-content-option.keyboard-selected').find('.joe-panel-content-option-content').click()}break}}}else{if(e.altKey){switch(code){case 219:case 221:var sside=(code==219)?'left':'right';if(self.current.sidebars[sside].content&&!self.current.sidebars[sside].hidden){self.toggleSidebar(sside)}break}}else if(e.ctrlKey){switch(code){case 37:self.previous();break;case 39:self.next();break}}else if(code==13){var ae=$(document.activeElement);if(ae&&ae.is('input')){var fieldobj=ae.parents('.joe-object-field');if(fieldobj.length){try{fieldobj.find('.joe-plus-button').click()}catch(e){self.Error.add('adding new row to objectlist',e)}}}}}function keyboardSelectOption(selector,top){$(selector+'.keyboard-selected').toggleClass('keyboard-selected');var el=$(selector).eq(keyboardSelectedIndex);el.addClass('keyboard-selected');self.overlay.find('.joe-submenu-search-field').blur();el[0].scrollIntoView(top)}}}}};this.getMode=function(){if(listMode){return'list'}return'details'};this.renderFramework=function(content){var style='style-variant1';var html='<joe-overlay class="joe-overlay sans cols-'+colCount+' '+style+' '+((self.specs.compact&&' compact ')||'')+((self.specs.sans&&' sans ')||'')+'" data-joeindex="'+this.joe_index+'">'+'<joe-panel class="joe-overlay-panel">'+(content||'')+'</joe-panel>'+'<div class="joe-mini-panel">'+'</div>'+'</joe-overlay>';return html};this.populateFramework=function(data,setts){self.current.cache={};self.overlay.removeClass('multi-edit');var joePopulateBenchmarker=new Benchmarker();self.current.reset=self.current.reset||{};beginLogGroup('JOE population');var specs=setts||{};self.current.specs=setts;self.current.data=data;self.current.userSpecs=$.extend({},setts);gridMode=(self.current.specs.viewMode=='grid')?true:false;tableMode=(self.current.specs.viewMode=='table')?true:false;if(!self.current.specs.noHistory){self.history.push({specs:self.current.userSpecs,data:self.current.data})}var schema=setts.schema||'';var profile=setts.profile||null;var callback=setts.callback||null;var datatype=setts.datatype||'';var title=setts.title||'';if(callback){self.current.callback=callback}else{self.current.callback=null}if($.type(data)=='string'&&datatype!="string"&&self.getDataset(data,{boolean:true})){if(!specs.schema&&self.schemas[data]){schema=data}data=self.getDataset(data)}specs.schema=this.setSchema(schema);colCount=self.current.specs.colCount||(specs.schema&&specs.schema.colCount)||1;if(self.sizeClass=="small-size"){colCount=1}specs.preformat=(specs.schema&&specs.schema.preformat)||specs.preformat||function(d){return d};data=specs.preformat(data);if($.type(data)=='object'||datatype=='object'){specs.object=data;specs.menu=specs.menu||(specs.schema&&specs.schema.menu)||self.specs.menu||(specs.multiedit&&__defaultMultiButtons)||__defaultObjectButtons;specs.mode="object";self.current.object=data}self.toggleMultiEditMode(specs,data);listMode=false;if($.type(data)=='array'||datatype=='array'){listMode=true;specs.list=data;specs.menu=specs.listMenu||(specs.schema&&specs.schema.listMenu)||__defaultButtons;specs.mode="list";self.current.list=data;var currentSubsets;currentSubsets=setts.subsets||(specs.schema&&specs.schema.subsets)||null;if(typeof currentSubsets=='function'){currentSubsets=currentSubsets()}if(self.current.specs.subset&¤tSubsets&¤tSubsets.where({$or:[{name:specs.subset},{group_start:specs.subset}]}).length){self.current.subset=currentSubsets.where({$or:[{name:specs.subset},{group_start:specs.subset}]})[0]||false}else{if(self.current.specs.subset=="All"){self.current.subset={name:"All",filter:{}}}else{self.current.subset=(currentSubsets&¤tSubsets.where({'default':true})[0])||null}}self.current.subsets=currentSubsets;self.current.sorter=setts.sorter||(self.current.subset&&self.current.subset.sorter)||(specs.schema&&specs.schema.sorter)||'name';if($.type(self.current.sorter)=='string'){self.current.sorter=[self.current.sorter]}}if(specs.mode=='list'){self.current.submenu=self.current.specs.listsubmenu||self.current.specs.submenu||(specs.schema&&specs.schema.listSubMenu)||self.specs.listSubMenu}else{self.current.submenu=self.current.specs.submenu||(specs.schema&&specs.schema.subMenu)||self.specs.subMenu}if(self.current.submenu=='none'){self.current.submenu=null}if($.type(data)=='string'&&datatype=='rendering'){specs.rendering=data;specs.menu=[__replaceBtn__];specs.mode="rendering";self.current.rendering=specs.rendering}else if($.type(data)=='string'||datatype=='string'){specs.text=data;specs.menu=__defaultButtons;specs.mode="text";self.current.text=specs.text}specs.listWindowTitle=(specs.list&&(specs._listMenuTitle||specs._listWindowTitle||self.getCascadingProp('listWindowTitle')||getProperty('specs.list.windowTitle')||(specs.schema&&(specs.schema._listMenuTitle||specs.schema._listWindowTitle))))||false;specs.title=(specs.listWindowTitle||title||(specs.schema&&(specs.schema.title||specs.schema._title))||"Viewing "+((self.current.schema&&self.current.schema.__schemaname)||(typeof self.current.userSpecs.schema=='string'&&self.current.userSpecs.schema)||specs.mode).capitalize());specs.profile=(profile)?(self.specs.profiles[profile]||self.specs.joeprofile):self.specs.joeprofile;self.current.profile=specs.profile;self.cleanUp();if(self.current.schema&&(self.current.schema.table||self.current.schema.tableView)){tableSpecs=$.extend({cols:['name',self.getIDProp()]},(self.current.schema&&(self.current.schema.table||self.current.schema.tableView))||{})}else{tableSpecs=null}var contentBM=new Benchmarker();beginLogGroup('Content');var content=self.renderEditorContent(specs);endLogGroup();_bmResponse(contentBM,'JOE [Content]');var chromeBM=new Benchmarker();var html=self.renderEditorHeader(specs)+self.renderEditorSubmenu(specs)+content+self.renderEditorFooter(specs)+self.renderMessageContainer();_bmResponse(chromeBM,'JOE [overlay-chrome]');self.overlay.find('.joe-overlay-panel').html(html);if(!self.current.specs.noHistory&&self.history.length){$.extend(self.history[self.history.length-1],{_joeHistoryTitle:self.overlay.find('.joe-panel-title').html()})}self.updateHashLink();_bmResponse(joePopulateBenchmarker,'----Joe Populated');endLogGroup();return html};this.toggleMultiEditMode=function(specs,data){multiEdit=(self.current.userSpecs&&self.current.userSpecs.multiedit)||false};function createTitleObject(specs){var specs=specs||{};var titleObj=$.extend({},self.current.object);var list=specs.list||self.current.list;if(list){var lcount=list.length;if(self.current.subset){lcount=list.where(self.current.subset.filter).length}titleObj._listCount=(lcount||'0');titleObj._subsetName=self.current.subset&&self.current.subset.name+' '||''}self.current.title=specs.title||self.getCascadingProp('title')||(self.current.schema&&"new "+self.current.schema.__schemaname)||'Json Object Editor';self.current.subtitle=specs.subtitle||self.getCascadingProp('subtitle');var title=fillTemplate(self.propAsFuncOrValue(self.current.title),titleObj);var subtitle=fillTemplate(self.propAsFuncOrValue(self.current.subtitle),titleObj);titleObj.docTitle=title;titleObj.subTitle=subtitle return titleObj}this.Header={}this.toggleHelpMenu=function(show,target){}this.Header.Render=this.renderEditorHeader=function(specs){var BM=new Benchmarker();var specs=specs||{};var titleObj=createTitleObject(specs);var title=titleObj.docTitle||(self.current.schema&&"new "+self.current.schema.__schemaname);var subtitle=titleObj.subTitle;if(self.specs.documentTitle){var doctitle=(self.specs.documentTitle===true)?self.current.title:self.propAsFuncOrValue(self.specs.documentTitle,self.current.title);document.title=fillTemplate(self.propAsFuncOrValue(doctitle),titleObj)}var close_action=specs.close_action||'onclick="getJoe('+self.joe_index+').closeButtonAction()"';var reload_action=specs.reload_action||'onclick="getJoe('+self.joe_index+').reload()"';function renderHeaderBackButton(){var html='';if(self.history.length>1){html+='<div class="jif-header-back-btn jif-panel-header-button standard-button" onclick="window.history.back()" title="back">'+self.SVG.icon.left+'</div>'}return html}function renderHelpButton(){var html='';if(specs.minimode){return''}html+='<div class="jif-panel-header-button joe-panel-help" onclick="_joe.toggleHelpMenu()" title="help">'+self.SVG.icon.help+'</div>';return html}var help_button=renderHelpButton()var speech_action=specs.speech_action||'onclick="getJoe('+self.joe_index+').Speech()"';var reload_button=(specs.minimode)?'':'<div class="jif-panel-header-button joe-panel-reload" title="reload" '+reload_action+'><span class="jif-reload"></span></div>';var mic_button=(!self.specs.speechRecognition||specs.minimode)?'':'<div class="jif-panel-header-button joe-panel-speech" title="speech" id="speech-button-'+self.joe_index+'">M</div>';var close_button='<div class="jif-panel-header-button joe-panel-close" title="close" '+close_action+'>'+self.SVG.icon.close+'</div>';var schema_button=(!specs.minimode&&(self.current.schema&&self.current.schema.menuicon&&'<joe-schema-icon class="clickable" title="'+self.current.schema.__schemaname+'" onclick="goJoe(_joe.getDataset(\''+self.current.schema.__schemaname+'\'),{schema:\''+self.current.schema.__schemaname+'\'})">'+self.current.schema.menuicon+'</joe-schema-icon>')||'');var back_button=(!specs.minimode&&renderHeaderBackButton()||'')var left_buttons=[back_button,schema_button];var right_buttons=[close_button,mic_button,reload_button,help_button];var html='<joe-panel-header >'+((specs.schema&&specs.schema.subsets&&self.renderSubsetselector(specs.schema))||(specs.subsets&&self.renderSubsetselector(specs))||'')+left_buttons.join(' ')+'<div class="joe-vcenter joe-panel-title-holder"><span class="joe-panel-title">'+(('<div>'+title+'</div>').toDomElement().innerText||title||'Json Object Editor')+'</span></div>'+'<joe-panel-header-buttons class="right-side">'+right_buttons.join(' ')+'<div class="clear"></div>'+'</joe-panel-header-buttons>'+'<div class="clear"></div>'+'</joe-panel-header>';_bmResponse(BM,'[Header] rendered');return html};this.closeButtonAction=function(prechecked){if(!this.checkChanges()){return}self.history=[];self.panel.addClass('centerscreen-collapse');self.hide(500);self.current.clear();$(self.container).trigger({type:"hideJoe",index:self.joe_index});self.updateHashLink();var closeAction=self.getCascadingProp('onPanelHide');if(closeAction){closeAction(self.getState())}};var goingBackFromID;var goingBackQuery;this.goBack=function(obj){if(!this.checkChanges()){return}if(self.current.object){var gobackItem=self.current.object[self.getIDProp()];if(gobackItem){goingBackFromID=gobackItem}}self.history.pop();var joespecs=self.history.pop();if(!joespecs){self.closeButtonAction(true);return}else{if(obj&&$c.isArray(joespecs.data)){var objid=obj[self.getIDProp()];if(objid){var query={};query[self.getIDProp()]=objid;var found=joespecs.data.where(query);found.length&&$.extend(found[0],obj)}}if(joespecs.keyword){goingBackQuery=joespecs.keyword}}var specs=$.extend({},joespecs.specs);specs.filters=joespecs.filters;self.show(joespecs.data,specs)};this.cleanUp=function(){self.current.fields=[];self.shiftSelecting=false;self.allSelected=false;if(self.current.userSpecs&&self.current.userSpecs.multiedit){self.overlay.addClass('multi-edit')}else{self.overlay.removeClass('multi-edit')}};function renderSubmenuButtons(buttons){var html='';var buttons=self.propAsFuncOrValue(buttons||(listMode&&self.getCascadingProp('headerListMenu'))||(!listMode&&self.getCascadingProp('headerMenu')));var content;if(buttons){var h=self.renderMenuButtons(buttons,'joe-submenu-button');if(h){content=true}html+=h}return{html:html,content:content}};this.renderEditorSubmenu=function(specs){beginLogGroup('Submenu');var BM=new Benchmarker();var sectionAnchors=renderSectionAnchors();var submenuButtons=renderSubmenuButtons();if(!self.current.submenu&&!sectionAnchors.count&&(!listMode&&!self.getCascadingProp('headerMenu'))){return''}var showFilters=$c.getProperty(self.current,'userSpecs.filters')||$c.getProperty(self.current,'schema.filters')||$c.getProperty(self.current,'schema.subsets')||false;var subSpecs={search:true,itemcount:true,filters:showFilters,numCols:self.current.schema.columns||0};var userSubmenu=($.type(self.current.submenu)!='object')?{}:self.current.submenu;$.extend(subSpecs,userSubmenu);if(specs.mode=='list'){var filters_obj=self.Filter.getCached();var submenu='<div class="joe-panel-submenu">'+self.renderViewModeButtons(subSpecs)+self.renderColumnCountSelector(subSpecs.numCols)+self.renderSorter()+((subSpecs.filters&&self.renderSubmenuFilters(subSpecs.filter))||'')+((subSpecs.search&&self.renderSubmenuSearch(subSpecs.search))||'')+((subSpecs.itemcount&&self.renderSubmenuItemcount(subSpecs.itemcount))||'')+submenuButtons.html+'</div>'+"<div class='joe-filters-holder'>"+renderSubsetsDiv()+((filters_obj&&renderFiltersDiv())||'')+"</div>"}else{var submenu='<div class="joe-panel-submenu">'+renderSidebarToggle('left')+renderSidebarToggle('right')+submenuButtons.html+((sectionAnchors.count&§ionAnchors.code)||'')+'</div>'}function renderOptStripeColor(opt){var color=self.propAsFuncOrValue((opt.stripecolor||opt.stripeColor),null,null,opt);var title='';if(color&&$c.isObject(color.title)){title=' title="'+color.title+'" ';color=color.color}var h='<joe-stripe-color '+title+(color&&'style="background-color:'+color+';"'||'')+'></joe-stripe-color>';return h}function renderOptBGColor(opt){var color=self.propAsFuncOrValue((opt.bgcolor||opt.bgColor),null,null,opt);if(color&&$c.isObject(color.title)){color=color.color}var h='<joe-bg-color '+(color&&'style="background-color:'+color+';"'||'')+'></joe-bg-color>';return h}function renderOptBorderColor(opt){var color=self.propAsFuncOrValue((opt.bordercolor||opt.borderColor),null,null,opt);if(color&&$c.isObject(color.title)){color=color.color}var h='<joe-border-color '+(color&&'style="border:1px solid '+color+';"'||'')+'></joe-border-color>';return h}function renderOptionGroupStart(opt,childDom){var collapsed=self.propAsFuncOrValue(opt.collapsed)?'collapsed':'';if(!opt.hasOwnProperty('filter')){var html='<joe-option-group id="'+opt.group_start+'-group" class="'+collapsed+'"><joe-menu-label onclick="$(this).parent().toggleClass(\'collapsed\');">'+(opt.display||opt.name||opt.group_start)+'</joe-menu-label>';return html}else{var optdisplay=opt.display||opt.name||opt.group_start||'';var optname=opt.id||opt.name||opt.group_start||'';var cbox='',act,onclick;var dataname;if(childDom=='joe-filter-option'){dataname=' data-filter="'+optname+'" ';cbox='<span class ="joe-option-checkbox"></span>';act=(self.current.filters&&self.current.filters[optname])?'active':'';onclick='getJoe('+self.joe_index+').toggleFilter(\''+optname+'\',this);_joe.Utils.stopPropagation();'}else{dataname=' data-subset="'+optname+'" ';act=((self.current.subset&&self.current.subset.name==optname)||!self.current.subset&&opt.name=="All")?'active':'';onclick='getJoe('+self.joe_index+').selectSubset(\''+(optname).toString().replace(/\'/g,"\\'")+'\');'}var optiondiv='<'+childDom+' '+dataname+' class="'+childDom+' joe-group-option '+act+' " onclick='+onclick+'>'+renderOptBorderColor(opt)+renderOptBGColor(opt)+renderOptStripeColor(opt)+cbox+'<span style="position:relative;">'+optdisplay+'</span>'+'</'+childDom+'>'var html='<joe-option-group id="'+opt.group_start+'-group" class="'+collapsed+' ">'+'<joe-menu-label onclick="$(this).parent().toggleClass(\'collapsed\');">'+optiondiv+'</joe-menu-label>';return html}}function renderSubsetsDiv(){var sh='<div><joe-menu-label>Subsets</joe-menu-label>';var act;var starting=[];if(!self.current.schema||!self.current.schema.hideAllSubset){starting.push({name:'All',filter:{}})}var group=null;starting.concat(_joe.current.subsets||[]).map(function(opt){if(opt.group_start){group=opt.group_start;sh+=renderOptionGroupStart(opt,'joe-subset-option')}else if(opt.group_end){sh+='</joe-option-group>';group=null}else{var idval=opt.id||opt.name||'';if(!opt.condition||self.propAsFuncOrValue(opt.condition)){act=((self.current.subset&&self.current.subset.name==opt.name)||!self.current.subset&&opt.name=="All")?'active':'';if(act=='active'&&group){sh=sh.replace('<joe-option-group id="'+group+'-group" class="collapsed','<joe-option-group id="'+group+'-group" class="')}sh+='<joe-subset-option data-subset="'+idval+'" class="joe-subset-option '+act+' " onclick="getJoe('+self.joe_index+').selectSubset(\''+(opt.id||opt.name||'').toString().replace(/\'/g,"\\'")+'\');">'+renderOptBorderColor(opt)+renderOptBGColor(opt)+renderOptStripeColor(opt)+'<span style="position:relative;">'+opt.name+'</span>'+'</joe-subset-option>'}}});sh+='</div>';_bmResponse(BM,'subsets rendered');return sh}function renderFiltersDiv(){_bmResponse(BM,'filters start');var fh='<div><joe-menu-label>Filters</joe-menu-label>';var filters=self.current.schema.filters;filters=self.propAsFuncOrValue(filters);var group=null;(filters||[]).map(function(opt){if(opt.group_start){group=opt.group_start;fh+=renderOptionGroupStart(opt,'joe-filter-option')}else if(opt.group_end){fh+='</joe-option-group>';group=null}else{var idval=opt.id||opt.name||'';if(!opt.condition||self.propAsFuncOrValue(opt.condition)){act=(self.current.filters&&self.current.filters[idval])?'active':'';if(act=='active'&&group){fh=fh.replace('<joe-option-group id="'+group+'-group" class="collapsed">','<joe-option-group id="'+group+'-group" class="">')}fh+='<joe-filter-option data-filter="'+idval+'" class="joe-filter-option '+act+'" onclick="getJoe('+self.joe_index+').toggleFilter(\''+idval+'\',this);">'+renderOptBorderColor(opt)+renderOptBGColor(opt)+renderOptStripeColor(opt)+'<span class ="joe-option-checkbox"></span>'+'<span style="position:relative;">'+opt.name+'</span>'+'</joe-filter-option>'}}});fh+='<joe-subset-option class="joe-subset-option clear-filters" onclick="'+getSelfStr+'.clearFilters()">clear filters</joe-subset-option>';fh+='</div>';_bmResponse(BM,'filters rendered');return fh}endLogGroup();_bmResponse(BM,'[Submenu] rendered');return submenu};function renderSectionAnchors(){var anchorhtml='<joe-submenu-section-anchors>'+'<joe-panel-button class="sections-toggle" onclick="'+getSelfStr+'.Sections.toggle(this);">'+self.SVG.icon.sections+' <joe-button-label>'+(self.current.sections&&self.current.sections.count()||'')+' sections</joe-button-label></joe-panel-button>';anchorhtml+='<div class="joe-submenu-section" onclick="_joe.Sections.gotoTop('+self.joe_index+')">^ top</div>';var scount=0;var onclick='onclick="getJoe('+self.joe_index+').gotoSection(\'${id}\');"';var ondblclick='ondblclick="getJoe('+self.joe_index+').gotoSection(\'${id}\',{dblclickdom:this});"';var template='<joe-submenu-section class="joe-submenu-section f${renderTo}" data-section="${name}" data-panel="${renderTo}" '+onclick+' '+ondblclick+'>${name}</joe-submenu-section>';var section;for(var secname in self.current.sections){section=_getSection(secname);if(!section.hidden){anchorhtml+=fillTemplate(template,section);scount++}}anchorhtml+="<div class='clear'></div></joe-submenu-section-anchors>";return{count:scount,code:anchorhtml}}self.gotoSection=function(section,specs){var specs=$.extend({},(specs||{}))if(section){var i=specs.index||self.joe_index;var sectionDom=$('.joe-overlay[data-joeindex='+i+']').find('.joe-content-section[data-section=\''+section+'\']');if(specs.dblclickdom){var tabbedmode,parent_dom=sectionDom.parents('.joe-content-sidebar,joe-panel-content');$(specs.dblclickdom).toggleClass('active');sectionDom.toggleClass('active');tabbedmode=($(specs.dblclickdom).parent().children('.active[data-panel='+$(specs.dblclickdom).data('panel')+']').length>0);parent_dom.toggleClass('joe-tabbed-content',tabbedmode)}sectionDom.removeClass('collapsed')[0].scrollIntoView();var sidebar=sectionDom.parents('.joe-content-sidebar');if(sidebar&&sidebar.length){var s=sidebar.data('side');self.toggleSidebar(s,true);sectionDom.siblings('.joe-content-section').addClass('collapsed')}else if(self.sizeClass=="small-size"){self.toggleSidebar('left',false);self.toggleSidebar('right',false)}$('joe-submenu-section-anchors.expanded').removeClass('expanded')}};self.Sections={renderAchors:renderSectionAnchors,goto:self.gotoSection,gotoTop:function(index){var ajoe=getJoe(index);$('.joe-overlay[data-joeindex='+index+']').find('.joe-panel-content').scrollTop(0);if(ajoe.panel.hasClass('small-size')){ajoe.toggleSidebar('right',false);ajoe.toggleSidebar('left',false)}$('joe-submenu-section-anchors.expanded').removeClass('expanded')}};self.Sections.toggle=function(dom){if(dom){$(dom).parents('joe-submenu-section-anchors').toggleClass('expanded')}}this.Subset={getCached:function(list){var list=list||self.current.list var cache_query=self.current.schema.name+':'+self.current.subset.name;var subcache=self.Cache.get(cache_query)if(!subcache){subcache=list.where(self.current.subset.filter);self.Cache.set(subcache,{id:cache_query})}return subcache}}this.Filter={refilter:function(){if(!$c.isEmpty(self.current.filters)){self.filterListFromSubmenu(null,true)}},getCached:function(list){var BM=new Benchmarker();if(!self.current.schema||!self.current.schema.filters){_bmResponse(BM,'filters gotten');return false}var list=list||self.current.list var cache_query=self.current.schema.name+':filters';var filtercache=self.Cache.get(cache_query)if(!filtercache){filtercache=self.propAsFuncOrValue(self.current.schema.filters,self.current.list);self.Cache.set(filtercache,{id:cache_query})}_bmResponse(BM,'filters gotten');return filtercache}}this.renderSubmenuFilters=function(s){if(!(s||self.current.subsets||(self.current.schema&&self.propAsFuncOrValue(self.current.schema.filters)))){return''}var action=' onclick="getJoe('+self.joe_index+').toggleFiltersMenu();" ';var active=(self.current.subset)?'active':'';var count=$c.itemCount(self.current.filters);var indicator=(active||count)?'<joe-count-indicator class="'+active+((count&&' count ')||'')+'">'+(count||'')+'</joe-count-indicator>':'';var html="<div class='jif-panel-submenu-button joe-filters-toggle ' "+action+">"+indicator+"</div>";return html};var leftMenuShowing=false;this.toggleFiltersMenu=function(){leftMenuShowing=!leftMenuShowing;self.panel.toggleClass('show-filters',leftMenuShowing)};this.Filter.Options={status:function(schemaname,sortby,specs){var specs=specs||{};if($.type(schemaname)=="object"){specs=schemaname}var schemaname=specs.schemaname||(self.current.schema&&self.current.schema.name||'');var stats=[];var stat;self.Data.status.sortBy(specs.sortby||'index').where({datasets:{$in:[schemaname]}}).map(function(status){stat={name:status.name,filter:{status:status._id},title:self.propAsFuncOrValue(specs.title)||status.name}stat[(specs.color||'bgcolor')]=status.color;stats.push(stat)})return stats},tags:function(specs){var specs=specs||{};var schemaname=specs.schemaname||(self.current.schema&&self.current.schema.name||'');var showUntagged=specs.untagged||false;var schemaname=specs.schemaname||(self.current.schema&&self.current.schema.name||'');var filters=[];var groupname=(typeof(specs.group)=='string')?specs.group:'tags';if(specs.group){filters.push({group_start:groupname,collapsed:specs.collapsed})}var tag;var tags=_joe.Data.tag.sortBy(specs.sortby||'name').filter(function(tag){if(tag.datasets.indexOf(schemaname)!=-1){filters.push({name:tag.name,filter:{tags:{$in:[tag._id]}}})}});if(specs.untagged){filters.push({name:'untagged',filter:{$or:[{tags:{$size:0}},{tags:{$exists:false}}]}})}if(specs.group){filters.push({group_end:groupname})}return filters}}this.Filter.generateQuery=this.generateFiltersQuery=function(){var query={};var filterinfo,filterobj,addFilter;for(var f in self.current.filters){filterinfo=(self.propAsFuncOrValue(self.current.schema.filters)||[]).where({name:f})[0]||self.current.filters[f]||{};addFilter=(!filterinfo.schema||(!self.current.schema||!self.current.schema.__schemaname)||filterinfo.schema==(self.current.schema.__Schemaname||self.current.schema.__schemaname));if(addFilter){filterobj=filterinfo.filter;for(var ff in filterobj){if(query[ff]){switch($.type(filterobj[ff])){case'number':case'string':case'object':if($.type(query[ff])=='string'||$.type(query[ff])=='number'){query[ff]={$in:[query[ff],filterobj[ff]]}}else if($.type(query[ff])=='object'){if(query[ff].hasOwnProperty('$in')){query[ff]['$in']=query[ff]['$in'].concat(filterobj[ff]['$in']||[filterobj[ff]])}}break}}else{query[ff]=filterobj[ff]}}}else{delete self.current.filters[filterinfo.name]}}logit(query);return query};self.Search={schema:{title:'Search Results',name:'search',listTitle:function(item){var html='<joe-full-right>'+'<joe-subtext>updated</joe-subtext>'+'<joe-subtitle>'+self.Utils.toDateString(item.joeUpdated)+'</joe-subtitle>'+'</joe-full-right>'+(_joe.schemas[item.itemtype].menuicon&&'<joe-icon class="icon-40 icon-grey fleft">'+_joe.schemas[item.itemtype].menuicon+'</joe-icon>'||'')+'<joe-subtext>${itemtype}</joe-subtext>'+'<joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle>'+'<joe-subtext>${_id}</joe-subtext>';return html},listmenu:[],sorter:['name',{name:'updated',value:'!joeUpdated'},'itemtype'],filters:function(){var f=[];__appCollections.concat().sort().map(function(s){f.push({name:s,filter:{itemtype:s}})})return f},listAction:function(item){return'goJoeItem(\''+item._id+'\',\''+item.itemtype+'\')'}}}this.renderSubmenuSearch=function(s){var action=' onkeyup="_joe.filterListFromSubmenu(this.value);" ';var keyword=self.current.keyword||$GET('keyword')||'';var submenusearch="<div class='joe-submenu-search '>"+'<input class="joe-submenu-search-field" '+action+' placeholder="search list" value="'+keyword+'"/>'+"</div>";return submenusearch};this.searchTimeout;this.filterListFromSubmenu=function(keyword,now){clearTimeout(self.searchTimeout);self.overlay.removeClass('.multi-edit');if(!now){self.searchTimeout=setTimeout(function(){searchFilter(keyword,true)},300)}else{searchFilter(keyword)}function searchFilter(keyword,frominput){var searchBM=new Benchmarker();if(self.current.keyword!=keyword){keyword=keyword||$('.joe-submenu-search-field').val()||'';if(!frominput&&!keyword&&self.current.keyword){keyword=self.current.keyword;$('.joe-submenu-search-field').val(keyword)}var value=keyword.toLowerCase();var keywords=value.replace(/,/g,' ').split(' ');var filters=self.generateFiltersQuery();_joe.history[_joe.history.length-1].keyword=value;_joe.history[_joe.history.length-1].filters=self.current.filters;var testable;var idprop=self.getIDProp();var id;var listables=self.current.list;if(self.current.subset){listables=self.Subset.getCached()}listables=cleanDeleted(listables);var searchables=self.current.schema&&self.current.schema.searchables;_bmResponse(searchBM,'search where');self.current.filteredList=currentListItems=listables.where(filters).filter(function(i){if(!keyword){return true}id=i[idprop];testable='';if(searchables){searchables.map(function(s){testable+=i[s]+' '});testable=testable.toLowerCase()+id;for(var k=0,tot=keywords.length;k<tot;k++){if(testable.indexOf(keywords[k])==-1){return false}}}else{if(tableMode){testable=self.renderTableItem(i,true)}else if(gridMode){}else{testable=self.renderListItem(i,true)}testable=testable.toLowerCase()+id;for(var k=0,tot=keywords.length;k<tot;k++){if(testable.indexOf(keywords[k])==-1){return false}}}return true});_bmResponse(searchBM,'search \''+keyword+'\' filtered '+currentListItems.length+'/'+self.current.list.length+' items ['+listables.length+']');self.overlay.find('.joe-submenu-itemcount').html(currentListItems.length+' item'+((currentListItems.length>1&&'s')||''));self.panel.find('.joe-panel-content').html(self.renderListItems(currentListItems,0,self.specs.dynamicDisplay))}self.current.keyword=keyword;self.current.search_schema var titleObj=createTitleObject();if(titleObj.subTitle){self.panel.find('.joe-panel-title').addClass('subtitled').html(titleObj.docTitle+'<joe-subtext>'+titleObj.subTitle+'</joe-subtext>')}else{self.panel.find('.joe-panel-title').addClass('subtitled').html(titleObj.docTitle)}self.panel.find('.joe-filters-toggle').replaceWith(self.renderSubmenuFilters())}};this.renderSubmenuItemcount=function(s){var submenuitem="<div class='joe-submenu-itemcount'>items</div>";return submenuitem};function renderSubmenuSelectors(specs){var specs=$.extend({options:[],content:'',action:'nothing',buttonTemplate:"<div class='selection-label'>${label}</div>${name}",label:'label',cssclass:''},(specs||{}));var selectionTemplate="<div data-colcount='${name}' "+"onclick='getJoe("+self.joe_index+")"+"."+specs.action+"(${name});' "+"class='jif-panel-button selector-button-${name} joe-selector-button "+"'>"+specs.buttonTemplate+'</div>';var onclick_action="onclick='$(this).parent().toggleClass(\"expanded\")'";var content=specs.content||"<div class='joe-selector-button selector-label' "+onclick_action+">"+specs.label+"</div>"+"<div class='joe-selector-button selector-close joe-close-button' "+onclick_action+"> </div>"+'<joe-submenu-selector-options>'+fillTemplate(selectionTemplate,specs.options)+'</joe-submenu-selector-options>';var html="<div class='joe-submenu-selector' >"+content+"</div>";return html}this.nothing=function(nothing){alert(value)};this.renderViewModeButtons=function(subspecs){var gridspecs=self.current.schema&&(self.current.schema.grid||self.current.schema.gridView);var tablespecs=tableSpecs;if(!gridspecs&&!tablespecs){return''}var modes=[{name:'list'}];if(gridspecs){modes.push({name:'grid'})}if(tablespecs){modes.push({name:'table'})}var modeTemplate="<div data-view='${name}' "+"onclick='getJoe("+self.joe_index+")"+".setViewMode(\"${name}\");' "+"class='jif-panel-button joe-viewmode-button ${name}-button joe-selector-button'> </div>";var onclick_action="onclick='$(this).parent().toggleClass(\"expanded\")'";var submenuitem="<div class='joe-submenu-selector joe-viewmode-selector opts-"+modes.length+"' >"+"<div class='joe-selector-button selector-label' "+onclick_action+">view</div>"+"<div class='joe-selector-button selector-close joe-close-button' "+onclick_action+"> </div>"+'<joe-submenu-selector-options>'+fillTemplate(modeTemplate,modes)+'</joe-submenu-selector-options>'+"</div>";return submenuitem};this.setViewMode=function(mode){self.reload(true,{viewMode:mode})};this.renderColumnCountSelector=function(subspecs){if(!subspecs){return''}var modes=[{name:'1'},{name:'2'},{name:'3'},{name:'4'},{name:'5'}];if(typeof eval(subspecs)=="number"){modes=modes.slice(0,eval(subspecs))}var h=renderSubmenuSelectors({options:modes,label:'cols',value:colCount,action:'setColumnCount'});return h};this.setColumnCount=function(mode){self.overlay[0].className=self.overlay[0].className.replace(/cols-[0-9]/,'cols-'+mode);if(mode){colCount=mode}var multi=(mode&&mode>1)?true:false;self.overlay.toggleClass('multi-col',multi)};this.Sorter={};this.Sorter.render=this.renderSorter=function(subspecs){var sorter=(self.current.subset&&self.current.subset.sorter)||(self.current.schema&&self.current.schema.sorter)||'name';if($.type(sorter)=='string'){sorter=sorter.split(',')}if(sorter.indexOf('name')==-1&&sorter.indexOf('!name')==-1&&!sorter.where({field:'name'}).length){sorter.push('name')}if(sorter.length==1){return''}var newsorter=subspecs;var current;return'<label for="joe-'+self.joe_index+'-sorter" class="joe-list-sorter" >'+'<svg onclick="getJoe('+self.joe_index+').Sorter.reverse();" class="joe-list-sorter-icon" title="reverse sort" xmlns="http://www.w3.org/2000/svg" viewBox="-20 6 40 40"><path d="M-4 16L-9.5 21.5 -8 23 -5 20 -5 28 -3 28 -3 20 0 23 1.5 21.5 -4 16zM3 16L3 18 5 18 5 16 3 16zM3 20L3 22 5 22 5 20 3 20zM3 24L3 32 0 29 -1.5 30.5 4 36 9.5 30.5 8 29 5 32 5 24 3 24zM-5 30L-5 32 -3 32 -3 30 -5 30zM-5 34L-5 36 -3 36 -3 34 -5 34z"/></svg>'+'<select title="sort" name="joe-'+self.joe_index+'-sorter" onchange="getJoe('+self.joe_index+').Sorter.resort(this.value);">'+sorter.map(function(so){var s=so,display=so;if(!$c.isString(so)){s=so.field||so.value;display=so.display||so.name||s}current=(s==(self.current.sorter[0].field||self.current.sorter[0].value||self.current.sorter[0]))?'selected':'';return'<option '+current+' value="'+s+'">'+display+'</option>'})+'</select></label>'};this.Sorter.resort=function(sorter){self.reload(true,{sorter:sorter})};this.Sorter.reverse=function(sorter){var curSorter=self.current.sorter;if($.type(curSorter)=="array"){curSorter=[].concat(curSorter);if($.type(curSorter[0])=="string"){if(curSorter[0].indexOf('!')==0){curSorter[0]=curSorter[0].substr(1)}else{curSorter[0]='!'+curSorter[0]}}else if($.type(curSorter[0])=="object"&&curSorter[0].value){if(curSorter[0].value.indexOf('!')==0){curSorter[0].value=curSorter[0].value.substr(1)}else{curSorter[0].value='!'+curSorter[0].value}}self.reload(true,{sorter:curSorter})}};function renderEditorStyles(){var style_str=(self.specs.style&&self.specs.style.inset&&'joe-style-inset '||'')+(self.specs.style&&self.specs.style.cards&&'joe-style-cards '||'');return style_str}this.renderEditorContent=function(specs){self.current.sidebars={left:{collapsed:false},right:{collapsed:false}};var content;if(!specs){specs={mode:'text',text:'No object or list selected'}}var mode=specs.mode;switch(mode){case'text':content=self.renderTextContent(specs);break;case'rendering':content=self.renderHTMLContent(specs);break;case'list':content=self.renderListContent(specs);break;case'object':content=self.renderObjectContent(specs);break;default:content=content||'';break}var submenu='';if(!specs.minimode){if((mode=='list'&&self.current.submenu)||(self.current.submenu||renderSectionAnchors().count||renderSubmenuButtons().content)){submenu=' with-submenu '}}var scroll='onscroll="getJoe('+self.joe_index+').onListContentScroll(this);"';var rightC=content.right||'';var leftC=content.left||'';var content_class='joe-panel-content '+renderEditorStyles()+submenu;var html='<joe-panel-content class="'+content_class+'" '+((listMode&&scroll)||'')+'>'+(content.main||content)+'</joe-panel-content>'+self.renderSideBar('left',leftC,{css:submenu})+self.renderSideBar('right',rightC,{css:submenu});self.current.sidebars.left.content=leftC;self.current.sidebars.right.content=rightC;return html};this.renderSideBar=function(side,content,specs){var side=side||'right';var expanded='';var specs=specs||{};var addCss=specs.css||'';var html="<div class='joe-content-sidebar "+renderEditorStyles()+" joe-absolute "+side+"-side "+expanded+addCss+"' data-side='"+side+"'>"+(content||'')+__clearDiv__+"</div>";return html};this.toggleSidebar=function(side,hardset){if(['right','left'].indexOf(side)==-1){return false}self.panel.toggleClass(side+'-sidebar',hardset)};function renderSidebarToggle(side){if(self.current.sidebars[side].hidden){return''}var html='<div class="jif-panel-submenu-button joe-sidebar-button joe-sidebar_'+side+'-button" '+'title="toggle" onclick="getJoe('+self.joe_index+').toggleSidebar(\''+side+'\')">'+self.SVG.icon['sidebar-'+side]+'</div>';return html}this.renderTextContent=function(specs){specs=specs||{};var text=specs.text||specs.object||'';var html='<div class="joe-text-content">'+text+'</div>';return html};this.renderHTMLContent=function(specs){specs=specs||{};var html='<textarea class="joe-rendering-field">'+(specs.rendering||'')+'</textarea>';return html};var currentListItems;this.Render.listContent=this.renderListContent=function(specs){var wBM=new Benchmarker();if(specs.minimode){return self.renderMiniListContent(specs)}currentListItems=[];self.current.selectedListItems=[];self.current.anchorListItem=null;specs=specs||{};var schema=specs.schema;var list=specs.list||[];var html='';var filteredList;list=cleanDeleted(list);var numItemsToRender;currentListItems=list;if(self.current.subset){filteredList=currentListItems=self.Subset.getCached(list);_bmResponse(wBM,'list subsetted')}var primer=null;if(self.current.sorter&&(($.type(self.current.sorter)!='array')||self.current.sorter.length)){var sorterValues=self.current.sorter;if($c.isArray(self.current.sorter)&&self.current.sorter[0].field){sorterValues=[];for(var i=0,len=self.current.sorter.length;i<len;i++){sorterValues.push(self.current.sorter[i].field||self.current.sorter[i]);primer=self.current.sorter[i].primer||primer||null}}else{primer=(self.current.sorter[0].primer)||null}list=list.sortBy(sorterValues,null,primer)}_bmResponse(wBM,'list sort complete');if(!$c.isEmpty(_joe.current.filters)){filteredList=currentListItems.where(self.Filter.generateQuery());currentListItems=filteredList;_bmResponse(wBM,'list filtered')}_bmResponse(wBM,'list prerender');numItemsToRender=self.specs.dynamicDisplay||currentListItems.length;html+=self.renderListItems(currentListItems,0,numItemsToRender);_bmResponse(wBM,'list complete');return html};function cleanDeleted(list,schema){var deleted_prop=self.getCascadingProp('deleted')||'_deleted';var query={};query[deleted_prop]={$in:[false,'false',undefined]};var activeList=list.where(query);return activeList}this.renderMiniListContent=function(specs){var wBM=new Benchmarker();specs=specs||{};var schema=specs.schema;var list=specs.object||[];var idprop=specs.idprop||'_id';var html='';var sorter=specs.sorter||'name';list=list.sortBy(sorter);var click='getJoe('+self.joe_index+').minis[\''+specs.minimode+'\'].callback(\'${'+idprop+'}\')';var template=self.propAsFuncOrValue(specs.template)||'<joe-title>${name}</joe-title><joe-subtitle>${'+idprop+'}</joe-subtitle>';template='<div class="joe-field-list-item" onclick="'+click+'">'+template+'</div>';for(var li=0,tot=list.length;li<tot;li++){template=self.propAsFuncOrValue(specs.template,list[li])||'<joe-title>${name}</joe-title><joe-subtext>${'+idprop+'}</joe-subtext>';template='<div class="joe-field-list-item clickable" onclick="'+click+'">'+template+'</div>'html+=fillTemplate(template,list[li])}_bmResponse(wBM,'minilist complete');return html};this.Render.listItems=this.renderListItems=function(items,start,stop){var html='';var listItem;var items=items||currentListItems;var simple_sorter=[];self.current.sorter.map(function(s){simple_sorter.push(s.field||s.value||s)})items=items.sortBy(simple_sorter);var start=start||0;var stop=stop||currentListItems.length-1;if(gridMode){var gridspecs=self.current.schema&&(self.current.schema.grid||self.current.schema.gridView)||{};var columns=self.propAsFuncOrValue(gridspecs.cols)||[];var rows=self.propAsFuncOrValue(gridspecs.rows)||[];var cells=[];var cell,colinfo,rowinfo,col_filter,row_filter,subitems;for(var c=0;c<columns.length;c++){colinfo=columns[c];col_filter=colinfo.filter;subitems=items.where(col_filter);if(rows.length){}else{cell_filter=colinfo.filter;cell={name:colinfo.name,filter:col_filter,html:'',items:[]};subitems.map(function(i){cell.items.push(i);cell.html+=self.Render.gridItem(i)})cells.push([cell])}}html+='<table class="joe-grid-table"><thead>';columns.map(function(c){if($c.isString(c)){html+='<th>'+c+'</th>'}else if($c.isObject(c)){html+='<th>'+(c.header||c.display||c.name)+'</th>'}});html+='</thead><tbody>';var row_number=0;var row_count=rows.length||1;while(row_number<row_count){html+='<tr>';cells.map(function(cell_list){html+='<td class="joe-grid-cell">'+cell_list[row_number].html+'</td>'})html+='</tr>';row_number++}html+='</tbody></table>';return html}else if(tableMode){html+='<table class="joe-item-table" cellspacing="0"><thead class="joe-table-head"><th> </th>';tableSpecs.cols.map(function(c){if($c.isString(c)){html+='<th>'+c+'</th>'}else if($c.isObject(c)){html+='<th>'+(c.header||c.display)+'</th>'}});html+='</thead><tbody>';stop=currentListItems.length;for(var i=start;i<stop;i++){listItem=items[i];if(listItem){html+=self.renderTableItem(listItem,false,i+1)}}html+='</tbody></table>';return html}else{for(var i=start;i<stop;i++){listItem=items[i];if(listItem){html+=self.renderListItem(listItem,false,i+1)}}return html}};this.onListContentScroll=function(domObj){var listItem=self.panel.find('.joe-panel-content-option').last()[0];var currentItemCount=self.panel.find('.joe-panel-content-option').length;if(currentItemCount==currentListItems.length){return}var viewPortHeight=self.panel.find('.joe-panel-content').height();var html='';try{if(listItem.ge