| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997 |
- window.theme = {};
- // Navigation
- (function( $ ) {
- 'use strict';
- var $items = $( '.nav-main li.nav-parent' );
- function expand( li ) {
- li.children( 'ul.nav-children' ).slideDown( 'fast', function() {
- li.addClass( 'nav-expanded' );
- $(this).css( 'display', '' );
- ensureVisible( li );
- });
- }
- function collapse( li ) {
- li.children('ul.nav-children' ).slideUp( 'fast', function() {
- $(this).css( 'display', '' );
- li.removeClass( 'nav-expanded' );
- });
- }
- function ensureVisible( li ) {
- var scroller = li.offsetParent();
- if ( !scroller.get(0) ) {
- return false;
- }
- var top = li.position().top;
- if ( top < 0 ) {
- scroller.animate({
- scrollTop: scroller.scrollTop() + top
- }, 'fast');
- }
- }
- $items.find('> a').on('click', function() {
- var prev = $( this ).closest('ul.nav').find('> li.nav-expanded' ),
- next = $( this ).closest('li');
- if ( prev.get( 0 ) !== next.get( 0 ) ) {
- collapse( prev );
- expand( next );
- } else {
- collapse( prev );
- }
- });
- }).apply( this, [ jQuery ]);
- // Skeleton
- (function(theme, $) {
- 'use strict';
- theme = theme || {};
- var $body = $( 'body' ),
- $html = $( 'html' ),
- $window = $( window ),
- isAndroid = navigator.userAgent.toLowerCase().indexOf('android') > -1;
- // mobile devices with fixed has a lot of issues when focus inputs and others...
- if ( typeof $.browser !== 'undefined' && $.browser.mobile && $html.hasClass('fixed') ) {
- $html.removeClass( 'fixed' ).addClass( 'scroll' );
- }
- var Skeleton = {
- options: {
- sidebars: {
- menu: '#content-menu',
- left: '#sidebar-left',
- right: '#sidebar-right'
- }
- },
- customScroll: ( !Modernizr.overflowscrolling && !isAndroid && $.fn.nanoScroller !== 'undefined'),
- initialize: function() {
- this
- .setVars()
- .build()
- .events();
- },
- setVars: function() {
- this.sidebars = {};
- this.sidebars.left = {
- $el: $( this.options.sidebars.left )
- };
- this.sidebars.right = {
- $el: $( this.options.sidebars.right ),
- isOpened: $html.hasClass( 'sidebar-right-opened' )
- };
- this.sidebars.menu = {
- $el: $( this.options.sidebars.menu ),
- isOpened: $html.hasClass( 'inner-menu-opened' )
- };
- return this;
- },
- build: function() {
- if ( typeof $.browser !== 'undefined' && $.browser.mobile ) {
- $html.addClass( 'mobile-device' );
- } else {
- $html.addClass( 'no-mobile-device' );
- }
- $html.addClass( 'custom-scroll' );
- if ( this.customScroll ) {
- this.buildSidebarLeft();
- this.buildContentMenu();
- }
- this.buildSidebarRight();
- return this;
- },
- events: function() {
- if ( this.customScroll ) {
- this.eventsSidebarLeft();
- }
- this.eventsSidebarRight();
- this.eventsContentMenu();
- if ( typeof $.browser !== 'undefined' && !this.customScroll && isAndroid ) {
- this.fixScroll();
- }
- return this;
- },
- fixScroll: function() {
- var _self = this;
- $window
- .on( 'sidebar-left-opened sidebar-right-toggle', function( e, data ) {
- _self.preventBodyScrollToggle( data.added );
- });
- },
- buildSidebarLeft: function() {
- this.sidebars.left.$nano = this.sidebars.left.$el.find( '.nano' );
- this.sidebars.left.$nano.nanoScroller({
- alwaysVisible: true,
- preventPageScrolling: true
- });
- return this;
- },
- eventsSidebarLeft: function() {
- var $nano = this.sidebars.left.$nano;
- var updateNanoScroll = function() {
- if ( $.support.transition ) {
- $nano.nanoScroller();
- $nano
- .one('bsTransitionEnd', updateNanoScroll)
- .emulateTransitionEnd(150)
- } else {
- updateNanoScroll();
- }
- };
- this.sidebars.left.$el
- .on( 'click', function() {
- updateNanoScroll();
- });
- $nano
- .on( 'mouseenter', function() {
- if ( $html.hasClass( 'sidebar-left-collapsed' ) ) {
- $nano.nanoScroller();
- }
- })
- .on( 'mouseleave', function() {
- if ( $html.hasClass( 'sidebar-left-collapsed' ) ) {
- $nano.nanoScroller();
- }
- });
- return this;
- },
- buildSidebarRight: function() {
- this.sidebars.right.isOpened = $html.hasClass( 'sidebar-right-opened' );
- if ( this.customScroll ) {
- this.sidebars.right.$nano = this.sidebars.right.$el.find( '.nano' );
- this.sidebars.right.$nano.nanoScroller({
- alwaysVisible: true,
- preventPageScrolling: true
- });
- }
- return this;
- },
- eventsSidebarRight: function() {
- var _self = this;
- var open = function() {
- if ( _self.sidebars.right.isOpened ) {
- return close();
- }
- _self.sidebars.right.isOpened = true;
- $html.addClass( 'sidebar-right-opened' );
- $window.trigger( 'sidebar-right-toggle', {
- added: true,
- removed: false
- });
- $html.on( 'click.close-right-sidebar', function(e) {
- e.stopPropagation();
- close(e);
- });
- };
- var close = function(e) {
- if ( !!e && !!e.target && ($(e.target).closest( '.sidebar-right' ).get(0) || !$(e.target).closest( 'html' ).get(0)) ) {
- e.preventDefault();
- return false;
- }
- $html.removeClass( 'sidebar-right-opened' );
- $html.off( 'click.close-right-sidebar' );
- $window.trigger( 'sidebar-right-toggle', {
- added: false,
- removed: true
- });
- _self.sidebars.right.isOpened = false;
- };
- var bind = function() {
- $('[data-open="sidebar-right"]').on('click', function(e) {
- var $el = $(this);
- e.stopPropagation();
- if ( $el.is('a') )
- e.preventDefault();
- open();
- });
- };
- this.sidebars.right.$el.find( '.mobile-close' )
- .on( 'click', function( e ) {
- e.preventDefault();
- $html.trigger( 'click.close-right-sidebar' );
- });
- bind();
- return this;
- },
- buildContentMenu: function() {
- if ( !$html.hasClass( 'fixed' ) ) {
- return false;
- }
- this.sidebars.menu.$nano = this.sidebars.menu.$el.find( '.nano' );
- this.sidebars.menu.$nano.nanoScroller({
- alwaysVisible: true,
- preventPageScrolling: true
- });
- return this;
- },
- eventsContentMenu: function() {
- var _self = this;
- var open = function() {
- if ( _self.sidebars.menu.isOpened ) {
- return close();
- }
- _self.sidebars.menu.isOpened = true;
- $html.addClass( 'inner-menu-opened' );
- $window.trigger( 'inner-menu-toggle', {
- added: true,
- removed: false
- });
- $html.on( 'click.close-inner-menu', function(e) {
- close(e);
- });
- };
- var close = function(e) {
- if ( !!e && !!e.target && !$(e.target).closest( '.inner-menu-collapse' ).get(0) && ($(e.target).closest( '.inner-menu' ).get(0) || !$(e.target).closest( 'html' ).get(0)) ) {
- return false;
- }
- e.stopPropagation();
- $html.removeClass( 'inner-menu-opened' );
- $html.off( 'click.close-inner-menu' );
- $window.trigger( 'inner-menu-toggle', {
- added: false,
- removed: true
- });
- _self.sidebars.menu.isOpened = false;
- };
- var bind = function() {
- $('[data-open="inner-menu"]').on('click', function(e) {
- var $el = $(this);
- e.stopPropagation();
- if ( $el.is('a') )
- e.preventDefault();
- open();
- });
- };
- bind();
- /* Nano Scroll */
- if ( $html.hasClass( 'fixed' ) ) {
- var $nano = this.sidebars.menu.$nano;
- var updateNanoScroll = function() {
- if ( $.support.transition ) {
- $nano.nanoScroller();
- $nano
- .one('bsTransitionEnd', updateNanoScroll)
- .emulateTransitionEnd(150)
- } else {
- updateNanoScroll();
- }
- };
- this.sidebars.menu.$el
- .on( 'click', function() {
- updateNanoScroll();
- });
- }
- return this;
- },
- preventBodyScrollToggle: function( shouldPrevent, $el ) {
- setTimeout(function() {
- if ( shouldPrevent ) {
- $body
- .data( 'scrollTop', $body.get(0).scrollTop )
- .css({
- position: 'fixed',
- top: $body.get(0).scrollTop * -1
- })
- } else {
- $body
- .css({
- position: '',
- top: ''
- })
- .scrollTop( $body.data( 'scrollTop' ) );
- }
- }, 150);
- }
- };
- // expose to scope
- $.extend(theme, {
- Skeleton: Skeleton
- });
- }).apply(this, [ window.theme, jQuery ]);
- // Base
- (function(theme, $) {
- 'use strict';
- theme = theme || {};
- theme.Skeleton.initialize();
- }).apply(this, [ window.theme, jQuery ]);
- /*
- Name: Theme Admin Extension
- Written by: Okler Themes - (http://www.okler.net)
- Theme Version: 1.3.0
- */
- window.theme = {};
- // Mailbox
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__mailbox';
- var capitalizeString = function( str ) {
- return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
- }
- var Mailbox = function($wrapper) {
- return this.initialize($wrapper);
- };
- Mailbox.prototype = {
- initialize: function($wrapper) {
- if ( $wrapper.data( instanceName ) ) {
- return this;
- }
- this.$wrapper = $wrapper;
- this
- .setVars()
- .setData()
- .build()
- .events();
- return this;
- },
- setVars: function() {
- this.view = capitalizeString( this.$wrapper.data( 'mailbox-view' ) || "" );
- return this;
- },
- setData: function() {
- this.$wrapper.data(instanceName, this);
- return this;
- },
- build: function() {
- if ( typeof this[ 'build' + this.view ] === 'function' ) {
- this[ 'build' + this.view ].call( this );
- }
- return this;
- },
- events: function() {
- if ( typeof this[ 'events' + this.view ] === 'function' ) {
- this[ 'events' + this.view ].call( this );
- }
- return this;
- },
- buildFolder: function() {
- this.$wrapper.find('.mailbox-email-list .nano').nanoScroller({
- alwaysVisible: true,
- preventPageScrolling: true
- });
- },
- buildEmail: function() {
- this.buildComposer();
- },
- buildCompose: function() {
- this.buildComposer();
- },
- buildComposer: function() {
- this.$wrapper.find( '#compose-field' ).summernote({
- height: 250,
- toolbar: [
- ['style', ['style']],
- ['font', ['bold', 'italic', 'underline', 'clear']],
- ['fontname', ['fontname']],
- ['color', ['color']],
- ['para', ['ul', 'ol', 'paragraph']],
- ['height', ['height']],
- ['table', ['table']],
- ['insert', ['link', 'picture', 'video']],
- ['view', ['fullscreen']],
- ['help', ['help']]
- ]
- });
- },
- eventsCompose: function() {
- var $composer,
- $contentBody,
- $html,
- $innerBody;
- $composer = $( '.note-editable' );
- $contentBody = $( '.content-body' );
- $html = $( 'html' );
- $innerBody = $( '.inner-body' );
- var adjustComposeSize = function() {
- var composerHeight,
- composerTop,
- contentBodyPaddingBottom,
- innerBodyHeight,
- viewportHeight,
- viewportWidth;
- contentBodyPaddingBottom = parseInt( $contentBody.css('paddingBottom'), 10 ) || 0;
- viewportHeight = Math.max( document.documentElement.clientHeight, window.innerHeight || 0 );
- viewportWidth = Math.max( document.documentElement.clientWidth, window.innerWidth || 0 );
- $composer.css( 'height', '' );
- if ( viewportWidth < 767 || $html.hasClass('mobile-device') ) {
- composerTop = $composer.offset().top;
- composerHeight = viewportHeight - composerTop;
- } else {
- if ( $html.hasClass( 'fixed' ) ) {
- composerTop = $composer.offset().top;
- } else {
- composerTop = $composer.position().top;
- }
- composerHeight = $innerBody.outerHeight() - composerTop;
- }
- composerHeight -= contentBodyPaddingBottom;
- $composer.css({
- height: composerHeight
- });
- };
- var timer;
- $(window)
- .on( 'resize orientationchange sidebar-left-toggle mailbox-recalc', function() {
- clearTimeout( timer );
- timer = setTimeout(function() {
- adjustComposeSize();
- }, 100);
- });
- adjustComposeSize();
- }
- };
- // expose to scope
- $.extend(theme, {
- Mailbox: Mailbox
- });
- // jquery plugin
- $.fn.themeMailbox = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new Mailbox($this);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Lock Screen
- (function( $ ) {
- 'use strict';
- var LockScreen = {
- initialize: function() {
- this.$body = $( 'body' );
- this
- .build()
- .events();
- },
- build: function() {
- var lockHTML,
- userinfo;
- userinfo = this.getUserInfo();
- this.lockHTML = this.buildTemplate( userinfo );
- this.$lock = this.$body.children( '#LockScreenInline' );
- this.$userPicture = this.$lock.find( '#LockUserPicture' );
- this.$userName = this.$lock.find( '#LockUserName' );
- this.$userEmail = this.$lock.find( '#LockUserEmail' );
- return this;
- },
- events: function() {
- var _self = this;
- this.$body.find( '[data-lock-screen="true"]' ).on( 'click', function( e ) {
- e.preventDefault();
- _self.show();
- });
- return this;
- },
- formEvents: function( $form ) {
- var _self = this;
- $form.on( 'submit', function( e ) {
- e.preventDefault();
- _self.hide();
- });
- },
- show: function() {
- var _self = this,
- userinfo = this.getUserInfo();
- this.$userPicture.attr( 'src', userinfo.picture );
- this.$userName.text( userinfo.username );
- this.$userEmail.text( userinfo.email );
- this.$body.addClass( 'show-lock-screen' );
- $.magnificPopup.open({
- items: {
- src: this.lockHTML,
- type: 'inline'
- },
- modal: true,
- mainClass: 'mfp-lock-screen',
- callbacks: {
- change: function() {
- _self.formEvents( this.content.find( 'form' ) );
- }
- }
- });
- },
- hide: function() {
- $.magnificPopup.close();
- },
- getUserInfo: function() {
- var $info,
- picture,
- name,
- email;
- // always search in case something is changed through ajax
- $info = $( '#userbox' );
- picture = $info.find( '.profile-picture img' ).attr( 'data-lock-picture' );
- name = $info.find( '.profile-info' ).attr( 'data-lock-name' );
- email = $info.find( '.profile-info' ).attr( 'data-lock-email' );
- return {
- picture: picture,
- username: name,
- email: email
- };
- },
- buildTemplate: function( userinfo ) {
- return [
- '<section id="LockScreenInline" class="body-sign body-locked body-locked-inline">',
- '<div class="center-sign">',
- '<div class="panel panel-sign">',
- '<div class="panel-body">',
- '<form>',
- '<div class="current-user text-center">',
- '<img id="LockUserPicture" src="{{picture}}" alt="John Doe" class="img-circle user-image" />',
- '<h2 id="LockUserName" class="user-name text-dark m-none">{{username}}</h2>',
- '<p id="LockUserEmail" class="user-email m-none">{{email}}</p>',
- '</div>',
- '<div class="form-group mb-lg">',
- '<div class="input-group input-group-icon">',
- '<input id="pwd" name="pwd" type="password" class="form-control input-lg" placeholder="Password" />',
- '<span class="input-group-addon">',
- '<span class="icon icon-lg">',
- '<i class="fa fa-lock"></i>',
- '</span>',
- '</span>',
- '</div>',
- '</div>',
- '<div class="row">',
- '<div class="col-xs-6">',
- '<p class="mt-xs mb-none">',
- '<a href="#">Not John Doe?</a>',
- '</p>',
- '</div>',
- '<div class="col-xs-6 text-right">',
- '<button type="submit" class="btn btn-primary">Unlock</button>',
- '</div>',
- '</div>',
- '</form>',
- '</div>',
- '</div>',
- '</div>',
- '</section>'
- ]
- .join( '' )
- .replace( /\{\{picture\}\}/, userinfo.picture )
- .replace( /\{\{username\}\}/, userinfo.username )
- .replace( /\{\{email\}\}/, userinfo.email );
- }
- };
- this.LockScreen = LockScreen;
- $(function() {
- LockScreen.initialize();
- });
- }).apply(this, [ jQuery ]);
- // Panels
- (function( $ ) {
- $(function() {
- $('.panel')
- .on( 'click', '.panel-actions a.fa-caret-up', function( e ) {
- e.preventDefault();
- var $this,
- $panel;
- $this = $( this );
- $panel = $this.closest( '.panel' );
- $this
- .removeClass( 'fa-caret-up' )
- .addClass( 'fa-caret-down' );
- $panel.find('.panel-body, .panel-footer').slideDown( 200 );
- })
- .on( 'click', '.panel-actions a.fa-caret-down', function( e ) {
- e.preventDefault();
- var $this,
- $panel;
- $this = $( this );
- $panel = $this.closest( '.panel' );
- $this
- .removeClass( 'fa-caret-down' )
- .addClass( 'fa-caret-up' );
- $panel.find('.panel-body, .panel-footer').slideUp( 200 );
- })
- .on( 'click', '.panel-actions a.fa-times', function( e ) {
- e.preventDefault();
- var $panel,
- $row;
- $panel = $(this).closest('.panel');
- if ( !!( $panel.parent('div').attr('class') || '' ).match( /col-(xs|sm|md|lg)/g ) && $panel.siblings().length === 0 ) {
- $row = $panel.closest('.row');
- $panel.parent('div').remove();
- if ( $row.children().length === 0 ) {
- $row.remove();
- }
- } else {
- $panel.remove();
- }
- });
- });
- })( jQuery );
- // Bootstrap Toggle
- (function( $ ) {
- 'use strict';
- var $window = $( window );
- var toggleClass = function( $el ) {
- if ( !!$el.data('toggleClassBinded') ) {
- return false;
- }
- var $target,
- className,
- eventName;
- $target = $( $el.attr('data-target') );
- className = $el.attr('data-toggle-class');
- eventName = $el.attr('data-fire-event');
- $el.on('click.toggleClass', function(e) {
- e.preventDefault();
- $target.toggleClass( className );
- var hasClass = $target.hasClass( className );
- if ( !!eventName ) {
- $window.trigger( eventName, {
- added: hasClass,
- removed: !hasClass
- });
- }
- });
- $el.data('toggleClassBinded', true);
- return true;
- };
- $(function() {
- $('[data-toggle-class][data-target]').each(function() {
- toggleClass( $(this) );
- });
- });
- }).apply( this, [ jQuery ]);
- // Form to Object
- (function( $ ) {
- 'use strict';
- $.fn.formToObject = function() {
- var arrayData,
- objectData;
- arrayData = this.serializeArray();
- objectData = {};
- $.each( arrayData, function() {
- var value;
- if (this.value != null) {
- value = this.value;
- } else {
- value = '';
- }
- if (objectData[this.name] != null) {
- if (!objectData[this.name].push) {
- objectData[this.name] = [objectData[this.name]];
- }
- objectData[this.name].push(value);
- } else {
- objectData[this.name] = value;
- }
- });
- return objectData;
- };
- })( jQuery );
- // Codemirror
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__codemirror';
- var PluginCodeMirror = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginCodeMirror.defaults = {
- lineNumbers: true,
- styleActiveLine: true,
- matchBrackets: true,
- theme: 'monokai'
- };
- PluginCodeMirror.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginCodeMirror.defaults, opts );
- return this;
- },
- build: function() {
- CodeMirror.fromTextArea( this.$el.get(0), this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginCodeMirror: PluginCodeMirror
- });
- // jquery plugin
- $.fn.themePluginCodeMirror = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginCodeMirror($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Colorpicker
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__colorpicker';
- var PluginColorPicker = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginColorPicker.defaults = {
- };
- PluginColorPicker.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginColorPicker.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.colorpicker( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginColorPicker: PluginColorPicker
- });
- // jquery plugin
- $.fn.themePluginColorPicker = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginColorPicker($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Datepicker
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__datepicker';
- var PluginDatePicker = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginDatePicker.defaults = {
- };
- PluginDatePicker.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setVars()
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setVars: function() {
- this.skin = this.$el.data( 'plugin-skin' );
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginDatePicker.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.datepicker( this.options );
- if ( !!this.skin ) {
- this.$el.data('datepicker').picker.addClass( 'datepicker-' + this.skin );
- }
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginDatePicker: PluginDatePicker
- });
- // jquery plugin
- $.fn.themePluginDatePicker = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginDatePicker($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // iosSwitcher
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__IOS7Switch';
- var PluginIOS7Switch = function($el) {
- return this.initialize($el);
- };
- PluginIOS7Switch.prototype = {
- initialize: function($el) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- build: function() {
- var switcher = new Switch( this.$el.get(0) );
- $( switcher.el ).on( 'click', function( e ) {
- e.preventDefault();
- switcher.toggle();
- });
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginIOS7Switch: PluginIOS7Switch
- });
- // jquery plugin
- $.fn.themePluginIOS7Switch = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginIOS7Switch($this);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Markdown
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__markdownEditor';
- var PluginMarkdownEditor = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginMarkdownEditor.defaults = {
- iconlibrary: 'fa'
- };
- PluginMarkdownEditor.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginMarkdownEditor.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.markdown( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginMarkdownEditor: PluginMarkdownEditor
- });
- // jquery plugin
- $.fn.themePluginMarkdownEditor = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginMarkdownEditor($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Masked Input
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__maskedInput';
- var PluginMaskedInput = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginMaskedInput.defaults = {
- };
- PluginMaskedInput.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginMaskedInput.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.mask( this.$el.data('input-mask'), this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginMaskedInput: PluginMaskedInput
- });
- // jquery plugin
- $.fn.themePluginMaskedInput = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginMaskedInput($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // MaxLength
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__maxlength';
- var PluginMaxLength = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginMaxLength.defaults = {
- alwaysShow: true,
- placement: 'bottom-left',
- warningClass: 'label label-success bottom-left',
- limitReachedClass: 'label label-danger bottom-left'
- };
- PluginMaxLength.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginMaxLength.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.maxlength( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginMaxLength: PluginMaxLength
- });
- // jquery plugin
- $.fn.themePluginMaxLength = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginMaxLength($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // MultiSelect
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__multiselect';
- var PluginMultiSelect = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginMultiSelect.defaults = {
- templates: {
- filter: '<div class="input-group"><span class="input-group-addon"><i class="fa fa-search"></i></span><input class="form-control multiselect-search" type="text"></div>'
- }
- };
- PluginMultiSelect.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginMultiSelect.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.multiselect( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginMultiSelect: PluginMultiSelect
- });
- // jquery plugin
- $.fn.themePluginMultiSelect = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginMultiSelect($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Select2
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__select2';
- var PluginSelect2 = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginSelect2.defaults = {
- };
- PluginSelect2.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginSelect2.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.select2( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginSelect2: PluginSelect2
- });
- // jquery plugin
- $.fn.themePluginSelect2 = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginSelect2($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Spinner
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__spinner';
- var PluginSpinner = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginSpinner.defaults = {
- };
- PluginSpinner.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginSpinner.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.spinner( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginSpinner: PluginSpinner
- });
- // jquery plugin
- $.fn.themePluginSpinner = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginSpinner($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // SummerNote
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__summernote';
- var PluginSummerNote = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginSummerNote.defaults = {
- onfocus: function() {
- $( this ).closest( '.note-editor' ).addClass( 'active' );
- },
- onblur: function() {
- $( this ).closest( '.note-editor' ).removeClass( 'active' );
- }
- };
- PluginSummerNote.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginSummerNote.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.summernote( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginSummerNote: PluginSummerNote
- });
- // jquery plugin
- $.fn.themePluginSummerNote = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginSummerNote($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // TextArea AutoSize
- (function(theme, $) {
- theme = theme || {};
- var initialized = false;
- var instanceName = '__textareaAutosize';
- var PluginTextAreaAutoSize = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginTextAreaAutoSize.defaults = {
- };
- PluginTextAreaAutoSize.prototype = {
- initialize: function($el, opts) {
- if (initialized) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginTextAreaAutoSize.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.autosize( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginTextAreaAutoSize: PluginTextAreaAutoSize
- });
- // jquery plugin
- $.fn.themePluginTextAreaAutoSize = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginTextAreaAutoSize($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // TimePicker
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__timepicker';
- var PluginTimePicker = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginTimePicker.defaults = {
- disableMousewheel: true
- };
- PluginTimePicker.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, PluginTimePicker.defaults, opts );
- return this;
- },
- build: function() {
- this.$el.timepicker( this.options );
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginTimePicker: PluginTimePicker
- });
- // jquery plugin
- $.fn.themePluginTimePicker = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginTimePicker($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Map Builder
- (function( theme, $ ) {
- 'use strict';
- // prevent undefined var
- theme = theme || {};
- // internal var to check if reached limit
- var timeouts = 0;
- // instance
- var instanceName = '__gmapbuilder';
- // private
- var roundNumber = function( number, precision ) {
- if( precision < 0 ) {
- precision = 0;
- } else if( precision > 10 ) {
- precision = 10;
- }
- var a = [ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000 ];
- return Math.round( number * a[ precision ] ) / a[ precision ];
- };
- // definition
- var GMapBuilder = function( $wrapper, opts ) {
- return this.initialize( $wrapper, opts );
- };
- GMapBuilder.defaults = {
- mapSelector: '#gmap',
- markers: {
- modal: '#MarkerModal',
- list: '#MarkersList',
- removeAll: '#MarkerRemoveAll'
- },
- previewModal: '#ModalPreview',
- getCodeModal: '#ModalGetCode',
- mapOptions: {
- center: {
- lat: -38.908133,
- lng: -13.692628
- },
- panControl: true,
- zoom: 3
- }
- };
- GMapBuilder.prototype = {
- markers: [],
- initialize: function( $wrapper, opts ) {
- this.$wrapper = $wrapper;
- this
- .setData()
- .setOptions( opts )
- .setVars()
- .build()
- .events();
- return this;
- },
- setData: function() {
- this.$wrapper.data( instanceName, this );
- return this;
- },
- setOptions: function( opts ) {
- this.options = $.extend( true, {}, GMapBuilder.defaults, opts );
- return this;
- },
- setVars: function() {
- this.$mapContainer = this.$wrapper.find( this.options.mapSelector );
- this.$previewModal = $( this.options.previewModal );
- this.$getCodeModal = $( this.options.getCodeModal );
- this.marker = {};
- this.marker.$modal = $( this.options.markers.modal );
- this.marker.$form = this.marker.$modal.find( 'form' );
- this.marker.$list = $( this.options.markers.list );
- this.marker.$removeAll = $( this.options.markers.removeAll );
- return this;
- },
- build: function() {
- var _self = this;
- if ( !!window.SnazzyThemes ) {
- var themeOpts = [];
- $.each( window.SnazzyThemes, function( i, theme ) {
- themeOpts.push( $('<option value="' + theme.id + '">' + theme.name + '</option>').data( 'json', theme.json ) );
- });
- this.$wrapper.find( '[data-builder-field="maptheme"]' ).append( themeOpts );
- }
- this.geocoder = new google.maps.Geocoder();
- google.maps.event.addDomListener( window, 'load', function() {
- _self.options.mapOptions.center = new google.maps.LatLng( _self.options.mapOptions.center.lat, _self.options.mapOptions.center.lng );
- _self.map = new google.maps.Map( _self.$mapContainer.get(0), _self.options.mapOptions );
- _self
- .updateControl( 'latlng' )
- .updateControl( 'zoomlevel' );
- _self.mapEvents();
- });
- return this;
- },
- events: function() {
- var _self = this;
- this.$wrapper.find( '[data-builder-field]' ).each(function() {
- var $this = $( this ),
- field,
- value;
- field = $this.data( 'builder-field' );
- $this.on( 'change', function() {
- if ( $this.is( 'select' ) ) {
- value = $this.children( 'option:selected' ).val().toLowerCase();
- } else {
- value = $this.val().toLowerCase();
- }
- _self.updateMap( field, value );
- });
- });
- this.marker.$form.on( 'submit', function( e ) {
- e.preventDefault();
- _self.saveMarker( _self.marker.$form.formToObject() );
- });
- this.marker.$removeAll.on( 'click', function( e ) {
- e.preventDefault();
- _self.removeAllMarkers();
- });
- // preview events
- this.$previewModal.on( 'shown.bs.modal', function() {
- _self.preview();
- });
- this.$previewModal.on( 'hidden.bs.modal', function() {
- _self.$previewModal.find( 'iframe' ).get(0).contentWindow.document.body.innerHTML = '';
- });
- // get code events
- this.$getCodeModal.on( 'shown.bs.modal', function() {
- _self.getCode();
- });
- return this;
- },
- // MAP FUNCTIONS
- // -----------------------------------------------------------------------------
- mapEvents: function() {
- var _self = this;
- google.maps.event.addDomListener( _self.map, 'resize', function() {
- google.maps.event.trigger( _self.map, 'resize' );
- });
- google.maps.event.addListener( this.map, 'center_changed', function() {
- var coords = _self.map.getCenter();
- _self.updateControl( 'latlng', {
- lat: roundNumber( coords.lat(), 6 ),
- lng: roundNumber( coords.lng(), 6 )
- });
- });
- google.maps.event.addListener( this.map, 'zoom_changed', function() {
- _self.updateControl( 'zoomlevel', _self.map.getZoom() );
- });
- google.maps.event.addListener( this.map, 'maptypeid_changed', function() {
- _self.updateControl( 'maptype', _self.map.getMapTypeId() );
- });
- return this;
- },
- updateMap: function( prop, value ) {
- var updateFn;
- updateFn = this.updateMapProperty[ prop ];
- if ( $.isFunction( updateFn ) ) {
- updateFn.apply( this, [ value ] );
- } else {
- console.info( 'missing update function for', prop );
- }
- return this;
- },
- updateMapProperty: {
- latlng: function() {
- var lat,
- lng;
- lat = this.$wrapper.find('[data-builder-field][name="latitude"]').val();
- lng = this.$wrapper.find('[data-builder-field][name="longitude"]').val();
- if ( lat.length > 0 && lng.length > 0 ) {
- this.map.setCenter( new google.maps.LatLng( lat, lng ) );
- }
- return this;
- },
- zoomlevel: function( value ) {
- var value = arguments[ 0 ];
- this.map.setZoom( parseInt( value, 10 ) );
- return this;
- },
- maptypecontrol: function( value ) {
- var options;
- options = {};
- if ( value === 'false' ){
- options.mapTypeControl = false;
- } else {
- options = {
- mapTypeControl: true,
- mapTypeControlOptions: {
- style: google.maps.MapTypeControlStyle[ value.toUpperCase() ]
- }
- };
- }
- this.map.setOptions( options );
- return this;
- },
- zoomcontrol: function( value ) {
- var options;
- options = {};
- if ( value === 'false' ){
- options.zoomControl = false;
- } else {
- options = {
- zoomControl: true,
- zoomControlOptions: {
- style: google.maps.ZoomControlStyle[ value.toUpperCase() ]
- }
- };
- }
- this.map.setOptions( options );
- return this;
- },
- scalecontrol: function( value ) {
- var options;
- options = {};
- options.scaleControl = value !== 'false';
- this.map.setOptions( options );
- return this;
- },
- streetviewcontrol: function( value ) {
- var options;
- options = {};
- options.streetViewControl = value !== 'false';
- this.map.setOptions( options );
- return this;
- },
- pancontrol: function( value ) {
- var options;
- options = {};
- options.panControl = value !== 'false';
- this.map.setOptions( options );
- return this;
- },
- overviewcontrol: function( value ) {
- var options;
- options = {};
- if ( value === 'false' ){
- options.overviewMapControl = false;
- } else {
- options = {
- overviewMapControl: true,
- overviewMapControlOptions: {
- opened: value === 'opened'
- }
- };
- }
- this.map.setOptions( options );
- return this;
- },
- draggablecontrol: function( value ) {
- var options;
- options = {};
- options.draggable = value !== 'false';
- this.map.setOptions( options );
- return this;
- },
- clicktozoomcontrol: function( value ) {
- var options;
- options = {};
- options.disableDoubleClickZoom = value === 'false';
- this.map.setOptions( options );
- return this;
- },
- scrollwheelcontrol: function( value ) {
- var options;
- options = {};
- options.scrollwheel = value !== 'false';
- this.map.setOptions( options );
- return this;
- },
- maptype: function( value ) {
- var options,
- mapStyles,
- mapType;
- mapStyles = this.$wrapper.find( '[data-builder-field="maptheme"]' ).children( 'option' ).filter( ':selected' ).data( 'json' );
- mapType = google.maps.MapTypeId[ value.toUpperCase() ];
- options = {
- mapTypeId: mapType
- };
- if ( $.inArray( google.maps.MapTypeId[ value.toUpperCase() ], [ 'terrain', 'roadmap' ]) > -1 && !!mapStyles ) {
- options.styles = eval( mapStyles );
- } else {
- options.styles = false;
- this.updateControl( 'maptheme' );
- }
- this.map.setOptions( options );
- },
- maptheme: function( value ) {
- var json,
- mapType,
- options;
- mapType = google.maps.MapTypeId[ this.map.getMapTypeId() === 'terrain' ? 'TERRAIN' : 'ROADMAP' ];
- options = {};
- json = this.$wrapper.find( '[data-builder-field="maptheme"]' ).children( 'option' ).filter( ':selected' ).data( 'json' );
- if ( !json ) {
- options = {
- mapTypeId: mapType,
- styles: false
- };
- } else {
- options = {
- mapTypeId: mapType,
- styles: eval( json )
- };
- }
- this.map.setOptions( options );
- }
- },
- // CONTROLS FUNCTIONS
- // -----------------------------------------------------------------------------
- updateControl: function( prop ) {
- var updateFn;
- updateFn = this.updateControlValue[ prop ];
- if ( $.isFunction( updateFn ) ) {
- updateFn.apply( this );
- } else {
- console.info( 'missing update function for', prop );
- }
- return this;
- },
- updateControlValue: {
- latlng: function() {
- var center = this.map.getCenter();
- this.$wrapper.find('[data-builder-field][name="latitude"]').val( roundNumber( center.lat() , 6 ) );
- this.$wrapper.find('[data-builder-field][name="longitude"]').val( roundNumber( center.lng() , 6 ) );
- },
- zoomlevel: function() {
- var $control,
- level;
- level = this.map.getZoom();
- $control = this.$wrapper.find('[data-builder-field="zoomlevel"]');
- $control
- .children( 'option[value="' + level + '"]' )
- .prop( 'selected', true );
- if ( $control.hasClass( 'select2-offscreen' ) ) {
- $control.select2( 'val', level );
- }
- },
- maptype: function() {
- var $control,
- mapType;
- mapType = this.map.getMapTypeId();
- $control = this.$wrapper.find('[data-builder-field="maptype"]');
- $control
- .children( 'option[value="' + mapType + '"]' )
- .prop( 'selected', true );
- if ( $control.hasClass( 'select2-offscreen' ) ) {
- $control.select2( 'val', mapType );
- }
- },
- maptheme: function() {
- var $control;
- $control = this.$wrapper.find('[data-builder-field="maptheme"]');
- $control
- .children( 'option[value="false"]' )
- .prop( 'selected', true );
- if ( $control.hasClass( 'select2-offscreen' ) ) {
- $control.select2( 'val', 'false' );
- }
- }
- },
- // MARKERS FUNCTIONS
- // -----------------------------------------------------------------------------
- editMarker: function( marker ) {
- this.currentMarker = marker;
- this.marker.$form
- .find( '#MarkerLocation' ).val( marker.location );
- this.marker.$form
- .find( '#MarkerTitle' ).val( marker.title );
- this.marker.$form
- .find( '#MarkerDescription' ).val( marker.description );
- this.marker.$modal.modal( 'show' );
- },
- removeMarker: function( marker ) {
- var i;
- marker._instance.setMap( null );
- marker._$html.remove();
- for( i = 0; i < this.markers.length; i++ ) {
- if ( marker === this.markers[ i ] ) {
- this.markers.splice( i, 1 );
- break;
- }
- }
- if ( this.markers.length === 0 ) {
- this.marker.$list.addClass( 'hidden' );
- }
- },
- saveMarker: function( marker ) {
- this._geocode( marker );
- },
- removeAllMarkers: function() {
- var i = 0,
- l,
- marker;
- l = this.markers.length;
- for( ; i < l; i++ ) {
- marker = this.markers[ i ];
- marker._instance.setMap( null );
- marker._$html.remove();
- }
- this.markers = [];
- this.marker.$list.addClass( 'hidden' );
- },
- _geocode: function( marker ) {
- var _self = this,
- status;
- this.geocoder.geocode({ address: marker.location }, function( response, status ) {
- _self._onGeocodeResult( marker, response, status );
- });
- },
- _onGeocodeResult: function( marker, response, status ) {
- var result;
- if ( !response || status !== google.maps.GeocoderStatus.OK ) {
- if ( status == google.maps.GeocoderStatus.ZERO_RESULTS ) {
- // show notification
- } else {
- timeouts++;
- if ( timeouts > 3 ) {
- // show notification reached limit of requests
- }
- }
- } else {
- timeouts = 0;
- if ( this.currentMarker ) {
- this.removeMarker( this.currentMarker );
- this.currentMarker = null;
- }
- // grab first result of the list
- result = response[ 0 ];
- // get lat & lng and set to marker
- marker.lat = Math.round( result.geometry.location.lat() * 1000000 ) / 1000000;
- marker.lng = Math.round( result.geometry.location.lng() * 1000000 ) / 1000000;
- var opts = {
- position: new google.maps.LatLng( marker.lat, marker.lng ),
- map: this.map
- };
- if ( marker.title.length > 0 ) {
- opts.title = marker.title;
- }
- if ( marker.description.length > 0 ) {
- opts.desc = marker.description;
- }
- marker.position = opts.position;
- marker._instance = new google.maps.Marker( opts );
- if ( !!marker.title || !!marker.description ) {
- this._bindMarkerClick( marker );
- }
- this.markers.push( marker );
- // append to markers list
- this._appendMarkerToList( marker );
- // hide modal and reset form
- this.marker.$form.get(0).reset();
- this.marker.$modal.modal( 'hide' );
- }
- },
- _appendMarkerToList: function( marker ) {
- var _self = this,
- html;
- html = [
- '<li>',
- '<p>{location}</p>',
- '<a href="#" class="location-action location-center"><i class="fa fa-map-marker"></i></a>',
- '<a href="#" class="location-action location-edit"><i class="fa fa-edit"></i></a>',
- '<a href="#" class="location-action location-remove text-danger"><i class="fa fa-times"></i></a>',
- '</li>'
- ].join('');
- html = html.replace( /\{location\}/, !!marker.title ? marker.title : marker.location );
- marker._$html = $( html );
- // events
- marker._$html.find( '.location-center' )
- .on( 'click', function( e ) {
- _self.map.setCenter( marker.position );
- });
- marker._$html.find( '.location-remove' )
- .on( 'click', function( e ) {
- e.preventDefault();
- _self.removeMarker( marker );
- });
- marker._$html.find( '.location-edit' )
- .on( 'click', function( e ) {
- e.preventDefault();
- _self.editMarker( marker );
- });
- this.marker.$list
- .append( marker._$html )
- .removeClass( 'hidden' );
- },
- _bindMarkerClick: function( marker ) {
- var _self = this,
- html;
- html = [
- '<div style="background-color: #FFF; color: #000; padding: 5px; width: 150px;">',
- '{title}',
- '{description}',
- '</div>'
- ].join('');
- html = html.replace(/\{title\}/, !!marker.title ? ("<h4>" + marker.title + "</h4>") : "" );
- html = html.replace(/\{description\}/, !!marker.description ? ("<p>" + marker.description + "</p>") : "" );
- marker._infoWindow = new google.maps.InfoWindow({ content: html });
- google.maps.event.addListener( marker._instance, 'click', function() {
- if ( marker._infoWindow.isOpened ) {
- marker._infoWindow.close();
- marker._infoWindow.isOpened = false;
- } else {
- marker._infoWindow.open( _self.map, this );
- marker._infoWindow.isOpened = true;
- }
- });
- },
- preview: function() {
- var customScript,
- googleScript,
- iframe,
- previewHtml;
- previewHtml = [
- '<style>',
- 'html, body { margin: 0; padding: 0; }',
- '</style>',
- '<div id="' + this.$wrapper.find('[data-builder-field="mapid"]').val() + '" style="width: 100%; height: 100%;"></div>'
- ];
- iframe = this.$previewModal.find( 'iframe' ).get(0).contentWindow.document;
- iframe.body.innerHTML = previewHtml.join('');
- customScript = iframe.createElement( 'script' );
- customScript.type = 'text/javascript';
- customScript.text = "window.initialize = function() { " + this.generate() + " init(); }; ";
- iframe.body.appendChild( customScript );
- googleScript = iframe.createElement( 'script' );
- googleScript.type = 'text/javascript';
- googleScript.text = 'function loadScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://maps.googleapis.com/maps/api/js?key=&sensor=&callback=initialize"; document.body.appendChild(script); } loadScript()';
- iframe.body.appendChild( googleScript );
- },
- getCode: function() {
- this.$getCodeModal.find('.modal-body pre').html( this.generate().replace( /</g, '<' ).replace( />/g, '>' ) );
- },
- // GENERATE CODE
- // -----------------------------------------------------------------------------
- generate: function() {
- var i,
- work;
- var output = [
- ' google.maps.event.addDomListener(window, "load", init);',
- ' var map;',
- ' function init() {',
- ' var mapOptions = {',
- ' center: new google.maps.LatLng({lat}, {lng}),',
- ' zoom: {zoom},',
- ' zoomControl: {zoomControl},',
- ' {zoomControlOptions}',
- ' disableDoubleClickZoom: {disableDoubleClickZoom},',
- ' mapTypeControl: {mapTypeControl},',
- ' {mapTypeControlOptions}',
- ' scaleControl: {scaleControl},',
- ' scrollwheel: {scrollwheel},',
- ' panControl: {panControl},',
- ' streetViewControl: {streetViewControl},',
- ' draggable : {draggable},',
- ' overviewMapControl: {overviewMapControl},',
- ' {overviewMapControlOptions}',
- ' mapTypeId: google.maps.MapTypeId.{mapTypeId}{styles}',
- ' };',
- '',
- ' var mapElement = document.getElementById("{mapid}");',
- ' var map = new google.maps.Map(mapElement, mapOptions);',
- ' {locations}',
- ' }'
- ];
- output = output.join("\r\n");
- var zoomControl = this.$wrapper.find('[data-builder-field="zoomcontrol"] option:selected').val() !== 'false';
- var mapTypeControl = this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val() !== 'false';
- var overviewMapControl = this.$wrapper.find('[data-builder-field="overviewcontrol"] option:selected').val().toLowerCase();
- var $themeControl = this.$wrapper.find('[data-builder-field="maptheme"] option:selected').filter( ':selected' );
- output = output
- .replace( /\{mapid\}/, this.$wrapper.find('[data-builder-field="mapid"]').val() )
- .replace( /\{lat\}/, this.$wrapper.find('[data-builder-field][name="latitude"]').val() )
- .replace( /\{lng\}/, this.$wrapper.find('[data-builder-field][name="longitude"]').val() )
- .replace( /\{zoom\}/, this.$wrapper.find('[data-builder-field="zoomlevel"] option:selected').val() )
- .replace( /\{zoomControl\}/, zoomControl )
- .replace( /\{disableDoubleClickZoom\}/, this.$wrapper.find('[data-builder-field="clicktozoomcontrol"] option:selected').val() === 'false' )
- .replace( /\{mapTypeControl\}/, mapTypeControl )
- .replace( /\{scaleControl\}/, this.$wrapper.find('[data-builder-field="scalecontrol"] option:selected').val() !== 'false' )
- .replace( /\{scrollwheel\}/, this.$wrapper.find('[data-builder-field="scrollwheelcontrol"] option:selected').val() !== 'false' )
- .replace( /\{panControl\}/, this.$wrapper.find('[data-builder-field="pancontrol"] option:selected').val() !== 'false' )
- .replace( /\{streetViewControl\}/, this.$wrapper.find('[data-builder-field="streetviewcontrol"] option:selected').val() !== 'false' )
- .replace( /\{draggable\}/, this.$wrapper.find('[data-builder-field="draggablecontrol"] option:selected').val() !== 'false' )
- .replace( /\{overviewMapControl\}/, overviewMapControl !== 'false' )
- .replace( /\{mapTypeId\}/, this.$wrapper.find('[data-builder-field="maptype"] option:selected').val().toUpperCase() );
- if ( zoomControl ) {
- work = {
- zoomControlOptions: {
- style: this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val().toUpperCase()
- }
- };
- output = output.replace( /\{zoomControlOptions\}/, "zoomControlOptions: {\r\n style: google.maps.ZoomControlStyle." + this.$wrapper.find('[data-builder-field="zoomcontrol"] option:selected').val().toUpperCase() + "\r\n\ },");
- } else {
- output = output.replace( /\{zoomControlOptions\}/, '' );
- }
- if ( mapTypeControl ) {
- work = {
- zoomControlOptions: {
- style: this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val().toUpperCase()
- }
- };
- output = output.replace( /\{mapTypeControlOptions\}/, "mapTypeControlOptions: {\r\n style: google.maps.MapTypeControlStyle." + this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val().toUpperCase() + "\r\n\ },");
- } else {
- output = output.replace( /\{mapTypeControlOptions\}/, '' );
- }
- if ( overviewMapControl !== 'false' ) {
- output = output.replace( /\{overviewMapControlOptions\}/, "overviewMapControlOptions: {\r\n opened: " + (overviewMapControl === 'opened') + "\r\n\ },");
- } else {
- output = output.replace( /\{overviewMapControlOptions\}/, '' );
- }
- if ( $themeControl.val() !== 'false' ) {
- output = output.replace( /\{styles\}/, ',\r\n styles: ' + $themeControl.data( 'json' ).replace(/\r\n/g, '') );
- } else {
- output = output.replace( /\{styles\}/, '' );
- }
- if ( this.markers.length > 0 ) {
- var work = [ 'var locations = [' ];
- var m,
- object;
- for( i = 0; i < this.markers.length; i++ ) {
- m = this.markers[ i ];
- object = '';
- object += ' { lat: ' + m.lat + ', lng: ' + m.lng;
- if ( !!m.title ) {
- object += ', title: "' + m.title + '"';
- }
- if ( !!m.description ) {
- object += ', description: "' + m.description + '"';
- }
- object += ' }';
- if ( i + 1 < this.markers.length ) {
- object += ',';
- }
- work.push( object );
- }
- work.push( ' ];\r\n' )
- work.push( ' var opts = {};' )
- work.push( ' for (var i = 0; i < locations.length; i++) {' );
- work.push( ' opts.position = new google.maps.LatLng( locations[ i ].lat, locations[ i ].lng );' );
- work.push( ' opts.map = map;' );
- work.push( ' if ( !!locations[ i ] .title ) { opts.title = locations[ i ].title; }');
- work.push( ' if ( !!locations[ i ] .description ) { opts.description = locations[ i ].description; }');
- work.push( ' marker = new google.maps.Marker( opts );' );
- work.push( '' );
- work.push( ' (function() {' );
- work.push( ' var html = [' );
- work.push( ' \'<div style="background-color: #FFF; color: #000; padding: 5px; width: 150px;">\',' );
- work.push( ' \'{title}\',' );
- work.push( ' \'{description}\',' );
- work.push( ' \'</div>\'' );
- work.push( ' ].join(\'\');' );
- work.push( '' );
- work.push( ' html = html.replace(/\{title\}/, !!opts.title ? ("<h4>" + opts.title + "</h4>") : "" );' );
- work.push( ' html = html.replace(/\{description\}/, !!opts.description ? ("<p>" + opts.description + "</p>") : "" );' );
- work.push( ' var infoWindow = new google.maps.InfoWindow({ content: html });' );
- work.push( ' google.maps.event.addListener( marker, \'click\', function() {' );
- work.push( ' if ( infoWindow.isOpened ) {' );
- work.push( ' infoWindow.close();' );
- work.push( ' infoWindow.isOpened = false;' );
- work.push( ' } else {' );
- work.push( ' infoWindow.open( map, this );' );
- work.push( ' infoWindow.isOpened = true;' );
- work.push( ' }' );
- work.push( ' });' );
- work.push( ' })();' )
- work.push( ' }');
- output = output.replace( /\{locations\}/, work.join('\r\n') );
- } else {
- output = output.replace( /\{locations\}/, '' );
- }
- console.log( output );
- return output;
- }
- };
- // expose
- $.extend( true, theme, {
- Maps: {
- GMapBuilder: GMapBuilder
- }
- });
- // jQuery plugin
- $.fn.themeGMapBuilder = function( opts ) {
- return this.map(function() {
- var $this = $( this ),
- instance;
- instance = $this.data( instanceName );
- if ( instance ) {
- return instance;
- } else {
- return (new GMapBuilder( $this, opts ));
- }
- });
- };
- // auto initialize
- $(function() {
- $('[data-theme-gmap-builder]').each(function() {
- var $this = $( this );
- window.builder = $this.themeGMapBuilder();
- });
- });
- }).apply(this, [ window.theme, jQuery ]);
- // Animate
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__animate';
- var PluginAnimate = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginAnimate.defaults = {
- accX: 0,
- accY: -150,
- delay: 1
- };
- PluginAnimate.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend(true, {}, PluginAnimate.defaults, opts, {
- wrapper: this.$el
- });
- return this;
- },
- build: function() {
- var self = this,
- $el = this.options.wrapper,
- delay = 0;
- $el.addClass('appear-animation');
- if(!$('html').hasClass('no-csstransitions') && $(window).width() > 767) {
- $el.appear(function() {
- delay = ($el.attr('data-appear-animation-delay') ? $el.attr('data-appear-animation-delay') : self.options.delay);
- if(delay > 1) {
- $el.css('animation-delay', delay + 'ms');
- }
- $el.addClass($el.attr('data-appear-animation'));
- setTimeout(function() {
- $el.addClass('appear-animation-visible');
- }, delay);
- }, {accX: self.options.accX, accY: self.options.accY});
- } else {
- $el.addClass('appear-animation-visible');
- }
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginAnimate: PluginAnimate
- });
- // jquery plugin
- $.fn.themePluginAnimate = function(opts) {
- return this.map(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginAnimate($this, opts);
- }
- });
- };
- }).apply(this, [ window.theme, jQuery ]);
- // Carousel
- (function(theme, $) {
- theme = theme || {};
- var initialized = false;
- var instanceName = '__carousel';
- var PluginCarousel = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginCarousel.defaults = {
- itemsDesktop: false,
- itemsDesktopSmall: false,
- itemsTablet: false,
- itemsTabletSmall: false,
- itemsMobile: false
- };
- PluginCarousel.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend(true, {}, PluginCarousel.defaults, opts, {
- wrapper: this.$el
- });
- return this;
- },
- build: function() {
- this.options.wrapper.owlCarousel(this.options).addClass("owl-carousel-init");
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginCarousel: PluginCarousel
- });
- // jquery plugin
- $.fn.themePluginCarousel = function(opts) {
- return this.map(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginCarousel($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Chart Circular
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__chartCircular';
- var PluginChartCircular = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginChartCircular.defaults = {
- accX: 0,
- accY: -150,
- delay: 1,
- barColor: '#0088CC',
- trackColor: '#f2f2f2',
- scaleColor: false,
- scaleLength: 5,
- lineCap: 'round',
- lineWidth: 13,
- size: 175,
- rotate: 0,
- animate: ({
- duration: 2500,
- enabled: true
- })
- };
- PluginChartCircular.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend(true, {}, PluginChartCircular.defaults, opts, {
- wrapper: this.$el
- });
- return this;
- },
- build: function() {
- var self = this,
- $el = this.options.wrapper,
- value = ($el.attr('data-percent') ? $el.attr('data-percent') : 0),
- percentEl = $el.find('.percent'),
- shouldAnimate,
- data;
- shouldAnimate = $.isFunction($.fn[ 'appear' ]) && ( typeof $.browser !== 'undefined' && !$.browser.mobile );
- data = { accX: self.options.accX, accY: self.options.accY };
- $.extend(true, self.options, {
- onStep: function(from, to, currentValue) {
- percentEl.html(parseInt(currentValue));
- }
- });
- $el.attr('data-percent', (shouldAnimate ? 0 : value) );
- $el.easyPieChart( this.options );
- if ( shouldAnimate ) {
- $el.appear(function() {
- setTimeout(function() {
- $el.data('easyPieChart').update(value);
- $el.attr('data-percent', value);
- }, self.options.delay);
- }, data);
- } else {
- $el.data('easyPieChart').update(value);
- $el.attr('data-percent', value);
- }
- return this;
- }
- };
- // expose to scope
- $.extend(true, theme, {
- Chart: {
- PluginChartCircular: PluginChartCircular
- }
- });
- // jquery plugin
- $.fn.themePluginChartCircular = function(opts) {
- return this.map(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginChartCircular($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Lightbox
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__lightbox';
- var PluginLightbox = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginLightbox.defaults = {
- tClose: 'Close (Esc)', // Alt text on close button
- tLoading: 'Loading...', // Text that is displayed during loading. Can contain %curr% and %total% keys
- gallery: {
- tPrev: 'Previous (Left arrow key)', // Alt text on left arrow
- tNext: 'Next (Right arrow key)', // Alt text on right arrow
- tCounter: '%curr% of %total%' // Markup for "1 of 7" counter
- },
- image: {
- tError: '<a href="%url%">The image</a> could not be loaded.' // Error message when image could not be loaded
- },
- ajax: {
- tError: '<a href="%url%">The content</a> could not be loaded.' // Error message when ajax request failed
- }
- };
- PluginLightbox.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend(true, {}, PluginLightbox.defaults, opts, {
- wrapper: this.$el
- });
- return this;
- },
- build: function() {
- this.options.wrapper.magnificPopup(this.options);
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginLightbox: PluginLightbox
- });
- // jquery plugin
- $.fn.themePluginLightbox = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginLightbox($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Portlets
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__portlet',
- storageOrderKey = '__portletOrder',
- storageStateKey = '__portletState';
- var PluginPortlet = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginPortlet.defaults = {
- connectWith: '[data-plugin-portlet]',
- items: '[data-portlet-item]',
- handle: '.portlet-handler',
- opacity: 0.7,
- placeholder: 'portlet-placeholder',
- cancel: 'portlet-cancel',
- forcePlaceholderSize: true,
- forceHelperSize: true,
- tolerance: 'pointer',
- helper: 'original',
- revert: 200
- };
- PluginPortlet.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- var _self = this;
- this.options = $.extend(true, {}, PluginPortlet.defaults, opts, {
- wrapper: this.$el,
- update: _self.onUpdate,
- create: _self.onLoad
- });
- return this;
- },
- onUpdate: function(event, ui) {
- var key = storageOrderKey,
- data = store.get(key),
- $this = $(this),
- porletId = $this.prop('id');
- if (!data) {
- data = {};
- }
- if (!!porletId) {
- data[porletId] = $this.sortable('toArray');
- store.set(key, data);
- }
- },
- onLoad: function(event, ui) {
- var key = storageOrderKey,
- data = store.get(key),
- $this = $(this),
- porletId = $this.prop('id'),
- portlet = $('#' + porletId);
- if (!!data) {
- var panels = data[porletId];
- if (!!panels) {
- $.each(panels, function(index, panelId) {
- $('#' + panelId).appendTo(portlet);
- });
- }
- }
- },
- saveState: function( panel ) {
- var key = storageStateKey,
- data = store.get(key),
- panelId = panel.prop('id');
- if (!data) {
- data = {};
- }
- if (!panelId) {
- return this;
- }
- var collapse = panel.find('.panel-actions').children('a.fa-caret-up, a.fa-caret-down'),
- isCollapsed = !!collapse.hasClass('fa-caret-up'),
- isRemoved = !panel.closest('body').get(0);
- if (isRemoved) {
- data[panelId] = 'removed';
- } else if (isCollapsed) {
- data[panelId] = 'collapsed';
- } else {
- delete data[panelId];
- }
- store.set(key, data);
- return this;
- },
- loadState: function() {
- var key = storageStateKey,
- data = store.get(key);
- if (!!data) {
- $.each(data, function(panelId, state) {
- var panel = $('#' + panelId);
- if (!panel.data('portlet-state-loaded')) {
- if (state == 'collapsed') {
- panel.find('.panel-actions a.fa-caret-down').trigger('click');
- } else if (state == 'removed') {
- panel.find('.panel-actions a.fa-times').trigger('click');
- }
- panel.data('portlet-state-loaded', true);
- }
- });
- }
- return this;
- },
- build: function() {
- var _self = this;
- if ( $.isFunction( $.fn.sortable ) ) {
- this.$el.sortable( this.options );
- this.$el.find('[data-portlet-item]').each(function() {
- _self.events( $(this) );
- });
- }
- var portlet = this.$el;
- portlet.css('min-height', 150);
- return this;
- },
- events: function($el) {
- var _self = this,
- portlet = $el.closest('[data-plugin-portlet]');
- this.loadState();
- $el.find('.panel-actions').on( 'click', 'a.fa-caret-up, a.fa-caret-down, a.fa-times', function( e ) {
- setTimeout(function() {
- _self.saveState( $el );
- }, 250);
- });
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginPortlet: PluginPortlet
- });
- // jquery plugin
- $.fn.themePluginPortlet = function(opts) {
- return this.map(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginPortlet($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Slider
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__slider';
- var PluginSlider = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginSlider.defaults = {
- };
- PluginSlider.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setVars()
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setVars: function() {
- var $output = $( this.$el.data('plugin-slider-output') );
- this.$output = $output.get(0) ? $output : null;
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- var _self = this;
- this.options = $.extend( true, {}, PluginSlider.defaults, opts );
- if ( this.$output ) {
- $.extend( this.options, {
- slide: function( event, ui ) {
- _self.onSlide( event, ui );
- }
- });
- }
- return this;
- },
- build: function() {
- this.$el.slider( this.options );
- return this;
- },
- onSlide: function( event, ui ) {
- if ( !ui.values ) {
- this.$output.val( ui.value );
- } else {
- this.$output.val( ui.values[ 0 ] + '/' + ui.values[ 1 ] );
- }
- this.$output.trigger('change');
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginSlider: PluginSlider
- });
- // jquery plugin
- $.fn.themePluginSlider = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginSlider($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Toggle
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__toggle';
- var PluginToggle = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginToggle.defaults = {
- duration: 350,
- isAccordion: false,
- addIcons: true
- };
- PluginToggle.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend(true, {}, PluginToggle.defaults, opts, {
- wrapper: this.$el
- });
- return this;
- },
- build: function() {
- var self = this,
- $wrapper = this.options.wrapper,
- $items = $wrapper.find('.toggle'),
- $el = null;
- $items.each(function() {
- $el = $(this);
- if(self.options.addIcons) {
- $el.find('> label').prepend(
- $('<i />').addClass('fa fa-plus'),
- $('<i />').addClass('fa fa-minus')
- );
- }
- if($el.hasClass('active')) {
- $el.find('> p').addClass('preview-active');
- $el.find('> .toggle-content').slideDown(self.options.duration);
- }
- self.events($el);
- });
- if(self.options.isAccordion) {
- self.options.duration = self.options.duration/2;
- }
- return this;
- },
- events: function($el) {
- var self = this,
- previewParCurrentHeight = 0,
- previewParAnimateHeight = 0,
- toggleContent = null;
- $el.find('> label').click(function(e) {
- var $this = $(this),
- parentSection = $this.parent(),
- parentWrapper = $this.parents('.toggle'),
- previewPar = null,
- closeElement = null;
- if(self.options.isAccordion && typeof(e.originalEvent) != 'undefined') {
- closeElement = parentWrapper.find('.toggle.active > label');
- if(closeElement[0] == $this[0]) {
- return;
- }
- }
- parentSection.toggleClass('active');
- // Preview Paragraph
- if(parentSection.find('> p').get(0)) {
- previewPar = parentSection.find('> p');
- previewParCurrentHeight = previewPar.css('height');
- previewPar.css('height', 'auto');
- previewParAnimateHeight = previewPar.css('height');
- previewPar.css('height', previewParCurrentHeight);
- }
- // Content
- toggleContent = parentSection.find('> .toggle-content');
- if(parentSection.hasClass('active')) {
- $(previewPar).animate({
- height: previewParAnimateHeight
- }, self.options.duration, function() {
- $(this).addClass('preview-active');
- });
- toggleContent.slideDown(self.options.duration, function() {
- if(closeElement) {
- closeElement.trigger('click');
- }
- });
- } else {
- $(previewPar).animate({
- height: 0
- }, self.options.duration, function() {
- $(this).removeClass('preview-active');
- });
- toggleContent.slideUp(self.options.duration);
- }
- });
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginToggle: PluginToggle
- });
- // jquery plugin
- $.fn.themePluginToggle = function(opts) {
- return this.map(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginToggle($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Widget - Todo
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__widgetTodoList';
- var WidgetTodoList = function($el, opts) {
- return this.initialize($el, opts);
- };
- WidgetTodoList.defaults = {
- };
- WidgetTodoList.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build()
- .events();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, WidgetTodoList.defaults, opts );
- return this;
- },
- check: function( input, label ) {
- if ( input.is(':checked') ) {
- label.addClass('line-through');
- } else {
- label.removeClass('line-through');
- }
- },
- build: function() {
- var _self = this,
- $check = this.$el.find('.todo-check');
- $check.each(function () {
- var label = $(this).closest('li').find('.todo-label');
- _self.check( $(this), label );
- });
- return this;
- },
- events: function() {
- var _self = this,
- $remove = this.$el.find( '.todo-remove' ),
- $check = this.$el.find('.todo-check'),
- $window = $( window );
- $remove.on('click.widget-todo-list', function( ev ) {
- ev.preventDefault();
- $(this).closest("li").remove();
- });
- $check.on('change', function () {
- var label = $(this).closest('li').find('.todo-label');
- _self.check( $(this), label );
- });
- if ( $.isFunction( $.fn.sortable ) ) {
- this.$el.sortable({
- sort: function(event, ui) {
- var top = event.pageY - _self.$el.offset().top - (ui.helper.outerHeight(true) / 2);
- ui.helper.css({'top' : top + 'px'});
- }
- });
- }
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- WidgetTodoList: WidgetTodoList
- });
- // jquery plugin
- $.fn.themePluginWidgetTodoList = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new WidgetTodoList($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Widget - Toggle
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__widgetToggleExpand';
- var WidgetToggleExpand = function($el, opts) {
- return this.initialize($el, opts);
- };
- WidgetToggleExpand.defaults = {
- };
- WidgetToggleExpand.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build()
- .events();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend( true, {}, WidgetToggleExpand.defaults, opts );
- return this;
- },
- build: function() {
- return this;
- },
- events: function() {
- var _self = this,
- $toggler = this.$el.find( '.widget-toggle' );
- $toggler.on('click.widget-toggler', function() {
- _self.$el.hasClass('widget-collapsed') ? _self.expand( _self.$el ) : _self.collapse( _self.$el );
- });
- return this;
- },
- expand: function( content ) {
- content.children( '.widget-content-expanded' ).slideDown( 'fast', function() {
- $(this).css( 'display', '' );
- content.removeClass( 'widget-collapsed' );
- });
- },
- collapse: function( content ) {
- content.children('.widget-content-expanded' ).slideUp( 'fast', function() {
- content.addClass( 'widget-collapsed' );
- $(this).css( 'display', '' );
- });
- }
- };
- // expose to scope
- $.extend(theme, {
- WidgetToggleExpand: WidgetToggleExpand
- });
- // jquery plugin
- $.fn.themePluginWidgetToggleExpand = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new WidgetToggleExpand($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Word Rotate
- (function(theme, $) {
- theme = theme || {};
- var instanceName = '__wordRotate';
- var PluginWordRotate = function($el, opts) {
- return this.initialize($el, opts);
- };
- PluginWordRotate.defaults = {
- delay: 2000
- };
- PluginWordRotate.prototype = {
- initialize: function($el, opts) {
- if ( $el.data( instanceName ) ) {
- return this;
- }
- this.$el = $el;
- this
- .setData()
- .setOptions(opts)
- .build();
- return this;
- },
- setData: function() {
- this.$el.data(instanceName, this);
- return this;
- },
- setOptions: function(opts) {
- this.options = $.extend(true, {}, PluginWordRotate.defaults, opts, {
- wrapper: this.$el
- });
- return this;
- },
- build: function() {
- var $el = this.options.wrapper,
- itemsWrapper = $el.find(".word-rotate-items"),
- items = itemsWrapper.find("> span"),
- firstItem = items.eq(0),
- firstItemClone = firstItem.clone(),
- itemHeight = firstItem.height(),
- currentItem = 1,
- currentTop = 0;
- itemsWrapper.append(firstItemClone);
- $el
- .height(itemHeight)
- .addClass("active");
- setInterval(function() {
- currentTop = (currentItem * itemHeight);
- itemsWrapper.animate({
- top: -(currentTop) + "px"
- }, 300, function() {
- currentItem++;
- if(currentItem > items.length) {
- itemsWrapper.css("top", 0);
- currentItem = 1;
- }
- });
- }, this.options.delay);
- return this;
- }
- };
- // expose to scope
- $.extend(theme, {
- PluginWordRotate: PluginWordRotate
- });
- // jquery plugin
- $.fn.themePluginWordRotate = function(opts) {
- return this.each(function() {
- var $this = $(this);
- if ($this.data(instanceName)) {
- return $this.data(instanceName);
- } else {
- return new PluginWordRotate($this, opts);
- }
- });
- }
- }).apply(this, [ window.theme, jQuery ]);
- // Data Tables - Config
- (function($) {
- 'use strict';
- // we overwrite initialize of all datatables here
- // because we want to use select2, give search input a bootstrap look
- // keep in mind if you overwrite this fnInitComplete somewhere,
- // you should run the code inside this function to keep functionality.
- //
- // there's no better way to do this at this time :(
- if ( $.isFunction( $.fn[ 'dataTable' ] ) ) {
- $.extend(true, $.fn.dataTable.defaults, {
- sDom: "<'row datatables-header form-inline'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>r><'table-responsive't><'row datatables-footer'<'col-sm-12 col-md-6'i><'col-sm-12 col-md-6'p>>",
- oLanguage: {
- sLengthMenu: '_MENU_ records per page',
- sProcessing: '<i class="fa fa-spinner fa-spin"></i> Loading'
- },
- fnInitComplete: function( settings, json ) {
- // select 2
- if ( $.isFunction( $.fn[ 'select2' ] ) ) {
- $('.dataTables_length select', settings.nTableWrapper).select2({
- minimumResultsForSearch: -1
- });
- }
- var options = $( 'table', settings.nTableWrapper ).data( 'plugin-options' ) || {};
- // search
- var $search = $('.dataTables_filter input', settings.nTableWrapper);
- $search
- .attr({
- placeholder: typeof options.searchPlaceholder !== 'undefined' ? options.searchPlaceholder : 'Search'
- })
- .addClass('form-control');
- if ( $.isFunction( $.fn.placeholder ) ) {
- $search.placeholder();
- }
- }
- });
- }
- }).apply( this, [ jQuery ]);
- // Notifications - Config
- (function($) {
- 'use strict';
- // use font awesome icons if available
- if ( typeof PNotify != 'undefined' ) {
- PNotify.prototype.options.styling = "fontawesome";
- $.extend(true, PNotify.prototype.options, {
- shadow: false,
- stack: {
- spacing1: 15,
- spacing2: 15
- }
- });
- $.extend(PNotify.styling.fontawesome, {
- // classes
- container: "notification",
- notice: "notification-warning",
- info: "notification-info",
- success: "notification-success",
- error: "notification-danger",
- // icons
- notice_icon: "fa fa-exclamation",
- info_icon: "fa fa-info",
- success_icon: "fa fa-check",
- error_icon: "fa fa-times"
- });
- }
- }).apply(this, [jQuery]);
|