1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656 |
- (function (factory) {
- "use strict";
- if (typeof define === 'function' && define.amd) {
- define(['jquery'], factory);
- }
- else if(typeof module !== 'undefined' && module.exports) {
- module.exports = factory(require('jquery'));
- }
- else {
- factory(jQuery);
- }
- }(function ($, undefined) {
- "use strict";
-
- if($.jstree) {
- return;
- }
-
-
- var instance_counter = 0,
- ccp_node = false,
- ccp_mode = false,
- ccp_inst = false,
- themes_loaded = [],
- src = $('script:last').attr('src'),
- document = window.document;
- var setImmediate = window.setImmediate;
- var Promise = window.Promise;
- if (!setImmediate && Promise) {
-
- setImmediate = function (cb, arg) {
- Promise.resolve(arg).then(cb);
- };
- }
-
- $.jstree = {
-
- version : '3.3.11',
-
- defaults : {
-
- plugins : []
- },
-
- plugins : {},
- path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '',
- idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,
- root : '#'
- };
-
-
- $.jstree.create = function (el, options) {
- var tmp = new $.jstree.core(++instance_counter),
- opt = options;
- options = $.extend(true, {}, $.jstree.defaults, options);
- if(opt && opt.plugins) {
- options.plugins = opt.plugins;
- }
- $.each(options.plugins, function (i, k) {
- if(i !== 'core') {
- tmp = tmp.plugin(k, options[k]);
- }
- });
- $(el).data('jstree', tmp);
- tmp.init(el, options);
- return tmp;
- };
-
- $.jstree.destroy = function () {
- $('.jstree:jstree').jstree('destroy');
- $(document).off('.jstree');
- };
-
- $.jstree.core = function (id) {
- this._id = id;
- this._cnt = 0;
- this._wrk = null;
- this._data = {
- core : {
- themes : {
- name : false,
- dots : false,
- icons : false,
- ellipsis : false
- },
- selected : [],
- last_error : {},
- working : false,
- worker_queue : [],
- focused : null
- }
- };
- };
-
- $.jstree.reference = function (needle) {
- var tmp = null,
- obj = null;
- if(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }
- if(!obj || !obj.length) {
- try { obj = $(needle); } catch (ignore) { }
- }
- if(!obj || !obj.length) {
- try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { }
- }
- if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {
- tmp = obj;
- }
- else {
- $('.jstree').each(function () {
- var inst = $(this).data('jstree');
- if(inst && inst._model.data[needle]) {
- tmp = inst;
- return false;
- }
- });
- }
- return tmp;
- };
-
- $.fn.jstree = function (arg) {
-
- var is_method = (typeof arg === 'string'),
- args = Array.prototype.slice.call(arguments, 1),
- result = null;
- if(arg === true && !this.length) { return false; }
- this.each(function () {
-
- var instance = $.jstree.reference(this),
- method = is_method && instance ? instance[arg] : null;
-
- result = is_method && method ?
- method.apply(instance, args) :
- null;
-
- if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {
- $.jstree.create(this, arg);
- }
-
- if( (instance && !is_method) || arg === true ) {
- result = instance || false;
- }
-
- if(result !== null && result !== undefined) {
- return false;
- }
- });
-
- return result !== null && result !== undefined ?
- result : this;
- };
-
- $.expr.pseudos.jstree = $.expr.createPseudo(function(search) {
- return function(a) {
- return $(a).hasClass('jstree') &&
- $(a).data('jstree') !== undefined;
- };
- });
-
- $.jstree.defaults.core = {
-
- data : false,
-
- strings : false,
-
- check_callback : false,
-
- error : $.noop,
-
- animation : 200,
-
- multiple : true,
-
- themes : {
-
- name : false,
-
- url : false,
-
- dir : false,
-
- dots : true,
-
- icons : true,
-
- ellipsis : false,
-
- stripes : false,
-
- variant : false,
-
- responsive : false
- },
-
- expand_selected_onload : true,
-
- worker : true,
-
- force_text : false,
-
- dblclick_toggle : true,
-
- loaded_state : false,
-
- restore_focus : true,
-
- compute_elements_positions : false,
-
- keyboard : {
- 'ctrl-space': function (e) {
-
- e.type = "click";
- $(e.currentTarget).trigger(e);
- },
- 'enter': function (e) {
-
- e.type = "click";
- $(e.currentTarget).trigger(e);
- },
- 'left': function (e) {
-
- e.preventDefault();
- if(this.is_open(e.currentTarget)) {
- this.close_node(e.currentTarget);
- }
- else {
- var o = this.get_parent(e.currentTarget);
- if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }
- }
- },
- 'up': function (e) {
-
- e.preventDefault();
- var o = this.get_prev_dom(e.currentTarget);
- if(o && o.length) { o.children('.jstree-anchor').focus(); }
- },
- 'right': function (e) {
-
- e.preventDefault();
- if(this.is_closed(e.currentTarget)) {
- this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
- }
- else if (this.is_open(e.currentTarget)) {
- var o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
- if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
- }
- },
- 'down': function (e) {
-
- e.preventDefault();
- var o = this.get_next_dom(e.currentTarget);
- if(o && o.length) { o.children('.jstree-anchor').focus(); }
- },
- '*': function (e) {
-
- this.open_all();
- },
- 'home': function (e) {
-
- e.preventDefault();
- var o = this._firstChild(this.get_container_ul()[0]);
- if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
- },
- 'end': function (e) {
-
- e.preventDefault();
- this.element.find('.jstree-anchor').filter(':visible').last().focus();
- },
- 'f2': function (e) {
-
- e.preventDefault();
- this.edit(e.currentTarget);
- }
- }
- };
- $.jstree.core.prototype = {
-
- plugin : function (deco, opts) {
- var Child = $.jstree.plugins[deco];
- if(Child) {
- this._data[deco] = {};
- Child.prototype = this;
- return new Child(opts, this);
- }
- return this;
- },
-
- init : function (el, options) {
- this._model = {
- data : {},
- changed : [],
- force_full_redraw : false,
- redraw_timeout : false,
- default_state : {
- loaded : true,
- opened : false,
- selected : false,
- disabled : false
- }
- };
- this._model.data[$.jstree.root] = {
- id : $.jstree.root,
- parent : null,
- parents : [],
- children : [],
- children_d : [],
- state : { loaded : false }
- };
- this.element = $(el).addClass('jstree jstree-' + this._id);
- this.settings = options;
- this._data.core.ready = false;
- this._data.core.loaded = false;
- this._data.core.rtl = (this.element.css("direction") === "rtl");
- this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl");
- this.element.attr('role','tree');
- if(this.settings.core.multiple) {
- this.element.attr('aria-multiselectable', true);
- }
- if(!this.element.attr('tabindex')) {
- this.element.attr('tabindex','0');
- }
- this.bind();
-
- this.trigger("init");
- this._data.core.original_container_html = this.element.find(" > ul > li").clone(true);
- this._data.core.original_container_html
- .find("li").addBack()
- .contents().filter(function() {
- return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue));
- })
- .remove();
- this.element.html("<"+"ul class='jstree-container-ul jstree-children' role='group'><"+"li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='none'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' role='treeitem' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
- this.element.attr('aria-activedescendant','j' + this._id + '_loading');
- this._data.core.li_height = this.get_container_ul().children("li").first().outerHeight() || 24;
- this._data.core.node = this._create_prototype_node();
-
- this.trigger("loading");
- this.load_node($.jstree.root);
- },
-
- destroy : function (keep_html) {
-
- this.trigger("destroy");
- if(this._wrk) {
- try {
- window.URL.revokeObjectURL(this._wrk);
- this._wrk = null;
- }
- catch (ignore) { }
- }
- if(!keep_html) { this.element.empty(); }
- this.teardown();
- },
-
- _create_prototype_node : function () {
- var _node = document.createElement('LI'), _temp1, _temp2;
- _node.setAttribute('role', 'none');
- _temp1 = document.createElement('I');
- _temp1.className = 'jstree-icon jstree-ocl';
- _temp1.setAttribute('role', 'presentation');
- _node.appendChild(_temp1);
- _temp1 = document.createElement('A');
- _temp1.className = 'jstree-anchor';
- _temp1.setAttribute('href','#');
- _temp1.setAttribute('tabindex','-1');
- _temp1.setAttribute('role', 'treeitem');
- _temp2 = document.createElement('I');
- _temp2.className = 'jstree-icon jstree-themeicon';
- _temp2.setAttribute('role', 'presentation');
- _temp1.appendChild(_temp2);
- _node.appendChild(_temp1);
- _temp1 = _temp2 = null;
- return _node;
- },
- _kbevent_to_func : function (e) {
- var keys = {
- 8: "Backspace", 9: "Tab", 13: "Enter", 19: "Pause", 27: "Esc",
- 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home",
- 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "Print", 45: "Insert",
- 46: "Delete", 96: "Numpad0", 97: "Numpad1", 98: "Numpad2", 99 : "Numpad3",
- 100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7",
- 104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1",
- 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7",
- 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock",
- 145: "Scrolllock", 16: 'Shift', 17: 'Ctrl', 18: 'Alt',
- 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',
- 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',
- 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',
- 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',
- 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
- 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
- 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',
- 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*', 173: '-'
- };
- var parts = [];
- if (e.ctrlKey) { parts.push('ctrl'); }
- if (e.altKey) { parts.push('alt'); }
- if (e.shiftKey) { parts.push('shift'); }
- parts.push(keys[e.which] || e.which);
- parts = parts.sort().join('-').toLowerCase();
- if (parts === 'shift-shift' || parts === 'ctrl-ctrl' || parts === 'alt-alt') {
- return null;
- }
- var kb = this.settings.core.keyboard, i, tmp;
- for (i in kb) {
- if (kb.hasOwnProperty(i)) {
- tmp = i;
- if (tmp !== '-' && tmp !== '+') {
- tmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS');
- tmp = tmp.split(/-|\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase();
- }
- if (tmp === parts) {
- return kb[i];
- }
- }
- }
- return null;
- },
-
- teardown : function () {
- this.unbind();
- this.element
- .removeClass('jstree')
- .removeData('jstree')
- .find("[class^='jstree']")
- .addBack()
- .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
- this.element = null;
- },
-
- bind : function () {
- var word = '',
- tout = null,
- was_click = 0;
- this.element
- .on("dblclick.jstree", function (e) {
- if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
- if(document.selection && document.selection.empty) {
- document.selection.empty();
- }
- else {
- if(window.getSelection) {
- var sel = window.getSelection();
- try {
- sel.removeAllRanges();
- sel.collapse();
- } catch (ignore) { }
- }
- }
- })
- .on("mousedown.jstree", $.proxy(function (e) {
- if(e.target === this.element[0]) {
- e.preventDefault();
- was_click = +(new Date());
- }
- }, this))
- .on("mousedown.jstree", ".jstree-ocl", function (e) {
- e.preventDefault();
- })
- .on("click.jstree", ".jstree-ocl", $.proxy(function (e) {
- this.toggle_node(e.target);
- }, this))
- .on("dblclick.jstree", ".jstree-anchor", $.proxy(function (e) {
- if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
- if(this.settings.core.dblclick_toggle) {
- this.toggle_node(e.target);
- }
- }, this))
- .on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
- e.preventDefault();
- if(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }
- this.activate_node(e.currentTarget, e);
- }, this))
- .on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {
- if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
- if(this._data.core.rtl) {
- if(e.which === 37) { e.which = 39; }
- else if(e.which === 39) { e.which = 37; }
- }
- var f = this._kbevent_to_func(e);
- if (f) {
- var r = f.call(this, e);
- if (r === false || r === true) {
- return r;
- }
- }
- }, this))
- .on("load_node.jstree", $.proxy(function (e, data) {
- if(data.status) {
- if(data.node.id === $.jstree.root && !this._data.core.loaded) {
- this._data.core.loaded = true;
- if(this._firstChild(this.get_container_ul()[0])) {
- this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
- }
-
- this.trigger("loaded");
- }
- if(!this._data.core.ready) {
- setTimeout($.proxy(function() {
- if(this.element && !this.get_container_ul().find('.jstree-loading').length) {
- this._data.core.ready = true;
- if(this._data.core.selected.length) {
- if(this.settings.core.expand_selected_onload) {
- var tmp = [], i, j;
- for(i = 0, j = this._data.core.selected.length; i < j; i++) {
- tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);
- }
- tmp = $.vakata.array_unique(tmp);
- for(i = 0, j = tmp.length; i < j; i++) {
- this.open_node(tmp[i], false, 0);
- }
- }
- this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });
- }
-
- this.trigger("ready");
- }
- }, this), 0);
- }
- }
- }, this))
-
- .on('keypress.jstree', $.proxy(function (e) {
- if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
- if(tout) { clearTimeout(tout); }
- tout = setTimeout(function () {
- word = '';
- }, 500);
- var chr = String.fromCharCode(e.which).toLowerCase(),
- col = this.element.find('.jstree-anchor').filter(':visible'),
- ind = col.index(document.activeElement) || 0,
- end = false;
- word += chr;
-
- if(word.length > 1) {
- col.slice(ind).each($.proxy(function (i, v) {
- if($(v).text().toLowerCase().indexOf(word) === 0) {
- $(v).focus();
- end = true;
- return false;
- }
- }, this));
- if(end) { return; }
-
- col.slice(0, ind).each($.proxy(function (i, v) {
- if($(v).text().toLowerCase().indexOf(word) === 0) {
- $(v).focus();
- end = true;
- return false;
- }
- }, this));
- if(end) { return; }
- }
-
- if(new RegExp('^' + chr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '+$').test(word)) {
-
- col.slice(ind + 1).each($.proxy(function (i, v) {
- if($(v).text().toLowerCase().charAt(0) === chr) {
- $(v).focus();
- end = true;
- return false;
- }
- }, this));
- if(end) { return; }
-
- col.slice(0, ind + 1).each($.proxy(function (i, v) {
- if($(v).text().toLowerCase().charAt(0) === chr) {
- $(v).focus();
- end = true;
- return false;
- }
- }, this));
- if(end) { return; }
- }
- }, this))
-
- .on("init.jstree", $.proxy(function () {
- var s = this.settings.core.themes;
- this._data.core.themes.dots = s.dots;
- this._data.core.themes.stripes = s.stripes;
- this._data.core.themes.icons = s.icons;
- this._data.core.themes.ellipsis = s.ellipsis;
- this.set_theme(s.name || "default", s.url);
- this.set_theme_variant(s.variant);
- }, this))
- .on("loading.jstree", $.proxy(function () {
- this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ]();
- this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ]();
- this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ]();
- this[ this._data.core.themes.ellipsis ? "show_ellipsis" : "hide_ellipsis" ]();
- }, this))
- .on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
- this._data.core.focused = null;
- $(e.currentTarget).filter('.jstree-hovered').trigger('mouseleave');
- this.element.attr('tabindex', '0');
- }, this))
- .on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {
- var tmp = this.get_node(e.currentTarget);
- if(tmp && tmp.id) {
- this._data.core.focused = tmp.id;
- }
- this.element.find('.jstree-hovered').not(e.currentTarget).trigger('mouseleave');
- $(e.currentTarget).trigger('mouseenter');
- this.element.attr('tabindex', '-1');
- }, this))
- .on('focus.jstree', $.proxy(function () {
- if(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) {
- was_click = 0;
- var act = this.get_node(this.element.attr('aria-activedescendant'), true);
- if(act) {
- act.find('> .jstree-anchor').focus();
- }
- }
- }, this))
- .on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {
- this.hover_node(e.currentTarget);
- }, this))
- .on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {
- this.dehover_node(e.currentTarget);
- }, this));
- },
-
- unbind : function () {
- this.element.off('.jstree');
- $(document).off('.jstree-' + this._id);
- },
-
- trigger : function (ev, data) {
- if(!data) {
- data = {};
- }
- data.instance = this;
- this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);
- },
-
- get_container : function () {
- return this.element;
- },
-
- get_container_ul : function () {
- return this.element.children(".jstree-children").first();
- },
-
- get_string : function (key) {
- var a = this.settings.core.strings;
- if($.isFunction(a)) { return a.call(this, key); }
- if(a && a[key]) { return a[key]; }
- return key;
- },
-
- _firstChild : function (dom) {
- dom = dom ? dom.firstChild : null;
- while(dom !== null && dom.nodeType !== 1) {
- dom = dom.nextSibling;
- }
- return dom;
- },
-
- _nextSibling : function (dom) {
- dom = dom ? dom.nextSibling : null;
- while(dom !== null && dom.nodeType !== 1) {
- dom = dom.nextSibling;
- }
- return dom;
- },
-
- _previousSibling : function (dom) {
- dom = dom ? dom.previousSibling : null;
- while(dom !== null && dom.nodeType !== 1) {
- dom = dom.previousSibling;
- }
- return dom;
- },
-
- get_node : function (obj, as_dom) {
- if(obj && obj.id) {
- obj = obj.id;
- }
- if (obj instanceof $ && obj.length && obj[0].id) {
- obj = obj[0].id;
- }
- var dom;
- try {
- if(this._model.data[obj]) {
- obj = this._model.data[obj];
- }
- else if(typeof obj === "string" && this._model.data[obj.replace(/^#/, '')]) {
- obj = this._model.data[obj.replace(/^#/, '')];
- }
- else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
- obj = this._model.data[dom.closest('.jstree-node').attr('id')];
- }
- else if((dom = this.element.find(obj)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
- obj = this._model.data[dom.closest('.jstree-node').attr('id')];
- }
- else if((dom = this.element.find(obj)).length && dom.hasClass('jstree')) {
- obj = this._model.data[$.jstree.root];
- }
- else {
- return false;
- }
- if(as_dom) {
- obj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
- }
- return obj;
- } catch (ex) { return false; }
- },
-
- get_path : function (obj, glue, ids) {
- obj = obj.parents ? obj : this.get_node(obj);
- if(!obj || obj.id === $.jstree.root || !obj.parents) {
- return false;
- }
- var i, j, p = [];
- p.push(ids ? obj.id : obj.text);
- for(i = 0, j = obj.parents.length; i < j; i++) {
- p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));
- }
- p = p.reverse().slice(1);
- return glue ? p.join(glue) : p;
- },
-
- get_next_dom : function (obj, strict) {
- var tmp;
- obj = this.get_node(obj, true);
- if(obj[0] === this.element[0]) {
- tmp = this._firstChild(this.get_container_ul()[0]);
- while (tmp && tmp.offsetHeight === 0) {
- tmp = this._nextSibling(tmp);
- }
- return tmp ? $(tmp) : false;
- }
- if(!obj || !obj.length) {
- return false;
- }
- if(strict) {
- tmp = obj[0];
- do {
- tmp = this._nextSibling(tmp);
- } while (tmp && tmp.offsetHeight === 0);
- return tmp ? $(tmp) : false;
- }
- if(obj.hasClass("jstree-open")) {
- tmp = this._firstChild(obj.children('.jstree-children')[0]);
- while (tmp && tmp.offsetHeight === 0) {
- tmp = this._nextSibling(tmp);
- }
- if(tmp !== null) {
- return $(tmp);
- }
- }
- tmp = obj[0];
- do {
- tmp = this._nextSibling(tmp);
- } while (tmp && tmp.offsetHeight === 0);
- if(tmp !== null) {
- return $(tmp);
- }
- return obj.parentsUntil(".jstree",".jstree-node").nextAll(".jstree-node:visible").first();
- },
-
- get_prev_dom : function (obj, strict) {
- var tmp;
- obj = this.get_node(obj, true);
- if(obj[0] === this.element[0]) {
- tmp = this.get_container_ul()[0].lastChild;
- while (tmp && tmp.offsetHeight === 0) {
- tmp = this._previousSibling(tmp);
- }
- return tmp ? $(tmp) : false;
- }
- if(!obj || !obj.length) {
- return false;
- }
- if(strict) {
- tmp = obj[0];
- do {
- tmp = this._previousSibling(tmp);
- } while (tmp && tmp.offsetHeight === 0);
- return tmp ? $(tmp) : false;
- }
- tmp = obj[0];
- do {
- tmp = this._previousSibling(tmp);
- } while (tmp && tmp.offsetHeight === 0);
- if(tmp !== null) {
- obj = $(tmp);
- while(obj.hasClass("jstree-open")) {
- obj = obj.children(".jstree-children").first().children(".jstree-node:visible:last");
- }
- return obj;
- }
- tmp = obj[0].parentNode.parentNode;
- return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;
- },
-
- get_parent : function (obj) {
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- return obj.parent;
- },
-
- get_children_dom : function (obj) {
- obj = this.get_node(obj, true);
- if(obj[0] === this.element[0]) {
- return this.get_container_ul().children(".jstree-node");
- }
- if(!obj || !obj.length) {
- return false;
- }
- return obj.children(".jstree-children").children(".jstree-node");
- },
-
- is_parent : function (obj) {
- obj = this.get_node(obj);
- return obj && (obj.state.loaded === false || obj.children.length > 0);
- },
-
- is_loaded : function (obj) {
- obj = this.get_node(obj);
- return obj && obj.state.loaded;
- },
-
- is_loading : function (obj) {
- obj = this.get_node(obj);
- return obj && obj.state && obj.state.loading;
- },
-
- is_open : function (obj) {
- obj = this.get_node(obj);
- return obj && obj.state.opened;
- },
-
- is_closed : function (obj) {
- obj = this.get_node(obj);
- return obj && this.is_parent(obj) && !obj.state.opened;
- },
-
- is_leaf : function (obj) {
- return !this.is_parent(obj);
- },
-
- load_node : function (obj, callback) {
- var k, l, i, j, c;
- if($.isArray(obj)) {
- this._load_nodes(obj.slice(), callback);
- return true;
- }
- obj = this.get_node(obj);
- if(!obj) {
- if(callback) { callback.call(this, obj, false); }
- return false;
- }
-
- if(obj.state.loaded) {
- obj.state.loaded = false;
- for(i = 0, j = obj.parents.length; i < j; i++) {
- this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
- return $.inArray(v, obj.children_d) === -1;
- });
- }
- for(k = 0, l = obj.children_d.length; k < l; k++) {
- if(this._model.data[obj.children_d[k]].state.selected) {
- c = true;
- }
- delete this._model.data[obj.children_d[k]];
- }
- if (c) {
- this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
- return $.inArray(v, obj.children_d) === -1;
- });
- }
- obj.children = [];
- obj.children_d = [];
- if(c) {
- this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });
- }
- }
- obj.state.failed = false;
- obj.state.loading = true;
- this.get_node(obj, true).addClass("jstree-loading").attr('aria-busy',true);
- this._load_node(obj, $.proxy(function (status) {
- obj = this._model.data[obj.id];
- obj.state.loading = false;
- obj.state.loaded = status;
- obj.state.failed = !obj.state.loaded;
- var dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;
- for(i = 0, j = obj.children.length; i < j; i++) {
- if(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {
- has_children = true;
- break;
- }
- }
- if(obj.state.loaded && dom && dom.length) {
- dom.removeClass('jstree-closed jstree-open jstree-leaf');
- if (!has_children) {
- dom.addClass('jstree-leaf');
- }
- else {
- if (obj.id !== '#') {
- dom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');
- }
- }
- }
- dom.removeClass("jstree-loading").attr('aria-busy',false);
-
- this.trigger('load_node', { "node" : obj, "status" : status });
- if(callback) {
- callback.call(this, obj, status);
- }
- }, this));
- return true;
- },
-
- _load_nodes : function (nodes, callback, is_callback, force_reload) {
- var r = true,
- c = function () { this._load_nodes(nodes, callback, true); },
- m = this._model.data, i, j, tmp = [];
- for(i = 0, j = nodes.length; i < j; i++) {
- if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {
- if(!this.is_loading(nodes[i])) {
- this.load_node(nodes[i], c);
- }
- r = false;
- }
- }
- if(r) {
- for(i = 0, j = nodes.length; i < j; i++) {
- if(m[nodes[i]] && m[nodes[i]].state.loaded) {
- tmp.push(nodes[i]);
- }
- }
- if(callback && !callback.done) {
- callback.call(this, tmp);
- callback.done = true;
- }
- }
- },
-
- load_all : function (obj, callback) {
- if(!obj) { obj = $.jstree.root; }
- obj = this.get_node(obj);
- if(!obj) { return false; }
- var to_load = [],
- m = this._model.data,
- c = m[obj.id].children_d,
- i, j;
- if(obj.state && !obj.state.loaded) {
- to_load.push(obj.id);
- }
- for(i = 0, j = c.length; i < j; i++) {
- if(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {
- to_load.push(c[i]);
- }
- }
- if(to_load.length) {
- this._load_nodes(to_load, function () {
- this.load_all(obj, callback);
- });
- }
- else {
-
- if(callback) { callback.call(this, obj); }
- this.trigger('load_all', { "node" : obj });
- }
- },
-
- _load_node : function (obj, callback) {
- var s = this.settings.core.data, t;
- var notTextOrCommentNode = function notTextOrCommentNode () {
- return this.nodeType !== 3 && this.nodeType !== 8;
- };
-
- if(!s) {
- if(obj.id === $.jstree.root) {
- return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {
- callback.call(this, status);
- });
- }
- else {
- return callback.call(this, false);
- }
-
- }
- if($.isFunction(s)) {
- return s.call(this, obj, $.proxy(function (d) {
- if(d === false) {
- callback.call(this, false);
- }
- else {
- this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {
- callback.call(this, status);
- });
- }
-
- }, this));
- }
- if(typeof s === 'object') {
- if(s.url) {
- s = $.extend(true, {}, s);
- if($.isFunction(s.url)) {
- s.url = s.url.call(this, obj);
- }
- if($.isFunction(s.data)) {
- s.data = s.data.call(this, obj);
- }
- return $.ajax(s)
- .done($.proxy(function (d,t,x) {
- var type = x.getResponseHeader('Content-Type');
- if((type && type.indexOf('json') !== -1) || typeof d === "object") {
- return this._append_json_data(obj, d, function (status) { callback.call(this, status); });
-
- }
- if((type && type.indexOf('html') !== -1) || typeof d === "string") {
- return this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });
-
- }
- this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };
- this.settings.core.error.call(this, this._data.core.last_error);
- return callback.call(this, false);
- }, this))
- .fail($.proxy(function (f) {
- this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };
- callback.call(this, false);
- this.settings.core.error.call(this, this._data.core.last_error);
- }, this));
- }
- if ($.isArray(s)) {
- t = $.extend(true, [], s);
- } else if ($.isPlainObject(s)) {
- t = $.extend(true, {}, s);
- } else {
- t = s;
- }
- if(obj.id === $.jstree.root) {
- return this._append_json_data(obj, t, function (status) {
- callback.call(this, status);
- });
- }
- else {
- this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
- this.settings.core.error.call(this, this._data.core.last_error);
- return callback.call(this, false);
- }
-
- }
- if(typeof s === 'string') {
- if(obj.id === $.jstree.root) {
- return this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {
- callback.call(this, status);
- });
- }
- else {
- this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
- this.settings.core.error.call(this, this._data.core.last_error);
- return callback.call(this, false);
- }
-
- }
- return callback.call(this, false);
- },
-
- _node_changed : function (obj) {
- obj = this.get_node(obj);
- if (obj && $.inArray(obj.id, this._model.changed) === -1) {
- this._model.changed.push(obj.id);
- }
- },
-
- _append_html_data : function (dom, data, cb) {
- dom = this.get_node(dom);
- dom.children = [];
- dom.children_d = [];
- var dat = data.is('ul') ? data.children() : data,
- par = dom.id,
- chd = [],
- dpc = [],
- m = this._model.data,
- p = m[par],
- s = this._data.core.selected.length,
- tmp, i, j;
- dat.each($.proxy(function (i, v) {
- tmp = this._parse_model_from_html($(v), par, p.parents.concat());
- if(tmp) {
- chd.push(tmp);
- dpc.push(tmp);
- if(m[tmp].children_d.length) {
- dpc = dpc.concat(m[tmp].children_d);
- }
- }
- }, this));
- p.children = chd;
- p.children_d = dpc;
- for(i = 0, j = p.parents.length; i < j; i++) {
- m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
- }
-
- this.trigger('model', { "nodes" : dpc, 'parent' : par });
- if(par !== $.jstree.root) {
- this._node_changed(par);
- this.redraw();
- }
- else {
- this.get_container_ul().children('.jstree-initial-node').remove();
- this.redraw(true);
- }
- if(this._data.core.selected.length !== s) {
- this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
- }
- cb.call(this, true);
- },
-
- _append_json_data : function (dom, data, cb, force_processing) {
- if(this.element === null) { return; }
- dom = this.get_node(dom);
- dom.children = [];
- dom.children_d = [];
-
- if(data.d) {
- data = data.d;
- if(typeof data === "string") {
- data = JSON.parse(data);
- }
- }
- if(!$.isArray(data)) { data = [data]; }
- var w = null,
- args = {
- 'df' : this._model.default_state,
- 'dat' : data,
- 'par' : dom.id,
- 'm' : this._model.data,
- 't_id' : this._id,
- 't_cnt' : this._cnt,
- 'sel' : this._data.core.selected
- },
- inst = this,
- func = function (data, undefined) {
- if(data.data) { data = data.data; }
- var dat = data.dat,
- par = data.par,
- chd = [],
- dpc = [],
- add = [],
- df = data.df,
- t_id = data.t_id,
- t_cnt = data.t_cnt,
- m = data.m,
- p = m[par],
- sel = data.sel,
- tmp, i, j, rslt,
- parse_flat = function (d, p, ps) {
- if(!ps) { ps = []; }
- else { ps = ps.concat(); }
- if(p) { ps.unshift(p); }
- var tid = d.id.toString(),
- i, j, c, e,
- tmp = {
- id : tid,
- text : d.text || '',
- icon : d.icon !== undefined ? d.icon : true,
- parent : p,
- parents : ps,
- children : d.children || [],
- children_d : d.children_d || [],
- data : d.data,
- state : { },
- li_attr : { id : false },
- a_attr : { href : '#' },
- original : false
- };
- for(i in df) {
- if(df.hasOwnProperty(i)) {
- tmp.state[i] = df[i];
- }
- }
- if(d && d.data && d.data.jstree && d.data.jstree.icon) {
- tmp.icon = d.data.jstree.icon;
- }
- if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
- tmp.icon = true;
- }
- if(d && d.data) {
- tmp.data = d.data;
- if(d.data.jstree) {
- for(i in d.data.jstree) {
- if(d.data.jstree.hasOwnProperty(i)) {
- tmp.state[i] = d.data.jstree[i];
- }
- }
- }
- }
- if(d && typeof d.state === 'object') {
- for (i in d.state) {
- if(d.state.hasOwnProperty(i)) {
- tmp.state[i] = d.state[i];
- }
- }
- }
- if(d && typeof d.li_attr === 'object') {
- for (i in d.li_attr) {
- if(d.li_attr.hasOwnProperty(i)) {
- tmp.li_attr[i] = d.li_attr[i];
- }
- }
- }
- if(!tmp.li_attr.id) {
- tmp.li_attr.id = tid;
- }
- if(d && typeof d.a_attr === 'object') {
- for (i in d.a_attr) {
- if(d.a_attr.hasOwnProperty(i)) {
- tmp.a_attr[i] = d.a_attr[i];
- }
- }
- }
- if(d && d.children && d.children === true) {
- tmp.state.loaded = false;
- tmp.children = [];
- tmp.children_d = [];
- }
- m[tmp.id] = tmp;
- for(i = 0, j = tmp.children.length; i < j; i++) {
- c = parse_flat(m[tmp.children[i]], tmp.id, ps);
- e = m[c];
- tmp.children_d.push(c);
- if(e.children_d.length) {
- tmp.children_d = tmp.children_d.concat(e.children_d);
- }
- }
- delete d.data;
- delete d.children;
- m[tmp.id].original = d;
- if(tmp.state.selected) {
- add.push(tmp.id);
- }
- return tmp.id;
- },
- parse_nest = function (d, p, ps) {
- if(!ps) { ps = []; }
- else { ps = ps.concat(); }
- if(p) { ps.unshift(p); }
- var tid = false, i, j, c, e, tmp;
- do {
- tid = 'j' + t_id + '_' + (++t_cnt);
- } while(m[tid]);
- tmp = {
- id : false,
- text : typeof d === 'string' ? d : '',
- icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true,
- parent : p,
- parents : ps,
- children : [],
- children_d : [],
- data : null,
- state : { },
- li_attr : { id : false },
- a_attr : { href : '#' },
- original : false
- };
- for(i in df) {
- if(df.hasOwnProperty(i)) {
- tmp.state[i] = df[i];
- }
- }
- if(d && d.id) { tmp.id = d.id.toString(); }
- if(d && d.text) { tmp.text = d.text; }
- if(d && d.data && d.data.jstree && d.data.jstree.icon) {
- tmp.icon = d.data.jstree.icon;
- }
- if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
- tmp.icon = true;
- }
- if(d && d.data) {
- tmp.data = d.data;
- if(d.data.jstree) {
- for(i in d.data.jstree) {
- if(d.data.jstree.hasOwnProperty(i)) {
- tmp.state[i] = d.data.jstree[i];
- }
- }
- }
- }
- if(d && typeof d.state === 'object') {
- for (i in d.state) {
- if(d.state.hasOwnProperty(i)) {
- tmp.state[i] = d.state[i];
- }
- }
- }
- if(d && typeof d.li_attr === 'object') {
- for (i in d.li_attr) {
- if(d.li_attr.hasOwnProperty(i)) {
- tmp.li_attr[i] = d.li_attr[i];
- }
- }
- }
- if(tmp.li_attr.id && !tmp.id) {
- tmp.id = tmp.li_attr.id.toString();
- }
- if(!tmp.id) {
- tmp.id = tid;
- }
- if(!tmp.li_attr.id) {
- tmp.li_attr.id = tmp.id;
- }
- if(d && typeof d.a_attr === 'object') {
- for (i in d.a_attr) {
- if(d.a_attr.hasOwnProperty(i)) {
- tmp.a_attr[i] = d.a_attr[i];
- }
- }
- }
- if(d && d.children && d.children.length) {
- for(i = 0, j = d.children.length; i < j; i++) {
- c = parse_nest(d.children[i], tmp.id, ps);
- e = m[c];
- tmp.children.push(c);
- if(e.children_d.length) {
- tmp.children_d = tmp.children_d.concat(e.children_d);
- }
- }
- tmp.children_d = tmp.children_d.concat(tmp.children);
- }
- if(d && d.children && d.children === true) {
- tmp.state.loaded = false;
- tmp.children = [];
- tmp.children_d = [];
- }
- delete d.data;
- delete d.children;
- tmp.original = d;
- m[tmp.id] = tmp;
- if(tmp.state.selected) {
- add.push(tmp.id);
- }
- return tmp.id;
- };
- if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {
-
-
- for(i = 0, j = dat.length; i < j; i++) {
- if(!dat[i].children) {
- dat[i].children = [];
- }
- if(!dat[i].state) {
- dat[i].state = {};
- }
- m[dat[i].id.toString()] = dat[i];
- }
-
- for(i = 0, j = dat.length; i < j; i++) {
- if (!m[dat[i].parent.toString()]) {
- if (typeof inst !== "undefined") {
- inst._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) };
- inst.settings.core.error.call(inst, inst._data.core.last_error);
- }
- continue;
- }
- m[dat[i].parent.toString()].children.push(dat[i].id.toString());
-
- p.children_d.push(dat[i].id.toString());
- }
-
- for(i = 0, j = p.children.length; i < j; i++) {
- tmp = parse_flat(m[p.children[i]], par, p.parents.concat());
- dpc.push(tmp);
- if(m[tmp].children_d.length) {
- dpc = dpc.concat(m[tmp].children_d);
- }
- }
- for(i = 0, j = p.parents.length; i < j; i++) {
- m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
- }
-
- rslt = {
- 'cnt' : t_cnt,
- 'mod' : m,
- 'sel' : sel,
- 'par' : par,
- 'dpc' : dpc,
- 'add' : add
- };
- }
- else {
- for(i = 0, j = dat.length; i < j; i++) {
- tmp = parse_nest(dat[i], par, p.parents.concat());
- if(tmp) {
- chd.push(tmp);
- dpc.push(tmp);
- if(m[tmp].children_d.length) {
- dpc = dpc.concat(m[tmp].children_d);
- }
- }
- }
- p.children = chd;
- p.children_d = dpc;
- for(i = 0, j = p.parents.length; i < j; i++) {
- m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
- }
- rslt = {
- 'cnt' : t_cnt,
- 'mod' : m,
- 'sel' : sel,
- 'par' : par,
- 'dpc' : dpc,
- 'add' : add
- };
- }
- if(typeof window === 'undefined' || typeof window.document === 'undefined') {
- postMessage(rslt);
- }
- else {
- return rslt;
- }
- },
- rslt = function (rslt, worker) {
- if(this.element === null) { return; }
- this._cnt = rslt.cnt;
- var i, m = this._model.data;
- for (i in m) {
- if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {
- rslt.mod[i].state.loading = true;
- }
- }
- this._model.data = rslt.mod;
- if(worker) {
- var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();
- m = this._model.data;
-
- if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
-
- for(i = 0, j = r.length; i < j; i++) {
- if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {
- m[r[i]].state.selected = false;
- }
- }
-
- for(i = 0, j = s.length; i < j; i++) {
- if($.inArray(s[i], r) === -1) {
- m[s[i]].state.selected = true;
- }
- }
- }
- }
- if(rslt.add.length) {
- this._data.core.selected = this._data.core.selected.concat(rslt.add);
- }
- this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par });
- if(rslt.par !== $.jstree.root) {
- this._node_changed(rslt.par);
- this.redraw();
- }
- else {
-
- this.redraw(true);
- }
- if(rslt.add.length) {
- this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
- }
-
- if (!worker && setImmediate) {
- setImmediate(function(){
- cb.call(inst, true);
- });
- }
- else {
- cb.call(inst, true);
- }
- };
- if(this.settings.core.worker && window.Blob && window.URL && window.Worker) {
- try {
- if(this._wrk === null) {
- this._wrk = window.URL.createObjectURL(
- new window.Blob(
- ['self.onmessage = ' + func.toString()],
- {type:"text/javascript"}
- )
- );
- }
- if(!this._data.core.working || force_processing) {
- this._data.core.working = true;
- w = new window.Worker(this._wrk);
- w.onmessage = $.proxy(function (e) {
- rslt.call(this, e.data, true);
- try { w.terminate(); w = null; } catch(ignore) { }
- if(this._data.core.worker_queue.length) {
- this._append_json_data.apply(this, this._data.core.worker_queue.shift());
- }
- else {
- this._data.core.working = false;
- }
- }, this);
- if(!args.par) {
- if(this._data.core.worker_queue.length) {
- this._append_json_data.apply(this, this._data.core.worker_queue.shift());
- }
- else {
- this._data.core.working = false;
- }
- }
- else {
- w.postMessage(args);
- }
- }
- else {
- this._data.core.worker_queue.push([dom, data, cb, true]);
- }
- }
- catch(e) {
- rslt.call(this, func(args), false);
- if(this._data.core.worker_queue.length) {
- this._append_json_data.apply(this, this._data.core.worker_queue.shift());
- }
- else {
- this._data.core.working = false;
- }
- }
- }
- else {
- rslt.call(this, func(args), false);
- }
- },
-
- _parse_model_from_html : function (d, p, ps) {
- if(!ps) { ps = []; }
- else { ps = [].concat(ps); }
- if(p) { ps.unshift(p); }
- var c, e, m = this._model.data,
- data = {
- id : false,
- text : false,
- icon : true,
- parent : p,
- parents : ps,
- children : [],
- children_d : [],
- data : null,
- state : { },
- li_attr : { id : false },
- a_attr : { href : '#' },
- original : false
- }, i, tmp, tid;
- for(i in this._model.default_state) {
- if(this._model.default_state.hasOwnProperty(i)) {
- data.state[i] = this._model.default_state[i];
- }
- }
- tmp = $.vakata.attributes(d, true);
- $.each(tmp, function (i, v) {
- v = $.vakata.trim(v);
- if(!v.length) { return true; }
- data.li_attr[i] = v;
- if(i === 'id') {
- data.id = v.toString();
- }
- });
- tmp = d.children('a').first();
- if(tmp.length) {
- tmp = $.vakata.attributes(tmp, true);
- $.each(tmp, function (i, v) {
- v = $.vakata.trim(v);
- if(v.length) {
- data.a_attr[i] = v;
- }
- });
- }
- tmp = d.children("a").first().length ? d.children("a").first().clone() : d.clone();
- tmp.children("ins, i, ul").remove();
- tmp = tmp.html();
- tmp = $('<div></div>').html(tmp);
- data.text = this.settings.core.force_text ? tmp.text() : tmp.html();
- tmp = d.data();
- data.data = tmp ? $.extend(true, {}, tmp) : null;
- data.state.opened = d.hasClass('jstree-open');
- data.state.selected = d.children('a').hasClass('jstree-clicked');
- data.state.disabled = d.children('a').hasClass('jstree-disabled');
- if(data.data && data.data.jstree) {
- for(i in data.data.jstree) {
- if(data.data.jstree.hasOwnProperty(i)) {
- data.state[i] = data.data.jstree[i];
- }
- }
- }
- tmp = d.children("a").children(".jstree-themeicon");
- if(tmp.length) {
- data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');
- }
- if(data.state.icon !== undefined) {
- data.icon = data.state.icon;
- }
- if(data.icon === undefined || data.icon === null || data.icon === "") {
- data.icon = true;
- }
- tmp = d.children("ul").children("li");
- do {
- tid = 'j' + this._id + '_' + (++this._cnt);
- } while(m[tid]);
- data.id = data.li_attr.id ? data.li_attr.id.toString() : tid;
- if(tmp.length) {
- tmp.each($.proxy(function (i, v) {
- c = this._parse_model_from_html($(v), data.id, ps);
- e = this._model.data[c];
- data.children.push(c);
- if(e.children_d.length) {
- data.children_d = data.children_d.concat(e.children_d);
- }
- }, this));
- data.children_d = data.children_d.concat(data.children);
- }
- else {
- if(d.hasClass('jstree-closed')) {
- data.state.loaded = false;
- }
- }
- if(data.li_attr['class']) {
- data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');
- }
- if(data.a_attr['class']) {
- data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');
- }
- m[data.id] = data;
- if(data.state.selected) {
- this._data.core.selected.push(data.id);
- }
- return data.id;
- },
-
- _parse_model_from_flat_json : function (d, p, ps) {
- if(!ps) { ps = []; }
- else { ps = ps.concat(); }
- if(p) { ps.unshift(p); }
- var tid = d.id.toString(),
- m = this._model.data,
- df = this._model.default_state,
- i, j, c, e,
- tmp = {
- id : tid,
- text : d.text || '',
- icon : d.icon !== undefined ? d.icon : true,
- parent : p,
- parents : ps,
- children : d.children || [],
- children_d : d.children_d || [],
- data : d.data,
- state : { },
- li_attr : { id : false },
- a_attr : { href : '#' },
- original : false
- };
- for(i in df) {
- if(df.hasOwnProperty(i)) {
- tmp.state[i] = df[i];
- }
- }
- if(d && d.data && d.data.jstree && d.data.jstree.icon) {
- tmp.icon = d.data.jstree.icon;
- }
- if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
- tmp.icon = true;
- }
- if(d && d.data) {
- tmp.data = d.data;
- if(d.data.jstree) {
- for(i in d.data.jstree) {
- if(d.data.jstree.hasOwnProperty(i)) {
- tmp.state[i] = d.data.jstree[i];
- }
- }
- }
- }
- if(d && typeof d.state === 'object') {
- for (i in d.state) {
- if(d.state.hasOwnProperty(i)) {
- tmp.state[i] = d.state[i];
- }
- }
- }
- if(d && typeof d.li_attr === 'object') {
- for (i in d.li_attr) {
- if(d.li_attr.hasOwnProperty(i)) {
- tmp.li_attr[i] = d.li_attr[i];
- }
- }
- }
- if(!tmp.li_attr.id) {
- tmp.li_attr.id = tid;
- }
- if(d && typeof d.a_attr === 'object') {
- for (i in d.a_attr) {
- if(d.a_attr.hasOwnProperty(i)) {
- tmp.a_attr[i] = d.a_attr[i];
- }
- }
- }
- if(d && d.children && d.children === true) {
- tmp.state.loaded = false;
- tmp.children = [];
- tmp.children_d = [];
- }
- m[tmp.id] = tmp;
- for(i = 0, j = tmp.children.length; i < j; i++) {
- c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);
- e = m[c];
- tmp.children_d.push(c);
- if(e.children_d.length) {
- tmp.children_d = tmp.children_d.concat(e.children_d);
- }
- }
- delete d.data;
- delete d.children;
- m[tmp.id].original = d;
- if(tmp.state.selected) {
- this._data.core.selected.push(tmp.id);
- }
- return tmp.id;
- },
-
- _parse_model_from_json : function (d, p, ps) {
- if(!ps) { ps = []; }
- else { ps = ps.concat(); }
- if(p) { ps.unshift(p); }
- var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;
- do {
- tid = 'j' + this._id + '_' + (++this._cnt);
- } while(m[tid]);
- tmp = {
- id : false,
- text : typeof d === 'string' ? d : '',
- icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true,
- parent : p,
- parents : ps,
- children : [],
- children_d : [],
- data : null,
- state : { },
- li_attr : { id : false },
- a_attr : { href : '#' },
- original : false
- };
- for(i in df) {
- if(df.hasOwnProperty(i)) {
- tmp.state[i] = df[i];
- }
- }
- if(d && d.id) { tmp.id = d.id.toString(); }
- if(d && d.text) { tmp.text = d.text; }
- if(d && d.data && d.data.jstree && d.data.jstree.icon) {
- tmp.icon = d.data.jstree.icon;
- }
- if(tmp.icon === undefined || tmp.icon === null || tmp.icon === "") {
- tmp.icon = true;
- }
- if(d && d.data) {
- tmp.data = d.data;
- if(d.data.jstree) {
- for(i in d.data.jstree) {
- if(d.data.jstree.hasOwnProperty(i)) {
- tmp.state[i] = d.data.jstree[i];
- }
- }
- }
- }
- if(d && typeof d.state === 'object') {
- for (i in d.state) {
- if(d.state.hasOwnProperty(i)) {
- tmp.state[i] = d.state[i];
- }
- }
- }
- if(d && typeof d.li_attr === 'object') {
- for (i in d.li_attr) {
- if(d.li_attr.hasOwnProperty(i)) {
- tmp.li_attr[i] = d.li_attr[i];
- }
- }
- }
- if(tmp.li_attr.id && !tmp.id) {
- tmp.id = tmp.li_attr.id.toString();
- }
- if(!tmp.id) {
- tmp.id = tid;
- }
- if(!tmp.li_attr.id) {
- tmp.li_attr.id = tmp.id;
- }
- if(d && typeof d.a_attr === 'object') {
- for (i in d.a_attr) {
- if(d.a_attr.hasOwnProperty(i)) {
- tmp.a_attr[i] = d.a_attr[i];
- }
- }
- }
- if(d && d.children && d.children.length) {
- for(i = 0, j = d.children.length; i < j; i++) {
- c = this._parse_model_from_json(d.children[i], tmp.id, ps);
- e = m[c];
- tmp.children.push(c);
- if(e.children_d.length) {
- tmp.children_d = tmp.children_d.concat(e.children_d);
- }
- }
- tmp.children_d = tmp.children.concat(tmp.children_d);
- }
- if(d && d.children && d.children === true) {
- tmp.state.loaded = false;
- tmp.children = [];
- tmp.children_d = [];
- }
- delete d.data;
- delete d.children;
- tmp.original = d;
- m[tmp.id] = tmp;
- if(tmp.state.selected) {
- this._data.core.selected.push(tmp.id);
- }
- return tmp.id;
- },
-
- _redraw : function () {
- var nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),
- f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;
- for(i = 0, j = nodes.length; i < j; i++) {
- tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);
- if(tmp && this._model.force_full_redraw) {
- f.appendChild(tmp);
- }
- }
- if(this._model.force_full_redraw) {
- f.className = this.get_container_ul()[0].className;
- f.setAttribute('role','group');
- this.element.empty().append(f);
-
- }
- if(fe !== null && this.settings.core.restore_focus) {
- tmp = this.get_node(fe, true);
- if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {
- tmp.children('.jstree-anchor').focus();
- }
- else {
- this._data.core.focused = null;
- }
- }
- this._model.force_full_redraw = false;
- this._model.changed = [];
-
- this.trigger('redraw', { "nodes" : nodes });
- },
-
- redraw : function (full) {
- if(full) {
- this._model.force_full_redraw = true;
- }
-
-
-
-
- this._redraw();
- },
-
- draw_children : function (node) {
- var obj = this.get_node(node),
- i = false,
- j = false,
- k = false,
- d = document;
- if(!obj) { return false; }
- if(obj.id === $.jstree.root) { return this.redraw(true); }
- node = this.get_node(node, true);
- if(!node || !node.length) { return false; }
- node.children('.jstree-children').remove();
- node = node[0];
- if(obj.children.length && obj.state.loaded) {
- k = d.createElement('UL');
- k.setAttribute('role', 'group');
- k.className = 'jstree-children';
- for(i = 0, j = obj.children.length; i < j; i++) {
- k.appendChild(this.redraw_node(obj.children[i], true, true));
- }
- node.appendChild(k);
- }
- },
-
- redraw_node : function (node, deep, is_callback, force_render) {
- var obj = this.get_node(node),
- par = false,
- ind = false,
- old = false,
- i = false,
- j = false,
- k = false,
- c = '',
- d = document,
- m = this._model.data,
- f = false,
- s = false,
- tmp = null,
- t = 0,
- l = 0,
- has_children = false,
- last_sibling = false;
- if(!obj) { return false; }
- if(obj.id === $.jstree.root) { return this.redraw(true); }
- deep = deep || obj.children.length === 0;
- node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) );
- if(!node) {
- deep = true;
-
- if(!is_callback) {
- par = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null;
- if(par !== null && (!par || !m[obj.parent].state.opened)) {
- return false;
- }
- ind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);
- }
- }
- else {
- node = $(node);
- if(!is_callback) {
- par = node.parent().parent()[0];
- if(par === this.element[0]) {
- par = null;
- }
- ind = node.index();
- }
-
- if(!deep && obj.children.length && !node.children('.jstree-children').length) {
- deep = true;
- }
- if(!deep) {
- old = node.children('.jstree-children')[0];
- }
- f = node.children('.jstree-anchor')[0] === document.activeElement;
- node.remove();
-
-
- }
- node = this._data.core.node.cloneNode(true);
-
- c = 'jstree-node ';
- for(i in obj.li_attr) {
- if(obj.li_attr.hasOwnProperty(i)) {
- if(i === 'id') { continue; }
- if(i !== 'class') {
- node.setAttribute(i, obj.li_attr[i]);
- }
- else {
- c += obj.li_attr[i];
- }
- }
- }
- if(!obj.a_attr.id) {
- obj.a_attr.id = obj.id + '_anchor';
- }
- node.childNodes[1].setAttribute('aria-selected', !!obj.state.selected);
- node.childNodes[1].setAttribute('aria-level', obj.parents.length);
- if(this.settings.core.compute_elements_positions) {
- node.childNodes[1].setAttribute('aria-setsize', m[obj.parent].children.length);
- node.childNodes[1].setAttribute('aria-posinset', m[obj.parent].children.indexOf(obj.id) + 1);
- }
- if(obj.state.disabled) {
- node.childNodes[1].setAttribute('aria-disabled', true);
- }
- for(i = 0, j = obj.children.length; i < j; i++) {
- if(!m[obj.children[i]].state.hidden) {
- has_children = true;
- break;
- }
- }
- if(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {
- i = $.inArray(obj.id, m[obj.parent].children);
- last_sibling = obj.id;
- if(i !== -1) {
- i++;
- for(j = m[obj.parent].children.length; i < j; i++) {
- if(!m[m[obj.parent].children[i]].state.hidden) {
- last_sibling = m[obj.parent].children[i];
- }
- if(last_sibling !== obj.id) {
- break;
- }
- }
- }
- }
- if(obj.state.hidden) {
- c += ' jstree-hidden';
- }
- if (obj.state.loading) {
- c += ' jstree-loading';
- }
- if(obj.state.loaded && !has_children) {
- c += ' jstree-leaf';
- }
- else {
- c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';
- node.childNodes[1].setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );
- }
- if(last_sibling === obj.id) {
- c += ' jstree-last';
- }
- node.id = obj.id;
- node.className = c;
- c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');
- for(j in obj.a_attr) {
- if(obj.a_attr.hasOwnProperty(j)) {
- if(j === 'href' && obj.a_attr[j] === '#') { continue; }
- if(j !== 'class') {
- node.childNodes[1].setAttribute(j, obj.a_attr[j]);
- }
- else {
- c += ' ' + obj.a_attr[j];
- }
- }
- }
- if(c.length) {
- node.childNodes[1].className = 'jstree-anchor ' + c;
- }
- if((obj.icon && obj.icon !== true) || obj.icon === false) {
- if(obj.icon === false) {
- node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';
- }
- else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {
- node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
- }
- else {
- node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
- node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
- node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
- node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
- }
- }
- if(this.settings.core.force_text) {
- node.childNodes[1].appendChild(d.createTextNode(obj.text));
- }
- else {
- node.childNodes[1].innerHTML += obj.text;
- }
- if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {
- k = d.createElement('UL');
- k.setAttribute('role', 'group');
- k.className = 'jstree-children';
- for(i = 0, j = obj.children.length; i < j; i++) {
- k.appendChild(this.redraw_node(obj.children[i], deep, true));
- }
- node.appendChild(k);
- }
- if(old) {
- node.appendChild(old);
- }
- if(!is_callback) {
-
- if(!par) {
- par = this.element[0];
- }
- for(i = 0, j = par.childNodes.length; i < j; i++) {
- if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {
- tmp = par.childNodes[i];
- break;
- }
- }
- if(!tmp) {
- tmp = d.createElement('UL');
- tmp.setAttribute('role', 'group');
- tmp.className = 'jstree-children';
- par.appendChild(tmp);
- }
- par = tmp;
- if(ind < par.childNodes.length) {
- par.insertBefore(node, par.childNodes[ind]);
- }
- else {
- par.appendChild(node);
- }
- if(f) {
- t = this.element[0].scrollTop;
- l = this.element[0].scrollLeft;
- node.childNodes[1].focus();
- this.element[0].scrollTop = t;
- this.element[0].scrollLeft = l;
- }
- }
- if(obj.state.opened && !obj.state.loaded) {
- obj.state.opened = false;
- setTimeout($.proxy(function () {
- this.open_node(obj.id, false, 0);
- }, this), 0);
- }
- return node;
- },
-
- open_node : function (obj, callback, animation) {
- var t1, t2, d, t;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.open_node(obj[t1], callback, animation);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- animation = animation === undefined ? this.settings.core.animation : animation;
- if(!this.is_closed(obj)) {
- if(callback) {
- callback.call(this, obj, false);
- }
- return false;
- }
- if(!this.is_loaded(obj)) {
- if(this.is_loading(obj)) {
- return setTimeout($.proxy(function () {
- this.open_node(obj, callback, animation);
- }, this), 500);
- }
- this.load_node(obj, function (o, ok) {
- return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);
- });
- }
- else {
- d = this.get_node(obj, true);
- t = this;
- if(d.length) {
- if(animation && d.children(".jstree-children").length) {
- d.children(".jstree-children").stop(true, true);
- }
- if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {
- this.draw_children(obj);
-
- }
- if(!animation) {
- this.trigger('before_open', { "node" : obj });
- d[0].className = d[0].className.replace('jstree-closed', 'jstree-open');
- d[0].childNodes[1].setAttribute("aria-expanded", true);
- }
- else {
- this.trigger('before_open', { "node" : obj });
- d
- .children(".jstree-children").css("display","none").end()
- .removeClass("jstree-closed").addClass("jstree-open")
- .children('.jstree-anchor').attr("aria-expanded", true).end()
- .children(".jstree-children").stop(true, true)
- .slideDown(animation, function () {
- this.style.display = "";
- if (t.element) {
- t.trigger("after_open", { "node" : obj });
- }
- });
- }
- }
- obj.state.opened = true;
- if(callback) {
- callback.call(this, obj, true);
- }
- if(!d.length) {
-
- this.trigger('before_open', { "node" : obj });
- }
-
- this.trigger('open_node', { "node" : obj });
- if(!animation || !d.length) {
-
- this.trigger("after_open", { "node" : obj });
- }
- return true;
- }
- },
-
- _open_to : function (obj) {
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- var i, j, p = obj.parents;
- for(i = 0, j = p.length; i < j; i+=1) {
- if(i !== $.jstree.root) {
- this.open_node(p[i], false, 0);
- }
- }
- return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
- },
-
- close_node : function (obj, animation) {
- var t1, t2, t, d;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.close_node(obj[t1], animation);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- if(this.is_closed(obj)) {
- return false;
- }
- animation = animation === undefined ? this.settings.core.animation : animation;
- t = this;
- d = this.get_node(obj, true);
- obj.state.opened = false;
-
- this.trigger('close_node',{ "node" : obj });
- if(!d.length) {
-
- this.trigger("after_close", { "node" : obj });
- }
- else {
- if(!animation) {
- d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
- d.children('.jstree-anchor').attr("aria-expanded", false);
- d.children('.jstree-children').remove();
- this.trigger("after_close", { "node" : obj });
- }
- else {
- d
- .children(".jstree-children").attr("style","display:block !important").end()
- .removeClass("jstree-open").addClass("jstree-closed")
- .children('.jstree-anchor').attr("aria-expanded", false).end()
- .children(".jstree-children").stop(true, true).slideUp(animation, function () {
- this.style.display = "";
- d.children('.jstree-children').remove();
- if (t.element) {
- t.trigger("after_close", { "node" : obj });
- }
- });
- }
- }
- },
-
- toggle_node : function (obj) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.toggle_node(obj[t1]);
- }
- return true;
- }
- if(this.is_closed(obj)) {
- return this.open_node(obj);
- }
- if(this.is_open(obj)) {
- return this.close_node(obj);
- }
- },
-
- open_all : function (obj, animation, original_obj) {
- if(!obj) { obj = $.jstree.root; }
- obj = this.get_node(obj);
- if(!obj) { return false; }
- var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;
- if(!dom.length) {
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- if(this.is_closed(this._model.data[obj.children_d[i]])) {
- this._model.data[obj.children_d[i]].state.opened = true;
- }
- }
- return this.trigger('open_all', { "node" : obj });
- }
- original_obj = original_obj || dom;
- _this = this;
- dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');
- dom.each(function () {
- _this.open_node(
- this,
- function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },
- animation || 0
- );
- });
- if(original_obj.find('.jstree-closed').length === 0) {
-
- this.trigger('open_all', { "node" : this.get_node(original_obj) });
- }
- },
-
- close_all : function (obj, animation) {
- if(!obj) { obj = $.jstree.root; }
- obj = this.get_node(obj);
- if(!obj) { return false; }
- var dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),
- _this = this, i, j;
- if(dom.length) {
- dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');
- $(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });
- }
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- this._model.data[obj.children_d[i]].state.opened = false;
- }
-
- this.trigger('close_all', { "node" : obj });
- },
-
- is_disabled : function (obj) {
- obj = this.get_node(obj);
- return obj && obj.state && obj.state.disabled;
- },
-
- enable_node : function (obj) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.enable_node(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- obj.state.disabled = false;
- this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);
-
- this.trigger('enable_node', { 'node' : obj });
- },
-
- disable_node : function (obj) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.disable_node(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- obj.state.disabled = true;
- this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);
-
- this.trigger('disable_node', { 'node' : obj });
- },
-
- is_hidden : function (obj) {
- obj = this.get_node(obj);
- return obj.state.hidden === true;
- },
-
- hide_node : function (obj, skip_redraw) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.hide_node(obj[t1], true);
- }
- if (!skip_redraw) {
- this.redraw();
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- if(!obj.state.hidden) {
- obj.state.hidden = true;
- this._node_changed(obj.parent);
- if(!skip_redraw) {
- this.redraw();
- }
-
- this.trigger('hide_node', { 'node' : obj });
- }
- },
-
- show_node : function (obj, skip_redraw) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.show_node(obj[t1], true);
- }
- if (!skip_redraw) {
- this.redraw();
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- if(obj.state.hidden) {
- obj.state.hidden = false;
- this._node_changed(obj.parent);
- if(!skip_redraw) {
- this.redraw();
- }
-
- this.trigger('show_node', { 'node' : obj });
- }
- },
-
- hide_all : function (skip_redraw) {
- var i, m = this._model.data, ids = [];
- for(i in m) {
- if(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {
- m[i].state.hidden = true;
- ids.push(i);
- }
- }
- this._model.force_full_redraw = true;
- if(!skip_redraw) {
- this.redraw();
- }
-
- this.trigger('hide_all', { 'nodes' : ids });
- return ids;
- },
-
- show_all : function (skip_redraw) {
- var i, m = this._model.data, ids = [];
- for(i in m) {
- if(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {
- m[i].state.hidden = false;
- ids.push(i);
- }
- }
- this._model.force_full_redraw = true;
- if(!skip_redraw) {
- this.redraw();
- }
-
- this.trigger('show_all', { 'nodes' : ids });
- return ids;
- },
-
- activate_node : function (obj, e) {
- if(this.is_disabled(obj)) {
- return false;
- }
- if(!e || typeof e !== 'object') {
- e = {};
- }
-
- this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;
- if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }
- if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }
- if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {
- if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {
- this.deselect_node(obj, false, e);
- }
- else {
- this.deselect_all(true);
- this.select_node(obj, false, false, e);
- this._data.core.last_clicked = this.get_node(obj);
- }
- }
- else {
- if(e.shiftKey) {
- var o = this.get_node(obj).id,
- l = this._data.core.last_clicked.id,
- p = this.get_node(this._data.core.last_clicked.parent).children,
- c = false,
- i, j;
- for(i = 0, j = p.length; i < j; i += 1) {
-
- if(p[i] === o) {
- c = !c;
- }
- if(p[i] === l) {
- c = !c;
- }
- if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {
- if (!this.is_hidden(p[i])) {
- this.select_node(p[i], true, false, e);
- }
- }
- else {
- this.deselect_node(p[i], true, e);
- }
- }
- this.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });
- }
- else {
- if(!this.is_selected(obj)) {
- this.select_node(obj, false, false, e);
- }
- else {
- this.deselect_node(obj, false, e);
- }
- }
- }
-
- this.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });
- },
-
- hover_node : function (obj) {
- obj = this.get_node(obj, true);
- if(!obj || !obj.length || obj.children('.jstree-hovered').length) {
- return false;
- }
- var o = this.element.find('.jstree-hovered'), t = this.element;
- if(o && o.length) { this.dehover_node(o); }
- obj.children('.jstree-anchor').addClass('jstree-hovered');
-
- this.trigger('hover_node', { 'node' : this.get_node(obj) });
- setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);
- },
-
- dehover_node : function (obj) {
- obj = this.get_node(obj, true);
- if(!obj || !obj.length || !obj.children('.jstree-hovered').length) {
- return false;
- }
- obj.children('.jstree-anchor').removeClass('jstree-hovered');
-
- this.trigger('dehover_node', { 'node' : this.get_node(obj) });
- },
-
- select_node : function (obj, supress_event, prevent_open, e) {
- var dom, t1, t2, th;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.select_node(obj[t1], supress_event, prevent_open, e);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- dom = this.get_node(obj, true);
- if(!obj.state.selected) {
- obj.state.selected = true;
- this._data.core.selected.push(obj.id);
- if(!prevent_open) {
- dom = this._open_to(obj);
- }
- if(dom && dom.length) {
- dom.children('.jstree-anchor').addClass('jstree-clicked').attr('aria-selected', true);
- }
-
- this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
- if(!supress_event) {
-
- this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
- }
- }
- },
-
- deselect_node : function (obj, supress_event, e) {
- var t1, t2, dom;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.deselect_node(obj[t1], supress_event, e);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- dom = this.get_node(obj, true);
- if(obj.state.selected) {
- obj.state.selected = false;
- this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);
- if(dom.length) {
- dom.children('.jstree-anchor').removeClass('jstree-clicked').attr('aria-selected', false);
- }
-
- this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
- if(!supress_event) {
- this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
- }
- }
- },
-
- select_all : function (supress_event) {
- var tmp = this._data.core.selected.concat([]), i, j;
- this._data.core.selected = this._model.data[$.jstree.root].children_d.concat();
- for(i = 0, j = this._data.core.selected.length; i < j; i++) {
- if(this._model.data[this._data.core.selected[i]]) {
- this._model.data[this._data.core.selected[i]].state.selected = true;
- }
- }
- this.redraw(true);
-
- this.trigger('select_all', { 'selected' : this._data.core.selected });
- if(!supress_event) {
- this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
- }
- },
-
- deselect_all : function (supress_event) {
- var tmp = this._data.core.selected.concat([]), i, j;
- for(i = 0, j = this._data.core.selected.length; i < j; i++) {
- if(this._model.data[this._data.core.selected[i]]) {
- this._model.data[this._data.core.selected[i]].state.selected = false;
- }
- }
- this._data.core.selected = [];
- this.element.find('.jstree-clicked').removeClass('jstree-clicked').attr('aria-selected', false);
-
- this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });
- if(!supress_event) {
- this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
- }
- },
-
- is_selected : function (obj) {
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- return obj.state.selected;
- },
-
- get_selected : function (full) {
- return full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();
- },
-
- get_top_selected : function (full) {
- var tmp = this.get_selected(true),
- obj = {}, i, j, k, l;
- for(i = 0, j = tmp.length; i < j; i++) {
- obj[tmp[i].id] = tmp[i];
- }
- for(i = 0, j = tmp.length; i < j; i++) {
- for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
- if(obj[tmp[i].children_d[k]]) {
- delete obj[tmp[i].children_d[k]];
- }
- }
- }
- tmp = [];
- for(i in obj) {
- if(obj.hasOwnProperty(i)) {
- tmp.push(i);
- }
- }
- return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
- },
-
- get_bottom_selected : function (full) {
- var tmp = this.get_selected(true),
- obj = [], i, j;
- for(i = 0, j = tmp.length; i < j; i++) {
- if(!tmp[i].children.length) {
- obj.push(tmp[i].id);
- }
- }
- return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
- },
-
- get_state : function () {
- var state = {
- 'core' : {
- 'open' : [],
- 'loaded' : [],
- 'scroll' : {
- 'left' : this.element.scrollLeft(),
- 'top' : this.element.scrollTop()
- },
-
- 'selected' : []
- }
- }, i;
- for(i in this._model.data) {
- if(this._model.data.hasOwnProperty(i)) {
- if(i !== $.jstree.root) {
- if(this._model.data[i].state.loaded && this.settings.core.loaded_state) {
- state.core.loaded.push(i);
- }
- if(this._model.data[i].state.opened) {
- state.core.open.push(i);
- }
- if(this._model.data[i].state.selected) {
- state.core.selected.push(i);
- }
- }
- }
- }
- return state;
- },
-
- set_state : function (state, callback) {
- if(state) {
- if(state.core && state.core.selected && state.core.initial_selection === undefined) {
- state.core.initial_selection = this._data.core.selected.concat([]).sort().join(',');
- }
- if(state.core) {
- var res, n, t, _this, i;
- if(state.core.loaded) {
- if(!this.settings.core.loaded_state || !$.isArray(state.core.loaded) || !state.core.loaded.length) {
- delete state.core.loaded;
- this.set_state(state, callback);
- }
- else {
- this._load_nodes(state.core.loaded, function (nodes) {
- delete state.core.loaded;
- this.set_state(state, callback);
- });
- }
- return false;
- }
- if(state.core.open) {
- if(!$.isArray(state.core.open) || !state.core.open.length) {
- delete state.core.open;
- this.set_state(state, callback);
- }
- else {
- this._load_nodes(state.core.open, function (nodes) {
- this.open_node(nodes, false, 0);
- delete state.core.open;
- this.set_state(state, callback);
- });
- }
- return false;
- }
- if(state.core.scroll) {
- if(state.core.scroll && state.core.scroll.left !== undefined) {
- this.element.scrollLeft(state.core.scroll.left);
- }
- if(state.core.scroll && state.core.scroll.top !== undefined) {
- this.element.scrollTop(state.core.scroll.top);
- }
- delete state.core.scroll;
- this.set_state(state, callback);
- return false;
- }
- if(state.core.selected) {
- _this = this;
- if (state.core.initial_selection === undefined ||
- state.core.initial_selection === this._data.core.selected.concat([]).sort().join(',')
- ) {
- this.deselect_all();
- $.each(state.core.selected, function (i, v) {
- _this.select_node(v, false, true);
- });
- }
- delete state.core.initial_selection;
- delete state.core.selected;
- this.set_state(state, callback);
- return false;
- }
- for(i in state) {
- if(state.hasOwnProperty(i) && i !== "core" && $.inArray(i, this.settings.plugins) === -1) {
- delete state[i];
- }
- }
- if($.isEmptyObject(state.core)) {
- delete state.core;
- this.set_state(state, callback);
- return false;
- }
- }
- if($.isEmptyObject(state)) {
- state = null;
- if(callback) { callback.call(this); }
-
- this.trigger('set_state');
- return false;
- }
- return true;
- }
- return false;
- },
-
- refresh : function (skip_loading, forget_state) {
- this._data.core.state = forget_state === true ? {} : this.get_state();
- if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }
- this._cnt = 0;
- this._model.data = {};
- this._model.data[$.jstree.root] = {
- id : $.jstree.root,
- parent : null,
- parents : [],
- children : [],
- children_d : [],
- state : { loaded : false }
- };
- this._data.core.selected = [];
- this._data.core.last_clicked = null;
- this._data.core.focused = null;
- var c = this.get_container_ul()[0].className;
- if(!skip_loading) {
- this.element.html("<"+"ul class='"+c+"' role='group'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='none' id='j"+this._id+"_loading'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' role='treeitem' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>");
- this.element.attr('aria-activedescendant','j'+this._id+'_loading');
- }
- this.load_node($.jstree.root, function (o, s) {
- if(s) {
- this.get_container_ul()[0].className = c;
- if(this._firstChild(this.get_container_ul()[0])) {
- this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
- }
- this.set_state($.extend(true, {}, this._data.core.state), function () {
-
- this.trigger('refresh');
- });
- }
- this._data.core.state = null;
- });
- },
-
- refresh_node : function (obj) {
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- var opened = [], to_load = [], s = this._data.core.selected.concat([]);
- to_load.push(obj.id);
- if(obj.state.opened === true) { opened.push(obj.id); }
- this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });
- this._load_nodes(to_load, $.proxy(function (nodes) {
- this.open_node(opened, false, 0);
- this.select_node(s);
-
- this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
- }, this), false, true);
- },
-
- set_id : function (obj, id) {
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- var i, j, m = this._model.data, old = obj.id;
- id = id.toString();
-
- m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
- for(i = 0, j = obj.parents.length; i < j; i++) {
- m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;
- }
-
- for(i = 0, j = obj.children.length; i < j; i++) {
- m[obj.children[i]].parent = id;
- }
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;
- }
- i = $.inArray(obj.id, this._data.core.selected);
- if(i !== -1) { this._data.core.selected[i] = id; }
-
- i = this.get_node(obj.id, true);
- if(i) {
- i.attr('id', id);
- if(this.element.attr('aria-activedescendant') === obj.id) {
- this.element.attr('aria-activedescendant', id);
- }
- }
- delete m[obj.id];
- obj.id = id;
- obj.li_attr.id = id;
- m[id] = obj;
-
- this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old });
- return true;
- },
-
- get_text : function (obj) {
- obj = this.get_node(obj);
- return (!obj || obj.id === $.jstree.root) ? false : obj.text;
- },
-
- set_text : function (obj, val) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.set_text(obj[t1], val);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- obj.text = val;
- if(this.get_node(obj, true).length) {
- this.redraw_node(obj.id);
- }
-
- this.trigger('set_text',{ "obj" : obj, "text" : val });
- return true;
- },
-
- get_json : function (obj, options, flat) {
- obj = this.get_node(obj || $.jstree.root);
- if(!obj) { return false; }
- if(options && options.flat && !flat) { flat = []; }
- var tmp = {
- 'id' : obj.id,
- 'text' : obj.text,
- 'icon' : this.get_icon(obj),
- 'li_attr' : $.extend(true, {}, obj.li_attr),
- 'a_attr' : $.extend(true, {}, obj.a_attr),
- 'state' : {},
- 'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data)
-
- }, i, j;
- if(options && options.flat) {
- tmp.parent = obj.parent;
- }
- else {
- tmp.children = [];
- }
- if(!options || !options.no_state) {
- for(i in obj.state) {
- if(obj.state.hasOwnProperty(i)) {
- tmp.state[i] = obj.state[i];
- }
- }
- } else {
- delete tmp.state;
- }
- if(options && options.no_li_attr) {
- delete tmp.li_attr;
- }
- if(options && options.no_a_attr) {
- delete tmp.a_attr;
- }
- if(options && options.no_id) {
- delete tmp.id;
- if(tmp.li_attr && tmp.li_attr.id) {
- delete tmp.li_attr.id;
- }
- if(tmp.a_attr && tmp.a_attr.id) {
- delete tmp.a_attr.id;
- }
- }
- if(options && options.flat && obj.id !== $.jstree.root) {
- flat.push(tmp);
- }
- if(!options || !options.no_children) {
- for(i = 0, j = obj.children.length; i < j; i++) {
- if(options && options.flat) {
- this.get_json(obj.children[i], options, flat);
- }
- else {
- tmp.children.push(this.get_json(obj.children[i], options));
- }
- }
- }
- return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);
- },
-
- create_node : function (par, node, pos, callback, is_loaded) {
- if(par === null) { par = $.jstree.root; }
- par = this.get_node(par);
- if(!par) { return false; }
- pos = pos === undefined ? "last" : pos;
- if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
- return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });
- }
- if(!node) { node = { "text" : this.get_string('New node') }; }
- if(typeof node === "string") {
- node = { "text" : node };
- } else {
- node = $.extend(true, {}, node);
- }
- if(node.text === undefined) { node.text = this.get_string('New node'); }
- var tmp, dpc, i, j;
- if(par.id === $.jstree.root) {
- if(pos === "before") { pos = "first"; }
- if(pos === "after") { pos = "last"; }
- }
- switch(pos) {
- case "before":
- tmp = this.get_node(par.parent);
- pos = $.inArray(par.id, tmp.children);
- par = tmp;
- break;
- case "after" :
- tmp = this.get_node(par.parent);
- pos = $.inArray(par.id, tmp.children) + 1;
- par = tmp;
- break;
- case "inside":
- case "first":
- pos = 0;
- break;
- case "last":
- pos = par.children.length;
- break;
- default:
- if(!pos) { pos = 0; }
- break;
- }
- if(pos > par.children.length) { pos = par.children.length; }
- if(!node.id) { node.id = true; }
- if(!this.check("create_node", node, par, pos)) {
- this.settings.core.error.call(this, this._data.core.last_error);
- return false;
- }
- if(node.id === true) { delete node.id; }
- node = this._parse_model_from_json(node, par.id, par.parents.concat());
- if(!node) { return false; }
- tmp = this.get_node(node);
- dpc = [];
- dpc.push(node);
- dpc = dpc.concat(tmp.children_d);
- this.trigger('model', { "nodes" : dpc, "parent" : par.id });
- par.children_d = par.children_d.concat(dpc);
- for(i = 0, j = par.parents.length; i < j; i++) {
- this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);
- }
- node = tmp;
- tmp = [];
- for(i = 0, j = par.children.length; i < j; i++) {
- tmp[i >= pos ? i+1 : i] = par.children[i];
- }
- tmp[pos] = node.id;
- par.children = tmp;
- this.redraw_node(par, true);
-
- this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos });
- if(callback) { callback.call(this, this.get_node(node)); }
- return node.id;
- },
-
- rename_node : function (obj, val) {
- var t1, t2, old;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.rename_node(obj[t1], val);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- old = obj.text;
- if(!this.check("rename_node", obj, this.get_parent(obj), val)) {
- this.settings.core.error.call(this, this._data.core.last_error);
- return false;
- }
- this.set_text(obj, val);
-
- this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old });
- return true;
- },
-
- delete_node : function (obj) {
- var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.delete_node(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- par = this.get_node(obj.parent);
- pos = $.inArray(obj.id, par.children);
- c = false;
- if(!this.check("delete_node", obj, par, pos)) {
- this.settings.core.error.call(this, this._data.core.last_error);
- return false;
- }
- if(pos !== -1) {
- par.children = $.vakata.array_remove(par.children, pos);
- }
- tmp = obj.children_d.concat([]);
- tmp.push(obj.id);
- for(i = 0, j = obj.parents.length; i < j; i++) {
- this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
- return $.inArray(v, tmp) === -1;
- });
- }
- for(k = 0, l = tmp.length; k < l; k++) {
- if(this._model.data[tmp[k]].state.selected) {
- c = true;
- break;
- }
- }
- if (c) {
- this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
- return $.inArray(v, tmp) === -1;
- });
- }
-
- this.trigger('delete_node', { "node" : obj, "parent" : par.id });
- if(c) {
- this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });
- }
- for(k = 0, l = tmp.length; k < l; k++) {
- delete this._model.data[tmp[k]];
- }
- if($.inArray(this._data.core.focused, tmp) !== -1) {
- this._data.core.focused = null;
- top = this.element[0].scrollTop;
- lft = this.element[0].scrollLeft;
- if(par.id === $.jstree.root) {
- if (this._model.data[$.jstree.root].children[0]) {
- this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();
- }
- }
- else {
- this.get_node(par, true).children('.jstree-anchor').focus();
- }
- this.element[0].scrollTop = top;
- this.element[0].scrollLeft = lft;
- }
- this.redraw_node(par, true);
- return true;
- },
-
- check : function (chk, obj, par, pos, more) {
- obj = obj && obj.id ? obj : this.get_node(obj);
- par = par && par.id ? par : this.get_node(par);
- var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
- chc = this.settings.core.check_callback;
- if(chk === "move_node" || chk === "copy_node") {
- if((!more || !more.is_multi) && (chk === "move_node" && $.inArray(obj.id, par.children) === pos)) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- return false;
- }
- if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- return false;
- }
- }
- if(tmp && tmp.data) { tmp = tmp.data; }
- if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {
- if(tmp.functions[chk] === false) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- }
- return tmp.functions[chk];
- }
- if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- return false;
- }
- return true;
- },
-
- last_error : function () {
- return this._data.core.last_error;
- },
-
- move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
- var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;
- par = this.get_node(par);
- pos = pos === undefined ? 0 : pos;
- if(!par) { return false; }
- if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
- return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });
- }
- if($.isArray(obj)) {
- if(obj.length === 1) {
- obj = obj[0];
- }
- else {
-
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {
- par = tmp;
- pos = "after";
- }
- }
- this.redraw();
- return true;
- }
- }
- obj = obj && obj.id ? obj : this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- old_par = (obj.parent || $.jstree.root).toString();
- new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
- old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
- is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
- old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;
- if(old_ins && old_ins._id) {
- obj = old_ins._model.data[obj.id];
- }
- if(is_multi) {
- if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {
- if(old_ins) { old_ins.delete_node(obj); }
- return tmp;
- }
- return false;
- }
-
- if(par.id === $.jstree.root) {
- if(pos === "before") { pos = "first"; }
- if(pos === "after") { pos = "last"; }
- }
- switch(pos) {
- case "before":
- pos = $.inArray(par.id, new_par.children);
- break;
- case "after" :
- pos = $.inArray(par.id, new_par.children) + 1;
- break;
- case "inside":
- case "first":
- pos = 0;
- break;
- case "last":
- pos = new_par.children.length;
- break;
- default:
- if(!pos) { pos = 0; }
- break;
- }
- if(pos > new_par.children.length) { pos = new_par.children.length; }
- if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
- this.settings.core.error.call(this, this._data.core.last_error);
- return false;
- }
- if(obj.parent === new_par.id) {
- dpc = new_par.children.concat();
- tmp = $.inArray(obj.id, dpc);
- if(tmp !== -1) {
- dpc = $.vakata.array_remove(dpc, tmp);
- if(pos > tmp) { pos--; }
- }
- tmp = [];
- for(i = 0, j = dpc.length; i < j; i++) {
- tmp[i >= pos ? i+1 : i] = dpc[i];
- }
- tmp[pos] = obj.id;
- new_par.children = tmp;
- this._node_changed(new_par.id);
- this.redraw(new_par.id === $.jstree.root);
- }
- else {
-
- tmp = obj.children_d.concat();
- tmp.push(obj.id);
- for(i = 0, j = obj.parents.length; i < j; i++) {
- dpc = [];
- p = old_ins._model.data[obj.parents[i]].children_d;
- for(k = 0, l = p.length; k < l; k++) {
- if($.inArray(p[k], tmp) === -1) {
- dpc.push(p[k]);
- }
- }
- old_ins._model.data[obj.parents[i]].children_d = dpc;
- }
- old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);
-
- for(i = 0, j = new_par.parents.length; i < j; i++) {
- this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);
- }
- dpc = [];
- for(i = 0, j = new_par.children.length; i < j; i++) {
- dpc[i >= pos ? i+1 : i] = new_par.children[i];
- }
- dpc[pos] = obj.id;
- new_par.children = dpc;
- new_par.children_d.push(obj.id);
- new_par.children_d = new_par.children_d.concat(obj.children_d);
-
- obj.parent = new_par.id;
- tmp = new_par.parents.concat();
- tmp.unshift(new_par.id);
- p = obj.parents.length;
- obj.parents = tmp;
-
- tmp = tmp.concat();
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);
- Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);
- }
- if(old_par === $.jstree.root || new_par.id === $.jstree.root) {
- this._model.force_full_redraw = true;
- }
- if(!this._model.force_full_redraw) {
- this._node_changed(old_par);
- this._node_changed(new_par.id);
- }
- if(!skip_redraw) {
- this.redraw();
- }
- }
- if(callback) { callback.call(this, obj, new_par, pos); }
-
- this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
- return obj.id;
- },
-
- copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {
- var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;
- par = this.get_node(par);
- pos = pos === undefined ? 0 : pos;
- if(!par) { return false; }
- if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
- return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });
- }
- if($.isArray(obj)) {
- if(obj.length === 1) {
- obj = obj[0];
- }
- else {
-
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {
- par = tmp;
- pos = "after";
- }
- }
- this.redraw();
- return true;
- }
- }
- obj = obj && obj.id ? obj : this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- old_par = (obj.parent || $.jstree.root).toString();
- new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);
- old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
- is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
- if(old_ins && old_ins._id) {
- obj = old_ins._model.data[obj.id];
- }
- if(par.id === $.jstree.root) {
- if(pos === "before") { pos = "first"; }
- if(pos === "after") { pos = "last"; }
- }
- switch(pos) {
- case "before":
- pos = $.inArray(par.id, new_par.children);
- break;
- case "after" :
- pos = $.inArray(par.id, new_par.children) + 1;
- break;
- case "inside":
- case "first":
- pos = 0;
- break;
- case "last":
- pos = new_par.children.length;
- break;
- default:
- if(!pos) { pos = 0; }
- break;
- }
- if(pos > new_par.children.length) { pos = new_par.children.length; }
- if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
- this.settings.core.error.call(this, this._data.core.last_error);
- return false;
- }
- node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;
- if(!node) { return false; }
- if(node.id === true) { delete node.id; }
- node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());
- if(!node) { return false; }
- tmp = this.get_node(node);
- if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }
- dpc = [];
- dpc.push(node);
- dpc = dpc.concat(tmp.children_d);
- this.trigger('model', { "nodes" : dpc, "parent" : new_par.id });
-
- for(i = 0, j = new_par.parents.length; i < j; i++) {
- this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);
- }
- dpc = [];
- for(i = 0, j = new_par.children.length; i < j; i++) {
- dpc[i >= pos ? i+1 : i] = new_par.children[i];
- }
- dpc[pos] = tmp.id;
- new_par.children = dpc;
- new_par.children_d.push(tmp.id);
- new_par.children_d = new_par.children_d.concat(tmp.children_d);
- if(new_par.id === $.jstree.root) {
- this._model.force_full_redraw = true;
- }
- if(!this._model.force_full_redraw) {
- this._node_changed(new_par.id);
- }
- if(!skip_redraw) {
- this.redraw(new_par.id === $.jstree.root);
- }
- if(callback) { callback.call(this, tmp, new_par, pos); }
-
- this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
- return tmp.id;
- },
-
- cut : function (obj) {
- if(!obj) { obj = this._data.core.selected.concat(); }
- if(!$.isArray(obj)) { obj = [obj]; }
- if(!obj.length) { return false; }
- var tmp = [], o, t1, t2;
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- o = this.get_node(obj[t1]);
- if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
- }
- if(!tmp.length) { return false; }
- ccp_node = tmp;
- ccp_inst = this;
- ccp_mode = 'move_node';
-
- this.trigger('cut', { "node" : obj });
- },
-
- copy : function (obj) {
- if(!obj) { obj = this._data.core.selected.concat(); }
- if(!$.isArray(obj)) { obj = [obj]; }
- if(!obj.length) { return false; }
- var tmp = [], o, t1, t2;
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- o = this.get_node(obj[t1]);
- if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }
- }
- if(!tmp.length) { return false; }
- ccp_node = tmp;
- ccp_inst = this;
- ccp_mode = 'copy_node';
-
- this.trigger('copy', { "node" : obj });
- },
-
- get_buffer : function () {
- return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };
- },
-
- can_paste : function () {
- return ccp_mode !== false && ccp_node !== false;
- },
-
- paste : function (obj, pos) {
- obj = this.get_node(obj);
- if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
- if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {
-
- this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
- }
- ccp_node = false;
- ccp_mode = false;
- ccp_inst = false;
- },
-
- clear_buffer : function () {
- ccp_node = false;
- ccp_mode = false;
- ccp_inst = false;
-
- this.trigger('clear_buffer');
- },
-
- edit : function (obj, default_text, callback) {
- var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;
- obj = this.get_node(obj);
- if(!obj) { return false; }
- if(!this.check("edit", obj, this.get_parent(obj))) {
- this.settings.core.error.call(this, this._data.core.last_error);
- return false;
- }
- tmp = obj;
- default_text = typeof default_text === 'string' ? default_text : obj.text;
- this.set_text(obj, "");
- obj = this._open_to(obj);
- tmp.text = default_text;
- rtl = this._data.core.rtl;
- w = this.element.width();
- this._data.core.focused = tmp.id;
- a = obj.children('.jstree-anchor').focus();
- s = $('<span></span>');
-
- t = default_text;
- h1 = $("<"+"div></div>", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(document.body);
- h2 = $("<"+"input />", {
- "value" : t,
- "class" : "jstree-rename-input",
-
- "css" : {
- "padding" : "0",
- "border" : "1px solid silver",
- "box-sizing" : "border-box",
- "display" : "inline-block",
- "height" : (this._data.core.li_height) + "px",
- "lineHeight" : (this._data.core.li_height) + "px",
- "width" : "150px"
- },
- "blur" : $.proxy(function (e) {
- e.stopImmediatePropagation();
- e.preventDefault();
- var i = s.children(".jstree-rename-input"),
- v = i.val(),
- f = this.settings.core.force_text,
- nv;
- if(v === "") { v = t; }
- h1.remove();
- s.replaceWith(a);
- s.remove();
- t = f ? t : $('<div></div>').append($.parseHTML(t)).html();
- obj = this.get_node(obj);
- this.set_text(obj, t);
- nv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());
- if(!nv) {
- this.set_text(obj, t);
- }
- this._data.core.focused = tmp.id;
- setTimeout($.proxy(function () {
- var node = this.get_node(tmp.id, true);
- if(node.length) {
- this._data.core.focused = tmp.id;
- node.children('.jstree-anchor').focus();
- }
- }, this), 0);
- if(callback) {
- callback.call(this, tmp, nv, cancel, v);
- }
- h2 = null;
- }, this),
- "keydown" : function (e) {
- var key = e.which;
- if(key === 27) {
- cancel = true;
- this.value = t;
- }
- if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {
- e.stopImmediatePropagation();
- }
- if(key === 27 || key === 13) {
- e.preventDefault();
- this.blur();
- }
- },
- "click" : function (e) { e.stopImmediatePropagation(); },
- "mousedown" : function (e) { e.stopImmediatePropagation(); },
- "keyup" : function (e) {
- h2.width(Math.min(h1.text("pW" + this.value).width(),w));
- },
- "keypress" : function(e) {
- if(e.which === 13) { return false; }
- }
- });
- fn = {
- fontFamily : a.css('fontFamily') || '',
- fontSize : a.css('fontSize') || '',
- fontWeight : a.css('fontWeight') || '',
- fontStyle : a.css('fontStyle') || '',
- fontStretch : a.css('fontStretch') || '',
- fontVariant : a.css('fontVariant') || '',
- letterSpacing : a.css('letterSpacing') || '',
- wordSpacing : a.css('wordSpacing') || ''
- };
- s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);
- a.replaceWith(s);
- h1.css(fn);
- h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
- $(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {
- if (h2 && e.target !== h2) {
- $(h2).blur();
- }
- });
- },
-
- set_theme : function (theme_name, theme_url) {
- if(!theme_name) { return false; }
- if(theme_url === true) {
- var dir = this.settings.core.themes.dir;
- if(!dir) { dir = $.jstree.path + '/themes'; }
- theme_url = dir + '/' + theme_name + '/style.css';
- }
- if(theme_url && $.inArray(theme_url, themes_loaded) === -1) {
- $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />');
- themes_loaded.push(theme_url);
- }
- if(this._data.core.themes.name) {
- this.element.removeClass('jstree-' + this._data.core.themes.name);
- }
- this._data.core.themes.name = theme_name;
- this.element.addClass('jstree-' + theme_name);
- this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');
-
- this.trigger('set_theme', { 'theme' : theme_name });
- },
-
- get_theme : function () { return this._data.core.themes.name; },
-
- set_theme_variant : function (variant_name) {
- if(this._data.core.themes.variant) {
- this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
- }
- this._data.core.themes.variant = variant_name;
- if(variant_name) {
- this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
- }
- },
-
- get_theme_variant : function () { return this._data.core.themes.variant; },
-
- show_stripes : function () {
- this._data.core.themes.stripes = true;
- this.get_container_ul().addClass("jstree-striped");
-
- this.trigger('show_stripes');
- },
-
- hide_stripes : function () {
- this._data.core.themes.stripes = false;
- this.get_container_ul().removeClass("jstree-striped");
-
- this.trigger('hide_stripes');
- },
-
- toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },
-
- show_dots : function () {
- this._data.core.themes.dots = true;
- this.get_container_ul().removeClass("jstree-no-dots");
-
- this.trigger('show_dots');
- },
-
- hide_dots : function () {
- this._data.core.themes.dots = false;
- this.get_container_ul().addClass("jstree-no-dots");
-
- this.trigger('hide_dots');
- },
-
- toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
-
- show_icons : function () {
- this._data.core.themes.icons = true;
- this.get_container_ul().removeClass("jstree-no-icons");
-
- this.trigger('show_icons');
- },
-
- hide_icons : function () {
- this._data.core.themes.icons = false;
- this.get_container_ul().addClass("jstree-no-icons");
-
- this.trigger('hide_icons');
- },
-
- toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
-
- show_ellipsis : function () {
- this._data.core.themes.ellipsis = true;
- this.get_container_ul().addClass("jstree-ellipsis");
-
- this.trigger('show_ellipsis');
- },
-
- hide_ellipsis : function () {
- this._data.core.themes.ellipsis = false;
- this.get_container_ul().removeClass("jstree-ellipsis");
-
- this.trigger('hide_ellipsis');
- },
-
- toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },
-
- set_icon : function (obj, icon) {
- var t1, t2, dom, old;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.set_icon(obj[t1], icon);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- old = obj.icon;
- obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;
- dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon");
- if(icon === false) {
- dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
- this.hide_icon(obj);
- }
- else if(icon === true || icon === null || icon === undefined || icon === '') {
- dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
- if(old === false) { this.show_icon(obj); }
- }
- else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) {
- dom.removeClass(old).css("background","");
- dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon);
- if(old === false) { this.show_icon(obj); }
- }
- else {
- dom.removeClass(old).css("background","");
- dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon);
- if(old === false) { this.show_icon(obj); }
- }
- return true;
- },
-
- get_icon : function (obj) {
- obj = this.get_node(obj);
- return (!obj || obj.id === $.jstree.root) ? false : obj.icon;
- },
-
- hide_icon : function (obj) {
- var t1, t2;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.hide_icon(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj === $.jstree.root) { return false; }
- obj.icon = false;
- this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden');
- return true;
- },
-
- show_icon : function (obj) {
- var t1, t2, dom;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.show_icon(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj === $.jstree.root) { return false; }
- dom = this.get_node(obj, true);
- obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true;
- if(!obj.icon) { obj.icon = true; }
- dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden');
- return true;
- }
- };
-
- $.vakata = {};
-
- $.vakata.attributes = function(node, with_values) {
- node = $(node)[0];
- var attr = with_values ? {} : [];
- if(node && node.attributes) {
- $.each(node.attributes, function (i, v) {
- if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }
- if(v.value !== null && $.vakata.trim(v.value) !== '') {
- if(with_values) { attr[v.name] = v.value; }
- else { attr.push(v.name); }
- }
- });
- }
- return attr;
- };
- $.vakata.array_unique = function(array) {
- var a = [], i, j, l, o = {};
- for(i = 0, l = array.length; i < l; i++) {
- if(o[array[i]] === undefined) {
- a.push(array[i]);
- o[array[i]] = true;
- }
- }
- return a;
- };
-
- $.vakata.array_remove = function(array, from) {
- array.splice(from, 1);
- return array;
-
-
-
-
- };
-
- $.vakata.array_remove_item = function(array, item) {
- var tmp = $.inArray(item, array);
- return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
- };
- $.vakata.array_filter = function(c,a,b,d,e) {
- if (c.filter) {
- return c.filter(a, b);
- }
- d=[];
- for (e in c) {
- if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {
- d.push(c[e]);
- }
- }
- return d;
- };
- $.vakata.trim = function (text) {
- return String.prototype.trim ?
- String.prototype.trim.call(text.toString()) :
- text.toString().replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- };
- $.jstree.plugins.changed = function (options, parent) {
- var last = [];
- this.trigger = function (ev, data) {
- var i, j;
- if(!data) {
- data = {};
- }
- if(ev.replace('.jstree','') === 'changed') {
- data.changed = { selected : [], deselected : [] };
- var tmp = {};
- for(i = 0, j = last.length; i < j; i++) {
- tmp[last[i]] = 1;
- }
- for(i = 0, j = data.selected.length; i < j; i++) {
- if(!tmp[data.selected[i]]) {
- data.changed.selected.push(data.selected[i]);
- }
- else {
- tmp[data.selected[i]] = 2;
- }
- }
- for(i = 0, j = last.length; i < j; i++) {
- if(tmp[last[i]] === 1) {
- data.changed.deselected.push(last[i]);
- }
- }
- last = data.selected.slice();
- }
-
- parent.trigger.call(this, ev, data);
- };
- this.refresh = function (skip_loading, forget_state) {
- last = [];
- return parent.refresh.apply(this, arguments);
- };
- };
- var _i = document.createElement('I');
- _i.className = 'jstree-icon jstree-checkbox';
- _i.setAttribute('role', 'presentation');
-
- $.jstree.defaults.checkbox = {
-
- visible : true,
-
- three_state : true,
-
- whole_node : true,
-
- keep_selected_style : true,
-
- cascade : '',
-
- tie_selection : true,
-
- cascade_to_disabled : true,
-
- cascade_to_hidden : true
- };
- $.jstree.plugins.checkbox = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
- this._data.checkbox.uto = false;
- this._data.checkbox.selected = [];
- if(this.settings.checkbox.three_state) {
- this.settings.checkbox.cascade = 'up+down+undetermined';
- }
- this.element
- .on("init.jstree", $.proxy(function () {
- this._data.checkbox.visible = this.settings.checkbox.visible;
- if(!this.settings.checkbox.keep_selected_style) {
- this.element.addClass('jstree-checkbox-no-clicked');
- }
- if(this.settings.checkbox.tie_selection) {
- this.element.addClass('jstree-checkbox-selection');
- }
- }, this))
- .on("loading.jstree", $.proxy(function () {
- this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();
- }, this));
- if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
- this.element
- .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {
-
- if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
- this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
- }, this));
- }
- if(!this.settings.checkbox.tie_selection) {
- this.element
- .on('model.jstree', $.proxy(function (e, data) {
- var m = this._model.data,
- p = m[data.parent],
- dpc = data.nodes,
- i, j;
- for(i = 0, j = dpc.length; i < j; i++) {
- m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);
- if(m[dpc[i]].state.checked) {
- this._data.checkbox.selected.push(dpc[i]);
- }
- }
- }, this));
- }
- if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {
- this.element
- .on('model.jstree', $.proxy(function (e, data) {
- var m = this._model.data,
- p = m[data.parent],
- dpc = data.nodes,
- chd = [],
- c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
- if(s.indexOf('down') !== -1) {
-
- if(p.state[ t ? 'selected' : 'checked' ]) {
- for(i = 0, j = dpc.length; i < j; i++) {
- m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;
- }
- this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);
- }
- else {
- for(i = 0, j = dpc.length; i < j; i++) {
- if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {
- for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {
- m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;
- }
- this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);
- }
- }
- }
- }
- if(s.indexOf('up') !== -1) {
-
- for(i = 0, j = p.children_d.length; i < j; i++) {
- if(!m[p.children_d[i]].children.length) {
- chd.push(m[p.children_d[i]].parent);
- }
- }
- chd = $.vakata.array_unique(chd);
- for(k = 0, l = chd.length; k < l; k++) {
- p = m[chd[k]];
- while(p && p.id !== $.jstree.root) {
- c = 0;
- for(i = 0, j = p.children.length; i < j; i++) {
- c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
- }
- if(c === j) {
- p.state[ t ? 'selected' : 'checked' ] = true;
- this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
- tmp = this.get_node(p, true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- else {
- break;
- }
- p = this.get_node(p.parent);
- }
- }
- }
- this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);
- }, this))
- .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {
- var self = this,
- obj = data.node,
- m = this._model.data,
- par = this.get_node(obj.parent),
- i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
- sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;
- for (i = 0, j = cur.length; i < j; i++) {
- sel[cur[i]] = true;
- }
-
- if(s.indexOf('down') !== -1) {
-
- var selectedIds = this._cascade_new_checked_state(obj.id, true);
- var temp = obj.children_d.concat(obj.id);
- for (i = 0, j = temp.length; i < j; i++) {
- if (selectedIds.indexOf(temp[i]) > -1) {
- sel[temp[i]] = true;
- }
- else {
- delete sel[temp[i]];
- }
- }
- }
-
- if(s.indexOf('up') !== -1) {
- while(par && par.id !== $.jstree.root) {
- c = 0;
- for(i = 0, j = par.children.length; i < j; i++) {
- c += m[par.children[i]].state[ t ? 'selected' : 'checked' ];
- }
- if(c === j) {
- par.state[ t ? 'selected' : 'checked' ] = true;
- sel[par.id] = true;
-
- tmp = this.get_node(par, true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- else {
- break;
- }
- par = this.get_node(par.parent);
- }
- }
- cur = [];
- for (i in sel) {
- if (sel.hasOwnProperty(i)) {
- cur.push(i);
- }
- }
- this._data[ t ? 'core' : 'checkbox' ].selected = cur;
- }, this))
- .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {
- var obj = this.get_node($.jstree.root),
- m = this._model.data,
- i, j, tmp;
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- tmp = m[obj.children_d[i]];
- if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
- tmp.original.state.undetermined = false;
- }
- }
- }, this))
- .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
- var self = this,
- obj = data.node,
- dom = this.get_node(obj, true),
- i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
- cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {},
- stillSelectedIds = [],
- allIds = obj.children_d.concat(obj.id);
-
- if(s.indexOf('down') !== -1) {
- var selectedIds = this._cascade_new_checked_state(obj.id, false);
- cur = $.vakata.array_filter(cur, function(id) {
- return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1;
- });
- }
-
-
- if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) {
- for(i = 0, j = obj.parents.length; i < j; i++) {
- tmp = this._model.data[obj.parents[i]];
- tmp.state[ t ? 'selected' : 'checked' ] = false;
- if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
- tmp.original.state.undetermined = false;
- }
- tmp = this.get_node(obj.parents[i], true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- cur = $.vakata.array_filter(cur, function(id) {
- return obj.parents.indexOf(id) === -1;
- });
- }
- this._data[ t ? 'core' : 'checkbox' ].selected = cur;
- }, this));
- }
- if(this.settings.checkbox.cascade.indexOf('up') !== -1) {
- this.element
- .on('delete_node.jstree', $.proxy(function (e, data) {
-
- var p = this.get_node(data.parent),
- m = this._model.data,
- i, j, c, tmp, t = this.settings.checkbox.tie_selection;
- while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
- c = 0;
- for(i = 0, j = p.children.length; i < j; i++) {
- c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
- }
- if(j > 0 && c === j) {
- p.state[ t ? 'selected' : 'checked' ] = true;
- this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
- tmp = this.get_node(p, true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- else {
- break;
- }
- p = this.get_node(p.parent);
- }
- }, this))
- .on('move_node.jstree', $.proxy(function (e, data) {
-
- var is_multi = data.is_multi,
- old_par = data.old_parent,
- new_par = this.get_node(data.parent),
- m = this._model.data,
- p, c, i, j, tmp, t = this.settings.checkbox.tie_selection;
- if(!is_multi) {
- p = this.get_node(old_par);
- while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {
- c = 0;
- for(i = 0, j = p.children.length; i < j; i++) {
- c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
- }
- if(j > 0 && c === j) {
- p.state[ t ? 'selected' : 'checked' ] = true;
- this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
- tmp = this.get_node(p, true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- else {
- break;
- }
- p = this.get_node(p.parent);
- }
- }
- p = new_par;
- while(p && p.id !== $.jstree.root) {
- c = 0;
- for(i = 0, j = p.children.length; i < j; i++) {
- c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
- }
- if(c === j) {
- if(!p.state[ t ? 'selected' : 'checked' ]) {
- p.state[ t ? 'selected' : 'checked' ] = true;
- this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
- tmp = this.get_node(p, true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- }
- else {
- if(p.state[ t ? 'selected' : 'checked' ]) {
- p.state[ t ? 'selected' : 'checked' ] = false;
- this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);
- tmp = this.get_node(p, true);
- if(tmp && tmp.length) {
- tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- else {
- break;
- }
- }
- p = this.get_node(p.parent);
- }
- }, this));
- }
- };
-
- this.get_undetermined = function (full) {
- if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) {
- return [];
- }
- var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = [];
- for(i = 0, j = s.length; i < j; i++) {
- if(m[s[i]] && m[s[i]].parents) {
- for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
- if(o[m[s[i]].parents[k]] !== undefined) {
- break;
- }
- if(m[s[i]].parents[k] !== $.jstree.root) {
- o[m[s[i]].parents[k]] = true;
- p.push(m[s[i]].parents[k]);
- }
- }
- }
- }
-
- this.element.find('.jstree-closed').not(':has(.jstree-children)')
- .each(function () {
- var tmp = tt.get_node(this), tmp2;
-
- if(!tmp) { return; }
-
- if(!tmp.state.loaded) {
- if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {
- if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {
- o[tmp.id] = true;
- p.push(tmp.id);
- }
- for(k = 0, l = tmp.parents.length; k < l; k++) {
- if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {
- o[tmp.parents[k]] = true;
- p.push(tmp.parents[k]);
- }
- }
- }
- }
- else {
- for(i = 0, j = tmp.children_d.length; i < j; i++) {
- tmp2 = m[tmp.children_d[i]];
- if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {
- if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {
- o[tmp2.id] = true;
- p.push(tmp2.id);
- }
- for(k = 0, l = tmp2.parents.length; k < l; k++) {
- if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {
- o[tmp2.parents[k]] = true;
- p.push(tmp2.parents[k]);
- }
- }
- }
- }
- }
- });
- for (i = 0, j = p.length; i < j; i++) {
- if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {
- r.push(full ? m[p[i]] : p[i]);
- }
- }
- return r;
- };
-
- this._undetermined = function () {
- if(this.element === null) { return; }
- var p = this.get_undetermined(false), i, j, s;
- this.element.find('.jstree-undetermined').removeClass('jstree-undetermined');
- for (i = 0, j = p.length; i < j; i++) {
- s = this.get_node(p[i], true);
- if(s && s.length) {
- s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
- }
- }
- };
- this.redraw_node = function(obj, deep, is_callback, force_render) {
- obj = parent.redraw_node.apply(this, arguments);
- if(obj) {
- var i, j, tmp = null, icon = null;
- for(i = 0, j = obj.childNodes.length; i < j; i++) {
- if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
- tmp = obj.childNodes[i];
- break;
- }
- }
- if(tmp) {
- if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }
- icon = _i.cloneNode(false);
- if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }
- tmp.insertBefore(icon, tmp.childNodes[0]);
- }
- }
- if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
- if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
- this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
- }
- return obj;
- };
-
- this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); };
-
- this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); };
-
- this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };
-
- this.is_undetermined = function (obj) {
- obj = this.get_node(obj);
- var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;
- if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {
- return false;
- }
- if(!obj.state.loaded && obj.original.state.undetermined === true) {
- return true;
- }
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {
- return true;
- }
- }
- return false;
- };
-
- this.disable_checkbox = function (obj) {
- var t1, t2, dom;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.disable_checkbox(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- dom = this.get_node(obj, true);
- if(!obj.state.checkbox_disabled) {
- obj.state.checkbox_disabled = true;
- if(dom && dom.length) {
- dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');
- }
-
- this.trigger('disable_checkbox', { 'node' : obj });
- }
- };
-
- this.enable_checkbox = function (obj) {
- var t1, t2, dom;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.enable_checkbox(obj[t1]);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- dom = this.get_node(obj, true);
- if(obj.state.checkbox_disabled) {
- obj.state.checkbox_disabled = false;
- if(dom && dom.length) {
- dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');
- }
-
- this.trigger('enable_checkbox', { 'node' : obj });
- }
- };
- this.activate_node = function (obj, e) {
- if($(e.target).hasClass('jstree-checkbox-disabled')) {
- return false;
- }
- if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {
- e.ctrlKey = true;
- }
- if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {
- return parent.activate_node.call(this, obj, e);
- }
- if(this.is_disabled(obj)) {
- return false;
- }
- if(this.is_checked(obj)) {
- this.uncheck_node(obj, e);
- }
- else {
- this.check_node(obj, e);
- }
- this.trigger('activate_node', { 'node' : this.get_node(obj) });
- };
-
- this._cascade_new_checked_state = function (id, checkedState) {
- var self = this;
- var t = this.settings.checkbox.tie_selection;
- var node = this._model.data[id];
- var selectedNodeIds = [];
- var selectedChildrenIds = [], i, j, selectedChildIds;
- if (
- (this.settings.checkbox.cascade_to_disabled || !node.state.disabled) &&
- (this.settings.checkbox.cascade_to_hidden || !node.state.hidden)
- ) {
-
- if (node.children) {
- for (i = 0, j = node.children.length; i < j; i++) {
- var childId = node.children[i];
- selectedChildIds = self._cascade_new_checked_state(childId, checkedState);
- selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
- if (selectedChildIds.indexOf(childId) > -1) {
- selectedChildrenIds.push(childId);
- }
- }
- }
- var dom = self.get_node(node, true);
-
- var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length;
- if(node.original && node.original.state && node.original.state.undetermined) {
- node.original.state.undetermined = undetermined;
- }
-
- if (undetermined) {
- node.state[ t ? 'selected' : 'checked' ] = false;
- dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
-
-
- else if (checkedState && selectedChildrenIds.length === node.children.length) {
- node.state[ t ? 'selected' : 'checked' ] = checkedState;
- selectedNodeIds.push(node.id);
- dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- else {
- node.state[ t ? 'selected' : 'checked' ] = false;
- dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
- }
- }
- else {
- selectedChildIds = this.get_checked_descendants(id);
- if (node.state[ t ? 'selected' : 'checked' ]) {
- selectedChildIds.push(node.id);
- }
- selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
- }
- return selectedNodeIds;
- };
-
- this.get_checked_descendants = function (id) {
- var self = this;
- var t = self.settings.checkbox.tie_selection;
- var node = self._model.data[id];
- return $.vakata.array_filter(node.children_d, function(_id) {
- return self._model.data[_id].state[ t ? 'selected' : 'checked' ];
- });
- };
-
- this.check_node = function (obj, e) {
- if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }
- var dom, t1, t2, th;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.check_node(obj[t1], e);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- dom = this.get_node(obj, true);
- if(!obj.state.checked) {
- obj.state.checked = true;
- this._data.checkbox.selected.push(obj.id);
- if(dom && dom.length) {
- dom.children('.jstree-anchor').addClass('jstree-checked');
- }
-
- this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
- }
- };
-
- this.uncheck_node = function (obj, e) {
- if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }
- var t1, t2, dom;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.uncheck_node(obj[t1], e);
- }
- return true;
- }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) {
- return false;
- }
- dom = this.get_node(obj, true);
- if(obj.state.checked) {
- obj.state.checked = false;
- this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);
- if(dom.length) {
- dom.children('.jstree-anchor').removeClass('jstree-checked');
- }
-
- this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
- }
- };
-
-
- this.check_all = function () {
- if(this.settings.checkbox.tie_selection) { return this.select_all(); }
- var tmp = this._data.checkbox.selected.concat([]), i, j;
- this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();
- for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
- if(this._model.data[this._data.checkbox.selected[i]]) {
- this._model.data[this._data.checkbox.selected[i]].state.checked = true;
- }
- }
- this.redraw(true);
-
- this.trigger('check_all', { 'selected' : this._data.checkbox.selected });
- };
-
- this.uncheck_all = function () {
- if(this.settings.checkbox.tie_selection) { return this.deselect_all(); }
- var tmp = this._data.checkbox.selected.concat([]), i, j;
- for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
- if(this._model.data[this._data.checkbox.selected[i]]) {
- this._model.data[this._data.checkbox.selected[i]].state.checked = false;
- }
- }
- this._data.checkbox.selected = [];
- this.element.find('.jstree-checked').removeClass('jstree-checked');
-
- this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });
- };
-
- this.is_checked = function (obj) {
- if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- return obj.state.checked;
- };
-
- this.get_checked = function (full) {
- if(this.settings.checkbox.tie_selection) { return this.get_selected(full); }
- return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected.slice();
- };
-
- this.get_top_checked = function (full) {
- if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }
- var tmp = this.get_checked(true),
- obj = {}, i, j, k, l;
- for(i = 0, j = tmp.length; i < j; i++) {
- obj[tmp[i].id] = tmp[i];
- }
- for(i = 0, j = tmp.length; i < j; i++) {
- for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
- if(obj[tmp[i].children_d[k]]) {
- delete obj[tmp[i].children_d[k]];
- }
- }
- }
- tmp = [];
- for(i in obj) {
- if(obj.hasOwnProperty(i)) {
- tmp.push(i);
- }
- }
- return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
- };
-
- this.get_bottom_checked = function (full) {
- if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }
- var tmp = this.get_checked(true),
- obj = [], i, j;
- for(i = 0, j = tmp.length; i < j; i++) {
- if(!tmp[i].children.length) {
- obj.push(tmp[i].id);
- }
- }
- return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
- };
- this.load_node = function (obj, callback) {
- var k, l, i, j, c, tmp;
- if(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {
- tmp = this.get_node(obj);
- if(tmp && tmp.state.loaded) {
- for(k = 0, l = tmp.children_d.length; k < l; k++) {
- if(this._model.data[tmp.children_d[k]].state.checked) {
- c = true;
- this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);
- }
- }
- }
- }
- return parent.load_node.apply(this, arguments);
- };
- this.get_state = function () {
- var state = parent.get_state.apply(this, arguments);
- if(this.settings.checkbox.tie_selection) { return state; }
- state.checkbox = this._data.checkbox.selected.slice();
- return state;
- };
- this.set_state = function (state, callback) {
- var res = parent.set_state.apply(this, arguments);
- if(res && state.checkbox) {
- if(!this.settings.checkbox.tie_selection) {
- this.uncheck_all();
- var _this = this;
- $.each(state.checkbox, function (i, v) {
- _this.check_node(v);
- });
- }
- delete state.checkbox;
- this.set_state(state, callback);
- return false;
- }
- return res;
- };
- this.refresh = function (skip_loading, forget_state) {
- if(this.settings.checkbox.tie_selection) {
- this._data.checkbox.selected = [];
- }
- return parent.refresh.apply(this, arguments);
- };
- };
-
-
-
- $.jstree.defaults.conditionalselect = function () { return true; };
- $.jstree.plugins.conditionalselect = function (options, parent) {
-
- this.activate_node = function (obj, e) {
- if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {
- return parent.activate_node.call(this, obj, e);
- }
- };
- };
-
- $.jstree.defaults.contextmenu = {
-
- select_node : true,
-
- show_at_node : true,
-
- items : function (o, cb) {
- return {
- "create" : {
- "separator_before" : false,
- "separator_after" : true,
- "_disabled" : false,
- "label" : "Create",
- "action" : function (data) {
- var inst = $.jstree.reference(data.reference),
- obj = inst.get_node(data.reference);
- inst.create_node(obj, {}, "last", function (new_node) {
- try {
- inst.edit(new_node);
- } catch (ex) {
- setTimeout(function () { inst.edit(new_node); },0);
- }
- });
- }
- },
- "rename" : {
- "separator_before" : false,
- "separator_after" : false,
- "_disabled" : false,
- "label" : "Rename",
-
- "action" : function (data) {
- var inst = $.jstree.reference(data.reference),
- obj = inst.get_node(data.reference);
- inst.edit(obj);
- }
- },
- "remove" : {
- "separator_before" : false,
- "icon" : false,
- "separator_after" : false,
- "_disabled" : false,
- "label" : "Delete",
- "action" : function (data) {
- var inst = $.jstree.reference(data.reference),
- obj = inst.get_node(data.reference);
- if(inst.is_selected(obj)) {
- inst.delete_node(inst.get_selected());
- }
- else {
- inst.delete_node(obj);
- }
- }
- },
- "ccp" : {
- "separator_before" : true,
- "icon" : false,
- "separator_after" : false,
- "label" : "Edit",
- "action" : false,
- "submenu" : {
- "cut" : {
- "separator_before" : false,
- "separator_after" : false,
- "label" : "Cut",
- "action" : function (data) {
- var inst = $.jstree.reference(data.reference),
- obj = inst.get_node(data.reference);
- if(inst.is_selected(obj)) {
- inst.cut(inst.get_top_selected());
- }
- else {
- inst.cut(obj);
- }
- }
- },
- "copy" : {
- "separator_before" : false,
- "icon" : false,
- "separator_after" : false,
- "label" : "Copy",
- "action" : function (data) {
- var inst = $.jstree.reference(data.reference),
- obj = inst.get_node(data.reference);
- if(inst.is_selected(obj)) {
- inst.copy(inst.get_top_selected());
- }
- else {
- inst.copy(obj);
- }
- }
- },
- "paste" : {
- "separator_before" : false,
- "icon" : false,
- "_disabled" : function (data) {
- return !$.jstree.reference(data.reference).can_paste();
- },
- "separator_after" : false,
- "label" : "Paste",
- "action" : function (data) {
- var inst = $.jstree.reference(data.reference),
- obj = inst.get_node(data.reference);
- inst.paste(obj);
- }
- }
- }
- }
- };
- }
- };
- $.jstree.plugins.contextmenu = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
- var last_ts = 0, cto = null, ex, ey;
- this.element
- .on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
- this.get_container_ul().addClass('jstree-contextmenu');
- }, this))
- .on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) {
- if (e.target.tagName.toLowerCase() === 'input') {
- return;
- }
- e.preventDefault();
- last_ts = e.ctrlKey ? +new Date() : 0;
- if(data || cto) {
- last_ts = (+new Date()) + 10000;
- }
- if(cto) {
- clearTimeout(cto);
- }
- if(!this.is_loading(e.currentTarget)) {
- this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);
- }
- }, this))
- .on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
- if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) {
- $.vakata.context.hide();
- }
- last_ts = 0;
- }, this))
- .on("touchstart.jstree", ".jstree-anchor", function (e) {
- if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {
- return;
- }
- ex = e.originalEvent.changedTouches[0].clientX;
- ey = e.originalEvent.changedTouches[0].clientY;
- cto = setTimeout(function () {
- $(e.currentTarget).trigger('contextmenu', true);
- }, 750);
- })
- .on('touchmove.vakata.jstree', function (e) {
- if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) {
- clearTimeout(cto);
- $.vakata.context.hide();
- }
- })
- .on('touchend.vakata.jstree', function (e) {
- if(cto) {
- clearTimeout(cto);
- }
- });
-
- $(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) {
- this._data.contextmenu.visible = false;
- $(data.reference).removeClass('jstree-context');
- }, this));
- };
- this.teardown = function () {
- if(this._data.contextmenu.visible) {
- $.vakata.context.hide();
- }
- parent.teardown.call(this);
- };
-
- this.show_contextmenu = function (obj, x, y, e) {
- obj = this.get_node(obj);
- if(!obj || obj.id === $.jstree.root) { return false; }
- var s = this.settings.contextmenu,
- d = this.get_node(obj, true),
- a = d.children(".jstree-anchor"),
- o = false,
- i = false;
- if(s.show_at_node || x === undefined || y === undefined) {
- o = a.offset();
- x = o.left;
- y = o.top + this._data.core.li_height;
- }
- if(this.settings.contextmenu.select_node && !this.is_selected(obj)) {
- this.activate_node(obj, e);
- }
- i = s.items;
- if($.isFunction(i)) {
- i = i.call(this, obj, $.proxy(function (i) {
- this._show_contextmenu(obj, x, y, i);
- }, this));
- }
- if($.isPlainObject(i)) {
- this._show_contextmenu(obj, x, y, i);
- }
- };
-
- this._show_contextmenu = function (obj, x, y, i) {
- var d = this.get_node(obj, true),
- a = d.children(".jstree-anchor");
- $(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
- var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
- $(data.element).addClass(cls);
- a.addClass('jstree-context');
- }, this));
- this._data.contextmenu.visible = true;
- $.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
-
- this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y });
- };
- };
-
- (function ($) {
- var right_to_left = false,
- vakata_context = {
- element : false,
- reference : false,
- position_x : 0,
- position_y : 0,
- items : [],
- html : "",
- is_visible : false
- };
- $.vakata.context = {
- settings : {
- hide_onmouseleave : 0,
- icons : true
- },
- _trigger : function (event_name) {
- $(document).triggerHandler("context_" + event_name + ".vakata", {
- "reference" : vakata_context.reference,
- "element" : vakata_context.element,
- "position" : {
- "x" : vakata_context.position_x,
- "y" : vakata_context.position_y
- }
- });
- },
- _execute : function (i) {
- i = vakata_context.items[i];
- return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, {
- "item" : i,
- "reference" : vakata_context.reference,
- "element" : vakata_context.element,
- "position" : {
- "x" : vakata_context.position_x,
- "y" : vakata_context.position_y
- }
- }) : false;
- },
- _parse : function (o, is_callback) {
- if(!o) { return false; }
- if(!is_callback) {
- vakata_context.html = "";
- vakata_context.items = [];
- }
- var str = "",
- sep = false,
- tmp;
- if(is_callback) { str += "<"+"ul>"; }
- $.each(o, function (i, val) {
- if(!val) { return true; }
- vakata_context.items.push(val);
- if(!sep && val.separator_before) {
- str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>";
- }
- sep = false;
- str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">";
- str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">";
- if($.vakata.context.settings.icons) {
- str += "<"+"i ";
- if(val.icon) {
- if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; }
- else { str += " class='" + val.icon + "' "; }
- }
- str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>";
- }
- str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'">'+ (val.shortcut_label || '') +'</span>':'') + "<"+"/a>";
- if(val.submenu) {
- tmp = $.vakata.context._parse(val.submenu, true);
- if(tmp) { str += tmp; }
- }
- str += "<"+"/li>";
- if(val.separator_after) {
- str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>";
- sep = true;
- }
- });
- str = str.replace(/<li class\='vakata-context-separator'\><\/li\>$/,"");
- if(is_callback) { str += "</ul>"; }
-
- if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); }
- return str.length > 10 ? str : false;
- },
- _show_submenu : function (o) {
- o = $(o);
- if(!o.length || !o.children("ul").length) { return; }
- var e = o.children("ul"),
- xl = o.offset().left,
- x = xl + o.outerWidth(),
- y = o.offset().top,
- w = e.width(),
- h = e.height(),
- dw = $(window).width() + $(window).scrollLeft(),
- dh = $(window).height() + $(window).scrollTop();
-
- if(right_to_left) {
- o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
- }
- else {
- o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right");
- }
- if(y + h + 10 > dh) {
- e.css("bottom","-1px");
- }
-
- if (o.hasClass('vakata-context-right')) {
- if (xl < w) {
- e.css("margin-right", xl - w);
- }
- } else {
- if (dw - x < w) {
- e.css("margin-left", dw - x - w);
- }
- }
- e.show();
- },
- show : function (reference, position, data) {
- var o, e, x, y, w, h, dw, dh, cond = true;
- if(vakata_context.element && vakata_context.element.length) {
- vakata_context.element.width('');
- }
- switch(cond) {
- case (!position && !reference):
- return false;
- case (!!position && !!reference):
- vakata_context.reference = reference;
- vakata_context.position_x = position.x;
- vakata_context.position_y = position.y;
- break;
- case (!position && !!reference):
- vakata_context.reference = reference;
- o = reference.offset();
- vakata_context.position_x = o.left + reference.outerHeight();
- vakata_context.position_y = o.top;
- break;
- case (!!position && !reference):
- vakata_context.position_x = position.x;
- vakata_context.position_y = position.y;
- break;
- }
- if(!!reference && !data && $(reference).data('vakata_contextmenu')) {
- data = $(reference).data('vakata_contextmenu');
- }
- if($.vakata.context._parse(data)) {
- vakata_context.element.html(vakata_context.html);
- }
- if(vakata_context.items.length) {
- vakata_context.element.appendTo(document.body);
- e = vakata_context.element;
- x = vakata_context.position_x;
- y = vakata_context.position_y;
- w = e.width();
- h = e.height();
- dw = $(window).width() + $(window).scrollLeft();
- dh = $(window).height() + $(window).scrollTop();
- if(right_to_left) {
- x -= (e.outerWidth() - $(reference).outerWidth());
- if(x < $(window).scrollLeft() + 20) {
- x = $(window).scrollLeft() + 20;
- }
- }
- if(x + w + 20 > dw) {
- x = dw - (w + 20);
- }
- if(y + h + 20 > dh) {
- y = dh - (h + 20);
- }
- vakata_context.element
- .css({ "left" : x, "top" : y })
- .show()
- .find('a').first().focus().parent().addClass("vakata-context-hover");
- vakata_context.is_visible = true;
-
- $.vakata.context._trigger("show");
- }
- },
- hide : function () {
- if(vakata_context.is_visible) {
- vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach();
- vakata_context.is_visible = false;
-
- $.vakata.context._trigger("hide");
- }
- }
- };
- $(function () {
- right_to_left = $(document.body).css("direction") === "rtl";
- var to = false;
- vakata_context.element = $("<ul class='vakata-context'></ul>");
- vakata_context.element
- .on("mouseenter", "li", function (e) {
- e.stopImmediatePropagation();
- if($.contains(this, e.relatedTarget)) {
-
-
- return;
- }
- if(to) { clearTimeout(to); }
- vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end();
- $(this)
- .siblings().find("ul").hide().end().end()
- .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover");
- $.vakata.context._show_submenu(this);
- })
-
- .on("mouseleave", "li", function (e) {
- if($.contains(this, e.relatedTarget)) { return; }
- $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover");
- })
- .on("mouseleave", function (e) {
- $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
- if($.vakata.context.settings.hide_onmouseleave) {
- to = setTimeout(
- (function (t) {
- return function () { $.vakata.context.hide(); };
- }(this)), $.vakata.context.settings.hide_onmouseleave);
- }
- })
- .on("click", "a", function (e) {
- e.preventDefault();
-
-
- if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) {
- $.vakata.context.hide();
- }
- })
- .on('keydown', 'a', function (e) {
- var o = null;
- switch(e.which) {
- case 13:
- case 32:
- e.type = "click";
- e.preventDefault();
- $(e.currentTarget).trigger(e);
- break;
- case 37:
- if(vakata_context.is_visible) {
- vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus();
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- break;
- case 38:
- if(vakata_context.is_visible) {
- o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first();
- if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); }
- o.addClass("vakata-context-hover").children('a').focus();
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- break;
- case 39:
- if(vakata_context.is_visible) {
- vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus();
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- break;
- case 40:
- if(vakata_context.is_visible) {
- o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first();
- if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); }
- o.addClass("vakata-context-hover").children('a').focus();
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- break;
- case 27:
- $.vakata.context.hide();
- e.preventDefault();
- break;
- default:
-
- break;
- }
- })
- .on('keydown', function (e) {
- e.preventDefault();
- var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();
- if(a.parent().not('.vakata-context-disabled')) {
- a.click();
- }
- });
- $(document)
- .on("mousedown.vakata.jstree", function (e) {
- if(vakata_context.is_visible && vakata_context.element[0] !== e.target && !$.contains(vakata_context.element[0], e.target)) {
- $.vakata.context.hide();
- }
- })
- .on("context_show.vakata.jstree", function (e, data) {
- vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent");
- if(right_to_left) {
- vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl");
- }
-
- vakata_context.element.find("ul").hide().end();
- });
- });
- }($));
-
-
- $.jstree.defaults.dnd = {
-
- copy : true,
-
- open_timeout : 500,
-
- is_draggable : true,
-
- check_while_dragging : true,
-
- always_copy : false,
-
- inside_pos : 0,
-
- drag_selection : true,
-
- touch : true,
-
- large_drop_target : false,
-
- large_drag_target : false,
-
- use_html5: false
- };
- var drg, elm;
-
- $.jstree.plugins.dnd = function (options, parent) {
- this.init = function (el, options) {
- parent.init.call(this, el, options);
- this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));
- };
- this.bind = function () {
- parent.bind.call(this);
- this.element
- .on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
- if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {
- return true;
- }
- if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {
- return true;
- }
- var obj = this.get_node(e.target),
- mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,
- txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));
- if(this.settings.core.force_text) {
- txt = $.vakata.html.escape(txt);
- }
- if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") &&
- (this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))
- ) {
- drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };
- elm = e.currentTarget;
- if (this.settings.dnd.use_html5) {
- $.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });
- } else {
- this.element.trigger('mousedown.jstree');
- return $.vakata.dnd.start(e, drg, '<div id="jstree-dnd" class="jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '"><i class="jstree-icon jstree-er"></i>' + txt + '<ins class="jstree-copy" style="display:none;">+</ins></div>');
- }
- }
- }, this));
- if (this.settings.dnd.use_html5) {
- this.element
- .on('dragover.jstree', function (e) {
- e.preventDefault();
- $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
- return false;
- })
-
-
-
-
-
- .on('drop.jstree', $.proxy(function (e) {
- e.preventDefault();
- $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
- return false;
- }, this));
- }
- };
- this.redraw_node = function(obj, deep, callback, force_render) {
- obj = parent.redraw_node.apply(this, arguments);
- if (obj && this.settings.dnd.use_html5) {
- if (this.settings.dnd.large_drag_target) {
- obj.setAttribute('draggable', true);
- } else {
- var i, j, tmp = null;
- for(i = 0, j = obj.childNodes.length; i < j; i++) {
- if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
- tmp = obj.childNodes[i];
- break;
- }
- }
- if(tmp) {
- tmp.setAttribute('draggable', true);
- }
- }
- }
- return obj;
- };
- };
- $(function() {
-
- var lastmv = false,
- laster = false,
- lastev = false,
- opento = false,
- marker = $('<div id="jstree-marker"> </div>').hide();
- $(document)
- .on('dragover.vakata.jstree', function (e) {
- if (elm) {
- $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
- }
- })
- .on('drop.vakata.jstree', function (e) {
- if (elm) {
- $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
- elm = null;
- drg = null;
- }
- })
- .on('dnd_start.vakata.jstree', function (e, data) {
- lastmv = false;
- lastev = false;
- if(!data || !data.data || !data.data.jstree) { return; }
- marker.appendTo(document.body);
- })
- .on('dnd_move.vakata.jstree', function (e, data) {
- var isDifferentNode = data.event.target !== lastev.target;
- if(opento) {
- if (!data.event || data.event.type !== 'dragover' || isDifferentNode) {
- clearTimeout(opento);
- }
- }
- if(!data || !data.data || !data.data.jstree) { return; }
-
- if(data.event.target.id && data.event.target.id === 'jstree-marker') {
- return;
- }
- lastev = data.event;
- var ins = $.jstree.reference(data.event.target),
- ref = false,
- off = false,
- rel = false,
- tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn, c;
-
- if(ins && ins._data && ins._data.dnd) {
- marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
- is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));
- data.helper
- .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))
- .find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();
-
-
- if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
- ok = true;
- for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
- ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });
- if(!ok) { break; }
- }
- if(ok) {
- lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };
- marker.hide();
- data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
- if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
- data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
- }
- return;
- }
- }
- else {
-
- ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');
- if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
- off = ref.offset();
- rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;
- h = ref.outerHeight();
- if(rel < h / 3) {
- o = ['b', 'i', 'a'];
- }
- else if(rel > h - h / 3) {
- o = ['a', 'i', 'b'];
- }
- else {
- o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];
- }
- $.each(o, function (j, v) {
- switch(v) {
- case 'b':
- l = off.left - 6;
- t = off.top;
- p = ins.get_parent(ref);
- i = ref.parent().index();
- c = 'jstree-below';
- break;
- case 'i':
- ip = ins.settings.dnd.inside_pos;
- tm = ins.get_node(ref.parent());
- l = off.left - 2;
- t = off.top + h / 2 + 1;
- p = tm.id;
- i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));
- c = 'jstree-inside';
- break;
- case 'a':
- l = off.left - 6;
- t = off.top + h;
- p = ins.get_parent(ref);
- i = ref.parent().index() + 1;
- c = 'jstree-above';
- break;
- }
- ok = true;
- for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
- op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node";
- ps = i;
- if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {
- pr = ins.get_node(p);
- if(ps > $.inArray(data.data.nodes[t1], pr.children)) {
- ps -= 1;
- }
- }
- ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );
- if(!ok) {
- if(ins && ins.last_error) { laster = ins.last_error(); }
- break;
- }
- }
- if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {
- if (!data.event || data.event.type !== 'dragover' || isDifferentNode) {
- if (opento) { clearTimeout(opento); }
- opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
- }
- }
- if(ok) {
- pn = ins.get_node(p, true);
- if (!pn.hasClass('.jstree-dnd-parent')) {
- $('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
- pn.addClass('jstree-dnd-parent');
- }
- lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
- marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
- marker.removeClass('jstree-above jstree-inside jstree-below').addClass(c);
- data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
- if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
- data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
- }
- laster = {};
- o = true;
- return false;
- }
- });
- if(o === true) { return; }
- }
- }
- }
- $('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
- lastmv = false;
- data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
- if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
-
- }
- marker.hide();
- })
- .on('dnd_scroll.vakata.jstree', function (e, data) {
- if(!data || !data.data || !data.data.jstree) { return; }
- marker.hide();
- lastmv = false;
- lastev = false;
- data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
- })
- .on('dnd_stop.vakata.jstree', function (e, data) {
- $('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
- if(opento) { clearTimeout(opento); }
- if(!data || !data.data || !data.data.jstree) { return; }
- marker.hide().detach();
- var i, j, nodes = [];
- if(lastmv) {
- for(i = 0, j = data.data.nodes.length; i < j; i++) {
- nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];
- }
- lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);
- }
- else {
- i = $(data.event.target).closest('.jstree');
- if(i.length && laster && laster.error && laster.error === 'check') {
- i = i.jstree(true);
- if(i) {
- i.settings.core.error.call(this, laster);
- }
- }
- }
- lastev = false;
- lastmv = false;
- })
- .on('keyup.jstree keydown.jstree', function (e, data) {
- data = $.vakata.dnd._get();
- if(data && data.data && data.data.jstree) {
- if (e.type === "keyup" && e.which === 27) {
- if (opento) { clearTimeout(opento); }
- lastmv = false;
- laster = false;
- lastev = false;
- opento = false;
- marker.hide().detach();
- $.vakata.dnd._clean();
- } else {
- data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();
- if(lastev) {
- lastev.metaKey = e.metaKey;
- lastev.ctrlKey = e.ctrlKey;
- $.vakata.dnd._trigger('move', lastev);
- }
- }
- }
- });
- });
-
- (function ($) {
- $.vakata.html = {
- div : $('<div></div>'),
- escape : function (str) {
- return $.vakata.html.div.text(str).html();
- },
- strip : function (str) {
- return $.vakata.html.div.empty().append($.parseHTML(str)).text();
- }
- };
-
- var vakata_dnd = {
- element : false,
- target : false,
- is_down : false,
- is_drag : false,
- helper : false,
- helper_w: 0,
- data : false,
- init_x : 0,
- init_y : 0,
- scroll_l: 0,
- scroll_t: 0,
- scroll_e: false,
- scroll_i: false,
- is_touch: false
- };
- $.vakata.dnd = {
- settings : {
- scroll_speed : 10,
- scroll_proximity : 20,
- helper_left : 5,
- helper_top : 10,
- threshold : 5,
- threshold_touch : 10
- },
- _trigger : function (event_name, e, data) {
- if (data === undefined) {
- data = $.vakata.dnd._get();
- }
- data.event = e;
- $(document).triggerHandler("dnd_" + event_name + ".vakata", data);
- },
- _get : function () {
- return {
- "data" : vakata_dnd.data,
- "element" : vakata_dnd.element,
- "helper" : vakata_dnd.helper
- };
- },
- _clean : function () {
- if(vakata_dnd.helper) { vakata_dnd.helper.remove(); }
- if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
- vakata_dnd = {
- element : false,
- target : false,
- is_down : false,
- is_drag : false,
- helper : false,
- helper_w: 0,
- data : false,
- init_x : 0,
- init_y : 0,
- scroll_l: 0,
- scroll_t: 0,
- scroll_e: false,
- scroll_i: false,
- is_touch: false
- };
- elm = null;
- $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
- $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
- },
- _scroll : function (init_only) {
- if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {
- if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
- return false;
- }
- if(!vakata_dnd.scroll_i) {
- vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);
- return false;
- }
- if(init_only === true) { return false; }
- var i = vakata_dnd.scroll_e.scrollTop(),
- j = vakata_dnd.scroll_e.scrollLeft();
- vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);
- vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);
- if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {
-
- $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e);
- }
- },
- start : function (e, data, html) {
- if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
- e.pageX = e.originalEvent.changedTouches[0].pageX;
- e.pageY = e.originalEvent.changedTouches[0].pageY;
- e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
- }
- if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }
- try {
- e.currentTarget.unselectable = "on";
- e.currentTarget.onselectstart = function() { return false; };
- if(e.currentTarget.style) {
- e.currentTarget.style.touchAction = "none";
- e.currentTarget.style.msTouchAction = "none";
- e.currentTarget.style.MozUserSelect = "none";
- }
- } catch(ignore) { }
- vakata_dnd.init_x = e.pageX;
- vakata_dnd.init_y = e.pageY;
- vakata_dnd.data = data;
- vakata_dnd.is_down = true;
- vakata_dnd.element = e.currentTarget;
- vakata_dnd.target = e.target;
- vakata_dnd.is_touch = e.type === "touchstart";
- if(html !== false) {
- vakata_dnd.helper = $("<div id='vakata-dnd'></div>").html(html).css({
- "display" : "block",
- "margin" : "0",
- "padding" : "0",
- "position" : "absolute",
- "top" : "-2000px",
- "lineHeight" : "16px",
- "zIndex" : "10000"
- });
- }
- $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
- $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
- return false;
- },
- drag : function (e) {
- if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
- e.pageX = e.originalEvent.changedTouches[0].pageX;
- e.pageY = e.originalEvent.changedTouches[0].pageY;
- e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
- }
- if(!vakata_dnd.is_down) { return; }
- if(!vakata_dnd.is_drag) {
- if(
- Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||
- Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)
- ) {
- if(vakata_dnd.helper) {
- vakata_dnd.helper.appendTo(document.body);
- vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
- }
- vakata_dnd.is_drag = true;
- $(vakata_dnd.target).one('click.vakata', false);
-
- $.vakata.dnd._trigger("start", e);
- }
- else { return; }
- }
- var d = false, w = false,
- dh = false, wh = false,
- dw = false, ww = false,
- dt = false, dl = false,
- ht = false, hl = false;
- vakata_dnd.scroll_t = 0;
- vakata_dnd.scroll_l = 0;
- vakata_dnd.scroll_e = false;
- $($(e.target).parentsUntil("body").addBack().get().reverse())
- .filter(function () {
- return (/^auto|scroll$/).test($(this).css("overflow")) &&
- (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);
- })
- .each(function () {
- var t = $(this), o = t.offset();
- if(this.scrollHeight > this.offsetHeight) {
- if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; }
- if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; }
- }
- if(this.scrollWidth > this.offsetWidth) {
- if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; }
- if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; }
- }
- if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
- vakata_dnd.scroll_e = $(this);
- return false;
- }
- });
- if(!vakata_dnd.scroll_e) {
- d = $(document); w = $(window);
- dh = d.height(); wh = w.height();
- dw = d.width(); ww = w.width();
- dt = d.scrollTop(); dl = d.scrollLeft();
- if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; }
- if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; }
- if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; }
- if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; }
- if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
- vakata_dnd.scroll_e = d;
- }
- }
- if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }
- if(vakata_dnd.helper) {
- ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);
- hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);
- if(dh && ht + 25 > dh) { ht = dh - 50; }
- if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }
- vakata_dnd.helper.css({
- left : hl + "px",
- top : ht + "px"
- });
- }
-
- $.vakata.dnd._trigger("move", e);
- return false;
- },
- stop : function (e) {
- if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
- e.pageX = e.originalEvent.changedTouches[0].pageX;
- e.pageY = e.originalEvent.changedTouches[0].pageY;
- e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
- }
- if(vakata_dnd.is_drag) {
-
- if (e.target !== vakata_dnd.target) {
- $(vakata_dnd.target).off('click.vakata');
- }
- $.vakata.dnd._trigger("stop", e);
- }
- else {
- if(e.type === "touchend" && e.target === vakata_dnd.target) {
- var to = setTimeout(function () { $(e.target).click(); }, 100);
- $(e.target).one('click', function() { if(to) { clearTimeout(to); } });
- }
- }
- $.vakata.dnd._clean();
- return false;
- }
- };
- }($));
-
-
-
- $.jstree.defaults.massload = null;
- $.jstree.plugins.massload = function (options, parent) {
- this.init = function (el, options) {
- this._data.massload = {};
- parent.init.call(this, el, options);
- };
- this._load_nodes = function (nodes, callback, is_callback, force_reload) {
- var s = this.settings.massload,
- toLoad = [],
- m = this._model.data,
- i, j, dom;
- if (!is_callback) {
- for(i = 0, j = nodes.length; i < j; i++) {
- if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {
- toLoad.push(nodes[i]);
- dom = this.get_node(nodes[i], true);
- if (dom && dom.length) {
- dom.addClass("jstree-loading").attr('aria-busy',true);
- }
- }
- }
- this._data.massload = {};
- if (toLoad.length) {
- if($.isFunction(s)) {
- return s.call(this, toLoad, $.proxy(function (data) {
- var i, j;
- if(data) {
- for(i in data) {
- if(data.hasOwnProperty(i)) {
- this._data.massload[i] = data[i];
- }
- }
- }
- for(i = 0, j = nodes.length; i < j; i++) {
- dom = this.get_node(nodes[i], true);
- if (dom && dom.length) {
- dom.removeClass("jstree-loading").attr('aria-busy',false);
- }
- }
- parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
- }, this));
- }
- if(typeof s === 'object' && s && s.url) {
- s = $.extend(true, {}, s);
- if($.isFunction(s.url)) {
- s.url = s.url.call(this, toLoad);
- }
- if($.isFunction(s.data)) {
- s.data = s.data.call(this, toLoad);
- }
- return $.ajax(s)
- .done($.proxy(function (data,t,x) {
- var i, j;
- if(data) {
- for(i in data) {
- if(data.hasOwnProperty(i)) {
- this._data.massload[i] = data[i];
- }
- }
- }
- for(i = 0, j = nodes.length; i < j; i++) {
- dom = this.get_node(nodes[i], true);
- if (dom && dom.length) {
- dom.removeClass("jstree-loading").attr('aria-busy',false);
- }
- }
- parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
- }, this))
- .fail($.proxy(function (f) {
- parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
- }, this));
- }
- }
- }
- return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
- };
- this._load_node = function (obj, callback) {
- var data = this._data.massload[obj.id],
- rslt = null, dom;
- if(data) {
- rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](
- obj,
- typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,
- function (status) { callback.call(this, status); }
- );
- dom = this.get_node(obj.id, true);
- if (dom && dom.length) {
- dom.removeClass("jstree-loading").attr('aria-busy',false);
- }
- delete this._data.massload[obj.id];
- return rslt;
- }
- return parent._load_node.call(this, obj, callback);
- };
- };
-
- $.jstree.defaults.search = {
-
- ajax : false,
-
- fuzzy : false,
-
- case_sensitive : false,
-
- show_only_matches : false,
-
- show_only_matches_children : false,
-
- close_opened_onclear : true,
-
- search_leaves_only : false,
-
- search_callback : false
- };
- $.jstree.plugins.search = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
- this._data.search.str = "";
- this._data.search.dom = $();
- this._data.search.res = [];
- this._data.search.opn = [];
- this._data.search.som = false;
- this._data.search.smc = false;
- this._data.search.hdn = [];
- this.element
- .on("search.jstree", $.proxy(function (e, data) {
- if(this._data.search.som && data.res.length) {
- var m = this._model.data, i, j, p = [], k, l;
- for(i = 0, j = data.res.length; i < j; i++) {
- if(m[data.res[i]] && !m[data.res[i]].state.hidden) {
- p.push(data.res[i]);
- p = p.concat(m[data.res[i]].parents);
- if(this._data.search.smc) {
- for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {
- if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {
- p.push(m[data.res[i]].children_d[k]);
- }
- }
- }
- }
- }
- p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);
- this._data.search.hdn = this.hide_all(true);
- this.show_node(p, true);
- this.redraw(true);
- }
- }, this))
- .on("clear_search.jstree", $.proxy(function (e, data) {
- if(this._data.search.som && data.res.length) {
- this.show_node(this._data.search.hdn, true);
- this.redraw(true);
- }
- }, this));
- };
-
- this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {
- if(str === false || $.vakata.trim(str.toString()) === "") {
- return this.clear_search();
- }
- inside = this.get_node(inside);
- inside = inside && inside.id ? inside.id : null;
- str = str.toString();
- var s = this.settings.search,
- a = s.ajax ? s.ajax : false,
- m = this._model.data,
- f = null,
- r = [],
- p = [], i, j;
- if(this._data.search.res.length && !append) {
- this.clear_search();
- }
- if(show_only_matches === undefined) {
- show_only_matches = s.show_only_matches;
- }
- if(show_only_matches_children === undefined) {
- show_only_matches_children = s.show_only_matches_children;
- }
- if(!skip_async && a !== false) {
- if($.isFunction(a)) {
- return a.call(this, str, $.proxy(function (d) {
- if(d && d.d) { d = d.d; }
- this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
- this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
- });
- }, this), inside);
- }
- else {
- a = $.extend({}, a);
- if(!a.data) { a.data = {}; }
- a.data.str = str;
- if(inside) {
- a.data.inside = inside;
- }
- if (this._data.search.lastRequest) {
- this._data.search.lastRequest.abort();
- }
- this._data.search.lastRequest = $.ajax(a)
- .fail($.proxy(function () {
- this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
- this.settings.core.error.call(this, this._data.core.last_error);
- }, this))
- .done($.proxy(function (d) {
- if(d && d.d) { d = d.d; }
- this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
- this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
- });
- }, this));
- return this._data.search.lastRequest;
- }
- }
- if(!append) {
- this._data.search.str = str;
- this._data.search.dom = $();
- this._data.search.res = [];
- this._data.search.opn = [];
- this._data.search.som = show_only_matches;
- this._data.search.smc = show_only_matches_children;
- }
- f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
- $.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {
- var v = m[i];
- if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {
- r.push(i);
- p = p.concat(v.parents);
- }
- });
- if(r.length) {
- p = $.vakata.array_unique(p);
- for(i = 0, j = p.length; i < j; i++) {
- if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {
- this._data.search.opn.push(p[i]);
- }
- }
- if(!append) {
- this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')));
- this._data.search.res = r;
- }
- else {
- this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))));
- this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));
- }
- this._data.search.dom.children(".jstree-anchor").addClass('jstree-search');
- }
-
- this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });
- };
-
- this.clear_search = function () {
- if(this.settings.search.close_opened_onclear) {
- this.close_node(this._data.search.opn, 0);
- }
-
- this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });
- if(this._data.search.res.length) {
- this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {
- return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&');
- }).join(', #')));
- this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search");
- }
- this._data.search.str = "";
- this._data.search.res = [];
- this._data.search.opn = [];
- this._data.search.dom = $();
- };
- this.redraw_node = function(obj, deep, callback, force_render) {
- obj = parent.redraw_node.apply(this, arguments);
- if(obj) {
- if($.inArray(obj.id, this._data.search.res) !== -1) {
- var i, j, tmp = null;
- for(i = 0, j = obj.childNodes.length; i < j; i++) {
- if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
- tmp = obj.childNodes[i];
- break;
- }
- }
- if(tmp) {
- tmp.className += ' jstree-search';
- }
- }
- }
- return obj;
- };
- };
-
- (function ($) {
-
- $.vakata.search = function(pattern, txt, options) {
- options = options || {};
- options = $.extend({}, $.vakata.search.defaults, options);
- if(options.fuzzy !== false) {
- options.fuzzy = true;
- }
- pattern = options.caseSensitive ? pattern : pattern.toLowerCase();
- var MATCH_LOCATION = options.location,
- MATCH_DISTANCE = options.distance,
- MATCH_THRESHOLD = options.threshold,
- patternLen = pattern.length,
- matchmask, pattern_alphabet, match_bitapScore, search;
- if(patternLen > 32) {
- options.fuzzy = false;
- }
- if(options.fuzzy) {
- matchmask = 1 << (patternLen - 1);
- pattern_alphabet = (function () {
- var mask = {},
- i = 0;
- for (i = 0; i < patternLen; i++) {
- mask[pattern.charAt(i)] = 0;
- }
- for (i = 0; i < patternLen; i++) {
- mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);
- }
- return mask;
- }());
- match_bitapScore = function (e, x) {
- var accuracy = e / patternLen,
- proximity = Math.abs(MATCH_LOCATION - x);
- if(!MATCH_DISTANCE) {
- return proximity ? 1.0 : accuracy;
- }
- return accuracy + (proximity / MATCH_DISTANCE);
- };
- }
- search = function (text) {
- text = options.caseSensitive ? text : text.toLowerCase();
- if(pattern === text || text.indexOf(pattern) !== -1) {
- return {
- isMatch: true,
- score: 0
- };
- }
- if(!options.fuzzy) {
- return {
- isMatch: false,
- score: 1
- };
- }
- var i, j,
- textLen = text.length,
- scoreThreshold = MATCH_THRESHOLD,
- bestLoc = text.indexOf(pattern, MATCH_LOCATION),
- binMin, binMid,
- binMax = patternLen + textLen,
- lastRd, start, finish, rd, charMatch,
- score = 1,
- locations = [];
- if (bestLoc !== -1) {
- scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
- bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);
- if (bestLoc !== -1) {
- scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
- }
- }
- bestLoc = -1;
- for (i = 0; i < patternLen; i++) {
- binMin = 0;
- binMid = binMax;
- while (binMin < binMid) {
- if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {
- binMin = binMid;
- } else {
- binMax = binMid;
- }
- binMid = Math.floor((binMax - binMin) / 2 + binMin);
- }
- binMax = binMid;
- start = Math.max(1, MATCH_LOCATION - binMid + 1);
- finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;
- rd = new Array(finish + 2);
- rd[finish + 1] = (1 << i) - 1;
- for (j = finish; j >= start; j--) {
- charMatch = pattern_alphabet[text.charAt(j - 1)];
- if (i === 0) {
- rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;
- } else {
- rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];
- }
- if (rd[j] & matchmask) {
- score = match_bitapScore(i, j - 1);
- if (score <= scoreThreshold) {
- scoreThreshold = score;
- bestLoc = j - 1;
- locations.push(bestLoc);
- if (bestLoc > MATCH_LOCATION) {
- start = Math.max(1, 2 * MATCH_LOCATION - bestLoc);
- } else {
- break;
- }
- }
- }
- }
- if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {
- break;
- }
- lastRd = rd;
- }
- return {
- isMatch: bestLoc >= 0,
- score: score
- };
- };
- return txt === true ? { 'search' : search } : search(txt);
- };
- $.vakata.search.defaults = {
- location : 0,
- distance : 100,
- threshold : 0.6,
- fuzzy : false,
- caseSensitive : false
- };
- }($));
-
-
-
- $.jstree.defaults.sort = function (a, b) {
-
- return this.get_text(a) > this.get_text(b) ? 1 : -1;
- };
- $.jstree.plugins.sort = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
- this.element
- .on("model.jstree", $.proxy(function (e, data) {
- this.sort(data.parent, true);
- }, this))
- .on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) {
- this.sort(data.parent || data.node.parent, false);
- this.redraw_node(data.parent || data.node.parent, true);
- }, this))
- .on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) {
- this.sort(data.parent, false);
- this.redraw_node(data.parent, true);
- }, this));
- };
-
- this.sort = function (obj, deep) {
- var i, j;
- obj = this.get_node(obj);
- if(obj && obj.children && obj.children.length) {
- obj.children.sort($.proxy(this.settings.sort, this));
- if(deep) {
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- this.sort(obj.children_d[i], false);
- }
- }
- }
- };
- };
-
-
- var to = false;
-
- $.jstree.defaults.state = {
-
- key : 'jstree',
-
- events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',
-
- ttl : false,
-
- filter : false,
-
- preserve_loaded : false
- };
- $.jstree.plugins.state = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
- var bind = $.proxy(function () {
- this.element.on(this.settings.state.events, $.proxy(function () {
- if(to) { clearTimeout(to); }
- to = setTimeout($.proxy(function () { this.save_state(); }, this), 100);
- }, this));
-
- this.trigger('state_ready');
- }, this);
- this.element
- .on("ready.jstree", $.proxy(function (e, data) {
- this.element.one("restore_state.jstree", bind);
- if(!this.restore_state()) { bind(); }
- }, this));
- };
-
- this.save_state = function () {
- var tm = this.get_state();
- if (!this.settings.state.preserve_loaded) {
- delete tm.core.loaded;
- }
- var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };
- $.vakata.storage.set(this.settings.state.key, JSON.stringify(st));
- };
-
- this.restore_state = function () {
- var k = $.vakata.storage.get(this.settings.state.key);
- if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }
- if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }
- if(!!k && k.state) { k = k.state; }
- if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }
- if(!!k) {
- if (!this.settings.state.preserve_loaded) {
- delete k.core.loaded;
- }
- this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });
- this.set_state(k);
- return true;
- }
- return false;
- };
-
- this.clear_state = function () {
- return $.vakata.storage.del(this.settings.state.key);
- };
- };
- (function ($, undefined) {
- $.vakata.storage = {
-
- set : function (key, val) { return window.localStorage.setItem(key, val); },
- get : function (key) { return window.localStorage.getItem(key); },
- del : function (key) { return window.localStorage.removeItem(key); }
- };
- }($));
-
-
-
- $.jstree.defaults.types = {
- 'default' : {}
- };
- $.jstree.defaults.types[$.jstree.root] = {};
- $.jstree.plugins.types = function (options, parent) {
- this.init = function (el, options) {
- var i, j;
- if(options && options.types && options.types['default']) {
- for(i in options.types) {
- if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {
- for(j in options.types['default']) {
- if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {
- options.types[i][j] = options.types['default'][j];
- }
- }
- }
- }
- }
- parent.init.call(this, el, options);
- this._model.data[$.jstree.root].type = $.jstree.root;
- };
- this.refresh = function (skip_loading, forget_state) {
- parent.refresh.call(this, skip_loading, forget_state);
- this._model.data[$.jstree.root].type = $.jstree.root;
- };
- this.bind = function () {
- this.element
- .on('model.jstree', $.proxy(function (e, data) {
- var m = this._model.data,
- dpc = data.nodes,
- t = this.settings.types,
- i, j, c = 'default', k;
- for(i = 0, j = dpc.length; i < j; i++) {
- c = 'default';
- if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
- c = m[dpc[i]].original.type;
- }
- if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {
- c = m[dpc[i]].data.jstree.type;
- }
- m[dpc[i]].type = c;
- if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
- m[dpc[i]].icon = t[c].icon;
- }
- if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
- for (k in t[c].li_attr) {
- if (t[c].li_attr.hasOwnProperty(k)) {
- if (k === 'id') {
- continue;
- }
- else if (m[dpc[i]].li_attr[k] === undefined) {
- m[dpc[i]].li_attr[k] = t[c].li_attr[k];
- }
- else if (k === 'class') {
- m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
- }
- }
- }
- }
- if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
- for (k in t[c].a_attr) {
- if (t[c].a_attr.hasOwnProperty(k)) {
- if (k === 'id') {
- continue;
- }
- else if (m[dpc[i]].a_attr[k] === undefined) {
- m[dpc[i]].a_attr[k] = t[c].a_attr[k];
- }
- else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
- m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
- }
- else if (k === 'class') {
- m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
- }
- }
- }
- }
- }
- m[$.jstree.root].type = $.jstree.root;
- }, this));
- parent.bind.call(this);
- };
- this.get_json = function (obj, options, flat) {
- var i, j,
- m = this._model.data,
- opt = options ? $.extend(true, {}, options, {no_id:false}) : {},
- tmp = parent.get_json.call(this, obj, opt, flat);
- if(tmp === false) { return false; }
- if($.isArray(tmp)) {
- for(i = 0, j = tmp.length; i < j; i++) {
- tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default";
- if(options && options.no_id) {
- delete tmp[i].id;
- if(tmp[i].li_attr && tmp[i].li_attr.id) {
- delete tmp[i].li_attr.id;
- }
- if(tmp[i].a_attr && tmp[i].a_attr.id) {
- delete tmp[i].a_attr.id;
- }
- }
- }
- }
- else {
- tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default";
- if(options && options.no_id) {
- tmp = this._delete_ids(tmp);
- }
- }
- return tmp;
- };
- this._delete_ids = function (tmp) {
- if($.isArray(tmp)) {
- for(var i = 0, j = tmp.length; i < j; i++) {
- tmp[i] = this._delete_ids(tmp[i]);
- }
- return tmp;
- }
- delete tmp.id;
- if(tmp.li_attr && tmp.li_attr.id) {
- delete tmp.li_attr.id;
- }
- if(tmp.a_attr && tmp.a_attr.id) {
- delete tmp.a_attr.id;
- }
- if(tmp.children && $.isArray(tmp.children)) {
- tmp.children = this._delete_ids(tmp.children);
- }
- return tmp;
- };
- this.check = function (chk, obj, par, pos, more) {
- if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
- obj = obj && obj.id ? obj : this.get_node(obj);
- par = par && par.id ? par : this.get_node(par);
- var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;
- m = m && m._model && m._model.data ? m._model.data : null;
- switch(chk) {
- case "create_node":
- case "move_node":
- case "copy_node":
- if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {
- tmp = this.get_rules(par);
- if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- return false;
- }
- if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- return false;
- }
- if(m && obj.children_d && obj.parents) {
- d = 0;
- for(i = 0, j = obj.children_d.length; i < j; i++) {
- d = Math.max(d, m[obj.children_d[i]].parents.length);
- }
- d = d - obj.parents.length + 1;
- }
- if(d <= 0 || d === undefined) { d = 1; }
- do {
- if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- return false;
- }
- par = this.get_node(par.parent);
- tmp = this.get_rules(par);
- d++;
- } while(par);
- }
- break;
- }
- return true;
- };
-
- this.get_rules = function (obj) {
- obj = this.get_node(obj);
- if(!obj) { return false; }
- var tmp = this.get_type(obj, true);
- if(tmp.max_depth === undefined) { tmp.max_depth = -1; }
- if(tmp.max_children === undefined) { tmp.max_children = -1; }
- if(tmp.valid_children === undefined) { tmp.valid_children = -1; }
- return tmp;
- };
-
- this.get_type = function (obj, rules) {
- obj = this.get_node(obj);
- return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);
- };
-
- this.set_type = function (obj, type) {
- var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
- if($.isArray(obj)) {
- obj = obj.slice();
- for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
- this.set_type(obj[t1], type);
- }
- return true;
- }
- t = this.settings.types;
- obj = this.get_node(obj);
- if(!t[type] || !obj) { return false; }
- d = this.get_node(obj, true);
- if (d && d.length) {
- a = d.children('.jstree-anchor');
- }
- old_type = obj.type;
- old_icon = this.get_icon(obj);
- obj.type = type;
- if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
- this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
- }
-
- if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
- for (k in t[old_type].li_attr) {
- if (t[old_type].li_attr.hasOwnProperty(k)) {
- if (k === 'id') {
- continue;
- }
- else if (k === 'class') {
- m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
- if (d) { d.removeClass(t[old_type].li_attr[k]); }
- }
- else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
- m[obj.id].li_attr[k] = null;
- if (d) { d.removeAttr(k); }
- }
- }
- }
- }
- if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
- for (k in t[old_type].a_attr) {
- if (t[old_type].a_attr.hasOwnProperty(k)) {
- if (k === 'id') {
- continue;
- }
- else if (k === 'class') {
- m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
- if (a) { a.removeClass(t[old_type].a_attr[k]); }
- }
- else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
- if (k === 'href') {
- m[obj.id].a_attr[k] = '#';
- if (a) { a.attr('href', '#'); }
- }
- else {
- delete m[obj.id].a_attr[k];
- if (a) { a.removeAttr(k); }
- }
- }
- }
- }
- }
-
- if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
- for (k in t[type].li_attr) {
- if (t[type].li_attr.hasOwnProperty(k)) {
- if (k === 'id') {
- continue;
- }
- else if (m[obj.id].li_attr[k] === undefined) {
- m[obj.id].li_attr[k] = t[type].li_attr[k];
- if (d) {
- if (k === 'class') {
- d.addClass(t[type].li_attr[k]);
- }
- else {
- d.attr(k, t[type].li_attr[k]);
- }
- }
- }
- else if (k === 'class') {
- m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
- if (d) { d.addClass(t[type].li_attr[k]); }
- }
- }
- }
- }
- if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
- for (k in t[type].a_attr) {
- if (t[type].a_attr.hasOwnProperty(k)) {
- if (k === 'id') {
- continue;
- }
- else if (m[obj.id].a_attr[k] === undefined) {
- m[obj.id].a_attr[k] = t[type].a_attr[k];
- if (a) {
- if (k === 'class') {
- a.addClass(t[type].a_attr[k]);
- }
- else {
- a.attr(k, t[type].a_attr[k]);
- }
- }
- }
- else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
- m[obj.id].a_attr['href'] = t[type].a_attr['href'];
- if (a) { a.attr('href', t[type].a_attr['href']); }
- }
- else if (k === 'class') {
- m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
- if (a) { a.addClass(t[type].a_attr[k]); }
- }
- }
- }
- }
- return true;
- };
- };
-
-
-
- $.jstree.defaults.unique = {
-
- case_sensitive : false,
-
- trim_whitespace : false,
-
- duplicate : function (name, counter) {
- return name + ' (' + counter + ')';
- }
- };
- $.jstree.plugins.unique = function (options, parent) {
- this.check = function (chk, obj, par, pos, more) {
- if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
- obj = obj && obj.id ? obj : this.get_node(obj);
- par = par && par.id ? par : this.get_node(par);
- if(!par || !par.children) { return true; }
- var n = chk === "rename_node" ? pos : obj.text,
- c = [],
- s = this.settings.unique.case_sensitive,
- w = this.settings.unique.trim_whitespace,
- m = this._model.data, i, j, t;
- for(i = 0, j = par.children.length; i < j; i++) {
- t = m[par.children[i]].text;
- if (!s) {
- t = t.toLowerCase();
- }
- if (w) {
- t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- }
- c.push(t);
- }
- if(!s) { n = n.toLowerCase(); }
- if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }
- switch(chk) {
- case "delete_node":
- return true;
- case "rename_node":
- t = obj.text || '';
- if (!s) {
- t = t.toLowerCase();
- }
- if (w) {
- t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- }
- i = ($.inArray(n, c) === -1 || (obj.text && t === n));
- if(!i) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- }
- return i;
- case "create_node":
- i = ($.inArray(n, c) === -1);
- if(!i) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- }
- return i;
- case "copy_node":
- i = ($.inArray(n, c) === -1);
- if(!i) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- }
- return i;
- case "move_node":
- i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);
- if(!i) {
- this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
- }
- return i;
- }
- return true;
- };
- this.create_node = function (par, node, pos, callback, is_loaded) {
- if(!node || node.text === undefined) {
- if(par === null) {
- par = $.jstree.root;
- }
- par = this.get_node(par);
- if(!par) {
- return parent.create_node.call(this, par, node, pos, callback, is_loaded);
- }
- pos = pos === undefined ? "last" : pos;
- if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
- return parent.create_node.call(this, par, node, pos, callback, is_loaded);
- }
- if(!node) { node = {}; }
- var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t;
- n = tmp = this.get_string('New node');
- dpc = [];
- for(i = 0, j = par.children.length; i < j; i++) {
- t = m[par.children[i]].text;
- if (!s) {
- t = t.toLowerCase();
- }
- if (w) {
- t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- }
- dpc.push(t);
- }
- i = 1;
- t = n;
- if (!s) {
- t = t.toLowerCase();
- }
- if (w) {
- t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- }
- while($.inArray(t, dpc) !== -1) {
- n = cb.call(this, tmp, (++i)).toString();
- t = n;
- if (!s) {
- t = t.toLowerCase();
- }
- if (w) {
- t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
- }
- }
- node.text = n;
- }
- return parent.create_node.call(this, par, node, pos, callback, is_loaded);
- };
- };
-
-
- var div = document.createElement('DIV');
- div.setAttribute('unselectable','on');
- div.setAttribute('role','presentation');
- div.className = 'jstree-wholerow';
- div.innerHTML = ' ';
- $.jstree.plugins.wholerow = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
- this.element
- .on('ready.jstree set_state.jstree', $.proxy(function () {
- this.hide_dots();
- }, this))
- .on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
-
- this.get_container_ul().addClass('jstree-wholerow-ul');
- }, this))
- .on("deselect_all.jstree", $.proxy(function (e, data) {
- this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
- }, this))
- .on("changed.jstree", $.proxy(function (e, data) {
- this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
- var tmp = false, i, j;
- for(i = 0, j = data.selected.length; i < j; i++) {
- tmp = this.get_node(data.selected[i], true);
- if(tmp && tmp.length) {
- tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
- }
- }
- }, this))
- .on("open_node.jstree", $.proxy(function (e, data) {
- this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
- }, this))
- .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
- if(e.type === "hover_node" && this.is_disabled(data.node)) { return; }
- this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
- }, this))
- .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
- if (this._data.contextmenu) {
- e.preventDefault();
- var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
- }
- }, this))
-
- .on("click.jstree", ".jstree-wholerow", function (e) {
- e.stopImmediatePropagation();
- var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
- })
- .on("dblclick.jstree", ".jstree-wholerow", function (e) {
- e.stopImmediatePropagation();
- var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
- })
- .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
- e.stopImmediatePropagation();
- var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
- }, this))
- .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) {
- e.stopImmediatePropagation();
- if(!this.is_disabled(e.currentTarget)) {
- this.hover_node(e.currentTarget);
- }
- return false;
- }, this))
- .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) {
- this.dehover_node(e.currentTarget);
- }, this));
- };
- this.teardown = function () {
- if(this.settings.wholerow) {
- this.element.find(".jstree-wholerow").remove();
- }
- parent.teardown.call(this);
- };
- this.redraw_node = function(obj, deep, callback, force_render) {
- obj = parent.redraw_node.apply(this, arguments);
- if(obj) {
- var tmp = div.cloneNode(true);
-
- if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }
- if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }
- obj.insertBefore(tmp, obj.childNodes[0]);
- }
- return obj;
- };
- };
-
-
- if(window.customElements && Object && Object.create) {
- var proto = Object.create(HTMLElement.prototype);
- proto.createdCallback = function () {
- var c = { core : {}, plugins : [] }, i;
- for(i in $.jstree.plugins) {
- if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {
- c.plugins.push(i);
- if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {
- c[i] = JSON.parse(this.getAttribute(i));
- }
- }
- }
- for(i in $.jstree.defaults.core) {
- if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {
- c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);
- }
- }
- $(this).jstree(c);
- };
-
- try {
- window.customElements.define("vakata-jstree", function() {}, { prototype: proto });
- } catch (ignore) { }
- }
- }));
|