diff --git a/app/assets/javascripts/edit-main.js b/app/assets/javascripts/edit-main.js index 3b38c32..0903599 100644 --- a/app/assets/javascripts/edit-main.js +++ b/app/assets/javascripts/edit-main.js @@ -13,14 +13,14 @@ return vars; } var page_params = getUrlVars(); - $(document).ready(function(){ $("head").append(" "); + var dataObject = (page_params['mobile_view'] ? {"page_id" : page_params["id"],"mobile_view" : 1} : {"page_id" : page_params["id"]}) $.ajax({ url : "/page_parts/info", dataType : "json", type : "get", - data : {"page_id" : page_params["id"]} + data : dataObject }).done(function(data){ $.each(data.parts,function(i,part){ var page_part = $("*[" + part.name + "]"); diff --git a/app/assets/javascripts/jquery.cycle2.js.map b/app/assets/javascripts/jquery.cycle2.js.map new file mode 100644 index 0000000..4f375d8 --- /dev/null +++ b/app/assets/javascripts/jquery.cycle2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"build/jquery.cycle2.min.js","sources":["build/jquery.cycle2.js"],"names":["$","lowerCase","s","toLowerCase","version","fn","cycle","options","o","this","length","isReady","each","data","opts","shortName","val","container","log","noop","p","hasOwnProperty","test","match","replace","extend","defaults","timeoutId","paused","_maxZ","maxZ","API","_container","trigger","eventName","args","addInitialSlides","preInitSlideshow","slides","initSlideshow","selector","c","context","slideCount","jquery","find","random","sort","Math","add","tx","transitions","fx","isFunction","preInit","_preInitialized","postInitSlideshow","postInit","slideOpts","pauseObj","calcFirstSlide","css","currSlide","opacity","display","visibility","stackSlides","nextSlide","reverse","pauseOnHover","hover","pause","resume","timeout","getSlideOpts","queueTransition","delay","_initialized","updateView","alreadyPaused","hoverPaused","addClass","clearTimeout","_remainingTimeout","now","_lastQueue","isNaN","undefined","alreadyResumed","removeClass","filter","prepend","len","oldSlideCount","startSlideshow","type","trim","slide","append","buildSlideOpts","initSlide","firstSlideIndex","parseInt","startingSlide","calcNextSlide","roll","calcTx","manual","_tempFx","manualFx","fade","prepareTx","fwd","after","curr","next","busy","manualTrump","stopTransition","_tx","manualSpeed","speed","before","transition","doTransition","currEl","nextEl","callback","animate","animIn","easeIn","easing","cssBefore","animOut","easeOut","cssAfter","sync","specificTimeout","loop","setTimeout","continueAuto","stop","advanceSlide","slideNum","e","index","suggestedZindex","slideCss","speeds","_default","slideClass","isAfter","isDuring","slideActiveClass","eq","hideNonActive","getComponent","name","i","z","getSlideIndex","el","window","console","Array","prototype","join","call","arguments","custom","none","fadeout","scrollHorz","w","width","left","top","zIndex","allowWrap","autoSelector","position","document","ready","jQuery","initAutoHeight","clone","height","sentinelIndex","autoHeight","outerHeight","_autoHeightRatio","calcSentinelIndex","_sentinelIndex","_sentinel","remove","cloneNode","removeAttr","prependTo","max","h","onBefore","outgoing","incoming","autoHeightSpeed","autoHeightEasing","onDestroy","_autoHeightOnResize","off","on","onResize","ratio","t","resizeThrottle","caption","captionTemplate","overlay","overlayTemplate","captionModule","template","html","tmpl","show","hide","empty","c2","cmd","cmdFn","makeArray","cmdArgs","shift","apply","count","prev","destroy","clean","_data","removeData","retainStylesOnDestroy","jump","num","reinit","slideToRemove","push","preventDefault","command","onHashChange","setStartingSlide","hash","_hashFence","location","substring","_onHashChange","loader","addSlide","slideArr","sorter","addFn","a","b","appendTo","imageLoaded","images","is","complete","load","src","buildPagerLink","pagerLink","pagers","pager","pagerTemplate","markup","children","pagerEvent","pagerEventBubble","page","currentTarget","target","pagerFx","pagerActiveClass","slideAdded","nextEvent","disabledClass","prevEvent","swipe","swipeVert","swipeFx","cls","prevBoundry","_prevBoundry","nextBoundry","_nextBoundry","prop","progressive","scriptEl","nextFn","prevFn","prepareTxFn","parseJSON","err","split","RegExp","pop","slice","one","tmplRegex","str","regex","_","j","obj","names"],"mappings":";;;;;CAOC,SAAUA,GACX,YA8lBA,SAASC,GAAUC,GACf,OAAQA,GAAK,IAAIC,cA7lBrB,GAAIC,GAAU,OAEdJ,GAAEK,GAAGC,MAAQ,SAAUC,GAEnB,GAAIC,EACJ,OAAqB,KAAhBC,KAAKC,QAAiBV,EAAEW,QAStBF,KAAKG,KAAK,WACb,GAAIC,GAAMC,EAAMC,EAAWC,EACvBC,EAAYjB,EAAES,MACdS,EAAMlB,EAAEK,GAAGC,MAAMY,GAErB,KAAKD,EAAUJ,KAAK,cAApB,EAGKI,EAAUJ,KAAK,gBAAiB,GAC/BN,GAAWA,EAAQW,OAAQ,GAC3BJ,GAAQA,EAAKI,OAAQ,KACvBA,EAAMlB,EAAEmB,MAGZD,EAAI,eACJL,EAAOI,EAAUJ,MACjB,KAAK,GAAIO,KAAKP,GAENA,EAAKQ,eAAeD,IAAM,eAAeE,KAAKF,KAC9CJ,EAAMH,EAAKO,GACXL,EAAYK,EAAEG,MAAM,cAAc,GAAGC,QAAQ,SAAUvB,GACvDiB,EAAIH,EAAU,IAAKC,EAAK,UAAWA,GAAK,KACxCH,EAAKE,GAAaC,EAI1BF,GAAOd,EAAEyB,UAAYzB,EAAEK,GAAGC,MAAMoB,SAAUb,EAAMN,OAEhDO,EAAKa,UAAY,EACjBb,EAAKc,OAASd,EAAKc,SAAU,EAC7Bd,EAAKG,UAAYA,EACjBH,EAAKe,MAAQf,EAAKgB,KAElBhB,EAAKiB,IAAM/B,EAAEyB,QAAWO,WAAYf,GAAajB,EAAEK,GAAGC,MAAMyB,KAC5DjB,EAAKiB,IAAIb,IAAMA,EACfJ,EAAKiB,IAAIE,QAAU,SAAUC,EAAWC,GAEpC,MADArB,GAAKG,UAAUgB,QAASC,EAAWC,GAC5BrB,EAAKiB,KAGhBd,EAAUJ,KAAM,aAAcC,GAC9BG,EAAUJ,KAAM,YAAaC,EAAKiB,KAGlCjB,EAAKiB,IAAIE,QAAQ,mBAAqBnB,EAAMA,EAAKiB,MAEjDjB,EAAKiB,IAAIK,mBACTtB,EAAKiB,IAAIM,mBAEJvB,EAAKwB,OAAO5B,QACbI,EAAKiB,IAAIQ,oBA1Db/B,GAAMN,EAAGO,KAAK+B,SAAUC,EAAGhC,KAAKiC,SAChC1C,EAAEK,GAAGC,MAAMY,IAAI,uCACflB,EAAE,WACEA,EAAGQ,EAAEN,EAAGM,EAAEiC,GAAInC,MAAMC,KAEjBE,OAyDfT,EAAEK,GAAGC,MAAMyB,KACPjB,KAAM,WACF,MAAOL,MAAKuB,WAAWnB,KAAM,eAEjCuB,iBAAkB,WACd,GAAItB,GAAOL,KAAKK,OACZwB,EAASxB,EAAKwB,MAClBxB,GAAK6B,WAAa,EAClB7B,EAAKwB,OAAStC,IAGdsC,EAASA,EAAOM,OAASN,EAASxB,EAAKG,UAAU4B,KAAMP,GAElDxB,EAAKgC,QACNR,EAAOS,KAAK,WAAY,MAAOC,MAAKF,SAAW,KAGnDhC,EAAKiB,IAAIkB,IAAKX,IAGlBD,iBAAkB,WACd,GAAIvB,GAAOL,KAAKK,MAChBA,GAAKiB,IAAIE,QAAQ,wBAA0BnB,GAC3C,IAAIoC,GAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAKsC,GACjCF,IAAMlD,EAAEqD,WAAWH,EAAGI,UACtBJ,EAAGI,QAASxC,GAChBA,EAAKyC,iBAAkB,GAG3BC,kBAAmB,WACf,GAAI1C,GAAOL,KAAKK,MAChBA,GAAKiB,IAAIE,QAAQ,yBAA2BnB,GAC5C,IAAIoC,GAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAKsC,GACjCF,IAAMlD,EAAEqD,WAAWH,EAAGO,WACtBP,EAAGO,SAAU3C,IAGrByB,cAAe,WACX,GAEImB,GAFA5C,EAAOL,KAAKK,OACZ6C,EAAW7C,EAAKG,SAEpBH,GAAKiB,IAAI6B,iBAE8B,UAAlC9C,EAAKG,UAAU4C,IAAI,aACpB/C,EAAKG,UAAU4C,IAAI,WAAY,YAEnC7D,EAAEc,EAAKwB,OAAOxB,EAAKgD,YAAYD,KAC3BE,QAAS,EACTC,QAAS,QACTC,WAAY,YAEhBnD,EAAKiB,IAAImC,YAAapD,EAAKwB,OAAOxB,EAAKgD,WAAYhD,EAAKwB,OAAOxB,EAAKqD,YAAarD,EAAKsD,SAEjFtD,EAAKuD,eAEDvD,EAAKuD,gBAAiB,IACvBV,EAAW3D,EAAGc,EAAKuD,eAEvBV,EAASW,MACL,WAAYxD,EAAKiB,IAAIwC,OAAO,IAC5B,WAAYzD,EAAKiB,IAAIyC,QAAQ,MAKhC1D,EAAK2D,UACNf,EAAY5C,EAAKiB,IAAI2C,aAAc5D,EAAKgD,WACxChD,EAAKiB,IAAI4C,gBAAiBjB,EAAWA,EAAUe,QAAU3D,EAAK8D,QAGlE9D,EAAK+D,cAAe,EACpB/D,EAAKiB,IAAI+C,YAAY,GACrBhE,EAAKiB,IAAIE,QAAQ,qBAAuBnB,IACxCA,EAAKiB,IAAIyB,qBAGbe,MAAO,SAAUD,GACb,GAAIxD,GAAOL,KAAKK,OACZ4C,EAAY5C,EAAKiB,IAAI2C,eACrBK,EAAgBjE,EAAKkE,aAAelE,EAAKc,MAExC0C,GACDxD,EAAKkE,aAAc,EAEnBlE,EAAKc,QAAS,EAEXmD,IACHjE,EAAKG,UAAUgE,SAAS,gBACxBnE,EAAKiB,IAAIE,QAAQ,gBAAkBnB,IAAQI,IAAI,gBAE1CwC,EAAUe,UACXS,aAAcpE,EAAKa,WACnBb,EAAKa,UAAY,EAGjBb,EAAKqE,mBAAuBnF,EAAEoF,MAAQtE,EAAKuE,YACtCvE,EAAKqE,kBAAoB,GAAKG,MAAMxE,EAAKqE,sBAC1CrE,EAAKqE,kBAAoBI,WAKzCf,OAAQ,SAAUF,GACd,GAAIxD,GAAOL,KAAKK,OACZ0E,GAAkB1E,EAAKkE,cAAgBlE,EAAKc,MAG3C0C,GACDxD,EAAKkE,aAAc,EAEnBlE,EAAKc,QAAS,EAGX4D,IACH1E,EAAKG,UAAUwE,YAAY,gBAGqB,IAA3C3E,EAAKwB,OAAOoD,OAAO,aAAahF,QACjCI,EAAKiB,IAAI4C,gBAAiB7D,EAAKiB,IAAI2C,eAAgB5D,EAAKqE,mBAC5DrE,EAAKiB,IAAIE,QAAQ,iBAAmBnB,EAAMA,EAAKqE,oBAAsBjE,IAAI,mBAIjF+B,IAAK,SAAUX,EAAQqD,GACnB,GAGIC,GAHA9E,EAAOL,KAAKK,OACZ+E,EAAgB/E,EAAK6B,WACrBmD,GAAiB,CAGE,WAAlB9F,EAAE+F,KAAKzD,KACRA,EAAStC,EAAEgG,KAAM1D,IAErBtC,EAAGsC,GAAS1B,KAAK,WACb,GAAI8C,GACAuC,EAAQjG,EAAES,KAETkF,GACD7E,EAAKG,UAAU0E,QAASM,GAExBnF,EAAKG,UAAUiF,OAAQD,GAE3BnF,EAAK6B,aACLe,EAAY5C,EAAKiB,IAAIoE,eAAgBF,GAGjCnF,EAAKwB,OADJqD,EACa3F,EAAGiG,GAAQhD,IAAKnC,EAAKwB,QAErBxB,EAAKwB,OAAOW,IAAKgD,GAEnCnF,EAAKiB,IAAIqE,UAAW1C,EAAWuC,IAASnF,EAAKe,OAE7CoE,EAAMpF,KAAK,aAAc6C,GACzB5C,EAAKiB,IAAIE,QAAQ,qBAAuBnB,EAAM4C,EAAWuC,MAG7DnF,EAAKiB,IAAI+C,YAAY,GAErBgB,EAAiBhF,EAAKyC,iBAAoC,EAAhBsC,GAAqB/E,EAAK6B,YAAc,EAC7EmD,IACKhF,EAAK+D,aAED/D,EAAK2D,UACXmB,EAAM9E,EAAKwB,OAAO5B,OAClBI,EAAKqD,UAAYrD,EAAKsD,QAAUwB,EAAM,EAAI,EACpC9E,EAAKa,WACPb,EAAKiB,IAAI4C,gBAAiB7D,IAL9BA,EAAKiB,IAAIQ,kBAWrBqB,eAAgB,WACZ,GACIyC,GADAvF,EAAOL,KAAKK,MAEhBuF,GAAkBC,SAAUxF,EAAKyF,eAAiB,EAAG,KACjDF,GAAmBvF,EAAKwB,OAAO5B,QAA4B,EAAlB2F,KACzCA,EAAkB,GAEtBvF,EAAKgD,UAAYuC,EACZvF,EAAKsD,SACNtD,EAAKqD,UAAYkC,EAAkB,EAC/BvF,EAAKqD,UAAY,IACjBrD,EAAKqD,UAAYrD,EAAKwB,OAAO5B,OAAS,KAG1CI,EAAKqD,UAAYkC,EAAkB,EAC/BvF,EAAKqD,WAAarD,EAAKwB,OAAO5B,SAC9BI,EAAKqD,UAAY,KAI7BqC,cAAe,WACX,GACIC,GADA3F,EAAOL,KAAKK,MAEXA,GAAKsD,SACNqC,EAAQ3F,EAAKqD,UAAY,EAAK,EAC9BrD,EAAKqD,UAAYsC,EAAO3F,EAAK6B,WAAa,EAAI7B,EAAKqD,UAAU,EAC7DrD,EAAKgD,UAAY2C,EAAO,EAAI3F,EAAKqD,UAAU,IAG3CsC,EAAQ3F,EAAKqD,UAAY,GAAMrD,EAAKwB,OAAO5B,OAC3CI,EAAKqD,UAAYsC,EAAO,EAAI3F,EAAKqD,UAAU,EAC3CrD,EAAKgD,UAAY2C,EAAO3F,EAAKwB,OAAO5B,OAAO,EAAII,EAAKqD,UAAU,IAItEuC,OAAQ,SAAUhD,EAAWiD,GACzB,GACIzD,GADApC,EAAO4C,CAkBX,OAfK5C,GAAK8F,QACN1D,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAK8F,SAC3BD,GAAU7F,EAAK+F,WACrB3D,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAK+F,WAE/B3D,IACFA,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAYrC,EAAKsC,KAErCtC,EAAK8F,QAAU,KACfnG,KAAKK,OAAO8F,QAAU,KAEjB1D,IACDA,EAAKlD,EAAEK,GAAGC,MAAM6C,YAAY2D,KAC5BhG,EAAKiB,IAAIb,IAAI,eAAiBJ,EAAKsC,GAAK,8BAErCF,GAGX6D,UAAW,SAAUJ,EAAQK,GACzB,GACIC,GAAOC,EAAMC,EAAMzD,EAAWR,EAD9BpC,EAAOL,KAAKK,MAGhB,OAAKA,GAAK6B,WAAa,OACnB7B,EAAKa,UAAY,KAGhBgF,GAAa7F,EAAKsG,OAAQtG,EAAKuG,cAChCvG,EAAKiB,IAAIuF,iBACTxG,EAAKsG,MAAO,EACZlC,aAAapE,EAAKa,WAClBb,EAAKa,UAAY,QAEhBb,EAAKsG,OAEc,IAAnBtG,EAAKa,WAAoBgF,KAG9BO,EAAOpG,EAAKwB,OAAOxB,EAAKgD,WACxBqD,EAAOrG,EAAKwB,OAAOxB,EAAKqD,WACxBT,EAAY5C,EAAKiB,IAAI2C,aAAc5D,EAAKqD,WACxCjB,EAAKpC,EAAKiB,IAAI2E,OAAQhD,EAAWiD,GAEjC7F,EAAKyG,IAAMrE,EAENyD,GAAoCpB,SAA1B7B,EAAU8D,cACrB9D,EAAU+D,MAAQ/D,EAAU8D,aAS3B1G,EAAKqD,WAAarD,EAAKgD,YACvB6C,IAAY7F,EAAKc,SAAWd,EAAKkE,aAAelE,EAAK2D,UAEtD3D,EAAKiB,IAAIE,QAAQ,gBAAkByB,EAAWwD,EAAMC,EAAMH,IACrD9D,EAAGwE,QACJxE,EAAGwE,OAAQhE,EAAWwD,EAAMC,EAAMH,GAEtCC,EAAQ,WACJnG,EAAKsG,MAAO,EAENtG,EAAKG,UAAUJ,KAAM,gBAGvBqC,EAAG+D,OACH/D,EAAG+D,MAAOvD,EAAWwD,EAAMC,EAAMH,GACrClG,EAAKiB,IAAIE,QAAQ,eAAiByB,EAAWwD,EAAMC,EAAMH,IACzDlG,EAAKiB,IAAI4C,gBAAiBjB,GAC1B5C,EAAKiB,IAAI+C,YAAY,KAGzBhE,EAAKsG,MAAO,EACRlE,EAAGyE,WACHzE,EAAGyE,WAAWjE,EAAWwD,EAAMC,EAAMH,EAAKC,GAE1CnG,EAAKiB,IAAI6F,aAAclE,EAAWwD,EAAMC,EAAMH,EAAKC,GAEvDnG,EAAKiB,IAAIyE,gBACT1F,EAAKiB,IAAI+C,cAEThE,EAAKiB,IAAI4C,gBAAiBjB,OAKlCkE,aAAc,SAAUlE,EAAWmE,EAAQC,EAAQd,EAAKe,GACpD,GAAIjH,GAAO4C,EACPwD,EAAOlH,EAAE6H,GAASV,EAAOnH,EAAE8H,GAC3BzH,EAAK,WAEL8G,EAAKa,QAAQlH,EAAKmH,SAAYlE,QAAS,GAAIjD,EAAK2G,MAAO3G,EAAKoH,QAAUpH,EAAKqH,OAAQJ,GAGvFZ,GAAKtD,IAAI/C,EAAKsH,eACdlB,EAAKc,QAAQlH,EAAKuH,YAAevH,EAAK2G,MAAO3G,EAAKwH,SAAWxH,EAAKqH,OAAQ,WACtEjB,EAAKrD,IAAI/C,EAAKyH,cACTzH,EAAK0H,MACNnI,MAGJS,EAAK0H,MACLnI,KAIRsE,gBAAiB,SAAUjB,EAAW+E,GAClC,GAAI3H,GAAOL,KAAKK,OACZ2D,EAA8Bc,SAApBkD,EAAgCA,EAAkB/E,EAAUe,OAC1E,OAAuB,KAAnB3D,EAAKqD,WAAmC,MAAdrD,EAAK4H,MAC/B5H,EAAKiB,IAAIb,IAAI,uBACbJ,EAAK2D,QAAU,EACVA,EACDkE,WAAW,WACP7H,EAAKiB,IAAIE,QAAQ,kBAAoBnB,KACtC2D,GAGH3D,EAAKiB,IAAIE,QAAQ,kBAAoBnB,SAGzCA,EAAKqD,UAAYrD,EAAKgD,YAGCyB,SAAtBzE,EAAK8H,eACD9H,EAAK8H,gBAAiB,GACtB5I,EAAEqD,WAAWvC,EAAK8H,eAAiB9H,EAAK8H,kBAAmB,IAC5D9H,EAAKiB,IAAIb,IAAI,qCACbJ,EAAK2D,QAAU,OACV3D,EAAKa,WACNuD,aAAapE,EAAKa,kBAIzB8C,IACD3D,EAAKuE,WAAarF,EAAEoF,MACKG,SAApBkD,IACD3H,EAAKqE,kBAAoBzB,EAAUe,SAEjC3D,EAAKc,QAAYd,EAAKkE,cACxBlE,EAAKa,UAAYgH,WAAW,WACxB7H,EAAKiB,IAAIgF,WAAW,GAAQjG,EAAKsD,UAClCK,OAKf6C,eAAgB,WACZ,GAAIxG,GAAOL,KAAKK,MACXA,GAAKwB,OAAOoD,OAAO,aAAahF,SACjCI,EAAKwB,OAAOuG,MAAK,GAAO,GACxB/H,EAAKiB,IAAIE,QAAQ,4BAA8BnB,KAG9CA,EAAKyG,KAAOzG,EAAKyG,IAAID,gBACtBxG,EAAKyG,IAAID,eAAgBxG,IAIjCgI,aAAc,SAAU9H,GACpB,GAAIF,GAAOL,KAAKK,MAWhB,OAVAoE,cAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKqD,UAAYrD,EAAKgD,UAAY9C,EAE9BF,EAAKqD,UAAY,EACjBrD,EAAKqD,UAAYrD,EAAKwB,OAAO5B,OAAS,EACjCI,EAAKqD,WAAarD,EAAKwB,OAAO5B,SACnCI,EAAKqD,UAAY,GAErBrD,EAAKiB,IAAIgF,WAAW,EAAO/F,GAAO,IAC3B,GAGXmF,eAAgB,SAAUF,GACtB,GACIjF,GAAKD,EADLD,EAAOL,KAAKK,OAEZ4C,EAAYuC,EAAMpF,UACtB,KAAK,GAAIO,KAAKsC,GAENA,EAAUrC,eAAeD,IAAM,eAAeE,KAAKF,KACnDJ,EAAM0C,EAAUtC,GAChBL,EAAYK,EAAEG,MAAM,cAAc,GAAGC,QAAQ,SAAUvB,GACvDa,EAAKiB,IAAIb,IAAI,KAAKJ,EAAK6B,WAAW,GAAG,IAAK5B,EAAU,IAAKC,EAAK,UAAWA,GAAK,KAC9E0C,EAAU3C,GAAaC,EAI/B0C,GAAY1D,EAAEyB,UAAYzB,EAAEK,GAAGC,MAAMoB,SAAUZ,EAAM4C,GACrDA,EAAUqF,SAAWjI,EAAK6B,UAE1B,WAEWe,GAAU3B,UACV2B,GAAUf,iBACVe,GAAUI,gBACVJ,GAAUS,gBACVT,GAAUpB,OACnB,MAAM0G,IAGR,MAAOtF,IAGXgB,aAAc,SAAUuE,GACpB,GAAInI,GAAOL,KAAKK,MACDyE,UAAV0D,IACDA,EAAQnI,EAAKgD,UAEjB,IAAImC,GAAQnF,EAAKwB,OAAO2G,GACpBvF,EAAY1D,EAAEiG,GAAOpF,KAAK,aAC9B,OAAOb,GAAEyB,UAAYX,EAAM4C,IAG/B0C,UAAW,SAAU1C,EAAWuC,EAAOiD,GACnC,GAAIpI,GAAOL,KAAKK,MAChBmF,GAAMpC,IAAKH,EAAUyF,cAChBD,EAAkB,GACnBjD,EAAMpC,IAAK,SAAUqF,GAGpB5D,MAAO5B,EAAU+D,SAClB/D,EAAU+D,MAAQzH,EAAEoD,GAAGgG,OAAO1F,EAAU+D,QAAUzH,EAAEoD,GAAGgG,OAAOC,UAC5D3F,EAAU8E,OACZ9E,EAAU+D,MAAQ/D,EAAU+D,MAAQ,GAExCxB,EAAMhB,SAAUnE,EAAKwI,aAGzBxE,WAAY,SAAUyE,EAASC,GAC3B,GAAI1I,GAAOL,KAAKK,MAChB,IAAMA,EAAK+D,aAAX,CAEA,GAAInB,GAAY5C,EAAKiB,IAAI2C,eACrBZ,EAAYhD,EAAKwB,OAAQxB,EAAKgD,YAE3ByF,GAAWC,KAAa,IAC3B1I,EAAKiB,IAAIE,QAAQ,4BAA8BnB,EAAM4C,EAAWI,IAC3DhD,EAAKgE,WAAa,KAItBhE,EAAK2I,kBACN3I,EAAKwB,OAAOmD,YAAa3E,EAAK2I,kBACzBC,GAAI5I,EAAKgD,WAAYmB,SAAUnE,EAAK2I,kBAGxCF,GAAWzI,EAAK6I,eACjB7I,EAAKwB,OAAOoD,OAAQ,SAAW5E,EAAK2I,iBAAmB,KAAM5F,IAAI,aAAc,UAE1D,IAApB/C,EAAKgE,YACN6D,WAAW,WACP7H,EAAKiB,IAAIE,QAAQ,qBAAuBnB,EAAM4C,EAAWI,EAAWyF,KACrE7F,EAAU+D,OAAS3G,EAAK0H,KAAO,EAAI,IAGjB,IAApB1H,EAAKgE,YACNhE,EAAKiB,IAAIE,QAAQ,qBAAuBnB,EAAM4C,EAAWI,EAAWyF,IAEnEA,GACDzI,EAAKiB,IAAIE,QAAQ,2BAA6BnB,EAAM4C,EAAWI,OAGvE8F,aAAc,SAAUC,GACpB,GAAI/I,GAAOL,KAAKK,OACZ0B,EAAW1B,EAAK+I,EACpB,OAAwB,gBAAbrH,GAEA,gBAAkBlB,KAAMkB,GAAa1B,EAAKG,UAAU4B,KAAML,GAAaxC,EAAGwC,GAEjFA,EAASI,OACFJ,EAEJxC,EAAEwC,IAGb0B,YAAa,SAAUgD,EAAMC,EAAMH,GAC/B,GAAIlG,GAAOL,KAAKK,MACVoG,KACFA,EAAOpG,EAAKwB,OAAOxB,EAAKgD,WACxBqD,EAAOrG,EAAKwB,OAAOxB,EAAKqD,WACxB6C,GAAOlG,EAAKsD,SAKhBpE,EAAEkH,GAAMrD,IAAI,SAAU/C,EAAKgB,KAE3B,IAAIgI,GACAC,EAAIjJ,EAAKgB,KAAO,EAChB8D,EAAM9E,EAAK6B,UACf,IAAIqE,EAAK,CACL,IAAM8C,EAAIhJ,EAAKgD,UAAY,EAAO8B,EAAJkE,EAASA,IACnC9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,IACvC,KAAMD,EAAI,EAAGA,EAAIhJ,EAAKgD,UAAWgG,IAC7B9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,SAEtC,CACD,IAAMD,EAAIhJ,EAAKgD,UAAY,EAAGgG,GAAK,EAAGA,IAClC9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,IACvC,KAAMD,EAAIlE,EAAM,EAAGkE,EAAIhJ,EAAKgD,UAAWgG,IACnC9J,EAAGc,EAAKwB,OAAOwH,IAAKjG,IAAK,SAAUkG,KAG3C/J,EAAEmH,GAAMtD,IAAI,SAAU/C,EAAKgB,KAAO,IAGtCkI,cAAe,SAAUC,GACrB,MAAOxJ,MAAKK,OAAOwB,OAAO2G,MAAOgB,KAMzCjK,EAAEK,GAAGC,MAAMY,IAAM,WAETgJ,OAAOC,SAAWA,QAAQjJ,KAC1BiJ,QAAQjJ,IAAI,YAAckJ,MAAMC,UAAUC,KAAKC,KAAKC,UAAW,OAGvExK,EAAEK,GAAGC,MAAMF,QAAU,WAAa,MAAO,WAAaA,GAStDJ,EAAEK,GAAGC,MAAM6C,aACPsH,UAEAC,MACIhD,OAAQ,SAAU5G,EAAMoG,EAAMC,EAAMH,GAChClG,EAAKiB,IAAImC,YAAaiD,EAAMD,EAAMF,GAClClG,EAAKsH,WAAcrE,QAAS,EAAGE,WAAY,UAAWD,QAAS,WAGvE8C,MACIY,OAAQ,SAAU5G,EAAMoG,EAAMC,EAAMH,GAChC,GAAInD,GAAM/C,EAAKiB,IAAI2C,aAAc5D,EAAKqD,WAAYgF,YAClDrI,GAAKiB,IAAImC,YAAagD,EAAMC,EAAMH,GAClClG,EAAKsH,UAAYpI,EAAEyB,OAAOoC,GAAOE,QAAS,EAAGE,WAAY,UAAWD,QAAS,UAC7ElD,EAAKmH,QAAWlE,QAAS,GACzBjD,EAAKuH,SAAYtE,QAAS,KAGlC4G,SACIjD,OAAQ,SAAU5G,EAAOoG,EAAMC,EAAMH,GACjC,GAAInD,GAAM/C,EAAKiB,IAAI2C,aAAc5D,EAAKqD,WAAYgF,YAClDrI,GAAKiB,IAAImC,YAAagD,EAAMC,EAAMH,GAClClG,EAAKsH,UAAYpI,EAAEyB,OAAOoC,GAAOE,QAAS,EAAGE,WAAY,UAAWD,QAAS,UAC7ElD,EAAKuH,SAAYtE,QAAS,KAGlC6G,YACIlD,OAAQ,SAAU5G,EAAMoG,EAAMC,EAAMH,GAChClG,EAAKiB,IAAImC,YAAagD,EAAMC,EAAMH,EAClC,IAAI6D,GAAI/J,EAAKG,UAAU4C,IAAI,WAAW,UAAUiH,OAChDhK,GAAKsH,WAAc2C,KAAM/D,EAAM6D,GAAMA,EAAGG,IAAK,EAAGjH,QAAS,EAAGE,WAAY,UAAWD,QAAS,SAC5FlD,EAAKyH,UAAa0C,OAAQnK,EAAKe,MAAQ,EAAGkJ,KAAM,GAChDjK,EAAKmH,QAAW8C,KAAM,GACtBjK,EAAKuH,SAAY0C,KAAM/D,GAAO6D,EAAIA,MAM9C7K,EAAEK,GAAGC,MAAMoB,UACPwJ,WAAkB,EAClBC,aAAkB,gDAClBvG,MAAkB,EAClBuD,OAAkB,KAClB/E,GAAiB,OACjBuG,eAAkB,EAClBjB,KAAkB,EAClB7B,SAAkBtB,OAClBiC,YAAkBjC,OAClB8B,aAAkB,EAClBvF,KAAkB,IAClBuC,cAAkB,EAClBD,SAAkB,EAClBqF,iBAAkB,qBAClBH,WAAkB,cAClBH,UAAoBiC,SAAU,WAAYJ,IAAK,EAAGD,KAAM,GACxDzI,OAAiB,QACjBmF,MAAkB,IAClBlB,cAAkB,EAClBiC,MAAkB,EAClB/D,QAAkB,IAClBK,WAAkB,GAItB9E,EAAEqL,UAAUC,MAAM,WACdtL,EAAGA,EAAEK,GAAGC,MAAMoB,SAASyJ,cAAe7K,WAGvCiL;AAGH,SAAUvL,GACV,YAkDA,SAASwL,GAAgBxC,EAAGlI,GACxB,GAAI2K,GAAOC,EAAQC,EACfC,EAAa9K,EAAK8K,UAEtB,IAAmB,aAAdA,EACDF,EAAS1L,EAAGc,EAAKwB,OAAQxB,EAAKgD,YAAc+H,cAC5C/K,EAAKG,UAAUyK,OAAQA,OAEtB,IAAK5K,EAAKgL,iBACXhL,EAAKG,UAAUyK,OAAQ5K,EAAKG,UAAU6J,QAAUhK,EAAKgL,sBAEpD,IAAoB,SAAfF,GAAmD,UAAxB5L,EAAE+F,KAAM6F,IAA4BA,GAAc,EAAM,CASzF,GAPID,EADgB,SAAfC,EACeG,EAAmB/C,EAAGlI,GAChC8K,GAAc9K,EAAKwB,OAAO5B,OAChB,EAEAkL,EAGfD,GAAiB7K,EAAKkL,eACvB,MAEJlL,GAAKkL,eAAiBL,EACjB7K,EAAKmL,WACNnL,EAAKmL,UAAUC,SAGnBT,EAAQzL,EAAGc,EAAKwB,OAAQqJ,GAAgBQ,WAAU,IAGlDV,EAAMW,WAAY,eAAgBvJ,KAAM,qBAAsBuJ,WAAY,eAE1EX,EAAM5H,KACFuH,SAAU,SACVnH,WAAY,SACZD,QAAS,UACVqI,UAAWvL,EAAKG,WAAYgE,SAAS,8BAA8BQ,YAAY,sBAClFgG,EAAM5I,KAAM,KAAMgB,IAAK,aAAc,UAErC/C,EAAKmL,UAAYR,GAIzB,QAASM,GAAmB/C,EAAGlI,GAC3B,GAAImI,GAAQ,EAAGqD,EAAM,EAUrB,OAPAxL,GAAKwB,OAAO1B,KAAK,SAASkJ,GACtB,GAAIyC,GAAIvM,EAAES,MAAMiL,QACXa,GAAID,IACLA,EAAMC,EACNtD,EAAQa,KAGTb,EAGX,QAASuD,GAAUxD,EAAGlI,EAAM2L,EAAUC,GAClC,GAAIH,GAAIvM,EAAE0M,GAAUb,aACpB/K,GAAKG,UAAU+G,SAAW0D,OAAQa,GAAKzL,EAAK6L,gBAAiB7L,EAAK8L,kBAGtE,QAASC,GAAW7D,EAAGlI,GACdA,EAAKgM,sBACN9M,EAAEkK,QAAQ6C,IAAK,2BAA4BjM,EAAKgM,qBAChDhM,EAAKgM,oBAAsB,MAE/BhM,EAAKG,UAAU8L,IAAK,wCAAyCvB,GAC7D1K,EAAKG,UAAU8L,IAAK,kBAAmBF,GACvC/L,EAAKG,UAAU8L,IAAK,eAAgBP,GAE/B1L,EAAKmL,YACNnL,EAAKmL,UAAUC,SACfpL,EAAKmL,UAAY,MA1HzBjM,EAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBkK,WAAY,EACZe,gBAAiB,IACjBC,iBAAkB,OAGtB5M,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAqC9C,QAASmM,KACLzB,EAAgBxC,EAAGlI,GArCvB,GAGIoM,GAHAtB,EAAa9K,EAAK8K,WAClBuB,EAAInN,EAAE+F,KAAM6F,GACZwB,EAAiB,MAGV,WAAND,GAAwB,WAANA,KAIvBrM,EAAKG,UAAU+L,GAAI,wCAAyCxB,GAC5D1K,EAAKG,UAAU+L,GAAI,kBAAmBH,GAEnB,aAAdjB,EACD9K,EAAKG,UAAU+L,GAAI,eAAgBR,GAEvB,WAANW,GAAkB,WAAW7L,KAAMsK,KAEzCsB,EAAQtB,EAAWrK,MAAM,gBACzB2L,EAAQA,EAAM,GAAKA,EAAM,GACzBpM,EAAKgL,iBAAmBoB,GAKjB,WAANC,IAEDrM,EAAKgM,oBAAsB,WACvB5H,aAAckI,GACdA,EAAiBzE,WAAYsE,EAAU,KAG3CjN,EAAEkK,QAAQ8C,GAAI,2BAA4BlM,EAAKgM,sBAGnDnE,WAAYsE,EAAU,QAqFvB1B;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChB2L,QAAkB,mBAClBC,gBAAkB,gCAClBC,QAAkB,mBAClBC,gBAAkB,0CAClBC,cAAkB,YAGtBzN,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,EAAM4C,EAAWI,GAC/D,GAA4B,YAAvBhD,EAAK2M,cAAV,CAGAzN,EAAEY,MAAM,UAAU,WAAY,WAC1B,GAAIiJ,GAAOpJ,KACPiN,EAAWhK,EAAUmG,EAAK,YAC1BI,EAAKnJ,EAAKiB,IAAI6H,aAAcC,EAC5BI,GAAGvJ,QAAUgN,GACbzD,EAAG0D,KAAM7M,EAAKiB,IAAI6L,KAAMF,EAAUhK,EAAW5C,EAAMgD,IACnDmG,EAAG4D,QAGH5D,EAAG6D,YAKf9N,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAC5C,GAAImJ,EACJjK,GAAEY,MAAM,UAAU,WAAY,WAC1B,GAAIiJ,GAAOpJ,KAAMiN,EAAW5M,EAAK+I,EAAK,WACjC/I,GAAK+I,IAAS6D,IACfzD,EAAKnJ,EAAKiB,IAAI6H,aAAc,WAC5BK,EAAG8D,cAKZxC;AAGH,SAAUvL,GACV,YAEA,IAAIgO,GAAKhO,EAAEK,GAAGC,KAEdN,GAAEK,GAAGC,MAAQ,SAAUC,GACnB,GAAI0N,GAAKC,EAAOpN,EACZqB,EAAOnC,EAAEmO,UAAW3D,UAExB,OAA0B,UAArBxK,EAAE+F,KAAMxF,GACFE,KAAKH,MAAO,OAAQC,GAGL,UAArBP,EAAE+F,KAAMxF,GACFE,KAAKG,KAAK,WACb,GAAIwN,EAIJ,OAHAH,GAAM1N,EACNO,EAAOd,EAAES,MAAMI,KAAK,cAEN0E,SAATzE,MACDkN,GAAG9M,IAAI,2DAA6D+M,EAAM,cAI1EA,EAAa,QAAPA,EAAgB,OAASA,EAC/BC,EAAQpN,EAAKiB,IAAKkM,GACbjO,EAAEqD,WAAY6K,IACfE,EAAUpO,EAAEmO,UAAWhM,GACvBiM,EAAQC,QACDH,EAAMI,MAAOxN,EAAKiB,IAAKqM,QAG9BJ,GAAG9M,IAAK,oBAAqB+M,MAMlCD,EAAGM,MAAO7N,KAAM+J,YAK/BxK,EAAEyB,OAAQzB,EAAEK,GAAGC,MAAO0N,GAEtBhO,EAAEyB,OAAQuM,EAAGjM,KACToF,KAAM,WACF,GAAIrG,GAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAGA,GAAIkH,GAAQzN,EAAKsD,QAAU,GAAK,CAC3BtD,GAAKoK,aAAc,GAAWpK,EAAKgD,UAAYyK,GAAWzN,EAAK6B,aAGpE7B,EAAKiB,IAAI+G,aAAcyF,GACvBzN,EAAKiB,IAAIE,QAAQ,cAAgBnB,IAAQI,IAAI,iBAGjDsN,KAAM,WACF,GAAI1N,GAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAEA,GAAIkH,GAAQzN,EAAKsD,QAAU,EAAI,EAC1BtD,GAAKoK,aAAc,GAAWpK,EAAKgD,UAAYyK,EAAU,IAG9DzN,EAAKiB,IAAI+G,aAAcyF,GACvBzN,EAAKiB,IAAIE,QAAQ,cAAgBnB,IAAQI,IAAI,iBAGjDuN,QAAS,WACLhO,KAAKoI,MAEL,IAAI/H,GAAOL,KAAKK,OACZ4N,EAAQ1O,EAAEqD,WAAYrD,EAAE2O,OAAU3O,EAAE2O,MAAQ3O,EAAEmB,IAClD+D,cAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKiB,IAAI8G,OACT/H,EAAKiB,IAAIE,QAAS,mBAAqBnB,IAASI,IAAI,mBACpDJ,EAAKG,UAAU2N,aACfF,EAAO5N,EAAKG,UAAU,GAAI,eAAe,GAGlCH,EAAK+N,wBACR/N,EAAKG,UAAUmL,WAAY,SAC3BtL,EAAKwB,OAAO8J,WAAY,SACxBtL,EAAKwB,OAAOmD,YAAa3E,EAAK2I,mBAElC3I,EAAKwB,OAAO1B,KAAK,WACbZ,EAAES,MAAMmO,aACRF,EAAOjO,KAAM,eAAe,MAIpCqO,KAAM,SAAU7F,EAAO7F,GAEnB,GAAI4D,GACAlG,EAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAEA,GAAI0H,GAAMzI,SAAU2C,EAAO,GAC3B,IAAI3D,MAAMyJ,IAAc,EAANA,GAAWA,GAAOjO,EAAKwB,OAAO5B,OAE5C,WADAI,GAAKiB,IAAIb,IAAI,8BAAgC6N,EAGjD,IAAIA,GAAOjO,EAAKgD,UAEZ,WADAhD,GAAKiB,IAAIb,IAAI,mCAAoC6N,EAGrDjO,GAAKqD,UAAY4K,EACjB7J,aAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKiB,IAAIb,IAAI,SAAU6N,EAAK,iBAC5B/H,EAAMlG,EAAKgD,UAAYhD,EAAKqD,UAC5BrD,EAAK8F,QAAUxD,EACftC,EAAKiB,IAAIgF,WAAW,EAAMC,KAG9B6B,KAAM,WACF,GAAI/H,GAAOL,KAAKK,OACZ6C,EAAW7C,EAAKG,SACpBiE,cAAapE,EAAKa,WAClBb,EAAKa,UAAY,EACjBb,EAAKiB,IAAIuF,iBACJxG,EAAKuD,eACDvD,EAAKuD,gBAAiB,IACvBV,EAAW3D,EAAGc,EAAKuD,eACvBV,EAASoJ,IAAI,0BAEjBjM,EAAKiB,IAAIE,QAAQ,iBAAmBnB,IAAQI,IAAI,kBAGpD8N,OAAQ,WACJ,GAAIlO,GAAOL,KAAKK,MAChBA,GAAKiB,IAAI0M,UACT3N,EAAKG,UAAUX,SAGnB4L,OAAQ,SAAUjD,GAGd,IAAM,GADFhD,GAAOgJ,EADPnO,EAAOL,KAAKK,OACUwB,KAAayG,EAAW,EACxCe,EAAE,EAAGA,EAAIhJ,EAAKwB,OAAO5B,OAAQoJ,IACnC7D,EAAQnF,EAAKwB,OAAOwH,GACfA,GAAKb,EACNgG,EAAgBhJ,GAGhB3D,EAAO4M,KAAMjJ,GACbjG,EAAGiG,GAAQpF,KAAK,cAAckI,SAAWA,EACzCA,IAGHkG,KACDnO,EAAKwB,OAAStC,EAAGsC,GACjBxB,EAAK6B,aACL3C,EAAGiP,GAAgB/C,SACfjD,GAASnI,EAAKgD,UACdhD,EAAKiB,IAAI+G,aAAc,GACjBG,EAAQnI,EAAKgD,UACnBhD,EAAKgD,YAELhD,EAAKgD,YAEThD,EAAKiB,IAAIE,QAAQ,uBAAyBnB,EAAMmI,EAAOgG,IAAiB/N,IAAI,uBAC5EJ,EAAKiB,IAAI+C,iBAOrB9E,EAAEqL,UAAU2B,GAAG,cAAe,mBAAoB,SAAShE,GAEvDA,EAAEmG,gBACF,IAAIlF,GAAKjK,EAAES,MACP2O,EAAUnF,EAAGpJ,KAAK,aAClB6B,EAAUuH,EAAGpJ,KAAK,kBAAoB,kBAC1Cb,GAAE0C,GAASpC,MAAM8O,EAASnF,EAAGpJ,KAAK,iBAInC0K;AAGH,SAAUvL,GACV,YAyBA,SAASqP,GAAcvO,EAAMwO,GACzB,GAAIC,EACJ,OAAKzO,GAAK0O,gBACN1O,EAAK0O,YAAa,IAItBD,EAAOrF,OAAOuF,SAASF,KAAKG,UAAU,OAEtC5O,GAAKwB,OAAO1B,KAAK,SAASkJ,GACtB,GAAK9J,EAAES,MAAMI,KAAM,eAAkB0O,EAAO,CACxC,GAAKD,KAAqB,EACtBxO,EAAKyF,cAAgBuD,MAEpB,CACD,GAAI9C,GAAMlG,EAAKgD,UAAYgG,CAC3BhJ,GAAKqD,UAAY2F,EACjBhJ,EAAKiB,IAAIgF,WAAW,EAAMC,GAE9B,OAAO,MA1CnBhH,EAAEqL,UAAU2B,GAAI,uBAAwB,SAAUhE,EAAGlI,GACjDuO,EAAcvO,GAAM,GAEpBA,EAAK6O,cAAgB,WACjBN,EAAcvO,GAAM,IAGxBd,EAAGkK,QAAS8C,GAAI,aAAclM,EAAK6O,iBAGvC3P,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,EAAM4C,GAC/CA,EAAU6L,MAAU,IAAM7L,EAAU6L,MAAUrF,OAAOuF,SAASF,OAC/DzO,EAAK0O,YAAa,EAClBtF,OAAOuF,SAASF,KAAO7L,EAAU6L,QAIzCvP,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GACvCA,EAAK6O,eACN3P,EAAGkK,QAAS6C,IAAK,aAAcjM,EAAK6O,kBA4BzCpE;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBkO,QAAQ,IAGZ5P,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAU5C,QAASmC,GAAKX,EAAQqD,GA6DlB,QAASkK,GAAU5J,GACf,GAAIiB,EACgB,SAAfpG,EAAK8O,QACNE,EAASZ,KAAMjJ,GACK,IAAftD,IAEDmN,EAAS/M,KAAMgN,GACfC,EAAM1B,MAAOxN,EAAKiB,KAAO+N,EAAUnK,IACnC7E,EAAKG,UAAUwE,YAAY,oBAI/ByB,EAAOlH,EAAEc,EAAKwB,OAAOxB,EAAKgD,YAC1BkM,EAAM1B,MAAOxN,EAAKiB,KAAOkE,EAAON,IAChCuB,EAAK2G,OACL/M,EAAKG,UAAUwE,YAAY,kBAInC,QAASsK,GAAOE,EAAGC,GACf,MAAOD,GAAEpP,KAAK,SAAWqP,EAAErP,KAAK,SAhFpC,GAAIiP,KACJ,IAAyB,UAApB9P,EAAE+F,KAAMzD,GACTA,EAAStC,EAAEgG,KAAM1D,OAChB,IAAyB,UAApBtC,EAAE+F,KAAMzD,GACd,IAAK,GAAIwH,GAAE,EAAGA,EAAIxH,EAAO5B,OAAQoJ,IAC7BxH,EAAOwH,GAAK9J,EAAEsC,EAAOwH,IAAI,EAGjCxH,GAAStC,EAAGsC,EACZ,IAAIK,GAAaL,EAAO5B,MAEjBiC,KAGPL,EAAOuB,IAAI,aAAa,UAAUsM,SAAS,QAAQvP,KAAK,SAASkJ,GAkC7D,QAASsG,KACY,MAAV7B,MACD5L,EACFkN,EAAU5J,IApClB,GAAIsI,GAAQ,EACRtI,EAAQjG,EAAES,MACV4P,EAASpK,EAAMqK,GAAG,OAASrK,EAAQA,EAAMpD,KAAK,MAIlD,OAHAoD,GAAMpF,KAAK,QAASiJ,GAEpBuG,EAASA,EAAO3K,OAAO,8BAA8BA,OAAO,kBACrD2K,EAAO3P,QAMd6N,EAAQ8B,EAAO3P,WACf2P,GAAOzP,KAAK,WAEHH,KAAK8P,SACNH,IAGApQ,EAAES,MAAM+P,KAAK,WACTJ,MACDpD,GAAG,QAAS,WACM,MAAVuB,IAEHzN,EAAKiB,IAAIb,IAAI,iCAAkCT,KAAKgQ,KAC9B,MAAf9N,GAAmC,QAAf7B,EAAK8O,QAC5BI,EAAM1B,MAAOxN,EAAKiB,KAAO+N,EAAUnK,aAnBjDhD,MACFmN,GAASZ,KAAMjJ,MAiClBtD,GACD7B,EAAKG,UAAUgE,SAAS,kBAnEhC,GAAI+K,EAEElP,GAAK8O,SAIXI,EAAQlP,EAAKiB,IAAIkB,IACjBnC,EAAKiB,IAAIkB,IAAMA,MAwFhBsI;AAGH,SAAUvL,GACV,YAsDA,SAAS0Q,GAAgB5P,EAAM4C,EAAWuC,GACtC,GAAI0K,GACAC,EAAS9P,EAAKiB,IAAI6H,aAAc,QACpCgH,GAAOhQ,KAAK,WACR,GAAIiQ,GAAQ7Q,EAAES,KACd,IAAKiD,EAAUoN,cAAgB,CAC3B,GAAIC,GAASjQ,EAAKiB,IAAI6L,KAAMlK,EAAUoN,cAAepN,EAAW5C,EAAMmF,EAAM,GAC5E0K,GAAY3Q,EAAG+Q,GAASZ,SAAUU,OAGlCF,GAAYE,EAAMG,WAAWtH,GAAI5I,EAAK6B,WAAa,EAEvDgO,GAAU3D,GAAIlM,EAAKmQ,WAAY,SAASjI,GAC7BlI,EAAKoQ,kBACRlI,EAAEmG,iBACNrO,EAAKiB,IAAIoP,KAAMN,EAAO7H,EAAEoI,mBAKpC,QAASD,GAAMN,EAAOQ,GAElB,GAAIvQ,GAAOL,KAAKK,MAChB,KAAKA,EAAKsG,MAAUtG,EAAKuG,YAAzB,CAGA,GAAI4B,GAAQ4H,EAAMG,WAAW/H,MAAOoI,GAChClN,EAAY8E,EACZjC,EAAMlG,EAAKgD,UAAYK,CACvBrD,GAAKgD,WAAaK,IAGtBrD,EAAKqD,UAAYA,EACjBrD,EAAK8F,QAAU9F,EAAKwQ,QACpBxQ,EAAKiB,IAAIgF,WAAW,EAAMC,GAC1BlG,EAAKiB,IAAIE,QAAQ,yBAA0BnB,EAAM+P,EAAOQ,MAvF5DrR,EAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBmP,MAAkB,iBAClBU,iBAAkB,qBAClBN,WAAkB,cAClBC,iBAAkB3L,OAClBuL,cAAkB,wBAGtB9Q,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,EAAMiB,GAElDA,EAAI2O,eAAiBA,IAGzB1Q,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,EAAM4C,EAAW8N,GAC1D1Q,EAAK+P,QACN/P,EAAKiB,IAAI2O,eAAiB5P,EAAM4C,EAAW8N,GAC3C1Q,EAAKiB,IAAIoP,KAAOA,KAIxBnR,EAAEqL,UAAU2B,GAAI,sBAAuB,SAAUhE,EAAGlI,EAAMmI,GACtD,GAAKnI,EAAK+P,MAAQ,CACd,GAAID,GAAS9P,EAAKiB,IAAI6H,aAAc,QACpCgH,GAAOhQ,KAAK,WACR,GAAIiQ,GAAQ7Q,EAAES,KACdT,GAAG6Q,EAAMG,WAAW/H,IAASiD,cAKzClM,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAC9C,GAAI8P,EAEC9P,GAAK+P,QACND,EAAS9P,EAAKiB,IAAI6H,aAAc,SAChCgH,EAAOhQ,KAAK,WACTZ,EAAES,MAAMuQ,WAAWvL,YAAa3E,EAAKyQ,kBACnC7H,GAAI5I,EAAKgD,WAAYmB,SAAUnE,EAAKyQ,uBAKjDvR,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAC5C,GAAI+P,GAAQ/P,EAAKiB,IAAI6H,aAAc,QAE9BiH,KACDA,EAAMG,WAAWjE,IAAKjM,EAAKmQ,YACtBnQ,EAAKgQ,eACND,EAAM9C,YA0CfxC;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChByF,KAAgB,gBAChBsK,UAAgB,cAChBC,cAAgB,WAChBlD,KAAgB,gBAChBmD,UAAgB,cAChBC,OAAgB,IAGpB5R,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAW9C,GAVAA,EAAKiB,IAAI6H,aAAc,QAASoD,GAAIlM,EAAK2Q,UAAW,SAASzI,GACzDA,EAAEmG,iBACFrO,EAAKiB,IAAIoF,SAGbrG,EAAKiB,IAAI6H,aAAc,QAASoD,GAAIlM,EAAK6Q,UAAW,SAAS3I,GACzDA,EAAEmG,iBACFrO,EAAKiB,IAAIyM,SAGR1N,EAAK8Q,MAAQ,CACd,GAAIH,GAAY3Q,EAAK+Q,UAAY,gBAAkB,kCAC/CF,EAAY7Q,EAAK+Q,UAAY,kBAAoB,mCACrD/Q,GAAKG,UAAU+L,GAAIyE,EAAW,WAC1B3Q,EAAK8F,QAAU9F,EAAKgR,QACpBhR,EAAKiB,IAAIoF,SAEbrG,EAAKG,UAAU+L,GAAI2E,EAAW,WAC1B7Q,EAAK8F,QAAU9F,EAAKgR,QACpBhR,EAAKiB,IAAIyM,YAKrBxO,EAAEqL,UAAU2B,GAAI,oBAAqB,SAAUhE,EAAGlI,GAC9C,IAAKA,EAAKoK,UAAV,CAGA,GAAI6G,GAAMjR,EAAK4Q,cACXvK,EAAOrG,EAAKiB,IAAI6H,aAAc,QAC9B4E,EAAO1N,EAAKiB,IAAI6H,aAAc,QAC9BoI,EAAclR,EAAKmR,cAAgB,EACnCC,EAAqC3M,SAAtBzE,EAAKqR,aAA4BrR,EAAKqR,aAAarR,EAAK6B,WAAa,CAEnF7B,GAAKgD,WAAaoO,EACnB/K,EAAKlC,SAAU8M,GAAMK,KAAM,YAAY,GAEvCjL,EAAK1B,YAAasM,GAAMK,KAAM,YAAY,GAEzCtR,EAAKgD,YAAckO,EACpBxD,EAAKvJ,SAAU8M,GAAMK,KAAM,YAAY,GAEvC5D,EAAK/I,YAAasM,GAAMK,KAAM,YAAY,MAIlDpS,EAAEqL,UAAU2B,GAAI,kBAAmB,SAAUhE,EAAGlI,GAC5CA,EAAKiB,IAAI6H,aAAc,QAASmD,IAAKjM,EAAK2Q,WAC1C3Q,EAAKiB,IAAI6H,aAAc,QAASmD,IAAKjM,EAAK6Q,WAC1C7Q,EAAKG,UAAU8L,IAAK,sGAGrBxB;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChB2Q,aAAa,IAGjBrS,EAAEqL,UAAU2B,GAAI,uBAAwB,SAAUhE,EAAGlI,GACjD,GAAMA,EAAKuR,YAAX,CAGA,GAKI/P,GAAQgQ,EALRvQ,EAAMjB,EAAKiB,IACXwQ,EAASxQ,EAAIoF,KACbqL,EAASzQ,EAAIyM,KACbiE,EAAc1Q,EAAIgF,UAClBhB,EAAO/F,EAAE+F,KAAMjF,EAAKuR,YAGxB,IAAa,SAARtM,EACDzD,EAASxB,EAAKuR,gBAEb,IAAIrS,EAAEqD,WAAYvC,EAAKuR,aACxB/P,EAASxB,EAAKuR,YAAavR,OAE1B,IAAa,UAARiF,EAAmB,CAGzB,GAFAuM,EAAWtS,EAAGc,EAAKuR,aACnB/P,EAAStC,EAAEgG,KAAMsM,EAAS3E,SACpBrL,EACF,MAEJ,IAAK,QAAQhB,KAAMgB,GACf,IACIA,EAAStC,EAAE0S,UAAWpQ,GAE1B,MAAMqQ,GAEF,WADA5Q,GAAIb,IAAK,mCAAoCyR,OAMjDrQ,GAASA,EAAOsQ,MAAO,GAAIC,QAAQP,EAASzR,KAAK,gBAAkB,OAG5DyB,EAAQA,EAAO5B,OAAS,IAC3B4B,EAAOwQ,MAMdL,IACD1Q,EAAIgF,UAAY,SAAUJ,EAAQK,GAC9B,GAAIiC,GAAOhD,CAEX,OAAKU,IAA4B,IAAlBrE,EAAO5B,WAClB+R,GAAYnE,MAAOxN,EAAKiB,KAAO4E,EAAQK,SAItCA,GAAOlG,EAAKgD,WAAehD,EAAK6B,WAAW,GAC5CsD,EAAQ3D,EAAQ,GAChBA,EAASA,EAAOyQ,MAAO,GACvBjS,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChD6H,WAAW,WACP7H,EAAKiB,IAAI+G,aAAc,IACzB,MAENhI,EAAKiB,IAAIkB,IAAKgD,IAEPe,GAA0B,IAAnBlG,EAAKgD,UAanB2O,EAAYnE,MAAOxN,EAAKiB,KAAO4E,EAAQK,KAZvCiC,EAAQ3G,EAAO5B,OAAO,EACtBuF,EAAQ3D,EAAQ2G,GAChB3G,EAASA,EAAOyQ,MAAO,EAAG9J,GAC1BnI,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChD6H,WAAW,WACP7H,EAAKgD,UAAY,EACjBhD,EAAKiB,IAAI+G,aAAc,KACzB,MAENhI,EAAKiB,IAAIkB,IAAKgD,GAAO,OAQ5BsM,IACDxQ,EAAIoF,KAAO,WACP,GAAIrG,GAAOL,KAAKK,MAChB,IAAKwB,EAAO5B,QAAUI,EAAKgD,WAAehD,EAAK6B,WAAa,EAAM,CAC9D,GAAIsD,GAAQ3D,EAAQ,EACpBA,GAASA,EAAOyQ,MAAO,GACvBjS,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChDyR,EAAOjE,MAAOxN,EAAKiB,KACnBjB,EAAKG,UAAUwE,YAAY,mBAE/B3E,EAAKG,UAAUgE,SAAS,iBACxBnE,EAAKiB,IAAIkB,IAAKgD,OAGdsM,GAAOjE,MAAOxN,EAAKiB,OAK1ByQ,IACDzQ,EAAIyM,KAAO,WACP,GAAI1N,GAAOL,KAAKK,MAChB,IAAKwB,EAAO5B,QAA6B,IAAnBI,EAAKgD,UAAkB,CACzC,GAAImF,GAAQ3G,EAAO5B,OAAO,EACtBuF,EAAQ3D,EAAQ2G,EACpB3G,GAASA,EAAOyQ,MAAO,EAAG9J,GAC1BnI,EAAKG,UAAU+R,IAAI,oBAAqB,SAAShK,EAAGlI,GAChDA,EAAKgD,UAAY,EACjBhD,EAAKiB,IAAI+G,aAAc,IACvBhI,EAAKG,UAAUwE,YAAY,mBAE/B3E,EAAKG,UAAUgE,SAAS,iBACxBnE,EAAKiB,IAAIkB,IAAKgD,GAAO,OAGrBuM,GAAOlE,MAAOxN,EAAKiB,WAMhCwJ;AAGH,SAAUvL,GACV,YAEAA,GAAEyB,OAAOzB,EAAEK,GAAGC,MAAMoB,UAChBuR,UAAW,kBAGfjT,EAAEyB,OAAOzB,EAAEK,GAAGC,MAAMyB,KAChB6L,KAAM,SAAUsF,EAAKpS,GACjB,GAAIqS,GAAQ,GAAIN,QAAQ/R,EAAKmS,WAAajT,EAAEK,GAAGC,MAAMoB,SAASuR,UAAW,KACrE9Q,EAAOnC,EAAEmO,UAAW3D,UAExB,OADArI,GAAKkM,QACE6E,EAAI1R,QAAQ2R,EAAO,SAASC,EAAGF,GAClC,GAAIpJ,GAAGuJ,EAAGC,EAAKlB,EAAMmB,EAAQL,EAAIN,MAAM,IACvC,KAAK9I,EAAE,EAAGA,EAAI3H,EAAKzB,OAAQoJ,IAEvB,GADAwJ,EAAMnR,EAAK2H,GACX,CAEA,GAAIyJ,EAAM7S,OAAS,EAEf,IADA0R,EAAOkB,EACFD,EAAE,EAAGA,EAAIE,EAAM7S,OAAQ2S,IACxBC,EAAMlB,EACNA,EAAOA,EAAMmB,EAAMF,KAAQH,MAG/Bd,GAAOkB,EAAIJ,EAGf,IAAIlT,EAAEqD,WAAW+O,GACb,MAAOA,GAAK9D,MAAMgF,EAAKnR,EAC3B,IAAaoD,SAAT6M,GAA+B,OAATA,GAAiBA,GAAQc,EAC/C,MAAOd,GAEf,MAAOc,SAKhB3H","sourceRoot":"http://malsup.github.io/"} \ No newline at end of file diff --git a/app/controllers/admin/designs_controller.rb b/app/controllers/admin/designs_controller.rb index 2b271d6..79d5c69 100644 --- a/app/controllers/admin/designs_controller.rb +++ b/app/controllers/admin/designs_controller.rb @@ -2,10 +2,16 @@ class Admin::DesignsController < OrbitAdminController layout "structure" def index - @designs = Dir.glob("#{Rails.root}/app/templates/*").map{|template| { - "key"=>template.split('/').last, - "title"=>template.split('/').last.titleize, - "author"=>"Ray" - }} + @designs = [] + Dir.glob("#{Rails.root}/app/templates/*").each do |template| + if template.split('/').last != "mobile" + @designs << { + "key"=>template.split('/').last, + "title"=>template.split('/').last.titleize, + "author"=>"Ray" + } + end + end + end end \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8bb40e2..2070561 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -38,7 +38,7 @@ class ApplicationController < ActionController::Base end def get_key - @key = current_site.template + @key = $mobile.blank? ? current_site.template : "mobile/orbit_mobile" end def current_site @@ -73,6 +73,11 @@ class ApplicationController < ActionController::Base redirect_to root_path if is_mobile_path end end + + if path.include?("page_parts") or path.include?("edit_view") + $mobile = params[:mobile_view].blank? ? "" : "/mobile" + end + end def log_user_action diff --git a/app/controllers/page_parts_controller.rb b/app/controllers/page_parts_controller.rb index 24b2768..ed48ef3 100644 --- a/app/controllers/page_parts_controller.rb +++ b/app/controllers/page_parts_controller.rb @@ -1,7 +1,7 @@ class PagePartsController < ApplicationController before_action :get_key def new - @part = PagePart.new + @part = part_model.new @part.sub_parts.build @part_number = params[:part] @page_id = params[:page_id] @@ -14,7 +14,8 @@ class PagePartsController < ApplicationController def edit page = Page.find(params[:page_id]) - @part = page.page_parts.where(:part_id => params[:id]).first + parts = $mobile.blank? ? page.page_parts : page.mobile_page_parts + @part = parts.where(:part_id => params[:id]).first @part.sub_parts.build @page_id = params[:page_id] @part_number = params[:id] @@ -26,7 +27,7 @@ class PagePartsController < ApplicationController end def edit_sub_part - @part = PagePart.find(params[:part_id]) + @part = part_model.find(params[:part_id]) @subpart = SubPart.find(params[:sub_part_id]) @select_number = @part.sub_parts.index(@subpart) @kind = @subpart.kind @@ -80,7 +81,7 @@ class PagePartsController < ApplicationController def getwidgets module_name = params[:module] - part = PagePart.where(:part_id => params[:part_id], :page_id => params[:page_id]).first + part = part_model.where(:part_id => params[:part_id], :page_id => params[:page_id]).first @select_number = part.sub_parts.count rescue 0 @widget_types = [] Dir.glob("#{Rails.root}/app/templates/#{@key}/modules/#{module_name.downcase}/*").each do |w| @@ -108,7 +109,7 @@ class PagePartsController < ApplicationController def info page = Page.find(params[:page_id]) - parts = page.page_parts + parts = OrbitHelper.is_mobile_view ? page.mobile_page_parts : page.page_parts data = [] parts.each do |part| partid = "data-pp=" + part.part_id.to_s @@ -123,14 +124,14 @@ class PagePartsController < ApplicationController end def create - @part = PagePart.new(part_params) + @part = part_model.new(part_params) @part.save! render :json => {"success"=>true}.to_json end def update - @part = PagePart.find(params[:part_id]) + @part = part_model.find(params[:part_id]) @part.update_attributes(part_params) render :json => {"success"=>true}.to_json end @@ -141,4 +142,8 @@ class PagePartsController < ApplicationController params.require(:page_part).permit! end + def part_model + $mobile.blank? ? "page_part".classify.constantize : "mobile_page_part".classify.constantize + end + end \ No newline at end of file diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index c082551..6ce2399 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -31,7 +31,7 @@ class PagesController < ApplicationController impressionist(page) OrbitHelper.set_params params OrbitHelper.set_site_locale locale - render :html => render_final_page("home#{$mobile}",page,true).html_safe + render :html => render_final_page("home",page,true).html_safe end def show @@ -172,38 +172,37 @@ class PagesController < ApplicationController def render_final_page(original_view=get_view,page,layout) if layout - parts = page.page_parts rescue [] + parts = $mobile.blank? ? (page.page_parts rescue []) : (page.mobile_page_parts rescue []) + @part_partials = {} - if $mobile.blank? - parts.each do |part| - subparts = part.sub_parts - partials = [] - subparts.each do |subpart| - if subpart.kind == "module_widget" - OrbitHelper.set_widget_data_count subpart.data_count - OrbitHelper.set_widget_categories subpart.categories - OrbitHelper.set_widget_module_app subpart.module - OrbitHelper.set_widget_item_url subpart - custom_value = subpart.custom_string_field || subpart.custom_array_field rescue nil - if !custom_value.nil? - OrbitHelper.set_widget_custom_value custom_value - end - partials << render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type) - elsif subpart.kind == "text" - partials << subpart.content - end + parts.each do |part| + subparts = part.sub_parts + partials = [] + subparts.each do |subpart| + if subpart.kind == "module_widget" + OrbitHelper.set_widget_data_count subpart.data_count + OrbitHelper.set_widget_categories subpart.categories + OrbitHelper.set_widget_module_app subpart.module + OrbitHelper.set_widget_item_url subpart + custom_value = subpart.custom_string_field || subpart.custom_array_field rescue nil + if !custom_value.nil? + OrbitHelper.set_widget_custom_value custom_value + end + partials << render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type) + elsif subpart.kind == "text" + partials << subpart.content end - @part_partials["data-pp='#{part.part_id}'"] = partials end + @part_partials["data-pp='#{part.part_id}'"] = partials end @file = nil @layout_html = nil - if original_view == "home#{$mobile}" - @file = File.join('../templates', "#{@key}", "/home#{$mobile}/index.html.erb") + if original_view == "home" + @file = File.join('../templates', "#{@key}", "/home/index.html.erb") else - @file = File.join('../templates', "#{@key}", "/home#{$mobile}/page.html.erb") + @file = File.join('../templates', "#{@key}", "/home/page.html.erb") end @layout_html = render_to_string(@file) doc = Nokogiri::HTML(@layout_html, nil, "UTF-8") @@ -218,7 +217,7 @@ class PagesController < ApplicationController pp.inner_html = html_string end - if original_view != "home#{$mobile}" + if original_view != "home" viewarea = doc.css("*[data-content='true']")[0] viewarea.inner_html = render_to_string(original_view) end @@ -238,10 +237,10 @@ class PagesController < ApplicationController def get_view page = Page.find(params[:id]) rescue Page.root if page == Page.root - @view = File.join(Rails.root, 'app', 'templates', "#{@key}", "home#{$mobile}/index.html.erb") + @view = File.join(Rails.root, 'app', 'templates', "#{@key}", "home/index.html.erb") else module_name = page.module.downcase.singularize - @view = File.join(Rails.root, 'app', 'templates', "#{@key}", "modules#{$mobile}/#{module_name}/index.html.erb") + @view = File.join(Rails.root, 'app', 'templates', "#{@key}", "modules/#{module_name}/index.html.erb") end end @@ -267,7 +266,7 @@ class PagesController < ApplicationController if page.page_id == "" || page.page_id == nil false else - File.join("../../templates", "#{@key}", "/home#{$mobile}/page.html.erb") + File.join("../../templates", "#{@key}", "/home/page.html.erb") end # elsif request[:action] == "show" || request[:action] == "moduleShow" # File.join("../../templates", "themes", "#{@key}", '/home/page.html.erb') diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5a3a432..f4dfe98 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,14 +1,12 @@ require "json" module ApplicationHelper def render_widget(widget) - key = current_site.template - file = File.join("../templates", "#{key}", "modules/#{widget}") + file = File.join("../templates", "#{@key}", "modules/#{widget}") render :partial => file end def render_partial(partial) - key = current_site.template - file = File.join("../templates", "#{key}", "partial/#{partial}") + file = File.join("../templates", "#{@key}", "partial/#{partial}") render :partial => file end @@ -18,8 +16,7 @@ module ApplicationHelper def render_header site = Site.first - key = Template::KEY - header_file = File.join('../templates', "#{key}", "/home#{$mobile}/header.html.erb") + header_file = File.join('../templates', "#{@key}", "/home/header.html.erb") header_file_html = render :file => header_file header = Nokogiri::HTML(header_file_html, nil, "UTF-8") sub_menu_html = site.sub_menu @@ -36,8 +33,7 @@ module ApplicationHelper def render_footer site = Site.first - key = Template::KEY - footer_file = File.join('../templates', "#{key}", "/home#{$mobile}/footer.html.erb") + footer_file = File.join('../templates', "#{@key}", "/home/footer.html.erb") footer_file_html = render :file => footer_file footer = Nokogiri::HTML(footer_file_html, nil, "UTF-8") html = footer.to_s @@ -73,8 +69,7 @@ module ApplicationHelper item end @items = create_json(@pages) - key = current_site.template - menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{key}", "/home#{$mobile}/menu.html.erb")) + menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", "/home/menu.html.erb")) doc = Nokogiri::HTML(menu_file, nil, "UTF-8") menu_file.close @@ -164,7 +159,7 @@ module ApplicationHelper if params[:target_action] == "index" - file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize+$mobile, "#{params[:target_action]}.html.erb")) + file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "#{params[:target_action]}.html.erb")) doc = Nokogiri::HTML(file, nil, "UTF-8") file.close controller = "#{params[:target_controller].capitalize}_controller".classify.constantize.new @@ -186,7 +181,7 @@ module ApplicationHelper end html.html_safe elsif params[:target_action] == "show" - file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize+$mobile, "#{params[:target_action]}.html.erb")) + file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", 'modules', params[:target_controller].singularize, "#{params[:target_action]}.html.erb")) doc = Nokogiri::HTML(file, nil, "UTF-8") file.close controller = "#{params[:target_controller].capitalize}_controller".classify.constantize.new diff --git a/app/helpers/orbit_helper.rb b/app/helpers/orbit_helper.rb index c6425bc..e6d927b 100644 --- a/app/helpers/orbit_helper.rb +++ b/app/helpers/orbit_helper.rb @@ -155,6 +155,10 @@ module OrbitHelper impressionist(object) end + def self.is_mobile_view + !$mobile.blank? + end + # =============================================================== # Breadcrumbs # =============================================================== diff --git a/app/helpers/pages_helper.rb b/app/helpers/pages_helper.rb index fdcaceb..786ce2c 100644 --- a/app/helpers/pages_helper.rb +++ b/app/helpers/pages_helper.rb @@ -46,7 +46,7 @@ module PagesHelper [oldhtml,newhtml] end controller_name = controller_name.downcase.singularize - f = File.join('../templates', current_site.template, 'modules', "#{controller_name}", "_#{widget_file}.html.erb"); + f = File.join('../templates', "#{@key}", 'modules', "#{controller_name}", "_#{widget_file}.html.erb"); s = render_to_string(f) doc = Nokogiri::HTML(s, nil, "UTF-8") wrap_elements = doc.css("*[data-repeat]") diff --git a/app/models/mobile_page_part.rb b/app/models/mobile_page_part.rb new file mode 100644 index 0000000..3f630c7 --- /dev/null +++ b/app/models/mobile_page_part.rb @@ -0,0 +1,12 @@ +class MobilePagePart + include Mongoid::Document + include Mongoid::Timestamps + + field :part_id, type: Integer + + belongs_to :page + has_many :sub_parts, :dependent => :destroy + + accepts_nested_attributes_for :sub_parts, :allow_destroy => true + +end \ No newline at end of file diff --git a/app/models/page.rb b/app/models/page.rb index 536639b..87c2281 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -15,6 +15,7 @@ class Page field :enabled_for_sitemap, type: Array, :default => [] has_many :page_parts, :autosave => true, :dependent => :destroy + has_many :mobile_page_parts, :autosave => true, :dependent => :destroy has_many :page_contexts, :autosave => true, :dependent => :destroy has_many :child_page, :class_name => 'Page', :inverse_of => :parent_page, :dependent => :destroy diff --git a/app/models/sub_part.rb b/app/models/sub_part.rb index 6b9e539..f69e4c8 100644 --- a/app/models/sub_part.rb +++ b/app/models/sub_part.rb @@ -14,4 +14,5 @@ class SubPart field :custom_array_field, type: Array, :default => [] belongs_to :page_part + belongs_to :mobile_page_part end \ No newline at end of file diff --git a/app/models/template.rb b/app/models/template.rb index 920e5de..3dbb6f7 100644 --- a/app/models/template.rb +++ b/app/models/template.rb @@ -1,4 +1,5 @@ class Template TITLE = "Orbit Classic" KEY = "orbit_bootstrap" + MOBILE = "orbit_mobile" end diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/FontAwesome.otf b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/FontAwesome.otf new file mode 100644 index 0000000..8b0f54e Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/FontAwesome.otf differ diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.eot b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..4a4ca86 Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.eot differ diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.svg b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..e3e2dc7 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.ttf b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..67fa00b Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.ttf differ diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.woff b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..8c54182 Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/bootstrap/glyphicons-halflings-regular.woff differ diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.eot b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.eot new file mode 100755 index 0000000..7c79c6a Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.eot differ diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.svg b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.svg new file mode 100755 index 0000000..45fdf33 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.ttf b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.ttf new file mode 100755 index 0000000..e89738d Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.ttf differ diff --git a/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.woff b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.woff new file mode 100755 index 0000000..8c1748a Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/fonts/mobile/fontawesome-webfont.woff differ diff --git a/app/templates/mobile/orbit_mobile/assets/images/.keep b/app/templates/mobile/orbit_mobile/assets/images/.keep new file mode 100644 index 0000000..e69de29 diff --git a/app/templates/mobile/orbit_mobile/assets/images/mobile/background.png b/app/templates/mobile/orbit_mobile/assets/images/mobile/background.png new file mode 100644 index 0000000..8b3304f Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/images/mobile/background.png differ diff --git a/app/templates/mobile/orbit_mobile/assets/images/mobile/hr-dot.png b/app/templates/mobile/orbit_mobile/assets/images/mobile/hr-dot.png new file mode 100644 index 0000000..009250c Binary files /dev/null and b/app/templates/mobile/orbit_mobile/assets/images/mobile/hr-dot.png differ diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/app.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/app.js new file mode 100644 index 0000000..cb2ef67 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/app.js @@ -0,0 +1,2 @@ +$(function() { +}); \ No newline at end of file diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap.js new file mode 100644 index 0000000..821cb72 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap.js @@ -0,0 +1,12 @@ +//= require mobile/bootstrap/affix +//= require mobile/bootstrap/alert +//= require mobile/bootstrap/button +//= require mobile/bootstrap/carousel +//= require mobile/bootstrap/collapse +//= require mobile/bootstrap/dropdown +//= require mobile/bootstrap/tab +//= require mobile/bootstrap/transition +//= require mobile/bootstrap/scrollspy +//= require mobile/bootstrap/modal +//= require mobile/bootstrap/tooltip +//= require mobile/bootstrap/popover diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/affix.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/affix.js new file mode 100644 index 0000000..05c909e --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/affix.js @@ -0,0 +1,137 @@ +/* ======================================================================== + * Bootstrap: affix.js v3.1.1 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + this.$window = $(window) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = + this.unpin = + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0 + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$window.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + var scrollTop = this.$window.scrollTop() + var position = this.$element.offset() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + + if (this.affixed == 'top') position.top += scrollTop + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : + offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : + offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false + + if (this.affixed === affix) return + if (this.unpin) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger($.Event(affixType.replace('affix', 'affixed'))) + + if (affix == 'bottom') { + this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom) data.offset.bottom = data.offsetBottom + if (data.offsetTop) data.offset.top = data.offsetTop + + $spy.affix(data) + }) + }) + +}(jQuery); diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/alert.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/alert.js new file mode 100644 index 0000000..516fe4f --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/alert.js @@ -0,0 +1,88 @@ +/* ======================================================================== + * Bootstrap: alert.js v3.1.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/button.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/button.js new file mode 100644 index 0000000..f4d8d8b --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/button.js @@ -0,0 +1,107 @@ +/* ======================================================================== + * Bootstrap: button.js v3.1.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(jQuery); diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/carousel.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/carousel.js new file mode 100644 index 0000000..19e9af1 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/carousel.js @@ -0,0 +1,205 @@ +/* ======================================================================== + * Bootstrap: carousel.js v3.1.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return this.sliding = false + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid.bs.carousel', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) + }) + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid.bs.carousel') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(jQuery); diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/collapse.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/collapse.js new file mode 100644 index 0000000..7130282 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/collapse.js @@ -0,0 +1,170 @@ +/* ======================================================================== + * Bootstrap: collapse.js v3.1.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') option = !option + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(jQuery); diff --git a/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/dropdown.js b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/dropdown.js new file mode 100644 index 0000000..43d7ae3 --- /dev/null +++ b/app/templates/mobile/orbit_mobile/assets/javascripts/mobile/bootstrap/dropdown.js @@ -0,0 +1,147 @@ +/* ======================================================================== + * Bootstrap: dropdown.js v3.1.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('