12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841 |
- "use strict";
- // Class definition
- var KTBlockUI = function(element, options) {
- //////////////////////////////
- // ** Private variables ** //
- //////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default options
- var defaultOptions = {
- zIndex: false,
- overlayClass: '',
- overflow: 'hidden',
- message: '<span class="spinner-border text-primary"></span>'
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('blockui') ) {
- the = KTUtil.data(element).get('blockui');
- } else {
- _init();
- }
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.element = element;
- the.overlayElement = null;
- the.blocked = false;
- the.positionChanged = false;
- the.overflowChanged = false;
- // Bind Instance
- KTUtil.data(the.element).set('blockui', the);
- }
- var _block = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.blockui.block', the) === false ) {
- return;
- }
- var isPage = (the.element.tagName === 'BODY');
-
- var position = KTUtil.css(the.element, 'position');
- var overflow = KTUtil.css(the.element, 'overflow');
- var zIndex = isPage ? 10000 : 1;
- if (the.options.zIndex > 0) {
- zIndex = the.options.zIndex;
- } else {
- if (KTUtil.css(the.element, 'z-index') != 'auto') {
- zIndex = KTUtil.css(the.element, 'z-index');
- }
- }
- the.element.classList.add('blockui');
- if (position === "absolute" || position === "relative" || position === "fixed") {
- KTUtil.css(the.element, 'position', 'relative');
- the.positionChanged = true;
- }
- if (the.options.overflow === 'hidden' && overflow === 'visible') {
- KTUtil.css(the.element, 'overflow', 'hidden');
- the.overflowChanged = true;
- }
- the.overlayElement = document.createElement('DIV');
- the.overlayElement.setAttribute('class', 'blockui-overlay ' + the.options.overlayClass);
-
- the.overlayElement.innerHTML = the.options.message;
- KTUtil.css(the.overlayElement, 'z-index', zIndex);
- the.element.append(the.overlayElement);
- the.blocked = true;
- KTEventHandler.trigger(the.element, 'kt.blockui.after.blocked', the)
- }
- var _release = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.blockui.release', the) === false ) {
- return;
- }
- the.element.classList.add('blockui');
-
- if (the.positionChanged) {
- KTUtil.css(the.element, 'position', '');
- }
- if (the.overflowChanged) {
- KTUtil.css(the.element, 'overflow', '');
- }
- if (the.overlayElement) {
- KTUtil.remove(the.overlayElement);
- }
- the.blocked = false;
- KTEventHandler.trigger(the.element, 'kt.blockui.released', the);
- }
- var _isBlocked = function() {
- return the.blocked;
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('blockui');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.block = function() {
- _block();
- }
- the.release = function() {
- _release();
- }
- the.isBlocked = function() {
- return _isBlocked();
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTBlockUI.getInstance = function(element) {
- if (element !== null && KTUtil.data(element).has('blockui')) {
- return KTUtil.data(element).get('blockui');
- } else {
- return null;
- }
- }
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTBlockUI;
- }
- "use strict";
- // DOCS: https://javascript.info/cookie
- // Class definition
- var KTCookie = function() {
- return {
- // returns the cookie with the given name,
- // or undefined if not found
- get: function(name) {
- var matches = document.cookie.match(new RegExp(
- "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
- ));
- return matches ? decodeURIComponent(matches[1]) : null;
- },
- // Please note that a cookie value is encoded,
- // so getCookie uses a built-in decodeURIComponent function to decode it.
- set: function(name, value, options) {
- if ( typeof options === "undefined" || options === null ) {
- options = {};
- }
- options = Object.assign({}, {
- path: '/'
- }, options);
- if ( options.expires instanceof Date ) {
- options.expires = options.expires.toUTCString();
- }
- var updatedCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
- for ( var optionKey in options ) {
- if ( options.hasOwnProperty(optionKey) === false ) {
- continue;
- }
- updatedCookie += "; " + optionKey;
- var optionValue = options[optionKey];
- if ( optionValue !== true ) {
- updatedCookie += "=" + optionValue;
- }
- }
- document.cookie = updatedCookie;
- },
- // To remove a cookie, we can call it with a negative expiration date:
- remove: function(name) {
- this.set(name, "", {
- 'max-age': -1
- });
- }
- }
- }();
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTCookie;
- }
- "use strict";
- // Class definition
- var KTDialer = function(element, options) {
- ////////////////////////////
- // ** Private variables ** //
- ////////////////////////////
- var the = this;
- if (!element) {
- return;
- }
- // Default options
- var defaultOptions = {
- min: null,
- max: null,
- step: 1,
- decimals: 0,
- prefix: "",
- suffix: ""
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- // Constructor
- var _construct = function() {
- if ( KTUtil.data(element).has('dialer') === true ) {
- the = KTUtil.data(element).get('dialer');
- } else {
- _init();
- }
- }
- // Initialize
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- // Elements
- the.element = element;
- the.incElement = the.element.querySelector('[data-kt-dialer-control="increase"]');
- the.decElement = the.element.querySelector('[data-kt-dialer-control="decrease"]');
- the.inputElement = the.element.querySelector('input[type]');
-
- // Set Values
- if (_getOption('decimals')) {
- the.options.decimals = parseInt(_getOption('decimals'));
- }
-
- if (_getOption('prefix')) {
- the.options.prefix = _getOption('prefix');
- }
-
- if (_getOption('suffix')) {
- the.options.suffix = _getOption('suffix');
- }
-
- if (_getOption('step')) {
- the.options.step = parseFloat(_getOption('step'));
- }
- if (_getOption('min')) {
- the.options.min = parseFloat(_getOption('min'));
- }
- if (_getOption('max')) {
- the.options.max = parseFloat(_getOption('max'));
- }
- the.value = parseFloat(the.inputElement.value.replace(/[^\d.]/g, ''));
- _setValue();
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('dialer', the);
- }
- // Handlers
- var _handlers = function() {
- KTUtil.addEvent(the.incElement, 'click', function(e) {
- e.preventDefault();
-
- _increase();
- });
- KTUtil.addEvent(the.decElement, 'click', function(e) {
- e.preventDefault();
- _decrease();
- });
- KTUtil.addEvent(the.inputElement, 'input', function(e) {
- e.preventDefault();
- _setValue();
- });
- }
- // Event handlers
- var _increase = function() {
- // Trigger "after.dialer" event
- KTEventHandler.trigger(the.element, 'kt.dialer.increase', the);
- the.inputElement.value = the.value + the.options.step;
- _setValue();
- // Trigger "before.dialer" event
- KTEventHandler.trigger(the.element, 'kt.dialer.increased', the);
- return the;
- }
- var _decrease = function() {
- // Trigger "after.dialer" event
- KTEventHandler.trigger(the.element, 'kt.dialer.decrease', the);
- the.inputElement.value = the.value - the.options.step;
- _setValue();
- // Trigger "before.dialer" event
- KTEventHandler.trigger(the.element, 'kt.dialer.decreased', the);
- return the;
- }
- // Set Input Value
- var _setValue = function(value) {
- // Trigger "after.dialer" event
- KTEventHandler.trigger(the.element, 'kt.dialer.change', the);
- if (value !== undefined) {
- the.value = value;
- } else {
- the.value = _parse(the.inputElement.value);
- }
-
- if (the.options.min !== null && the.value < the.options.min) {
- the.value = the.options.min;
- }
- if (the.options.max !== null && the.value > the.options.max) {
- the.value = the.options.max;
- }
- the.inputElement.value = _format(the.value);
- // Trigger input change event
- the.inputElement.dispatchEvent(new Event('change'));
- // Trigger "after.dialer" event
- KTEventHandler.trigger(the.element, 'kt.dialer.changed', the);
- }
- var _parse = function(val) {
- val = val
- .replace(/[^0-9.-]/g, '') // remove chars except number, hyphen, point.
- .replace(/(\..*)\./g, '$1') // remove multiple points.
- .replace(/(?!^)-/g, '') // remove middle hyphen.
- .replace(/^0+(\d)/gm, '$1'); // remove multiple leading zeros. <-- I added this.
- val = parseFloat(val);
- if (isNaN(val)) {
- val = 0;
- }
- return val;
- }
- // Format
- var _format = function(val){
- return the.options.prefix + parseFloat(val).toFixed(the.options.decimals) + the.options.suffix;
- }
- // Get option
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-dialer-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-dialer-' + name);
- var value = attr;
- return value;
- } else {
- return null;
- }
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('dialer');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.setMinValue = function(value) {
- the.options.min = value;
- }
- the.setMaxValue = function(value) {
- the.options.max = value;
- }
- the.setValue = function(value) {
- _setValue(value);
- }
- the.getValue = function() {
- return the.inputElement.value;
- }
- the.update = function() {
- _setValue();
- }
- the.increase = function() {
- return _increase();
- }
- the.decrease = function() {
- return _decrease();
- }
- the.getElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTDialer.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('dialer') ) {
- return KTUtil.data(element).get('dialer');
- } else {
- return null;
- }
- }
- // Create instances
- KTDialer.createInstances = function(selector = '[data-kt-dialer="true"]') {
- // Get instances
- var elements = document.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- new KTDialer(elements[i]);
- }
- }
- }
- // Global initialization
- KTDialer.init = function() {
- KTDialer.createInstances();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTDialer;
- }
- "use strict";
- // Class definition
- var KTDrawer = function(element, options) {
- //////////////////////////////
- // ** Private variables ** //
- //////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default options
- var defaultOptions = {
- overlay: true,
- direction: 'end',
- baseClass: 'drawer',
- overlayClass: 'drawer-overlay'
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('drawer') ) {
- the = KTUtil.data(element).get('drawer');
- } else {
- _init();
- }
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('drawer');
- the.element = element;
- the.overlayElement = null;
- the.name = the.element.getAttribute('data-kt-drawer-name');
- the.shown = false;
- the.lastWidth;
- the.toggleElement = null;
- // Set initialized
- the.element.setAttribute('data-kt-drawer', 'true');
- // Event Handlers
- _handlers();
- // Update Instance
- _update();
- // Bind Instance
- KTUtil.data(the.element).set('drawer', the);
- }
- var _handlers = function() {
- var togglers = _getOption('toggle');
- var closers = _getOption('close');
- if ( togglers !== null && togglers.length > 0 ) {
- KTUtil.on(document.body, togglers, 'click', function(e) {
- e.preventDefault();
- the.toggleElement = this;
- _toggle();
- });
- }
- if ( closers !== null && closers.length > 0 ) {
- KTUtil.on(document.body, closers, 'click', function(e) {
- e.preventDefault();
- the.closeElement = this;
- _hide();
- });
- }
- }
- var _toggle = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.drawer.toggle', the) === false ) {
- return;
- }
- if ( the.shown === true ) {
- _hide();
- } else {
- _show();
- }
- KTEventHandler.trigger(the.element, 'kt.drawer.toggled', the);
- }
- var _hide = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.drawer.hide', the) === false ) {
- return;
- }
- the.shown = false;
- _deleteOverlay();
- document.body.removeAttribute('data-kt-drawer-' + the.name, 'on');
- document.body.removeAttribute('data-kt-drawer');
- KTUtil.removeClass(the.element, the.options.baseClass + '-on');
- if ( the.toggleElement !== null ) {
- KTUtil.removeClass(the.toggleElement, 'active');
- }
- KTEventHandler.trigger(the.element, 'kt.drawer.after.hidden', the) === false
- }
- var _show = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.drawer.show', the) === false ) {
- return;
- }
- the.shown = true;
- _createOverlay();
- document.body.setAttribute('data-kt-drawer-' + the.name, 'on');
- document.body.setAttribute('data-kt-drawer', 'on');
- KTUtil.addClass(the.element, the.options.baseClass + '-on');
- if ( the.toggleElement !== null ) {
- KTUtil.addClass(the.toggleElement, 'active');
- }
- KTEventHandler.trigger(the.element, 'kt.drawer.shown', the);
- }
- var _update = function() {
- var width = _getWidth();
- var direction = _getOption('direction');
- var top = _getOption('top');
- var bottom = _getOption('bottom');
- var start = _getOption('start');
- var end = _getOption('end');
- // Reset state
- if ( KTUtil.hasClass(the.element, the.options.baseClass + '-on') === true && String(document.body.getAttribute('data-kt-drawer-' + the.name + '-')) === 'on' ) {
- the.shown = true;
- } else {
- the.shown = false;
- }
- // Activate/deactivate
- if ( _getOption('activate') === true ) {
- KTUtil.addClass(the.element, the.options.baseClass);
- KTUtil.addClass(the.element, the.options.baseClass + '-' + direction);
-
- KTUtil.css(the.element, 'width', width, true);
- the.lastWidth = width;
- if (top) {
- KTUtil.css(the.element, 'top', top);
- }
- if (bottom) {
- KTUtil.css(the.element, 'bottom', bottom);
- }
- if (start) {
- if (KTUtil.isRTL()) {
- KTUtil.css(the.element, 'right', start);
- } else {
- KTUtil.css(the.element, 'left', start);
- }
- }
- if (end) {
- if (KTUtil.isRTL()) {
- KTUtil.css(the.element, 'left', end);
- } else {
- KTUtil.css(the.element, 'right', end);
- }
- }
- } else {
- KTUtil.removeClass(the.element, the.options.baseClass);
- KTUtil.removeClass(the.element, the.options.baseClass + '-' + direction);
- KTUtil.css(the.element, 'width', '');
- if (top) {
- KTUtil.css(the.element, 'top', '');
- }
- if (bottom) {
- KTUtil.css(the.element, 'bottom', '');
- }
- if (start) {
- if (KTUtil.isRTL()) {
- KTUtil.css(the.element, 'right', '');
- } else {
- KTUtil.css(the.element, 'left', '');
- }
- }
- if (end) {
- if (KTUtil.isRTL()) {
- KTUtil.css(the.element, 'left', '');
- } else {
- KTUtil.css(the.element, 'right', '');
- }
- }
- _hide();
- }
- }
- var _createOverlay = function() {
- if ( _getOption('overlay') === true ) {
- the.overlayElement = document.createElement('DIV');
- KTUtil.css(the.overlayElement, 'z-index', KTUtil.css(the.element, 'z-index') - 1); // update
- document.body.append(the.overlayElement);
- KTUtil.addClass(the.overlayElement, _getOption('overlay-class'));
- KTUtil.addEvent(the.overlayElement, 'click', function(e) {
- e.preventDefault();
- _hide();
- });
- }
- }
- var _deleteOverlay = function() {
- if ( the.overlayElement !== null ) {
- KTUtil.remove(the.overlayElement);
- }
- }
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-drawer-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-drawer-' + name);
- var value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- return value;
- } else {
- var optionName = KTUtil.snakeToCamel(name);
- if ( the.options[optionName] ) {
- return KTUtil.getResponsiveValue(the.options[optionName]);
- } else {
- return null;
- }
- }
- }
- var _getWidth = function() {
- var width = _getOption('width');
- if ( width === 'auto') {
- width = KTUtil.css(the.element, 'width');
- }
- return width;
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('drawer');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.toggle = function() {
- return _toggle();
- }
- the.show = function() {
- return _show();
- }
- the.hide = function() {
- return _hide();
- }
- the.isShown = function() {
- return the.shown;
- }
- the.update = function() {
- _update();
- }
- the.goElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTDrawer.getInstance = function(element) {
- if (element !== null && KTUtil.data(element).has('drawer')) {
- return KTUtil.data(element).get('drawer');
- } else {
- return null;
- }
- }
- // Hide all drawers and skip one if provided
- KTDrawer.hideAll = function(skip = null, selector = '[data-kt-drawer="true"]') {
- var items = document.querySelectorAll(selector);
- if (items && items.length > 0) {
- for (var i = 0, len = items.length; i < len; i++) {
- var item = items[i];
- var drawer = KTDrawer.getInstance(item);
- if (!drawer) {
- continue;
- }
- if ( skip ) {
- if ( item !== skip ) {
- drawer.hide();
- }
- } else {
- drawer.hide();
- }
- }
- }
- }
- // Update all drawers
- KTDrawer.updateAll = function(selector = '[data-kt-drawer="true"]') {
- var items = document.querySelectorAll(selector);
- if (items && items.length > 0) {
- for (var i = 0, len = items.length; i < len; i++) {
- var drawer = KTDrawer.getInstance(items[i]);
- if (drawer) {
- drawer.update();
- }
- }
- }
- }
- // Create instances
- KTDrawer.createInstances = function(selector = '[data-kt-drawer="true"]') {
- // Initialize Menus
- var elements = document.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- new KTDrawer(elements[i]);
- }
- }
- }
- // Toggle instances
- KTDrawer.handleShow = function() {
- // External drawer toggle handler
- KTUtil.on(document.body, '[data-kt-drawer-show="true"][data-kt-drawer-target]', 'click', function(e) {
- e.preventDefault();
-
- var element = document.querySelector(this.getAttribute('data-kt-drawer-target'));
- if (element) {
- KTDrawer.getInstance(element).show();
- }
- });
- }
- // Dismiss instances
- KTDrawer.handleDismiss = function() {
- // External drawer toggle handler
- KTUtil.on(document.body, '[data-kt-drawer-dismiss="true"]', 'click', function(e) {
- var element = this.closest('[data-kt-drawer="true"]');
- if (element) {
- var drawer = KTDrawer.getInstance(element);
- if (drawer.isShown()) {
- drawer.hide();
- }
- }
- });
- }
- // Handle resize
- KTDrawer.handleResize = function() {
- // Window resize Handling
- window.addEventListener('resize', function() {
- var timer;
- KTUtil.throttle(timer, function() {
- // Locate and update drawer instances on window resize
- var elements = document.querySelectorAll('[data-kt-drawer="true"]');
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- var drawer = KTDrawer.getInstance(elements[i]);
- if (drawer) {
- drawer.update();
- }
- }
- }
- }, 200);
- });
- }
- // Global initialization
- KTDrawer.init = function() {
- KTDrawer.createInstances();
- KTDrawer.handleResize();
- KTDrawer.handleShow();
- KTDrawer.handleDismiss();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTDrawer;
- }
- "use strict";
- // Class definition
- var KTEventHandler = function() {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var _handlers = {};
- ////////////////////////////
- // ** Private Methods ** //
- ////////////////////////////
- var _triggerEvent = function(element, name, target) {
- var returnValue = true;
- var eventValue;
- if ( KTUtil.data(element).has(name) === true ) {
- var handlerIds = KTUtil.data(element).get(name);
- var handlerId;
- for (var i = 0; i < handlerIds.length; i++) {
- handlerId = handlerIds[i];
-
- if ( _handlers[name] && _handlers[name][handlerId] ) {
- var handler = _handlers[name][handlerId];
- var value;
-
- if ( handler.name === name ) {
- if ( handler.one == true ) {
- if ( handler.fired == false ) {
- _handlers[name][handlerId].fired = true;
-
- eventValue = handler.callback.call(this, target);
- }
- } else {
- eventValue = handler.callback.call(this, target);
- }
- if ( eventValue === false ) {
- returnValue = false;
- }
- }
- }
- }
- }
- return returnValue;
- }
- var _addEvent = function(element, name, callback, one) {
- var handlerId = KTUtil.getUniqueId('event');
- var handlerIds = KTUtil.data(element).get(name);
- if ( !handlerIds ) {
- handlerIds = [];
- }
- handlerIds.push(handlerId);
- KTUtil.data(element).set(name, handlerIds);
- if ( !_handlers[name] ) {
- _handlers[name] = {};
- }
- _handlers[name][handlerId] = {
- name: name,
- callback: callback,
- one: one,
- fired: false
- };
- return handlerId;
- }
- var _removeEvent = function(element, name, handlerId) {
- var handlerIds = KTUtil.data(element).get(name);
- var index = handlerIds && handlerIds.indexOf(handlerId);
-
- if (index !== -1) {
- handlerIds.splice(index, 1);
- KTUtil.data(element).set(name, handlerIds);
- }
- if (_handlers[name] && _handlers[name][handlerId]) {
- delete _handlers[name][handlerId];
- }
- }
- ////////////////////////////
- // ** Public Methods ** //
- ////////////////////////////
- return {
- trigger: function(element, name, target) {
- return _triggerEvent(element, name, target);
- },
- on: function(element, name, handler) {
- return _addEvent(element, name, handler);
- },
- one: function(element, name, handler) {
- return _addEvent(element, name, handler, true);
- },
- off: function(element, name, handlerId) {
- return _removeEvent(element, name, handlerId);
- },
- debug: function() {
- for (var b in _handlers) {
- if ( _handlers.hasOwnProperty(b) ) console.log(b);
- }
- }
- }
- }();
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTEventHandler;
- }
- "use strict";
- // Class definition
- var KTFeedback = function(options) {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var the = this;
- // Default options
- var defaultOptions = {
- 'width' : 100,
- 'placement' : 'top-center',
- 'content' : '',
- 'type': 'popup'
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- var _construct = function() {
- _init();
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('feedback');
- the.element;
- the.shown = false;
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('feedback', the);
- }
- var _handlers = function() {
- KTUtil.addEvent(the.element, 'click', function(e) {
- e.preventDefault();
- _go();
- });
- }
- var _show = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.feedback.show', the) === false ) {
- return;
- }
- if ( the.options.type === 'popup') {
- _showPopup();
- }
- KTEventHandler.trigger(the.element, 'kt.feedback.shown', the);
- return the;
- }
- var _hide = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.feedback.hide', the) === false ) {
- return;
- }
- if ( the.options.type === 'popup') {
- _hidePopup();
- }
- the.shown = false;
- KTEventHandler.trigger(the.element, 'kt.feedback.hidden', the);
- return the;
- }
- var _showPopup = function() {
- the.element = document.createElement("DIV");
- KTUtil.addClass(the.element, 'feedback feedback-popup');
- KTUtil.setHTML(the.element, the.options.content);
- if (the.options.placement == 'top-center') {
- _setPopupTopCenterPosition();
- }
- document.body.appendChild(the.element);
- KTUtil.addClass(the.element, 'feedback-shown');
- the.shown = true;
- }
- var _setPopupTopCenterPosition = function() {
- var width = KTUtil.getResponsiveValue(the.options.width);
- var height = KTUtil.css(the.element, 'height');
- KTUtil.addClass(the.element, 'feedback-top-center');
- KTUtil.css(the.element, 'width', width);
- KTUtil.css(the.element, 'left', '50%');
- KTUtil.css(the.element, 'top', '-' + height);
- }
- var _hidePopup = function() {
- the.element.remove();
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('feedback');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.show = function() {
- return _show();
- }
- the.hide = function() {
- return _hide();
- }
- the.isShown = function() {
- return the.shown;
- }
- the.getElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTFeedback;
- }
- "use strict";
- // Class definition
- var KTImageInput = function(element, options) {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default Options
- var defaultOptions = {
-
- };
- ////////////////////////////
- // ** Private Methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('image-input') === true ) {
- the = KTUtil.data(element).get('image-input');
- } else {
- _init();
- }
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('image-input');
- // Elements
- the.element = element;
- the.inputElement = KTUtil.find(element, 'input[type="file"]');
- the.wrapperElement = KTUtil.find(element, '.image-input-wrapper');
- the.cancelElement = KTUtil.find(element, '[data-kt-image-input-action="cancel"]');
- the.removeElement = KTUtil.find(element, '[data-kt-image-input-action="remove"]');
- the.hiddenElement = KTUtil.find(element, 'input[type="hidden"]');
- the.src = KTUtil.css(the.wrapperElement, 'backgroundImage');
- // Set initialized
- the.element.setAttribute('data-kt-image-input', 'true');
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('image-input', the);
- }
- // Init Event Handlers
- var _handlers = function() {
- KTUtil.addEvent(the.inputElement, 'change', _change);
- KTUtil.addEvent(the.cancelElement, 'click', _cancel);
- KTUtil.addEvent(the.removeElement, 'click', _remove);
- }
- // Event Handlers
- var _change = function(e) {
- e.preventDefault();
- if ( the.inputElement !== null && the.inputElement.files && the.inputElement.files[0] ) {
- // Fire change event
- if ( KTEventHandler.trigger(the.element, 'kt.imageinput.change', the) === false ) {
- return;
- }
- var reader = new FileReader();
- reader.onload = function(e) {
- KTUtil.css(the.wrapperElement, 'background-image', 'url('+ e.target.result +')');
- }
- reader.readAsDataURL(the.inputElement.files[0]);
- the.element.classList.add('image-input-changed');
- the.element.classList.remove('image-input-empty');
- // Fire removed event
- KTEventHandler.trigger(the.element, 'kt.imageinput.changed', the);
- }
- }
- var _cancel = function(e) {
- e.preventDefault();
- // Fire cancel event
- if ( KTEventHandler.trigger(the.element, 'kt.imageinput.cancel', the) === false ) {
- return;
- }
- the.element.classList.remove('image-input-changed');
- the.element.classList.remove('image-input-empty');
- if (the.src === 'none') {
- KTUtil.css(the.wrapperElement, 'background-image', '');
- the.element.classList.add('image-input-empty');
- } else {
- KTUtil.css(the.wrapperElement, 'background-image', the.src);
- }
-
- the.inputElement.value = "";
- if ( the.hiddenElement !== null ) {
- the.hiddenElement.value = "0";
- }
- // Fire canceled event
- KTEventHandler.trigger(the.element, 'kt.imageinput.canceled', the);
- }
- var _remove = function(e) {
- e.preventDefault();
- // Fire remove event
- if ( KTEventHandler.trigger(the.element, 'kt.imageinput.remove', the) === false ) {
- return;
- }
- the.element.classList.remove('image-input-changed');
- the.element.classList.add('image-input-empty');
- KTUtil.css(the.wrapperElement, 'background-image', "none");
- the.inputElement.value = "";
- if ( the.hiddenElement !== null ) {
- the.hiddenElement.value = "1";
- }
- // Fire removed event
- KTEventHandler.trigger(the.element, 'kt.imageinput.removed', the);
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('image-input');
- }
- // Construct Class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.getInputElement = function() {
- return the.inputElement;
- }
- the.goElement = function() {
- return the.element;
- }
-
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTImageInput.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('image-input') ) {
- return KTUtil.data(element).get('image-input');
- } else {
- return null;
- }
- }
- // Create instances
- KTImageInput.createInstances = function(selector = '[data-kt-image-input]') {
- // Initialize Menus
- var elements = document.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- new KTImageInput(elements[i]);
- }
- }
- }
- // Global initialization
- KTImageInput.init = function() {
- KTImageInput.createInstances();
- };
- // Webpack Support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTImageInput;
- }
- "use strict";
- // Class definition
- var KTMenu = function(element, options) {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default Options
- var defaultOptions = {
- dropdown: {
- hoverTimeout: 200,
- zindex: 105
- },
- accordion: {
- slideSpeed: 250,
- expand: false
- }
- };
- ////////////////////////////
- // ** Private Methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('menu') === true ) {
- the = KTUtil.data(element).get('menu');
- } else {
- _init();
- }
- }
- var _init = function() {
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('menu');
- the.element = element;
- the.triggerElement;
- the.disabled = false;
- // Set initialized
- the.element.setAttribute('data-kt-menu', 'true');
- _setTriggerElement();
- _update();
- KTUtil.data(the.element).set('menu', the);
- }
- var _destroy = function() { // todo
- }
- // Event Handlers
- // Toggle handler
- var _click = function(element, e) {
- e.preventDefault();
- if (the.disabled === true) {
- return;
- }
- var item = _getItemElement(element);
- if ( _getOptionFromElementAttribute(item, 'trigger') !== 'click' ) {
- return;
- }
- if ( _getOptionFromElementAttribute(item, 'toggle') === false ) {
- _show(item);
- } else {
- _toggle(item);
- }
- }
- // Link handler
- var _link = function(element, e) {
- if (the.disabled === true) {
- return;
- }
-
- if ( KTEventHandler.trigger(the.element, 'kt.menu.link.click', element) === false ) {
- return;
- }
- // Dismiss all shown dropdowns
- KTMenu.hideDropdowns();
- KTEventHandler.trigger(the.element, 'kt.menu.link.clicked', element);
- }
- // Dismiss handler
- var _dismiss = function(element, e) {
- var item = _getItemElement(element);
- var items = _getItemChildElements(item);
- if ( item !== null && _getItemSubType(item) === 'dropdown') {
- _hide(item); // hide items dropdown
- // Hide all child elements as well
-
- if ( items.length > 0 ) {
- for (var i = 0, len = items.length; i < len; i++) {
- if ( items[i] !== null && _getItemSubType(items[i]) === 'dropdown') {
- _hide(tems[i]);
- }
- }
- }
- }
- }
- // Mouseover handle
- var _mouseover = function(element, e) {
- var item = _getItemElement(element);
- if (the.disabled === true) {
- return;
- }
- if ( item === null ) {
- return;
- }
- if ( _getOptionFromElementAttribute(item, 'trigger') !== 'hover' ) {
- return;
- }
- if ( KTUtil.data(item).get('hover') === '1' ) {
- clearTimeout(KTUtil.data(item).get('timeout'));
- KTUtil.data(item).remove('hover');
- KTUtil.data(item).remove('timeout');
- }
- _show(item);
- }
- // Mouseout handle
- var _mouseout = function(element, e) {
- var item = _getItemElement(element);
- if (the.disabled === true) {
- return;
- }
- if ( item === null ) {
- return;
- }
- if ( _getOptionFromElementAttribute(item, 'trigger') !== 'hover' ) {
- return;
- }
- var timeout = setTimeout(function() {
- if ( KTUtil.data(item).get('hover') === '1' ) {
- _hide(item);
- }
- }, the.options.dropdown.hoverTimeout);
- KTUtil.data(item).set('hover', '1');
- KTUtil.data(item).set('timeout', timeout);
- }
- // Toggle item sub
- var _toggle = function(item) {
- if ( !item ) {
- item = the.triggerElement;
- }
- if ( _isItemSubShown(item) === true ) {
- _hide(item);
- } else {
- _show(item);
- }
- }
- // Show item sub
- var _show = function(item) {
- if ( !item ) {
- item = the.triggerElement;
- }
- if ( _isItemSubShown(item) === true ) {
- return;
- }
- if ( _getItemSubType(item) === 'dropdown' ) {
- _showDropdown(item); // // show current dropdown
- } else if ( _getItemSubType(item) === 'accordion' ) {
- _showAccordion(item);
- }
- // Remember last submenu type
- KTUtil.data(item).set('type', _getItemSubType(item)); // updated
- }
- // Hide item sub
- var _hide = function(item) {
- if ( !item ) {
- item = the.triggerElement;
- }
- if ( _isItemSubShown(item) === false ) {
- return;
- }
-
- if ( _getItemSubType(item) === 'dropdown' ) {
- _hideDropdown(item);
- } else if ( _getItemSubType(item) === 'accordion' ) {
- _hideAccordion(item);
- }
- }
- // Reset item state classes if item sub type changed
- var _reset = function(item) {
- if ( _hasItemSub(item) === false ) {
- return;
- }
- var sub = _getItemSubElement(item);
- // Reset sub state if sub type is changed during the window resize
- if ( KTUtil.data(item).has('type') && KTUtil.data(item).get('type') !== _getItemSubType(item) ) { // updated
- KTUtil.removeClass(item, 'hover');
- KTUtil.removeClass(item, 'show');
- KTUtil.removeClass(sub, 'show');
- } // updated
- }
- // Update all item state classes if item sub type changed
- var _update = function() {
- var items = the.element.querySelectorAll('.menu-item[data-kt-menu-trigger]');
- if ( items && items.length > 0 ) {
- for (var i = 0, len = items.length; i < len; i++) {
- _reset(items[i]);
- }
- }
- }
- // Set external trigger element
- var _setTriggerElement = function() {
- var target = document.querySelector('[data-kt-menu-target="# ' + the.element.getAttribute('id') + '"]');
- if ( target !== null ) {
- the.triggerElement = target;
- } else if ( the.element.closest('[data-kt-menu-trigger]') ) {
- the.triggerElement = the.element.closest('[data-kt-menu-trigger]');
- } else if ( the.element.parentNode && KTUtil.child(the.element.parentNode, '[data-kt-menu-trigger]')) {
- the.triggerElement = KTUtil.child(the.element.parentNode, '[data-kt-menu-trigger]');
- }
- if ( the.triggerElement ) {
- KTUtil.data(the.triggerElement).set('menu', the);
- }
- }
- // Test if menu has external trigger element
- var _isTriggerElement = function(item) {
- return ( the.triggerElement === item ) ? true : false;
- }
- // Test if item's sub is shown
- var _isItemSubShown = function(item) {
- var sub = _getItemSubElement(item);
- if ( sub !== null ) {
- if ( _getItemSubType(item) === 'dropdown' ) {
- if ( KTUtil.hasClass(sub, 'show') === true && sub.hasAttribute('data-popper-placement') === true ) {
- return true;
- } else {
- return false;
- }
- } else {
- return KTUtil.hasClass(item, 'show');
- }
- } else {
- return false;
- }
- }
- // Test if item dropdown is permanent
- var _isItemDropdownPermanent = function(item) {
- return _getOptionFromElementAttribute(item, 'permanent') === true ? true : false;
- }
- // Test if item's parent is shown
- var _isItemParentShown = function(item) {
- return KTUtil.parents(item, '.menu-item.show').length > 0;
- }
- // Test of it is item sub element
- var _isItemSubElement = function(item) {
- return KTUtil.hasClass(item, 'menu-sub');
- }
- // Test if item has sub
- var _hasItemSub = function(item) {
- return (KTUtil.hasClass(item, 'menu-item') && item.hasAttribute('data-kt-menu-trigger'));
- }
- // Get link element
- var _getItemLinkElement = function(item) {
- return KTUtil.child(item, '.menu-link');
- }
- // Get toggle element
- var _getItemToggleElement = function(item) {
- if ( the.triggerElement ) {
- return the.triggerElement;
- } else {
- return _getItemLinkElement(item);
- }
- }
- // Get item sub element
- var _getItemSubElement = function(item) {
- if ( _isTriggerElement(item) === true ) {
- return the.element;
- } if ( item.classList.contains('menu-sub') === true ) {
- return item;
- } else if ( KTUtil.data(item).has('sub') ) {
- return KTUtil.data(item).get('sub');
- } else {
- return KTUtil.child(item, '.menu-sub');
- }
- }
- // Get item sub type
- var _getItemSubType = function(element) {
- var sub = _getItemSubElement(element);
- if ( sub && parseInt(KTUtil.css(sub, 'z-index')) > 0 ) {
- return "dropdown";
- } else {
- return "accordion";
- }
- }
- // Get item element
- var _getItemElement = function(element) {
- var item, sub;
- // Element is the external trigger element
- if (_isTriggerElement(element) ) {
- return element;
- }
- // Element has item toggler attribute
- if ( element.hasAttribute('data-kt-menu-trigger') ) {
- return element;
- }
- // Element has item DOM reference in it's data storage
- if ( KTUtil.data(element).has('item') ) {
- return KTUtil.data(element).get('item');
- }
- // Item is parent of element
- if ( (item = element.closest('.menu-item[data-kt-menu-trigger]')) ) {
- return item;
- }
- // Element's parent has item DOM reference in it's data storage
- if ( (sub = element.closest('.menu-sub')) ) {
- if ( KTUtil.data(sub).has('item') === true ) {
- return KTUtil.data(sub).get('item')
- }
- }
- }
- // Get item parent element
- var _getItemParentElement = function(item) {
- var sub = item.closest('.menu-sub');
- var parentItem;
- if ( KTUtil.data(sub).has('item') ) {
- return KTUtil.data(sub).get('item');
- }
- if ( sub && (parentItem = sub.closest('.menu-item[data-kt-menu-trigger]')) ) {
- return parentItem;
- }
- return null;
- }
- // Get item parent elements
- var _getItemParentElements = function(item) {
- var parents = [];
- var parent;
- var i = 0;
- do {
- parent = _getItemParentElement(item);
-
- if ( parent ) {
- parents.push(parent);
- item = parent;
- }
- i++;
- } while (parent !== null && i < 20);
- if ( the.triggerElement ) {
- parents.unshift(the.triggerElement);
- }
- return parents;
- }
- // Get item child element
- var _getItemChildElement = function(item) {
- var selector = item;
- var element;
- if ( KTUtil.data(item).get('sub') ) {
- selector = KTUtil.data(item).get('sub');
- }
- if ( selector !== null ) {
- //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');
- element = selector.querySelector('.menu-item[data-kt-menu-trigger]');
- if ( element ) {
- return element;
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
-
- // Get item child elements
- var _getItemChildElements = function(item) {
- var children = [];
- var child;
- var i = 0;
- do {
- child = _getItemChildElement(item);
-
- if ( child ) {
- children.push(child);
- item = child;
- }
- i++;
- } while (child !== null && i < 20);
- return children;
- }
- // Show item dropdown
- var _showDropdown = function(item) {
- // Handle dropdown show event
- if ( KTEventHandler.trigger(the.element, 'kt.menu.dropdown.show', item) === false ) {
- return;
- }
- // Hide all currently shown dropdowns except current one
- KTMenu.hideDropdowns(item);
- var toggle = _isTriggerElement(item) ? item : _getItemLinkElement(item);
- var sub = _getItemSubElement(item);
- var width = _getOptionFromElementAttribute(item, 'width');
- var height = _getOptionFromElementAttribute(item, 'height');
- var zindex = the.options.dropdown.zindex; // update
- var parentZindex = KTUtil.getHighestZindex(item); // update
- // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update
- if ( parentZindex !== null && parentZindex >= zindex ) {
- zindex = parentZindex + 1;
- }
- if ( zindex > 0 ) {
- KTUtil.css(sub, 'z-index', zindex);
- }
- if ( width !== null ) {
- KTUtil.css(sub, 'width', width);
- }
- if ( height !== null ) {
- KTUtil.css(sub, 'height', height);
- }
- KTUtil.css(sub, 'display', '');
- KTUtil.css(sub, 'overflow', '');
- // Init popper(new)
- _initDropdownPopper(item, sub);
- KTUtil.addClass(item, 'show');
- KTUtil.addClass(item, 'menu-dropdown');
- KTUtil.addClass(sub, 'show');
- // Append the sub the the root of the menu
- if ( _getOptionFromElementAttribute(item, 'overflow') === true ) {
- document.body.appendChild(sub);
- KTUtil.data(item).set('sub', sub);
- KTUtil.data(sub).set('item', item);
- KTUtil.data(sub).set('menu', the);
- } else {
- KTUtil.data(sub).set('item', item);
- }
- // Handle dropdown shown event
- KTEventHandler.trigger(the.element, 'kt.menu.dropdown.shown', item);
- }
- // Hide item dropdown
- var _hideDropdown = function(item) {
- // Handle dropdown hide event
- if ( KTEventHandler.trigger(the.element, 'kt.menu.dropdown.hide', item) === false ) {
- return;
- }
- var sub = _getItemSubElement(item);
- KTUtil.css(sub, 'z-index', '');
- KTUtil.css(sub, 'width', '');
- KTUtil.css(sub, 'height', '');
- KTUtil.removeClass(item, 'show');
- KTUtil.removeClass(item, 'menu-dropdown');
- KTUtil.removeClass(sub, 'show');
- // Append the sub back to it's parent
- if ( _getOptionFromElementAttribute(item, 'overflow') === true ) {
- if (item.classList.contains('menu-item')) {
- item.appendChild(sub);
- } else {
- KTUtil.insertAfter(the.element, item);
- }
-
- KTUtil.data(item).remove('sub');
- KTUtil.data(sub).remove('item');
- KTUtil.data(sub).remove('menu');
- }
- // Destroy popper(new)
- _destroyDropdownPopper(item);
-
- // Handle dropdown hidden event
- KTEventHandler.trigger(the.element, 'kt.menu.dropdown.hidden', item);
- }
- // Init dropdown popper(new)
- var _initDropdownPopper = function(item, sub) {
- // Setup popper instance
- var reference;
- var attach = _getOptionFromElementAttribute(item, 'attach');
- if ( attach ) {
- if ( attach === 'parent') {
- reference = item.parentNode;
- } else {
- reference = document.querySelector(attach);
- }
- } else {
- reference = item;
- }
- var popper = Popper.createPopper(reference, sub, _getDropdownPopperConfig(item));
- KTUtil.data(item).set('popper', popper);
- }
- // Destroy dropdown popper(new)
- var _destroyDropdownPopper = function(item) {
- if ( KTUtil.data(item).has('popper') === true ) {
- KTUtil.data(item).get('popper').destroy();
- KTUtil.data(item).remove('popper');
- }
- }
- // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)
- var _getDropdownPopperConfig = function(item) {
- // Placement
- var placement = _getOptionFromElementAttribute(item, 'placement');
- if (!placement) {
- placement = 'right';
- }
- // Offset
- var offsetValue = _getOptionFromElementAttribute(item, 'offset');
- var offset = offsetValue ? offsetValue.split(",") : [];
-
- if (offset.length === 2) {
- offset[0] = parseInt(offset[0]);
- offset[1] = parseInt(offset[1]);
- }
- // Strategy
- var strategy = _getOptionFromElementAttribute(item, 'overflow') === true ? 'absolute' : 'fixed';
- var altAxis = _getOptionFromElementAttribute(item, 'flip') !== false ? true : false;
- var popperConfig = {
- placement: placement,
- strategy: strategy,
- modifiers: [{
- name: 'offset',
- options: {
- offset: offset
- }
- }, {
- name: 'preventOverflow',
- options: {
- altAxis: altAxis
- }
- }, {
- name: 'flip',
- options: {
- flipVariations: false
- }
- }]
- };
- return popperConfig;
- }
- // Show item accordion
- var _showAccordion = function(item) {
- if ( KTEventHandler.trigger(the.element, 'kt.menu.accordion.show', item) === false ) {
- return;
- }
- var sub = _getItemSubElement(item);
- var expand = the.options.accordion.expand;
-
- if (_getOptionFromElementAttribute(item, 'expand') === true) {
- expand = true;
- } else if (_getOptionFromElementAttribute(item, 'expand') === false) {
- expand = false;
- } else if (_getOptionFromElementAttribute(the.element, 'expand') === true) {
- expand = true;
- }
- if ( expand === false ) {
- _hideAccordions(item);
- }
- if ( KTUtil.data(item).has('popper') === true ) {
- _hideDropdown(item);
- }
- KTUtil.addClass(item, 'hover');
- KTUtil.addClass(item, 'showing');
- KTUtil.slideDown(sub, the.options.accordion.slideSpeed, function() {
- KTUtil.removeClass(item, 'showing');
- KTUtil.addClass(item, 'show');
- KTUtil.addClass(sub, 'show');
- KTEventHandler.trigger(the.element, 'kt.menu.accordion.shown', item);
- });
- }
- // Hide item accordion
- var _hideAccordion = function(item) {
- if ( KTEventHandler.trigger(the.element, 'kt.menu.accordion.hide', item) === false ) {
- return;
- }
-
- var sub = _getItemSubElement(item);
- KTUtil.addClass(item, 'hiding');
- KTUtil.slideUp(sub, the.options.accordion.slideSpeed, function() {
- KTUtil.removeClass(item, 'hiding');
- KTUtil.removeClass(item, 'show');
- KTUtil.removeClass(sub, 'show');
- KTUtil.removeClass(item, 'hover'); // update
- KTEventHandler.trigger(the.element, 'kt.menu.accordion.hidden', item);
- });
- }
- var _setActiveLink = function(link) {
- var item = _getItemElement(link);
- var parentItems = _getItemParentElements(item);
- var parentTabPane = link.closest('.tab-pane');
- var activeLinks = [].slice.call(the.element.querySelectorAll('.menu-link.active'));
- var activeParentItems = [].slice.call(the.element.querySelectorAll('.menu-item.here, .menu-item.show'));
-
- if (_getItemSubType(item) === "accordion") {
- _showAccordion(item);
- } else {
- item.classList.add("here");
- }
- if ( parentItems && parentItems.length > 0 ) {
- for (var i = 0, len = parentItems.length; i < len; i++) {
- var parentItem = parentItems[i];
- if (_getItemSubType(parentItem) === "accordion") {
- _showAccordion(parentItem);
- } else {
- parentItem.classList.add("here");
- }
- }
- }
-
- activeLinks.map(function (activeLink) {
- activeLink.classList.remove("active");
- });
- activeParentItems.map(function (activeParentItem) {
- if (activeParentItem.contains(item) === false) {
- activeParentItem.classList.remove("here");
- activeParentItem.classList.remove("show");
- }
- });
- // Handle tab
- if (parentTabPane && bootstrap.Tab) {
- var tabEl = the.element.querySelector('[data-bs-target="#' + parentTabPane.getAttribute("id") + '"]');
- var tab = new bootstrap.Tab(tabEl);
- if (tab) {
- tab.show();
- }
- }
- link.classList.add("active");
- }
- var _getLinkByAttribute = function(value, name = "href") {
- var link = the.element.querySelector('a[' + name + '="' + value + '"]');
- if (link) {
- return link;
- } else {
- null;
- }
- }
- // Hide all shown accordions of item
- var _hideAccordions = function(item) {
- var itemsToHide = KTUtil.findAll(the.element, '.show[data-kt-menu-trigger]');
- var itemToHide;
- if (itemsToHide && itemsToHide.length > 0) {
- for (var i = 0, len = itemsToHide.length; i < len; i++) {
- itemToHide = itemsToHide[i];
- if ( _getItemSubType(itemToHide) === 'accordion' && itemToHide !== item && item.contains(itemToHide) === false && itemToHide.contains(item) === false ) {
- _hideAccordion(itemToHide);
- }
- }
- }
- }
- // Get item option(through html attributes)
- var _getOptionFromElementAttribute = function(item, name) {
- var attr;
- var value = null;
- if ( item && item.hasAttribute('data-kt-menu-' + name) ) {
- attr = item.getAttribute('data-kt-menu-' + name);
- value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- }
- return value;
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('menu');
- }
- // Construct Class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Event Handlers
- the.click = function(element, e) {
- return _click(element, e);
- }
- the.link = function(element, e) {
- return _link(element, e);
- }
- the.dismiss = function(element, e) {
- return _dismiss(element, e);
- }
- the.mouseover = function(element, e) {
- return _mouseover(element, e);
- }
- the.mouseout = function(element, e) {
- return _mouseout(element, e);
- }
- // General Methods
- the.getItemTriggerType = function(item) {
- return _getOptionFromElementAttribute(item, 'trigger');
- }
- the.getItemSubType = function(element) {
- return _getItemSubType(element);
- }
- the.show = function(item) {
- return _show(item);
- }
- the.hide = function(item) {
- return _hide(item);
- }
- the.reset = function(item) {
- return _reset(item);
- }
- the.update = function() {
- return _update();
- }
- the.getElement = function() {
- return the.element;
- }
- the.setActiveLink = function(link) {
- return _setActiveLink(link);
- }
- the.getLinkByAttribute = function(value, name = "href") {
- return _getLinkByAttribute(value, name);
- }
- the.getItemLinkElement = function(item) {
- return _getItemLinkElement(item);
- }
- the.getItemToggleElement = function(item) {
- return _getItemToggleElement(item);
- }
- the.getItemSubElement = function(item) {
- return _getItemSubElement(item);
- }
- the.getItemParentElements = function(item) {
- return _getItemParentElements(item);
- }
- the.isItemSubShown = function(item) {
- return _isItemSubShown(item);
- }
- the.isItemParentShown = function(item) {
- return _isItemParentShown(item);
- }
- the.getTriggerElement = function() {
- return the.triggerElement;
- }
- the.isItemDropdownPermanent = function(item) {
- return _isItemDropdownPermanent(item);
- }
- the.destroy = function() {
- return _destroy();
- }
- the.disable = function() {
- the.disabled = true;
- }
- the.enable = function() {
- the.disabled = false;
- }
- // Accordion Mode Methods
- the.hideAccordions = function(item) {
- return _hideAccordions(item);
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- };
- // Get KTMenu instance by element
- KTMenu.getInstance = function(element) {
- var menu;
- var item;
- // Element has menu DOM reference in it's DATA storage
- if ( KTUtil.data(element).has('menu') ) {
- return KTUtil.data(element).get('menu');
- }
- // Element has .menu parent
- if ( menu = element.closest('.menu') ) {
- if ( KTUtil.data(menu).has('menu') ) {
- return KTUtil.data(menu).get('menu');
- }
- }
-
- // Element has a parent with DOM reference to .menu in it's DATA storage
- if ( KTUtil.hasClass(element, 'menu-link') ) {
- var sub = element.closest('.menu-sub');
- if ( KTUtil.data(sub).has('menu') ) {
- return KTUtil.data(sub).get('menu');
- }
- }
- return null;
- }
- // Hide all dropdowns and skip one if provided
- KTMenu.hideDropdowns = function(skip) {
- var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
- if (items && items.length > 0) {
- for (var i = 0, len = items.length; i < len; i++) {
- var item = items[i];
- var menu = KTMenu.getInstance(item);
- if ( menu && menu.getItemSubType(item) === 'dropdown' ) {
- if ( skip ) {
- if ( menu.getItemSubElement(item).contains(skip) === false && item.contains(skip) === false && item !== skip ) {
- menu.hide(item);
- }
- } else {
- menu.hide(item);
- }
- }
- }
- }
- }
- // Update all dropdowns popover instances
- KTMenu.updateDropdowns = function() {
- var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
- if (items && items.length > 0) {
- for (var i = 0, len = items.length; i < len; i++) {
- var item = items[i];
- if ( KTUtil.data(item).has('popper') ) {
- KTUtil.data(item).get('popper').forceUpdate();
- }
- }
- }
- }
- // Bug fix for menu load initializing
- KTMenu.hasInit = false;
- // Global handlers
- KTMenu.initHandlers = function() {
-
- if(KTMenu.hasInit)
- return;
-
- KTMenu.hasInit = true;
-
- // Dropdown handler
- document.addEventListener("click", function(e) {
- var items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
- var menu;
- var item;
- var sub;
- var menuObj;
- if ( items && items.length > 0 ) {
- for ( var i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
- menuObj = KTMenu.getInstance(item);
- if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {
- menu = menuObj.getElement();
- sub = menuObj.getItemSubElement(item);
- if ( item === e.target || item.contains(e.target) ) {
- continue;
- }
-
- if ( sub === e.target || sub.contains(e.target) ) {
- continue;
- }
-
- menuObj.hide(item);
- }
- }
- }
- });
- // Sub toggle handler(updated)
- KTUtil.on(document.body, '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger="auto"])', 'click', function(e) {
- var menu = KTMenu.getInstance(this);
- if ( menu !== null ) {
- return menu.click(this, e);
- }
- });
- // Link handler
- KTUtil.on(document.body, '.menu-item:not([data-kt-menu-trigger]) > .menu-link', 'click', function(e) {
- var menu = KTMenu.getInstance(this);
- if ( menu !== null ) {
- return menu.link(this, e);
- }
- });
- // Dismiss handler
- KTUtil.on(document.body, '[data-kt-menu-dismiss="true"]', 'click', function(e) {
- var menu = KTMenu.getInstance(this);
- if ( menu !== null ) {
- return menu.dismiss(this, e);
- }
- });
- // Mouseover handler
- KTUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseover', function(e) {
- var menu = KTMenu.getInstance(this);
- if ( menu !== null && menu.getItemSubType(this) === 'dropdown' ) {
- return menu.mouseover(this, e);
- }
- });
- // Mouseout handler
- KTUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseout', function(e) {
- var menu = KTMenu.getInstance(this);
- if ( menu !== null && menu.getItemSubType(this) === 'dropdown' ) {
- return menu.mouseout(this, e);
- }
- });
- // Resize handler
- window.addEventListener('resize', function() {
- var menu;
- var timer;
- KTUtil.throttle(timer, function() {
- // Locate and update Offcanvas instances on window resize
- var elements = document.querySelectorAll('[data-kt-menu="true"]');
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- menu = KTMenu.getInstance(elements[i]);
- if (menu) {
- menu.update();
- }
- }
- }
- }, 200);
- });
- }
- // Render menus by url
- KTMenu.updateByLinkAttribute = function(value, name = "href") {
- // Locate and update Offcanvas instances on window resize
- var elements = document.querySelectorAll('[data-kt-menu="true"]');
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- var menu = KTMenu.getInstance(elements[i]);
- if (menu) {
- var link = menu.getLinkByAttribute(value, name);
- if (link) {
- menu.setActiveLink(link);
- }
- }
- }
- }
- }
- // Global instances
- KTMenu.createInstances = function(selector = '[data-kt-menu="true"]') {
- // Initialize menus
- var elements = document.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- new KTMenu(elements[i]);
- }
- }
- }
- // Global initialization
- KTMenu.init = function() {
- // Event handlers
- KTMenu.initHandlers();
- // Initialization
- KTMenu.createInstances();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTMenu;
- }
- "use strict";
- // Class definition
- var KTPasswordMeter = function(element, options) {
- ////////////////////////////
- // ** Private variables ** //
- ////////////////////////////
- var the = this;
- if (!element) {
- return;
- }
- // Default Options
- var defaultOptions = {
- minLength: 8,
- checkUppercase: true,
- checkLowercase: true,
- checkDigit: true,
- checkChar: true,
- scoreHighlightClass: 'active'
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- // Constructor
- var _construct = function() {
- if ( KTUtil.data(element).has('password-meter') === true ) {
- the = KTUtil.data(element).get('password-meter');
- } else {
- _init();
- }
- }
- // Initialize
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.score = 0;
- the.checkSteps = 5;
- // Elements
- the.element = element;
- the.inputElement = the.element.querySelector('input[type]');
- the.visibilityElement = the.element.querySelector('[data-kt-password-meter-control="visibility"]');
- the.highlightElement = the.element.querySelector('[data-kt-password-meter-control="highlight"]');
- // Set initialized
- the.element.setAttribute('data-kt-password-meter', 'true');
-
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('password-meter', the);
- }
- // Handlers
- var _handlers = function() {
- the.inputElement.addEventListener('input', function() {
- _check();
- });
- if (the.visibilityElement) {
- the.visibilityElement.addEventListener('click', function() {
- _visibility();
- });
- }
- }
- // Event handlers
- var _check = function() {
- var score = 0;
- var checkScore = _getCheckScore();
-
- if (_checkLength() === true) {
- score = score + checkScore;
- }
- if (the.options.checkUppercase === true && _checkLowercase() === true) {
- score = score + checkScore;
- }
- if (the.options.checkLowercase === true && _checkUppercase() === true ) {
- score = score + checkScore;
- }
- if (the.options.checkDigit === true && _checkDigit() === true ) {
- score = score + checkScore;
- }
- if (the.options.checkChar === true && _checkChar() === true ) {
- score = score + checkScore;
- }
- the.score = score;
- _highlight();
- }
- var _checkLength = function() {
- return the.inputElement.value.length >= the.options.minLength; // 20 score
- }
- var _checkLowercase = function() {
- return /[a-z]/.test(the.inputElement.value); // 20 score
- }
- var _checkUppercase = function() {
- return /[A-Z]/.test(the.inputElement.value); // 20 score
- }
- var _checkDigit = function() {
- return /[0-9]/.test(the.inputElement.value); // 20 score
- }
- var _checkChar = function() {
- return /[~`!#@$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(the.inputElement.value); // 20 score
- }
- var _getCheckScore = function() {
- var count = 1;
-
- if (the.options.checkUppercase === true) {
- count++;
- }
- if (the.options.checkLowercase === true) {
- count++;
- }
- if (the.options.checkDigit === true) {
- count++;
- }
- if (the.options.checkChar === true) {
- count++;
- }
- the.checkSteps = count;
- return 100 / the.checkSteps;
- }
-
- var _highlight = function() {
- var items = [].slice.call(the.highlightElement.querySelectorAll('div'));
- var total = items.length;
- var index = 0;
- var checkScore = _getCheckScore();
- var score = _getScore();
- items.map(function (item) {
- index++;
- if ( (checkScore * index * (the.checkSteps / total)) <= score ) {
- item.classList.add('active');
- } else {
- item.classList.remove('active');
- }
- });
- }
- var _visibility = function() {
- var visibleIcon = the.visibilityElement.querySelector('i:not(.d-none), .svg-icon:not(.d-none)');
- var hiddenIcon = the.visibilityElement.querySelector('i.d-none, .svg-icon.d-none');
-
- if (the.inputElement.getAttribute('type').toLowerCase() === 'password' ) {
- the.inputElement.setAttribute('type', 'text');
- } else {
- the.inputElement.setAttribute('type', 'password');
- }
- visibleIcon.classList.add('d-none');
- hiddenIcon.classList.remove('d-none');
- the.inputElement.focus();
- }
- var _reset = function() {
- the.score = 0;
- _highlight();
- }
- // Gets current password score
- var _getScore = function() {
- return the.score;
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('password-meter');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.check = function() {
- return _check();
- }
- the.getScore = function() {
- return _getScore();
- }
- the.reset = function() {
- return _reset();
- }
- the.destroy = function() {
- return _destroy();
- }
- };
- // Static methods
- KTPasswordMeter.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('password-meter') ) {
- return KTUtil.data(element).get('password-meter');
- } else {
- return null;
- }
- }
- // Create instances
- KTPasswordMeter.createInstances = function(selector = '[data-kt-password-meter]') {
- // Get instances
- var elements = document.body.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- // Initialize instances
- new KTPasswordMeter(elements[i]);
- }
- }
- }
- // Global initialization
- KTPasswordMeter.init = function() {
- KTPasswordMeter.createInstances();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTPasswordMeter;
- }
- "use strict";
- // Class definition
- var KTScroll = function(element, options) {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var the = this;
- if (!element) {
- return;
- }
- // Default options
- var defaultOptions = {
- saveState: true
- };
- ////////////////////////////
- // ** Private Methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('scroll') ) {
- the = KTUtil.data(element).get('scroll');
- } else {
- _init();
- }
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- // Elements
- the.element = element;
- the.id = the.element.getAttribute('id');
- // Set initialized
- the.element.setAttribute('data-kt-scroll', 'true');
- // Update
- _update();
- // Bind Instance
- KTUtil.data(the.element).set('scroll', the);
- }
- var _setupHeight = function() {
- var heightType = _getHeightType();
- var height = _getHeight();
- // Set height
- if ( height !== null && height.length > 0 ) {
- KTUtil.css(the.element, heightType, height);
- } else {
- KTUtil.css(the.element, heightType, '');
- }
- }
- var _setupState = function () {
- var namespace = _getStorageNamespace();
- if ( _getOption('save-state') === true && the.id ) {
- if ( localStorage.getItem(namespace + the.id + 'st') ) {
- var pos = parseInt(localStorage.getItem(namespace + the.id + 'st'));
- if ( pos > 0 ) {
- the.element.scroll({
- top: pos,
- behavior: 'instant'
- });
- }
- }
- }
- }
- var _getStorageNamespace = function(postfix) {
- return document.body.hasAttribute("data-kt-name") ? document.body.getAttribute("data-kt-name") + "_" : "";
- }
- var _setupScrollHandler = function() {
- if ( _getOption('save-state') === true && the.id ) {
- the.element.addEventListener('scroll', _scrollHandler);
- } else {
- the.element.removeEventListener('scroll', _scrollHandler);
- }
- }
- var _destroyScrollHandler = function() {
- the.element.removeEventListener('scroll', _scrollHandler);
- }
- var _resetHeight = function() {
- KTUtil.css(the.element, _getHeightType(), '');
- }
- var _scrollHandler = function () {
- var namespace = _getStorageNamespace();
- localStorage.setItem(namespace + the.id + 'st', the.element.scrollTop);
- }
- var _update = function() {
- // Activate/deactivate
- if ( _getOption('activate') === true || the.element.hasAttribute('data-kt-scroll-activate') === false ) {
- _setupHeight();
- _setupStretchHeight();
- _setupScrollHandler();
- _setupState();
- } else {
- _resetHeight()
- _destroyScrollHandler();
- }
- }
- var _setupStretchHeight = function() {
- var stretch = _getOption('stretch');
- // Stretch
- if ( stretch !== null ) {
- var elements = document.querySelectorAll(stretch);
- if ( elements && elements.length == 2 ) {
- var element1 = elements[0];
- var element2 = elements[1];
- var diff = _getElementHeight(element2) - _getElementHeight(element1);
- if (diff > 0) {
- var height = parseInt(KTUtil.css(the.element, _getHeightType())) + diff;
- KTUtil.css(the.element, _getHeightType(), String(height) + 'px');
- }
- }
- }
- }
- var _getHeight = function() {
- var height = _getOption(_getHeightType());
- if ( height instanceof Function ) {
- return height.call();
- } else if ( height !== null && typeof height === 'string' && height.toLowerCase() === 'auto' ) {
- return _getAutoHeight();
- } else {
- return height;
- }
- }
- var _getAutoHeight = function() {
- var height = KTUtil.getViewPort().height;
- var dependencies = _getOption('dependencies');
- var wrappers = _getOption('wrappers');
- var offset = _getOption('offset');
- // Spacings
- height = height - _getElementSpacing(the.element);
- // Height dependencies
- if ( dependencies !== null ) {
- var elements = document.querySelectorAll(dependencies);
- if ( elements && elements.length > 0 ) {
- for ( var i = 0, len = elements.length; i < len; i++ ) {
- if ( KTUtil.visible(elements[i]) === false ) {
- continue;
- }
- height = height - _getElementHeight(elements[i]);
- }
- }
- }
- // Wrappers
- if ( wrappers !== null ) {
- var elements = document.querySelectorAll(wrappers);
- if ( elements && elements.length > 0 ) {
- for ( var i = 0, len = elements.length; i < len; i++ ) {
- if ( KTUtil.visible(elements[i]) === false ) {
- continue;
- }
- height = height - _getElementSpacing(elements[i]);
- }
- }
- }
- // Custom offset
- if ( offset !== null && typeof offset !== 'object') {
- height = height - parseInt(offset);
- }
- return String(height) + 'px';
- }
- var _getElementHeight = function(element) {
- var height = 0;
- if (element !== null) {
- height = height + parseInt(KTUtil.css(element, 'height'));
- height = height + parseInt(KTUtil.css(element, 'margin-top'));
- height = height + parseInt(KTUtil.css(element, 'margin-bottom'));
- if (KTUtil.css(element, 'border-top')) {
- height = height + parseInt(KTUtil.css(element, 'border-top'));
- }
- if (KTUtil.css(element, 'border-bottom')) {
- height = height + parseInt(KTUtil.css(element, 'border-bottom'));
- }
- }
- return height;
- }
- var _getElementSpacing = function(element) {
- var spacing = 0;
- if (element !== null) {
- spacing = spacing + parseInt(KTUtil.css(element, 'margin-top'));
- spacing = spacing + parseInt(KTUtil.css(element, 'margin-bottom'));
- spacing = spacing + parseInt(KTUtil.css(element, 'padding-top'));
- spacing = spacing + parseInt(KTUtil.css(element, 'padding-bottom'));
- if (KTUtil.css(element, 'border-top')) {
- spacing = spacing + parseInt(KTUtil.css(element, 'border-top'));
- }
- if (KTUtil.css(element, 'border-bottom')) {
- spacing = spacing + parseInt(KTUtil.css(element, 'border-bottom'));
- }
- }
- return spacing;
- }
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-scroll-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-scroll-' + name);
- var value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- return value;
- } else {
- var optionName = KTUtil.snakeToCamel(name);
- if ( the.options[optionName] ) {
- return KTUtil.getResponsiveValue(the.options[optionName]);
- } else {
- return null;
- }
- }
- }
- var _getHeightType = function() {
- if (_getOption('height')) {
- return 'height';
- } if (_getOption('min-height')) {
- return 'min-height';
- } if (_getOption('max-height')) {
- return 'max-height';
- }
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('scroll');
- }
- // Construct Class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- the.update = function() {
- return _update();
- }
- the.getHeight = function() {
- return _getHeight();
- }
- the.getElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- };
- // Static methods
- KTScroll.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('scroll') ) {
- return KTUtil.data(element).get('scroll');
- } else {
- return null;
- }
- }
- // Create instances
- KTScroll.createInstances = function(selector = '[data-kt-scroll="true"]') {
- // Initialize Menus
- var elements = document.body.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- new KTScroll(elements[i]);
- }
- }
- }
- // Window resize handling
- KTScroll.handleResize = function() {
- window.addEventListener('resize', function() {
- var timer;
-
- KTUtil.throttle(timer, function() {
- // Locate and update Offcanvas instances on window resize
- var elements = document.body.querySelectorAll('[data-kt-scroll="true"]');
-
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- var scroll = KTScroll.getInstance(elements[i]);
- if (scroll) {
- scroll.update();
- }
- }
- }
- }, 200);
- });
- }
- // Global initialization
- KTScroll.init = function() {
- KTScroll.createInstances();
- KTScroll.handleResize();
- };
- // Webpack Support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTScroll;
- }
- "use strict";
- // Class definition
- var KTScrolltop = function(element, options) {
- ////////////////////////////
- // ** Private variables ** //
- ////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default options
- var defaultOptions = {
- offset: 300,
- speed: 600
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- var _construct = function() {
- if (KTUtil.data(element).has('scrolltop')) {
- the = KTUtil.data(element).get('scrolltop');
- } else {
- _init();
- }
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('scrolltop');
- the.element = element;
- // Set initialized
- the.element.setAttribute('data-kt-scrolltop', 'true');
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('scrolltop', the);
- }
- var _handlers = function() {
- var timer;
- window.addEventListener('scroll', function() {
- KTUtil.throttle(timer, function() {
- _scroll();
- }, 200);
- });
- KTUtil.addEvent(the.element, 'click', function(e) {
- e.preventDefault();
- _go();
- });
- }
- var _scroll = function() {
- var offset = parseInt(_getOption('offset'));
- var pos = KTUtil.getScrollTop(); // current vertical position
- if ( pos > offset ) {
- if ( document.body.hasAttribute('data-kt-scrolltop') === false ) {
- document.body.setAttribute('data-kt-scrolltop', 'on');
- }
- } else {
- if ( document.body.hasAttribute('data-kt-scrolltop') === true ) {
- document.body.removeAttribute('data-kt-scrolltop');
- }
- }
- }
- var _go = function() {
- var speed = parseInt(_getOption('speed'));
- window.scrollTo({top: 0, behavior: 'smooth'});
- //KTUtil.scrollTop(0, speed);
- }
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-scrolltop-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-scrolltop-' + name);
- var value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- return value;
- } else {
- var optionName = KTUtil.snakeToCamel(name);
- if ( the.options[optionName] ) {
- return KTUtil.getResponsiveValue(the.options[optionName]);
- } else {
- return null;
- }
- }
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('scrolltop');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.go = function() {
- return _go();
- }
- the.getElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- };
- // Static methods
- KTScrolltop.getInstance = function(element) {
- if (element && KTUtil.data(element).has('scrolltop')) {
- return KTUtil.data(element).get('scrolltop');
- } else {
- return null;
- }
- }
- // Create instances
- KTScrolltop.createInstances = function(selector = '[data-kt-scrolltop="true"]') {
- // Initialize Menus
- var elements = document.body.querySelectorAll(selector);
- var scrolltop;
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- scrolltop = new KTScrolltop(elements[i]);
- }
- }
- }
- // Global initialization
- KTScrolltop.init = function() {
- KTScrolltop.createInstances();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTScrolltop;
- }
- "use strict";
- // Class definition
- var KTSearch = function(element, options) {
- ////////////////////////////
- // ** Private variables ** //
- ////////////////////////////
- var the = this;
- if (!element) {
- return;
- }
- // Default Options
- var defaultOptions = {
- minLength: 2, // Miniam text lenght to query search
- keypress: true, // Enable search on keypress
- enter: true, // Enable search on enter key press
- layout: 'menu', // Use 'menu' or 'inline' layout options to display search results
- responsive: null, // Pass integer value or bootstrap compatible breakpoint key(sm,md,lg,xl,xxl) to enable reponsive form mode for device width below the breakpoint value
- showOnFocus: true // Always show menu on input focus
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- // Construct
- var _construct = function() {
- if ( KTUtil.data(element).has('search') === true ) {
- the = KTUtil.data(element).get('search');
- } else {
- _init();
- }
- }
- // Init
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.processing = false;
- // Elements
- the.element = element;
- the.contentElement = _getElement('content');
- the.formElement = _getElement('form');
- the.inputElement = _getElement('input');
- the.spinnerElement = _getElement('spinner');
- the.clearElement = _getElement('clear');
- the.toggleElement = _getElement('toggle');
- the.submitElement = _getElement('submit');
- the.toolbarElement = _getElement('toolbar');
- the.resultsElement = _getElement('results');
- the.suggestionElement = _getElement('suggestion');
- the.emptyElement = _getElement('empty');
- // Set initialized
- the.element.setAttribute('data-kt-search', 'true');
-
- // Layout
- the.layout = _getOption('layout');
-
- // Menu
- if ( the.layout === 'menu' ) {
- the.menuObject = new KTMenu(the.contentElement);
- } else {
- the.menuObject = null;
- }
- // Update
- _update();
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('search', the);
- }
- // Handlera
- var _handlers = function() {
- // Focus
- the.inputElement.addEventListener('focus', _focus);
- // Blur
- the.inputElement.addEventListener('blur', _blur);
- // Keypress
- if ( _getOption('keypress') === true ) {
- the.inputElement.addEventListener('input', _input);
- }
- // Submit
- if ( the.submitElement ) {
- the.submitElement.addEventListener('click', _search);
- }
- // Enter
- if ( _getOption('enter') === true ) {
- the.inputElement.addEventListener('keypress', _enter);
- }
- // Clear
- if ( the.clearElement ) {
- the.clearElement.addEventListener('click', _clear);
- }
- // Menu
- if ( the.menuObject ) {
- // Toggle menu
- if ( the.toggleElement ) {
- the.toggleElement.addEventListener('click', _show);
- the.menuObject.on('kt.menu.dropdown.show', function(item) {
- if (KTUtil.visible(the.toggleElement)) {
- the.toggleElement.classList.add('active');
- the.toggleElement.classList.add('show');
- }
- });
-
- the.menuObject.on('kt.menu.dropdown.hide', function(item) {
- if (KTUtil.visible(the.toggleElement)) {
- the.toggleElement.classList.remove('active');
- the.toggleElement.classList.remove('show');
- }
- });
- }
- the.menuObject.on('kt.menu.dropdown.shown', function() {
- the.inputElement.focus();
- });
- }
- // Window resize handling
- window.addEventListener('resize', function() {
- var timer;
- KTUtil.throttle(timer, function() {
- _update();
- }, 200);
- });
- }
- // Focus
- var _focus = function() {
- the.element.classList.add('focus');
- if ( _getOption('show-on-focus') === true || the.inputElement.value.length >= minLength ) {
- _show();
- }
- }
- // Blur
- var _blur = function() {
- the.element.classList.remove('focus');
- }
- // Enter
- var _enter = function(e) {
- var key = e.charCode || e.keyCode || 0;
- if (key == 13) {
- e.preventDefault();
- _search();
- }
- }
- // Input
- var _input = function() {
- if ( _getOption('min-length') ) {
- var minLength = parseInt(_getOption('min-length'));
- if ( the.inputElement.value.length >= minLength ) {
- _search();
- } else if ( the.inputElement.value.length === 0 ) {
- _clear();
- }
- }
- }
- // Search
- var _search = function() {
- if (the.processing === false) {
- // Show search spinner
- if (the.spinnerElement) {
- the.spinnerElement.classList.remove("d-none");
- }
-
- // Hide search clear button
- if (the.clearElement) {
- the.clearElement.classList.add("d-none");
- }
- // Hide search toolbar
- if (the.toolbarElement && the.formElement.contains(the.toolbarElement)) {
- the.toolbarElement.classList.add("d-none");
- }
- // Focus input
- the.inputElement.focus();
- the.processing = true;
- KTEventHandler.trigger(the.element, 'kt.search.process', the);
- }
- }
- // Complete
- var _complete = function() {
- if (the.spinnerElement) {
- the.spinnerElement.classList.add("d-none");
- }
- // Show search toolbar
- if (the.clearElement) {
- the.clearElement.classList.remove("d-none");
- }
- if ( the.inputElement.value.length === 0 ) {
- _clear();
- }
- // Focus input
- the.inputElement.focus();
- _show();
- the.processing = false;
- }
- // Clear
- var _clear = function() {
- if ( KTEventHandler.trigger(the.element, 'kt.search.clear', the) === false ) {
- return;
- }
- // Clear and focus input
- the.inputElement.value = "";
- the.inputElement.focus();
- // Hide clear icon
- if (the.clearElement) {
- the.clearElement.classList.add("d-none");
- }
- // Show search toolbar
- if (the.toolbarElement && the.formElement.contains(the.toolbarElement)) {
- the.toolbarElement.classList.remove("d-none");
- }
- // Hide menu
- if ( _getOption('show-on-focus') === false ) {
- _hide();
- }
- KTEventHandler.trigger(the.element, 'kt.search.cleared', the);
- }
- // Update
- var _update = function() {
- // Handle responsive form
- if (the.layout === 'menu') {
- var responsiveFormMode = _getResponsiveFormMode();
- if ( responsiveFormMode === 'on' && the.contentElement.contains(the.formElement) === false ) {
- the.contentElement.prepend(the.formElement);
- the.formElement.classList.remove('d-none');
- } else if ( responsiveFormMode === 'off' && the.contentElement.contains(the.formElement) === true ) {
- the.element.prepend(the.formElement);
- the.formElement.classList.add('d-none');
- }
- }
- }
- // Show menu
- var _show = function() {
- if ( the.menuObject ) {
- _update();
- the.menuObject.show(the.element);
- }
- }
- // Hide menu
- var _hide = function() {
- if ( the.menuObject ) {
- _update();
- the.menuObject.hide(the.element);
- }
- }
- // Get option
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-search-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-search-' + name);
- var value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- return value;
- } else {
- var optionName = KTUtil.snakeToCamel(name);
- if ( the.options[optionName] ) {
- return KTUtil.getResponsiveValue(the.options[optionName]);
- } else {
- return null;
- }
- }
- }
- // Get element
- var _getElement = function(name) {
- return the.element.querySelector('[data-kt-search-element="' + name + '"]');
- }
- // Check if responsive form mode is enabled
- var _getResponsiveFormMode = function() {
- var responsive = _getOption('responsive');
- var width = KTUtil.getViewPort().width;
- if (!responsive) {
- return null;
- }
- var breakpoint = KTUtil.getBreakpoint(responsive);
- if (!breakpoint ) {
- breakpoint = parseInt(responsive);
- }
- if (width < breakpoint) {
- return "on";
- } else {
- return "off";
- }
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('search');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.show = function() {
- return _show();
- }
- the.hide = function() {
- return _hide();
- }
- the.update = function() {
- return _update();
- }
- the.search = function() {
- return _search();
- }
- the.complete = function() {
- return _complete();
- }
- the.clear = function() {
- return _clear();
- }
- the.isProcessing = function() {
- return the.processing;
- }
- the.getQuery = function() {
- return the.inputElement.value;
- }
- the.getMenu = function() {
- return the.menuObject;
- }
- the.getFormElement = function() {
- return the.formElement;
- }
- the.getInputElement = function() {
- return the.inputElement;
- }
- the.getContentElement = function() {
- return the.contentElement;
- }
- the.getElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- };
- // Static methods
- KTSearch.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('search') ) {
- return KTUtil.data(element).get('search');
- } else {
- return null;
- }
- }
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTSearch;
- }
- "use strict";
- // Class definition
- var KTStepper = function(element, options) {
- //////////////////////////////
- // ** Private variables ** //
- //////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default Options
- var defaultOptions = {
- startIndex: 1,
- animation: false,
- animationSpeed: '0.3s',
- animationNextClass: 'animate__animated animate__slideInRight animate__fast',
- animationPreviousClass: 'animate__animated animate__slideInLeft animate__fast'
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('stepper') === true ) {
- the = KTUtil.data(element).get('stepper');
- } else {
- _init();
- }
- }
- var _init = function() {
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('stepper');
- the.element = element;
- // Set initialized
- the.element.setAttribute('data-kt-stepper', 'true');
- // Elements
- the.steps = KTUtil.findAll(the.element, '[data-kt-stepper-element="nav"]');
- the.btnNext = KTUtil.find(the.element, '[data-kt-stepper-action="next"]');
- the.btnPrevious = KTUtil.find(the.element, '[data-kt-stepper-action="previous"]');
- the.btnSubmit = KTUtil.find(the.element, '[data-kt-stepper-action="submit"]');
- // Variables
- the.totalStepsNumber = the.steps.length;
- the.passedStepIndex = 0;
- the.currentStepIndex = 1;
- the.clickedStepIndex = 0;
- // Set Current Step
- if ( the.options.startIndex > 1 ) {
- _goTo(the.options.startIndex);
- }
- // Event Handlers
- KTUtil.addEvent(the.btnNext, 'click', function(e) {
- e.preventDefault();
- KTEventHandler.trigger(the.element, 'kt.stepper.next', the);
- });
- KTUtil.addEvent(the.btnPrevious, 'click', function(e) {
- e.preventDefault();
- KTEventHandler.trigger(the.element, 'kt.stepper.previous', the);
- });
- KTUtil.on(the.element, '[data-kt-stepper-action="step"]', 'click', function(e) {
- e.preventDefault();
- if ( the.steps && the.steps.length > 0 ) {
- for (var i = 0, len = the.steps.length; i < len; i++) {
- if ( the.steps[i] === this ) {
- the.clickedStepIndex = i + 1;
- KTEventHandler.trigger(the.element, 'kt.stepper.click', the);
- return;
- }
- }
- }
- });
- // Bind Instance
- KTUtil.data(the.element).set('stepper', the);
- }
- var _goTo = function(index) {
- // Trigger "change" event
- KTEventHandler.trigger(the.element, 'kt.stepper.change', the);
- // Skip if this step is already shown
- if ( index === the.currentStepIndex || index > the.totalStepsNumber || index < 0 ) {
- return;
- }
- // Validate step number
- index = parseInt(index);
- // Set current step
- the.passedStepIndex = the.currentStepIndex;
- the.currentStepIndex = index;
- // Refresh elements
- _refreshUI();
- // Trigger "changed" event
- KTEventHandler.trigger(the.element, 'kt.stepper.changed', the);
- return the;
- }
- var _goNext = function() {
- return _goTo( _getNextStepIndex() );
- }
- var _goPrevious = function() {
- return _goTo( _getPreviousStepIndex() );
- }
- var _goLast = function() {
- return _goTo( _getLastStepIndex() );
- }
- var _goFirst = function() {
- return _goTo( _getFirstStepIndex() );
- }
- var _refreshUI = function() {
- var state = '';
- if ( _isLastStep() ) {
- state = 'last';
- } else if ( _isFirstStep() ) {
- state = 'first';
- } else {
- state = 'between';
- }
- // Set state class
- KTUtil.removeClass(the.element, 'last');
- KTUtil.removeClass(the.element, 'first');
- KTUtil.removeClass(the.element, 'between');
- KTUtil.addClass(the.element, state);
- // Step Items
- var elements = KTUtil.findAll(the.element, '[data-kt-stepper-element="nav"], [data-kt-stepper-element="content"], [data-kt-stepper-element="info"]');
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- var element = elements[i];
- var index = KTUtil.index(element) + 1;
- KTUtil.removeClass(element, 'current');
- KTUtil.removeClass(element, 'completed');
- KTUtil.removeClass(element, 'pending');
- if ( index == the.currentStepIndex ) {
- KTUtil.addClass(element, 'current');
- if ( the.options.animation !== false && element.getAttribute('data-kt-stepper-element') == 'content' ) {
- KTUtil.css(element, 'animationDuration', the.options.animationSpeed);
- var animation = _getStepDirection(the.passedStepIndex) === 'previous' ? the.options.animationPreviousClass : the.options.animationNextClass;
- KTUtil.animateClass(element, animation);
- }
- } else {
- if ( index < the.currentStepIndex ) {
- KTUtil.addClass(element, 'completed');
- } else {
- KTUtil.addClass(element, 'pending');
- }
- }
- }
- }
- }
- var _isLastStep = function() {
- return the.currentStepIndex === the.totalStepsNumber;
- }
- var _isFirstStep = function() {
- return the.currentStepIndex === 1;
- }
- var _isBetweenStep = function() {
- return _isLastStep() === false && _isFirstStep() === false;
- }
- var _getNextStepIndex = function() {
- if ( the.totalStepsNumber >= ( the.currentStepIndex + 1 ) ) {
- return the.currentStepIndex + 1;
- } else {
- return the.totalStepsNumber;
- }
- }
- var _getPreviousStepIndex = function() {
- if ( ( the.currentStepIndex - 1 ) > 1 ) {
- return the.currentStepIndex - 1;
- } else {
- return 1;
- }
- }
- var _getFirstStepIndex = function(){
- return 1;
- }
- var _getLastStepIndex = function() {
- return the.totalStepsNumber;
- }
- var _getTotalStepsNumber = function() {
- return the.totalStepsNumber;
- }
- var _getStepDirection = function(index) {
- if ( index > the.currentStepIndex ) {
- return 'next';
- } else {
- return 'previous';
- }
- }
- var _getStepContent = function(index) {
- var content = KTUtil.findAll(the.element, '[data-kt-stepper-element="content"]');
- if ( content[index-1] ) {
- return content[index-1];
- } else {
- return false;
- }
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('stepper');
- }
- // Construct Class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.getElement = function(index) {
- return the.element;
- }
- the.goTo = function(index) {
- return _goTo(index);
- }
- the.goPrevious = function() {
- return _goPrevious();
- }
- the.goNext = function() {
- return _goNext();
- }
- the.goFirst = function() {
- return _goFirst();
- }
- the.goLast = function() {
- return _goLast();
- }
- the.getCurrentStepIndex = function() {
- return the.currentStepIndex;
- }
- the.getNextStepIndex = function() {
- return the.nextStepIndex;
- }
- the.getPassedStepIndex = function() {
- return the.passedStepIndex;
- }
- the.getClickedStepIndex = function() {
- return the.clickedStepIndex;
- }
- the.getPreviousStepIndex = function() {
- return the.PreviousStepIndex;
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTStepper.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('stepper') ) {
- return KTUtil.data(element).get('stepper');
- } else {
- return null;
- }
- }
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTStepper;
- }
- "use strict";
- // Class definition
- var KTSticky = function(element, options) {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default Options
- var defaultOptions = {
- offset: 200,
- reverse: false,
- animation: true,
- animationSpeed: '0.3s',
- animationClass: 'animation-slide-in-down'
- };
- ////////////////////////////
- // ** Private Methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('sticky') === true ) {
- the = KTUtil.data(element).get('sticky');
- } else {
- _init();
- }
- }
- var _init = function() {
- the.element = element;
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('sticky');
- the.name = the.element.getAttribute('data-kt-sticky-name');
- the.attributeName = 'data-kt-sticky-' + the.name;
- the.attributeName2 = 'data-kt-' + the.name;
- the.eventTriggerState = true;
- the.lastScrollTop = 0;
- the.scrollHandler;
- // Set initialized
- the.element.setAttribute('data-kt-sticky', 'true');
- // Event Handlers
- window.addEventListener('scroll', _scroll);
- // Initial Launch
- _scroll();
- // Bind Instance
- KTUtil.data(the.element).set('sticky', the);
- }
- var _scroll = function(e) {
- var offset = _getOption('offset');
- var reverse = _getOption('reverse');
- var st;
- var attrName;
- var diff;
- // Exit if false
- if ( offset === false ) {
- return;
- }
- offset = parseInt(offset);
- st = KTUtil.getScrollTop();
- diff = document.documentElement.scrollHeight - window.innerHeight - KTUtil.getScrollTop();
- if ( reverse === true ) { // Release on reverse scroll mode
- if ( st > offset) {
- if ( document.body.hasAttribute(the.attributeName) === false) {
-
- if (_enable() === false) {
- return;
- }
- document.body.setAttribute(the.attributeName, 'on');
- document.body.setAttribute(the.attributeName2, 'on');
- }
- if ( the.eventTriggerState === true ) {
- KTEventHandler.trigger(the.element, 'kt.sticky.on', the);
- KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
- the.eventTriggerState = false;
- }
- } else { // Back scroll mode
- if ( document.body.hasAttribute(the.attributeName) === true) {
- _disable();
- document.body.removeAttribute(the.attributeName);
- document.body.removeAttribute(the.attributeName2);
- }
- if ( the.eventTriggerState === false ) {
- KTEventHandler.trigger(the.element, 'kt.sticky.off', the);
- KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
- the.eventTriggerState = true;
- }
- }
- the.lastScrollTop = st;
- } else { // Classic scroll mode
- if ( st > offset) {
- if ( document.body.hasAttribute(the.attributeName) === false) {
-
- if (_enable() === false) {
- return;
- }
-
- document.body.setAttribute(the.attributeName, 'on');
- document.body.setAttribute(the.attributeName2, 'on');
- }
- if ( the.eventTriggerState === true ) {
- KTEventHandler.trigger(the.element, 'kt.sticky.on', the);
- KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
- the.eventTriggerState = false;
- }
- } else { // back scroll mode
- if ( document.body.hasAttribute(the.attributeName) === true ) {
- _disable();
- document.body.removeAttribute(the.attributeName);
- document.body.removeAttribute(the.attributeName2);
- }
- if ( the.eventTriggerState === false ) {
- KTEventHandler.trigger(the.element, 'kt.sticky.off', the);
- KTEventHandler.trigger(the.element, 'kt.sticky.change', the);
- the.eventTriggerState = true;
- }
- }
- }
- }
- var _enable = function(update) {
- var top = _getOption('top');
- top = top ? parseInt(top) : 0;
- var left = _getOption('left');
- var right = _getOption('right');
- var width = _getOption('width');
- var zindex = _getOption('zindex');
- var dependencies = _getOption('dependencies');
- var classes = _getOption('class');
- var height = _calculateHeight();
- var heightOffset = _getOption('height-offset');
- heightOffset = heightOffset ? parseInt(heightOffset) : 0;
- if (height + heightOffset + top > KTUtil.getViewPort().height) {
- return false;
- }
-
- if ( update !== true && _getOption('animation') === true ) {
- KTUtil.css(the.element, 'animationDuration', _getOption('animationSpeed'));
- KTUtil.animateClass(the.element, 'animation ' + _getOption('animationClass'));
- }
- if ( classes !== null ) {
- KTUtil.addClass(the.element, classes);
- }
- if ( zindex !== null ) {
- KTUtil.css(the.element, 'z-index', zindex);
- KTUtil.css(the.element, 'position', 'fixed');
- }
- if ( top > 0 ) {
- KTUtil.css(the.element, 'top', String(top) + 'px');
- }
- if ( width !== null ) {
- if (width['target']) {
- var targetElement = document.querySelector(width['target']);
- if (targetElement) {
- width = KTUtil.css(targetElement, 'width');
- }
- }
- KTUtil.css(the.element, 'width', width);
- }
- if ( left !== null ) {
- if ( String(left).toLowerCase() === 'auto' ) {
- var offsetLeft = KTUtil.offset(the.element).left;
- if ( offsetLeft > 0 ) {
- KTUtil.css(the.element, 'left', String(offsetLeft) + 'px');
- }
- } else {
- KTUtil.css(the.element, 'left', left);
- }
- }
- if ( right !== null ) {
- KTUtil.css(the.element, 'right', right);
- }
- // Height dependencies
- if ( dependencies !== null ) {
- var dependencyElements = document.querySelectorAll(dependencies);
-
- if ( dependencyElements && dependencyElements.length > 0 ) {
- for ( var i = 0, len = dependencyElements.length; i < len; i++ ) {
- KTUtil.css(dependencyElements[i], 'padding-top', String(height) + 'px');
- }
- }
- }
- }
- var _disable = function() {
- KTUtil.css(the.element, 'top', '');
- KTUtil.css(the.element, 'width', '');
- KTUtil.css(the.element, 'left', '');
- KTUtil.css(the.element, 'right', '');
- KTUtil.css(the.element, 'z-index', '');
- KTUtil.css(the.element, 'position', '');
- var dependencies = _getOption('dependencies');
- var classes = _getOption('class');
- if ( classes !== null ) {
- KTUtil.removeClass(the.element, classes);
- }
- // Height dependencies
- if ( dependencies !== null ) {
- var dependencyElements = document.querySelectorAll(dependencies);
- if ( dependencyElements && dependencyElements.length > 0 ) {
- for ( var i = 0, len = dependencyElements.length; i < len; i++ ) {
- KTUtil.css(dependencyElements[i], 'padding-top', '');
- }
- }
- }
- }
- var _check = function() {
- }
- var _calculateHeight = function() {
- var height = parseFloat(KTUtil.css(the.element, 'height'));
- height = height + parseFloat(KTUtil.css(the.element, 'margin-top'));
- height = height + parseFloat(KTUtil.css(the.element, 'margin-bottom'));
-
- if (KTUtil.css(element, 'border-top')) {
- height = height + parseFloat(KTUtil.css(the.element, 'border-top'));
- }
- if (KTUtil.css(element, 'border-bottom')) {
- height = height + parseFloat(KTUtil.css(the.element, 'border-bottom'));
- }
- return height;
- }
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-sticky-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-sticky-' + name);
- var value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- return value;
- } else {
- var optionName = KTUtil.snakeToCamel(name);
- if ( the.options[optionName] ) {
- return KTUtil.getResponsiveValue(the.options[optionName]);
- } else {
- return null;
- }
- }
- }
- var _destroy = function() {
- window.removeEventListener('scroll', _scroll);
- KTUtil.data(the.element).remove('sticky');
- }
- // Construct Class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Methods
- the.update = function() {
- if ( document.body.hasAttribute(the.attributeName) === true ) {
- _disable();
- document.body.removeAttribute(the.attributeName);
- document.body.removeAttribute(the.attributeName2);
- _enable(true);
- document.body.setAttribute(the.attributeName, 'on');
- document.body.setAttribute(the.attributeName2, 'on');
- }
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTSticky.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('sticky') ) {
- return KTUtil.data(element).get('sticky');
- } else {
- return null;
- }
- }
- // Create instances
- KTSticky.createInstances = function(selector = '[data-kt-sticky="true"]') {
- // Initialize Menus
- var elements = document.body.querySelectorAll(selector);
- var sticky;
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- sticky = new KTSticky(elements[i]);
- }
- }
- }
- // Window resize handler
- KTSticky.handleResize = function() {
- window.addEventListener('resize', function() {
- var timer;
-
- KTUtil.throttle(timer, function() {
- // Locate and update Offcanvas instances on window resize
- var elements = document.body.querySelectorAll('[data-kt-sticky="true"]');
-
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- var sticky = KTSticky.getInstance(elements[i]);
- if (sticky) {
- sticky.update();
- }
- }
- }
- }, 200);
- });
- }
- // Global initialization
- KTSticky.init = function() {
- KTSticky.createInstances();
- KTSticky.handleResize();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTSticky;
- }
- "use strict";
- // Class definition
- var KTSwapper = function(element, options) {
- ////////////////////////////
- // ** Private Variables ** //
- ////////////////////////////
- var the = this;
- if ( typeof element === "undefined" || element === null ) {
- return;
- }
- // Default Options
- var defaultOptions = {
- mode: 'append'
- };
- ////////////////////////////
- // ** Private Methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('swapper') === true ) {
- the = KTUtil.data(element).get('swapper');
- } else {
- _init();
- }
- }
- var _init = function() {
- the.element = element;
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- // Set initialized
- the.element.setAttribute('data-kt-swapper', 'true');
- // Initial update
- _update();
- // Bind Instance
- KTUtil.data(the.element).set('swapper', the);
- }
- var _update = function(e) {
- var parentSelector = _getOption('parent');
- var mode = _getOption('mode');
- var parentElement = parentSelector ? document.querySelector(parentSelector) : null;
-
- if (parentElement && element.parentNode !== parentElement) {
- if (mode === 'prepend') {
- parentElement.prepend(element);
- } else if (mode === 'append') {
- parentElement.append(element);
- }
- }
- }
- var _getOption = function(name) {
- if ( the.element.hasAttribute('data-kt-swapper-' + name) === true ) {
- var attr = the.element.getAttribute('data-kt-swapper-' + name);
- var value = KTUtil.getResponsiveValue(attr);
- if ( value !== null && String(value) === 'true' ) {
- value = true;
- } else if ( value !== null && String(value) === 'false' ) {
- value = false;
- }
- return value;
- } else {
- var optionName = KTUtil.snakeToCamel(name);
- if ( the.options[optionName] ) {
- return KTUtil.getResponsiveValue(the.options[optionName]);
- } else {
- return null;
- }
- }
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('swapper');
- }
- // Construct Class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Methods
- the.update = function() {
- _update();
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTSwapper.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('swapper') ) {
- return KTUtil.data(element).get('swapper');
- } else {
- return null;
- }
- }
- // Create instances
- KTSwapper.createInstances = function(selector = '[data-kt-swapper="true"]') {
- // Initialize Menus
- var elements = document.querySelectorAll(selector);
- var swapper;
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- swapper = new KTSwapper(elements[i]);
- }
- }
- }
- // Window resize handler
- window.addEventListener('resize', function() {
- var timer;
- KTUtil.throttle(timer, function() {
- // Locate and update Offcanvas instances on window resize
- var elements = document.querySelectorAll('[data-kt-swapper="true"]');
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- var swapper = KTSwapper.getInstance(elements[i]);
- if (swapper) {
- swapper.update();
- }
- }
- }
- }, 200);
- });
- // Global initialization
- KTSwapper.init = function() {
- KTSwapper.createInstances();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTSwapper;
- }
- "use strict";
- // Class definition
- var KTToggle = function(element, options) {
- ////////////////////////////
- // ** Private variables ** //
- ////////////////////////////
- var the = this;
- if (!element) {
- return;
- }
- // Default Options
- var defaultOptions = {
- saveState: true
- };
- ////////////////////////////
- // ** Private methods ** //
- ////////////////////////////
- var _construct = function() {
- if ( KTUtil.data(element).has('toggle') === true ) {
- the = KTUtil.data(element).get('toggle');
- } else {
- _init();
- }
- }
- var _init = function() {
- // Variables
- the.options = KTUtil.deepExtend({}, defaultOptions, options);
- the.uid = KTUtil.getUniqueId('toggle');
- // Elements
- the.element = element;
- the.target = document.querySelector(the.element.getAttribute('data-kt-toggle-target')) ? document.querySelector(the.element.getAttribute('data-kt-toggle-target')) : the.element;
- the.state = the.element.hasAttribute('data-kt-toggle-state') ? the.element.getAttribute('data-kt-toggle-state') : '';
- the.mode = the.element.hasAttribute('data-kt-toggle-mode') ? the.element.getAttribute('data-kt-toggle-mode') : '';
- the.attribute = 'data-kt-' + the.element.getAttribute('data-kt-toggle-name');
- // Event Handlers
- _handlers();
- // Bind Instance
- KTUtil.data(the.element).set('toggle', the);
- }
- var _handlers = function() {
- KTUtil.addEvent(the.element, 'click', function(e) {
- e.preventDefault();
- if ( the.mode !== '' ) {
- if ( the.mode === 'off' && _isEnabled() === false ) {
- _toggle();
- } else if ( the.mode === 'on' && _isEnabled() === true ) {
- _toggle();
- }
- } else {
- _toggle();
- }
- });
- }
- // Event handlers
- var _toggle = function() {
- // Trigger "after.toggle" event
- KTEventHandler.trigger(the.element, 'kt.toggle.change', the);
- if ( _isEnabled() ) {
- _disable();
- } else {
- _enable();
- }
- // Trigger "before.toggle" event
- KTEventHandler.trigger(the.element, 'kt.toggle.changed', the);
- return the;
- }
- var _enable = function() {
- if ( _isEnabled() === true ) {
- return;
- }
- KTEventHandler.trigger(the.element, 'kt.toggle.enable', the);
- the.target.setAttribute(the.attribute, 'on');
- if (the.state.length > 0) {
- the.element.classList.add(the.state);
- }
- if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {
- KTCookie.set(the.attribute, 'on');
- }
- KTEventHandler.trigger(the.element, 'kt.toggle.enabled', the);
- return the;
- }
- var _disable = function() {
- if ( _isEnabled() === false ) {
- return;
- }
- KTEventHandler.trigger(the.element, 'kt.toggle.disable', the);
- the.target.removeAttribute(the.attribute);
- if (the.state.length > 0) {
- the.element.classList.remove(the.state);
- }
- if ( typeof KTCookie !== 'undefined' && the.options.saveState === true ) {
- KTCookie.remove(the.attribute);
- }
- KTEventHandler.trigger(the.element, 'kt.toggle.disabled', the);
- return the;
- }
- var _isEnabled = function() {
- return (String(the.target.getAttribute(the.attribute)).toLowerCase() === 'on');
- }
- var _destroy = function() {
- KTUtil.data(the.element).remove('toggle');
- }
- // Construct class
- _construct();
- ///////////////////////
- // ** Public API ** //
- ///////////////////////
- // Plugin API
- the.toggle = function() {
- return _toggle();
- }
- the.enable = function() {
- return _enable();
- }
- the.disable = function() {
- return _disable();
- }
- the.isEnabled = function() {
- return _isEnabled();
- }
- the.goElement = function() {
- return the.element;
- }
- the.destroy = function() {
- return _destroy();
- }
- // Event API
- the.on = function(name, handler) {
- return KTEventHandler.on(the.element, name, handler);
- }
- the.one = function(name, handler) {
- return KTEventHandler.one(the.element, name, handler);
- }
- the.off = function(name, handlerId) {
- return KTEventHandler.off(the.element, name, handlerId);
- }
- the.trigger = function(name, event) {
- return KTEventHandler.trigger(the.element, name, event, the, event);
- }
- };
- // Static methods
- KTToggle.getInstance = function(element) {
- if ( element !== null && KTUtil.data(element).has('toggle') ) {
- return KTUtil.data(element).get('toggle');
- } else {
- return null;
- }
- }
- // Create instances
- KTToggle.createInstances = function(selector = '[data-kt-toggle]') {
- // Get instances
- var elements = document.body.querySelectorAll(selector);
- if ( elements && elements.length > 0 ) {
- for (var i = 0, len = elements.length; i < len; i++) {
- // Initialize instances
- new KTToggle(elements[i]);
- }
- }
- }
- // Global initialization
- KTToggle.init = function() {
- KTToggle.createInstances();
- };
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTToggle;
- }
- "use strict";
- /**
- * @class KTUtil base utilize class that privides helper functions
- */
- // Polyfills
- // Element.matches() polyfill
- if (!Element.prototype.matches) {
- Element.prototype.matches = function(s) {
- var matches = (this.document || this.ownerDocument).querySelectorAll(s),
- i = matches.length;
- while (--i >= 0 && matches.item(i) !== this) {}
- return i > -1;
- };
- }
- /**
- * Element.closest() polyfill
- * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill
- */
- if (!Element.prototype.closest) {
- Element.prototype.closest = function (s) {
- var el = this;
- var ancestor = this;
- if (!document.documentElement.contains(el)) return null;
- do {
- if (ancestor.matches(s)) return ancestor;
- ancestor = ancestor.parentElement;
- } while (ancestor !== null);
- return null;
- };
- }
- /**
- * ChildNode.remove() polyfill
- * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/
- * @author Chris Ferdinandi
- * @license MIT
- */
- (function (elem) {
- for (var i = 0; i < elem.length; i++) {
- if (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;
- window[elem[i]].prototype.remove = function () {
- this.parentNode.removeChild(this);
- };
- }
- })(['Element', 'CharacterData', 'DocumentType']);
- //
- // requestAnimationFrame polyfill by Erik Möller.
- // With fixes from Paul Irish and Tino Zijdel
- //
- // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
- // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
- //
- // MIT license
- //
- (function() {
- var lastTime = 0;
- var vendors = ['webkit', 'moz'];
- for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
- window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
- window.cancelAnimationFrame =
- window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
- }
- if (!window.requestAnimationFrame)
- window.requestAnimationFrame = function(callback) {
- var currTime = new Date().getTime();
- var timeToCall = Math.max(0, 16 - (currTime - lastTime));
- var id = window.setTimeout(function() {
- callback(currTime + timeToCall);
- }, timeToCall);
- lastTime = currTime + timeToCall;
- return id;
- };
- if (!window.cancelAnimationFrame)
- window.cancelAnimationFrame = function(id) {
- clearTimeout(id);
- };
- }());
- // Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md
- (function(arr) {
- arr.forEach(function(item) {
- if (item.hasOwnProperty('prepend')) {
- return;
- }
- Object.defineProperty(item, 'prepend', {
- configurable: true,
- enumerable: true,
- writable: true,
- value: function prepend() {
- var argArr = Array.prototype.slice.call(arguments),
- docFrag = document.createDocumentFragment();
- argArr.forEach(function(argItem) {
- var isNode = argItem instanceof Node;
- docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));
- });
- this.insertBefore(docFrag, this.firstChild);
- }
- });
- });
- })([Element.prototype, Document.prototype, DocumentFragment.prototype]);
- // getAttributeNames
- if (Element.prototype.getAttributeNames == undefined) {
- Element.prototype.getAttributeNames = function () {
- var attributes = this.attributes;
- var length = attributes.length;
- var result = new Array(length);
- for (var i = 0; i < length; i++) {
- result[i] = attributes[i].name;
- }
- return result;
- };
- }
- // Global variables
- window.KTUtilElementDataStore = {};
- window.KTUtilElementDataStoreID = 0;
- window.KTUtilDelegatedEventHandlers = {};
- var KTUtil = function() {
- var resizeHandlers = [];
- /**
- * Handle window resize event with some
- * delay to attach event handlers upon resize complete
- */
- var _windowResizeHandler = function() {
- var _runResizeHandlers = function() {
- // reinitialize other subscribed elements
- for (var i = 0; i < resizeHandlers.length; i++) {
- var each = resizeHandlers[i];
- each.call();
- }
- };
- var timer;
- window.addEventListener('resize', function() {
- KTUtil.throttle(timer, function() {
- _runResizeHandlers();
- }, 200);
- });
- };
- return {
- /**
- * Class main initializer.
- * @param {object} settings.
- * @returns null
- */
- //main function to initiate the theme
- init: function(settings) {
- _windowResizeHandler();
- },
- /**
- * Adds window resize event handler.
- * @param {function} callback function.
- */
- addResizeHandler: function(callback) {
- resizeHandlers.push(callback);
- },
- /**
- * Removes window resize event handler.
- * @param {function} callback function.
- */
- removeResizeHandler: function(callback) {
- for (var i = 0; i < resizeHandlers.length; i++) {
- if (callback === resizeHandlers[i]) {
- delete resizeHandlers[i];
- }
- }
- },
- /**
- * Trigger window resize handlers.
- */
- runResizeHandlers: function() {
- _runResizeHandlers();
- },
- resize: function() {
- if (typeof(Event) === 'function') {
- // modern browsers
- window.dispatchEvent(new Event('resize'));
- } else {
- // for IE and other old browsers
- // causes deprecation warning on modern browsers
- var evt = window.document.createEvent('UIEvents');
- evt.initUIEvent('resize', true, false, window, 0);
- window.dispatchEvent(evt);
- }
- },
- /**
- * Get GET parameter value from URL.
- * @param {string} paramName Parameter name.
- * @returns {string}
- */
- getURLParam: function(paramName) {
- var searchString = window.location.search.substring(1),
- i, val, params = searchString.split("&");
- for (i = 0; i < params.length; i++) {
- val = params[i].split("=");
- if (val[0] == paramName) {
- return unescape(val[1]);
- }
- }
- return null;
- },
- /**
- * Checks whether current device is mobile touch.
- * @returns {boolean}
- */
- isMobileDevice: function() {
- var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);
- if (test === false) {
- // For use within normal web clients
- test = navigator.userAgent.match(/iPad/i) != null;
- }
- return test;
- },
- /**
- * Checks whether current device is desktop.
- * @returns {boolean}
- */
- isDesktopDevice: function() {
- return KTUtil.isMobileDevice() ? false : true;
- },
- /**
- * Gets browser window viewport size. Ref:
- * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
- * @returns {object}
- */
- getViewPort: function() {
- var e = window,
- a = 'inner';
- if (!('innerWidth' in window)) {
- a = 'client';
- e = document.documentElement || document.body;
- }
- return {
- width: e[a + 'Width'],
- height: e[a + 'Height']
- };
- },
- /**
- * Checks whether given device mode is currently activated.
- * @param {string} mode Responsive mode name(e.g: desktop,
- * desktop-and-tablet, tablet, tablet-and-mobile, mobile)
- * @returns {boolean}
- */
- isBreakpointUp: function(mode) {
- var width = this.getViewPort().width;
- var breakpoint = this.getBreakpoint(mode);
- return (width >= breakpoint);
- },
- isBreakpointDown: function(mode) {
- var width = this.getViewPort().width;
- var breakpoint = this.getBreakpoint(mode);
- return (width < breakpoint);
- },
- getViewportWidth: function() {
- return this.getViewPort().width;
- },
- /**
- * Generates unique ID for give prefix.
- * @param {string} prefix Prefix for generated ID
- * @returns {boolean}
- */
- getUniqueId: function(prefix) {
- return prefix + Math.floor(Math.random() * (new Date()).getTime());
- },
- /**
- * Gets window width for give breakpoint mode.
- * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)
- * @returns {number}
- */
- getBreakpoint: function(breakpoint) {
- var value = this.getCssVariableValue('--kt-' + breakpoint);
- if ( value ) {
- value = parseInt(value.trim());
- }
- return value;
- },
- /**
- * Checks whether object has property matchs given key path.
- * @param {object} obj Object contains values paired with given key path
- * @param {string} keys Keys path seperated with dots
- * @returns {object}
- */
- isset: function(obj, keys) {
- var stone;
- keys = keys || '';
- if (keys.indexOf('[') !== -1) {
- throw new Error('Unsupported object path notation.');
- }
- keys = keys.split('.');
- do {
- if (obj === undefined) {
- return false;
- }
- stone = keys.shift();
- if (!obj.hasOwnProperty(stone)) {
- return false;
- }
- obj = obj[stone];
- } while (keys.length);
- return true;
- },
- /**
- * Gets highest z-index of the given element parents
- * @param {object} el jQuery element object
- * @returns {number}
- */
- getHighestZindex: function(el) {
- var position, value;
- while (el && el !== document) {
- // Ignore z-index if position is set to a value where z-index is ignored by the browser
- // This makes behavior of this function consistent across browsers
- // WebKit always returns auto if the element is positioned
- position = KTUtil.css(el, 'position');
- if (position === "absolute" || position === "relative" || position === "fixed") {
- // IE returns 0 when zIndex is not specified
- // other browsers return a string
- // we ignore the case of nested elements with an explicit value of 0
- // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
- value = parseInt(KTUtil.css(el, 'z-index'));
- if (!isNaN(value) && value !== 0) {
- return value;
- }
- }
- el = el.parentNode;
- }
- return 1;
- },
- /**
- * Checks whether the element has any parent with fixed positionfreg
- * @param {object} el jQuery element object
- * @returns {boolean}
- */
- hasFixedPositionedParent: function(el) {
- var position;
- while (el && el !== document) {
- position = KTUtil.css(el, 'position');
- if (position === "fixed") {
- return true;
- }
- el = el.parentNode;
- }
- return false;
- },
- /**
- * Simulates delay
- */
- sleep: function(milliseconds) {
- var start = new Date().getTime();
- for (var i = 0; i < 1e7; i++) {
- if ((new Date().getTime() - start) > milliseconds) {
- break;
- }
- }
- },
- /**
- * Gets randomly generated integer value within given min and max range
- * @param {number} min Range start value
- * @param {number} max Range end value
- * @returns {number}
- */
- getRandomInt: function(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- },
- /**
- * Checks whether Angular library is included
- * @returns {boolean}
- */
- isAngularVersion: function() {
- return window.Zone !== undefined ? true : false;
- },
- // Deep extend: $.extend(true, {}, objA, objB);
- deepExtend: function(out) {
- out = out || {};
- for (var i = 1; i < arguments.length; i++) {
- var obj = arguments[i];
- if (!obj) continue;
- for (var key in obj) {
- if (!obj.hasOwnProperty(key)) {
- continue;
- }
- // based on https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
- if ( Object.prototype.toString.call(obj[key]) === '[object Object]' ) {
- out[key] = KTUtil.deepExtend(out[key], obj[key]);
- continue;
- }
- out[key] = obj[key];
- }
- }
- return out;
- },
- // extend: $.extend({}, objA, objB);
- extend: function(out) {
- out = out || {};
- for (var i = 1; i < arguments.length; i++) {
- if (!arguments[i])
- continue;
- for (var key in arguments[i]) {
- if (arguments[i].hasOwnProperty(key))
- out[key] = arguments[i][key];
- }
- }
- return out;
- },
- getBody: function() {
- return document.getElementsByTagName('body')[0];
- },
- /**
- * Checks whether the element has given classes
- * @param {object} el jQuery element object
- * @param {string} Classes string
- * @returns {boolean}
- */
- hasClasses: function(el, classes) {
- if (!el) {
- return;
- }
- var classesArr = classes.split(" ");
- for (var i = 0; i < classesArr.length; i++) {
- if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {
- return false;
- }
- }
- return true;
- },
- hasClass: function(el, className) {
- if (!el) {
- return;
- }
- return el.classList ? el.classList.contains(className) : new RegExp('\\b' + className + '\\b').test(el.className);
- },
- addClass: function(el, className) {
- if (!el || typeof className === 'undefined') {
- return;
- }
- var classNames = className.split(' ');
- if (el.classList) {
- for (var i = 0; i < classNames.length; i++) {
- if (classNames[i] && classNames[i].length > 0) {
- el.classList.add(KTUtil.trim(classNames[i]));
- }
- }
- } else if (!KTUtil.hasClass(el, className)) {
- for (var x = 0; x < classNames.length; x++) {
- el.className += ' ' + KTUtil.trim(classNames[x]);
- }
- }
- },
- removeClass: function(el, className) {
- if (!el || typeof className === 'undefined') {
- return;
- }
- var classNames = className.split(' ');
- if (el.classList) {
- for (var i = 0; i < classNames.length; i++) {
- el.classList.remove(KTUtil.trim(classNames[i]));
- }
- } else if (KTUtil.hasClass(el, className)) {
- for (var x = 0; x < classNames.length; x++) {
- el.className = el.className.replace(new RegExp('\\b' + KTUtil.trim(classNames[x]) + '\\b', 'g'), '');
- }
- }
- },
- triggerCustomEvent: function(el, eventName, data) {
- var event;
- if (window.CustomEvent) {
- event = new CustomEvent(eventName, {
- detail: data
- });
- } else {
- event = document.createEvent('CustomEvent');
- event.initCustomEvent(eventName, true, true, data);
- }
- el.dispatchEvent(event);
- },
- triggerEvent: function(node, eventName) {
- // Make sure we use the ownerDocument from the provided node to avoid cross-window problems
- var doc;
- if (node.ownerDocument) {
- doc = node.ownerDocument;
- } else if (node.nodeType == 9) {
- // the node may be the document itself, nodeType 9 = DOCUMENT_NODE
- doc = node;
- } else {
- throw new Error("Invalid node passed to fireEvent: " + node.id);
- }
- if (node.dispatchEvent) {
- // Gecko-style approach (now the standard) takes more work
- var eventClass = "";
- // Different events have different event classes.
- // If this switch statement can't map an eventName to an eventClass,
- // the event firing is going to fail.
- switch (eventName) {
- case "click": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.
- case "mouseenter":
- case "mouseleave":
- case "mousedown":
- case "mouseup":
- eventClass = "MouseEvents";
- break;
- case "focus":
- case "change":
- case "blur":
- case "select":
- eventClass = "HTMLEvents";
- break;
- default:
- throw "fireEvent: Couldn't find an event class for event '" + eventName + "'.";
- break;
- }
- var event = doc.createEvent(eventClass);
- var bubbles = eventName == "change" ? false : true;
- event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.
- event.synthetic = true; // allow detection of synthetic events
- // The second parameter says go ahead with the default action
- node.dispatchEvent(event, true);
- } else if (node.fireEvent) {
- // IE-old school style
- var event = doc.createEventObject();
- event.synthetic = true; // allow detection of synthetic events
- node.fireEvent("on" + eventName, event);
- }
- },
- index: function( el ){
- var c = el.parentNode.children, i = 0;
- for(; i < c.length; i++ )
- if( c[i] == el ) return i;
- },
- trim: function(string) {
- return string.trim();
- },
- eventTriggered: function(e) {
- if (e.currentTarget.dataset.triggered) {
- return true;
- } else {
- e.currentTarget.dataset.triggered = true;
- return false;
- }
- },
- remove: function(el) {
- if (el && el.parentNode) {
- el.parentNode.removeChild(el);
- }
- },
- find: function(parent, query) {
- if ( parent !== null) {
- return parent.querySelector(query);
- } else {
- return null;
- }
- },
- findAll: function(parent, query) {
- if ( parent !== null ) {
- return parent.querySelectorAll(query);
- } else {
- return null;
- }
- },
- insertAfter: function(el, referenceNode) {
- return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);
- },
- parents: function(elem, selector) {
- // Set up a parent array
- var parents = [];
- // Push each parent element to the array
- for ( ; elem && elem !== document; elem = elem.parentNode ) {
- if (selector) {
- if (elem.matches(selector)) {
- parents.push(elem);
- }
- continue;
- }
- parents.push(elem);
- }
- // Return our parent array
- return parents;
- },
- children: function(el, selector, log) {
- if (!el || !el.childNodes) {
- return null;
- }
- var result = [],
- i = 0,
- l = el.childNodes.length;
- for (var i; i < l; ++i) {
- if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {
- result.push(el.childNodes[i]);
- }
- }
- return result;
- },
- child: function(el, selector, log) {
- var children = KTUtil.children(el, selector, log);
- return children ? children[0] : null;
- },
- matches: function(el, selector, log) {
- var p = Element.prototype;
- var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {
- return [].indexOf.call(document.querySelectorAll(s), this) !== -1;
- };
- if (el && el.tagName) {
- return f.call(el, selector);
- } else {
- return false;
- }
- },
- data: function(el) {
- return {
- set: function(name, data) {
- if (!el) {
- return;
- }
- if (el.customDataTag === undefined) {
- window.KTUtilElementDataStoreID++;
- el.customDataTag = window.KTUtilElementDataStoreID;
- }
- if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {
- window.KTUtilElementDataStore[el.customDataTag] = {};
- }
- window.KTUtilElementDataStore[el.customDataTag][name] = data;
- },
- get: function(name) {
- if (!el) {
- return;
- }
- if (el.customDataTag === undefined) {
- return null;
- }
- return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;
- },
- has: function(name) {
- if (!el) {
- return false;
- }
- if (el.customDataTag === undefined) {
- return false;
- }
- return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;
- },
- remove: function(name) {
- if (el && this.has(name)) {
- delete window.KTUtilElementDataStore[el.customDataTag][name];
- }
- }
- };
- },
- outerWidth: function(el, margin) {
- var width;
- if (margin === true) {
- width = parseFloat(el.offsetWidth);
- width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));
- return parseFloat(width);
- } else {
- width = parseFloat(el.offsetWidth);
- return width;
- }
- },
- offset: function(el) {
- var rect, win;
- if ( !el ) {
- return;
- }
- // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
- // Support: IE <=11 only
- // Running getBoundingClientRect on a
- // disconnected node in IE throws an error
- if ( !el.getClientRects().length ) {
- return { top: 0, left: 0 };
- }
- // Get document-relative position by adding viewport scroll to viewport-relative gBCR
- rect = el.getBoundingClientRect();
- win = el.ownerDocument.defaultView;
- return {
- top: rect.top + win.pageYOffset,
- left: rect.left + win.pageXOffset,
- right: window.innerWidth - (el.offsetLeft + el.offsetWidth)
- };
- },
- height: function(el) {
- return KTUtil.css(el, 'height');
- },
- outerHeight: function(el, withMargin) {
- var height = el.offsetHeight;
- var style;
- if (typeof withMargin !== 'undefined' && withMargin === true) {
- style = getComputedStyle(el);
- height += parseInt(style.marginTop) + parseInt(style.marginBottom);
- return height;
- } else {
- return height;
- }
- },
- visible: function(el) {
- return !(el.offsetWidth === 0 && el.offsetHeight === 0);
- },
- isVisibleInContainer: function (el, container) {
- const eleTop = el.offsetTop;
- const eleBottom = eleTop + el.clientHeight;
-
- const containerTop = container.scrollTop;
- const containerBottom = containerTop + container.clientHeight;
-
- // The element is fully visible in the container
- return (
- (eleTop >= containerTop && eleBottom <= containerBottom) ||
- // Some part of the element is visible in the container
- (eleTop < containerTop && containerTop < eleBottom) ||
- (eleTop < containerBottom && containerBottom < eleBottom)
- );
- },
- getRelativeTopPosition: function (el, container) {
- return el.offsetTop - container.offsetTop;
- },
- attr: function(el, name, value) {
- if (el == undefined) {
- return;
- }
- if (value !== undefined) {
- el.setAttribute(name, value);
- } else {
- return el.getAttribute(name);
- }
- },
- hasAttr: function(el, name) {
- if (el == undefined) {
- return;
- }
- return el.getAttribute(name) ? true : false;
- },
- removeAttr: function(el, name) {
- if (el == undefined) {
- return;
- }
- el.removeAttribute(name);
- },
- animate: function(from, to, duration, update, easing, done) {
- /**
- * TinyAnimate.easings
- * Adapted from jQuery Easing
- */
- var easings = {};
- var easing;
- easings.linear = function(t, b, c, d) {
- return c * t / d + b;
- };
- easing = easings.linear;
- // Early bail out if called incorrectly
- if (typeof from !== 'number' ||
- typeof to !== 'number' ||
- typeof duration !== 'number' ||
- typeof update !== 'function') {
- return;
- }
- // Create mock done() function if necessary
- if (typeof done !== 'function') {
- done = function() {};
- }
- // Pick implementation (requestAnimationFrame | setTimeout)
- var rAF = window.requestAnimationFrame || function(callback) {
- window.setTimeout(callback, 1000 / 50);
- };
- // Animation loop
- var canceled = false;
- var change = to - from;
- function loop(timestamp) {
- var time = (timestamp || +new Date()) - start;
- if (time >= 0) {
- update(easing(time, from, change, duration));
- }
- if (time >= 0 && time >= duration) {
- update(to);
- done();
- } else {
- rAF(loop);
- }
- }
- update(from);
- // Start animation loop
- var start = window.performance && window.performance.now ? window.performance.now() : +new Date();
- rAF(loop);
- },
- actualCss: function(el, prop, cache) {
- var css = '';
- if (el instanceof HTMLElement === false) {
- return;
- }
- if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {
- var value;
- // the element is hidden so:
- // making the el block so we can meassure its height but still be hidden
- css = el.style.cssText;
- el.style.cssText = 'position: absolute; visibility: hidden; display: block;';
- if (prop == 'width') {
- value = el.offsetWidth;
- } else if (prop == 'height') {
- value = el.offsetHeight;
- }
- el.style.cssText = css;
- // store it in cache
- el.setAttribute('kt-hidden-' + prop, value);
- return parseFloat(value);
- } else {
- // store it in cache
- return parseFloat(el.getAttribute('kt-hidden-' + prop));
- }
- },
- actualHeight: function(el, cache) {
- return KTUtil.actualCss(el, 'height', cache);
- },
- actualWidth: function(el, cache) {
- return KTUtil.actualCss(el, 'width', cache);
- },
- getScroll: function(element, method) {
- // The passed in `method` value should be 'Top' or 'Left'
- method = 'scroll' + method;
- return (element == window || element == document) ? (
- self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||
- (browserSupportsBoxModel && document.documentElement[method]) ||
- document.body[method]
- ) : element[method];
- },
- css: function(el, styleProp, value, important) {
- if (!el) {
- return;
- }
- if (value !== undefined) {
- if ( important === true ) {
- el.style.setProperty(styleProp, value, 'important');
- } else {
- el.style[styleProp] = value;
- }
- } else {
- var defaultView = (el.ownerDocument || document).defaultView;
- // W3C standard way:
- if (defaultView && defaultView.getComputedStyle) {
- // sanitize property name to css notation
- // (hyphen separated words eg. font-Size)
- styleProp = styleProp.replace(/([A-Z])/g, "-$1").toLowerCase();
- return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
- } else if (el.currentStyle) { // IE
- // sanitize property name to camelCase
- styleProp = styleProp.replace(/\-(\w)/g, function(str, letter) {
- return letter.toUpperCase();
- });
- value = el.currentStyle[styleProp];
- // convert other units to pixels on IE
- if (/^\d+(em|pt|%|ex)?$/i.test(value)) {
- return (function(value) {
- var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;
- el.runtimeStyle.left = el.currentStyle.left;
- el.style.left = value || 0;
- value = el.style.pixelLeft + "px";
- el.style.left = oldLeft;
- el.runtimeStyle.left = oldRsLeft;
- return value;
- })(value);
- }
- return value;
- }
- }
- },
- slide: function(el, dir, speed, callback, recalcMaxHeight) {
- if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {
- return;
- }
- speed = (speed ? speed : 600);
- var calcHeight = KTUtil.actualHeight(el);
- var calcPaddingTop = false;
- var calcPaddingBottom = false;
- if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {
- KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));
- }
- if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {
- KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));
- }
- if (KTUtil.data(el).has('slide-padding-top')) {
- calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));
- }
- if (KTUtil.data(el).has('slide-padding-bottom')) {
- calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));
- }
- if (dir == 'up') { // up
- el.style.cssText = 'display: block; overflow: hidden;';
- if (calcPaddingTop) {
- KTUtil.animate(0, calcPaddingTop, speed, function(value) {
- el.style.paddingTop = (calcPaddingTop - value) + 'px';
- }, 'linear');
- }
- if (calcPaddingBottom) {
- KTUtil.animate(0, calcPaddingBottom, speed, function(value) {
- el.style.paddingBottom = (calcPaddingBottom - value) + 'px';
- }, 'linear');
- }
- KTUtil.animate(0, calcHeight, speed, function(value) {
- el.style.height = (calcHeight - value) + 'px';
- }, 'linear', function() {
- el.style.height = '';
- el.style.display = 'none';
- if (typeof callback === 'function') {
- callback();
- }
- });
- } else if (dir == 'down') { // down
- el.style.cssText = 'display: block; overflow: hidden;';
- if (calcPaddingTop) {
- KTUtil.animate(0, calcPaddingTop, speed, function(value) {//
- el.style.paddingTop = value + 'px';
- }, 'linear', function() {
- el.style.paddingTop = '';
- });
- }
- if (calcPaddingBottom) {
- KTUtil.animate(0, calcPaddingBottom, speed, function(value) {
- el.style.paddingBottom = value + 'px';
- }, 'linear', function() {
- el.style.paddingBottom = '';
- });
- }
- KTUtil.animate(0, calcHeight, speed, function(value) {
- el.style.height = value + 'px';
- }, 'linear', function() {
- el.style.height = '';
- el.style.display = '';
- el.style.overflow = '';
- if (typeof callback === 'function') {
- callback();
- }
- });
- }
- },
- slideUp: function(el, speed, callback) {
- KTUtil.slide(el, 'up', speed, callback);
- },
- slideDown: function(el, speed, callback) {
- KTUtil.slide(el, 'down', speed, callback);
- },
- show: function(el, display) {
- if (typeof el !== 'undefined') {
- el.style.display = (display ? display : 'block');
- }
- },
- hide: function(el) {
- if (typeof el !== 'undefined') {
- el.style.display = 'none';
- }
- },
- addEvent: function(el, type, handler, one) {
- if (typeof el !== 'undefined' && el !== null) {
- el.addEventListener(type, handler);
- }
- },
- removeEvent: function(el, type, handler) {
- if (el !== null) {
- el.removeEventListener(type, handler);
- }
- },
- on: function(element, selector, event, handler) {
- if ( element === null ) {
- return;
- }
- var eventId = KTUtil.getUniqueId('event');
- window.KTUtilDelegatedEventHandlers[eventId] = function(e) {
- var targets = element.querySelectorAll(selector);
- var target = e.target;
- while ( target && target !== element ) {
- for ( var i = 0, j = targets.length; i < j; i++ ) {
- if ( target === targets[i] ) {
- handler.call(target, e);
- }
- }
- target = target.parentNode;
- }
- }
- KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);
- return eventId;
- },
- off: function(element, event, eventId) {
- if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {
- return;
- }
- KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);
- delete window.KTUtilDelegatedEventHandlers[eventId];
- },
- one: function onetime(el, type, callback) {
- el.addEventListener(type, function callee(e) {
- // remove event
- if (e.target && e.target.removeEventListener) {
- e.target.removeEventListener(e.type, callee);
- }
- // need to verify from https://themeforest.net/author_dashboard#comment_23615588
- if (el && el.removeEventListener) {
- e.currentTarget.removeEventListener(e.type, callee);
- }
- // call handler
- return callback(e);
- });
- },
- hash: function(str) {
- var hash = 0,
- i, chr;
- if (str.length === 0) return hash;
- for (i = 0; i < str.length; i++) {
- chr = str.charCodeAt(i);
- hash = ((hash << 5) - hash) + chr;
- hash |= 0; // Convert to 32bit integer
- }
- return hash;
- },
- animateClass: function(el, animationName, callback) {
- var animation;
- var animations = {
- animation: 'animationend',
- OAnimation: 'oAnimationEnd',
- MozAnimation: 'mozAnimationEnd',
- WebkitAnimation: 'webkitAnimationEnd',
- msAnimation: 'msAnimationEnd',
- };
- for (var t in animations) {
- if (el.style[t] !== undefined) {
- animation = animations[t];
- }
- }
-
- KTUtil.addClass(el, animationName);
- KTUtil.one(el, animation, function() {
- KTUtil.removeClass(el, animationName);
- });
- if (callback) {
- KTUtil.one(el, animation, callback);
- }
- },
- transitionEnd: function(el, callback) {
- var transition;
- var transitions = {
- transition: 'transitionend',
- OTransition: 'oTransitionEnd',
- MozTransition: 'mozTransitionEnd',
- WebkitTransition: 'webkitTransitionEnd',
- msTransition: 'msTransitionEnd'
- };
- for (var t in transitions) {
- if (el.style[t] !== undefined) {
- transition = transitions[t];
- }
- }
- KTUtil.one(el, transition, callback);
- },
- animationEnd: function(el, callback) {
- var animation;
- var animations = {
- animation: 'animationend',
- OAnimation: 'oAnimationEnd',
- MozAnimation: 'mozAnimationEnd',
- WebkitAnimation: 'webkitAnimationEnd',
- msAnimation: 'msAnimationEnd'
- };
- for (var t in animations) {
- if (el.style[t] !== undefined) {
- animation = animations[t];
- }
- }
- KTUtil.one(el, animation, callback);
- },
- animateDelay: function(el, value) {
- var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];
- for (var i = 0; i < vendors.length; i++) {
- KTUtil.css(el, vendors[i] + 'animation-delay', value);
- }
- },
- animateDuration: function(el, value) {
- var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];
- for (var i = 0; i < vendors.length; i++) {
- KTUtil.css(el, vendors[i] + 'animation-duration', value);
- }
- },
- scrollTo: function(target, offset, duration) {
- var duration = duration ? duration : 500;
- var targetPos = target ? KTUtil.offset(target).top : 0;
- var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
- var from, to;
- if (offset) {
- targetPos = targetPos - offset;
- }
- from = scrollPos;
- to = targetPos;
- KTUtil.animate(from, to, duration, function(value) {
- document.documentElement.scrollTop = value;
- document.body.parentNode.scrollTop = value;
- document.body.scrollTop = value;
- }); //, easing, done
- },
- scrollTop: function(offset, duration) {
- KTUtil.scrollTo(null, offset, duration);
- },
- isArray: function(obj) {
- return obj && Array.isArray(obj);
- },
- isEmpty: function(obj) {
- for (var prop in obj) {
- if (obj.hasOwnProperty(prop)) {
- return false;
- }
- }
- return true;
- },
- numberString: function(nStr) {
- nStr += '';
- var x = nStr.split('.');
- var x1 = x[0];
- var x2 = x.length > 1 ? '.' + x[1] : '';
- var rgx = /(\d+)(\d{3})/;
- while (rgx.test(x1)) {
- x1 = x1.replace(rgx, '$1' + ',' + '$2');
- }
- return x1 + x2;
- },
- isRTL: function() {
- return (document.querySelector('html').getAttribute("direction") === 'rtl');
- },
- snakeToCamel: function(s){
- return s.replace(/(\-\w)/g, function(m){return m[1].toUpperCase();});
- },
- filterBoolean: function(val) {
- // Convert string boolean
- if (val === true || val === 'true') {
- return true;
- }
- if (val === false || val === 'false') {
- return false;
- }
- return val;
- },
- setHTML: function(el, html) {
- el.innerHTML = html;
- },
- getHTML: function(el) {
- if (el) {
- return el.innerHTML;
- }
- },
- getDocumentHeight: function() {
- var body = document.body;
- var html = document.documentElement;
- return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );
- },
- getScrollTop: function() {
- return (document.scrollingElement || document.documentElement).scrollTop;
- },
- colorLighten: function(color, amount) {
- const addLight = function(color, amount){
- let cc = parseInt(color,16) + amount;
- let c = (cc > 255) ? 255 : (cc);
- c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;
- return c;
- }
- color = (color.indexOf("#")>=0) ? color.substring(1,color.length) : color;
- amount = parseInt((255*amount)/100);
-
- return color = `#${addLight(color.substring(0,2), amount)}${addLight(color.substring(2,4), amount)}${addLight(color.substring(4,6), amount)}`;
- },
- colorDarken: function(color, amount) {
- const subtractLight = function(color, amount){
- let cc = parseInt(color,16) - amount;
- let c = (cc < 0) ? 0 : (cc);
- c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;
- return c;
- }
-
- color = (color.indexOf("#")>=0) ? color.substring(1,color.length) : color;
- amount = parseInt((255*amount)/100);
- return color = `#${subtractLight(color.substring(0,2), amount)}${subtractLight(color.substring(2,4), amount)}${subtractLight(color.substring(4,6), amount)}`;
- },
- // Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds
- throttle: function (timer, func, delay) {
- // If setTimeout is already scheduled, no need to do anything
- if (timer) {
- return;
- }
- // Schedule a setTimeout after delay seconds
- timer = setTimeout(function () {
- func();
- // Once setTimeout function execution is finished, timerId = undefined so that in <br>
- // the next scroll event function execution can be scheduled by the setTimeout
- timer = undefined;
- }, delay);
- },
- // Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds
- debounce: function (timer, func, delay) {
- // Cancels the setTimeout method execution
- clearTimeout(timer)
- // Executes the func after delay time.
- timer = setTimeout(func, delay);
- },
- parseJson: function(value) {
- if (typeof value === 'string') {
- value = value.replace(/'/g, "\"");
- var jsonStr = value.replace(/(\w+:)|(\w+ :)/g, function(matched) {
- return '"' + matched.substring(0, matched.length - 1) + '":';
- });
- try {
- value = JSON.parse(jsonStr);
- } catch(e) { }
- }
- return value;
- },
- getResponsiveValue: function(value, defaultValue) {
- var width = this.getViewPort().width;
- var result;
- value = KTUtil.parseJson(value);
- if (typeof value === 'object') {
- var resultKey;
- var resultBreakpoint = -1;
- var breakpoint;
- for (var key in value) {
- if (key === 'default') {
- breakpoint = 0;
- } else {
- breakpoint = this.getBreakpoint(key) ? this.getBreakpoint(key) : parseInt(key);
- }
- if (breakpoint <= width && breakpoint > resultBreakpoint) {
- resultKey = key;
- resultBreakpoint = breakpoint;
- }
- }
- if (resultKey) {
- result = value[resultKey];
- } else {
- result = value;
- }
- } else {
- result = value;
- }
- return result;
- },
- each: function(array, callback) {
- return [].slice.call(array).map(callback);
- },
- getSelectorMatchValue: function(value) {
- var result = null;
- value = KTUtil.parseJson(value);
- if ( typeof value === 'object' ) {
- // Match condition
- if ( value['match'] !== undefined ) {
- var selector = Object.keys(value['match'])[0];
- value = Object.values(value['match'])[0];
- if ( document.querySelector(selector) !== null ) {
- result = value;
- }
- }
- } else {
- result = value;
- }
- return result;
- },
- getConditionalValue: function(value) {
- var value = KTUtil.parseJson(value);
- var result = KTUtil.getResponsiveValue(value);
- if ( result !== null && result['match'] !== undefined ) {
- result = KTUtil.getSelectorMatchValue(result);
- }
- if ( result === null && value !== null && value['default'] !== undefined ) {
- result = value['default'];
- }
- return result;
- },
- getCssVariableValue: function(variableName) {
- var hex = getComputedStyle(document.documentElement).getPropertyValue(variableName);
- if ( hex && hex.length > 0 ) {
- hex = hex.trim();
- }
- return hex;
- },
- isInViewport: function(element) {
- var rect = element.getBoundingClientRect();
- return (
- rect.top >= 0 &&
- rect.left >= 0 &&
- rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
- rect.right <= (window.innerWidth || document.documentElement.clientWidth)
- );
- },
- onDOMContentLoaded: function(callback) {
- if (document.readyState === 'loading') {
- document.addEventListener('DOMContentLoaded', callback);
- } else {
- callback();
- }
- },
- inIframe: function() {
- try {
- return window.self !== window.top;
- } catch (e) {
- return true;
- }
- },
- isHexColor(code) {
- return /^#[0-9A-F]{6}$/i.test(code);
- }
- }
- }();
- // Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTUtil;
- }
- "use strict";
- // Class definition
- var KTApp = function () {
- var select2FocusFixInitialized = false;
- var countUpInitialized = false;
- var createBootstrapTooltip = function (el, options) {
- if (el.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- var delay = {};
- // Handle delay options
- if (el.hasAttribute('data-bs-delay-hide')) {
- delay['hide'] = el.getAttribute('data-bs-delay-hide');
- }
- if (el.hasAttribute('data-bs-delay-show')) {
- delay['show'] = el.getAttribute('data-bs-delay-show');
- }
- if (delay) {
- options['delay'] = delay;
- }
- // Check dismiss options
- if (el.hasAttribute('data-bs-dismiss') && el.getAttribute('data-bs-dismiss') == 'click') {
- options['dismiss'] = 'click';
- }
- // Initialize popover
- var tp = new bootstrap.Tooltip(el, options);
- // Handle dismiss
- if (options['dismiss'] && options['dismiss'] === 'click') {
- // Hide popover on element click
- el.addEventListener("click", function (e) {
- tp.hide();
- });
- }
- el.setAttribute("data-kt-initialized", "1");
- return tp;
- }
- var createBootstrapTooltips = function () {
- var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
- var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
- createBootstrapTooltip(tooltipTriggerEl, {});
- });
- }
- var createBootstrapPopover = function (el, options) {
- if (el.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- var delay = {};
- // Handle delay options
- if (el.hasAttribute('data-bs-delay-hide')) {
- delay['hide'] = el.getAttribute('data-bs-delay-hide');
- }
- if (el.hasAttribute('data-bs-delay-show')) {
- delay['show'] = el.getAttribute('data-bs-delay-show');
- }
- if (delay) {
- options['delay'] = delay;
- }
- // Handle dismiss option
- if (el.getAttribute('data-bs-dismiss') == 'true') {
- options['dismiss'] = true;
- }
- if (options['dismiss'] === true) {
- options['template'] = '<div class="popover" role="tooltip"><div class="popover-arrow"></div><span class="popover-dismiss btn btn-icon"></span><h3 class="popover-header"></h3><div class="popover-body"></div></div>'
- }
- // Initialize popover
- var popover = new bootstrap.Popover(el, options);
- // Handle dismiss click
- if (options['dismiss'] === true) {
- var dismissHandler = function (e) {
- popover.hide();
- }
- el.addEventListener('shown.bs.popover', function () {
- var dismissEl = document.getElementById(el.getAttribute('aria-describedby'));
- dismissEl.addEventListener('click', dismissHandler);
- });
- el.addEventListener('hide.bs.popover', function () {
- var dismissEl = document.getElementById(el.getAttribute('aria-describedby'));
- dismissEl.removeEventListener('click', dismissHandler);
- });
- }
- el.setAttribute("data-kt-initialized", "1");
- return popover;
- }
- var createBootstrapPopovers = function () {
- var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
- var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
- createBootstrapPopover(popoverTriggerEl, {});
- });
- }
- var createBootstrapToasts = function () {
- var toastElList = [].slice.call(document.querySelectorAll('.toast'));
- var toastList = toastElList.map(function (toastEl) {
- if (toastEl.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- toastEl.setAttribute("data-kt-initialized", "1");
- return new bootstrap.Toast(toastEl, {})
- });
- }
- var createButtons = function () {
- var buttonsGroup = [].slice.call(document.querySelectorAll('[data-kt-buttons="true"]'));
- buttonsGroup.map(function (group) {
- if (group.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- var selector = group.hasAttribute('data-kt-buttons-target') ? group.getAttribute('data-kt-buttons-target') : '.btn';
- var activeButtons = [].slice.call(group.querySelectorAll(selector));
- // Toggle Handler
- KTUtil.on(group, selector, 'click', function (e) {
- activeButtons.map(function (button) {
- button.classList.remove('active');
- });
- this.classList.add('active');
- });
- group.setAttribute("data-kt-initialized", "1");
- });
- }
- var createDateRangePickers = function() {
- // Check if jQuery included
- if (typeof jQuery == 'undefined') {
- return;
- }
- // Check if daterangepicker included
- if (typeof $.fn.daterangepicker === 'undefined') {
- return;
- }
- var elements = [].slice.call(document.querySelectorAll('[data-kt-daterangepicker="true"]'));
- var start = moment().subtract(29, 'days');
- var end = moment();
-
- elements.map(function (element) {
- if (element.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- var display = element.querySelector('div');
- var attrOpens = element.hasAttribute('data-kt-daterangepicker-opens') ? element.getAttribute('data-kt-daterangepicker-opens') : 'left';
- var range = element.getAttribute('data-kt-daterangepicker-range');
- var cb = function(start, end) {
- var current = moment();
- if (display) {
- if ( current.isSame(start, "day") && current.isSame(end, "day") ) {
- display.innerHTML = start.format('D MMM YYYY');
- } else {
- display.innerHTML = start.format('D MMM YYYY') + ' - ' + end.format('D MMM YYYY');
- }
- }
- }
- if ( range === "today" ) {
- start = moment();
- end = moment();
- }
- $(element).daterangepicker({
- startDate: start,
- endDate: end,
- opens: attrOpens,
- ranges: {
- 'Today': [moment(), moment()],
- 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
- 'Last 7 Days': [moment().subtract(6, 'days'), moment()],
- 'Last 30 Days': [moment().subtract(29, 'days'), moment()],
- 'This Month': [moment().startOf('month'), moment().endOf('month')],
- 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
- }
- }, cb);
- cb(start, end);
- element.setAttribute("data-kt-initialized", "1");
- });
- }
- var createSelect2 = function () {
- // Check if jQuery included
- if (typeof jQuery == 'undefined') {
- return;
- }
- // Check if select2 included
- if (typeof $.fn.select2 === 'undefined') {
- return;
- }
- var elements = [].slice.call(document.querySelectorAll('[data-control="select2"], [data-kt-select2="true"]'));
- elements.map(function (element) {
- if (element.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- var options = {
- dir: document.body.getAttribute('direction')
- };
- if (element.getAttribute('data-hide-search') == 'true') {
- options.minimumResultsForSearch = Infinity;
- }
- $(element).select2(options);
- element.setAttribute("data-kt-initialized", "1");
- });
- /*
- * Hacky fix for a bug in select2 with jQuery 3.6.0's new nested-focus "protection"
- * see: https://github.com/select2/select2/issues/5993
- * see: https://github.com/jquery/jquery/issues/4382
- *
- * TODO: Recheck with the select2 GH issue and remove once this is fixed on their side
- */
- if (select2FocusFixInitialized === false) {
- select2FocusFixInitialized = true;
-
- $(document).on('select2:open', function(e) {
- var elements = document.querySelectorAll('.select2-container--open .select2-search__field');
- if (elements.length > 0) {
- elements[elements.length - 1].focus();
- }
- });
- }
- }
- var createAutosize = function () {
- var inputs = [].slice.call(document.querySelectorAll('[data-kt-autosize="true"]'));
- inputs.map(function (input) {
- if (input.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- autosize(input);
- input.setAttribute("data-kt-initialized", "1");
- });
- }
- var createCountUp = function () {
- var elements = [].slice.call(document.querySelectorAll('[data-kt-countup="true"]:not(.counted)'));
- elements.map(function (element) {
- if (KTUtil.isInViewport(element) && KTUtil.visible(element)) {
- if (element.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- var options = {};
- var value = element.getAttribute('data-kt-countup-value');
- value = parseFloat(value.replace(/,/g, ""));
- if (element.hasAttribute('data-kt-countup-start-val')) {
- options.startVal = parseFloat(element.getAttribute('data-kt-countup-start-val'));
- }
- if (element.hasAttribute('data-kt-countup-duration')) {
- options.duration = parseInt(element.getAttribute('data-kt-countup-duration'));
- }
- if (element.hasAttribute('data-kt-countup-decimal-places')) {
- options.decimalPlaces = parseInt(element.getAttribute('data-kt-countup-decimal-places'));
- }
- if (element.hasAttribute('data-kt-countup-prefix')) {
- options.prefix = element.getAttribute('data-kt-countup-prefix');
- }
- if (element.hasAttribute('data-kt-countup-separator')) {
- options.separator = element.getAttribute('data-kt-countup-separator');
- }
- if (element.hasAttribute('data-kt-countup-suffix')) {
- options.suffix = element.getAttribute('data-kt-countup-suffix');
- }
- var count = new countUp.CountUp(element, value, options);
- count.start();
- element.classList.add('counted');
- element.setAttribute("data-kt-initialized", "1");
- }
- });
- }
- var createCountUpTabs = function () {
- if (countUpInitialized === false) {
- // Initial call
- createCountUp();
- // Window scroll event handler
- window.addEventListener('scroll', createCountUp);
- }
- // Tabs shown event handler
- var tabs = [].slice.call(document.querySelectorAll('[data-kt-countup-tabs="true"][data-bs-toggle="tab"]'));
- tabs.map(function (tab) {
- if (tab.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- tab.addEventListener('shown.bs.tab', createCountUp);
- tab.setAttribute("data-kt-initialized", "1");
- });
- countUpInitialized = true;
- }
- var createTinySliders = function () {
- // Init Slider
- var initSlider = function (el) {
- if (!el) {
- return;
- }
- const tnsOptions = {};
- // Convert string boolean
- const checkBool = function (val) {
- if (val === 'true') {
- return true;
- }
- if (val === 'false') {
- return false;
- }
- return val;
- };
- // get extra options via data attributes
- el.getAttributeNames().forEach(function (attrName) {
- // more options; https://github.com/ganlanyuan/tiny-slider#options
- if ((/^data-tns-.*/g).test(attrName)) {
- let optionName = attrName.replace('data-tns-', '').toLowerCase().replace(/(?:[\s-])\w/g, function (match) {
- return match.replace('-', '').toUpperCase();
- });
- if (attrName === 'data-tns-responsive') {
- // fix string with a valid json
- const jsonStr = el.getAttribute(attrName).replace(/(\w+:)|(\w+ :)/g, function (matched) {
- return '"' + matched.substring(0, matched.length - 1) + '":';
- });
- try {
- // convert json string to object
- tnsOptions[optionName] = JSON.parse(jsonStr);
- }
- catch (e) {
- }
- }
- else {
- tnsOptions[optionName] = checkBool(el.getAttribute(attrName));
- }
- }
- });
- const opt = Object.assign({}, {
- container: el,
- slideBy: 'page',
- autoplay: true,
- autoplayButtonOutput: false,
- }, tnsOptions);
- if (el.closest('.tns')) {
- KTUtil.addClass(el.closest('.tns'), 'tns-initiazlied');
- }
- return tns(opt);
- }
- // Sliders
- const elements = Array.prototype.slice.call(document.querySelectorAll('[data-tns="true"]'), 0);
- if (!elements && elements.length === 0) {
- return;
- }
- elements.forEach(function (el) {
- if (el.getAttribute("data-kt-initialized") === "1") {
- return;
- }
- initSlider(el);
- el.setAttribute("data-kt-initialized", "1");
- });
- }
- var initSmoothScroll = function () {
- if (SmoothScroll) {
- new SmoothScroll('a[data-kt-scroll-toggle][href*="#"]', {
- speed: 1000,
- speedAsDuration: true,
- offset: function (anchor, toggle) {
- // Integer or Function returning an integer. How far to offset the scrolling anchor location in pixels
- // This example is a function, but you could do something as simple as `offset: 25`
- // An example returning different values based on whether the clicked link was in the header nav or not
- if (anchor.hasAttribute('data-kt-scroll-offset')) {
- var val = KTUtil.getResponsiveValue(anchor.getAttribute('data-kt-scroll-offset'));
-
- return val;
- } else {
- return 0;
- }
- }
- });
- }
- }
- var initCheck = function () {
- // Toggle Handler
- KTUtil.on(document.body, '[data-kt-check="true"]', 'change', function (e) {
- var check = this;
- var targets = document.querySelectorAll(check.getAttribute('data-kt-check-target'));
- KTUtil.each(targets, function (target) {
- if (target.type == 'checkbox') {
- target.checked = check.checked;
- } else {
- target.classList.toggle('active');
- }
- });
- });
- }
- var initBootstrapCollapse = function() {
- KTUtil.on(document.body, '.collapsible[data-bs-toggle="collapse"]', 'click', function(e) {
- if (this.classList.contains('collapsed')) {
- this.classList.remove('active');
- this.blur();
- } else {
- this.classList.add('active');
- }
- if (this.hasAttribute('data-kt-toggle-text')) {
- var text = this.getAttribute('data-kt-toggle-text');
- var target = this.querySelector('[data-kt-toggle-text-target="true"]');
- var target = target ? target : this;
- this.setAttribute('data-kt-toggle-text', target.innerText);
- target.innerText = text;
- }
- });
- }
- var initBootstrapRotate = function() {
- KTUtil.on(document.body, '[data-kt-rotate="true"]', 'click', function(e) {
- if (this.classList.contains('active')) {
- this.classList.remove('active');
- this.blur();
- } else {
- this.classList.add('active');
- }
- });
- }
- var initPageLoader = function () {
- // CSS3 Transitions only after page load(.page-loading or .app-page-loading class added to body tag and remove with JS on page load)
- setTimeout(function ()
- {
- KTUtil.removeClass(document.body, 'page-loading');
- document.body.removeAttribute('data-kt-app-page-loading');
- }, 1000 * 3);
- }
- return {
- init: function () {
- initSmoothScroll();
- initCheck();
- initBootstrapCollapse();
- initBootstrapRotate();
- },
- initPageLoader: function () {
- initPageLoader();
- },
- createInstances: function () {
- createBootstrapTooltips();
- createBootstrapPopovers();
- createBootstrapToasts();
- createDateRangePickers();
- createButtons();
- createSelect2();
- createCountUp();
- createCountUpTabs();
- createAutosize();
- createTinySliders();
- }
- };
- }();
- // Initialize app on document ready
- KTUtil.onDOMContentLoaded(function () {
- KTApp.init();
- KTApp.createInstances();
- });
- // Initialize page loader on window load
- window.addEventListener("load", function() {
- KTApp.initPageLoader();
- });
- // Declare KTApp for Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTApp;
- }
- "use strict";
- // Class definition
- var KTAppLayoutBuilder = function() {
- var form;
- var actionInput;
- var url;
- var previewButton;
- var exportButton;
- var resetButton;
- var handlePreview = function() {
- previewButton.addEventListener("click", function(e) {
- e.preventDefault();
- // Set form action value
- actionInput.value = "preview";
- // Show progress
- previewButton.setAttribute("data-kt-indicator", "on");
- // Prepare form data
- var data = $(form).serialize();
- // Submit
- $.ajax({
- type: "POST",
- dataType: "html",
- url: url,
- data: data,
- success: function(response, status, xhr) {
- if (history.scrollRestoration) {
- history.scrollRestoration = 'manual';
- }
- location.reload();
- return;
- toastr.success(
- "Preview has been updated with current configured layout.",
- "Preview updated!",
- {timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
- );
- setTimeout(function() {
- location.reload(); // reload page
- }, 1500);
- },
- error: function(response) {
- toastr.error(
- "Please try it again later.",
- "Something went wrong!",
- {timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
- );
- },
- complete: function() {
- previewButton.removeAttribute("data-kt-indicator");
- }
- });
- });
- };
- var handleExport = function() {
- exportButton.addEventListener("click", function(e) {
- e.preventDefault();
- toastr.success(
- "Process has been started and it may take a while.",
- "Generating HTML!",
- {timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
- );
- // Show progress
- exportButton.setAttribute("data-kt-indicator", "on");
- // Set form action value
- actionInput.value = "export";
-
- // Prepare form data
- var data = $(form).serialize();
- $.ajax({
- type: "POST",
- dataType: "html",
- url: url,
- data: data,
- success: function(response, status, xhr) {
- var timer = setInterval(function() {
- $("<iframe/>").attr({
- src: url + "?layout-builder[action]=export&download=1&output=" + response,
- style: "visibility:hidden;display:none",
- }).ready(function() {
- // Stop the timer
- clearInterval(timer);
- exportButton.removeAttribute("data-kt-indicator");
- }).appendTo("body");
- }, 3000);
- },
- error: function(response) {
- toastr.error(
- "Please try it again later.",
- "Something went wrong!",
- {timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
- );
- exportButton.removeAttribute("data-kt-indicator");
- },
- });
- });
- };
- var handleReset = function() {
- resetButton.addEventListener("click", function(e) {
- e.preventDefault();
- // Show progress
- resetButton.setAttribute("data-kt-indicator", "on");
- // Set form action value
- actionInput.value = "reset";
-
- // Prepare form data
- var data = $(form).serialize();
- $.ajax({
- type: "POST",
- dataType: "html",
- url: url,
- data: data,
- success: function(response, status, xhr) {
- if (history.scrollRestoration) {
- history.scrollRestoration = 'manual';
- }
-
- location.reload();
- return;
-
- toastr.success(
- "Preview has been successfully reset and the page will be reloaded.",
- "Reset Preview!",
- {timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
- );
- setTimeout(function() {
- location.reload(); // reload page
- }, 1500);
- },
- error: function(response) {
- toastr.error(
- "Please try it again later.",
- "Something went wrong!",
- {timeOut: 0, extendedTimeOut: 0, closeButton: true, closeDuration: 0}
- );
- },
- complete: function() {
- resetButton.removeAttribute("data-kt-indicator");
- },
- });
- });
- };
- var handleThemeMode = function() {
- var checkLight = document.querySelector('#kt_layout_builder_theme_mode_light');
- var checkDark = document.querySelector('#kt_layout_builder_theme_mode_dark');
- var check = document.querySelector('#kt_layout_builder_theme_mode_' + KTThemeMode.getMode());
- if (checkLight) {
- checkLight.addEventListener("click", function() {
- this.checked = true;
- this.closest('[data-kt-buttons="true"]').querySelector('.form-check-image.active').classList.remove('active');
- this.closest('.form-check-image').classList.add('active');
- KTThemeMode.setMode('light');
- });
- }
-
- if (checkDark) {
- checkDark.addEventListener("click", function() {
- this.checked = true;
- this.closest('[data-kt-buttons="true"]').querySelector('.form-check-image.active').classList.remove('active');
- this.closest('.form-check-image').classList.add('active');
- KTThemeMode.setMode('dark');
- });
- }
- if ( check ) {
- check.closest('.form-check-image').classList.add('active');
- check.checked = true;
- }
- }
- return {
- // Public functions
- init: function() {
- form = document.querySelector("#kt_app_layout_builder_form");
- if ( !form ) {
- return;
- }
- url = form.getAttribute("action");
- actionInput = document.querySelector("#kt_app_layout_builder_action");
- previewButton = document.querySelector("#kt_app_layout_builder_preview");
- exportButton = document.querySelector("#kt_app_layout_builder_export");
- resetButton = document.querySelector("#kt_app_layout_builder_reset");
-
- if ( previewButton ) {
- handlePreview();
- }
- if ( exportButton ) {
- handleExport();
- }
- if ( resetButton ) {
- handleReset();
- }
- handleThemeMode();
- }
- };
- }();
- // On document ready
- KTUtil.onDOMContentLoaded(function() {
- KTAppLayoutBuilder.init();
- });
- "use strict";
- // Class definition
- var KTLayoutSearch = function() {
- // Private variables
- var element;
- var formElement;
- var mainElement;
- var resultsElement;
- var wrapperElement;
- var emptyElement;
- var preferencesElement;
- var preferencesShowElement;
- var preferencesDismissElement;
-
- var advancedOptionsFormElement;
- var advancedOptionsFormShowElement;
- var advancedOptionsFormCancelElement;
- var advancedOptionsFormSearchElement;
-
- var searchObject;
- // Private functions
- var processs = function(search) {
- var timeout = setTimeout(function() {
- var number = KTUtil.getRandomInt(1, 3);
- // Hide recently viewed
- mainElement.classList.add('d-none');
- if (number === 3) {
- // Hide results
- resultsElement.classList.add('d-none');
- // Show empty message
- emptyElement.classList.remove('d-none');
- } else {
- // Show results
- resultsElement.classList.remove('d-none');
- // Hide empty message
- emptyElement.classList.add('d-none');
- }
- // Complete search
- search.complete();
- }, 1500);
- }
- var clear = function(search) {
- // Show recently viewed
- mainElement.classList.remove('d-none');
- // Hide results
- resultsElement.classList.add('d-none');
- // Hide empty message
- emptyElement.classList.add('d-none');
- }
- var handlePreferences = function() {
- // Preference show handler
- preferencesShowElement.addEventListener('click', function() {
- wrapperElement.classList.add('d-none');
- preferencesElement.classList.remove('d-none');
- });
- // Preference dismiss handler
- preferencesDismissElement.addEventListener('click', function() {
- wrapperElement.classList.remove('d-none');
- preferencesElement.classList.add('d-none');
- });
- }
- var handleAdvancedOptionsForm = function() {
- // Show
- advancedOptionsFormShowElement.addEventListener('click', function() {
- wrapperElement.classList.add('d-none');
- advancedOptionsFormElement.classList.remove('d-none');
- });
- // Cancel
- advancedOptionsFormCancelElement.addEventListener('click', function() {
- wrapperElement.classList.remove('d-none');
- advancedOptionsFormElement.classList.add('d-none');
- });
- // Search
- advancedOptionsFormSearchElement.addEventListener('click', function() {
-
- });
- }
- // Public methods
- return {
- init: function() {
- // Elements
- element = document.querySelector('#kt_header_search');
- if (!element) {
- return;
- }
- wrapperElement = element.querySelector('[data-kt-search-element="wrapper"]');
- formElement = element.querySelector('[data-kt-search-element="form"]');
- mainElement = element.querySelector('[data-kt-search-element="main"]');
- resultsElement = element.querySelector('[data-kt-search-element="results"]');
- emptyElement = element.querySelector('[data-kt-search-element="empty"]');
- preferencesElement = element.querySelector('[data-kt-search-element="preferences"]');
- preferencesShowElement = element.querySelector('[data-kt-search-element="preferences-show"]');
- preferencesDismissElement = element.querySelector('[data-kt-search-element="preferences-dismiss"]');
- advancedOptionsFormElement = element.querySelector('[data-kt-search-element="advanced-options-form"]');
- advancedOptionsFormShowElement = element.querySelector('[data-kt-search-element="advanced-options-form-show"]');
- advancedOptionsFormCancelElement = element.querySelector('[data-kt-search-element="advanced-options-form-cancel"]');
- advancedOptionsFormSearchElement = element.querySelector('[data-kt-search-element="advanced-options-form-search"]');
-
- // Initialize search handler
- searchObject = new KTSearch(element);
- // Search handler
- searchObject.on('kt.search.process', processs);
- // Clear handler
- searchObject.on('kt.search.clear', clear);
- // Custom handlers
- handlePreferences();
- handleAdvancedOptionsForm();
- }
- };
- }();
- // On document ready
- KTUtil.onDOMContentLoaded(function() {
- KTLayoutSearch.init();
- });
- "use strict";
- // Class definition
- var KTAppSidebar = function () {
- // Private variables
- var toggle;
- var sidebar;
- var headerMenu;
- var menuDashboardsCollapse;
- var menuWrapper;
- // Private functions
- // Handle sidebar minimize mode toggle
- var handleToggle = function () {
- var toggleObj = KTToggle.getInstance(toggle);
- var headerMenuObj = KTMenu.getInstance(headerMenu);
- if ( toggleObj === null || headerMenuObj === null ) {
- return;
- }
- // Add a class to prevent sidebar hover effect after toggle click
- toggleObj.on('kt.toggle.change', function() {
- // Set animation state
- sidebar.classList.add('animating');
-
- // Wait till animation finishes
- setTimeout(function() {
- // Remove animation state
- sidebar.classList.remove('animating');
- }, 300);
- // Prevent header menu dropdown display on hover
- if (headerMenuObj) {
- headerMenuObj.disable();
- // Timeout to enable header menu
- setTimeout(function() {
- headerMenuObj.enable();
- }, 1000);
- }
- });
- // Store sidebar minimize state in cookie
- toggleObj.on('kt.toggle.changed', function() {
- // In server side check sidebar_minimize_state cookie
- // value and add data-kt-app-sidebar-minimize="on"
- // attribute to Body tag and "active" class to the toggle button
- var date = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000); // 30 days from now
- KTCookie.set("sidebar_minimize_state", toggleObj.isEnabled() ? "on" : "off", {expires: date});
- });
- }
- // Handle dashboards menu items collapse mode
- var handleShowMore = function() {
- menuDashboardsCollapse.addEventListener('hide.bs.collapse', event => {
- menuWrapper.scrollTo({
- top: 0,
- behavior: 'instant'
- });
- });
- }
- var handleMenuScroll = function() {
- var menuActiveItem = menuWrapper.querySelector(".menu-link.active");
- if ( !menuActiveItem ) {
- return;
- }
- if ( KTUtil.isVisibleInContainer(menuActiveItem, menuWrapper) === true) {
- return;
- }
- menuWrapper.scroll({
- top: KTUtil.getRelativeTopPosition(menuActiveItem, menuWrapper),
- behavior: 'smooth'
- });
- }
- // Public methods
- return {
- init: function () {
- // Elements
- sidebar = document.querySelector('#kt_app_sidebar');
- toggle = document.querySelector('#kt_app_sidebar_toggle');
- headerMenu = document.querySelector('#kt_app_header_menu');
- menuDashboardsCollapse = document.querySelector('#kt_app_sidebar_menu_dashboards_collapse');
- menuWrapper = document.querySelector('#kt_app_sidebar_menu_wrapper');
-
- if ( sidebar === null ) {
- return;
- }
- if ( toggle ) {
- handleToggle();
- }
- if ( menuWrapper ) {
- handleMenuScroll();
- }
- if ( menuDashboardsCollapse ) {
- handleShowMore();
- }
- }
- };
- }();
- "use strict";
- // Class definition
- var KTThemeMode = function () {
- var menu;
- var callbacks = [];
- var the = this;
- var element;
- var getParamName = function(postfix) {
- var name = document.body.hasAttribute("data-kt-name") ? document.body.getAttribute("data-kt-name") + "_" : "";
- return "kt_" + name + "theme_mode" + "_" + postfix;
- }
- var getMode = function() {
- var modeParam = getParamName("value");
- var menuMode = getMenuMode();
- if ( localStorage.getItem(modeParam) !== null ) {
- return localStorage.getItem(modeParam);
- }
- if ( element.hasAttribute("data-theme") ) {
- return element.getAttribute("data-theme");
- }
- if ( menuMode ) {
- if ( menuMode === "system" ) {
- return getSystemMode();
- } else {
- return menuMode;
- }
- }
- return "light";
- }
- var setMode = function(mode, menuMode) {
- // Check input values
- if ( mode !== "light" && mode !== "dark" ) {
- return;
- }
- // Get param names
- var modeParam = getParamName("value");
- var menuModeParam = getParamName("menu");
- // Reset mode if system mode was changed
- if ( menuMode === 'system') {
- if ( getSystemMode() !== mode ) {
- mode = getSystemMode();
- }
- }
-
- // Check menu mode
- if ( !menuMode) {
- menuMode = mode;
- }
- // Read active menu mode value
- var activeMenuItem = menu ? menu.querySelector('[data-kt-element="mode"][data-kt-value="' + menuMode + '"]') : null;
- // Enable switching state
- element.setAttribute("data-kt-theme-mode-switching", "true");
-
- // Set mode to the target element
- element.setAttribute("data-theme", mode);
- // Disable switching state
- setTimeout(function() {
- element.removeAttribute("data-kt-theme-mode-switching");
- }, 300);
-
- // Store mode value in storage
- localStorage.setItem(modeParam, mode);
-
- // Set active menu item
- if ( activeMenuItem ) {
- localStorage.setItem(menuModeParam, menuMode);
- setActiveMenuItem(activeMenuItem);
- }
- }
- var getMenuMode = function() {
- var menuModeParam = getParamName("menu");
- var menuItem = menu ? menu.querySelector('.active[data-kt-element="mode"]') : null;
- if ( menuItem && menuItem.getAttribute('data-kt-value') ) {
- return menuItem.getAttribute('data-kt-value');
- }
- if ( localStorage.getItem(menuModeParam) !== null ) {
- return localStorage.getItem(menuModeParam);
- }
- return "";
- }
- var getSystemMode = function() {
- return window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light";
- }
- var initMode = function() {
- setMode(getMode(), getMenuMode());
- KTEventHandler.trigger(element, 'kt.thememode.init', the);
- }
- var getActiveMenuItem = function() {
- return menu.querySelector('[data-kt-element="mode"][data-kt-value="' + getMenuMode() + '"]');
- }
- var setActiveMenuItem = function(item) {
- var menuModeParam = getParamName("menu");
- var menuMode = item.getAttribute("data-kt-value");
-
- var activeItem = menu.querySelector('.active[data-kt-element="mode"]');
- if ( activeItem ) {
- activeItem.classList.remove("active");
- }
- item.classList.add("active");
- localStorage.setItem(menuModeParam, menuMode);
- }
- var handleMenu = function() {
- var param = getParamName("menu");
- var items = [].slice.call(menu.querySelectorAll('[data-kt-element="mode"]'));
- items.map(function (item) {
- item.addEventListener("click", function(e) {
- e.preventDefault();
- var menuMode = item.getAttribute("data-kt-value");
- var mode = menuMode;
- if ( menuMode === "system") {
- mode = getSystemMode();
- }
- setMode(mode, menuMode);
- KTEventHandler.trigger(element, 'kt.thememode.change', the);
- });
- });
- }
- return {
- init: function () {
- menu = document.querySelector('[data-kt-element="theme-mode-menu"]');
- element = document.documentElement;
- initMode();
- if (menu) {
- handleMenu();
- }
- },
- getMode: function () {
- return getMode();
- },
- getMenuMode: function() {
- return getMenuMode();
- },
- getSystemMode: function () {
- return getSystemMode();
- },
- setMode: function(mode) {
- return setMode(mode)
- },
- on: function(name, handler) {
- return KTEventHandler.on(element, name, handler);
- },
- off: function(name, handlerId) {
- return KTEventHandler.off(element, name, handlerId);
- }
- };
- }();
- // Initialize app on document ready
- KTUtil.onDOMContentLoaded(function () {
- KTThemeMode.init();
- });
- // Declare KTThemeMode for Webpack support
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = KTThemeMode;
- }
- "use strict";
- // Class definition
- var KTLayoutToolbar = function () {
- // Private variables
- var toolbar;
- // Private functions
- var initForm = function () {
- var rangeSlider = document.querySelector("#kt_app_toolbar_slider");
- var rangeSliderValueElement = document.querySelector("#kt_app_toolbar_slider_value");
- if (!rangeSlider) {
- return;
- }
- noUiSlider.create(rangeSlider, {
- start: [5],
- connect: [true, false],
- step: 1,
- format: wNumb({
- decimals: 1
- }),
- range: {
- min: [1],
- max: [10]
- }
- });
- rangeSlider.noUiSlider.on("update", function (values, handle) {
- rangeSliderValueElement.innerHTML = values[handle];
- });
- var handle = rangeSlider.querySelector(".noUi-handle");
- handle.setAttribute("tabindex", 0);
- handle.addEventListener("click", function () {
- this.focus();
- });
- handle.addEventListener("keydown", function (event) {
- var value = Number(rangeSlider.noUiSlider.get());
- switch (event.which) {
- case 37:
- rangeSlider.noUiSlider.set(value - 1);
- break;
- case 39:
- rangeSlider.noUiSlider.set(value + 1);
- break;
- }
- });
- }
- // Public methods
- return {
- init: function () {
- // Elements
- toolbar = document.querySelector('#kt_app_toolbar');
- if (!toolbar) {
- return;
- }
- initForm();
- }
- };
- }();
- // On document ready
- KTUtil.onDOMContentLoaded(function () {
- KTLayoutToolbar.init();
- });
|