12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805 |
- /*
- * Ext JS Library 2.0.2
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://extjs.com/license
- */
- Ext.DomHelper = function(){
- var tempTableEl = null;
- var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
- var tableRe = /^table|tbody|tr|td$/i;
-
-
- var createHtml = function(o){
- if(typeof o == 'string'){
- return o;
- }
- var b = "";
- if (Ext.isArray(o)) {
- for (var i = 0, l = o.length; i < l; i++) {
- b += createHtml(o[i]);
- }
- return b;
- }
- if(!o.tag){
- o.tag = "div";
- }
- b += "<" + o.tag;
- for(var attr in o){
- if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue;
- if(attr == "style"){
- var s = o["style"];
- if(typeof s == "function"){
- s = s.call();
- }
- if(typeof s == "string"){
- b += ' style="' + s + '"';
- }else if(typeof s == "object"){
- b += ' style="';
- for(var key in s){
- if(typeof s[key] != "function"){
- b += key + ":" + s[key] + ";";
- }
- }
- b += '"';
- }
- }else{
- if(attr == "cls"){
- b += ' class="' + o["cls"] + '"';
- }else if(attr == "htmlFor"){
- b += ' for="' + o["htmlFor"] + '"';
- }else{
- b += " " + attr + '="' + o[attr] + '"';
- }
- }
- }
- if(emptyTags.test(o.tag)){
- b += "/>";
- }else{
- b += ">";
- var cn = o.children || o.cn;
- if(cn){
- b += createHtml(cn);
- } else if(o.html){
- b += o.html;
- }
- b += "</" + o.tag + ">";
- }
- return b;
- };
-
-
- var createDom = function(o, parentNode){
- var el;
- if (Ext.isArray(o)) {
- el = document.createDocumentFragment();
- for(var i = 0, l = o.length; i < l; i++) {
- createDom(o[i], el);
- }
- } else if (typeof o == "string)") {
- el = document.createTextNode(o);
- } else {
- el = document.createElement(o.tag||'div');
- var useSet = !!el.setAttribute;
- for(var attr in o){
- if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue;
- if(attr=="cls"){
- el.className = o["cls"];
- }else{
- if(useSet) el.setAttribute(attr, o[attr]);
- else el[attr] = o[attr];
- }
- }
- Ext.DomHelper.applyStyles(el, o.style);
- var cn = o.children || o.cn;
- if(cn){
- createDom(cn, el);
- } else if(o.html){
- el.innerHTML = o.html;
- }
- }
- if(parentNode){
- parentNode.appendChild(el);
- }
- return el;
- };
- var ieTable = function(depth, s, h, e){
- tempTableEl.innerHTML = [s, h, e].join('');
- var i = -1, el = tempTableEl;
- while(++i < depth){
- el = el.firstChild;
- }
- return el;
- };
-
- var ts = '<table>',
- te = '</table>',
- tbs = ts+'<tbody>',
- tbe = '</tbody>'+te,
- trs = tbs + '<tr>',
- tre = '</tr>'+tbe;
-
- var insertIntoTable = function(tag, where, el, html){
- if(!tempTableEl){
- tempTableEl = document.createElement('div');
- }
- var node;
- var before = null;
- if(tag == 'td'){
- if(where == 'afterbegin' || where == 'beforeend'){
- return;
- }
- if(where == 'beforebegin'){
- before = el;
- el = el.parentNode;
- } else{
- before = el.nextSibling;
- el = el.parentNode;
- }
- node = ieTable(4, trs, html, tre);
- }
- else if(tag == 'tr'){
- if(where == 'beforebegin'){
- before = el;
- el = el.parentNode;
- node = ieTable(3, tbs, html, tbe);
- } else if(where == 'afterend'){
- before = el.nextSibling;
- el = el.parentNode;
- node = ieTable(3, tbs, html, tbe);
- } else{
- if(where == 'afterbegin'){
- before = el.firstChild;
- }
- node = ieTable(4, trs, html, tre);
- }
- } else if(tag == 'tbody'){
- if(where == 'beforebegin'){
- before = el;
- el = el.parentNode;
- node = ieTable(2, ts, html, te);
- } else if(where == 'afterend'){
- before = el.nextSibling;
- el = el.parentNode;
- node = ieTable(2, ts, html, te);
- } else{
- if(where == 'afterbegin'){
- before = el.firstChild;
- }
- node = ieTable(3, tbs, html, tbe);
- }
- } else{
- if(where == 'beforebegin' || where == 'afterend'){
- return;
- }
- if(where == 'afterbegin'){
- before = el.firstChild;
- }
- node = ieTable(2, ts, html, te);
- }
- el.insertBefore(node, before);
- return node;
- };
- return {
-
- useDom : false,
-
- markup : function(o){
- return createHtml(o);
- },
-
- applyStyles : function(el, styles){
- if(styles){
- el = Ext.fly(el);
- if(typeof styles == "string"){
- var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
- var matches;
- while ((matches = re.exec(styles)) != null){
- el.setStyle(matches[1], matches[2]);
- }
- }else if (typeof styles == "object"){
- for (var style in styles){
- el.setStyle(style, styles[style]);
- }
- }else if (typeof styles == "function"){
- Ext.DomHelper.applyStyles(el, styles.call());
- }
- }
- },
-
- insertHtml : function(where, el, html){
- where = where.toLowerCase();
- if(el.insertAdjacentHTML){
- if(tableRe.test(el.tagName)){
- var rs;
- if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
- return rs;
- }
- }
- switch(where){
- case "beforebegin":
- el.insertAdjacentHTML('BeforeBegin', html);
- return el.previousSibling;
- case "afterbegin":
- el.insertAdjacentHTML('AfterBegin', html);
- return el.firstChild;
- case "beforeend":
- el.insertAdjacentHTML('BeforeEnd', html);
- return el.lastChild;
- case "afterend":
- el.insertAdjacentHTML('AfterEnd', html);
- return el.nextSibling;
- }
- throw 'Illegal insertion point -> "' + where + '"';
- }
- var range = el.ownerDocument.createRange();
- var frag;
- switch(where){
- case "beforebegin":
- range.setStartBefore(el);
- frag = range.createContextualFragment(html);
- el.parentNode.insertBefore(frag, el);
- return el.previousSibling;
- case "afterbegin":
- if(el.firstChild){
- range.setStartBefore(el.firstChild);
- frag = range.createContextualFragment(html);
- el.insertBefore(frag, el.firstChild);
- return el.firstChild;
- }else{
- el.innerHTML = html;
- return el.firstChild;
- }
- case "beforeend":
- if(el.lastChild){
- range.setStartAfter(el.lastChild);
- frag = range.createContextualFragment(html);
- el.appendChild(frag);
- return el.lastChild;
- }else{
- el.innerHTML = html;
- return el.lastChild;
- }
- case "afterend":
- range.setStartAfter(el);
- frag = range.createContextualFragment(html);
- el.parentNode.insertBefore(frag, el.nextSibling);
- return el.nextSibling;
- }
- throw 'Illegal insertion point -> "' + where + '"';
- },
-
- insertBefore : function(el, o, returnElement){
- return this.doInsert(el, o, returnElement, "beforeBegin");
- },
-
- insertAfter : function(el, o, returnElement){
- return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
- },
-
- insertFirst : function(el, o, returnElement){
- return this.doInsert(el, o, returnElement, "afterBegin", "firstChild");
- },
-
- doInsert : function(el, o, returnElement, pos, sibling){
- el = Ext.getDom(el);
- var newNode;
- if(this.useDom){
- newNode = createDom(o, null);
- (sibling === "firstChild" ? el : el.parentNode).insertBefore(newNode, sibling ? el[sibling] : el);
- }else{
- var html = createHtml(o);
- newNode = this.insertHtml(pos, el, html);
- }
- return returnElement ? Ext.get(newNode, true) : newNode;
- },
-
- append : function(el, o, returnElement){
- el = Ext.getDom(el);
- var newNode;
- if(this.useDom){
- newNode = createDom(o, null);
- el.appendChild(newNode);
- }else{
- var html = createHtml(o);
- newNode = this.insertHtml("beforeEnd", el, html);
- }
- return returnElement ? Ext.get(newNode, true) : newNode;
- },
-
- overwrite : function(el, o, returnElement){
- el = Ext.getDom(el);
- el.innerHTML = createHtml(o);
- return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
- },
-
- createTemplate : function(o){
- var html = createHtml(o);
- return new Ext.Template(html);
- }
- };
- }();
- Ext.Template = function(html){
- var a = arguments;
- if(Ext.isArray(html)){
- html = html.join("");
- }else if(a.length > 1){
- var buf = [];
- for(var i = 0, len = a.length; i < len; i++){
- if(typeof a[i] == 'object'){
- Ext.apply(this, a[i]);
- }else{
- buf[buf.length] = a[i];
- }
- }
- html = buf.join('');
- }
-
- this.html = html;
- if(this.compiled){
- this.compile();
- }
- };
- Ext.Template.prototype = {
-
- applyTemplate : function(values){
- if(this.compiled){
- return this.compiled(values);
- }
- var useF = this.disableFormats !== true;
- var fm = Ext.util.Format, tpl = this;
- var fn = function(m, name, format, args){
- if(format && useF){
- if(format.substr(0, 5) == "this."){
- return tpl.call(format.substr(5), values[name], values);
- }else{
- if(args){
-
-
-
- var re = /^\s*['"](.*)["']\s*$/;
- args = args.split(',');
- for(var i = 0, len = args.length; i < len; i++){
- args[i] = args[i].replace(re, "$1");
- }
- args = [values[name]].concat(args);
- }else{
- args = [values[name]];
- }
- return fm[format].apply(fm, args);
- }
- }else{
- return values[name] !== undefined ? values[name] : "";
- }
- };
- return this.html.replace(this.re, fn);
- },
-
-
- set : function(html, compile){
- this.html = html;
- this.compiled = null;
- if(compile){
- this.compile();
- }
- return this;
- },
-
-
- disableFormats : false,
-
-
- re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
-
-
- compile : function(){
- var fm = Ext.util.Format;
- var useF = this.disableFormats !== true;
- var sep = Ext.isGecko ? "+" : ",";
- var fn = function(m, name, format, args){
- if(format && useF){
- args = args ? ',' + args : "";
- if(format.substr(0, 5) != "this."){
- format = "fm." + format + '(';
- }else{
- format = 'this.call("'+ format.substr(5) + '", ';
- args = ", values";
- }
- }else{
- args= ''; format = "(values['" + name + "'] == undefined ? '' : ";
- }
- return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";
- };
- var body;
-
- if(Ext.isGecko){
- body = "this.compiled = function(values){ return '" +
- this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +
- "';};";
- }else{
- body = ["this.compiled = function(values){ return ['"];
- body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn));
- body.push("'].join('');};");
- body = body.join('');
- }
- eval(body);
- return this;
- },
-
-
- call : function(fnName, value, allValues){
- return this[fnName](value, allValues);
- },
-
-
- insertFirst: function(el, values, returnElement){
- return this.doInsert('afterBegin', el, values, returnElement);
- },
-
- insertBefore: function(el, values, returnElement){
- return this.doInsert('beforeBegin', el, values, returnElement);
- },
-
- insertAfter : function(el, values, returnElement){
- return this.doInsert('afterEnd', el, values, returnElement);
- },
-
-
- append : function(el, values, returnElement){
- return this.doInsert('beforeEnd', el, values, returnElement);
- },
- doInsert : function(where, el, values, returnEl){
- el = Ext.getDom(el);
- var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values));
- return returnEl ? Ext.get(newNode, true) : newNode;
- },
-
- overwrite : function(el, values, returnElement){
- el = Ext.getDom(el);
- el.innerHTML = this.applyTemplate(values);
- return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
- }
- };
- Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;
- Ext.DomHelper.Template = Ext.Template;
- Ext.Template.from = function(el, config){
- el = Ext.getDom(el);
- return new Ext.Template(el.value || el.innerHTML, config || '');
- };
- Ext.DomQuery = function(){
- var cache = {}, simpleCache = {}, valueCache = {};
- var nonSpace = /\S/;
- var trimRe = /^\s+|\s+$/g;
- var tplRe = /\{(\d+)\}/g;
- var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;
- var tagTokenRe = /^(#)?([\w-\*]+)/;
- var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/;
- function child(p, index){
- var i = 0;
- var n = p.firstChild;
- while(n){
- if(n.nodeType == 1){
- if(++i == index){
- return n;
- }
- }
- n = n.nextSibling;
- }
- return null;
- };
- function next(n){
- while((n = n.nextSibling) && n.nodeType != 1);
- return n;
- };
- function prev(n){
- while((n = n.previousSibling) && n.nodeType != 1);
- return n;
- };
- function children(d){
- var n = d.firstChild, ni = -1;
- while(n){
- var nx = n.nextSibling;
- if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
- d.removeChild(n);
- }else{
- n.nodeIndex = ++ni;
- }
- n = nx;
- }
- return this;
- };
- function byClassName(c, a, v){
- if(!v){
- return c;
- }
- var r = [], ri = -1, cn;
- for(var i = 0, ci; ci = c[i]; i++){
- if((' '+ci.className+' ').indexOf(v) != -1){
- r[++ri] = ci;
- }
- }
- return r;
- };
- function attrValue(n, attr){
- if(!n.tagName && typeof n.length != "undefined"){
- n = n[0];
- }
- if(!n){
- return null;
- }
- if(attr == "for"){
- return n.htmlFor;
- }
- if(attr == "class" || attr == "className"){
- return n.className;
- }
- return n.getAttribute(attr) || n[attr];
- };
- function getNodes(ns, mode, tagName){
- var result = [], ri = -1, cs;
- if(!ns){
- return result;
- }
- tagName = tagName || "*";
- if(typeof ns.getElementsByTagName != "undefined"){
- ns = [ns];
- }
- if(!mode){
- for(var i = 0, ni; ni = ns[i]; i++){
- cs = ni.getElementsByTagName(tagName);
- for(var j = 0, ci; ci = cs[j]; j++){
- result[++ri] = ci;
- }
- }
- }else if(mode == "/" || mode == ">"){
- var utag = tagName.toUpperCase();
- for(var i = 0, ni, cn; ni = ns[i]; i++){
- cn = ni.children || ni.childNodes;
- for(var j = 0, cj; cj = cn[j]; j++){
- if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){
- result[++ri] = cj;
- }
- }
- }
- }else if(mode == "+"){
- var utag = tagName.toUpperCase();
- for(var i = 0, n; n = ns[i]; i++){
- while((n = n.nextSibling) && n.nodeType != 1);
- if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
- result[++ri] = n;
- }
- }
- }else if(mode == "~"){
- for(var i = 0, n; n = ns[i]; i++){
- while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
- if(n){
- result[++ri] = n;
- }
- }
- }
- return result;
- };
- function concat(a, b){
- if(b.slice){
- return a.concat(b);
- }
- for(var i = 0, l = b.length; i < l; i++){
- a[a.length] = b[i];
- }
- return a;
- }
- function byTag(cs, tagName){
- if(cs.tagName || cs == document){
- cs = [cs];
- }
- if(!tagName){
- return cs;
- }
- var r = [], ri = -1;
- tagName = tagName.toLowerCase();
- for(var i = 0, ci; ci = cs[i]; i++){
- if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
- r[++ri] = ci;
- }
- }
- return r;
- };
- function byId(cs, attr, id){
- if(cs.tagName || cs == document){
- cs = [cs];
- }
- if(!id){
- return cs;
- }
- var r = [], ri = -1;
- for(var i = 0,ci; ci = cs[i]; i++){
- if(ci && ci.id == id){
- r[++ri] = ci;
- return r;
- }
- }
- return r;
- };
- function byAttribute(cs, attr, value, op, custom){
- var r = [], ri = -1, st = custom=="{";
- var f = Ext.DomQuery.operators[op];
- for(var i = 0, ci; ci = cs[i]; i++){
- var a;
- if(st){
- a = Ext.DomQuery.getStyle(ci, attr);
- }
- else if(attr == "class" || attr == "className"){
- a = ci.className;
- }else if(attr == "for"){
- a = ci.htmlFor;
- }else if(attr == "href"){
- a = ci.getAttribute("href", 2);
- }else{
- a = ci.getAttribute(attr);
- }
- if((f && f(a, value)) || (!f && a)){
- r[++ri] = ci;
- }
- }
- return r;
- };
- function byPseudo(cs, name, value){
- return Ext.DomQuery.pseudos[name](cs, value);
- };
-
-
-
- var isIE = window.ActiveXObject ? true : false;
-
-
- eval("var batch = 30803;");
- var key = 30803;
- function nodupIEXml(cs){
- var d = ++key;
- cs[0].setAttribute("_nodup", d);
- var r = [cs[0]];
- for(var i = 1, len = cs.length; i < len; i++){
- var c = cs[i];
- if(!c.getAttribute("_nodup") != d){
- c.setAttribute("_nodup", d);
- r[r.length] = c;
- }
- }
- for(var i = 0, len = cs.length; i < len; i++){
- cs[i].removeAttribute("_nodup");
- }
- return r;
- }
- function nodup(cs){
- if(!cs){
- return [];
- }
- var len = cs.length, c, i, r = cs, cj, ri = -1;
- if(!len || typeof cs.nodeType != "undefined" || len == 1){
- return cs;
- }
- if(isIE && typeof cs[0].selectSingleNode != "undefined"){
- return nodupIEXml(cs);
- }
- var d = ++key;
- cs[0]._nodup = d;
- for(i = 1; c = cs[i]; i++){
- if(c._nodup != d){
- c._nodup = d;
- }else{
- r = [];
- for(var j = 0; j < i; j++){
- r[++ri] = cs[j];
- }
- for(j = i+1; cj = cs[j]; j++){
- if(cj._nodup != d){
- cj._nodup = d;
- r[++ri] = cj;
- }
- }
- return r;
- }
- }
- return r;
- }
- function quickDiffIEXml(c1, c2){
- var d = ++key;
- for(var i = 0, len = c1.length; i < len; i++){
- c1[i].setAttribute("_qdiff", d);
- }
- var r = [];
- for(var i = 0, len = c2.length; i < len; i++){
- if(c2[i].getAttribute("_qdiff") != d){
- r[r.length] = c2[i];
- }
- }
- for(var i = 0, len = c1.length; i < len; i++){
- c1[i].removeAttribute("_qdiff");
- }
- return r;
- }
- function quickDiff(c1, c2){
- var len1 = c1.length;
- if(!len1){
- return c2;
- }
- if(isIE && c1[0].selectSingleNode){
- return quickDiffIEXml(c1, c2);
- }
- var d = ++key;
- for(var i = 0; i < len1; i++){
- c1[i]._qdiff = d;
- }
- var r = [];
- for(var i = 0, len = c2.length; i < len; i++){
- if(c2[i]._qdiff != d){
- r[r.length] = c2[i];
- }
- }
- return r;
- }
- function quickId(ns, mode, root, id){
- if(ns == root){
- var d = root.ownerDocument || root;
- return d.getElementById(id);
- }
- ns = getNodes(ns, mode, "*");
- return byId(ns, null, id);
- }
- return {
- getStyle : function(el, name){
- return Ext.fly(el).getStyle(name);
- },
-
- compile : function(path, type){
- type = type || "select";
- var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];
- var q = path, mode, lq;
- var tk = Ext.DomQuery.matchers;
- var tklen = tk.length;
- var mm;
-
- var lmode = q.match(modeRe);
- if(lmode && lmode[1]){
- fn[fn.length] = 'mode="'+lmode[1].replace(trimRe, "")+'";';
- q = q.replace(lmode[1], "");
- }
-
- while(path.substr(0, 1)=="/"){
- path = path.substr(1);
- }
- while(q && lq != q){
- lq = q;
- var tm = q.match(tagTokenRe);
- if(type == "select"){
- if(tm){
- if(tm[1] == "#"){
- fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
- }else{
- fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
- }
- q = q.replace(tm[0], "");
- }else if(q.substr(0, 1) != '@'){
- fn[fn.length] = 'n = getNodes(n, mode, "*");';
- }
- }else{
- if(tm){
- if(tm[1] == "#"){
- fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
- }else{
- fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
- }
- q = q.replace(tm[0], "");
- }
- }
- while(!(mm = q.match(modeRe))){
- var matched = false;
- for(var j = 0; j < tklen; j++){
- var t = tk[j];
- var m = q.match(t.re);
- if(m){
- fn[fn.length] = t.select.replace(tplRe, function(x, i){
- return m[i];
- });
- q = q.replace(m[0], "");
- matched = true;
- break;
- }
- }
-
- if(!matched){
- throw 'Error parsing selector, parsing failed at "' + q + '"';
- }
- }
- if(mm[1]){
- fn[fn.length] = 'mode="'+mm[1].replace(trimRe, "")+'";';
- q = q.replace(mm[1], "");
- }
- }
- fn[fn.length] = "return nodup(n);\n}";
- eval(fn.join(""));
- return f;
- },
-
- select : function(path, root, type){
- if(!root || root == document){
- root = document;
- }
- if(typeof root == "string"){
- root = document.getElementById(root);
- }
- var paths = path.split(",");
- var results = [];
- for(var i = 0, len = paths.length; i < len; i++){
- var p = paths[i].replace(trimRe, "");
- if(!cache[p]){
- cache[p] = Ext.DomQuery.compile(p);
- if(!cache[p]){
- throw p + " is not a valid selector";
- }
- }
- var result = cache[p](root);
- if(result && result != document){
- results = results.concat(result);
- }
- }
- if(paths.length > 1){
- return nodup(results);
- }
- return results;
- },
-
- selectNode : function(path, root){
- return Ext.DomQuery.select(path, root)[0];
- },
-
- selectValue : function(path, root, defaultValue){
- path = path.replace(trimRe, "");
- if(!valueCache[path]){
- valueCache[path] = Ext.DomQuery.compile(path, "select");
- }
- var n = valueCache[path](root);
- n = n[0] ? n[0] : n;
- var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
- return ((v === null||v === undefined||v==='') ? defaultValue : v);
- },
-
- selectNumber : function(path, root, defaultValue){
- var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
- return parseFloat(v);
- },
-
- is : function(el, ss){
- if(typeof el == "string"){
- el = document.getElementById(el);
- }
- var isArray = Ext.isArray(el);
- var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
- return isArray ? (result.length == el.length) : (result.length > 0);
- },
-
- filter : function(els, ss, nonMatches){
- ss = ss.replace(trimRe, "");
- if(!simpleCache[ss]){
- simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
- }
- var result = simpleCache[ss](els);
- return nonMatches ? quickDiff(result, els) : result;
- },
-
- matchers : [{
- re: /^\.([\w-]+)/,
- select: 'n = byClassName(n, null, " {1} ");'
- }, {
- re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
- select: 'n = byPseudo(n, "{1}", "{2}");'
- },{
- re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
- select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
- }, {
- re: /^#([\w-]+)/,
- select: 'n = byId(n, null, "{1}");'
- },{
- re: /^@([\w-]+)/,
- select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
- }
- ],
-
- operators : {
- "=" : function(a, v){
- return a == v;
- },
- "!=" : function(a, v){
- return a != v;
- },
- "^=" : function(a, v){
- return a && a.substr(0, v.length) == v;
- },
- "$=" : function(a, v){
- return a && a.substr(a.length-v.length) == v;
- },
- "*=" : function(a, v){
- return a && a.indexOf(v) !== -1;
- },
- "%=" : function(a, v){
- return (a % v) == 0;
- },
- "|=" : function(a, v){
- return a && (a == v || a.substr(0, v.length+1) == v+'-');
- },
- "~=" : function(a, v){
- return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
- }
- },
-
- pseudos : {
- "first-child" : function(c){
- var r = [], ri = -1, n;
- for(var i = 0, ci; ci = n = c[i]; i++){
- while((n = n.previousSibling) && n.nodeType != 1);
- if(!n){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "last-child" : function(c){
- var r = [], ri = -1, n;
- for(var i = 0, ci; ci = n = c[i]; i++){
- while((n = n.nextSibling) && n.nodeType != 1);
- if(!n){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "nth-child" : function(c, a) {
- var r = [], ri = -1;
- var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
- var f = (m[1] || 1) - 0, l = m[2] - 0;
- for(var i = 0, n; n = c[i]; i++){
- var pn = n.parentNode;
- if (batch != pn._batch) {
- var j = 0;
- for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
- if(cn.nodeType == 1){
- cn.nodeIndex = ++j;
- }
- }
- pn._batch = batch;
- }
- if (f == 1) {
- if (l == 0 || n.nodeIndex == l){
- r[++ri] = n;
- }
- } else if ((n.nodeIndex + l) % f == 0){
- r[++ri] = n;
- }
- }
- return r;
- },
- "only-child" : function(c){
- var r = [], ri = -1;;
- for(var i = 0, ci; ci = c[i]; i++){
- if(!prev(ci) && !next(ci)){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "empty" : function(c){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- var cns = ci.childNodes, j = 0, cn, empty = true;
- while(cn = cns[j]){
- ++j;
- if(cn.nodeType == 1 || cn.nodeType == 3){
- empty = false;
- break;
- }
- }
- if(empty){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "contains" : function(c, v){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "nodeValue" : function(c, v){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if(ci.firstChild && ci.firstChild.nodeValue == v){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "checked" : function(c){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if(ci.checked == true){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "not" : function(c, ss){
- return Ext.DomQuery.filter(c, ss, true);
- },
- "any" : function(c, selectors){
- var ss = selectors.split('|');
- var r = [], ri = -1, s;
- for(var i = 0, ci; ci = c[i]; i++){
- for(var j = 0; s = ss[j]; j++){
- if(Ext.DomQuery.is(ci, s)){
- r[++ri] = ci;
- break;
- }
- }
- }
- return r;
- },
- "odd" : function(c){
- return this["nth-child"](c, "odd");
- },
- "even" : function(c){
- return this["nth-child"](c, "even");
- },
- "nth" : function(c, a){
- return c[a-1] || [];
- },
- "first" : function(c){
- return c[0] || [];
- },
- "last" : function(c){
- return c[c.length-1] || [];
- },
- "has" : function(c, ss){
- var s = Ext.DomQuery.select;
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if(s(ss, ci).length > 0){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "next" : function(c, ss){
- var is = Ext.DomQuery.is;
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- var n = next(ci);
- if(n && is(n, ss)){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "prev" : function(c, ss){
- var is = Ext.DomQuery.is;
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- var n = prev(ci);
- if(n && is(n, ss)){
- r[++ri] = ci;
- }
- }
- return r;
- }
- }
- };
- }();
- Ext.query = Ext.DomQuery.select;
- Ext.util.Observable = function(){
-
- if(this.listeners){
- this.on(this.listeners);
- delete this.listeners;
- }
- };
- Ext.util.Observable.prototype = {
-
- fireEvent : function(){
- if(this.eventsSuspended !== true){
- var ce = this.events[arguments[0].toLowerCase()];
- if(typeof ce == "object"){
- return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
- }
- }
- return true;
- },
- filterOptRe : /^(?:scope|delay|buffer|single)$/,
-
- addListener : function(eventName, fn, scope, o){
- if(typeof eventName == "object"){
- o = eventName;
- for(var e in o){
- if(this.filterOptRe.test(e)){
- continue;
- }
- if(typeof o[e] == "function"){
- this.addListener(e, o[e], o.scope, o);
- }else{
- this.addListener(e, o[e].fn, o[e].scope, o[e]);
- }
- }
- return;
- }
- o = (!o || typeof o == "boolean") ? {} : o;
- eventName = eventName.toLowerCase();
- var ce = this.events[eventName] || true;
- if(typeof ce == "boolean"){
- ce = new Ext.util.Event(this, eventName);
- this.events[eventName] = ce;
- }
- ce.addListener(fn, scope, o);
- },
-
- removeListener : function(eventName, fn, scope){
- var ce = this.events[eventName.toLowerCase()];
- if(typeof ce == "object"){
- ce.removeListener(fn, scope);
- }
- },
-
- purgeListeners : function(){
- for(var evt in this.events){
- if(typeof this.events[evt] == "object"){
- this.events[evt].clearListeners();
- }
- }
- },
- relayEvents : function(o, events){
- var createHandler = function(ename){
- return function(){
- return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0)));
- };
- };
- for(var i = 0, len = events.length; i < len; i++){
- var ename = events[i];
- if(!this.events[ename]){ this.events[ename] = true; };
- o.on(ename, createHandler(ename), this);
- }
- },
-
- addEvents : function(o){
- if(!this.events){
- this.events = {};
- }
- if(typeof o == 'string'){
- for(var i = 0, a = arguments, v; v = a[i]; i++){
- if(!this.events[a[i]]){
- o[a[i]] = true;
- }
- }
- }else{
- Ext.applyIf(this.events, o);
- }
- },
-
- hasListener : function(eventName){
- var e = this.events[eventName];
- return typeof e == "object" && e.listeners.length > 0;
- },
-
- suspendEvents : function(){
- this.eventsSuspended = true;
- },
-
- resumeEvents : function(){
- this.eventsSuspended = false;
- },
- getMethodEvent : function(method){
- if(!this.methodEvents){
- this.methodEvents = {};
- }
- var e = this.methodEvents[method];
- if(!e){
- e = {};
- this.methodEvents[method] = e;
- e.originalFn = this[method];
- e.methodName = method;
- e.before = [];
- e.after = [];
- var returnValue, v, cancel;
- var obj = this;
- var makeCall = function(fn, scope, args){
- if((v = fn.apply(scope || obj, args)) !== undefined){
- if(typeof v === 'object'){
- if(v.returnValue !== undefined){
- returnValue = v.returnValue;
- }else{
- returnValue = v;
- }
- if(v.cancel === true){
- cancel = true;
- }
- }else if(v === false){
- cancel = true;
- }else {
- returnValue = v;
- }
- }
- }
- this[method] = function(){
- returnValue = v = undefined; cancel = false;
- var args = Array.prototype.slice.call(arguments, 0);
- for(var i = 0, len = e.before.length; i < len; i++){
- makeCall(e.before[i].fn, e.before[i].scope, args);
- if(cancel){
- return returnValue;
- }
- }
- if((v = e.originalFn.apply(obj, args)) !== undefined){
- returnValue = v;
- }
- for(var i = 0, len = e.after.length; i < len; i++){
- makeCall(e.after[i].fn, e.after[i].scope, args);
- if(cancel){
- return returnValue;
- }
- }
- return returnValue;
- };
- }
- return e;
- },
- beforeMethod : function(method, fn, scope){
- var e = this.getMethodEvent(method);
- e.before.push({fn: fn, scope: scope});
- },
- afterMethod : function(method, fn, scope){
- var e = this.getMethodEvent(method);
- e.after.push({fn: fn, scope: scope});
- },
- removeMethodListener : function(method, fn, scope){
- var e = this.getMethodEvent(method);
- for(var i = 0, len = e.before.length; i < len; i++){
- if(e.before[i].fn == fn && e.before[i].scope == scope){
- e.before.splice(i, 1);
- return;
- }
- }
- for(var i = 0, len = e.after.length; i < len; i++){
- if(e.after[i].fn == fn && e.after[i].scope == scope){
- e.after.splice(i, 1);
- return;
- }
- }
- }
- };
- Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
- Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
- Ext.util.Observable.capture = function(o, fn, scope){
- o.fireEvent = o.fireEvent.createInterceptor(fn, scope);
- };
- Ext.util.Observable.releaseCapture = function(o){
- o.fireEvent = Ext.util.Observable.prototype.fireEvent;
- };
- (function(){
- var createBuffered = function(h, o, scope){
- var task = new Ext.util.DelayedTask();
- return function(){
- task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));
- };
- };
- var createSingle = function(h, e, fn, scope){
- return function(){
- e.removeListener(fn, scope);
- return h.apply(scope, arguments);
- };
- };
- var createDelayed = function(h, o, scope){
- return function(){
- var args = Array.prototype.slice.call(arguments, 0);
- setTimeout(function(){
- h.apply(scope, args);
- }, o.delay || 10);
- };
- };
- Ext.util.Event = function(obj, name){
- this.name = name;
- this.obj = obj;
- this.listeners = [];
- };
- Ext.util.Event.prototype = {
- addListener : function(fn, scope, options){
- scope = scope || this.obj;
- if(!this.isListening(fn, scope)){
- var l = this.createListener(fn, scope, options);
- if(!this.firing){
- this.listeners.push(l);
- }else{ this.listeners = this.listeners.slice(0);
- this.listeners.push(l);
- }
- }
- },
- createListener : function(fn, scope, o){
- o = o || {};
- scope = scope || this.obj;
- var l = {fn: fn, scope: scope, options: o};
- var h = fn;
- if(o.delay){
- h = createDelayed(h, o, scope);
- }
- if(o.single){
- h = createSingle(h, this, fn, scope);
- }
- if(o.buffer){
- h = createBuffered(h, o, scope);
- }
- l.fireFn = h;
- return l;
- },
- findListener : function(fn, scope){
- scope = scope || this.obj;
- var ls = this.listeners;
- for(var i = 0, len = ls.length; i < len; i++){
- var l = ls[i];
- if(l.fn == fn && l.scope == scope){
- return i;
- }
- }
- return -1;
- },
- isListening : function(fn, scope){
- return this.findListener(fn, scope) != -1;
- },
- removeListener : function(fn, scope){
- var index;
- if((index = this.findListener(fn, scope)) != -1){
- if(!this.firing){
- this.listeners.splice(index, 1);
- }else{
- this.listeners = this.listeners.slice(0);
- this.listeners.splice(index, 1);
- }
- return true;
- }
- return false;
- },
- clearListeners : function(){
- this.listeners = [];
- },
- fire : function(){
- var ls = this.listeners, scope, len = ls.length;
- if(len > 0){
- this.firing = true;
- var args = Array.prototype.slice.call(arguments, 0);
- for(var i = 0; i < len; i++){
- var l = ls[i];
- if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){
- this.firing = false;
- return false;
- }
- }
- this.firing = false;
- }
- return true;
- }
- };
- })();
- Ext.EventManager = function(){
- var docReadyEvent, docReadyProcId, docReadyState = false;
- var resizeEvent, resizeTask, textEvent, textSize;
- var E = Ext.lib.Event;
- var D = Ext.lib.Dom;
- var fireDocReady = function(){
- if(!docReadyState){
- docReadyState = true;
- Ext.isReady = true;
- if(docReadyProcId){
- clearInterval(docReadyProcId);
- }
- if(Ext.isGecko || Ext.isOpera) {
- document.removeEventListener("DOMContentLoaded", fireDocReady, false);
- }
- if(Ext.isIE){
- var defer = document.getElementById("ie-deferred-loader");
- if(defer){
- defer.onreadystatechange = null;
- defer.parentNode.removeChild(defer);
- }
- }
- if(docReadyEvent){
- docReadyEvent.fire();
- docReadyEvent.clearListeners();
- }
- }
- };
- var initDocReady = function(){
- docReadyEvent = new Ext.util.Event();
- if(Ext.isGecko || Ext.isOpera) {
- document.addEventListener("DOMContentLoaded", fireDocReady, false);
- }else if(Ext.isIE){
- document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
- var defer = document.getElementById("ie-deferred-loader");
- defer.onreadystatechange = function(){
- if(this.readyState == "complete"){
- fireDocReady();
- }
- };
- }else if(Ext.isSafari){
- docReadyProcId = setInterval(function(){
- var rs = document.readyState;
- if(rs == "complete") {
- fireDocReady();
- }
- }, 10);
- }
-
- E.on(window, "load", fireDocReady);
- };
- var createBuffered = function(h, o){
- var task = new Ext.util.DelayedTask(h);
- return function(e){
-
- e = new Ext.EventObjectImpl(e);
- task.delay(o.buffer, h, null, [e]);
- };
- };
- var createSingle = function(h, el, ename, fn){
- return function(e){
- Ext.EventManager.removeListener(el, ename, fn);
- h(e);
- };
- };
- var createDelayed = function(h, o){
- return function(e){
-
- e = new Ext.EventObjectImpl(e);
- setTimeout(function(){
- h(e);
- }, o.delay || 10);
- };
- };
- var listen = function(element, ename, opt, fn, scope){
- var o = (!opt || typeof opt == "boolean") ? {} : opt;
- fn = fn || o.fn; scope = scope || o.scope;
- var el = Ext.getDom(element);
- if(!el){
- throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';
- }
- var h = function(e){
- e = Ext.EventObject.setEvent(e);
- var t;
- if(o.delegate){
- t = e.getTarget(o.delegate, el);
- if(!t){
- return;
- }
- }else{
- t = e.target;
- }
- if(o.stopEvent === true){
- e.stopEvent();
- }
- if(o.preventDefault === true){
- e.preventDefault();
- }
- if(o.stopPropagation === true){
- e.stopPropagation();
- }
- if(o.normalized === false){
- e = e.browserEvent;
- }
- fn.call(scope || el, e, t, o);
- };
- if(o.delay){
- h = createDelayed(h, o);
- }
- if(o.single){
- h = createSingle(h, el, ename, fn);
- }
- if(o.buffer){
- h = createBuffered(h, o);
- }
- fn._handlers = fn._handlers || [];
- fn._handlers.push([Ext.id(el), ename, h]);
- E.on(el, ename, h);
- if(ename == "mousewheel" && el.addEventListener){
- el.addEventListener("DOMMouseScroll", h, false);
- E.on(window, 'unload', function(){
- el.removeEventListener("DOMMouseScroll", h, false);
- });
- }
- if(ename == "mousedown" && el == document){
- Ext.EventManager.stoppedMouseDownEvent.addListener(h);
- }
- return h;
- };
- var stopListening = function(el, ename, fn){
- var id = Ext.id(el), hds = fn._handlers, hd = fn;
- if(hds){
- for(var i = 0, len = hds.length; i < len; i++){
- var h = hds[i];
- if(h[0] == id && h[1] == ename){
- hd = h[2];
- hds.splice(i, 1);
- break;
- }
- }
- }
- E.un(el, ename, hd);
- el = Ext.getDom(el);
- if(ename == "mousewheel" && el.addEventListener){
- el.removeEventListener("DOMMouseScroll", hd, false);
- }
- if(ename == "mousedown" && el == document){
- Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);
- }
- };
- var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
- var pub = {
-
- addListener : function(element, eventName, fn, scope, options){
- if(typeof eventName == "object"){
- var o = eventName;
- for(var e in o){
- if(propRe.test(e)){
- continue;
- }
- if(typeof o[e] == "function"){
-
- listen(element, e, o, o[e], o.scope);
- }else{
-
- listen(element, e, o[e]);
- }
- }
- return;
- }
- return listen(element, eventName, options, fn, scope);
- },
-
- removeListener : function(element, eventName, fn){
- return stopListening(element, eventName, fn);
- },
-
- onDocumentReady : function(fn, scope, options){
- if(docReadyState){
- docReadyEvent.addListener(fn, scope, options);
- docReadyEvent.fire();
- docReadyEvent.clearListeners();
- return;
- }
- if(!docReadyEvent){
- initDocReady();
- }
- docReadyEvent.addListener(fn, scope, options);
- },
-
- onWindowResize : function(fn, scope, options){
- if(!resizeEvent){
- resizeEvent = new Ext.util.Event();
- resizeTask = new Ext.util.DelayedTask(function(){
- resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
- });
- E.on(window, "resize", this.fireWindowResize, this);
- }
- resizeEvent.addListener(fn, scope, options);
- },
-
- fireWindowResize : function(){
- if(resizeEvent){
- if((Ext.isIE||Ext.isAir) && resizeTask){
- resizeTask.delay(50);
- }else{
- resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
- }
- }
- },
-
- onTextResize : function(fn, scope, options){
- if(!textEvent){
- textEvent = new Ext.util.Event();
- var textEl = new Ext.Element(document.createElement('div'));
- textEl.dom.className = 'x-text-resize';
- textEl.dom.innerHTML = 'X';
- textEl.appendTo(document.body);
- textSize = textEl.dom.offsetHeight;
- setInterval(function(){
- if(textEl.dom.offsetHeight != textSize){
- textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
- }
- }, this.textResizeInterval);
- }
- textEvent.addListener(fn, scope, options);
- },
-
- removeResizeListener : function(fn, scope){
- if(resizeEvent){
- resizeEvent.removeListener(fn, scope);
- }
- },
-
- fireResize : function(){
- if(resizeEvent){
- resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
- }
- },
-
- ieDeferSrc : false,
-
- textResizeInterval : 50
- };
-
- pub.on = pub.addListener;
-
- pub.un = pub.removeListener;
- pub.stoppedMouseDownEvent = new Ext.util.Event();
- return pub;
- }();
- Ext.onReady = Ext.EventManager.onDocumentReady;
- Ext.onReady(function(){
- var bd = Ext.getBody();
- if(!bd){ return; }
- var cls = [
- Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')
- : Ext.isGecko ? "ext-gecko"
- : Ext.isOpera ? "ext-opera"
- : Ext.isSafari ? "ext-safari" : ""];
- if(Ext.isMac){
- cls.push("ext-mac");
- }
- if(Ext.isLinux){
- cls.push("ext-linux");
- }
- if(Ext.isBorderBox){
- cls.push('ext-border-box');
- }
- if(Ext.isStrict){
- var p = bd.dom.parentNode;
- if(p){
- p.className += ' ext-strict';
- }
- }
- bd.addClass(cls.join(' '));
- });
- Ext.EventObject = function(){
- var E = Ext.lib.Event;
-
- var safariKeys = {
- 63234 : 37,
- 63235 : 39,
- 63232 : 38,
- 63233 : 40,
- 63276 : 33,
- 63277 : 34,
- 63272 : 46,
- 63273 : 36,
- 63275 : 35
- };
-
- var btnMap = Ext.isIE ? {1:0,4:1,2:2} :
- (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
- Ext.EventObjectImpl = function(e){
- if(e){
- this.setEvent(e.browserEvent || e);
- }
- };
- Ext.EventObjectImpl.prototype = {
-
- browserEvent : null,
-
- button : -1,
-
- shiftKey : false,
-
- ctrlKey : false,
-
- altKey : false,
-
- BACKSPACE : 8,
-
- TAB : 9,
-
- RETURN : 13,
-
- ENTER : 13,
-
- SHIFT : 16,
-
- CONTROL : 17,
-
- ESC : 27,
-
- SPACE : 32,
-
- PAGEUP : 33,
-
- PAGEDOWN : 34,
-
- END : 35,
-
- HOME : 36,
-
- LEFT : 37,
-
- UP : 38,
-
- RIGHT : 39,
-
- DOWN : 40,
-
- DELETE : 46,
-
- F5 : 116,
-
- setEvent : function(e){
- if(e == this || (e && e.browserEvent)){
- return e;
- }
- this.browserEvent = e;
- if(e){
-
- this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);
- if(e.type == 'click' && this.button == -1){
- this.button = 0;
- }
- this.type = e.type;
- this.shiftKey = e.shiftKey;
-
- this.ctrlKey = e.ctrlKey || e.metaKey;
- this.altKey = e.altKey;
-
- this.keyCode = e.keyCode;
- this.charCode = e.charCode;
-
- this.target = E.getTarget(e);
-
- this.xy = E.getXY(e);
- }else{
- this.button = -1;
- this.shiftKey = false;
- this.ctrlKey = false;
- this.altKey = false;
- this.keyCode = 0;
- this.charCode =0;
- this.target = null;
- this.xy = [0, 0];
- }
- return this;
- },
-
- stopEvent : function(){
- if(this.browserEvent){
- if(this.browserEvent.type == 'mousedown'){
- Ext.EventManager.stoppedMouseDownEvent.fire(this);
- }
- E.stopEvent(this.browserEvent);
- }
- },
-
- preventDefault : function(){
- if(this.browserEvent){
- E.preventDefault(this.browserEvent);
- }
- },
-
- isNavKeyPress : function(){
- var k = this.keyCode;
- k = Ext.isSafari ? (safariKeys[k] || k) : k;
- return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC;
- },
- isSpecialKey : function(){
- var k = this.keyCode;
- return (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13 || k == 40 || k == 27 ||
- (k == 16) || (k == 17) ||
- (k >= 18 && k <= 20) ||
- (k >= 33 && k <= 35) ||
- (k >= 36 && k <= 39) ||
- (k >= 44 && k <= 45);
- },
-
- stopPropagation : function(){
- if(this.browserEvent){
- if(this.browserEvent.type == 'mousedown'){
- Ext.EventManager.stoppedMouseDownEvent.fire(this);
- }
- E.stopPropagation(this.browserEvent);
- }
- },
-
- getCharCode : function(){
- return this.charCode || this.keyCode;
- },
-
- getKey : function(){
- var k = this.keyCode || this.charCode;
- return Ext.isSafari ? (safariKeys[k] || k) : k;
- },
-
- getPageX : function(){
- return this.xy[0];
- },
-
- getPageY : function(){
- return this.xy[1];
- },
-
- getTime : function(){
- if(this.browserEvent){
- return E.getTime(this.browserEvent);
- }
- return null;
- },
-
- getXY : function(){
- return this.xy;
- },
-
- getTarget : function(selector, maxDepth, returnEl){
- var t = Ext.get(this.target);
- return selector ? t.findParent(selector, maxDepth, returnEl) : (returnEl ? t : this.target);
- },
-
-
- getRelatedTarget : function(){
- if(this.browserEvent){
- return E.getRelatedTarget(this.browserEvent);
- }
- return null;
- },
-
- getWheelDelta : function(){
- var e = this.browserEvent;
- var delta = 0;
- if(e.wheelDelta){
- delta = e.wheelDelta/120;
- }else if(e.detail){
- delta = -e.detail/3;
- }
- return delta;
- },
-
- hasModifier : function(){
- return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true : false;
- },
-
- within : function(el, related){
- var t = this[related ? "getRelatedTarget" : "getTarget"]();
- try {
- return t && Ext.fly(el).contains(t);
- } catch(e){}
- return false;
- },
- getPoint : function(){
- return new Ext.lib.Point(this.xy[0], this.xy[1]);
- }
- };
- return new Ext.EventObjectImpl();
- }();
- (function(){
- var D = Ext.lib.Dom;
- var E = Ext.lib.Event;
- var A = Ext.lib.Anim;
- var propCache = {};
- var camelRe = /(-[a-z])/gi;
- var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
- var view = document.defaultView;
- Ext.Element = function(element, forceNew){
- var dom = typeof element == "string" ?
- document.getElementById(element) : element;
- if(!dom){ return null;
- }
- var id = dom.id;
- if(forceNew !== true && id && Ext.Element.cache[id]){ return Ext.Element.cache[id];
- }
-
- this.dom = dom;
-
- this.id = id || Ext.id(dom);
- };
- var El = Ext.Element;
- El.prototype = {
-
- originalDisplay : "",
- visibilityMode : 1,
-
- defaultUnit : "px",
-
- setVisibilityMode : function(visMode){
- this.visibilityMode = visMode;
- return this;
- },
-
- enableDisplayMode : function(display){
- this.setVisibilityMode(El.DISPLAY);
- if(typeof display != "undefined") this.originalDisplay = display;
- return this;
- },
-
- findParent : function(simpleSelector, maxDepth, returnEl){
- var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl;
- maxDepth = maxDepth || 50;
- if(typeof maxDepth != "number"){
- stopEl = Ext.getDom(maxDepth);
- maxDepth = 10;
- }
- while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){
- if(dq.is(p, simpleSelector)){
- return returnEl ? Ext.get(p) : p;
- }
- depth++;
- p = p.parentNode;
- }
- return null;
- },
-
- findParentNode : function(simpleSelector, maxDepth, returnEl){
- var p = Ext.fly(this.dom.parentNode, '_internal');
- return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null;
- },
-
- up : function(simpleSelector, maxDepth){
- return this.findParentNode(simpleSelector, maxDepth, true);
- },
-
- is : function(simpleSelector){
- return Ext.DomQuery.is(this.dom, simpleSelector);
- },
-
- animate : function(args, duration, onComplete, easing, animType){
- this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType);
- return this;
- },
-
- anim : function(args, opt, animType, defaultDur, defaultEase, cb){
- animType = animType || 'run';
- opt = opt || {};
- var anim = Ext.lib.Anim[animType](
- this.dom, args,
- (opt.duration || defaultDur) || .35,
- (opt.easing || defaultEase) || 'easeOut',
- function(){
- Ext.callback(cb, this);
- Ext.callback(opt.callback, opt.scope || this, [this, opt]);
- },
- this
- );
- opt.anim = anim;
- return anim;
- },
- preanim : function(a, i){
- return !a[i] ? false : (typeof a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});
- },
-
- clean : function(forceReclean){
- if(this.isCleaned && forceReclean !== true){
- return this;
- }
- var ns = /\S/;
- var d = this.dom, n = d.firstChild, ni = -1;
- while(n){
- var nx = n.nextSibling;
- if(n.nodeType == 3 && !ns.test(n.nodeValue)){
- d.removeChild(n);
- }else{
- n.nodeIndex = ++ni;
- }
- n = nx;
- }
- this.isCleaned = true;
- return this;
- },
-
- scrollIntoView : function(container, hscroll){
- var c = Ext.getDom(container) || Ext.getBody().dom;
- var el = this.dom;
- var o = this.getOffsetsTo(c),
- l = o[0] + c.scrollLeft,
- t = o[1] + c.scrollTop,
- b = t+el.offsetHeight,
- r = l+el.offsetWidth;
- var ch = c.clientHeight;
- var ct = parseInt(c.scrollTop, 10);
- var cl = parseInt(c.scrollLeft, 10);
- var cb = ct + ch;
- var cr = cl + c.clientWidth;
- if(el.offsetHeight > ch || t < ct){
- c.scrollTop = t;
- }else if(b > cb){
- c.scrollTop = b-ch;
- }
- c.scrollTop = c.scrollTop;
- if(hscroll !== false){
- if(el.offsetWidth > c.clientWidth || l < cl){
- c.scrollLeft = l;
- }else if(r > cr){
- c.scrollLeft = r-c.clientWidth;
- }
- c.scrollLeft = c.scrollLeft;
- }
- return this;
- },
- scrollChildIntoView : function(child, hscroll){
- Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll);
- },
-
- autoHeight : function(animate, duration, onComplete, easing){
- var oldHeight = this.getHeight();
- this.clip();
- this.setHeight(1); setTimeout(function(){
- var height = parseInt(this.dom.scrollHeight, 10); if(!animate){
- this.setHeight(height);
- this.unclip();
- if(typeof onComplete == "function"){
- onComplete();
- }
- }else{
- this.setHeight(oldHeight); this.setHeight(height, animate, duration, function(){
- this.unclip();
- if(typeof onComplete == "function") onComplete();
- }.createDelegate(this), easing);
- }
- }.createDelegate(this), 0);
- return this;
- },
-
- contains : function(el){
- if(!el){return false;}
- try {
- return D.isAncestor(this.dom, el.dom ? el.dom : el);
- } catch(e){}
- return false;
- },
-
- isVisible : function(deep) {
- var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
- if(deep !== true || !vis){
- return vis;
- }
- var p = this.dom.parentNode;
- while(p && p.tagName.toLowerCase() != "body"){
- if(!Ext.fly(p, '_isVisible').isVisible()){
- return false;
- }
- p = p.parentNode;
- }
- return true;
- },
-
- select : function(selector, unique){
- return El.select(selector, unique, this.dom);
- },
-
- query : function(selector, unique){
- return Ext.DomQuery.select(selector, this.dom);
- },
-
- child : function(selector, returnDom){
- var n = Ext.DomQuery.selectNode(selector, this.dom);
- return returnDom ? n : Ext.get(n);
- },
-
- down : function(selector, returnDom){
- var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);
- return returnDom ? n : Ext.get(n);
- },
-
- initDD : function(group, config, overrides){
- var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);
- return Ext.apply(dd, overrides);
- },
-
- initDDProxy : function(group, config, overrides){
- var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);
- return Ext.apply(dd, overrides);
- },
-
- initDDTarget : function(group, config, overrides){
- var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);
- return Ext.apply(dd, overrides);
- },
-
- setVisible : function(visible, animate){
- if(!animate || !A){
- if(this.visibilityMode == El.DISPLAY){
- this.setDisplayed(visible);
- }else{
- this.fixDisplay();
- this.dom.style.visibility = visible ? "visible" : "hidden";
- }
- }else{
- var dom = this.dom;
- var visMode = this.visibilityMode;
- if(visible){
- this.setOpacity(.01);
- this.setVisible(true);
- }
- this.anim({opacity: { to: (visible?1:0) }},
- this.preanim(arguments, 1),
- null, .35, 'easeIn', function(){
- if(!visible){
- if(visMode == El.DISPLAY){
- dom.style.display = "none";
- }else{
- dom.style.visibility = "hidden";
- }
- Ext.get(dom).setOpacity(1);
- }
- });
- }
- return this;
- },
-
- isDisplayed : function() {
- return this.getStyle("display") != "none";
- },
-
- toggle : function(animate){
- this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
- return this;
- },
-
- setDisplayed : function(value) {
- if(typeof value == "boolean"){
- value = value ? this.originalDisplay : "none";
- }
- this.setStyle("display", value);
- return this;
- },
-
- focus : function() {
- try{
- this.dom.focus();
- }catch(e){}
- return this;
- },
-
- blur : function() {
- try{
- this.dom.blur();
- }catch(e){}
- return this;
- },
-
- addClass : function(className){
- if(Ext.isArray(className)){
- for(var i = 0, len = className.length; i < len; i++) {
- this.addClass(className[i]);
- }
- }else{
- if(className && !this.hasClass(className)){
- this.dom.className = this.dom.className + " " + className;
- }
- }
- return this;
- },
-
- radioClass : function(className){
- var siblings = this.dom.parentNode.childNodes;
- for(var i = 0; i < siblings.length; i++) {
- var s = siblings[i];
- if(s.nodeType == 1){
- Ext.get(s).removeClass(className);
- }
- }
- this.addClass(className);
- return this;
- },
-
- removeClass : function(className){
- if(!className || !this.dom.className){
- return this;
- }
- if(Ext.isArray(className)){
- for(var i = 0, len = className.length; i < len; i++) {
- this.removeClass(className[i]);
- }
- }else{
- if(this.hasClass(className)){
- var re = this.classReCache[className];
- if (!re) {
- re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', "g");
- this.classReCache[className] = re;
- }
- this.dom.className =
- this.dom.className.replace(re, " ");
- }
- }
- return this;
- },
- classReCache: {},
-
- toggleClass : function(className){
- if(this.hasClass(className)){
- this.removeClass(className);
- }else{
- this.addClass(className);
- }
- return this;
- },
-
- hasClass : function(className){
- return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1;
- },
-
- replaceClass : function(oldClassName, newClassName){
- this.removeClass(oldClassName);
- this.addClass(newClassName);
- return this;
- },
-
- getStyles : function(){
- var a = arguments, len = a.length, r = {};
- for(var i = 0; i < len; i++){
- r[a[i]] = this.getStyle(a[i]);
- }
- return r;
- },
-
- getStyle : function(){
- return view && view.getComputedStyle ?
- function(prop){
- var el = this.dom, v, cs, camel;
- if(prop == 'float'){
- prop = "cssFloat";
- }
- if(v = el.style[prop]){
- return v;
- }
- if(cs = view.getComputedStyle(el, "")){
- if(!(camel = propCache[prop])){
- camel = propCache[prop] = prop.replace(camelRe, camelFn);
- }
- return cs[camel];
- }
- return null;
- } :
- function(prop){
- var el = this.dom, v, cs, camel;
- if(prop == 'opacity'){
- if(typeof el.style.filter == 'string'){
- var m = el.style.filter.match(/alpha\(opacity=(.*)\)/i);
- if(m){
- var fv = parseFloat(m[1]);
- if(!isNaN(fv)){
- return fv ? fv / 100 : 0;
- }
- }
- }
- return 1;
- }else if(prop == 'float'){
- prop = "styleFloat";
- }
- if(!(camel = propCache[prop])){
- camel = propCache[prop] = prop.replace(camelRe, camelFn);
- }
- if(v = el.style[camel]){
- return v;
- }
- if(cs = el.currentStyle){
- return cs[camel];
- }
- return null;
- };
- }(),
-
- setStyle : function(prop, value){
- if(typeof prop == "string"){
- var camel;
- if(!(camel = propCache[prop])){
- camel = propCache[prop] = prop.replace(camelRe, camelFn);
- }
- if(camel == 'opacity') {
- this.setOpacity(value);
- }else{
- this.dom.style[camel] = value;
- }
- }else{
- for(var style in prop){
- if(typeof prop[style] != "function"){
- this.setStyle(style, prop[style]);
- }
- }
- }
- return this;
- },
-
- applyStyles : function(style){
- Ext.DomHelper.applyStyles(this.dom, style);
- return this;
- },
-
- getX : function(){
- return D.getX(this.dom);
- },
-
- getY : function(){
- return D.getY(this.dom);
- },
-
- getXY : function(){
- return D.getXY(this.dom);
- },
-
- getOffsetsTo : function(el){
- var o = this.getXY();
- var e = Ext.fly(el, '_internal').getXY();
- return [o[0]-e[0],o[1]-e[1]];
- },
-
- setX : function(x, animate){
- if(!animate || !A){
- D.setX(this.dom, x);
- }else{
- this.setXY([x, this.getY()], this.preanim(arguments, 1));
- }
- return this;
- },
-
- setY : function(y, animate){
- if(!animate || !A){
- D.setY(this.dom, y);
- }else{
- this.setXY([this.getX(), y], this.preanim(arguments, 1));
- }
- return this;
- },
-
- setLeft : function(left){
- this.setStyle("left", this.addUnits(left));
- return this;
- },
-
- setTop : function(top){
- this.setStyle("top", this.addUnits(top));
- return this;
- },
-
- setRight : function(right){
- this.setStyle("right", this.addUnits(right));
- return this;
- },
-
- setBottom : function(bottom){
- this.setStyle("bottom", this.addUnits(bottom));
- return this;
- },
-
- setXY : function(pos, animate){
- if(!animate || !A){
- D.setXY(this.dom, pos);
- }else{
- this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion');
- }
- return this;
- },
-
- setLocation : function(x, y, animate){
- this.setXY([x, y], this.preanim(arguments, 2));
- return this;
- },
-
- moveTo : function(x, y, animate){
- this.setXY([x, y], this.preanim(arguments, 2));
- return this;
- },
-
- getRegion : function(){
- return D.getRegion(this.dom);
- },
-
- getHeight : function(contentHeight){
- var h = this.dom.offsetHeight || 0;
- h = contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");
- return h < 0 ? 0 : h;
- },
-
- getWidth : function(contentWidth){
- var w = this.dom.offsetWidth || 0;
- w = contentWidth !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");
- return w < 0 ? 0 : w;
- },
-
- getComputedHeight : function(){
- var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
- if(!h){
- h = parseInt(this.getStyle('height'), 10) || 0;
- if(!this.isBorderBox()){
- h += this.getFrameWidth('tb');
- }
- }
- return h;
- },
-
- getComputedWidth : function(){
- var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
- if(!w){
- w = parseInt(this.getStyle('width'), 10) || 0;
- if(!this.isBorderBox()){
- w += this.getFrameWidth('lr');
- }
- }
- return w;
- },
-
- getSize : function(contentSize){
- return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)};
- },
- getStyleSize : function(){
- var w, h, d = this.dom, s = d.style;
- if(s.width && s.width != 'auto'){
- w = parseInt(s.width, 10);
- if(Ext.isBorderBox){
- w -= this.getFrameWidth('lr');
- }
- }
- if(s.height && s.height != 'auto'){
- h = parseInt(s.height, 10);
- if(Ext.isBorderBox){
- h -= this.getFrameWidth('tb');
- }
- }
- return {width: w || this.getWidth(true), height: h || this.getHeight(true)};
- },
-
- getViewSize : function(){
- var d = this.dom, doc = document, aw = 0, ah = 0;
- if(d == doc || d == doc.body){
- return {width : D.getViewWidth(), height: D.getViewHeight()};
- }else{
- return {
- width : d.clientWidth,
- height: d.clientHeight
- };
- }
- },
-
- getValue : function(asNumber){
- return asNumber ? parseInt(this.dom.value, 10) : this.dom.value;
- },
- adjustWidth : function(width){
- if(typeof width == "number"){
- if(this.autoBoxAdjust && !this.isBorderBox()){
- width -= (this.getBorderWidth("lr") + this.getPadding("lr"));
- }
- if(width < 0){
- width = 0;
- }
- }
- return width;
- },
- adjustHeight : function(height){
- if(typeof height == "number"){
- if(this.autoBoxAdjust && !this.isBorderBox()){
- height -= (this.getBorderWidth("tb") + this.getPadding("tb"));
- }
- if(height < 0){
- height = 0;
- }
- }
- return height;
- },
-
- setWidth : function(width, animate){
- width = this.adjustWidth(width);
- if(!animate || !A){
- this.dom.style.width = this.addUnits(width);
- }else{
- this.anim({width: {to: width}}, this.preanim(arguments, 1));
- }
- return this;
- },
-
- setHeight : function(height, animate){
- height = this.adjustHeight(height);
- if(!animate || !A){
- this.dom.style.height = this.addUnits(height);
- }else{
- this.anim({height: {to: height}}, this.preanim(arguments, 1));
- }
- return this;
- },
-
- setSize : function(width, height, animate){
- if(typeof width == "object"){ height = width.height; width = width.width;
- }
- width = this.adjustWidth(width); height = this.adjustHeight(height);
- if(!animate || !A){
- this.dom.style.width = this.addUnits(width);
- this.dom.style.height = this.addUnits(height);
- }else{
- this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2));
- }
- return this;
- },
-
- setBounds : function(x, y, width, height, animate){
- if(!animate || !A){
- this.setSize(width, height);
- this.setLocation(x, y);
- }else{
- width = this.adjustWidth(width); height = this.adjustHeight(height);
- this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}},
- this.preanim(arguments, 4), 'motion');
- }
- return this;
- },
-
- setRegion : function(region, animate){
- this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1));
- return this;
- },
-
- addListener : function(eventName, fn, scope, options){
- Ext.EventManager.on(this.dom, eventName, fn, scope || this, options);
- },
-
- removeListener : function(eventName, fn){
- Ext.EventManager.removeListener(this.dom, eventName, fn);
- return this;
- },
-
- removeAllListeners : function(){
- E.purgeElement(this.dom);
- return this;
- },
-
- relayEvent : function(eventName, observable){
- this.on(eventName, function(e){
- observable.fireEvent(eventName, e);
- });
- },
-
- setOpacity : function(opacity, animate){
- if(!animate || !A){
- var s = this.dom.style;
- if(Ext.isIE){
- s.zoom = 1;
- s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") +
- (opacity == 1 ? "" : " alpha(opacity=" + opacity * 100 + ")");
- }else{
- s.opacity = opacity;
- }
- }else{
- this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn');
- }
- return this;
- },
-
- getLeft : function(local){
- if(!local){
- return this.getX();
- }else{
- return parseInt(this.getStyle("left"), 10) || 0;
- }
- },
-
- getRight : function(local){
- if(!local){
- return this.getX() + this.getWidth();
- }else{
- return (this.getLeft(true) + this.getWidth()) || 0;
- }
- },
-
- getTop : function(local) {
- if(!local){
- return this.getY();
- }else{
- return parseInt(this.getStyle("top"), 10) || 0;
- }
- },
-
- getBottom : function(local){
- if(!local){
- return this.getY() + this.getHeight();
- }else{
- return (this.getTop(true) + this.getHeight()) || 0;
- }
- },
-
- position : function(pos, zIndex, x, y){
- if(!pos){
- if(this.getStyle('position') == 'static'){
- this.setStyle('position', 'relative');
- }
- }else{
- this.setStyle("position", pos);
- }
- if(zIndex){
- this.setStyle("z-index", zIndex);
- }
- if(x !== undefined && y !== undefined){
- this.setXY([x, y]);
- }else if(x !== undefined){
- this.setX(x);
- }else if(y !== undefined){
- this.setY(y);
- }
- },
-
- clearPositioning : function(value){
- value = value ||'';
- this.setStyle({
- "left": value,
- "right": value,
- "top": value,
- "bottom": value,
- "z-index": "",
- "position" : "static"
- });
- return this;
- },
-
- getPositioning : function(){
- var l = this.getStyle("left");
- var t = this.getStyle("top");
- return {
- "position" : this.getStyle("position"),
- "left" : l,
- "right" : l ? "" : this.getStyle("right"),
- "top" : t,
- "bottom" : t ? "" : this.getStyle("bottom"),
- "z-index" : this.getStyle("z-index")
- };
- },
-
- getBorderWidth : function(side){
- return this.addStyles(side, El.borders);
- },
-
- getPadding : function(side){
- return this.addStyles(side, El.paddings);
- },
-
- setPositioning : function(pc){
- this.applyStyles(pc);
- if(pc.right == "auto"){
- this.dom.style.right = "";
- }
- if(pc.bottom == "auto"){
- this.dom.style.bottom = "";
- }
- return this;
- },
- fixDisplay : function(){
- if(this.getStyle("display") == "none"){
- this.setStyle("visibility", "hidden");
- this.setStyle("display", this.originalDisplay); if(this.getStyle("display") == "none"){ this.setStyle("display", "block");
- }
- }
- },
- setOverflow : function(v){
- if(v=='auto' && Ext.isMac && Ext.isGecko){ this.dom.style.overflow = 'hidden';
- (function(){this.dom.style.overflow = 'auto';}).defer(1, this);
- }else{
- this.dom.style.overflow = v;
- }
- },
-
-
- setLeftTop : function(left, top){
- this.dom.style.left = this.addUnits(left);
- this.dom.style.top = this.addUnits(top);
- return this;
- },
-
- move : function(direction, distance, animate){
- var xy = this.getXY();
- direction = direction.toLowerCase();
- switch(direction){
- case "l":
- case "left":
- this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2));
- break;
- case "r":
- case "right":
- this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2));
- break;
- case "t":
- case "top":
- case "up":
- this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2));
- break;
- case "b":
- case "bottom":
- case "down":
- this.moveTo(xy[0], xy[1]+distance, this.preanim(arguments, 2));
- break;
- }
- return this;
- },
-
- clip : function(){
- if(!this.isClipped){
- this.isClipped = true;
- this.originalClip = {
- "o": this.getStyle("overflow"),
- "x": this.getStyle("overflow-x"),
- "y": this.getStyle("overflow-y")
- };
- this.setStyle("overflow", "hidden");
- this.setStyle("overflow-x", "hidden");
- this.setStyle("overflow-y", "hidden");
- }
- return this;
- },
-
- unclip : function(){
- if(this.isClipped){
- this.isClipped = false;
- var o = this.originalClip;
- if(o.o){this.setStyle("overflow", o.o);}
- if(o.x){this.setStyle("overflow-x", o.x);}
- if(o.y){this.setStyle("overflow-y", o.y);}
- }
- return this;
- },
-
- getAnchorXY : function(anchor, local, s){
-
- var w, h, vp = false;
- if(!s){
- var d = this.dom;
- if(d == document.body || d == document){
- vp = true;
- w = D.getViewWidth(); h = D.getViewHeight();
- }else{
- w = this.getWidth(); h = this.getHeight();
- }
- }else{
- w = s.width; h = s.height;
- }
- var x = 0, y = 0, r = Math.round;
- switch((anchor || "tl").toLowerCase()){
- case "c":
- x = r(w*.5);
- y = r(h*.5);
- break;
- case "t":
- x = r(w*.5);
- y = 0;
- break;
- case "l":
- x = 0;
- y = r(h*.5);
- break;
- case "r":
- x = w;
- y = r(h*.5);
- break;
- case "b":
- x = r(w*.5);
- y = h;
- break;
- case "tl":
- x = 0;
- y = 0;
- break;
- case "bl":
- x = 0;
- y = h;
- break;
- case "br":
- x = w;
- y = h;
- break;
- case "tr":
- x = w;
- y = 0;
- break;
- }
- if(local === true){
- return [x, y];
- }
- if(vp){
- var sc = this.getScroll();
- return [x + sc.left, y + sc.top];
- }
- var o = this.getXY();
- return [x+o[0], y+o[1]];
- },
-
- getAlignToXY : function(el, p, o){
- el = Ext.get(el);
- if(!el || !el.dom){
- throw "Element.alignToXY with an element that doesn't exist";
- }
- var d = this.dom;
- var c = false; var p1 = "", p2 = "";
- o = o || [0,0];
- if(!p){
- p = "tl-bl";
- }else if(p == "?"){
- p = "tl-bl?";
- }else if(p.indexOf("-") == -1){
- p = "tl-" + p;
- }
- p = p.toLowerCase();
- var m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
- if(!m){
- throw "Element.alignTo with an invalid alignment " + p;
- }
- p1 = m[1]; p2 = m[2]; c = !!m[3];
- var a1 = this.getAnchorXY(p1, true);
- var a2 = el.getAnchorXY(p2, false);
- var x = a2[0] - a1[0] + o[0];
- var y = a2[1] - a1[1] + o[1];
- if(c){
- var w = this.getWidth(), h = this.getHeight(), r = el.getRegion();
- var dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;
- var p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);
- var p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);
- var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));
- var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));
- var doc = document;
- var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5;
- var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5;
- if((x+w) > dw + scrollX){
- x = swapX ? r.left-w : dw+scrollX-w;
- }
- if(x < scrollX){
- x = swapX ? r.right : scrollX;
- }
- if((y+h) > dh + scrollY){
- y = swapY ? r.top-h : dh+scrollY-h;
- }
- if (y < scrollY){
- y = swapY ? r.bottom : scrollY;
- }
- }
- return [x,y];
- },
- getConstrainToXY : function(){
- var os = {top:0, left:0, bottom:0, right: 0};
- return function(el, local, offsets, proposedXY){
- el = Ext.get(el);
- offsets = offsets ? Ext.applyIf(offsets, os) : os;
- var vw, vh, vx = 0, vy = 0;
- if(el.dom == document.body || el.dom == document){
- vw = Ext.lib.Dom.getViewWidth();
- vh = Ext.lib.Dom.getViewHeight();
- }else{
- vw = el.dom.clientWidth;
- vh = el.dom.clientHeight;
- if(!local){
- var vxy = el.getXY();
- vx = vxy[0];
- vy = vxy[1];
- }
- }
- var s = el.getScroll();
- vx += offsets.left + s.left;
- vy += offsets.top + s.top;
- vw -= offsets.right;
- vh -= offsets.bottom;
- var vr = vx+vw;
- var vb = vy+vh;
- var xy = proposedXY || (!local ? this.getXY() : [this.getLeft(true), this.getTop(true)]);
- var x = xy[0], y = xy[1];
- var w = this.dom.offsetWidth, h = this.dom.offsetHeight;
- var moved = false;
- if((x + w) > vr){
- x = vr - w;
- moved = true;
- }
- if((y + h) > vb){
- y = vb - h;
- moved = true;
- }
- if(x < vx){
- x = vx;
- moved = true;
- }
- if(y < vy){
- y = vy;
- moved = true;
- }
- return moved ? [x, y] : false;
- };
- }(),
- adjustForConstraints : function(xy, parent, offsets){
- return this.getConstrainToXY(parent || document, false, offsets, xy) || xy;
- },
-
- alignTo : function(element, position, offsets, animate){
- var xy = this.getAlignToXY(element, position, offsets);
- this.setXY(xy, this.preanim(arguments, 3));
- return this;
- },
-
- anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){
- var action = function(){
- this.alignTo(el, alignment, offsets, animate);
- Ext.callback(callback, this);
- };
- Ext.EventManager.onWindowResize(action, this);
- var tm = typeof monitorScroll;
- if(tm != 'undefined'){
- Ext.EventManager.on(window, 'scroll', action, this,
- {buffer: tm == 'number' ? monitorScroll : 50});
- }
- action.call(this); return this;
- },
-
- clearOpacity : function(){
- if (window.ActiveXObject) {
- if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){
- this.dom.style.filter = "";
- }
- } else {
- this.dom.style.opacity = "";
- this.dom.style["-moz-opacity"] = "";
- this.dom.style["-khtml-opacity"] = "";
- }
- return this;
- },
-
- hide : function(animate){
- this.setVisible(false, this.preanim(arguments, 0));
- return this;
- },
-
- show : function(animate){
- this.setVisible(true, this.preanim(arguments, 0));
- return this;
- },
-
- addUnits : function(size){
- return Ext.Element.addUnits(size, this.defaultUnit);
- },
-
- update : function(html, loadScripts, callback){
- if(typeof html == "undefined"){
- html = "";
- }
- if(loadScripts !== true){
- this.dom.innerHTML = html;
- if(typeof callback == "function"){
- callback();
- }
- return this;
- }
- var id = Ext.id();
- var dom = this.dom;
- html += '<span id="' + id + '"></span>';
- E.onAvailable(id, function(){
- var hd = document.getElementsByTagName("head")[0];
- var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
- var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
- var typeRe = /\stype=([\'\"])(.*?)\1/i;
- var match;
- while(match = re.exec(html)){
- var attrs = match[1];
- var srcMatch = attrs ? attrs.match(srcRe) : false;
- if(srcMatch && srcMatch[2]){
- var s = document.createElement("script");
- s.src = srcMatch[2];
- var typeMatch = attrs.match(typeRe);
- if(typeMatch && typeMatch[2]){
- s.type = typeMatch[2];
- }
- hd.appendChild(s);
- }else if(match[2] && match[2].length > 0){
- if(window.execScript) {
- window.execScript(match[2]);
- } else {
- window.eval(match[2]);
- }
- }
- }
- var el = document.getElementById(id);
- if(el){Ext.removeNode(el);}
- if(typeof callback == "function"){
- callback();
- }
- });
- dom.innerHTML = html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
- return this;
- },
-
- load : function(){
- var um = this.getUpdater();
- um.update.apply(um, arguments);
- return this;
- },
-
- getUpdater : function(){
- if(!this.updateManager){
- this.updateManager = new Ext.Updater(this);
- }
- return this.updateManager;
- },
-
- unselectable : function(){
- this.dom.unselectable = "on";
- this.swallowEvent("selectstart", true);
- this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
- this.addClass("x-unselectable");
- return this;
- },
-
- getCenterXY : function(){
- return this.getAlignToXY(document, 'c-c');
- },
-
- center : function(centerIn){
- this.alignTo(centerIn || document, 'c-c');
- return this;
- },
-
- isBorderBox : function(){
- return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox;
- },
-
- getBox : function(contentBox, local){
- var xy;
- if(!local){
- xy = this.getXY();
- }else{
- var left = parseInt(this.getStyle("left"), 10) || 0;
- var top = parseInt(this.getStyle("top"), 10) || 0;
- xy = [left, top];
- }
- var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
- if(!contentBox){
- bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
- }else{
- var l = this.getBorderWidth("l")+this.getPadding("l");
- var r = this.getBorderWidth("r")+this.getPadding("r");
- var t = this.getBorderWidth("t")+this.getPadding("t");
- var b = this.getBorderWidth("b")+this.getPadding("b");
- bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
- }
- bx.right = bx.x + bx.width;
- bx.bottom = bx.y + bx.height;
- return bx;
- },
-
- getFrameWidth : function(sides, onlyContentBox){
- return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
- },
-
- setBox : function(box, adjust, animate){
- var w = box.width, h = box.height;
- if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){
- w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
- h -= (this.getBorderWidth("tb") + this.getPadding("tb"));
- }
- this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));
- return this;
- },
-
- repaint : function(){
- var dom = this.dom;
- this.addClass("x-repaint");
- setTimeout(function(){
- Ext.get(dom).removeClass("x-repaint");
- }, 1);
- return this;
- },
-
- getMargins : function(side){
- if(!side){
- return {
- top: parseInt(this.getStyle("margin-top"), 10) || 0,
- left: parseInt(this.getStyle("margin-left"), 10) || 0,
- bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,
- right: parseInt(this.getStyle("margin-right"), 10) || 0
- };
- }else{
- return this.addStyles(side, El.margins);
- }
- },
- addStyles : function(sides, styles){
- var val = 0, v, w;
- for(var i = 0, len = sides.length; i < len; i++){
- v = this.getStyle(styles[sides.charAt(i)]);
- if(v){
- w = parseInt(v, 10);
- if(w){ val += (w >= 0 ? w : -1 * w); }
- }
- }
- return val;
- },
-
- createProxy : function(config, renderTo, matchBox){
- config = typeof config == "object" ?
- config : {tag : "div", cls: config};
- var proxy;
- if(renderTo){
- proxy = Ext.DomHelper.append(renderTo, config, true);
- }else {
- proxy = Ext.DomHelper.insertBefore(this.dom, config, true);
- }
- if(matchBox){
- proxy.setBox(this.getBox());
- }
- return proxy;
- },
-
- mask : function(msg, msgCls){
- if(this.getStyle("position") == "static"){
- this.setStyle("position", "relative");
- }
- if(this._maskMsg){
- this._maskMsg.remove();
- }
- if(this._mask){
- this._mask.remove();
- }
- this._mask = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask"}, true);
- this.addClass("x-masked");
- this._mask.setDisplayed(true);
- if(typeof msg == 'string'){
- this._maskMsg = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask-msg", cn:{tag:'div'}}, true);
- var mm = this._maskMsg;
- mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";
- mm.dom.firstChild.innerHTML = msg;
- mm.setDisplayed(true);
- mm.center(this);
- }
- if(Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle('height') == 'auto'){ this._mask.setSize(this.dom.clientWidth, this.getHeight());
- }
- return this._mask;
- },
-
- unmask : function(){
- if(this._mask){
- if(this._maskMsg){
- this._maskMsg.remove();
- delete this._maskMsg;
- }
- this._mask.remove();
- delete this._mask;
- }
- this.removeClass("x-masked");
- },
-
- isMasked : function(){
- return this._mask && this._mask.isVisible();
- },
-
- createShim : function(){
- var el = document.createElement('iframe');
- el.frameBorder = 'no';
- el.className = 'ext-shim';
- if(Ext.isIE && Ext.isSecure){
- el.src = Ext.SSL_SECURE_URL;
- }
- var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
- shim.autoBoxAdjust = false;
- return shim;
- },
-
- remove : function(){
- Ext.removeNode(this.dom);
- delete El.cache[this.dom.id];
- },
-
- hover : function(overFn, outFn, scope){
- var preOverFn = function(e){
- if(!e.within(this, true)){
- overFn.apply(scope || this, arguments);
- }
- };
- var preOutFn = function(e){
- if(!e.within(this, true)){
- outFn.apply(scope || this, arguments);
- }
- };
- this.on("mouseover", preOverFn, this.dom);
- this.on("mouseout", preOutFn, this.dom);
- return this;
- },
-
- addClassOnOver : function(className, preventFlicker){
- this.hover(
- function(){
- Ext.fly(this, '_internal').addClass(className);
- },
- function(){
- Ext.fly(this, '_internal').removeClass(className);
- }
- );
- return this;
- },
-
- addClassOnFocus : function(className){
- this.on("focus", function(){
- Ext.fly(this, '_internal').addClass(className);
- }, this.dom);
- this.on("blur", function(){
- Ext.fly(this, '_internal').removeClass(className);
- }, this.dom);
- return this;
- },
-
- addClassOnClick : function(className){
- var dom = this.dom;
- this.on("mousedown", function(){
- Ext.fly(dom, '_internal').addClass(className);
- var d = Ext.getDoc();
- var fn = function(){
- Ext.fly(dom, '_internal').removeClass(className);
- d.removeListener("mouseup", fn);
- };
- d.on("mouseup", fn);
- });
- return this;
- },
-
- swallowEvent : function(eventName, preventDefault){
- var fn = function(e){
- e.stopPropagation();
- if(preventDefault){
- e.preventDefault();
- }
- };
- if(Ext.isArray(eventName)){
- for(var i = 0, len = eventName.length; i < len; i++){
- this.on(eventName[i], fn);
- }
- return this;
- }
- this.on(eventName, fn);
- return this;
- },
-
- parent : function(selector, returnDom){
- return this.matchNode('parentNode', 'parentNode', selector, returnDom);
- },
-
- next : function(selector, returnDom){
- return this.matchNode('nextSibling', 'nextSibling', selector, returnDom);
- },
-
- prev : function(selector, returnDom){
- return this.matchNode('previousSibling', 'previousSibling', selector, returnDom);
- },
-
- first : function(selector, returnDom){
- return this.matchNode('nextSibling', 'firstChild', selector, returnDom);
- },
-
- last : function(selector, returnDom){
- return this.matchNode('previousSibling', 'lastChild', selector, returnDom);
- },
- matchNode : function(dir, start, selector, returnDom){
- var n = this.dom[start];
- while(n){
- if(n.nodeType == 1 && (!selector || Ext.DomQuery.is(n, selector))){
- return !returnDom ? Ext.get(n) : n;
- }
- n = n[dir];
- }
- return null;
- },
-
- appendChild: function(el){
- el = Ext.get(el);
- el.appendTo(this);
- return this;
- },
-
- createChild: function(config, insertBefore, returnDom){
- config = config || {tag:'div'};
- if(insertBefore){
- return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true);
- }
- return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config, returnDom !== true);
- },
-
- appendTo: function(el){
- el = Ext.getDom(el);
- el.appendChild(this.dom);
- return this;
- },
-
- insertBefore: function(el){
- el = Ext.getDom(el);
- el.parentNode.insertBefore(this.dom, el);
- return this;
- },
-
- insertAfter: function(el){
- el = Ext.getDom(el);
- el.parentNode.insertBefore(this.dom, el.nextSibling);
- return this;
- },
-
- insertFirst: function(el, returnDom){
- el = el || {};
- if(typeof el == 'object' && !el.nodeType && !el.dom){ return this.createChild(el, this.dom.firstChild, returnDom);
- }else{
- el = Ext.getDom(el);
- this.dom.insertBefore(el, this.dom.firstChild);
- return !returnDom ? Ext.get(el) : el;
- }
- },
-
- insertSibling: function(el, where, returnDom){
- var rt;
- if(Ext.isArray(el)){
- for(var i = 0, len = el.length; i < len; i++){
- rt = this.insertSibling(el[i], where, returnDom);
- }
- return rt;
- }
- where = where ? where.toLowerCase() : 'before';
- el = el || {};
- var refNode = where == 'before' ? this.dom : this.dom.nextSibling;
- if(typeof el == 'object' && !el.nodeType && !el.dom){ if(where == 'after' && !this.dom.nextSibling){
- rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom);
- }else{
- rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom);
- }
- }else{
- rt = this.dom.parentNode.insertBefore(Ext.getDom(el), refNode);
- if(!returnDom){
- rt = Ext.get(rt);
- }
- }
- return rt;
- },
-
- wrap: function(config, returnDom){
- if(!config){
- config = {tag: "div"};
- }
- var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom);
- newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom);
- return newEl;
- },
-
- replace: function(el){
- el = Ext.get(el);
- this.insertBefore(el);
- el.remove();
- return this;
- },
-
- replaceWith: function(el){
- if(typeof el == 'object' && !el.nodeType && !el.dom){ el = this.insertSibling(el, 'before');
- }else{
- el = Ext.getDom(el);
- this.dom.parentNode.insertBefore(el, this.dom);
- }
- El.uncache(this.id);
- this.dom.parentNode.removeChild(this.dom);
- this.dom = el;
- this.id = Ext.id(el);
- El.cache[this.id] = this;
- return this;
- },
-
- insertHtml : function(where, html, returnEl){
- var el = Ext.DomHelper.insertHtml(where, this.dom, html);
- return returnEl ? Ext.get(el) : el;
- },
-
- set : function(o, useSet){
- var el = this.dom;
- useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet;
- for(var attr in o){
- if(attr == "style" || typeof o[attr] == "function") continue;
- if(attr=="cls"){
- el.className = o["cls"];
- }else if(o.hasOwnProperty(attr)){
- if(useSet) el.setAttribute(attr, o[attr]);
- else el[attr] = o[attr];
- }
- }
- if(o.style){
- Ext.DomHelper.applyStyles(el, o.style);
- }
- return this;
- },
-
- addKeyListener : function(key, fn, scope){
- var config;
- if(typeof key != "object" || Ext.isArray(key)){
- config = {
- key: key,
- fn: fn,
- scope: scope
- };
- }else{
- config = {
- key : key.key,
- shift : key.shift,
- ctrl : key.ctrl,
- alt : key.alt,
- fn: fn,
- scope: scope
- };
- }
- return new Ext.KeyMap(this, config);
- },
-
- addKeyMap : function(config){
- return new Ext.KeyMap(this, config);
- },
-
- isScrollable : function(){
- var dom = this.dom;
- return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth;
- },
-
- scrollTo : function(side, value, animate){
- var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
- if(!animate || !A){
- this.dom[prop] = value;
- }else{
- var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];
- this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');
- }
- return this;
- },
-
- scroll : function(direction, distance, animate){
- if(!this.isScrollable()){
- return;
- }
- var el = this.dom;
- var l = el.scrollLeft, t = el.scrollTop;
- var w = el.scrollWidth, h = el.scrollHeight;
- var cw = el.clientWidth, ch = el.clientHeight;
- direction = direction.toLowerCase();
- var scrolled = false;
- var a = this.preanim(arguments, 2);
- switch(direction){
- case "l":
- case "left":
- if(w - l > cw){
- var v = Math.min(l + distance, w-cw);
- this.scrollTo("left", v, a);
- scrolled = true;
- }
- break;
- case "r":
- case "right":
- if(l > 0){
- var v = Math.max(l - distance, 0);
- this.scrollTo("left", v, a);
- scrolled = true;
- }
- break;
- case "t":
- case "top":
- case "up":
- if(t > 0){
- var v = Math.max(t - distance, 0);
- this.scrollTo("top", v, a);
- scrolled = true;
- }
- break;
- case "b":
- case "bottom":
- case "down":
- if(h - t > ch){
- var v = Math.min(t + distance, h-ch);
- this.scrollTo("top", v, a);
- scrolled = true;
- }
- break;
- }
- return scrolled;
- },
-
- translatePoints : function(x, y){
- if(typeof x == 'object' || Ext.isArray(x)){
- y = x[1]; x = x[0];
- }
- var p = this.getStyle('position');
- var o = this.getXY();
- var l = parseInt(this.getStyle('left'), 10);
- var t = parseInt(this.getStyle('top'), 10);
- if(isNaN(l)){
- l = (p == "relative") ? 0 : this.dom.offsetLeft;
- }
- if(isNaN(t)){
- t = (p == "relative") ? 0 : this.dom.offsetTop;
- }
- return {left: (x - o[0] + l), top: (y - o[1] + t)};
- },
-
- getScroll : function(){
- var d = this.dom, doc = document;
- if(d == doc || d == doc.body){
- var l, t;
- if(Ext.isIE && Ext.isStrict){
- l = doc.documentElement.scrollLeft || (doc.body.scrollLeft || 0);
- t = doc.documentElement.scrollTop || (doc.body.scrollTop || 0);
- }else{
- l = window.pageXOffset || (doc.body.scrollLeft || 0);
- t = window.pageYOffset || (doc.body.scrollTop || 0);
- }
- return {left: l, top: t};
- }else{
- return {left: d.scrollLeft, top: d.scrollTop};
- }
- },
-
- getColor : function(attr, defaultValue, prefix){
- var v = this.getStyle(attr);
- if(!v || v == "transparent" || v == "inherit") {
- return defaultValue;
- }
- var color = typeof prefix == "undefined" ? "#" : prefix;
- if(v.substr(0, 4) == "rgb("){
- var rvs = v.slice(4, v.length -1).split(",");
- for(var i = 0; i < 3; i++){
- var h = parseInt(rvs[i]);
- var s = h.toString(16);
- if(h < 16){
- s = "0" + s;
- }
- color += s;
- }
- } else {
- if(v.substr(0, 1) == "#"){
- if(v.length == 4) {
- for(var i = 1; i < 4; i++){
- var c = v.charAt(i);
- color += c + c;
- }
- }else if(v.length == 7){
- color += v.substr(1);
- }
- }
- }
- return(color.length > 5 ? color.toLowerCase() : defaultValue);
- },
-
- boxWrap : function(cls){
- cls = cls || 'x-box';
- var el = Ext.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', cls)));
- el.child('.'+cls+'-mc').dom.appendChild(this.dom);
- return el;
- },
-
- getAttributeNS : Ext.isIE ? function(ns, name){
- var d = this.dom;
- var type = typeof d[ns+":"+name];
- if(type != 'undefined' && type != 'unknown'){
- return d[ns+":"+name];
- }
- return d[name];
- } : function(ns, name){
- var d = this.dom;
- return d.getAttributeNS(ns, name) || d.getAttribute(ns+":"+name) || d.getAttribute(name) || d[name];
- },
- getTextWidth : function(text, min, max){
- return (Ext.util.TextMetrics.measure(this.dom, Ext.value(text, this.dom.innerHTML, true)).width).constrain(min || 0, max || 1000000);
- }
- };
- var ep = El.prototype;
- ep.on = ep.addListener;
- ep.mon = ep.addListener;
- ep.getUpdateManager = ep.getUpdater;
- ep.un = ep.removeListener;
- ep.autoBoxAdjust = true;
- El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
- El.addUnits = function(v, defaultUnit){
- if(v === "" || v == "auto"){
- return v;
- }
- if(v === undefined){
- return '';
- }
- if(typeof v == "number" || !El.unitPattern.test(v)){
- return v + (defaultUnit || 'px');
- }
- return v;
- };
- El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
- El.VISIBILITY = 1;
- El.DISPLAY = 2;
- El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"};
- El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"};
- El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"};
- El.cache = {};
- var docEl;
- El.get = function(el){
- var ex, elm, id;
- if(!el){ return null; }
- if(typeof el == "string"){ if(!(elm = document.getElementById(el))){
- return null;
- }
- if(ex = El.cache[el]){
- ex.dom = elm;
- }else{
- ex = El.cache[el] = new El(elm);
- }
- return ex;
- }else if(el.tagName){ if(!(id = el.id)){
- id = Ext.id(el);
- }
- if(ex = El.cache[id]){
- ex.dom = el;
- }else{
- ex = El.cache[id] = new El(el);
- }
- return ex;
- }else if(el instanceof El){
- if(el != docEl){
- el.dom = document.getElementById(el.id) || el.dom; El.cache[el.id] = el; }
- return el;
- }else if(el.isComposite){
- return el;
- }else if(Ext.isArray(el)){
- return El.select(el);
- }else if(el == document){
- if(!docEl){
- var f = function(){};
- f.prototype = El.prototype;
- docEl = new f();
- docEl.dom = document;
- }
- return docEl;
- }
- return null;
- };
- El.uncache = function(el){
- for(var i = 0, a = arguments, len = a.length; i < len; i++) {
- if(a[i]){
- delete El.cache[a[i].id || a[i]];
- }
- }
- };
- El.garbageCollect = function(){
- if(!Ext.enableGarbageCollector){
- clearInterval(El.collectorThread);
- return;
- }
- for(var eid in El.cache){
- var el = El.cache[eid], d = el.dom;
- if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){
- delete El.cache[eid];
- if(d && Ext.enableListenerCollection){
- E.purgeElement(d);
- }
- }
- }
- }
- El.collectorThreadId = setInterval(El.garbageCollect, 30000);
- var flyFn = function(){};
- flyFn.prototype = El.prototype;
- var _cls = new flyFn();
- El.Flyweight = function(dom){
- this.dom = dom;
- };
- El.Flyweight.prototype = _cls;
- El.Flyweight.prototype.isFlyweight = true;
- El._flyweights = {};
- El.fly = function(el, named){
- named = named || '_global';
- el = Ext.getDom(el);
- if(!el){
- return null;
- }
- if(!El._flyweights[named]){
- El._flyweights[named] = new El.Flyweight();
- }
- El._flyweights[named].dom = el;
- return El._flyweights[named];
- };
- Ext.get = El.get;
- Ext.fly = El.fly;
- var noBoxAdjust = Ext.isStrict ? {
- select:1
- } : {
- input:1, select:1, textarea:1
- };
- if(Ext.isIE || Ext.isGecko){
- noBoxAdjust['button'] = 1;
- }
- Ext.EventManager.on(window, 'unload', function(){
- delete El.cache;
- delete El._flyweights;
- });
- })();
- Ext.enableFx = true;
- Ext.Fx = {
-
- slideIn : function(anchor, o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- anchor = anchor || "t";
- this.fixDisplay();
- var r = this.getFxRestore();
- var b = this.getBox();
- this.setSize(b);
- var wrap = this.fxWrap(r.pos, o, "hidden");
- var st = this.dom.style;
- st.visibility = "visible";
- st.position = "absolute";
- var after = function(){
- el.fxUnwrap(wrap, r.pos, o);
- st.width = r.width;
- st.height = r.height;
- el.afterFx(o);
- };
- var a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};
- switch(anchor.toLowerCase()){
- case "t":
- wrap.setSize(b.width, 0);
- st.left = st.bottom = "0";
- a = {height: bh};
- break;
- case "l":
- wrap.setSize(0, b.height);
- st.right = st.top = "0";
- a = {width: bw};
- break;
- case "r":
- wrap.setSize(0, b.height);
- wrap.setX(b.right);
- st.left = st.top = "0";
- a = {width: bw, points: pt};
- break;
- case "b":
- wrap.setSize(b.width, 0);
- wrap.setY(b.bottom);
- st.left = st.top = "0";
- a = {height: bh, points: pt};
- break;
- case "tl":
- wrap.setSize(0, 0);
- st.right = st.bottom = "0";
- a = {width: bw, height: bh};
- break;
- case "bl":
- wrap.setSize(0, 0);
- wrap.setY(b.y+b.height);
- st.right = st.top = "0";
- a = {width: bw, height: bh, points: pt};
- break;
- case "br":
- wrap.setSize(0, 0);
- wrap.setXY([b.right, b.bottom]);
- st.left = st.top = "0";
- a = {width: bw, height: bh, points: pt};
- break;
- case "tr":
- wrap.setSize(0, 0);
- wrap.setX(b.x+b.width);
- st.left = st.bottom = "0";
- a = {width: bw, height: bh, points: pt};
- break;
- }
- this.dom.style.visibility = "visible";
- wrap.show();
- arguments.callee.anim = wrap.fxanim(a,
- o,
- 'motion',
- .5,
- 'easeOut', after);
- });
- return this;
- },
-
-
- slideOut : function(anchor, o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- anchor = anchor || "t";
- var r = this.getFxRestore();
-
- var b = this.getBox();
- this.setSize(b);
- var wrap = this.fxWrap(r.pos, o, "visible");
- var st = this.dom.style;
- st.visibility = "visible";
- st.position = "absolute";
- wrap.setSize(b);
- var after = function(){
- if(o.useDisplay){
- el.setDisplayed(false);
- }else{
- el.hide();
- }
- el.fxUnwrap(wrap, r.pos, o);
- st.width = r.width;
- st.height = r.height;
- el.afterFx(o);
- };
- var a, zero = {to: 0};
- switch(anchor.toLowerCase()){
- case "t":
- st.left = st.bottom = "0";
- a = {height: zero};
- break;
- case "l":
- st.right = st.top = "0";
- a = {width: zero};
- break;
- case "r":
- st.left = st.top = "0";
- a = {width: zero, points: {to:[b.right, b.y]}};
- break;
- case "b":
- st.left = st.top = "0";
- a = {height: zero, points: {to:[b.x, b.bottom]}};
- break;
- case "tl":
- st.right = st.bottom = "0";
- a = {width: zero, height: zero};
- break;
- case "bl":
- st.right = st.top = "0";
- a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}};
- break;
- case "br":
- st.left = st.top = "0";
- a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}};
- break;
- case "tr":
- st.left = st.bottom = "0";
- a = {width: zero, height: zero, points: {to:[b.right, b.y]}};
- break;
- }
- arguments.callee.anim = wrap.fxanim(a,
- o,
- 'motion',
- .5,
- "easeOut", after);
- });
- return this;
- },
-
- puff : function(o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- this.clearOpacity();
- this.show();
- var r = this.getFxRestore();
- var st = this.dom.style;
- var after = function(){
- if(o.useDisplay){
- el.setDisplayed(false);
- }else{
- el.hide();
- }
- el.clearOpacity();
- el.setPositioning(r.pos);
- st.width = r.width;
- st.height = r.height;
- st.fontSize = '';
- el.afterFx(o);
- };
- var width = this.getWidth();
- var height = this.getHeight();
- arguments.callee.anim = this.fxanim({
- width : {to: this.adjustWidth(width * 2)},
- height : {to: this.adjustHeight(height * 2)},
- points : {by: [-(width * .5), -(height * .5)]},
- opacity : {to: 0},
- fontSize: {to:200, unit: "%"}
- },
- o,
- 'motion',
- .5,
- "easeOut", after);
- });
- return this;
- },
-
- switchOff : function(o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- this.clearOpacity();
- this.clip();
- var r = this.getFxRestore();
- var st = this.dom.style;
- var after = function(){
- if(o.useDisplay){
- el.setDisplayed(false);
- }else{
- el.hide();
- }
- el.clearOpacity();
- el.setPositioning(r.pos);
- st.width = r.width;
- st.height = r.height;
- el.afterFx(o);
- };
- this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){
- this.clearOpacity();
- (function(){
- this.fxanim({
- height:{to:1},
- points:{by:[0, this.getHeight() * .5]}
- }, o, 'motion', 0.3, 'easeIn', after);
- }).defer(100, this);
- });
- });
- return this;
- },
-
- highlight : function(color, o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- color = color || "ffff9c";
- var attr = o.attr || "backgroundColor";
- this.clearOpacity();
- this.show();
- var origColor = this.getColor(attr);
- var restoreColor = this.dom.style[attr];
- var endColor = (o.endColor || origColor) || "ffffff";
- var after = function(){
- el.dom.style[attr] = restoreColor;
- el.afterFx(o);
- };
- var a = {};
- a[attr] = {from: color, to: endColor};
- arguments.callee.anim = this.fxanim(a,
- o,
- 'color',
- 1,
- 'easeIn', after);
- });
- return this;
- },
-
- frame : function(color, count, o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- color = color || "#C3DAF9";
- if(color.length == 6){
- color = "#" + color;
- }
- count = count || 1;
- var duration = o.duration || 1;
- this.show();
- var b = this.getBox();
- var animFn = function(){
- var proxy = Ext.getBody().createChild({
- style:{
- visbility:"hidden",
- position:"absolute",
- "z-index":"35000", border:"0px solid " + color
- }
- });
- var scale = Ext.isBorderBox ? 2 : 1;
- proxy.animate({
- top:{from:b.y, to:b.y - 20},
- left:{from:b.x, to:b.x - 20},
- borderWidth:{from:0, to:10},
- opacity:{from:1, to:0},
- height:{from:b.height, to:(b.height + (20*scale))},
- width:{from:b.width, to:(b.width + (20*scale))}
- }, duration, function(){
- proxy.remove();
- if(--count > 0){
- animFn();
- }else{
- el.afterFx(o);
- }
- });
- };
- animFn.call(this);
- });
- return this;
- },
-
- pause : function(seconds){
- var el = this.getFxEl();
- var o = {};
- el.queueFx(o, function(){
- setTimeout(function(){
- el.afterFx(o);
- }, seconds * 1000);
- });
- return this;
- },
-
- fadeIn : function(o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- this.setOpacity(0);
- this.fixDisplay();
- this.dom.style.visibility = 'visible';
- var to = o.endOpacity || 1;
- arguments.callee.anim = this.fxanim({opacity:{to:to}},
- o, null, .5, "easeOut", function(){
- if(to == 1){
- this.clearOpacity();
- }
- el.afterFx(o);
- });
- });
- return this;
- },
-
- fadeOut : function(o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
- o, null, .5, "easeOut", function(){
- if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
- this.dom.style.display = "none";
- }else{
- this.dom.style.visibility = "hidden";
- }
- this.clearOpacity();
- el.afterFx(o);
- });
- });
- return this;
- },
-
- scale : function(w, h, o){
- this.shift(Ext.apply({}, o, {
- width: w,
- height: h
- }));
- return this;
- },
-
- shift : function(o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- var a = {}, w = o.width, h = o.height, x = o.x, y = o.y, op = o.opacity;
- if(w !== undefined){
- a.width = {to: this.adjustWidth(w)};
- }
- if(h !== undefined){
- a.height = {to: this.adjustHeight(h)};
- }
- if(x !== undefined || y !== undefined){
- a.points = {to: [
- x !== undefined ? x : this.getX(),
- y !== undefined ? y : this.getY()
- ]};
- }
- if(op !== undefined){
- a.opacity = {to: op};
- }
- if(o.xy !== undefined){
- a.points = {to: o.xy};
- }
- arguments.callee.anim = this.fxanim(a,
- o, 'motion', .35, "easeOut", function(){
- el.afterFx(o);
- });
- });
- return this;
- },
-
- ghost : function(anchor, o){
- var el = this.getFxEl();
- o = o || {};
- el.queueFx(o, function(){
- anchor = anchor || "b";
- var r = this.getFxRestore();
- var w = this.getWidth(),
- h = this.getHeight();
- var st = this.dom.style;
- var after = function(){
- if(o.useDisplay){
- el.setDisplayed(false);
- }else{
- el.hide();
- }
- el.clearOpacity();
- el.setPositioning(r.pos);
- st.width = r.width;
- st.height = r.height;
- el.afterFx(o);
- };
- var a = {opacity: {to: 0}, points: {}}, pt = a.points;
- switch(anchor.toLowerCase()){
- case "t":
- pt.by = [0, -h];
- break;
- case "l":
- pt.by = [-w, 0];
- break;
- case "r":
- pt.by = [w, 0];
- break;
- case "b":
- pt.by = [0, h];
- break;
- case "tl":
- pt.by = [-w, -h];
- break;
- case "bl":
- pt.by = [-w, h];
- break;
- case "br":
- pt.by = [w, h];
- break;
- case "tr":
- pt.by = [w, -h];
- break;
- }
- arguments.callee.anim = this.fxanim(a,
- o,
- 'motion',
- .5,
- "easeOut", after);
- });
- return this;
- },
-
- syncFx : function(){
- this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
- block : false,
- concurrent : true,
- stopFx : false
- });
- return this;
- },
-
- sequenceFx : function(){
- this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
- block : false,
- concurrent : false,
- stopFx : false
- });
- return this;
- },
-
- nextFx : function(){
- var ef = this.fxQueue[0];
- if(ef){
- ef.call(this);
- }
- },
-
- hasActiveFx : function(){
- return this.fxQueue && this.fxQueue[0];
- },
-
- stopFx : function(){
- if(this.hasActiveFx()){
- var cur = this.fxQueue[0];
- if(cur && cur.anim && cur.anim.isAnimated()){
- this.fxQueue = [cur]; cur.anim.stop(true);
- }
- }
- return this;
- },
-
- beforeFx : function(o){
- if(this.hasActiveFx() && !o.concurrent){
- if(o.stopFx){
- this.stopFx();
- return true;
- }
- return false;
- }
- return true;
- },
-
- hasFxBlock : function(){
- var q = this.fxQueue;
- return q && q[0] && q[0].block;
- },
-
- queueFx : function(o, fn){
- if(!this.fxQueue){
- this.fxQueue = [];
- }
- if(!this.hasFxBlock()){
- Ext.applyIf(o, this.fxDefaults);
- if(!o.concurrent){
- var run = this.beforeFx(o);
- fn.block = o.block;
- this.fxQueue.push(fn);
- if(run){
- this.nextFx();
- }
- }else{
- fn.call(this);
- }
- }
- return this;
- },
-
- fxWrap : function(pos, o, vis){
- var wrap;
- if(!o.wrap || !(wrap = Ext.get(o.wrap))){
- var wrapXY;
- if(o.fixPosition){
- wrapXY = this.getXY();
- }
- var div = document.createElement("div");
- div.style.visibility = vis;
- wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom));
- wrap.setPositioning(pos);
- if(wrap.getStyle("position") == "static"){
- wrap.position("relative");
- }
- this.clearPositioning('auto');
- wrap.clip();
- wrap.dom.appendChild(this.dom);
- if(wrapXY){
- wrap.setXY(wrapXY);
- }
- }
- return wrap;
- },
-
- fxUnwrap : function(wrap, pos, o){
- this.clearPositioning();
- this.setPositioning(pos);
- if(!o.wrap){
- wrap.dom.parentNode.insertBefore(this.dom, wrap.dom);
- wrap.remove();
- }
- },
-
- getFxRestore : function(){
- var st = this.dom.style;
- return {pos: this.getPositioning(), width: st.width, height : st.height};
- },
-
- afterFx : function(o){
- if(o.afterStyle){
- this.applyStyles(o.afterStyle);
- }
- if(o.afterCls){
- this.addClass(o.afterCls);
- }
- if(o.remove === true){
- this.remove();
- }
- Ext.callback(o.callback, o.scope, [this]);
- if(!o.concurrent){
- this.fxQueue.shift();
- this.nextFx();
- }
- },
-
- getFxEl : function(){ return Ext.get(this.dom);
- },
-
- fxanim : function(args, opt, animType, defaultDur, defaultEase, cb){
- animType = animType || 'run';
- opt = opt || {};
- var anim = Ext.lib.Anim[animType](
- this.dom, args,
- (opt.duration || defaultDur) || .35,
- (opt.easing || defaultEase) || 'easeOut',
- function(){
- Ext.callback(cb, this);
- },
- this
- );
- opt.anim = anim;
- return anim;
- }
- };
- Ext.Fx.resize = Ext.Fx.scale;
- Ext.apply(Ext.Element.prototype, Ext.Fx);
- Ext.CompositeElement = function(els){
- this.elements = [];
- this.addElements(els);
- };
- Ext.CompositeElement.prototype = {
- isComposite: true,
- addElements : function(els){
- if(!els) return this;
- if(typeof els == "string"){
- els = Ext.Element.selectorFunction(els);
- }
- var yels = this.elements;
- var index = yels.length-1;
- for(var i = 0, len = els.length; i < len; i++) {
- yels[++index] = Ext.get(els[i]);
- }
- return this;
- },
-
- fill : function(els){
- this.elements = [];
- this.add(els);
- return this;
- },
-
- filter : function(selector){
- var els = [];
- this.each(function(el){
- if(el.is(selector)){
- els[els.length] = el.dom;
- }
- });
- this.fill(els);
- return this;
- },
- invoke : function(fn, args){
- var els = this.elements;
- for(var i = 0, len = els.length; i < len; i++) {
- Ext.Element.prototype[fn].apply(els[i], args);
- }
- return this;
- },
-
- add : function(els){
- if(typeof els == "string"){
- this.addElements(Ext.Element.selectorFunction(els));
- }else if(els.length !== undefined){
- this.addElements(els);
- }else{
- this.addElements([els]);
- }
- return this;
- },
-
- each : function(fn, scope){
- var els = this.elements;
- for(var i = 0, len = els.length; i < len; i++){
- if(fn.call(scope || els[i], els[i], this, i) === false) {
- break;
- }
- }
- return this;
- },
-
- item : function(index){
- return this.elements[index] || null;
- },
-
- first : function(){
- return this.item(0);
- },
-
- last : function(){
- return this.item(this.elements.length-1);
- },
-
- getCount : function(){
- return this.elements.length;
- },
-
- contains : function(el){
- return this.indexOf(el) !== -1;
- },
-
- indexOf : function(el){
- return this.elements.indexOf(Ext.get(el));
- },
-
- removeElement : function(el, removeDom){
- if(Ext.isArray(el)){
- for(var i = 0, len = el.length; i < len; i++){
- this.removeElement(el[i]);
- }
- return this;
- }
- var index = typeof el == 'number' ? el : this.indexOf(el);
- if(index !== -1 && this.elements[index]){
- if(removeDom){
- var d = this.elements[index];
- if(d.dom){
- d.remove();
- }else{
- Ext.removeNode(d);
- }
- }
- this.elements.splice(index, 1);
- }
- return this;
- },
-
- replaceElement : function(el, replacement, domReplace){
- var index = typeof el == 'number' ? el : this.indexOf(el);
- if(index !== -1){
- if(domReplace){
- this.elements[index].replaceWith(replacement);
- }else{
- this.elements.splice(index, 1, Ext.get(replacement))
- }
- }
- return this;
- },
-
- clear : function(){
- this.elements = [];
- }
- };
- (function(){
- Ext.CompositeElement.createCall = function(proto, fnName){
- if(!proto[fnName]){
- proto[fnName] = function(){
- return this.invoke(fnName, arguments);
- };
- }
- };
- for(var fnName in Ext.Element.prototype){
- if(typeof Ext.Element.prototype[fnName] == "function"){
- Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);
- }
- };
- })();
- Ext.CompositeElementLite = function(els){
- Ext.CompositeElementLite.superclass.constructor.call(this, els);
- this.el = new Ext.Element.Flyweight();
- };
- Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
- addElements : function(els){
- if(els){
- if(Ext.isArray(els)){
- this.elements = this.elements.concat(els);
- }else{
- var yels = this.elements;
- var index = yels.length-1;
- for(var i = 0, len = els.length; i < len; i++) {
- yels[++index] = els[i];
- }
- }
- }
- return this;
- },
- invoke : function(fn, args){
- var els = this.elements;
- var el = this.el;
- for(var i = 0, len = els.length; i < len; i++) {
- el.dom = els[i];
- Ext.Element.prototype[fn].apply(el, args);
- }
- return this;
- },
-
- item : function(index){
- if(!this.elements[index]){
- return null;
- }
- this.el.dom = this.elements[index];
- return this.el;
- },
-
- addListener : function(eventName, handler, scope, opt){
- var els = this.elements;
- for(var i = 0, len = els.length; i < len; i++) {
- Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);
- }
- return this;
- },
-
- each : function(fn, scope){
- var els = this.elements;
- var el = this.el;
- for(var i = 0, len = els.length; i < len; i++){
- el.dom = els[i];
- if(fn.call(scope || el, el, this, i) === false){
- break;
- }
- }
- return this;
- },
- indexOf : function(el){
- return this.elements.indexOf(Ext.getDom(el));
- },
- replaceElement : function(el, replacement, domReplace){
- var index = typeof el == 'number' ? el : this.indexOf(el);
- if(index !== -1){
- replacement = Ext.getDom(replacement);
- if(domReplace){
- var d = this.elements[index];
- d.parentNode.insertBefore(replacement, d);
- Ext.removeNode(d);
- }
- this.elements.splice(index, 1, replacement);
- }
- return this;
- }
- });
- Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
- if(Ext.DomQuery){
- Ext.Element.selectorFunction = Ext.DomQuery.select;
- }
- Ext.Element.select = function(selector, unique, root){
- var els;
- if(typeof selector == "string"){
- els = Ext.Element.selectorFunction(selector, root);
- }else if(selector.length !== undefined){
- els = selector;
- }else{
- throw "Invalid selector";
- }
- if(unique === true){
- return new Ext.CompositeElement(els);
- }else{
- return new Ext.CompositeElementLite(els);
- }
- };
- Ext.select = Ext.Element.select;
- Ext.data.Connection = function(config){
- Ext.apply(this, config);
- this.addEvents(
-
- "beforerequest",
-
- "requestcomplete",
-
- "requestexception"
- );
- Ext.data.Connection.superclass.constructor.call(this);
- };
- Ext.extend(Ext.data.Connection, Ext.util.Observable, {
-
-
-
-
-
- timeout : 30000,
-
- autoAbort:false,
-
- disableCaching: true,
-
- request : function(o){
- if(this.fireEvent("beforerequest", this, o) !== false){
- var p = o.params;
- if(typeof p == "function"){
- p = p.call(o.scope||window, o);
- }
- if(typeof p == "object"){
- p = Ext.urlEncode(p);
- }
- if(this.extraParams){
- var extras = Ext.urlEncode(this.extraParams);
- p = p ? (p + '&' + extras) : extras;
- }
- var url = o.url || this.url;
- if(typeof url == 'function'){
- url = url.call(o.scope||window, o);
- }
- if(o.form){
- var form = Ext.getDom(o.form);
- url = url || form.action;
- var enctype = form.getAttribute("enctype");
- if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){
- return this.doFormUpload(o, p, url);
- }
- var f = Ext.lib.Ajax.serializeForm(form);
- p = p ? (p + '&' + f) : f;
- }
- var hs = o.headers;
- if(this.defaultHeaders){
- hs = Ext.apply(hs || {}, this.defaultHeaders);
- if(!o.headers){
- o.headers = hs;
- }
- }
- var cb = {
- success: this.handleResponse,
- failure: this.handleFailure,
- scope: this,
- argument: {options: o},
- timeout : o.timeout || this.timeout
- };
- var method = o.method||this.method||(p ? "POST" : "GET");
- if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){
- url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new Date().getTime());
- }
- if(typeof o.autoAbort == 'boolean'){
- if(o.autoAbort){
- this.abort();
- }
- }else if(this.autoAbort !== false){
- this.abort();
- }
- if((method == 'GET' && p) || o.xmlData || o.jsonData){
- url += (url.indexOf('?') != -1 ? '&' : '?') + p;
- p = '';
- }
- this.transId = Ext.lib.Ajax.request(method, url, cb, p, o);
- return this.transId;
- }else{
- Ext.callback(o.callback, o.scope, [o, null, null]);
- return null;
- }
- },
-
- isLoading : function(transId){
- if(transId){
- return Ext.lib.Ajax.isCallInProgress(transId);
- }else{
- return this.transId ? true : false;
- }
- },
-
- abort : function(transId){
- if(transId || this.isLoading()){
- Ext.lib.Ajax.abort(transId || this.transId);
- }
- },
-
- handleResponse : function(response){
- this.transId = false;
- var options = response.argument.options;
- response.argument = options ? options.argument : null;
- this.fireEvent("requestcomplete", this, response, options);
- Ext.callback(options.success, options.scope, [response, options]);
- Ext.callback(options.callback, options.scope, [options, true, response]);
- },
-
- handleFailure : function(response, e){
- this.transId = false;
- var options = response.argument.options;
- response.argument = options ? options.argument : null;
- this.fireEvent("requestexception", this, response, options, e);
- Ext.callback(options.failure, options.scope, [response, options]);
- Ext.callback(options.callback, options.scope, [options, false, response]);
- },
-
- doFormUpload : function(o, ps, url){
- var id = Ext.id();
- var frame = document.createElement('iframe');
- frame.id = id;
- frame.name = id;
- frame.className = 'x-hidden';
- if(Ext.isIE){
- frame.src = Ext.SSL_SECURE_URL;
- }
- document.body.appendChild(frame);
- if(Ext.isIE){
- document.frames[id].name = id;
- }
- var form = Ext.getDom(o.form);
- form.target = id;
- form.method = 'POST';
- form.enctype = form.encoding = 'multipart/form-data';
- if(url){
- form.action = url;
- }
- var hiddens, hd;
- if(ps){
- hiddens = [];
- ps = Ext.urlDecode(ps, false);
- for(var k in ps){
- if(ps.hasOwnProperty(k)){
- hd = document.createElement('input');
- hd.type = 'hidden';
- hd.name = k;
- hd.value = ps[k];
- form.appendChild(hd);
- hiddens.push(hd);
- }
- }
- }
- function cb(){
- var r = {
- responseText : '',
- responseXML : null
- };
- r.argument = o ? o.argument : null;
- try {
- var doc;
- if(Ext.isIE){
- doc = frame.contentWindow.document;
- }else {
- doc = (frame.contentDocument || window.frames[id].document);
- }
- if(doc && doc.body){
- r.responseText = doc.body.innerHTML;
- }
- if(doc && doc.XMLDocument){
- r.responseXML = doc.XMLDocument;
- }else {
- r.responseXML = doc;
- }
- }
- catch(e) {
-
- }
- Ext.EventManager.removeListener(frame, 'load', cb, this);
- this.fireEvent("requestcomplete", this, r, o);
- Ext.callback(o.success, o.scope, [r, o]);
- Ext.callback(o.callback, o.scope, [o, true, r]);
- setTimeout(function(){Ext.removeNode(frame);}, 100);
- }
- Ext.EventManager.on(frame, 'load', cb, this);
- form.submit();
- if(hiddens){
- for(var i = 0, len = hiddens.length; i < len; i++){
- Ext.removeNode(hiddens[i]);
- }
- }
- }
- });
- Ext.Ajax = new Ext.data.Connection({
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- autoAbort : false,
-
- serializeForm : function(form){
- return Ext.lib.Ajax.serializeForm(form);
- }
- });
- Ext.Updater = function(el, forceNew){
- el = Ext.get(el);
- if(!forceNew && el.updateManager){
- return el.updateManager;
- }
-
- this.el = el;
-
- this.defaultUrl = null;
- this.addEvents(
-
- "beforeupdate",
-
- "update",
-
- "failure"
- );
- var d = Ext.Updater.defaults;
-
- this.sslBlankUrl = d.sslBlankUrl;
-
- this.disableCaching = d.disableCaching;
-
- this.indicatorText = d.indicatorText;
-
- this.showLoadIndicator = d.showLoadIndicator;
-
- this.timeout = d.timeout;
-
- this.loadScripts = d.loadScripts;
-
- this.transaction = null;
-
- this.autoRefreshProcId = null;
-
- this.refreshDelegate = this.refresh.createDelegate(this);
-
- this.updateDelegate = this.update.createDelegate(this);
-
- this.formUpdateDelegate = this.formUpdate.createDelegate(this);
- if(!this.renderer){
-
- this.renderer = new Ext.Updater.BasicRenderer();
- }
- Ext.Updater.superclass.constructor.call(this);
- };
- Ext.extend(Ext.Updater, Ext.util.Observable, {
-
- getEl : function(){
- return this.el;
- },
-
- update : function(url, params, callback, discardUrl){
- if(this.fireEvent("beforeupdate", this.el, url, params) !== false){
- var method = this.method, cfg, callerScope;
- if(typeof url == "object"){
- cfg = url;
- url = cfg.url;
- params = params || cfg.params;
- callback = callback || cfg.callback;
- discardUrl = discardUrl || cfg.discardUrl;
- callerScope = cfg.scope;
- if(typeof cfg.method != "undefined"){method = cfg.method;};
- if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};
- if(typeof cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};
- if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};
- if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;};
- }
- this.showLoading();
- if(!discardUrl){
- this.defaultUrl = url;
- }
- if(typeof url == "function"){
- url = url.call(this);
- }
- method = method || (params ? "POST" : "GET");
- if(method == "GET"){
- url = this.prepareUrl(url);
- }
- var o = Ext.apply(cfg ||{}, {
- url : url,
- params: (typeof params == "function" && callerScope) ? params.createDelegate(callerScope) : params,
- success: this.processSuccess,
- failure: this.processFailure,
- scope: this,
- callback: undefined,
- timeout: (this.timeout*1000),
- argument: {
- "options": cfg,
- "url": url,
- "form": null,
- "callback": callback,
- "scope": callerScope || window,
- "params": params
- }
- });
- this.transaction = Ext.Ajax.request(o);
- }
- },
-
- formUpdate : function(form, url, reset, callback){
- if(this.fireEvent("beforeupdate", this.el, form, url) !== false){
- if(typeof url == "function"){
- url = url.call(this);
- }
- form = Ext.getDom(form)
- this.transaction = Ext.Ajax.request({
- form: form,
- url:url,
- success: this.processSuccess,
- failure: this.processFailure,
- scope: this,
- timeout: (this.timeout*1000),
- argument: {
- "url": url,
- "form": form,
- "callback": callback,
- "reset": reset
- }
- });
- this.showLoading.defer(1, this);
- }
- },
-
- refresh : function(callback){
- if(this.defaultUrl == null){
- return;
- }
- this.update(this.defaultUrl, null, callback, true);
- },
-
- startAutoRefresh : function(interval, url, params, callback, refreshNow){
- if(refreshNow){
- this.update(url || this.defaultUrl, params, callback, true);
- }
- if(this.autoRefreshProcId){
- clearInterval(this.autoRefreshProcId);
- }
- this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*1000);
- },
-
- stopAutoRefresh : function(){
- if(this.autoRefreshProcId){
- clearInterval(this.autoRefreshProcId);
- delete this.autoRefreshProcId;
- }
- },
- isAutoRefreshing : function(){
- return this.autoRefreshProcId ? true : false;
- },
-
- showLoading : function(){
- if(this.showLoadIndicator){
- this.el.update(this.indicatorText);
- }
- },
-
- prepareUrl : function(url){
- if(this.disableCaching){
- var append = "_dc=" + (new Date().getTime());
- if(url.indexOf("?") !== -1){
- url += "&" + append;
- }else{
- url += "?" + append;
- }
- }
- return url;
- },
-
- processSuccess : function(response){
- this.transaction = null;
- if(response.argument.form && response.argument.reset){
- try{
- response.argument.form.reset();
- }catch(e){}
- }
- if(this.loadScripts){
- this.renderer.render(this.el, response, this,
- this.updateComplete.createDelegate(this, [response]));
- }else{
- this.renderer.render(this.el, response, this);
- this.updateComplete(response);
- }
- },
- updateComplete : function(response){
- this.fireEvent("update", this.el, response);
- if(typeof response.argument.callback == "function"){
- response.argument.callback.call(response.argument.scope, this.el, true, response, response.argument.options);
- }
- },
-
- processFailure : function(response){
- this.transaction = null;
- this.fireEvent("failure", this.el, response);
- if(typeof response.argument.callback == "function"){
- response.argument.callback.call(response.argument.scope, this.el, false, response, response.argument.options);
- }
- },
-
- setRenderer : function(renderer){
- this.renderer = renderer;
- },
- getRenderer : function(){
- return this.renderer;
- },
-
- setDefaultUrl : function(defaultUrl){
- this.defaultUrl = defaultUrl;
- },
-
- abort : function(){
- if(this.transaction){
- Ext.Ajax.abort(this.transaction);
- }
- },
-
- isUpdating : function(){
- if(this.transaction){
- return Ext.Ajax.isLoading(this.transaction);
- }
- return false;
- }
- });
- Ext.Updater.defaults = {
-
- timeout : 30,
-
- loadScripts : false,
-
- sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),
-
- disableCaching : false,
-
- showLoadIndicator : true,
-
- indicatorText : '<div class="loading-indicator">Loading...</div>'
- };
- Ext.Updater.updateElement = function(el, url, params, options){
- var um = Ext.get(el).getUpdater();
- Ext.apply(um, options);
- um.update(url, params, options ? options.callback : null);
- };
- Ext.Updater.update = Ext.Updater.updateElement;
- Ext.Updater.BasicRenderer = function(){};
- Ext.Updater.BasicRenderer.prototype = {
-
- render : function(el, response, updateManager, callback){
- el.update(response.responseText, updateManager.loadScripts, callback);
- }
- };
- Ext.UpdateManager = Ext.Updater;
- Date.parseFunctions = {count:0};
- Date.parseRegexes = [];
- Date.formatFunctions = {count:0};
- Date.prototype.dateFormat = function(format) {
- if (Date.formatFunctions[format] == null) {
- Date.createNewFormat(format);
- }
- var func = Date.formatFunctions[format];
- return this[func]();
- };
- Date.prototype.format = Date.prototype.dateFormat;
- Date.createNewFormat = function(format) {
- var funcName = "format" + Date.formatFunctions.count++;
- Date.formatFunctions[format] = funcName;
- var code = "Date.prototype." + funcName + " = function(){return ";
- var special = false;
- var ch = '';
- for (var i = 0; i < format.length; ++i) {
- ch = format.charAt(i);
- if (!special && ch == "\\") {
- special = true;
- }
- else if (special) {
- special = false;
- code += "'" + String.escape(ch) + "' + ";
- }
- else {
- code += Date.getFormatCode(ch);
- }
- }
- eval(code.substring(0, code.length - 3) + ";}");
- };
- Date.getFormatCode = function(character) {
- switch (character) {
- case "d":
- return "String.leftPad(this.getDate(), 2, '0') + ";
- case "D":
- return "Date.getShortDayName(this.getDay()) + "; case "j":
- return "this.getDate() + ";
- case "l":
- return "Date.dayNames[this.getDay()] + ";
- case "N":
- return "(this.getDay() ? this.getDay() : 7) + ";
- case "S":
- return "this.getSuffix() + ";
- case "w":
- return "this.getDay() + ";
- case "z":
- return "this.getDayOfYear() + ";
- case "W":
- return "String.leftPad(this.getWeekOfYear(), 2, '0') + ";
- case "F":
- return "Date.monthNames[this.getMonth()] + ";
- case "m":
- return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
- case "M":
- return "Date.getShortMonthName(this.getMonth()) + "; case "n":
- return "(this.getMonth() + 1) + ";
- case "t":
- return "this.getDaysInMonth() + ";
- case "L":
- return "(this.isLeapYear() ? 1 : 0) + ";
- case "o":
- return "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0))) + ";
- case "Y":
- return "this.getFullYear() + ";
- case "y":
- return "('' + this.getFullYear()).substring(2, 4) + ";
- case "a":
- return "(this.getHours() < 12 ? 'am' : 'pm') + ";
- case "A":
- return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
- case "g":
- return "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";
- case "G":
- return "this.getHours() + ";
- case "h":
- return "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";
- case "H":
- return "String.leftPad(this.getHours(), 2, '0') + ";
- case "i":
- return "String.leftPad(this.getMinutes(), 2, '0') + ";
- case "s":
- return "String.leftPad(this.getSeconds(), 2, '0') + ";
- case "u":
- return "String.leftPad(this.getMilliseconds(), 3, '0') + ";
- case "O":
- return "this.getGMTOffset() + ";
- case "P":
- return "this.getGMTOffset(true) + ";
- case "T":
- return "this.getTimezone() + ";
- case "Z":
- return "(this.getTimezoneOffset() * -60) + ";
- case "c":
- for (var df = Date.getFormatCode, c = "Y-m-dTH:i:sP", code = "", i = 0, l = c.length; i < l; ++i) {
- var e = c.charAt(i);
- code += e == "T" ? "'T' + " : df(e); }
- return code;
- case "U":
- return "Math.round(this.getTime() / 1000) + ";
- default:
- return "'" + String.escape(character) + "' + ";
- }
- };
- Date.parseDate = function(input, format) {
- if (Date.parseFunctions[format] == null) {
- Date.createParser(format);
- }
- var func = Date.parseFunctions[format];
- return Date[func](input);
- };
- Date.createParser = function(format) {
- var funcName = "parse" + Date.parseFunctions.count++;
- var regexNum = Date.parseRegexes.length;
- var currentGroup = 1;
- Date.parseFunctions[format] = funcName;
- var code = "Date." + funcName + " = function(input){\n"
- + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, ms = -1, o, z, u, v;\n"
- + "input = String(input);var d = new Date();\n"
- + "y = d.getFullYear();\n"
- + "m = d.getMonth();\n"
- + "d = d.getDate();\n"
- + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
- + "if (results && results.length > 0) {";
- var regex = "";
- var special = false;
- var ch = '';
- for (var i = 0; i < format.length; ++i) {
- ch = format.charAt(i);
- if (!special && ch == "\\") {
- special = true;
- }
- else if (special) {
- special = false;
- regex += String.escape(ch);
- }
- else {
- var obj = Date.formatCodeToRegex(ch, currentGroup);
- currentGroup += obj.g;
- regex += obj.s;
- if (obj.g && obj.c) {
- code += obj.c;
- }
- }
- }
- code += "if (u)\n"
- + "{v = new Date(u * 1000);}" + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0)\n"
- + "{v = new Date(y, m, d, h, i, s, ms);}\n"
- + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
- + "{v = new Date(y, m, d, h, i, s);}\n"
- + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
- + "{v = new Date(y, m, d, h, i);}\n"
- + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
- + "{v = new Date(y, m, d, h);}\n"
- + "else if (y >= 0 && m >= 0 && d > 0)\n"
- + "{v = new Date(y, m, d);}\n"
- + "else if (y >= 0 && m >= 0)\n"
- + "{v = new Date(y, m);}\n"
- + "else if (y >= 0)\n"
- + "{v = new Date(y);}\n"
- + "}return (v && (z || o))?\n" + " (z ? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" + " v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" + ";}";
- Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
- eval(code);
- };
- Date.formatCodeToRegex = function(character, currentGroup) {
-
- switch (character) {
- case "d":
- return {g:1,
- c:"d = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{2})"}; case "D":
- for (var a = [], i = 0; i < 7; a.push(Date.getShortDayName(i)), ++i); return {g:0,
- c:null,
- s:"(?:" + a.join("|") +")"};
- case "j":
- return {g:1,
- c:"d = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{1,2})"}; case "l":
- return {g:0,
- c:null,
- s:"(?:" + Date.dayNames.join("|") + ")"};
- case "N":
- return {g:0,
- c:null,
- s:"[1-7]"}; case "S":
- return {g:0,
- c:null,
- s:"(?:st|nd|rd|th)"};
- case "w":
- return {g:0,
- c:null,
- s:"[0-6]"}; case "z":
- return {g:0,
- c:null,
- s:"(?:\\d{1,3}"}; case "W":
- return {g:0,
- c:null,
- s:"(?:\\d{2})"}; case "F":
- return {g:1,
- c:"m = parseInt(Date.getMonthNumber(results[" + currentGroup + "]), 10);\n", s:"(" + Date.monthNames.join("|") + ")"};
- case "m":
- return {g:1,
- c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
- s:"(\\d{2})"}; case "M":
- for (var a = [], i = 0; i < 12; a.push(Date.getShortMonthName(i)), ++i); return {g:1,
- c:"m = parseInt(Date.getMonthNumber(results[" + currentGroup + "]), 10);\n", s:"(" + a.join("|") + ")"};
- case "n":
- return {g:1,
- c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
- s:"(\\d{1,2})"}; case "t":
- return {g:0,
- c:null,
- s:"(?:\\d{2})"}; case "L":
- return {g:0,
- c:null,
- s:"(?:1|0)"};
- case "o":
- case "Y":
- return {g:1,
- c:"y = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{4})"}; case "y":
- return {g:1,
- c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
- + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
- s:"(\\d{1,2})"}; case "a":
- return {g:1,
- c:"if (results[" + currentGroup + "] == 'am') {\n"
- + "if (h == 12) { h = 0; }\n"
- + "} else { if (h < 12) { h += 12; }}",
- s:"(am|pm)"};
- case "A":
- return {g:1,
- c:"if (results[" + currentGroup + "] == 'AM') {\n"
- + "if (h == 12) { h = 0; }\n"
- + "} else { if (h < 12) { h += 12; }}",
- s:"(AM|PM)"};
- case "g":
- case "G":
- return {g:1,
- c:"h = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{1,2})"}; case "h":
- case "H":
- return {g:1,
- c:"h = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{2})"}; case "i":
- return {g:1,
- c:"i = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{2})"}; case "s":
- return {g:1,
- c:"s = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{2})"}; case "u":
- return {g:1,
- c:"ms = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(\\d{3})"}; case "O":
- return {g:1,
- c:[
- "o = results[", currentGroup, "];\n",
- "var sn = o.substring(0,1);\n", "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n", "var mn = o.substring(3,5) % 60;\n", "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n", " (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"
- ].join(""),
- s: "([+\-]\\d{4})"}; case "P":
- return {g:1,
- c:[
- "o = results[", currentGroup, "];\n",
- "var sn = o.substring(0,1);\n", "var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);\n", "var mn = o.substring(4,6) % 60;\n", "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n", " (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"
- ].join(""),
- s: "([+\-]\\d{2}:\\d{2})"}; case "T":
- return {g:0,
- c:null,
- s:"[A-Z]{1,4}"}; case "Z":
- return {g:1,
- c:"z = results[" + currentGroup + "] * 1;\n" + "z = (-43200 <= z && z <= 50400)? z : null;\n",
- s:"([+\-]?\\d{1,5})"}; case "c":
- var df = Date.formatCodeToRegex, calc = [];
- var arr = [df("Y", 1), df("m", 2), df("d", 3), df("h", 4), df("i", 5), df("s", 6), df("P", 7)];
- for (var i = 0, l = arr.length; i < l; ++i) {
- calc.push(arr[i].c);
- }
- return {g:1,
- c:calc.join(""),
- s:arr[0].s + "-" + arr[1].s + "-" + arr[2].s + "T" + arr[3].s + ":" + arr[4].s + ":" + arr[5].s + arr[6].s};
- case "U":
- return {g:1,
- c:"u = parseInt(results[" + currentGroup + "], 10);\n",
- s:"(-?\\d+)"}; default:
- return {g:0,
- c:null,
- s:Ext.escapeRe(character)};
- }
- };
- Date.prototype.getTimezone = function() {
- return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, "");
- };
- Date.prototype.getGMTOffset = function(colon) {
- return (this.getTimezoneOffset() > 0 ? "-" : "+")
- + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
- + (colon ? ":" : "")
- + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
- };
- Date.prototype.getDayOfYear = function() {
- var num = 0;
- Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
- for (var i = 0; i < this.getMonth(); ++i) {
- num += Date.daysInMonth[i];
- }
- return num + this.getDate() - 1;
- };
- Date.prototype.getWeekOfYear = function() {
- var ms1d = 864e5; var ms7d = 7 * ms1d; var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d; var AWN = Math.floor(DC3 / 7); var Wyr = new Date(AWN * ms7d).getUTCFullYear();
- return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;
- };
- Date.prototype.isLeapYear = function() {
- var year = this.getFullYear();
- return !!((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
- };
- Date.prototype.getFirstDayOfMonth = function() {
- var day = (this.getDay() - (this.getDate() - 1)) % 7;
- return (day < 0) ? (day + 7) : day;
- };
- Date.prototype.getLastDayOfMonth = function() {
- var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
- return (day < 0) ? (day + 7) : day;
- };
- Date.prototype.getFirstDateOfMonth = function() {
- return new Date(this.getFullYear(), this.getMonth(), 1);
- };
- Date.prototype.getLastDateOfMonth = function() {
- return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());
- };
- Date.prototype.getDaysInMonth = function() {
- Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
- return Date.daysInMonth[this.getMonth()];
- };
- Date.prototype.getSuffix = function() {
- switch (this.getDate()) {
- case 1:
- case 21:
- case 31:
- return "st";
- case 2:
- case 22:
- return "nd";
- case 3:
- case 23:
- return "rd";
- default:
- return "th";
- }
- };
- Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
- Date.monthNames =
- ["January",
- "February",
- "March",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"];
- Date.getShortMonthName = function(month) {
- return Date.monthNames[month].substring(0, 3);
- }
- Date.dayNames =
- ["Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday"];
- Date.getShortDayName = function(day) {
- return Date.dayNames[day].substring(0, 3);
- }
- Date.y2kYear = 50;
- Date.monthNumbers = {
- Jan:0,
- Feb:1,
- Mar:2,
- Apr:3,
- May:4,
- Jun:5,
- Jul:6,
- Aug:7,
- Sep:8,
- Oct:9,
- Nov:10,
- Dec:11};
- Date.getMonthNumber = function(name) {
- return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()];
- }
- Date.prototype.clone = function() {
- return new Date(this.getTime());
- };
- Date.prototype.clearTime = function(clone){
- if(clone){
- return this.clone().clearTime();
- }
- this.setHours(0);
- this.setMinutes(0);
- this.setSeconds(0);
- this.setMilliseconds(0);
- return this;
- };
- if(Ext.isSafari){
- Date.brokenSetMonth = Date.prototype.setMonth;
- Date.prototype.setMonth = function(num){
- if(num <= -1){
- var n = Math.ceil(-num);
- var back_year = Math.ceil(n/12);
- var month = (n % 12) ? 12 - n % 12 : 0 ;
- this.setFullYear(this.getFullYear() - back_year);
- return Date.brokenSetMonth.call(this, month);
- } else {
- return Date.brokenSetMonth.apply(this, arguments);
- }
- };
- }
- Date.MILLI = "ms";
- Date.SECOND = "s";
- Date.MINUTE = "mi";
- Date.HOUR = "h";
- Date.DAY = "d";
- Date.MONTH = "mo";
- Date.YEAR = "y";
- Date.prototype.add = function(interval, value){
- var d = this.clone();
- if (!interval || value === 0) return d;
- switch(interval.toLowerCase()){
- case Date.MILLI:
- d.setMilliseconds(this.getMilliseconds() + value);
- break;
- case Date.SECOND:
- d.setSeconds(this.getSeconds() + value);
- break;
- case Date.MINUTE:
- d.setMinutes(this.getMinutes() + value);
- break;
- case Date.HOUR:
- d.setHours(this.getHours() + value);
- break;
- case Date.DAY:
- d.setDate(this.getDate() + value);
- break;
- case Date.MONTH:
- var day = this.getDate();
- if(day > 28){
- day = Math.min(day, this.getFirstDateOfMonth().add('mo', value).getLastDateOfMonth().getDate());
- }
- d.setDate(day);
- d.setMonth(this.getMonth() + value);
- break;
- case Date.YEAR:
- d.setFullYear(this.getFullYear() + value);
- break;
- }
- return d;
- };
- Date.prototype.between = function(start, end){
- var t = this.getTime();
- return start.getTime() <= t && t <= end.getTime();
- }
- Ext.util.DelayedTask = function(fn, scope, args){
- var id = null, d, t;
- var call = function(){
- var now = new Date().getTime();
- if(now - t >= d){
- clearInterval(id);
- id = null;
- fn.apply(scope, args || []);
- }
- };
-
- this.delay = function(delay, newFn, newScope, newArgs){
- if(id && delay != d){
- this.cancel();
- }
- d = delay;
- t = new Date().getTime();
- fn = newFn || fn;
- scope = newScope || scope;
- args = newArgs || args;
- if(!id){
- id = setInterval(call, d);
- }
- };
-
- this.cancel = function(){
- if(id){
- clearInterval(id);
- id = null;
- }
- };
- };
- Ext.util.TaskRunner = function(interval){
- interval = interval || 10;
- var tasks = [], removeQueue = [];
- var id = 0;
- var running = false;
- var stopThread = function(){
- running = false;
- clearInterval(id);
- id = 0;
- };
- var startThread = function(){
- if(!running){
- running = true;
- id = setInterval(runTasks, interval);
- }
- };
- var removeTask = function(t){
- removeQueue.push(t);
- if(t.onStop){
- t.onStop.apply(t.scope || t);
- }
- };
- var runTasks = function(){
- if(removeQueue.length > 0){
- for(var i = 0, len = removeQueue.length; i < len; i++){
- tasks.remove(removeQueue[i]);
- }
- removeQueue = [];
- if(tasks.length < 1){
- stopThread();
- return;
- }
- }
- var now = new Date().getTime();
- for(var i = 0, len = tasks.length; i < len; ++i){
- var t = tasks[i];
- var itime = now - t.taskRunTime;
- if(t.interval <= itime){
- var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
- t.taskRunTime = now;
- if(rt === false || t.taskRunCount === t.repeat){
- removeTask(t);
- return;
- }
- }
- if(t.duration && t.duration <= (now - t.taskStartTime)){
- removeTask(t);
- }
- }
- };
-
- this.start = function(task){
- tasks.push(task);
- task.taskStartTime = new Date().getTime();
- task.taskRunTime = 0;
- task.taskRunCount = 0;
- startThread();
- return task;
- };
-
- this.stop = function(task){
- removeTask(task);
- return task;
- };
-
- this.stopAll = function(){
- stopThread();
- for(var i = 0, len = tasks.length; i < len; i++){
- if(tasks[i].onStop){
- tasks[i].onStop();
- }
- }
- tasks = [];
- removeQueue = [];
- };
- };
- Ext.TaskMgr = new Ext.util.TaskRunner();
- Ext.util.MixedCollection = function(allowFunctions, keyFn){
- this.items = [];
- this.map = {};
- this.keys = [];
- this.length = 0;
- this.addEvents(
-
- "clear",
-
- "add",
-
- "replace",
-
- "remove",
- "sort"
- );
- this.allowFunctions = allowFunctions === true;
- if(keyFn){
- this.getKey = keyFn;
- }
- Ext.util.MixedCollection.superclass.constructor.call(this);
- };
- Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {
- allowFunctions : false,
- add : function(key, o){
- if(arguments.length == 1){
- o = arguments[0];
- key = this.getKey(o);
- }
- if(typeof key == "undefined" || key === null){
- this.length++;
- this.items.push(o);
- this.keys.push(null);
- }else{
- var old = this.map[key];
- if(old){
- return this.replace(key, o);
- }
- this.length++;
- this.items.push(o);
- this.map[key] = o;
- this.keys.push(key);
- }
- this.fireEvent("add", this.length-1, o, key);
- return o;
- },
- getKey : function(o){
- return o.id;
- },
- replace : function(key, o){
- if(arguments.length == 1){
- o = arguments[0];
- key = this.getKey(o);
- }
- var old = this.item(key);
- if(typeof key == "undefined" || key === null || typeof old == "undefined"){
- return this.add(key, o);
- }
- var index = this.indexOfKey(key);
- this.items[index] = o;
- this.map[key] = o;
- this.fireEvent("replace", key, old, o);
- return o;
- },
- addAll : function(objs){
- if(arguments.length > 1 || Ext.isArray(objs)){
- var args = arguments.length > 1 ? arguments : objs;
- for(var i = 0, len = args.length; i < len; i++){
- this.add(args[i]);
- }
- }else{
- for(var key in objs){
- if(this.allowFunctions || typeof objs[key] != "function"){
- this.add(key, objs[key]);
- }
- }
- }
- },
- each : function(fn, scope){
- var items = [].concat(this.items);
- for(var i = 0, len = items.length; i < len; i++){
- if(fn.call(scope || items[i], items[i], i, len) === false){
- break;
- }
- }
- },
- eachKey : function(fn, scope){
- for(var i = 0, len = this.keys.length; i < len; i++){
- fn.call(scope || window, this.keys[i], this.items[i], i, len);
- }
- },
-
- find : function(fn, scope){
- for(var i = 0, len = this.items.length; i < len; i++){
- if(fn.call(scope || window, this.items[i], this.keys[i])){
- return this.items[i];
- }
- }
- return null;
- },
- insert : function(index, key, o){
- if(arguments.length == 2){
- o = arguments[1];
- key = this.getKey(o);
- }
- if(index >= this.length){
- return this.add(key, o);
- }
- this.length++;
- this.items.splice(index, 0, o);
- if(typeof key != "undefined" && key != null){
- this.map[key] = o;
- }
- this.keys.splice(index, 0, key);
- this.fireEvent("add", index, o, key);
- return o;
- },
- remove : function(o){
- return this.removeAt(this.indexOf(o));
- },
- removeAt : function(index){
- if(index < this.length && index >= 0){
- this.length--;
- var o = this.items[index];
- this.items.splice(index, 1);
- var key = this.keys[index];
- if(typeof key != "undefined"){
- delete this.map[key];
- }
- this.keys.splice(index, 1);
- this.fireEvent("remove", o, key);
- return o;
- }
- return false;
- },
- removeKey : function(key){
- return this.removeAt(this.indexOfKey(key));
- },
- getCount : function(){
- return this.length;
- },
- indexOf : function(o){
- return this.items.indexOf(o);
- },
- indexOfKey : function(key){
- return this.keys.indexOf(key);
- },
- item : function(key){
- var item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key];
- return typeof item != 'function' || this.allowFunctions ? item : null;
- },
- itemAt : function(index){
- return this.items[index];
- },
- key : function(key){
- return this.map[key];
- },
- contains : function(o){
- return this.indexOf(o) != -1;
- },
- containsKey : function(key){
- return typeof this.map[key] != "undefined";
- },
- clear : function(){
- this.length = 0;
- this.items = [];
- this.keys = [];
- this.map = {};
- this.fireEvent("clear");
- },
- first : function(){
- return this.items[0];
- },
- last : function(){
- return this.items[this.length-1];
- },
-
- _sort : function(property, dir, fn){
- var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1;
- fn = fn || function(a, b){
- return a-b;
- };
- var c = [], k = this.keys, items = this.items;
- for(var i = 0, len = items.length; i < len; i++){
- c[c.length] = {key: k[i], value: items[i], index: i};
- }
- c.sort(function(a, b){
- var v = fn(a[property], b[property]) * dsc;
- if(v == 0){
- v = (a.index < b.index ? -1 : 1);
- }
- return v;
- });
- for(var i = 0, len = c.length; i < len; i++){
- items[i] = c[i].value;
- k[i] = c[i].key;
- }
- this.fireEvent("sort", this);
- },
-
- sort : function(dir, fn){
- this._sort("value", dir, fn);
- },
-
- keySort : function(dir, fn){
- this._sort("key", dir, fn || function(a, b){
- return String(a).toUpperCase()-String(b).toUpperCase();
- });
- },
-
- getRange : function(start, end){
- var items = this.items;
- if(items.length < 1){
- return [];
- }
- start = start || 0;
- end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1);
- var r = [];
- if(start <= end){
- for(var i = start; i <= end; i++) {
- r[r.length] = items[i];
- }
- }else{
- for(var i = start; i >= end; i--) {
- r[r.length] = items[i];
- }
- }
- return r;
- },
-
- filter : function(property, value, anyMatch, caseSensitive){
- if(Ext.isEmpty(value, false)){
- return this.clone();
- }
- value = this.createValueMatcher(value, anyMatch, caseSensitive);
- return this.filterBy(function(o){
- return o && value.test(o[property]);
- });
- },
-
- filterBy : function(fn, scope){
- var r = new Ext.util.MixedCollection();
- r.getKey = this.getKey;
- var k = this.keys, it = this.items;
- for(var i = 0, len = it.length; i < len; i++){
- if(fn.call(scope||this, it[i], k[i])){
- r.add(k[i], it[i]);
- }
- }
- return r;
- },
-
- findIndex : function(property, value, start, anyMatch, caseSensitive){
- if(Ext.isEmpty(value, false)){
- return -1;
- }
- value = this.createValueMatcher(value, anyMatch, caseSensitive);
- return this.findIndexBy(function(o){
- return o && value.test(o[property]);
- }, null, start);
- },
-
- findIndexBy : function(fn, scope, start){
- var k = this.keys, it = this.items;
- for(var i = (start||0), len = it.length; i < len; i++){
- if(fn.call(scope||this, it[i], k[i])){
- return i;
- }
- }
- if(typeof start == 'number' && start > 0){
- for(var i = 0; i < start; i++){
- if(fn.call(scope||this, it[i], k[i])){
- return i;
- }
- }
- }
- return -1;
- },
-
- createValueMatcher : function(value, anyMatch, caseSensitive){
- if(!value.exec){
- value = String(value);
- value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), caseSensitive ? '' : 'i');
- }
- return value;
- },
-
- clone : function(){
- var r = new Ext.util.MixedCollection();
- var k = this.keys, it = this.items;
- for(var i = 0, len = it.length; i < len; i++){
- r.add(k[i], it[i]);
- }
- r.getKey = this.getKey;
- return r;
- }
- });
- Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
- Ext.util.JSON = new (function(){
- var useHasOwn = {}.hasOwnProperty ? true : false;
-
-
-
-
- var pad = function(n) {
- return n < 10 ? "0" + n : n;
- };
-
- var m = {
- "\b": '\\b',
- "\t": '\\t',
- "\n": '\\n',
- "\f": '\\f',
- "\r": '\\r',
- '"' : '\\"',
- "\\": '\\\\'
- };
- var encodeString = function(s){
- if (/["\\\x00-\x1f]/.test(s)) {
- return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
- var c = m[b];
- if(c){
- return c;
- }
- c = b.charCodeAt();
- return "\\u00" +
- Math.floor(c / 16).toString(16) +
- (c % 16).toString(16);
- }) + '"';
- }
- return '"' + s + '"';
- };
-
- var encodeArray = function(o){
- var a = ["["], b, i, l = o.length, v;
- for (i = 0; i < l; i += 1) {
- v = o[i];
- switch (typeof v) {
- case "undefined":
- case "function":
- case "unknown":
- break;
- default:
- if (b) {
- a.push(',');
- }
- a.push(v === null ? "null" : Ext.util.JSON.encode(v));
- b = true;
- }
- }
- a.push("]");
- return a.join("");
- };
-
- var encodeDate = function(o){
- return '"' + o.getFullYear() + "-" +
- pad(o.getMonth() + 1) + "-" +
- pad(o.getDate()) + "T" +
- pad(o.getHours()) + ":" +
- pad(o.getMinutes()) + ":" +
- pad(o.getSeconds()) + '"';
- };
-
-
- this.encode = function(o){
- if(typeof o == "undefined" || o === null){
- return "null";
- }else if(Ext.isArray(o)){
- return encodeArray(o);
- }else if(Ext.isDate(o)){
- return encodeDate(o);
- }else if(typeof o == "string"){
- return encodeString(o);
- }else if(typeof o == "number"){
- return isFinite(o) ? String(o) : "null";
- }else if(typeof o == "boolean"){
- return String(o);
- }else {
- var a = ["{"], b, i, v;
- for (i in o) {
- if(!useHasOwn || o.hasOwnProperty(i)) {
- v = o[i];
- switch (typeof v) {
- case "undefined":
- case "function":
- case "unknown":
- break;
- default:
- if(b){
- a.push(',');
- }
- a.push(this.encode(i), ":",
- v === null ? "null" : this.encode(v));
- b = true;
- }
- }
- }
- a.push("}");
- return a.join("");
- }
- };
-
-
- this.decode = function(json){
- return eval("(" + json + ')');
- };
- })();
- Ext.encode = Ext.util.JSON.encode;
- Ext.decode = Ext.util.JSON.decode;
- Ext.util.Format = function(){
- var trimRe = /^\s+|\s+$/g;
- return {
-
- ellipsis : function(value, len){
- if(value && value.length > len){
- return value.substr(0, len-3)+"...";
- }
- return value;
- },
-
- undef : function(value){
- return value !== undefined ? value : "";
- },
-
- defaultValue : function(value, defaultValue){
- return value !== undefined && value !== '' ? value : defaultValue;
- },
-
- htmlEncode : function(value){
- return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """);
- },
-
- htmlDecode : function(value){
- return !value ? value : String(value).replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, '"');
- },
-
- trim : function(value){
- return String(value).replace(trimRe, "");
- },
-
- substr : function(value, start, length){
- return String(value).substr(start, length);
- },
-
- lowercase : function(value){
- return String(value).toLowerCase();
- },
-
- uppercase : function(value){
- return String(value).toUpperCase();
- },
-
- capitalize : function(value){
- return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
- },
-
- call : function(value, fn){
- if(arguments.length > 2){
- var args = Array.prototype.slice.call(arguments, 2);
- args.unshift(value);
- return eval(fn).apply(window, args);
- }else{
- return eval(fn).call(window, value);
- }
- },
-
- usMoney : function(v){
- v = (Math.round((v-0)*100))/100;
- v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
- v = String(v);
- var ps = v.split('.');
- var whole = ps[0];
- var sub = ps[1] ? '.'+ ps[1] : '.00';
- var r = /(\d+)(\d{3})/;
- while (r.test(whole)) {
- whole = whole.replace(r, '$1' + ',' + '$2');
- }
- v = whole + sub;
- if(v.charAt(0) == '-'){
- return '-$' + v.substr(1);
- }
- return "$" + v;
- },
-
- date : function(v, format){
- if(!v){
- return "";
- }
- if(!Ext.isDate(v)){
- v = new Date(Date.parse(v));
- }
- return v.dateFormat(format || "m/d/Y");
- },
-
- dateRenderer : function(format){
- return function(v){
- return Ext.util.Format.date(v, format);
- };
- },
-
- stripTagsRE : /<\/?[^>]+>/gi,
-
-
- stripTags : function(v){
- return !v ? v : String(v).replace(this.stripTagsRE, "");
- },
- stripScriptsRe : /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,
-
- stripScripts : function(v){
- return !v ? v : String(v).replace(this.stripScriptsRe, "");
- },
-
- fileSize : function(size){
- if(size < 1024) {
- return size + " bytes";
- } else if(size < 1048576) {
- return (Math.round(((size*10) / 1024))/10) + " KB";
- } else {
- return (Math.round(((size*10) / 1048576))/10) + " MB";
- }
- },
- math : function(){
- var fns = {};
- return function(v, a){
- if(!fns[a]){
- fns[a] = new Function('v', 'return v ' + a + ';');
- }
- return fns[a](v);
- }
- }()
- };
- }();
- Ext.XTemplate = function(){
- Ext.XTemplate.superclass.constructor.apply(this, arguments);
- var s = this.html;
- s = ['<tpl>', s, '</tpl>'].join('');
- var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;
- var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;
- var ifRe = /^<tpl\b[^>]*?if="(.*?)"/;
- var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;
- var m, id = 0;
- var tpls = [];
- while(m = s.match(re)){
- var m2 = m[0].match(nameRe);
- var m3 = m[0].match(ifRe);
- var m4 = m[0].match(execRe);
- var exp = null, fn = null, exec = null;
- var name = m2 && m2[1] ? m2[1] : '';
- if(m3){
- exp = m3 && m3[1] ? m3[1] : null;
- if(exp){
- fn = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }');
- }
- }
- if(m4){
- exp = m4 && m4[1] ? m4[1] : null;
- if(exp){
- exec = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ '+(Ext.util.Format.htmlDecode(exp))+'; }');
- }
- }
- if(name){
- switch(name){
- case '.': name = new Function('values', 'parent', 'with(values){ return values; }'); break;
- case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;
- default: name = new Function('values', 'parent', 'with(values){ return '+name+'; }');
- }
- }
- tpls.push({
- id: id,
- target: name,
- exec: exec,
- test: fn,
- body: m[1]||''
- });
- s = s.replace(m[0], '{xtpl'+ id + '}');
- ++id;
- }
- for(var i = tpls.length-1; i >= 0; --i){
- this.compileTpl(tpls[i]);
- }
- this.master = tpls[tpls.length-1];
- this.tpls = tpls;
- };
- Ext.extend(Ext.XTemplate, Ext.Template, {
-
- re : /\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,
-
- codeRe : /\{\[((?:\\\]|.|\n)*?)\]\}/g,
-
- applySubTemplate : function(id, values, parent, xindex, xcount){
- var t = this.tpls[id];
- if(t.test && !t.test.call(this, values, parent, xindex, xcount)){
- return '';
- }
- if(t.exec && t.exec.call(this, values, parent, xindex, xcount)){
- return '';
- }
- var vs = t.target ? t.target.call(this, values, parent) : values;
- parent = t.target ? values : parent;
- if(t.target && Ext.isArray(vs)){
- var buf = [];
- for(var i = 0, len = vs.length; i < len; i++){
- buf[buf.length] = t.compiled.call(this, vs[i], parent, i+1, len);
- }
- return buf.join('');
- }
- return t.compiled.call(this, vs, parent, xindex, xcount);
- },
-
- compileTpl : function(tpl){
- var fm = Ext.util.Format;
- var useF = this.disableFormats !== true;
- var sep = Ext.isGecko ? "+" : ",";
- var fn = function(m, name, format, args, math){
- if(name.substr(0, 4) == 'xtpl'){
- return "'"+ sep +'this.applySubTemplate('+name.substr(4)+', values, parent, xindex, xcount)'+sep+"'";
- }
- var v;
- if(name === '.'){
- v = 'values';
- }else if(name === '#'){
- v = 'xindex';
- }else if(name.indexOf('.') != -1){
- v = name;
- }else{
- v = "values['" + name + "']";
- }
- if(math){
- v = '(' + v + math + ')';
- }
- if(format && useF){
- args = args ? ',' + args : "";
- if(format.substr(0, 5) != "this."){
- format = "fm." + format + '(';
- }else{
- format = 'this.call("'+ format.substr(5) + '", ';
- args = ", values";
- }
- }else{
- args= ''; format = "("+v+" === undefined ? '' : ";
- }
- return "'"+ sep + format + v + args + ")"+sep+"'";
- };
- var codeFn = function(m, code){
- return "'"+ sep +'('+code+')'+sep+"'";
- };
- var body;
-
- if(Ext.isGecko){
- body = "tpl.compiled = function(values, parent, xindex, xcount){ return '" +
- tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn) +
- "';};";
- }else{
- body = ["tpl.compiled = function(values, parent, xindex, xcount){ return ['"];
- body.push(tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn));
- body.push("'].join('');};");
- body = body.join('');
- }
- eval(body);
- return this;
- },
-
- apply : function(values){
- return this.master.compiled.call(this, values, {}, 1, 1);
- },
-
- applyTemplate : function(values){
- return this.master.compiled.call(this, values, {}, 1, 1);
- },
-
- compile : function(){return this;}
-
-
-
-
- });
- Ext.XTemplate.from = function(el){
- el = Ext.getDom(el);
- return new Ext.XTemplate(el.value || el.innerHTML);
- };
- Ext.util.CSS = function(){
- var rules = null;
- var doc = document;
- var camelRe = /(-[a-z])/gi;
- var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
- return {
-
- createStyleSheet : function(cssText, id){
- var ss;
- var head = doc.getElementsByTagName("head")[0];
- var rules = doc.createElement("style");
- rules.setAttribute("type", "text/css");
- if(id){
- rules.setAttribute("id", id);
- }
- if(Ext.isIE){
- head.appendChild(rules);
- ss = rules.styleSheet;
- ss.cssText = cssText;
- }else{
- try{
- rules.appendChild(doc.createTextNode(cssText));
- }catch(e){
- rules.cssText = cssText;
- }
- head.appendChild(rules);
- ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
- }
- this.cacheStyleSheet(ss);
- return ss;
- },
-
- removeStyleSheet : function(id){
- var existing = doc.getElementById(id);
- if(existing){
- existing.parentNode.removeChild(existing);
- }
- },
-
- swapStyleSheet : function(id, url){
- this.removeStyleSheet(id);
- var ss = doc.createElement("link");
- ss.setAttribute("rel", "stylesheet");
- ss.setAttribute("type", "text/css");
- ss.setAttribute("id", id);
- ss.setAttribute("href", url);
- doc.getElementsByTagName("head")[0].appendChild(ss);
- },
-
-
- refreshCache : function(){
- return this.getRules(true);
- },
-
- cacheStyleSheet : function(ss){
- if(!rules){
- rules = {};
- }
- try{
- var ssRules = ss.cssRules || ss.rules;
- for(var j = ssRules.length-1; j >= 0; --j){
- rules[ssRules[j].selectorText] = ssRules[j];
- }
- }catch(e){}
- },
-
-
- getRules : function(refreshCache){
- if(rules == null || refreshCache){
- rules = {};
- var ds = doc.styleSheets;
- for(var i =0, len = ds.length; i < len; i++){
- try{
- this.cacheStyleSheet(ds[i]);
- }catch(e){}
- }
- }
- return rules;
- },
-
-
- getRule : function(selector, refreshCache){
- var rs = this.getRules(refreshCache);
- if(!Ext.isArray(selector)){
- return rs[selector];
- }
- for(var i = 0; i < selector.length; i++){
- if(rs[selector[i]]){
- return rs[selector[i]];
- }
- }
- return null;
- },
-
-
-
- updateRule : function(selector, property, value){
- if(!Ext.isArray(selector)){
- var rule = this.getRule(selector);
- if(rule){
- rule.style[property.replace(camelRe, camelFn)] = value;
- return true;
- }
- }else{
- for(var i = 0; i < selector.length; i++){
- if(this.updateRule(selector[i], property, value)){
- return true;
- }
- }
- }
- return false;
- }
- };
- }();
- Ext.util.ClickRepeater = function(el, config)
- {
- this.el = Ext.get(el);
- this.el.unselectable();
- Ext.apply(this, config);
- this.addEvents(
-
- "mousedown",
-
- "click",
-
- "mouseup"
- );
- this.el.on("mousedown", this.handleMouseDown, this);
- if(this.preventDefault || this.stopDefault){
- this.el.on("click", function(e){
- if(this.preventDefault){
- e.preventDefault();
- }
- if(this.stopDefault){
- e.stopEvent();
- }
- }, this);
- }
- if(this.handler){
- this.on("click", this.handler, this.scope || this);
- }
- Ext.util.ClickRepeater.superclass.constructor.call(this);
- };
- Ext.extend(Ext.util.ClickRepeater, Ext.util.Observable, {
- interval : 20,
- delay: 250,
- preventDefault : true,
- stopDefault : false,
- timer : 0,
- handleMouseDown : function(){
- clearTimeout(this.timer);
- this.el.blur();
- if(this.pressClass){
- this.el.addClass(this.pressClass);
- }
- this.mousedownTime = new Date();
- Ext.getDoc().on("mouseup", this.handleMouseUp, this);
- this.el.on("mouseout", this.handleMouseOut, this);
- this.fireEvent("mousedown", this);
- this.fireEvent("click", this);
- if (this.accelerate) {
- this.delay = 400;
- }
- this.timer = this.click.defer(this.delay || this.interval, this);
- },
- click : function(){
- this.fireEvent("click", this);
- this.timer = this.click.defer(this.accelerate ?
- this.easeOutExpo(this.mousedownTime.getElapsed(),
- 400,
- -390,
- 12000) :
- this.interval, this);
- },
- easeOutExpo : function (t, b, c, d) {
- return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
- },
- handleMouseOut : function(){
- clearTimeout(this.timer);
- if(this.pressClass){
- this.el.removeClass(this.pressClass);
- }
- this.el.on("mouseover", this.handleMouseReturn, this);
- },
- handleMouseReturn : function(){
- this.el.un("mouseover", this.handleMouseReturn);
- if(this.pressClass){
- this.el.addClass(this.pressClass);
- }
- this.click();
- },
- handleMouseUp : function(){
- clearTimeout(this.timer);
- this.el.un("mouseover", this.handleMouseReturn);
- this.el.un("mouseout", this.handleMouseOut);
- Ext.getDoc().un("mouseup", this.handleMouseUp);
- this.el.removeClass(this.pressClass);
- this.fireEvent("mouseup", this);
- }
- });
- Ext.KeyNav = function(el, config){
- this.el = Ext.get(el);
- Ext.apply(this, config);
- if(!this.disabled){
- this.disabled = true;
- this.enable();
- }
- };
- Ext.KeyNav.prototype = {
-
- disabled : false,
-
- defaultEventAction: "stopEvent",
-
- forceKeyDown : false,
- prepareEvent : function(e){
- var k = e.getKey();
- var h = this.keyToHandler[k];
- if(Ext.isSafari && h && k >= 37 && k <= 40){
- e.stopEvent();
- }
- },
- relay : function(e){
- var k = e.getKey();
- var h = this.keyToHandler[k];
- if(h && this[h]){
- if(this.doRelay(e, this[h], h) !== true){
- e[this.defaultEventAction]();
- }
- }
- },
- doRelay : function(e, h, hname){
- return h.call(this.scope || this, e);
- },
- enter : false,
- left : false,
- right : false,
- up : false,
- down : false,
- tab : false,
- esc : false,
- pageUp : false,
- pageDown : false,
- del : false,
- home : false,
- end : false,
- keyToHandler : {
- 37 : "left",
- 39 : "right",
- 38 : "up",
- 40 : "down",
- 33 : "pageUp",
- 34 : "pageDown",
- 46 : "del",
- 36 : "home",
- 35 : "end",
- 13 : "enter",
- 27 : "esc",
- 9 : "tab"
- },
-
- enable: function(){
- if(this.disabled){
- if(this.forceKeyDown || Ext.isIE || Ext.isAir){
- this.el.on("keydown", this.relay, this);
- }else{
- this.el.on("keydown", this.prepareEvent, this);
- this.el.on("keypress", this.relay, this);
- }
- this.disabled = false;
- }
- },
-
- disable: function(){
- if(!this.disabled){
- if(this.forceKeyDown || Ext.isIE || Ext.isAir){
- this.el.un("keydown", this.relay);
- }else{
- this.el.un("keydown", this.prepareEvent);
- this.el.un("keypress", this.relay);
- }
- this.disabled = true;
- }
- }
- };
- Ext.KeyMap = function(el, config, eventName){
- this.el = Ext.get(el);
- this.eventName = eventName || "keydown";
- this.bindings = [];
- if(config){
- this.addBinding(config);
- }
- this.enable();
- };
- Ext.KeyMap.prototype = {
-
- stopEvent : false,
-
- addBinding : function(config){
- if(Ext.isArray(config)){
- for(var i = 0, len = config.length; i < len; i++){
- this.addBinding(config[i]);
- }
- return;
- }
- var keyCode = config.key,
- shift = config.shift,
- ctrl = config.ctrl,
- alt = config.alt,
- fn = config.fn || config.handler,
- scope = config.scope;
- if(typeof keyCode == "string"){
- var ks = [];
- var keyString = keyCode.toUpperCase();
- for(var j = 0, len = keyString.length; j < len; j++){
- ks.push(keyString.charCodeAt(j));
- }
- keyCode = ks;
- }
- var keyArray = Ext.isArray(keyCode);
-
- var handler = function(e){
- if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) && (!alt || e.altKey)){
- var k = e.getKey();
- if(keyArray){
- for(var i = 0, len = keyCode.length; i < len; i++){
- if(keyCode[i] == k){
- if(this.stopEvent){
- e.stopEvent();
- }
- fn.call(scope || window, k, e);
- return;
- }
- }
- }else{
- if(k == keyCode){
- if(this.stopEvent){
- e.stopEvent();
- }
- fn.call(scope || window, k, e);
- }
- }
- }
- };
- this.bindings.push(handler);
- },
-
- on : function(key, fn, scope){
- var keyCode, shift, ctrl, alt;
- if(typeof key == "object" && !Ext.isArray(key)){
- keyCode = key.key;
- shift = key.shift;
- ctrl = key.ctrl;
- alt = key.alt;
- }else{
- keyCode = key;
- }
- this.addBinding({
- key: keyCode,
- shift: shift,
- ctrl: ctrl,
- alt: alt,
- fn: fn,
- scope: scope
- })
- },
-
- handleKeyDown : function(e){
- if(this.enabled){
- var b = this.bindings;
- for(var i = 0, len = b.length; i < len; i++){
- b[i].call(this, e);
- }
- }
- },
-
- isEnabled : function(){
- return this.enabled;
- },
-
- enable: function(){
- if(!this.enabled){
- this.el.on(this.eventName, this.handleKeyDown, this);
- this.enabled = true;
- }
- },
-
- disable: function(){
- if(this.enabled){
- this.el.removeListener(this.eventName, this.handleKeyDown, this);
- this.enabled = false;
- }
- }
- };
- Ext.util.TextMetrics = function(){
- var shared;
- return {
-
- measure : function(el, text, fixedWidth){
- if(!shared){
- shared = Ext.util.TextMetrics.Instance(el, fixedWidth);
- }
- shared.bind(el);
- shared.setFixedWidth(fixedWidth || 'auto');
- return shared.getSize(text);
- },
-
- createInstance : function(el, fixedWidth){
- return Ext.util.TextMetrics.Instance(el, fixedWidth);
- }
- };
- }();
- Ext.util.TextMetrics.Instance = function(bindTo, fixedWidth){
- var ml = new Ext.Element(document.createElement('div'));
- document.body.appendChild(ml.dom);
- ml.position('absolute');
- ml.setLeftTop(-1000, -1000);
- ml.hide();
- if(fixedWidth){
- ml.setWidth(fixedWidth);
- }
- var instance = {
-
- getSize : function(text){
- ml.update(text);
- var s = ml.getSize();
- ml.update('');
- return s;
- },
-
- bind : function(el){
- ml.setStyle(
- Ext.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height')
- );
- },
-
- setFixedWidth : function(width){
- ml.setWidth(width);
- },
-
- getWidth : function(text){
- ml.dom.style.width = 'auto';
- return this.getSize(text).width;
- },
-
- getHeight : function(text){
- return this.getSize(text).height;
- }
- };
- instance.bind(bindTo);
- return instance;
- };
- Ext.Element.measureText = Ext.util.TextMetrics.measure;
- (function() {
- var Event=Ext.EventManager;
- var Dom=Ext.lib.Dom;
- Ext.dd.DragDrop = function(id, sGroup, config) {
- if(id) {
- this.init(id, sGroup, config);
- }
- };
- Ext.dd.DragDrop.prototype = {
-
- id: null,
-
- config: null,
-
- dragElId: null,
-
- handleElId: null,
-
- invalidHandleTypes: null,
-
- invalidHandleIds: null,
-
- invalidHandleClasses: null,
-
- startPageX: 0,
-
- startPageY: 0,
-
- groups: null,
-
- locked: false,
-
- lock: function() { this.locked = true; },
-
- unlock: function() { this.locked = false; },
-
- isTarget: true,
-
- padding: null,
-
- _domRef: null,
-
- __ygDragDrop: true,
-
- constrainX: false,
-
- constrainY: false,
-
- minX: 0,
-
- maxX: 0,
-
- minY: 0,
-
- maxY: 0,
-
- maintainOffset: false,
-
- xTicks: null,
-
- yTicks: null,
-
- primaryButtonOnly: true,
-
- available: false,
-
- hasOuterHandles: false,
-
- b4StartDrag: function(x, y) { },
-
- startDrag: function(x, y) { },
-
- b4Drag: function(e) { },
-
- onDrag: function(e) { },
-
- onDragEnter: function(e, id) { },
-
- b4DragOver: function(e) { },
-
- onDragOver: function(e, id) { },
-
- b4DragOut: function(e) { },
-
- onDragOut: function(e, id) { },
-
- b4DragDrop: function(e) { },
-
- onDragDrop: function(e, id) { },
-
- onInvalidDrop: function(e) { },
-
- b4EndDrag: function(e) { },
-
- endDrag: function(e) { },
-
- b4MouseDown: function(e) { },
-
- onMouseDown: function(e) { },
-
- onMouseUp: function(e) { },
-
- onAvailable: function () {
- },
-
- defaultPadding : {left:0, right:0, top:0, bottom:0},
-
- constrainTo : function(constrainTo, pad, inContent){
- if(typeof pad == "number"){
- pad = {left: pad, right:pad, top:pad, bottom:pad};
- }
- pad = pad || this.defaultPadding;
- var b = Ext.get(this.getEl()).getBox();
- var ce = Ext.get(constrainTo);
- var s = ce.getScroll();
- var c, cd = ce.dom;
- if(cd == document.body){
- c = { x: s.left, y: s.top, width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};
- }else{
- var xy = ce.getXY();
- c = {x : xy[0]+s.left, y: xy[1]+s.top, width: cd.clientWidth, height: cd.clientHeight};
- }
- var topSpace = b.y - c.y;
- var leftSpace = b.x - c.x;
- this.resetConstraints();
- this.setXConstraint(leftSpace - (pad.left||0),
- c.width - leftSpace - b.width - (pad.right||0),
- this.xTickSize
- );
- this.setYConstraint(topSpace - (pad.top||0),
- c.height - topSpace - b.height - (pad.bottom||0),
- this.yTickSize
- );
- },
-
- getEl: function() {
- if (!this._domRef) {
- this._domRef = Ext.getDom(this.id);
- }
- return this._domRef;
- },
-
- getDragEl: function() {
- return Ext.getDom(this.dragElId);
- },
-
- init: function(id, sGroup, config) {
- this.initTarget(id, sGroup, config);
- Event.on(this.id, "mousedown", this.handleMouseDown, this);
-
- },
-
- initTarget: function(id, sGroup, config) {
-
- this.config = config || {};
-
- this.DDM = Ext.dd.DDM;
-
- this.groups = {};
-
-
- if (typeof id !== "string") {
- id = Ext.id(id);
- }
-
- this.id = id;
-
- this.addToGroup((sGroup) ? sGroup : "default");
-
-
- this.handleElId = id;
-
- this.setDragElId(id);
-
- this.invalidHandleTypes = { A: "A" };
- this.invalidHandleIds = {};
- this.invalidHandleClasses = [];
- this.applyConfig();
- this.handleOnAvailable();
- },
-
- applyConfig: function() {
-
-
- this.padding = this.config.padding || [0, 0, 0, 0];
- this.isTarget = (this.config.isTarget !== false);
- this.maintainOffset = (this.config.maintainOffset);
- this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
- },
-
- handleOnAvailable: function() {
- this.available = true;
- this.resetConstraints();
- this.onAvailable();
- },
-
- setPadding: function(iTop, iRight, iBot, iLeft) {
-
- if (!iRight && 0 !== iRight) {
- this.padding = [iTop, iTop, iTop, iTop];
- } else if (!iBot && 0 !== iBot) {
- this.padding = [iTop, iRight, iTop, iRight];
- } else {
- this.padding = [iTop, iRight, iBot, iLeft];
- }
- },
-
- setInitPosition: function(diffX, diffY) {
- var el = this.getEl();
- if (!this.DDM.verifyEl(el)) {
- return;
- }
- var dx = diffX || 0;
- var dy = diffY || 0;
- var p = Dom.getXY( el );
- this.initPageX = p[0] - dx;
- this.initPageY = p[1] - dy;
- this.lastPageX = p[0];
- this.lastPageY = p[1];
- this.setStartPosition(p);
- },
-
- setStartPosition: function(pos) {
- var p = pos || Dom.getXY( this.getEl() );
- this.deltaSetXY = null;
- this.startPageX = p[0];
- this.startPageY = p[1];
- },
-
- addToGroup: function(sGroup) {
- this.groups[sGroup] = true;
- this.DDM.regDragDrop(this, sGroup);
- },
-
- removeFromGroup: function(sGroup) {
- if (this.groups[sGroup]) {
- delete this.groups[sGroup];
- }
- this.DDM.removeDDFromGroup(this, sGroup);
- },
-
- setDragElId: function(id) {
- this.dragElId = id;
- },
-
- setHandleElId: function(id) {
- if (typeof id !== "string") {
- id = Ext.id(id);
- }
- this.handleElId = id;
- this.DDM.regHandle(this.id, id);
- },
-
- setOuterHandleElId: function(id) {
- if (typeof id !== "string") {
- id = Ext.id(id);
- }
- Event.on(id, "mousedown",
- this.handleMouseDown, this);
- this.setHandleElId(id);
- this.hasOuterHandles = true;
- },
-
- unreg: function() {
- Event.un(this.id, "mousedown",
- this.handleMouseDown);
- this._domRef = null;
- this.DDM._remove(this);
- },
- destroy : function(){
- this.unreg();
- },
-
- isLocked: function() {
- return (this.DDM.isLocked() || this.locked);
- },
-
- handleMouseDown: function(e, oDD){
- if (this.primaryButtonOnly && e.button != 0) {
- return;
- }
- if (this.isLocked()) {
- return;
- }
- this.DDM.refreshCache(this.groups);
- var pt = new Ext.lib.Point(Ext.lib.Event.getPageX(e), Ext.lib.Event.getPageY(e));
- if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) ) {
- } else {
- if (this.clickValidator(e)) {
-
- this.setStartPosition();
- this.b4MouseDown(e);
- this.onMouseDown(e);
- this.DDM.handleMouseDown(e, this);
- this.DDM.stopEvent(e);
- } else {
- }
- }
- },
- clickValidator: function(e) {
- var target = e.getTarget();
- return ( this.isValidHandleChild(target) &&
- (this.id == this.handleElId ||
- this.DDM.handleWasClicked(target, this.id)) );
- },
-
- addInvalidHandleType: function(tagName) {
- var type = tagName.toUpperCase();
- this.invalidHandleTypes[type] = type;
- },
-
- addInvalidHandleId: function(id) {
- if (typeof id !== "string") {
- id = Ext.id(id);
- }
- this.invalidHandleIds[id] = id;
- },
-
- addInvalidHandleClass: function(cssClass) {
- this.invalidHandleClasses.push(cssClass);
- },
-
- removeInvalidHandleType: function(tagName) {
- var type = tagName.toUpperCase();
-
- delete this.invalidHandleTypes[type];
- },
-
- removeInvalidHandleId: function(id) {
- if (typeof id !== "string") {
- id = Ext.id(id);
- }
- delete this.invalidHandleIds[id];
- },
-
- removeInvalidHandleClass: function(cssClass) {
- for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {
- if (this.invalidHandleClasses[i] == cssClass) {
- delete this.invalidHandleClasses[i];
- }
- }
- },
-
- isValidHandleChild: function(node) {
- var valid = true;
-
- var nodeName;
- try {
- nodeName = node.nodeName.toUpperCase();
- } catch(e) {
- nodeName = node.nodeName;
- }
- valid = valid && !this.invalidHandleTypes[nodeName];
- valid = valid && !this.invalidHandleIds[node.id];
- for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {
- valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);
- }
- return valid;
- },
-
- setXTicks: function(iStartX, iTickSize) {
- this.xTicks = [];
- this.xTickSize = iTickSize;
- var tickMap = {};
- for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {
- if (!tickMap[i]) {
- this.xTicks[this.xTicks.length] = i;
- tickMap[i] = true;
- }
- }
- for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {
- if (!tickMap[i]) {
- this.xTicks[this.xTicks.length] = i;
- tickMap[i] = true;
- }
- }
- this.xTicks.sort(this.DDM.numericSort) ;
- },
-
- setYTicks: function(iStartY, iTickSize) {
- this.yTicks = [];
- this.yTickSize = iTickSize;
- var tickMap = {};
- for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {
- if (!tickMap[i]) {
- this.yTicks[this.yTicks.length] = i;
- tickMap[i] = true;
- }
- }
- for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {
- if (!tickMap[i]) {
- this.yTicks[this.yTicks.length] = i;
- tickMap[i] = true;
- }
- }
- this.yTicks.sort(this.DDM.numericSort) ;
- },
-
- setXConstraint: function(iLeft, iRight, iTickSize) {
- this.leftConstraint = iLeft;
- this.rightConstraint = iRight;
- this.minX = this.initPageX - iLeft;
- this.maxX = this.initPageX + iRight;
- if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }
- this.constrainX = true;
- },
-
- clearConstraints: function() {
- this.constrainX = false;
- this.constrainY = false;
- this.clearTicks();
- },
-
- clearTicks: function() {
- this.xTicks = null;
- this.yTicks = null;
- this.xTickSize = 0;
- this.yTickSize = 0;
- },
-
- setYConstraint: function(iUp, iDown, iTickSize) {
- this.topConstraint = iUp;
- this.bottomConstraint = iDown;
- this.minY = this.initPageY - iUp;
- this.maxY = this.initPageY + iDown;
- if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }
- this.constrainY = true;
- },
-
- resetConstraints: function() {
-
- if (this.initPageX || this.initPageX === 0) {
-
- var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
- var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
- this.setInitPosition(dx, dy);
-
- } else {
- this.setInitPosition();
- }
- if (this.constrainX) {
- this.setXConstraint( this.leftConstraint,
- this.rightConstraint,
- this.xTickSize );
- }
- if (this.constrainY) {
- this.setYConstraint( this.topConstraint,
- this.bottomConstraint,
- this.yTickSize );
- }
- },
-
- getTick: function(val, tickArray) {
- if (!tickArray) {
-
-
- return val;
- } else if (tickArray[0] >= val) {
-
-
- return tickArray[0];
- } else {
- for (var i=0, len=tickArray.length; i<len; ++i) {
- var next = i + 1;
- if (tickArray[next] && tickArray[next] >= val) {
- var diff1 = val - tickArray[i];
- var diff2 = tickArray[next] - val;
- return (diff2 > diff1) ? tickArray[i] : tickArray[next];
- }
- }
-
-
- return tickArray[tickArray.length - 1];
- }
- },
-
- toString: function() {
- return ("DragDrop " + this.id);
- }
- };
- })();
- if (!Ext.dd.DragDropMgr) {
- Ext.dd.DragDropMgr = function() {
- var Event = Ext.EventManager;
- return {
-
- ids: {},
-
- handleIds: {},
-
- dragCurrent: null,
-
- dragOvers: {},
-
- deltaX: 0,
-
- deltaY: 0,
-
- preventDefault: true,
-
- stopPropagation: true,
-
- initalized: false,
-
- locked: false,
-
- init: function() {
- this.initialized = true;
- },
-
- POINT: 0,
-
- INTERSECT: 1,
-
- mode: 0,
-
- _execOnAll: function(sMethod, args) {
- for (var i in this.ids) {
- for (var j in this.ids[i]) {
- var oDD = this.ids[i][j];
- if (! this.isTypeOfDD(oDD)) {
- continue;
- }
- oDD[sMethod].apply(oDD, args);
- }
- }
- },
-
- _onLoad: function() {
- this.init();
- Event.on(document, "mouseup", this.handleMouseUp, this, true);
- Event.on(document, "mousemove", this.handleMouseMove, this, true);
- Event.on(window, "unload", this._onUnload, this, true);
- Event.on(window, "resize", this._onResize, this, true);
-
- },
-
- _onResize: function(e) {
- this._execOnAll("resetConstraints", []);
- },
-
- lock: function() { this.locked = true; },
-
- unlock: function() { this.locked = false; },
-
- isLocked: function() { return this.locked; },
-
- locationCache: {},
-
- useCache: true,
-
- clickPixelThresh: 3,
-
- clickTimeThresh: 350,
-
- dragThreshMet: false,
-
- clickTimeout: null,
-
- startX: 0,
-
- startY: 0,
-
- regDragDrop: function(oDD, sGroup) {
- if (!this.initialized) { this.init(); }
- if (!this.ids[sGroup]) {
- this.ids[sGroup] = {};
- }
- this.ids[sGroup][oDD.id] = oDD;
- },
-
- removeDDFromGroup: function(oDD, sGroup) {
- if (!this.ids[sGroup]) {
- this.ids[sGroup] = {};
- }
- var obj = this.ids[sGroup];
- if (obj && obj[oDD.id]) {
- delete obj[oDD.id];
- }
- },
-
- _remove: function(oDD) {
- for (var g in oDD.groups) {
- if (g && this.ids[g][oDD.id]) {
- delete this.ids[g][oDD.id];
- }
- }
- delete this.handleIds[oDD.id];
- },
-
- regHandle: function(sDDId, sHandleId) {
- if (!this.handleIds[sDDId]) {
- this.handleIds[sDDId] = {};
- }
- this.handleIds[sDDId][sHandleId] = sHandleId;
- },
-
- isDragDrop: function(id) {
- return ( this.getDDById(id) ) ? true : false;
- },
-
- getRelated: function(p_oDD, bTargetsOnly) {
- var oDDs = [];
- for (var i in p_oDD.groups) {
- for (j in this.ids[i]) {
- var dd = this.ids[i][j];
- if (! this.isTypeOfDD(dd)) {
- continue;
- }
- if (!bTargetsOnly || dd.isTarget) {
- oDDs[oDDs.length] = dd;
- }
- }
- }
- return oDDs;
- },
-
- isLegalTarget: function (oDD, oTargetDD) {
- var targets = this.getRelated(oDD, true);
- for (var i=0, len=targets.length;i<len;++i) {
- if (targets[i].id == oTargetDD.id) {
- return true;
- }
- }
- return false;
- },
-
- isTypeOfDD: function (oDD) {
- return (oDD && oDD.__ygDragDrop);
- },
-
- isHandle: function(sDDId, sHandleId) {
- return ( this.handleIds[sDDId] &&
- this.handleIds[sDDId][sHandleId] );
- },
-
- getDDById: function(id) {
- for (var i in this.ids) {
- if (this.ids[i][id]) {
- return this.ids[i][id];
- }
- }
- return null;
- },
-
- handleMouseDown: function(e, oDD) {
- if(Ext.QuickTips){
- Ext.QuickTips.disable();
- }
- this.currentTarget = e.getTarget();
- this.dragCurrent = oDD;
- var el = oDD.getEl();
-
- this.startX = e.getPageX();
- this.startY = e.getPageY();
- this.deltaX = this.startX - el.offsetLeft;
- this.deltaY = this.startY - el.offsetTop;
- this.dragThreshMet = false;
- this.clickTimeout = setTimeout(
- function() {
- var DDM = Ext.dd.DDM;
- DDM.startDrag(DDM.startX, DDM.startY);
- },
- this.clickTimeThresh );
- },
-
- startDrag: function(x, y) {
- clearTimeout(this.clickTimeout);
- if (this.dragCurrent) {
- this.dragCurrent.b4StartDrag(x, y);
- this.dragCurrent.startDrag(x, y);
- }
- this.dragThreshMet = true;
- },
-
- handleMouseUp: function(e) {
- if(Ext.QuickTips){
- Ext.QuickTips.enable();
- }
- if (! this.dragCurrent) {
- return;
- }
- clearTimeout(this.clickTimeout);
- if (this.dragThreshMet) {
- this.fireEvents(e, true);
- } else {
- }
- this.stopDrag(e);
- this.stopEvent(e);
- },
-
- stopEvent: function(e){
- if(this.stopPropagation) {
- e.stopPropagation();
- }
- if (this.preventDefault) {
- e.preventDefault();
- }
- },
-
- stopDrag: function(e) {
-
- if (this.dragCurrent) {
- if (this.dragThreshMet) {
- this.dragCurrent.b4EndDrag(e);
- this.dragCurrent.endDrag(e);
- }
- this.dragCurrent.onMouseUp(e);
- }
- this.dragCurrent = null;
- this.dragOvers = {};
- },
-
- handleMouseMove: function(e) {
- if (! this.dragCurrent) {
- return true;
- }
-
-
- if (Ext.isIE && (e.button !== 0 && e.button !== 1 && e.button !== 2)) {
- this.stopEvent(e);
- return this.handleMouseUp(e);
- }
- if (!this.dragThreshMet) {
- var diffX = Math.abs(this.startX - e.getPageX());
- var diffY = Math.abs(this.startY - e.getPageY());
- if (diffX > this.clickPixelThresh ||
- diffY > this.clickPixelThresh) {
- this.startDrag(this.startX, this.startY);
- }
- }
- if (this.dragThreshMet) {
- this.dragCurrent.b4Drag(e);
- this.dragCurrent.onDrag(e);
- if(!this.dragCurrent.moveOnly){
- this.fireEvents(e, false);
- }
- }
- this.stopEvent(e);
- return true;
- },
-
- fireEvents: function(e, isDrop) {
- var dc = this.dragCurrent;
-
-
- if (!dc || dc.isLocked()) {
- return;
- }
- var pt = e.getPoint();
-
- var oldOvers = [];
- var outEvts = [];
- var overEvts = [];
- var dropEvts = [];
- var enterEvts = [];
-
-
- for (var i in this.dragOvers) {
- var ddo = this.dragOvers[i];
- if (! this.isTypeOfDD(ddo)) {
- continue;
- }
- if (! this.isOverTarget(pt, ddo, this.mode)) {
- outEvts.push( ddo );
- }
- oldOvers[i] = true;
- delete this.dragOvers[i];
- }
- for (var sGroup in dc.groups) {
- if ("string" != typeof sGroup) {
- continue;
- }
- for (i in this.ids[sGroup]) {
- var oDD = this.ids[sGroup][i];
- if (! this.isTypeOfDD(oDD)) {
- continue;
- }
- if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {
- if (this.isOverTarget(pt, oDD, this.mode)) {
-
- if (isDrop) {
- dropEvts.push( oDD );
-
- } else {
-
- if (!oldOvers[oDD.id]) {
- enterEvts.push( oDD );
-
- } else {
- overEvts.push( oDD );
- }
- this.dragOvers[oDD.id] = oDD;
- }
- }
- }
- }
- }
- if (this.mode) {
- if (outEvts.length) {
- dc.b4DragOut(e, outEvts);
- dc.onDragOut(e, outEvts);
- }
- if (enterEvts.length) {
- dc.onDragEnter(e, enterEvts);
- }
- if (overEvts.length) {
- dc.b4DragOver(e, overEvts);
- dc.onDragOver(e, overEvts);
- }
- if (dropEvts.length) {
- dc.b4DragDrop(e, dropEvts);
- dc.onDragDrop(e, dropEvts);
- }
- } else {
-
- var len = 0;
- for (i=0, len=outEvts.length; i<len; ++i) {
- dc.b4DragOut(e, outEvts[i].id);
- dc.onDragOut(e, outEvts[i].id);
- }
-
- for (i=0,len=enterEvts.length; i<len; ++i) {
-
- dc.onDragEnter(e, enterEvts[i].id);
- }
-
- for (i=0,len=overEvts.length; i<len; ++i) {
- dc.b4DragOver(e, overEvts[i].id);
- dc.onDragOver(e, overEvts[i].id);
- }
-
- for (i=0, len=dropEvts.length; i<len; ++i) {
- dc.b4DragDrop(e, dropEvts[i].id);
- dc.onDragDrop(e, dropEvts[i].id);
- }
- }
-
- if (isDrop && !dropEvts.length) {
- dc.onInvalidDrop(e);
- }
- },
-
- getBestMatch: function(dds) {
- var winner = null;
-
-
-
-
-
- var len = dds.length;
- if (len == 1) {
- winner = dds[0];
- } else {
-
- for (var i=0; i<len; ++i) {
- var dd = dds[i];
-
-
-
- if (dd.cursorIsOver) {
- winner = dd;
- break;
-
- } else {
- if (!winner ||
- winner.overlap.getArea() < dd.overlap.getArea()) {
- winner = dd;
- }
- }
- }
- }
- return winner;
- },
-
- refreshCache: function(groups) {
- for (var sGroup in groups) {
- if ("string" != typeof sGroup) {
- continue;
- }
- for (var i in this.ids[sGroup]) {
- var oDD = this.ids[sGroup][i];
- if (this.isTypeOfDD(oDD)) {
-
- var loc = this.getLocation(oDD);
- if (loc) {
- this.locationCache[oDD.id] = loc;
- } else {
- delete this.locationCache[oDD.id];
-
-
-
- }
- }
- }
- }
- },
-
- verifyEl: function(el) {
- if (el) {
- var parent;
- if(Ext.isIE){
- try{
- parent = el.offsetParent;
- }catch(e){}
- }else{
- parent = el.offsetParent;
- }
- if (parent) {
- return true;
- }
- }
- return false;
- },
-
- getLocation: function(oDD) {
- if (! this.isTypeOfDD(oDD)) {
- return null;
- }
- var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;
- try {
- pos= Ext.lib.Dom.getXY(el);
- } catch (e) { }
- if (!pos) {
- return null;
- }
- x1 = pos[0];
- x2 = x1 + el.offsetWidth;
- y1 = pos[1];
- y2 = y1 + el.offsetHeight;
- t = y1 - oDD.padding[0];
- r = x2 + oDD.padding[1];
- b = y2 + oDD.padding[2];
- l = x1 - oDD.padding[3];
- return new Ext.lib.Region( t, r, b, l );
- },
-
- isOverTarget: function(pt, oTarget, intersect) {
-
- var loc = this.locationCache[oTarget.id];
- if (!loc || !this.useCache) {
- loc = this.getLocation(oTarget);
- this.locationCache[oTarget.id] = loc;
- }
- if (!loc) {
- return false;
- }
- oTarget.cursorIsOver = loc.contains( pt );
-
-
-
-
-
- var dc = this.dragCurrent;
- if (!dc || !dc.getTargetCoord ||
- (!intersect && !dc.constrainX && !dc.constrainY)) {
- return oTarget.cursorIsOver;
- }
- oTarget.overlap = null;
-
-
-
-
- var pos = dc.getTargetCoord(pt.x, pt.y);
- var el = dc.getDragEl();
- var curRegion = new Ext.lib.Region( pos.y,
- pos.x + el.offsetWidth,
- pos.y + el.offsetHeight,
- pos.x );
- var overlap = curRegion.intersect(loc);
- if (overlap) {
- oTarget.overlap = overlap;
- return (intersect) ? true : oTarget.cursorIsOver;
- } else {
- return false;
- }
- },
-
- _onUnload: function(e, me) {
- Ext.dd.DragDropMgr.unregAll();
- },
-
- unregAll: function() {
- if (this.dragCurrent) {
- this.stopDrag();
- this.dragCurrent = null;
- }
- this._execOnAll("unreg", []);
- for (var i in this.elementCache) {
- delete this.elementCache[i];
- }
- this.elementCache = {};
- this.ids = {};
- },
-
- elementCache: {},
-
- getElWrapper: function(id) {
- var oWrapper = this.elementCache[id];
- if (!oWrapper || !oWrapper.el) {
- oWrapper = this.elementCache[id] =
- new this.ElementWrapper(Ext.getDom(id));
- }
- return oWrapper;
- },
-
- getElement: function(id) {
- return Ext.getDom(id);
- },
-
- getCss: function(id) {
- var el = Ext.getDom(id);
- return (el) ? el.style : null;
- },
-
- ElementWrapper: function(el) {
-
- this.el = el || null;
-
- this.id = this.el && el.id;
-
- this.css = this.el && el.style;
- },
-
- getPosX: function(el) {
- return Ext.lib.Dom.getX(el);
- },
-
- getPosY: function(el) {
- return Ext.lib.Dom.getY(el);
- },
-
- swapNode: function(n1, n2) {
- if (n1.swapNode) {
- n1.swapNode(n2);
- } else {
- var p = n2.parentNode;
- var s = n2.nextSibling;
- if (s == n1) {
- p.insertBefore(n1, n2);
- } else if (n2 == n1.nextSibling) {
- p.insertBefore(n2, n1);
- } else {
- n1.parentNode.replaceChild(n2, n1);
- p.insertBefore(n1, s);
- }
- }
- },
-
- getScroll: function () {
- var t, l, dde=document.documentElement, db=document.body;
- if (dde && (dde.scrollTop || dde.scrollLeft)) {
- t = dde.scrollTop;
- l = dde.scrollLeft;
- } else if (db) {
- t = db.scrollTop;
- l = db.scrollLeft;
- } else {
- }
- return { top: t, left: l };
- },
-
- getStyle: function(el, styleProp) {
- return Ext.fly(el).getStyle(styleProp);
- },
-
- getScrollTop: function () { return this.getScroll().top; },
-
- getScrollLeft: function () { return this.getScroll().left; },
-
- moveToEl: function (moveEl, targetEl) {
- var aCoord = Ext.lib.Dom.getXY(targetEl);
- Ext.lib.Dom.setXY(moveEl, aCoord);
- },
-
- numericSort: function(a, b) { return (a - b); },
-
- _timeoutCount: 0,
-
- _addListeners: function() {
- var DDM = Ext.dd.DDM;
- if ( Ext.lib.Event && document ) {
- DDM._onLoad();
- } else {
- if (DDM._timeoutCount > 2000) {
- } else {
- setTimeout(DDM._addListeners, 10);
- if (document && document.body) {
- DDM._timeoutCount += 1;
- }
- }
- }
- },
-
- handleWasClicked: function(node, id) {
- if (this.isHandle(id, node.id)) {
- return true;
- } else {
-
- var p = node.parentNode;
- while (p) {
- if (this.isHandle(id, p.id)) {
- return true;
- } else {
- p = p.parentNode;
- }
- }
- }
- return false;
- }
- };
- }();
- Ext.dd.DDM = Ext.dd.DragDropMgr;
- Ext.dd.DDM._addListeners();
- }
- Ext.dd.DD = function(id, sGroup, config) {
- if (id) {
- this.init(id, sGroup, config);
- }
- };
- Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {
-
- scroll: true,
-
- autoOffset: function(iPageX, iPageY) {
- var x = iPageX - this.startPageX;
- var y = iPageY - this.startPageY;
- this.setDelta(x, y);
- },
-
- setDelta: function(iDeltaX, iDeltaY) {
- this.deltaX = iDeltaX;
- this.deltaY = iDeltaY;
- },
-
- setDragElPos: function(iPageX, iPageY) {
-
-
- var el = this.getDragEl();
- this.alignElWithMouse(el, iPageX, iPageY);
- },
-
- alignElWithMouse: function(el, iPageX, iPageY) {
- var oCoord = this.getTargetCoord(iPageX, iPageY);
- var fly = el.dom ? el : Ext.fly(el, '_dd');
- if (!this.deltaSetXY) {
- var aCoord = [oCoord.x, oCoord.y];
- fly.setXY(aCoord);
- var newLeft = fly.getLeft(true);
- var newTop = fly.getTop(true);
- this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];
- } else {
- fly.setLeftTop(oCoord.x + this.deltaSetXY[0], oCoord.y + this.deltaSetXY[1]);
- }
- this.cachePosition(oCoord.x, oCoord.y);
- this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);
- return oCoord;
- },
-
- cachePosition: function(iPageX, iPageY) {
- if (iPageX) {
- this.lastPageX = iPageX;
- this.lastPageY = iPageY;
- } else {
- var aCoord = Ext.lib.Dom.getXY(this.getEl());
- this.lastPageX = aCoord[0];
- this.lastPageY = aCoord[1];
- }
- },
-
- autoScroll: function(x, y, h, w) {
- if (this.scroll) {
-
- var clientH = Ext.lib.Dom.getViewHeight();
-
- var clientW = Ext.lib.Dom.getViewWidth();
-
- var st = this.DDM.getScrollTop();
-
- var sl = this.DDM.getScrollLeft();
-
- var bot = h + y;
-
- var right = w + x;
-
-
-
- var toBot = (clientH + st - y - this.deltaY);
-
- var toRight = (clientW + sl - x - this.deltaX);
-
-
- var thresh = 40;
-
-
-
- var scrAmt = (document.all) ? 80 : 30;
-
-
- if ( bot > clientH && toBot < thresh ) {
- window.scrollTo(sl, st + scrAmt);
- }
-
-
- if ( y < st && st > 0 && y - st < thresh ) {
- window.scrollTo(sl, st - scrAmt);
- }
-
-
- if ( right > clientW && toRight < thresh ) {
- window.scrollTo(sl + scrAmt, st);
- }
-
-
- if ( x < sl && sl > 0 && x - sl < thresh ) {
- window.scrollTo(sl - scrAmt, st);
- }
- }
- },
-
- getTargetCoord: function(iPageX, iPageY) {
- var x = iPageX - this.deltaX;
- var y = iPageY - this.deltaY;
- if (this.constrainX) {
- if (x < this.minX) { x = this.minX; }
- if (x > this.maxX) { x = this.maxX; }
- }
- if (this.constrainY) {
- if (y < this.minY) { y = this.minY; }
- if (y > this.maxY) { y = this.maxY; }
- }
- x = this.getTick(x, this.xTicks);
- y = this.getTick(y, this.yTicks);
- return {x:x, y:y};
- },
-
- applyConfig: function() {
- Ext.dd.DD.superclass.applyConfig.call(this);
- this.scroll = (this.config.scroll !== false);
- },
-
- b4MouseDown: function(e) {
-
- this.autoOffset(e.getPageX(),
- e.getPageY());
- },
-
- b4Drag: function(e) {
- this.setDragElPos(e.getPageX(),
- e.getPageY());
- },
- toString: function() {
- return ("DD " + this.id);
- }
-
-
-
-
- });
- Ext.dd.DDProxy = function(id, sGroup, config) {
- if (id) {
- this.init(id, sGroup, config);
- this.initFrame();
- }
- };
- Ext.dd.DDProxy.dragElId = "ygddfdiv";
- Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {
-
- resizeFrame: true,
-
- centerFrame: false,
-
- createFrame: function() {
- var self = this;
- var body = document.body;
- if (!body || !body.firstChild) {
- setTimeout( function() { self.createFrame(); }, 50 );
- return;
- }
- var div = this.getDragEl();
- if (!div) {
- div = document.createElement("div");
- div.id = this.dragElId;
- var s = div.style;
- s.position = "absolute";
- s.visibility = "hidden";
- s.cursor = "move";
- s.border = "2px solid #aaa";
- s.zIndex = 999;
-
-
-
- body.insertBefore(div, body.firstChild);
- }
- },
-
- initFrame: function() {
- this.createFrame();
- },
- applyConfig: function() {
- Ext.dd.DDProxy.superclass.applyConfig.call(this);
- this.resizeFrame = (this.config.resizeFrame !== false);
- this.centerFrame = (this.config.centerFrame);
- this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId);
- },
-
- showFrame: function(iPageX, iPageY) {
- var el = this.getEl();
- var dragEl = this.getDragEl();
- var s = dragEl.style;
- this._resizeProxy();
- if (this.centerFrame) {
- this.setDelta( Math.round(parseInt(s.width, 10)/2),
- Math.round(parseInt(s.height, 10)/2) );
- }
- this.setDragElPos(iPageX, iPageY);
- Ext.fly(dragEl).show();
- },
-
- _resizeProxy: function() {
- if (this.resizeFrame) {
- var el = this.getEl();
- Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight);
- }
- },
-
- b4MouseDown: function(e) {
- var x = e.getPageX();
- var y = e.getPageY();
- this.autoOffset(x, y);
- this.setDragElPos(x, y);
- },
-
- b4StartDrag: function(x, y) {
-
- this.showFrame(x, y);
- },
-
- b4EndDrag: function(e) {
- Ext.fly(this.getDragEl()).hide();
- },
-
-
-
- endDrag: function(e) {
- var lel = this.getEl();
- var del = this.getDragEl();
-
- del.style.visibility = "";
- this.beforeMove();
-
-
- lel.style.visibility = "hidden";
- Ext.dd.DDM.moveToEl(lel, del);
- del.style.visibility = "hidden";
- lel.style.visibility = "";
- this.afterDrag();
- },
- beforeMove : function(){
- },
- afterDrag : function(){
- },
- toString: function() {
- return ("DDProxy " + this.id);
- }
- });
- Ext.dd.DDTarget = function(id, sGroup, config) {
- if (id) {
- this.initTarget(id, sGroup, config);
- }
- };
- Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {
- toString: function() {
- return ("DDTarget " + this.id);
- }
- });
- Ext.dd.DragTracker = function(config){
- Ext.apply(this, config);
- this.addEvents(
- 'mousedown',
- 'mouseup',
- 'mousemove',
- 'dragstart',
- 'dragend',
- 'drag'
- );
- this.dragRegion = new Ext.lib.Region(0,0,0,0);
- if(this.el){
- this.initEl(this.el);
- }
- }
- Ext.extend(Ext.dd.DragTracker, Ext.util.Observable, {
- active: false,
- tolerance: 5,
- autoStart: false,
- initEl: function(el){
- this.el = Ext.get(el);
- el.on('mousedown', this.onMouseDown, this,
- this.delegate ? {delegate: this.delegate} : undefined);
- },
- destroy : function(){
- this.el.un('mousedown', this.onMouseDown, this);
- },
- onMouseDown: function(e, target){
- if(this.fireEvent('mousedown', this, e) !== false && this.onBeforeStart(e) !== false){
- this.startXY = this.lastXY = e.getXY();
- this.dragTarget = this.delegate ? target : this.el.dom;
- e.preventDefault();
- var doc = Ext.getDoc();
- doc.on('mouseup', this.onMouseUp, this);
- doc.on('mousemove', this.onMouseMove, this);
- doc.on('selectstart', this.stopSelect, this);
- if(this.autoStart){
- this.timer = this.triggerStart.defer(this.autoStart === true ? 1000 : this.autoStart, this);
- }
- }
- },
- onMouseMove: function(e, target){
- e.preventDefault();
- var xy = e.getXY(), s = this.startXY;
- this.lastXY = xy;
- if(!this.active){
- if(Math.abs(s[0]-xy[0]) > this.tolerance || Math.abs(s[1]-xy[1]) > this.tolerance){
- this.triggerStart();
- }else{
- return;
- }
- }
- this.fireEvent('mousemove', this, e);
- this.onDrag(e);
- this.fireEvent('drag', this, e);
- },
- onMouseUp: function(e){
- var doc = Ext.getDoc();
- doc.un('mousemove', this.onMouseMove, this);
- doc.un('mouseup', this.onMouseUp, this);
- doc.un('selectstart', this.stopSelect, this);
- e.preventDefault();
- this.clearStart();
- this.active = false;
- delete this.elRegion;
- this.fireEvent('mouseup', this, e);
- this.onEnd(e);
- this.fireEvent('dragend', this, e);
- },
- triggerStart: function(isTimer){
- this.clearStart();
- this.active = true;
- this.onStart(this.startXY);
- this.fireEvent('dragstart', this, this.startXY);
- },
- clearStart : function(){
- if(this.timer){
- clearTimeout(this.timer);
- delete this.timer;
- }
- },
- stopSelect : function(e){
- e.stopEvent();
- return false;
- },
- onBeforeStart : function(e){
- },
- onStart : function(xy){
- },
- onDrag : function(e){
- },
- onEnd : function(e){
- },
- getDragTarget : function(){
- return this.dragTarget;
- },
- getDragCt : function(){
- return this.el;
- },
- getXY : function(constrain){
- return constrain ?
- this.constrainModes[constrain].call(this, this.lastXY) : this.lastXY;
- },
- getOffset : function(constrain){
- var xy = this.getXY(constrain);
- var s = this.startXY;
- return [s[0]-xy[0], s[1]-xy[1]];
- },
- constrainModes: {
- 'point' : function(xy){
- if(!this.elRegion){
- this.elRegion = this.getDragCt().getRegion();
- }
- var dr = this.dragRegion;
- dr.left = xy[0];
- dr.top = xy[1];
- dr.right = xy[0];
- dr.bottom = xy[1];
- dr.constrainTo(this.elRegion);
- return [dr.left, dr.top];
- }
- }
- });
- Ext.dd.ScrollManager = function(){
- var ddm = Ext.dd.DragDropMgr;
- var els = {};
- var dragEl = null;
- var proc = {};
-
- var onStop = function(e){
- dragEl = null;
- clearProc();
- };
-
- var triggerRefresh = function(){
- if(ddm.dragCurrent){
- ddm.refreshCache(ddm.dragCurrent.groups);
- }
- };
-
- var doScroll = function(){
- if(ddm.dragCurrent){
- var dds = Ext.dd.ScrollManager;
- var inc = proc.el.ddScrollConfig ?
- proc.el.ddScrollConfig.increment : dds.increment;
- if(!dds.animate){
- if(proc.el.scroll(proc.dir, inc)){
- triggerRefresh();
- }
- }else{
- proc.el.scroll(proc.dir, inc, true, dds.animDuration, triggerRefresh);
- }
- }
- };
-
- var clearProc = function(){
- if(proc.id){
- clearInterval(proc.id);
- }
- proc.id = 0;
- proc.el = null;
- proc.dir = "";
- };
-
- var startProc = function(el, dir){
- clearProc();
- proc.el = el;
- proc.dir = dir;
- proc.id = setInterval(doScroll, Ext.dd.ScrollManager.frequency);
- };
-
- var onFire = function(e, isDrop){
- if(isDrop || !ddm.dragCurrent){ return; }
- var dds = Ext.dd.ScrollManager;
- if(!dragEl || dragEl != ddm.dragCurrent){
- dragEl = ddm.dragCurrent;
-
- dds.refreshCache();
- }
-
- var xy = Ext.lib.Event.getXY(e);
- var pt = new Ext.lib.Point(xy[0], xy[1]);
- for(var id in els){
- var el = els[id], r = el._region;
- var c = el.ddScrollConfig ? el.ddScrollConfig : dds;
- if(r && r.contains(pt) && el.isScrollable()){
- if(r.bottom - pt.y <= c.vthresh){
- if(proc.el != el){
- startProc(el, "down");
- }
- return;
- }else if(r.right - pt.x <= c.hthresh){
- if(proc.el != el){
- startProc(el, "left");
- }
- return;
- }else if(pt.y - r.top <= c.vthresh){
- if(proc.el != el){
- startProc(el, "up");
- }
- return;
- }else if(pt.x - r.left <= c.hthresh){
- if(proc.el != el){
- startProc(el, "right");
- }
- return;
- }
- }
- }
- clearProc();
- };
-
- ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm);
- ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm);
-
- return {
-
- register : function(el){
- if(Ext.isArray(el)){
- for(var i = 0, len = el.length; i < len; i++) {
- this.register(el[i]);
- }
- }else{
- el = Ext.get(el);
- els[el.id] = el;
- }
- },
-
-
- unregister : function(el){
- if(Ext.isArray(el)){
- for(var i = 0, len = el.length; i < len; i++) {
- this.unregister(el[i]);
- }
- }else{
- el = Ext.get(el);
- delete els[el.id];
- }
- },
-
-
- vthresh : 25,
-
- hthresh : 25,
-
- increment : 100,
-
-
- frequency : 500,
-
-
- animate: true,
-
-
- animDuration: .4,
-
-
- refreshCache : function(){
- for(var id in els){
- if(typeof els[id] == 'object'){
- els[id]._region = els[id].getRegion();
- }
- }
- }
- };
- }();
- Ext.dd.Registry = function(){
- var elements = {};
- var handles = {};
- var autoIdSeed = 0;
- var getId = function(el, autogen){
- if(typeof el == "string"){
- return el;
- }
- var id = el.id;
- if(!id && autogen !== false){
- id = "extdd-" + (++autoIdSeed);
- el.id = id;
- }
- return id;
- };
-
- return {
-
- register : function(el, data){
- data = data || {};
- if(typeof el == "string"){
- el = document.getElementById(el);
- }
- data.ddel = el;
- elements[getId(el)] = data;
- if(data.isHandle !== false){
- handles[data.ddel.id] = data;
- }
- if(data.handles){
- var hs = data.handles;
- for(var i = 0, len = hs.length; i < len; i++){
- handles[getId(hs[i])] = data;
- }
- }
- },
-
- unregister : function(el){
- var id = getId(el, false);
- var data = elements[id];
- if(data){
- delete elements[id];
- if(data.handles){
- var hs = data.handles;
- for(var i = 0, len = hs.length; i < len; i++){
- delete handles[getId(hs[i], false)];
- }
- }
- }
- },
-
- getHandle : function(id){
- if(typeof id != "string"){
- id = id.id;
- }
- return handles[id];
- },
-
- getHandleFromEvent : function(e){
- var t = Ext.lib.Event.getTarget(e);
- return t ? handles[t.id] : null;
- },
-
- getTarget : function(id){
- if(typeof id != "string"){
- id = id.id;
- }
- return elements[id];
- },
-
- getTargetFromEvent : function(e){
- var t = Ext.lib.Event.getTarget(e);
- return t ? elements[t.id] || handles[t.id] : null;
- }
- };
- }();
- Ext.dd.StatusProxy = function(config){
- Ext.apply(this, config);
- this.id = this.id || Ext.id();
- this.el = new Ext.Layer({
- dh: {
- id: this.id, tag: "div", cls: "x-dd-drag-proxy "+this.dropNotAllowed, children: [
- {tag: "div", cls: "x-dd-drop-icon"},
- {tag: "div", cls: "x-dd-drag-ghost"}
- ]
- },
- shadow: !config || config.shadow !== false
- });
- this.ghost = Ext.get(this.el.dom.childNodes[1]);
- this.dropStatus = this.dropNotAllowed;
- };
- Ext.dd.StatusProxy.prototype = {
-
- dropAllowed : "x-dd-drop-ok",
-
- dropNotAllowed : "x-dd-drop-nodrop",
-
- setStatus : function(cssClass){
- cssClass = cssClass || this.dropNotAllowed;
- if(this.dropStatus != cssClass){
- this.el.replaceClass(this.dropStatus, cssClass);
- this.dropStatus = cssClass;
- }
- },
-
- reset : function(clearGhost){
- this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed;
- this.dropStatus = this.dropNotAllowed;
- if(clearGhost){
- this.ghost.update("");
- }
- },
-
- update : function(html){
- if(typeof html == "string"){
- this.ghost.update(html);
- }else{
- this.ghost.update("");
- html.style.margin = "0";
- this.ghost.dom.appendChild(html);
- }
- },
-
- getEl : function(){
- return this.el;
- },
-
- getGhost : function(){
- return this.ghost;
- },
-
- hide : function(clear){
- this.el.hide();
- if(clear){
- this.reset(true);
- }
- },
-
- stop : function(){
- if(this.anim && this.anim.isAnimated && this.anim.isAnimated()){
- this.anim.stop();
- }
- },
-
- show : function(){
- this.el.show();
- },
-
- sync : function(){
- this.el.sync();
- },
-
- repair : function(xy, callback, scope){
- this.callback = callback;
- this.scope = scope;
- if(xy && this.animRepair !== false){
- this.el.addClass("x-dd-drag-repair");
- this.el.hideUnders(true);
- this.anim = this.el.shift({
- duration: this.repairDuration || .5,
- easing: 'easeOut',
- xy: xy,
- stopFx: true,
- callback: this.afterRepair,
- scope: this
- });
- }else{
- this.afterRepair();
- }
- },
-
- afterRepair : function(){
- this.hide(true);
- if(typeof this.callback == "function"){
- this.callback.call(this.scope || this);
- }
- this.callback = null;
- this.scope = null;
- }
- };
- Ext.dd.DragSource = function(el, config){
- this.el = Ext.get(el);
- if(!this.dragData){
- this.dragData = {};
- }
-
- Ext.apply(this, config);
-
- if(!this.proxy){
- this.proxy = new Ext.dd.StatusProxy();
- }
- Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group,
- {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true});
-
- this.dragging = false;
- };
- Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
-
-
- dropAllowed : "x-dd-drop-ok",
-
- dropNotAllowed : "x-dd-drop-nodrop",
-
- getDragData : function(e){
- return this.dragData;
- },
-
- onDragEnter : function(e, id){
- var target = Ext.dd.DragDropMgr.getDDById(id);
- this.cachedTarget = target;
- if(this.beforeDragEnter(target, e, id) !== false){
- if(target.isNotifyTarget){
- var status = target.notifyEnter(this, e, this.dragData);
- this.proxy.setStatus(status);
- }else{
- this.proxy.setStatus(this.dropAllowed);
- }
-
- if(this.afterDragEnter){
-
- this.afterDragEnter(target, e, id);
- }
- }
- },
-
- beforeDragEnter : function(target, e, id){
- return true;
- },
-
- alignElWithMouse: function() {
- Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);
- this.proxy.sync();
- },
-
- onDragOver : function(e, id){
- var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
- if(this.beforeDragOver(target, e, id) !== false){
- if(target.isNotifyTarget){
- var status = target.notifyOver(this, e, this.dragData);
- this.proxy.setStatus(status);
- }
- if(this.afterDragOver){
-
- this.afterDragOver(target, e, id);
- }
- }
- },
-
- beforeDragOver : function(target, e, id){
- return true;
- },
-
- onDragOut : function(e, id){
- var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
- if(this.beforeDragOut(target, e, id) !== false){
- if(target.isNotifyTarget){
- target.notifyOut(this, e, this.dragData);
- }
- this.proxy.reset();
- if(this.afterDragOut){
-
- this.afterDragOut(target, e, id);
- }
- }
- this.cachedTarget = null;
- },
-
- beforeDragOut : function(target, e, id){
- return true;
- },
-
-
- onDragDrop : function(e, id){
- var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
- if(this.beforeDragDrop(target, e, id) !== false){
- if(target.isNotifyTarget){
- if(target.notifyDrop(this, e, this.dragData)){
- this.onValidDrop(target, e, id);
- }else{
- this.onInvalidDrop(target, e, id);
- }
- }else{
- this.onValidDrop(target, e, id);
- }
-
- if(this.afterDragDrop){
-
- this.afterDragDrop(target, e, id);
- }
- }
- delete this.cachedTarget;
- },
-
- beforeDragDrop : function(target, e, id){
- return true;
- },
-
- onValidDrop : function(target, e, id){
- this.hideProxy();
- if(this.afterValidDrop){
-
- this.afterValidDrop(target, e, id);
- }
- },
-
- getRepairXY : function(e, data){
- return this.el.getXY();
- },
-
- onInvalidDrop : function(target, e, id){
- this.beforeInvalidDrop(target, e, id);
- if(this.cachedTarget){
- if(this.cachedTarget.isNotifyTarget){
- this.cachedTarget.notifyOut(this, e, this.dragData);
- }
- this.cacheTarget = null;
- }
- this.proxy.repair(this.getRepairXY(e, this.dragData), this.afterRepair, this);
- if(this.afterInvalidDrop){
-
- this.afterInvalidDrop(e, id);
- }
- },
-
- afterRepair : function(){
- if(Ext.enableFx){
- this.el.highlight(this.hlColor || "c3daf9");
- }
- this.dragging = false;
- },
-
- beforeInvalidDrop : function(target, e, id){
- return true;
- },
-
- handleMouseDown : function(e){
- if(this.dragging) {
- return;
- }
- var data = this.getDragData(e);
- if(data && this.onBeforeDrag(data, e) !== false){
- this.dragData = data;
- this.proxy.stop();
- Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments);
- }
- },
-
- onBeforeDrag : function(data, e){
- return true;
- },
-
- onStartDrag : Ext.emptyFn,
-
- startDrag : function(x, y){
- this.proxy.reset();
- this.dragging = true;
- this.proxy.update("");
- this.onInitDrag(x, y);
- this.proxy.show();
- },
-
- onInitDrag : function(x, y){
- var clone = this.el.dom.cloneNode(true);
- clone.id = Ext.id();
- this.proxy.update(clone);
- this.onStartDrag(x, y);
- return true;
- },
-
- getProxy : function(){
- return this.proxy;
- },
-
- hideProxy : function(){
- this.proxy.hide();
- this.proxy.reset(true);
- this.dragging = false;
- },
-
- triggerCacheRefresh : function(){
- Ext.dd.DDM.refreshCache(this.groups);
- },
-
- b4EndDrag: function(e) {
- },
-
- endDrag : function(e){
- this.onEndDrag(this.dragData, e);
- },
-
- onEndDrag : function(data, e){
- },
-
-
- autoOffset : function(x, y) {
- this.setDelta(-12, -20);
- }
- });
- Ext.dd.DropTarget = function(el, config){
- this.el = Ext.get(el);
-
- Ext.apply(this, config);
-
- if(this.containerScroll){
- Ext.dd.ScrollManager.register(this.el);
- }
-
- Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group,
- {isTarget: true});
- };
- Ext.extend(Ext.dd.DropTarget, Ext.dd.DDTarget, {
-
-
-
- dropAllowed : "x-dd-drop-ok",
-
- dropNotAllowed : "x-dd-drop-nodrop",
-
- isTarget : true,
-
- isNotifyTarget : true,
-
- notifyEnter : function(dd, e, data){
- if(this.overClass){
- this.el.addClass(this.overClass);
- }
- return this.dropAllowed;
- },
-
- notifyOver : function(dd, e, data){
- return this.dropAllowed;
- },
-
- notifyOut : function(dd, e, data){
- if(this.overClass){
- this.el.removeClass(this.overClass);
- }
- },
-
- notifyDrop : function(dd, e, data){
- return false;
- }
- });
- Ext.dd.DragZone = function(el, config){
- Ext.dd.DragZone.superclass.constructor.call(this, el, config);
- if(this.containerScroll){
- Ext.dd.ScrollManager.register(this.el);
- }
- };
- Ext.extend(Ext.dd.DragZone, Ext.dd.DragSource, {
-
-
-
- getDragData : function(e){
- return Ext.dd.Registry.getHandleFromEvent(e);
- },
-
-
- onInitDrag : function(x, y){
- this.proxy.update(this.dragData.ddel.cloneNode(true));
- this.onStartDrag(x, y);
- return true;
- },
-
-
- afterRepair : function(){
- if(Ext.enableFx){
- Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9");
- }
- this.dragging = false;
- },
-
- getRepairXY : function(e){
- return Ext.Element.fly(this.dragData.ddel).getXY();
- }
- });
- Ext.dd.DropZone = function(el, config){
- Ext.dd.DropZone.superclass.constructor.call(this, el, config);
- };
- Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {
-
- getTargetFromEvent : function(e){
- return Ext.dd.Registry.getTargetFromEvent(e);
- },
-
- onNodeEnter : function(n, dd, e, data){
-
- },
-
- onNodeOver : function(n, dd, e, data){
- return this.dropAllowed;
- },
-
- onNodeOut : function(n, dd, e, data){
-
- },
-
- onNodeDrop : function(n, dd, e, data){
- return false;
- },
-
- onContainerOver : function(dd, e, data){
- return this.dropNotAllowed;
- },
-
- onContainerDrop : function(dd, e, data){
- return false;
- },
-
- notifyEnter : function(dd, e, data){
- return this.dropNotAllowed;
- },
-
- notifyOver : function(dd, e, data){
- var n = this.getTargetFromEvent(e);
- if(!n){
- if(this.lastOverNode){
- this.onNodeOut(this.lastOverNode, dd, e, data);
- this.lastOverNode = null;
- }
- return this.onContainerOver(dd, e, data);
- }
- if(this.lastOverNode != n){
- if(this.lastOverNode){
- this.onNodeOut(this.lastOverNode, dd, e, data);
- }
- this.onNodeEnter(n, dd, e, data);
- this.lastOverNode = n;
- }
- return this.onNodeOver(n, dd, e, data);
- },
-
- notifyOut : function(dd, e, data){
- if(this.lastOverNode){
- this.onNodeOut(this.lastOverNode, dd, e, data);
- this.lastOverNode = null;
- }
- },
-
- notifyDrop : function(dd, e, data){
- if(this.lastOverNode){
- this.onNodeOut(this.lastOverNode, dd, e, data);
- this.lastOverNode = null;
- }
- var n = this.getTargetFromEvent(e);
- return n ?
- this.onNodeDrop(n, dd, e, data) :
- this.onContainerDrop(dd, e, data);
- },
-
- triggerCacheRefresh : function(){
- Ext.dd.DDM.refreshCache(this.groups);
- }
- });
- Ext.data.SortTypes = {
-
- none : function(s){
- return s;
- },
-
-
- stripTagsRE : /<\/?[^>]+>/gi,
-
-
- asText : function(s){
- return String(s).replace(this.stripTagsRE, "");
- },
-
-
- asUCText : function(s){
- return String(s).toUpperCase().replace(this.stripTagsRE, "");
- },
-
-
- asUCString : function(s) {
- return String(s).toUpperCase();
- },
-
-
- asDate : function(s) {
- if(!s){
- return 0;
- }
- if(Ext.isDate(s)){
- return s.getTime();
- }
- return Date.parse(String(s));
- },
-
-
- asFloat : function(s) {
- var val = parseFloat(String(s).replace(/,/g, ""));
- if(isNaN(val)) val = 0;
- return val;
- },
-
-
- asInt : function(s) {
- var val = parseInt(String(s).replace(/,/g, ""));
- if(isNaN(val)) val = 0;
- return val;
- }
- };
- Ext.data.Record = function(data, id){
- this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID;
- this.data = data;
- };
- Ext.data.Record.create = function(o){
- var f = Ext.extend(Ext.data.Record, {});
- var p = f.prototype;
- p.fields = new Ext.util.MixedCollection(false, function(field){
- return field.name;
- });
- for(var i = 0, len = o.length; i < len; i++){
- p.fields.add(new Ext.data.Field(o[i]));
- }
- f.getField = function(name){
- return p.fields.get(name);
- };
- return f;
- };
- Ext.data.Record.AUTO_ID = 1000;
- Ext.data.Record.EDIT = 'edit';
- Ext.data.Record.REJECT = 'reject';
- Ext.data.Record.COMMIT = 'commit';
- Ext.data.Record.prototype = {
-
-
-
- dirty : false,
- editing : false,
- error: null,
-
- modified: null,
-
- join : function(store){
- this.store = store;
- },
-
- set : function(name, value){
- if(String(this.data[name]) == String(value)){
- return;
- }
- this.dirty = true;
- if(!this.modified){
- this.modified = {};
- }
- if(typeof this.modified[name] == 'undefined'){
- this.modified[name] = this.data[name];
- }
- this.data[name] = value;
- if(!this.editing && this.store){
- this.store.afterEdit(this);
- }
- },
-
- get : function(name){
- return this.data[name];
- },
-
- beginEdit : function(){
- this.editing = true;
- this.modified = {};
- },
-
- cancelEdit : function(){
- this.editing = false;
- delete this.modified;
- },
-
- endEdit : function(){
- this.editing = false;
- if(this.dirty && this.store){
- this.store.afterEdit(this);
- }
- },
-
- reject : function(silent){
- var m = this.modified;
- for(var n in m){
- if(typeof m[n] != "function"){
- this.data[n] = m[n];
- }
- }
- this.dirty = false;
- delete this.modified;
- this.editing = false;
- if(this.store && silent !== true){
- this.store.afterReject(this);
- }
- },
-
- commit : function(silent){
- this.dirty = false;
- delete this.modified;
- this.editing = false;
- if(this.store && silent !== true){
- this.store.afterCommit(this);
- }
- },
-
- getChanges : function(){
- var m = this.modified, cs = {};
- for(var n in m){
- if(m.hasOwnProperty(n)){
- cs[n] = this.data[n];
- }
- }
- return cs;
- },
-
- hasError : function(){
- return this.error != null;
- },
-
- clearError : function(){
- this.error = null;
- },
-
- copy : function(newId) {
- return new this.constructor(Ext.apply({}, this.data), newId || this.id);
- },
-
- isModified : function(fieldName){
- return this.modified && this.modified.hasOwnProperty(fieldName);
- }
- };
- Ext.StoreMgr = Ext.apply(new Ext.util.MixedCollection(), {
- register : function(){
- for(var i = 0, s; s = arguments[i]; i++){
- this.add(s);
- }
- },
- unregister : function(){
- for(var i = 0, s; s = arguments[i]; i++){
- this.remove(this.lookup(s));
- }
- },
-
- lookup : function(id){
- return typeof id == "object" ? id : this.get(id);
- },
-
- getKey : function(o){
- return o.storeId || o.id;
- }
- });
- Ext.data.Store = function(config){
- this.data = new Ext.util.MixedCollection(false);
- this.data.getKey = function(o){
- return o.id;
- };
-
- this.baseParams = {};
-
- this.paramNames = {
- "start" : "start",
- "limit" : "limit",
- "sort" : "sort",
- "dir" : "dir"
- };
- if(config && config.data){
- this.inlineData = config.data;
- delete config.data;
- }
- Ext.apply(this, config);
- if(this.url && !this.proxy){
- this.proxy = new Ext.data.HttpProxy({url: this.url});
- }
- if(this.reader){
- if(!this.recordType){
- this.recordType = this.reader.recordType;
- }
- if(this.reader.onMetaChange){
- this.reader.onMetaChange = this.onMetaChange.createDelegate(this);
- }
- }
- if(this.recordType){
- this.fields = this.recordType.prototype.fields;
- }
- this.modified = [];
- this.addEvents(
-
- 'datachanged',
-
- 'metachange',
-
- 'add',
-
- 'remove',
-
- 'update',
-
- 'clear',
-
- 'beforeload',
-
- 'load',
-
- 'loadexception'
- );
- if(this.proxy){
- this.relayEvents(this.proxy, ["loadexception"]);
- }
-
- this.sortToggle = {};
- if(this.sortInfo){
- this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction);
- }
-
- Ext.data.Store.superclass.constructor.call(this);
- if(this.storeId || this.id){
- Ext.StoreMgr.register(this);
- }
- if(this.inlineData){
- this.loadData(this.inlineData);
- delete this.inlineData;
- }else if(this.autoLoad){
- this.load.defer(10, this, [
- typeof this.autoLoad == 'object' ?
- this.autoLoad : undefined]);
- }
- };
- Ext.extend(Ext.data.Store, Ext.util.Observable, {
-
-
-
-
-
-
-
-
-
- remoteSort : false,
-
- pruneModifiedRecords : false,
-
- lastOptions : null,
- destroy : function(){
- if(this.id){
- Ext.StoreMgr.unregister(this);
- }
- this.data = null;
- this.purgeListeners();
- },
-
- add : function(records){
- records = [].concat(records);
- if(records.length < 1){
- return;
- }
- for(var i = 0, len = records.length; i < len; i++){
- records[i].join(this);
- }
- var index = this.data.length;
- this.data.addAll(records);
- if(this.snapshot){
- this.snapshot.addAll(records);
- }
- this.fireEvent("add", this, records, index);
- },
-
- addSorted : function(record){
- var index = this.findInsertIndex(record);
- this.insert(index, record);
- },
-
- remove : function(record){
- var index = this.data.indexOf(record);
- this.data.removeAt(index);
- if(this.pruneModifiedRecords){
- this.modified.remove(record);
- }
- if(this.snapshot){
- this.snapshot.remove(record);
- }
- this.fireEvent("remove", this, record, index);
- },
-
- removeAll : function(){
- this.data.clear();
- if(this.snapshot){
- this.snapshot.clear();
- }
- if(this.pruneModifiedRecords){
- this.modified = [];
- }
- this.fireEvent("clear", this);
- },
-
- insert : function(index, records){
- records = [].concat(records);
- for(var i = 0, len = records.length; i < len; i++){
- this.data.insert(index, records[i]);
- records[i].join(this);
- }
- this.fireEvent("add", this, records, index);
- },
-
- indexOf : function(record){
- return this.data.indexOf(record);
- },
-
- indexOfId : function(id){
- return this.data.indexOfKey(id);
- },
-
- getById : function(id){
- return this.data.key(id);
- },
-
- getAt : function(index){
- return this.data.itemAt(index);
- },
-
- getRange : function(start, end){
- return this.data.getRange(start, end);
- },
-
- storeOptions : function(o){
- o = Ext.apply({}, o);
- delete o.callback;
- delete o.scope;
- this.lastOptions = o;
- },
-
- load : function(options){
- options = options || {};
- if(this.fireEvent("beforeload", this, options) !== false){
- this.storeOptions(options);
- var p = Ext.apply(options.params || {}, this.baseParams);
- if(this.sortInfo && this.remoteSort){
- var pn = this.paramNames;
- p[pn["sort"]] = this.sortInfo.field;
- p[pn["dir"]] = this.sortInfo.direction;
- }
- this.proxy.load(p, this.reader, this.loadRecords, this, options);
- return true;
- } else {
- return false;
- }
- },
-
- reload : function(options){
- this.load(Ext.applyIf(options||{}, this.lastOptions));
- },
-
-
- loadRecords : function(o, options, success){
- if(!o || success === false){
- if(success !== false){
- this.fireEvent("load", this, [], options);
- }
- if(options.callback){
- options.callback.call(options.scope || this, [], options, false);
- }
- return;
- }
- var r = o.records, t = o.totalRecords || r.length;
- if(!options || options.add !== true){
- if(this.pruneModifiedRecords){
- this.modified = [];
- }
- for(var i = 0, len = r.length; i < len; i++){
- r[i].join(this);
- }
- if(this.snapshot){
- this.data = this.snapshot;
- delete this.snapshot;
- }
- this.data.clear();
- this.data.addAll(r);
- this.totalLength = t;
- this.applySort();
- this.fireEvent("datachanged", this);
- }else{
- this.totalLength = Math.max(t, this.data.length+r.length);
- this.add(r);
- }
- this.fireEvent("load", this, r, options);
- if(options.callback){
- options.callback.call(options.scope || this, r, options, true);
- }
- },
-
- loadData : function(o, append){
- var r = this.reader.readRecords(o);
- this.loadRecords(r, {add: append}, true);
- },
-
- getCount : function(){
- return this.data.length || 0;
- },
-
- getTotalCount : function(){
- return this.totalLength || 0;
- },
-
- getSortState : function(){
- return this.sortInfo;
- },
-
- applySort : function(){
- if(this.sortInfo && !this.remoteSort){
- var s = this.sortInfo, f = s.field;
- this.sortData(f, s.direction);
- }
- },
-
- sortData : function(f, direction){
- direction = direction || 'ASC';
- var st = this.fields.get(f).sortType;
- var fn = function(r1, r2){
- var v1 = st(r1.data[f]), v2 = st(r2.data[f]);
- return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
- };
- this.data.sort(direction, fn);
- if(this.snapshot && this.snapshot != this.data){
- this.snapshot.sort(direction, fn);
- }
- },
-
- setDefaultSort : function(field, dir){
- dir = dir ? dir.toUpperCase() : "ASC";
- this.sortInfo = {field: field, direction: dir};
- this.sortToggle[field] = dir;
- },
-
- sort : function(fieldName, dir){
- var f = this.fields.get(fieldName);
- if(!f){
- return false;
- }
- if(!dir){
- if(this.sortInfo && this.sortInfo.field == f.name){
- dir = (this.sortToggle[f.name] || "ASC").toggle("ASC", "DESC");
- }else{
- dir = f.sortDir;
- }
- }
- var st = (this.sortToggle) ? this.sortToggle[f.name] : null;
- var si = (this.sortInfo) ? this.sortInfo : null;
-
- this.sortToggle[f.name] = dir;
- this.sortInfo = {field: f.name, direction: dir};
- if(!this.remoteSort){
- this.applySort();
- this.fireEvent("datachanged", this);
- }else{
- if (!this.load(this.lastOptions)) {
- if (st) {
- this.sortToggle[f.name] = st;
- }
- if (si) {
- this.sortInfo = si;
- }
- }
- }
- },
-
- each : function(fn, scope){
- this.data.each(fn, scope);
- },
-
- getModifiedRecords : function(){
- return this.modified;
- },
-
- createFilterFn : function(property, value, anyMatch, caseSensitive){
- if(Ext.isEmpty(value, false)){
- return false;
- }
- value = this.data.createValueMatcher(value, anyMatch, caseSensitive);
- return function(r){
- return value.test(r.data[property]);
- };
- },
-
- sum : function(property, start, end){
- var rs = this.data.items, v = 0;
- start = start || 0;
- end = (end || end === 0) ? end : rs.length-1;
- for(var i = start; i <= end; i++){
- v += (rs[i].data[property] || 0);
- }
- return v;
- },
-
- filter : function(property, value, anyMatch, caseSensitive){
- var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);
- return fn ? this.filterBy(fn) : this.clearFilter();
- },
-
- filterBy : function(fn, scope){
- this.snapshot = this.snapshot || this.data;
- this.data = this.queryBy(fn, scope||this);
- this.fireEvent("datachanged", this);
- },
-
- query : function(property, value, anyMatch, caseSensitive){
- var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);
- return fn ? this.queryBy(fn) : this.data.clone();
- },
-
- queryBy : function(fn, scope){
- var data = this.snapshot || this.data;
- return data.filterBy(fn, scope||this);
- },
-
- find : function(property, value, start, anyMatch, caseSensitive){
- var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);
- return fn ? this.data.findIndexBy(fn, null, start) : -1;
- },
-
- findBy : function(fn, scope, start){
- return this.data.findIndexBy(fn, scope, start);
- },
-
- collect : function(dataIndex, allowNull, bypassFilter){
- var d = (bypassFilter === true && this.snapshot) ?
- this.snapshot.items : this.data.items;
- var v, sv, r = [], l = {};
- for(var i = 0, len = d.length; i < len; i++){
- v = d[i].data[dataIndex];
- sv = String(v);
- if((allowNull || !Ext.isEmpty(v)) && !l[sv]){
- l[sv] = true;
- r[r.length] = v;
- }
- }
- return r;
- },
-
- clearFilter : function(suppressEvent){
- if(this.isFiltered()){
- this.data = this.snapshot;
- delete this.snapshot;
- if(suppressEvent !== true){
- this.fireEvent("datachanged", this);
- }
- }
- },
-
- isFiltered : function(){
- return this.snapshot && this.snapshot != this.data;
- },
-
- afterEdit : function(record){
- if(this.modified.indexOf(record) == -1){
- this.modified.push(record);
- }
- this.fireEvent("update", this, record, Ext.data.Record.EDIT);
- },
-
- afterReject : function(record){
- this.modified.remove(record);
- this.fireEvent("update", this, record, Ext.data.Record.REJECT);
- },
-
- afterCommit : function(record){
- this.modified.remove(record);
- this.fireEvent("update", this, record, Ext.data.Record.COMMIT);
- },
-
- commitChanges : function(){
- var m = this.modified.slice(0);
- this.modified = [];
- for(var i = 0, len = m.length; i < len; i++){
- m[i].commit();
- }
- },
-
- rejectChanges : function(){
- var m = this.modified.slice(0);
- this.modified = [];
- for(var i = 0, len = m.length; i < len; i++){
- m[i].reject();
- }
- },
-
- onMetaChange : function(meta, rtype, o){
- this.recordType = rtype;
- this.fields = rtype.prototype.fields;
- delete this.snapshot;
- this.sortInfo = meta.sortInfo;
- this.modified = [];
- this.fireEvent('metachange', this, this.reader.meta);
- },
-
- findInsertIndex : function(record){
- this.suspendEvents();
- var data = this.data.clone();
- this.data.add(record);
- this.applySort();
- var index = this.data.indexOf(record);
- this.data = data;
- this.resumeEvents();
- return index;
- }
- });
- Ext.data.SimpleStore = function(config){
- Ext.data.SimpleStore.superclass.constructor.call(this, Ext.apply(config, {
- reader: new Ext.data.ArrayReader({
- id: config.id
- },
- Ext.data.Record.create(config.fields)
- )
- }));
- };
- Ext.extend(Ext.data.SimpleStore, Ext.data.Store, {
- loadData : function(data, append){
- if(this.expandData === true){
- var r = [];
- for(var i = 0, len = data.length; i < len; i++){
- r[r.length] = [data[i]];
- }
- data = r;
- }
- Ext.data.SimpleStore.superclass.loadData.call(this, data, append);
- }
- });
- Ext.data.JsonStore = function(c){
- Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, {
- proxy: !c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined,
- reader: new Ext.data.JsonReader(c, c.fields)
- }));
- };
- Ext.extend(Ext.data.JsonStore, Ext.data.Store);
- Ext.data.Field = function(config){
- if(typeof config == "string"){
- config = {name: config};
- }
- Ext.apply(this, config);
-
- if(!this.type){
- this.type = "auto";
- }
-
- var st = Ext.data.SortTypes;
-
- if(typeof this.sortType == "string"){
- this.sortType = st[this.sortType];
- }
-
-
- if(!this.sortType){
- switch(this.type){
- case "string":
- this.sortType = st.asUCString;
- break;
- case "date":
- this.sortType = st.asDate;
- break;
- default:
- this.sortType = st.none;
- }
- }
-
- var stripRe = /[\$,%]/g;
-
-
- if(!this.convert){
- var cv, dateFormat = this.dateFormat;
- switch(this.type){
- case "":
- case "auto":
- case undefined:
- cv = function(v){ return v; };
- break;
- case "string":
- cv = function(v){ return (v === undefined || v === null) ? '' : String(v); };
- break;
- case "int":
- cv = function(v){
- return v !== undefined && v !== null && v !== '' ?
- parseInt(String(v).replace(stripRe, ""), 10) : '';
- };
- break;
- case "float":
- cv = function(v){
- return v !== undefined && v !== null && v !== '' ?
- parseFloat(String(v).replace(stripRe, ""), 10) : '';
- };
- break;
- case "bool":
- case "boolean":
- cv = function(v){ return v === true || v === "true" || v == 1; };
- break;
- case "date":
- cv = function(v){
- if(!v){
- return '';
- }
- if(Ext.isDate(v)){
- return v;
- }
- if(dateFormat){
- if(dateFormat == "timestamp"){
- return new Date(v*1000);
- }
- if(dateFormat == "time"){
- return new Date(parseInt(v, 10));
- }
- return Date.parseDate(v, dateFormat);
- }
- var parsed = Date.parse(v);
- return parsed ? new Date(parsed) : null;
- };
- break;
-
- }
- this.convert = cv;
- }
- };
- Ext.data.Field.prototype = {
- dateFormat: null,
- defaultValue: "",
- mapping: null,
- sortType : null,
- sortDir : "ASC"
- };
- Ext.data.DataReader = function(meta, recordType){
-
- this.meta = meta;
- this.recordType = Ext.isArray(recordType) ?
- Ext.data.Record.create(recordType) : recordType;
- };
- Ext.data.DataReader.prototype = {
-
- };
- Ext.data.DataProxy = function(){
- this.addEvents(
-
- 'beforeload',
-
- 'load',
-
- 'loadexception'
- );
- Ext.data.DataProxy.superclass.constructor.call(this);
- };
- Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
- Ext.data.MemoryProxy = function(data){
- Ext.data.MemoryProxy.superclass.constructor.call(this);
- this.data = data;
- };
- Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {
-
- load : function(params, reader, callback, scope, arg){
- params = params || {};
- var result;
- try {
- result = reader.readRecords(this.data);
- }catch(e){
- this.fireEvent("loadexception", this, arg, null, e);
- callback.call(scope, null, arg, false);
- return;
- }
- callback.call(scope, result, arg, true);
- },
-
-
- update : function(params, records){
-
- }
- });
- Ext.data.HttpProxy = function(conn){
- Ext.data.HttpProxy.superclass.constructor.call(this);
-
- this.conn = conn;
- this.useAjax = !conn || !conn.events;
- };
- Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {
-
- getConnection : function(){
- return this.useAjax ? Ext.Ajax : this.conn;
- },
-
- load : function(params, reader, callback, scope, arg){
- if(this.fireEvent("beforeload", this, params) !== false){
- var o = {
- params : params || {},
- request: {
- callback : callback,
- scope : scope,
- arg : arg
- },
- reader: reader,
- callback : this.loadResponse,
- scope: this
- };
- if(this.useAjax){
- Ext.applyIf(o, this.conn);
- if(this.activeRequest){
- Ext.Ajax.abort(this.activeRequest);
- }
- this.activeRequest = Ext.Ajax.request(o);
- }else{
- this.conn.request(o);
- }
- }else{
- callback.call(scope||this, null, arg, false);
- }
- },
-
- loadResponse : function(o, success, response){
- delete this.activeRequest;
- if(!success){
- this.fireEvent("loadexception", this, o, response);
- o.request.callback.call(o.request.scope, null, o.request.arg, false);
- return;
- }
- var result;
- try {
- result = o.reader.read(response);
- }catch(e){
- this.fireEvent("loadexception", this, o, response, e);
- o.request.callback.call(o.request.scope, null, o.request.arg, false);
- return;
- }
- this.fireEvent("load", this, o, o.request.arg);
- o.request.callback.call(o.request.scope, result, o.request.arg, true);
- },
-
-
- update : function(dataSet){
-
- },
-
-
- updateResponse : function(dataSet){
-
- }
- });
- Ext.data.ScriptTagProxy = function(config){
- Ext.data.ScriptTagProxy.superclass.constructor.call(this);
- Ext.apply(this, config);
- this.head = document.getElementsByTagName("head")[0];
- };
- Ext.data.ScriptTagProxy.TRANS_ID = 1000;
- Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {
-
-
- timeout : 30000,
-
- callbackParam : "callback",
-
- nocache : true,
-
- load : function(params, reader, callback, scope, arg){
- if(this.fireEvent("beforeload", this, params) !== false){
- var p = Ext.urlEncode(Ext.apply(params, this.extraParams));
- var url = this.url;
- url += (url.indexOf("?") != -1 ? "&" : "?") + p;
- if(this.nocache){
- url += "&_dc=" + (new Date().getTime());
- }
- var transId = ++Ext.data.ScriptTagProxy.TRANS_ID;
- var trans = {
- id : transId,
- cb : "stcCallback"+transId,
- scriptId : "stcScript"+transId,
- params : params,
- arg : arg,
- url : url,
- callback : callback,
- scope : scope,
- reader : reader
- };
- var conn = this;
- window[trans.cb] = function(o){
- conn.handleResponse(o, trans);
- };
- url += String.format("&{0}={1}", this.callbackParam, trans.cb);
- if(this.autoAbort !== false){
- this.abort();
- }
- trans.timeoutId = this.handleFailure.defer(this.timeout, this, [trans]);
- var script = document.createElement("script");
- script.setAttribute("src", url);
- script.setAttribute("type", "text/javascript");
- script.setAttribute("id", trans.scriptId);
- this.head.appendChild(script);
- this.trans = trans;
- }else{
- callback.call(scope||this, null, arg, false);
- }
- },
-
- isLoading : function(){
- return this.trans ? true : false;
- },
-
- abort : function(){
- if(this.isLoading()){
- this.destroyTrans(this.trans);
- }
- },
-
- destroyTrans : function(trans, isLoaded){
- this.head.removeChild(document.getElementById(trans.scriptId));
- clearTimeout(trans.timeoutId);
- if(isLoaded){
- window[trans.cb] = undefined;
- try{
- delete window[trans.cb];
- }catch(e){}
- }else{
-
- window[trans.cb] = function(){
- window[trans.cb] = undefined;
- try{
- delete window[trans.cb];
- }catch(e){}
- };
- }
- },
-
- handleResponse : function(o, trans){
- this.trans = false;
- this.destroyTrans(trans, true);
- var result;
- try {
- result = trans.reader.readRecords(o);
- }catch(e){
- this.fireEvent("loadexception", this, o, trans.arg, e);
- trans.callback.call(trans.scope||window, null, trans.arg, false);
- return;
- }
- this.fireEvent("load", this, o, trans.arg);
- trans.callback.call(trans.scope||window, result, trans.arg, true);
- },
-
- handleFailure : function(trans){
- this.trans = false;
- this.destroyTrans(trans, false);
- this.fireEvent("loadexception", this, null, trans.arg);
- trans.callback.call(trans.scope||window, null, trans.arg, false);
- }
- });
- Ext.data.JsonReader = function(meta, recordType){
- meta = meta || {};
- Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
- };
- Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {
-
-
- read : function(response){
- var json = response.responseText;
- var o = eval("("+json+")");
- if(!o) {
- throw {message: "JsonReader.read: Json object not found"};
- }
- if(o.metaData){
- delete this.ef;
- this.meta = o.metaData;
- this.recordType = Ext.data.Record.create(o.metaData.fields);
- this.onMetaChange(this.meta, this.recordType, o);
- }
- return this.readRecords(o);
- },
-
- onMetaChange : function(meta, recordType, o){
- },
-
- simpleAccess: function(obj, subsc) {
- return obj[subsc];
- },
-
- getJsonAccessor: function(){
- var re = /[\[\.]/;
- return function(expr) {
- try {
- return(re.test(expr))
- ? new Function("obj", "return obj." + expr)
- : function(obj){
- return obj[expr];
- };
- } catch(e){}
- return Ext.emptyFn;
- };
- }(),
-
- readRecords : function(o){
-
- this.jsonData = o;
- var s = this.meta, Record = this.recordType,
- f = Record.prototype.fields, fi = f.items, fl = f.length;
- if (!this.ef) {
- if(s.totalProperty) {
- this.getTotal = this.getJsonAccessor(s.totalProperty);
- }
- if(s.successProperty) {
- this.getSuccess = this.getJsonAccessor(s.successProperty);
- }
- this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;};
- if (s.id) {
- var g = this.getJsonAccessor(s.id);
- this.getId = function(rec) {
- var r = g(rec);
- return (r === undefined || r === "") ? null : r;
- };
- } else {
- this.getId = function(){return null;};
- }
- this.ef = [];
- for(var i = 0; i < fl; i++){
- f = fi[i];
- var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
- this.ef[i] = this.getJsonAccessor(map);
- }
- }
- var root = this.getRoot(o), c = root.length, totalRecords = c, success = true;
- if(s.totalProperty){
- var v = parseInt(this.getTotal(o), 10);
- if(!isNaN(v)){
- totalRecords = v;
- }
- }
- if(s.successProperty){
- var v = this.getSuccess(o);
- if(v === false || v === 'false'){
- success = false;
- }
- }
- var records = [];
- for(var i = 0; i < c; i++){
- var n = root[i];
- var values = {};
- var id = this.getId(n);
- for(var j = 0; j < fl; j++){
- f = fi[j];
- var v = this.ef[j](n);
- values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue, n);
- }
- var record = new Record(values, id);
- record.json = n;
- records[i] = record;
- }
- return {
- success : success,
- records : records,
- totalRecords : totalRecords
- };
- }
- });
- Ext.data.XmlReader = function(meta, recordType){
- meta = meta || {};
- Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType || meta.fields);
- };
- Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {
-
- read : function(response){
- var doc = response.responseXML;
- if(!doc) {
- throw {message: "XmlReader.read: XML Document not available"};
- }
- return this.readRecords(doc);
- },
-
- readRecords : function(doc){
-
- this.xmlData = doc;
- var root = doc.documentElement || doc;
- var q = Ext.DomQuery;
- var recordType = this.recordType, fields = recordType.prototype.fields;
- var sid = this.meta.id;
- var totalRecords = 0, success = true;
- if(this.meta.totalRecords){
- totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
- }
- if(this.meta.success){
- var sv = q.selectValue(this.meta.success, root, true);
- success = sv !== false && sv !== 'false';
- }
- var records = [];
- var ns = q.select(this.meta.record, root);
- for(var i = 0, len = ns.length; i < len; i++) {
- var n = ns[i];
- var values = {};
- var id = sid ? q.selectValue(sid, n) : undefined;
- for(var j = 0, jlen = fields.length; j < jlen; j++){
- var f = fields.items[j];
- var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);
- v = f.convert(v, n);
- values[f.name] = v;
- }
- var record = new recordType(values, id);
- record.node = n;
- records[records.length] = record;
- }
- return {
- success : success,
- records : records,
- totalRecords : totalRecords || records.length
- };
- }
- });
- Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {
-
- readRecords : function(o){
- var sid = this.meta ? this.meta.id : null;
- var recordType = this.recordType, fields = recordType.prototype.fields;
- var records = [];
- var root = o;
- for(var i = 0; i < root.length; i++){
- var n = root[i];
- var values = {};
- var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
- for(var j = 0, jlen = fields.length; j < jlen; j++){
- var f = fields.items[j];
- var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;
- var v = n[k] !== undefined ? n[k] : f.defaultValue;
- v = f.convert(v, n);
- values[f.name] = v;
- }
- var record = new recordType(values, id);
- record.json = n;
- records[records.length] = record;
- }
- return {
- records : records,
- totalRecords : records.length
- };
- }
- });
- Ext.data.Tree = function(root){
- this.nodeHash = {};
-
- this.root = null;
- if(root){
- this.setRootNode(root);
- }
- this.addEvents(
-
- "append",
-
- "remove",
-
- "move",
-
- "insert",
-
- "beforeappend",
-
- "beforeremove",
-
- "beforemove",
-
- "beforeinsert"
- );
- Ext.data.Tree.superclass.constructor.call(this);
- };
- Ext.extend(Ext.data.Tree, Ext.util.Observable, {
-
- pathSeparator: "/",
-
- proxyNodeEvent : function(){
- return this.fireEvent.apply(this, arguments);
- },
-
- getRootNode : function(){
- return this.root;
- },
-
- setRootNode : function(node){
- this.root = node;
- node.ownerTree = this;
- node.isRoot = true;
- this.registerNode(node);
- return node;
- },
-
- getNodeById : function(id){
- return this.nodeHash[id];
- },
-
- registerNode : function(node){
- this.nodeHash[node.id] = node;
- },
-
- unregisterNode : function(node){
- delete this.nodeHash[node.id];
- },
- toString : function(){
- return "[Tree"+(this.id?" "+this.id:"")+"]";
- }
- });
- Ext.data.Node = function(attributes){
-
- this.attributes = attributes || {};
- this.leaf = this.attributes.leaf;
-
- this.id = this.attributes.id;
- if(!this.id){
- this.id = Ext.id(null, "ynode-");
- this.attributes.id = this.id;
- }
-
- this.childNodes = [];
- if(!this.childNodes.indexOf){
- this.childNodes.indexOf = function(o){
- for(var i = 0, len = this.length; i < len; i++){
- if(this[i] == o) return i;
- }
- return -1;
- };
- }
-
- this.parentNode = null;
-
- this.firstChild = null;
-
- this.lastChild = null;
-
- this.previousSibling = null;
-
- this.nextSibling = null;
- this.addEvents({
-
- "append" : true,
-
- "remove" : true,
-
- "move" : true,
-
- "insert" : true,
-
- "beforeappend" : true,
-
- "beforeremove" : true,
-
- "beforemove" : true,
-
- "beforeinsert" : true
- });
- this.listeners = this.attributes.listeners;
- Ext.data.Node.superclass.constructor.call(this);
- };
- Ext.extend(Ext.data.Node, Ext.util.Observable, {
-
- fireEvent : function(evtName){
-
- if(Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false){
- return false;
- }
-
- var ot = this.getOwnerTree();
- if(ot){
- if(ot.proxyNodeEvent.apply(ot, arguments) === false){
- return false;
- }
- }
- return true;
- },
-
- isLeaf : function(){
- return this.leaf === true;
- },
-
- setFirstChild : function(node){
- this.firstChild = node;
- },
-
- setLastChild : function(node){
- this.lastChild = node;
- },
-
- isLast : function(){
- return (!this.parentNode ? true : this.parentNode.lastChild == this);
- },
-
- isFirst : function(){
- return (!this.parentNode ? true : this.parentNode.firstChild == this);
- },
- hasChildNodes : function(){
- return !this.isLeaf() && this.childNodes.length > 0;
- },
-
- appendChild : function(node){
- var multi = false;
- if(Ext.isArray(node)){
- multi = node;
- }else if(arguments.length > 1){
- multi = arguments;
- }
-
- if(multi){
- for(var i = 0, len = multi.length; i < len; i++) {
- this.appendChild(multi[i]);
- }
- }else{
- if(this.fireEvent("beforeappend", this.ownerTree, this, node) === false){
- return false;
- }
- var index = this.childNodes.length;
- var oldParent = node.parentNode;
-
- if(oldParent){
- if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index) === false){
- return false;
- }
- oldParent.removeChild(node);
- }
- index = this.childNodes.length;
- if(index == 0){
- this.setFirstChild(node);
- }
- this.childNodes.push(node);
- node.parentNode = this;
- var ps = this.childNodes[index-1];
- if(ps){
- node.previousSibling = ps;
- ps.nextSibling = node;
- }else{
- node.previousSibling = null;
- }
- node.nextSibling = null;
- this.setLastChild(node);
- node.setOwnerTree(this.getOwnerTree());
- this.fireEvent("append", this.ownerTree, this, node, index);
- if(oldParent){
- node.fireEvent("move", this.ownerTree, node, oldParent, this, index);
- }
- return node;
- }
- },
-
- removeChild : function(node){
- var index = this.childNodes.indexOf(node);
- if(index == -1){
- return false;
- }
- if(this.fireEvent("beforeremove", this.ownerTree, this, node) === false){
- return false;
- }
-
- this.childNodes.splice(index, 1);
-
- if(node.previousSibling){
- node.previousSibling.nextSibling = node.nextSibling;
- }
- if(node.nextSibling){
- node.nextSibling.previousSibling = node.previousSibling;
- }
-
- if(this.firstChild == node){
- this.setFirstChild(node.nextSibling);
- }
- if(this.lastChild == node){
- this.setLastChild(node.previousSibling);
- }
- node.setOwnerTree(null);
-
- node.parentNode = null;
- node.previousSibling = null;
- node.nextSibling = null;
- this.fireEvent("remove", this.ownerTree, this, node);
- return node;
- },
-
- insertBefore : function(node, refNode){
- if(!refNode){
- return this.appendChild(node);
- }
-
- if(node == refNode){
- return false;
- }
- if(this.fireEvent("beforeinsert", this.ownerTree, this, node, refNode) === false){
- return false;
- }
- var index = this.childNodes.indexOf(refNode);
- var oldParent = node.parentNode;
- var refIndex = index;
-
- if(oldParent == this && this.childNodes.indexOf(node) < index){
- refIndex--;
- }
-
- if(oldParent){
- if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index, refNode) === false){
- return false;
- }
- oldParent.removeChild(node);
- }
- if(refIndex == 0){
- this.setFirstChild(node);
- }
- this.childNodes.splice(refIndex, 0, node);
- node.parentNode = this;
- var ps = this.childNodes[refIndex-1];
- if(ps){
- node.previousSibling = ps;
- ps.nextSibling = node;
- }else{
- node.previousSibling = null;
- }
- node.nextSibling = refNode;
- refNode.previousSibling = node;
- node.setOwnerTree(this.getOwnerTree());
- this.fireEvent("insert", this.ownerTree, this, node, refNode);
- if(oldParent){
- node.fireEvent("move", this.ownerTree, node, oldParent, this, refIndex, refNode);
- }
- return node;
- },
-
- remove : function(){
- this.parentNode.removeChild(this);
- return this;
- },
-
- item : function(index){
- return this.childNodes[index];
- },
-
- replaceChild : function(newChild, oldChild){
- this.insertBefore(newChild, oldChild);
- this.removeChild(oldChild);
- return oldChild;
- },
-
- indexOf : function(child){
- return this.childNodes.indexOf(child);
- },
-
- getOwnerTree : function(){
-
- if(!this.ownerTree){
- var p = this;
- while(p){
- if(p.ownerTree){
- this.ownerTree = p.ownerTree;
- break;
- }
- p = p.parentNode;
- }
- }
- return this.ownerTree;
- },
-
- getDepth : function(){
- var depth = 0;
- var p = this;
- while(p.parentNode){
- ++depth;
- p = p.parentNode;
- }
- return depth;
- },
-
- setOwnerTree : function(tree){
-
- if(tree != this.ownerTree){
- if(this.ownerTree){
- this.ownerTree.unregisterNode(this);
- }
- this.ownerTree = tree;
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- cs[i].setOwnerTree(tree);
- }
- if(tree){
- tree.registerNode(this);
- }
- }
- },
-
- getPath : function(attr){
- attr = attr || "id";
- var p = this.parentNode;
- var b = [this.attributes[attr]];
- while(p){
- b.unshift(p.attributes[attr]);
- p = p.parentNode;
- }
- var sep = this.getOwnerTree().pathSeparator;
- return sep + b.join(sep);
- },
-
- bubble : function(fn, scope, args){
- var p = this;
- while(p){
- if(fn.apply(scope || p, args || [p]) === false){
- break;
- }
- p = p.parentNode;
- }
- },
-
- cascade : function(fn, scope, args){
- if(fn.apply(scope || this, args || [this]) !== false){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- cs[i].cascade(fn, scope, args);
- }
- }
- },
-
- eachChild : function(fn, scope, args){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- if(fn.apply(scope || this, args || [cs[i]]) === false){
- break;
- }
- }
- },
-
- findChild : function(attribute, value){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- if(cs[i].attributes[attribute] == value){
- return cs[i];
- }
- }
- return null;
- },
-
- findChildBy : function(fn, scope){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- if(fn.call(scope||cs[i], cs[i]) === true){
- return cs[i];
- }
- }
- return null;
- },
-
- sort : function(fn, scope){
- var cs = this.childNodes;
- var len = cs.length;
- if(len > 0){
- var sortFn = scope ? function(){fn.apply(scope, arguments);} : fn;
- cs.sort(sortFn);
- for(var i = 0; i < len; i++){
- var n = cs[i];
- n.previousSibling = cs[i-1];
- n.nextSibling = cs[i+1];
- if(i == 0){
- this.setFirstChild(n);
- }
- if(i == len-1){
- this.setLastChild(n);
- }
- }
- }
- },
-
- contains : function(node){
- return node.isAncestor(this);
- },
-
- isAncestor : function(node){
- var p = this.parentNode;
- while(p){
- if(p == node){
- return true;
- }
- p = p.parentNode;
- }
- return false;
- },
- toString : function(){
- return "[Node"+(this.id?" "+this.id:"")+"]";
- }
- });
- Ext.data.GroupingStore = Ext.extend(Ext.data.Store, {
-
-
- remoteGroup : false,
-
- groupOnSort:false,
-
- clearGrouping : function(){
- this.groupField = false;
- if(this.remoteGroup){
- if(this.baseParams){
- delete this.baseParams.groupBy;
- }
- this.reload();
- }else{
- this.applySort();
- this.fireEvent('datachanged', this);
- }
- },
-
- groupBy : function(field, forceRegroup){
- if(this.groupField == field && !forceRegroup){
- return;
- }
- this.groupField = field;
- if(this.remoteGroup){
- if(!this.baseParams){
- this.baseParams = {};
- }
- this.baseParams['groupBy'] = field;
- }
- if(this.groupOnSort){
- this.sort(field);
- return;
- }
- if(this.remoteGroup){
- this.reload();
- }else{
- var si = this.sortInfo || {};
- if(si.field != field){
- this.applySort();
- }else{
- this.sortData(field);
- }
- this.fireEvent('datachanged', this);
- }
- },
-
- applySort : function(){
- Ext.data.GroupingStore.superclass.applySort.call(this);
- if(!this.groupOnSort && !this.remoteGroup){
- var gs = this.getGroupState();
- if(gs && gs != this.sortInfo.field){
- this.sortData(this.groupField);
- }
- }
- },
-
- applyGrouping : function(alwaysFireChange){
- if(this.groupField !== false){
- this.groupBy(this.groupField, true);
- return true;
- }else{
- if(alwaysFireChange === true){
- this.fireEvent('datachanged', this);
- }
- return false;
- }
- },
-
- getGroupState : function(){
- return this.groupOnSort && this.groupField !== false ?
- (this.sortInfo ? this.sortInfo.field : undefined) : this.groupField;
- }
- });
- Ext.ComponentMgr = function(){
- var all = new Ext.util.MixedCollection();
- var types = {};
- return {
-
- register : function(c){
- all.add(c);
- },
-
- unregister : function(c){
- all.remove(c);
- },
-
- get : function(id){
- return all.get(id);
- },
-
- onAvailable : function(id, fn, scope){
- all.on("add", function(index, o){
- if(o.id == id){
- fn.call(scope || o, o);
- all.un("add", fn, scope);
- }
- });
- },
-
- all : all,
-
- registerType : function(xtype, cls){
- types[xtype] = cls;
- cls.xtype = xtype;
- },
-
- create : function(config, defaultType){
- return new types[config.xtype || defaultType](config);
- }
- };
- }();
- Ext.reg = Ext.ComponentMgr.registerType;
- Ext.Component = function(config){
- config = config || {};
- if(config.initialConfig){
- if(config.isAction){ this.baseAction = config;
- }
- config = config.initialConfig; }else if(config.tagName || config.dom || typeof config == "string"){ config = {applyTo: config, id: config.id || config};
- }
-
- this.initialConfig = config;
- Ext.apply(this, config);
- this.addEvents(
-
- 'disable',
-
- 'enable',
-
- 'beforeshow',
-
- 'show',
-
- 'beforehide',
-
- 'hide',
-
- 'beforerender',
-
- 'render',
-
- 'beforedestroy',
-
- 'destroy',
-
- 'beforestaterestore',
-
- 'staterestore',
-
- 'beforestatesave',
-
- 'statesave'
- );
- this.getId();
- Ext.ComponentMgr.register(this);
- Ext.Component.superclass.constructor.call(this);
- if(this.baseAction){
- this.baseAction.addComponent(this);
- }
- this.initComponent();
- if(this.plugins){
- if(Ext.isArray(this.plugins)){
- for(var i = 0, len = this.plugins.length; i < len; i++){
- this.plugins[i].init(this);
- }
- }else{
- this.plugins.init(this);
- }
- }
- if(this.stateful !== false){
- this.initState(config);
- }
- if(this.applyTo){
- this.applyToMarkup(this.applyTo);
- delete this.applyTo;
- }else if(this.renderTo){
- this.render(this.renderTo);
- delete this.renderTo;
- }
- };
- Ext.Component.AUTO_ID = 1000;
- Ext.extend(Ext.Component, Ext.util.Observable, {
-
-
-
-
-
-
-
-
-
-
-
-
-
- disabledClass : "x-item-disabled",
-
- allowDomMove : true,
-
- autoShow : false,
-
- hideMode: 'display',
-
- hideParent: false,
-
-
- hidden : false,
-
- disabled : false,
-
- rendered : false,
- ctype : "Ext.Component",
- actionMode : "el",
- getActionEl : function(){
- return this[this.actionMode];
- },
-
- initComponent : Ext.emptyFn,
-
- render : function(container, position){
- if(!this.rendered && this.fireEvent("beforerender", this) !== false){
- if(!container && this.el){
- this.el = Ext.get(this.el);
- container = this.el.dom.parentNode;
- this.allowDomMove = false;
- }
- this.container = Ext.get(container);
- if(this.ctCls){
- this.container.addClass(this.ctCls);
- }
- this.rendered = true;
- if(position !== undefined){
- if(typeof position == 'number'){
- position = this.container.dom.childNodes[position];
- }else{
- position = Ext.getDom(position);
- }
- }
- this.onRender(this.container, position || null);
- if(this.autoShow){
- this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]);
- }
- if(this.cls){
- this.el.addClass(this.cls);
- delete this.cls;
- }
- if(this.style){
- this.el.applyStyles(this.style);
- delete this.style;
- }
- this.fireEvent("render", this);
- this.afterRender(this.container);
- if(this.hidden){
- this.hide();
- }
- if(this.disabled){
- this.disable();
- }
- this.initStateEvents();
- }
- return this;
- },
- initState : function(config){
- if(Ext.state.Manager){
- var state = Ext.state.Manager.get(this.stateId || this.id);
- if(state){
- if(this.fireEvent('beforestaterestore', this, state) !== false){
- this.applyState(state);
- this.fireEvent('staterestore', this, state);
- }
- }
- }
- },
- initStateEvents : function(){
- if(this.stateEvents){
- for(var i = 0, e; e = this.stateEvents[i]; i++){
- this.on(e, this.saveState, this, {delay:100});
- }
- }
- },
- applyState : function(state, config){
- if(state){
- Ext.apply(this, state);
- }
- },
- getState : function(){
- return null;
- },
- saveState : function(){
- if(Ext.state.Manager){
- var state = this.getState();
- if(this.fireEvent('beforestatesave', this, state) !== false){
- Ext.state.Manager.set(this.stateId || this.id, state);
- this.fireEvent('statesave', this, state);
- }
- }
- },
-
- applyToMarkup : function(el){
- this.allowDomMove = false;
- this.el = Ext.get(el);
- this.render(this.el.dom.parentNode);
- },
-
- addClass : function(cls){
- if(this.el){
- this.el.addClass(cls);
- }else{
- this.cls = this.cls ? this.cls + ' ' + cls : cls;
- }
- },
-
- removeClass : function(cls){
- if(this.el){
- this.el.removeClass(cls);
- }else if(this.cls){
- this.cls = this.cls.split(' ').remove(cls).join(' ');
- }
- },
- onRender : function(ct, position){
- if(this.autoEl){
- if(typeof this.autoEl == 'string'){
- this.el = document.createElement(this.autoEl);
- }else{
- var div = document.createElement('div');
- Ext.DomHelper.overwrite(div, this.autoEl);
- this.el = div.firstChild;
- }
- if (!this.el.id) {
- this.el.id = this.getId();
- }
- }
- if(this.el){
- this.el = Ext.get(this.el);
- if(this.allowDomMove !== false){
- ct.dom.insertBefore(this.el.dom, position);
- }
- }
- },
- getAutoCreate : function(){
- var cfg = typeof this.autoCreate == "object" ?
- this.autoCreate : Ext.apply({}, this.defaultAutoCreate);
- if(this.id && !cfg.id){
- cfg.id = this.id;
- }
- return cfg;
- },
- afterRender : Ext.emptyFn,
-
- destroy : function(){
- if(this.fireEvent("beforedestroy", this) !== false){
- this.beforeDestroy();
- if(this.rendered){
- this.el.removeAllListeners();
- this.el.remove();
- if(this.actionMode == "container"){
- this.container.remove();
- }
- }
- this.onDestroy();
- Ext.ComponentMgr.unregister(this);
- this.fireEvent("destroy", this);
- this.purgeListeners();
- }
- },
- beforeDestroy : Ext.emptyFn,
- onDestroy : Ext.emptyFn,
-
- getEl : function(){
- return this.el;
- },
-
- getId : function(){
- return this.id || (this.id = "ext-comp-" + (++Ext.Component.AUTO_ID));
- },
-
- getItemId : function(){
- return this.itemId || this.getId();
- },
-
- focus : function(selectText, delay){
- if(delay){
- this.focus.defer(typeof delay == 'number' ? delay : 10, this, [selectText, false]);
- return;
- }
- if(this.rendered){
- this.el.focus();
- if(selectText === true){
- this.el.dom.select();
- }
- }
- return this;
- },
- blur : function(){
- if(this.rendered){
- this.el.blur();
- }
- return this;
- },
-
- disable : function(){
- if(this.rendered){
- this.onDisable();
- }
- this.disabled = true;
- this.fireEvent("disable", this);
- return this;
- },
- onDisable : function(){
- this.getActionEl().addClass(this.disabledClass);
- this.el.dom.disabled = true;
- },
-
- enable : function(){
- if(this.rendered){
- this.onEnable();
- }
- this.disabled = false;
- this.fireEvent("enable", this);
- return this;
- },
- onEnable : function(){
- this.getActionEl().removeClass(this.disabledClass);
- this.el.dom.disabled = false;
- },
-
- setDisabled : function(disabled){
- this[disabled ? "disable" : "enable"]();
- },
-
- show: function(){
- if(this.fireEvent("beforeshow", this) !== false){
- this.hidden = false;
- if(this.autoRender){
- this.render(typeof this.autoRender == 'boolean' ? Ext.getBody() : this.autoRender);
- }
- if(this.rendered){
- this.onShow();
- }
- this.fireEvent("show", this);
- }
- return this;
- },
- onShow : function(){
- if(this.hideParent){
- this.container.removeClass('x-hide-' + this.hideMode);
- }else{
- this.getActionEl().removeClass('x-hide-' + this.hideMode);
- }
- },
-
- hide: function(){
- if(this.fireEvent("beforehide", this) !== false){
- this.hidden = true;
- if(this.rendered){
- this.onHide();
- }
- this.fireEvent("hide", this);
- }
- return this;
- },
- onHide : function(){
- if(this.hideParent){
- this.container.addClass('x-hide-' + this.hideMode);
- }else{
- this.getActionEl().addClass('x-hide-' + this.hideMode);
- }
- },
-
- setVisible: function(visible){
- if(visible) {
- this.show();
- }else{
- this.hide();
- }
- return this;
- },
-
- isVisible : function(){
- return this.rendered && this.getActionEl().isVisible();
- },
-
- cloneConfig : function(overrides){
- overrides = overrides || {};
- var id = overrides.id || Ext.id();
- var cfg = Ext.applyIf(overrides, this.initialConfig);
- cfg.id = id; return new this.constructor(cfg);
- },
-
- getXType : function(){
- return this.constructor.xtype;
- },
-
- isXType : function(xtype, shallow){
- return !shallow ?
- ('/' + this.getXTypes() + '/').indexOf('/' + xtype + '/') != -1 :
- this.constructor.xtype == xtype;
- },
-
- getXTypes : function(){
- var tc = this.constructor;
- if(!tc.xtypes){
- var c = [], sc = this;
- while(sc && sc.constructor.xtype){
- c.unshift(sc.constructor.xtype);
- sc = sc.constructor.superclass;
- }
- tc.xtypeChain = c;
- tc.xtypes = c.join('/');
- }
- return tc.xtypes;
- },
-
- findParentBy: function(fn) {
- for (var p = this.ownerCt; (p != null) && !fn(p, this); p = p.ownerCt);
- return p || null;
- },
-
- findParentByType: function(xtype) {
- return typeof xtype == 'function' ?
- this.findParentBy(function(p){
- return p.constructor === xtype;
- }) :
- this.findParentBy(function(p){
- return p.constructor.xtype === xtype;
- });
- }
- });
- Ext.reg('component', Ext.Component);
- Ext.Action = function(config){
- this.initialConfig = config;
- this.items = [];
- }
- Ext.Action.prototype = {
-
-
-
-
-
-
-
- isAction : true,
-
- setText : function(text){
- this.initialConfig.text = text;
- this.callEach('setText', [text]);
- },
-
- getText : function(){
- return this.initialConfig.text;
- },
-
- setIconClass : function(cls){
- this.initialConfig.iconCls = cls;
- this.callEach('setIconClass', [cls]);
- },
-
- getIconClass : function(){
- return this.initialConfig.iconCls;
- },
-
- setDisabled : function(v){
- this.initialConfig.disabled = v;
- this.callEach('setDisabled', [v]);
- },
-
- enable : function(){
- this.setDisabled(false);
- },
-
- disable : function(){
- this.setDisabled(true);
- },
-
- isDisabled : function(){
- return this.initialConfig.disabled;
- },
-
- setHidden : function(v){
- this.initialConfig.hidden = v;
- this.callEach('setVisible', [!v]);
- },
-
- show : function(){
- this.setHidden(false);
- },
-
- hide : function(){
- this.setHidden(true);
- },
-
- isHidden : function(){
- return this.initialConfig.hidden;
- },
-
- setHandler : function(fn, scope){
- this.initialConfig.handler = fn;
- this.initialConfig.scope = scope;
- this.callEach('setHandler', [fn, scope]);
- },
-
- each : function(fn, scope){
- Ext.each(this.items, fn, scope);
- },
-
- callEach : function(fnName, args){
- var cs = this.items;
- for(var i = 0, len = cs.length; i < len; i++){
- cs[i][fnName].apply(cs[i], args);
- }
- },
-
- addComponent : function(comp){
- this.items.push(comp);
- comp.on('destroy', this.removeComponent, this);
- },
-
- removeComponent : function(comp){
- this.items.remove(comp);
- },
-
- execute : function(){
- this.initialConfig.handler.apply(this.initialConfig.scope || window, arguments);
- }
- };
- (function(){
- Ext.Layer = function(config, existingEl){
- config = config || {};
- var dh = Ext.DomHelper;
- var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
- if(existingEl){
- this.dom = Ext.getDom(existingEl);
- }
- if(!this.dom){
- var o = config.dh || {tag: "div", cls: "x-layer"};
- this.dom = dh.append(pel, o);
- }
- if(config.cls){
- this.addClass(config.cls);
- }
- this.constrain = config.constrain !== false;
- this.visibilityMode = Ext.Element.VISIBILITY;
- if(config.id){
- this.id = this.dom.id = config.id;
- }else{
- this.id = Ext.id(this.dom);
- }
- this.zindex = config.zindex || this.getZIndex();
- this.position("absolute", this.zindex);
- if(config.shadow){
- this.shadowOffset = config.shadowOffset || 4;
- this.shadow = new Ext.Shadow({
- offset : this.shadowOffset,
- mode : config.shadow
- });
- }else{
- this.shadowOffset = 0;
- }
- this.useShim = config.shim !== false && Ext.useShims;
- this.useDisplay = config.useDisplay;
- this.hide();
- };
- var supr = Ext.Element.prototype;
- var shims = [];
- Ext.extend(Ext.Layer, Ext.Element, {
- getZIndex : function(){
- return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
- },
- getShim : function(){
- if(!this.useShim){
- return null;
- }
- if(this.shim){
- return this.shim;
- }
- var shim = shims.shift();
- if(!shim){
- shim = this.createShim();
- shim.enableDisplayMode('block');
- shim.dom.style.display = 'none';
- shim.dom.style.visibility = 'visible';
- }
- var pn = this.dom.parentNode;
- if(shim.dom.parentNode != pn){
- pn.insertBefore(shim.dom, this.dom);
- }
- shim.setStyle('z-index', this.getZIndex()-2);
- this.shim = shim;
- return shim;
- },
- hideShim : function(){
- if(this.shim){
- this.shim.setDisplayed(false);
- shims.push(this.shim);
- delete this.shim;
- }
- },
- disableShadow : function(){
- if(this.shadow){
- this.shadowDisabled = true;
- this.shadow.hide();
- this.lastShadowOffset = this.shadowOffset;
- this.shadowOffset = 0;
- }
- },
- enableShadow : function(show){
- if(this.shadow){
- this.shadowDisabled = false;
- this.shadowOffset = this.lastShadowOffset;
- delete this.lastShadowOffset;
- if(show){
- this.sync(true);
- }
- }
- },
-
-
-
- sync : function(doShow){
- var sw = this.shadow;
- if(!this.updating && this.isVisible() && (sw || this.useShim)){
- var sh = this.getShim();
- var w = this.getWidth(),
- h = this.getHeight();
- var l = this.getLeft(true),
- t = this.getTop(true);
- if(sw && !this.shadowDisabled){
- if(doShow && !sw.isVisible()){
- sw.show(this);
- }else{
- sw.realign(l, t, w, h);
- }
- if(sh){
- if(doShow){
- sh.show();
- }
-
- var a = sw.adjusts, s = sh.dom.style;
- s.left = (Math.min(l, l+a.l))+"px";
- s.top = (Math.min(t, t+a.t))+"px";
- s.width = (w+a.w)+"px";
- s.height = (h+a.h)+"px";
- }
- }else if(sh){
- if(doShow){
- sh.show();
- }
- sh.setSize(w, h);
- sh.setLeftTop(l, t);
- }
-
- }
- },
-
- destroy : function(){
- this.hideShim();
- if(this.shadow){
- this.shadow.hide();
- }
- this.removeAllListeners();
- Ext.removeNode(this.dom);
- Ext.Element.uncache(this.id);
- },
- remove : function(){
- this.destroy();
- },
-
- beginUpdate : function(){
- this.updating = true;
- },
-
- endUpdate : function(){
- this.updating = false;
- this.sync(true);
- },
-
- hideUnders : function(negOffset){
- if(this.shadow){
- this.shadow.hide();
- }
- this.hideShim();
- },
-
- constrainXY : function(){
- if(this.constrain){
- var vw = Ext.lib.Dom.getViewWidth(),
- vh = Ext.lib.Dom.getViewHeight();
- var s = Ext.getDoc().getScroll();
- var xy = this.getXY();
- var x = xy[0], y = xy[1];
- var w = this.dom.offsetWidth+this.shadowOffset, h = this.dom.offsetHeight+this.shadowOffset;
-
- var moved = false;
-
- if((x + w) > vw+s.left){
- x = vw - w - this.shadowOffset;
- moved = true;
- }
- if((y + h) > vh+s.top){
- y = vh - h - this.shadowOffset;
- moved = true;
- }
-
- if(x < s.left){
- x = s.left;
- moved = true;
- }
- if(y < s.top){
- y = s.top;
- moved = true;
- }
- if(moved){
- if(this.avoidY){
- var ay = this.avoidY;
- if(y <= ay && (y+h) >= ay){
- y = ay-h-5;
- }
- }
- xy = [x, y];
- this.storeXY(xy);
- supr.setXY.call(this, xy);
- this.sync();
- }
- }
- },
- isVisible : function(){
- return this.visible;
- },
-
- showAction : function(){
- this.visible = true;
- if(this.useDisplay === true){
- this.setDisplayed("");
- }else if(this.lastXY){
- supr.setXY.call(this, this.lastXY);
- }else if(this.lastLT){
- supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
- }
- },
-
- hideAction : function(){
- this.visible = false;
- if(this.useDisplay === true){
- this.setDisplayed(false);
- }else{
- this.setLeftTop(-10000,-10000);
- }
- },
-
- setVisible : function(v, a, d, c, e){
- if(v){
- this.showAction();
- }
- if(a && v){
- var cb = function(){
- this.sync(true);
- if(c){
- c();
- }
- }.createDelegate(this);
- supr.setVisible.call(this, true, true, d, cb, e);
- }else{
- if(!v){
- this.hideUnders(true);
- }
- var cb = c;
- if(a){
- cb = function(){
- this.hideAction();
- if(c){
- c();
- }
- }.createDelegate(this);
- }
- supr.setVisible.call(this, v, a, d, cb, e);
- if(v){
- this.sync(true);
- }else if(!a){
- this.hideAction();
- }
- }
- },
- storeXY : function(xy){
- delete this.lastLT;
- this.lastXY = xy;
- },
- storeLeftTop : function(left, top){
- delete this.lastXY;
- this.lastLT = [left, top];
- },
-
- beforeFx : function(){
- this.beforeAction();
- return Ext.Layer.superclass.beforeFx.apply(this, arguments);
- },
-
- afterFx : function(){
- Ext.Layer.superclass.afterFx.apply(this, arguments);
- this.sync(this.isVisible());
- },
-
- beforeAction : function(){
- if(!this.updating && this.shadow){
- this.shadow.hide();
- }
- },
-
- setLeft : function(left){
- this.storeLeftTop(left, this.getTop(true));
- supr.setLeft.apply(this, arguments);
- this.sync();
- },
- setTop : function(top){
- this.storeLeftTop(this.getLeft(true), top);
- supr.setTop.apply(this, arguments);
- this.sync();
- },
- setLeftTop : function(left, top){
- this.storeLeftTop(left, top);
- supr.setLeftTop.apply(this, arguments);
- this.sync();
- },
- setXY : function(xy, a, d, c, e){
- this.fixDisplay();
- this.beforeAction();
- this.storeXY(xy);
- var cb = this.createCB(c);
- supr.setXY.call(this, xy, a, d, cb, e);
- if(!a){
- cb();
- }
- },
-
- createCB : function(c){
- var el = this;
- return function(){
- el.constrainXY();
- el.sync(true);
- if(c){
- c();
- }
- };
- },
-
- setX : function(x, a, d, c, e){
- this.setXY([x, this.getY()], a, d, c, e);
- },
-
- setY : function(y, a, d, c, e){
- this.setXY([this.getX(), y], a, d, c, e);
- },
-
- setSize : function(w, h, a, d, c, e){
- this.beforeAction();
- var cb = this.createCB(c);
- supr.setSize.call(this, w, h, a, d, cb, e);
- if(!a){
- cb();
- }
- },
-
- setWidth : function(w, a, d, c, e){
- this.beforeAction();
- var cb = this.createCB(c);
- supr.setWidth.call(this, w, a, d, cb, e);
- if(!a){
- cb();
- }
- },
-
- setHeight : function(h, a, d, c, e){
- this.beforeAction();
- var cb = this.createCB(c);
- supr.setHeight.call(this, h, a, d, cb, e);
- if(!a){
- cb();
- }
- },
-
- setBounds : function(x, y, w, h, a, d, c, e){
- this.beforeAction();
- var cb = this.createCB(c);
- if(!a){
- this.storeXY([x, y]);
- supr.setXY.call(this, [x, y]);
- supr.setSize.call(this, w, h, a, d, cb, e);
- cb();
- }else{
- supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
- }
- return this;
- },
-
-
- setZIndex : function(zindex){
- this.zindex = zindex;
- this.setStyle("z-index", zindex + 2);
- if(this.shadow){
- this.shadow.setZIndex(zindex + 1);
- }
- if(this.shim){
- this.shim.setStyle("z-index", zindex);
- }
- }
- });
- })();
- Ext.Shadow = function(config){
- Ext.apply(this, config);
- if(typeof this.mode != "string"){
- this.mode = this.defaultMode;
- }
- var o = this.offset, a = {h: 0};
- var rad = Math.floor(this.offset/2);
- switch(this.mode.toLowerCase()){ case "drop":
- a.w = 0;
- a.l = a.t = o;
- a.t -= 1;
- if(Ext.isIE){
- a.l -= this.offset + rad;
- a.t -= this.offset + rad;
- a.w -= rad;
- a.h -= rad;
- a.t += 1;
- }
- break;
- case "sides":
- a.w = (o*2);
- a.l = -o;
- a.t = o-1;
- if(Ext.isIE){
- a.l -= (this.offset - rad);
- a.t -= this.offset + rad;
- a.l += 1;
- a.w -= (this.offset - rad)*2;
- a.w -= rad + 1;
- a.h -= 1;
- }
- break;
- case "frame":
- a.w = a.h = (o*2);
- a.l = a.t = -o;
- a.t += 1;
- a.h -= 2;
- if(Ext.isIE){
- a.l -= (this.offset - rad);
- a.t -= (this.offset - rad);
- a.l += 1;
- a.w -= (this.offset + rad + 1);
- a.h -= (this.offset + rad);
- a.h += 1;
- }
- break;
- };
- this.adjusts = a;
- };
- Ext.Shadow.prototype = {
-
-
- offset: 4,
- defaultMode: "drop",
-
- show : function(target){
- target = Ext.get(target);
- if(!this.el){
- this.el = Ext.Shadow.Pool.pull();
- if(this.el.dom.nextSibling != target.dom){
- this.el.insertBefore(target);
- }
- }
- this.el.setStyle("z-index", this.zIndex || parseInt(target.getStyle("z-index"), 10)-1);
- if(Ext.isIE){
- this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";
- }
- this.realign(
- target.getLeft(true),
- target.getTop(true),
- target.getWidth(),
- target.getHeight()
- );
- this.el.dom.style.display = "block";
- },
-
- isVisible : function(){
- return this.el ? true : false;
- },
-
- realign : function(l, t, w, h){
- if(!this.el){
- return;
- }
- var a = this.adjusts, d = this.el.dom, s = d.style;
- var iea = 0;
- s.left = (l+a.l)+"px";
- s.top = (t+a.t)+"px";
- var sw = (w+a.w), sh = (h+a.h), sws = sw +"px", shs = sh + "px";
- if(s.width != sws || s.height != shs){
- s.width = sws;
- s.height = shs;
- if(!Ext.isIE){
- var cn = d.childNodes;
- var sww = Math.max(0, (sw-12))+"px";
- cn[0].childNodes[1].style.width = sww;
- cn[1].childNodes[1].style.width = sww;
- cn[2].childNodes[1].style.width = sww;
- cn[1].style.height = Math.max(0, (sh-12))+"px";
- }
- }
- },
-
- hide : function(){
- if(this.el){
- this.el.dom.style.display = "none";
- Ext.Shadow.Pool.push(this.el);
- delete this.el;
- }
- },
-
- setZIndex : function(z){
- this.zIndex = z;
- if(this.el){
- this.el.setStyle("z-index", z);
- }
- }
- };
- Ext.Shadow.Pool = function(){
- var p = [];
- var markup = Ext.isIE ?
- '<div class="x-ie-shadow"></div>' :
- '<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';
- return {
- pull : function(){
- var sh = p.shift();
- if(!sh){
- sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, markup));
- sh.autoBoxAdjust = false;
- }
- return sh;
- },
- push : function(sh){
- p.push(sh);
- }
- };
- }();
- Ext.BoxComponent = Ext.extend(Ext.Component, {
-
-
-
-
-
-
-
-
-
- initComponent : function(){
- Ext.BoxComponent.superclass.initComponent.call(this);
- this.addEvents(
-
- 'resize',
-
- 'move'
- );
- },
- boxReady : false,
- deferHeight: false,
-
- setSize : function(w, h){
- if(typeof w == 'object'){
- h = w.height;
- w = w.width;
- }
- if(!this.boxReady){
- this.width = w;
- this.height = h;
- return this;
- }
- if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
- return this;
- }
- this.lastSize = {width: w, height: h};
- var adj = this.adjustSize(w, h);
- var aw = adj.width, ah = adj.height;
- if(aw !== undefined || ah !== undefined){ var rz = this.getResizeEl();
- if(!this.deferHeight && aw !== undefined && ah !== undefined){
- rz.setSize(aw, ah);
- }else if(!this.deferHeight && ah !== undefined){
- rz.setHeight(ah);
- }else if(aw !== undefined){
- rz.setWidth(aw);
- }
- this.onResize(aw, ah, w, h);
- this.fireEvent('resize', this, aw, ah, w, h);
- }
- return this;
- },
-
- setWidth : function(width){
- return this.setSize(width);
- },
-
- setHeight : function(height){
- return this.setSize(undefined, height);
- },
-
- getSize : function(){
- return this.el.getSize();
- },
-
- getPosition : function(local){
- if(local === true){
- return [this.el.getLeft(true), this.el.getTop(true)];
- }
- return this.xy || this.el.getXY();
- },
-
- getBox : function(local){
- var s = this.el.getSize();
- if(local === true){
- s.x = this.el.getLeft(true);
- s.y = this.el.getTop(true);
- }else{
- var xy = this.xy || this.el.getXY();
- s.x = xy[0];
- s.y = xy[1];
- }
- return s;
- },
-
- updateBox : function(box){
- this.setSize(box.width, box.height);
- this.setPagePosition(box.x, box.y);
- return this;
- },
- getResizeEl : function(){
- return this.resizeEl || this.el;
- },
- getPositionEl : function(){
- return this.positionEl || this.el;
- },
-
- setPosition : function(x, y){
- if(x && typeof x[1] == 'number'){
- y = x[1];
- x = x[0];
- }
- this.x = x;
- this.y = y;
- if(!this.boxReady){
- return this;
- }
- var adj = this.adjustPosition(x, y);
- var ax = adj.x, ay = adj.y;
- var el = this.getPositionEl();
- if(ax !== undefined || ay !== undefined){
- if(ax !== undefined && ay !== undefined){
- el.setLeftTop(ax, ay);
- }else if(ax !== undefined){
- el.setLeft(ax);
- }else if(ay !== undefined){
- el.setTop(ay);
- }
- this.onPosition(ax, ay);
- this.fireEvent('move', this, ax, ay);
- }
- return this;
- },
-
- setPagePosition : function(x, y){
- if(x && typeof x[1] == 'number'){
- y = x[1];
- x = x[0];
- }
- this.pageX = x;
- this.pageY = y;
- if(!this.boxReady){
- return;
- }
- if(x === undefined || y === undefined){ return;
- }
- var p = this.el.translatePoints(x, y);
- this.setPosition(p.left, p.top);
- return this;
- },
- onRender : function(ct, position){
- Ext.BoxComponent.superclass.onRender.call(this, ct, position);
- if(this.resizeEl){
- this.resizeEl = Ext.get(this.resizeEl);
- }
- if(this.positionEl){
- this.positionEl = Ext.get(this.positionEl);
- }
- },
- afterRender : function(){
- Ext.BoxComponent.superclass.afterRender.call(this);
- this.boxReady = true;
- this.setSize(this.width, this.height);
- if(this.x || this.y){
- this.setPosition(this.x, this.y);
- }else if(this.pageX || this.pageY){
- this.setPagePosition(this.pageX, this.pageY);
- }
- },
-
- syncSize : function(){
- delete this.lastSize;
- this.setSize(this.autoWidth ? undefined : this.el.getWidth(), this.autoHeight ? undefined : this.el.getHeight());
- return this;
- },
-
- onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){
- },
-
- onPosition : function(x, y){
- },
- adjustSize : function(w, h){
- if(this.autoWidth){
- w = 'auto';
- }
- if(this.autoHeight){
- h = 'auto';
- }
- return {width : w, height: h};
- },
- adjustPosition : function(x, y){
- return {x : x, y: y};
- }
- });
- Ext.reg('box', Ext.BoxComponent);
- Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){
-
-
- this.el = Ext.get(dragElement, true);
- this.el.dom.unselectable = "on";
-
- this.resizingEl = Ext.get(resizingElement, true);
-
- this.orientation = orientation || Ext.SplitBar.HORIZONTAL;
-
-
- this.minSize = 0;
-
-
- this.maxSize = 2000;
-
-
- this.animate = false;
-
-
- this.useShim = false;
-
-
- this.shim = null;
-
- if(!existingProxy){
-
- this.proxy = Ext.SplitBar.createProxy(this.orientation);
- }else{
- this.proxy = Ext.get(existingProxy).dom;
- }
-
- this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId : this.proxy.id});
-
-
- this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);
-
-
- this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);
-
-
- this.dragSpecs = {};
-
-
- this.adapter = new Ext.SplitBar.BasicLayoutAdapter();
- this.adapter.init(this);
-
- if(this.orientation == Ext.SplitBar.HORIZONTAL){
-
- this.placement = placement || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT);
- this.el.addClass("x-splitbar-h");
- }else{
-
- this.placement = placement || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM);
- this.el.addClass("x-splitbar-v");
- }
-
- this.addEvents(
-
- "resize",
-
- "moved",
-
- "beforeresize",
- "beforeapply"
- );
- Ext.SplitBar.superclass.constructor.call(this);
- };
- Ext.extend(Ext.SplitBar, Ext.util.Observable, {
- onStartProxyDrag : function(x, y){
- this.fireEvent("beforeresize", this);
- this.overlay = Ext.DomHelper.append(document.body, {cls: "x-drag-overlay", html: " "}, true);
- this.overlay.unselectable();
- this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
- this.overlay.show();
- Ext.get(this.proxy).setDisplayed("block");
- var size = this.adapter.getElementSize(this);
- this.activeMinSize = this.getMinimumSize();;
- this.activeMaxSize = this.getMaximumSize();;
- var c1 = size - this.activeMinSize;
- var c2 = Math.max(this.activeMaxSize - size, 0);
- if(this.orientation == Ext.SplitBar.HORIZONTAL){
- this.dd.resetConstraints();
- this.dd.setXConstraint(
- this.placement == Ext.SplitBar.LEFT ? c1 : c2,
- this.placement == Ext.SplitBar.LEFT ? c2 : c1
- );
- this.dd.setYConstraint(0, 0);
- }else{
- this.dd.resetConstraints();
- this.dd.setXConstraint(0, 0);
- this.dd.setYConstraint(
- this.placement == Ext.SplitBar.TOP ? c1 : c2,
- this.placement == Ext.SplitBar.TOP ? c2 : c1
- );
- }
- this.dragSpecs.startSize = size;
- this.dragSpecs.startPoint = [x, y];
- Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, x, y);
- },
-
-
- onEndProxyDrag : function(e){
- Ext.get(this.proxy).setDisplayed(false);
- var endPoint = Ext.lib.Event.getXY(e);
- if(this.overlay){
- this.overlay.remove();
- delete this.overlay;
- }
- var newSize;
- if(this.orientation == Ext.SplitBar.HORIZONTAL){
- newSize = this.dragSpecs.startSize +
- (this.placement == Ext.SplitBar.LEFT ?
- endPoint[0] - this.dragSpecs.startPoint[0] :
- this.dragSpecs.startPoint[0] - endPoint[0]
- );
- }else{
- newSize = this.dragSpecs.startSize +
- (this.placement == Ext.SplitBar.TOP ?
- endPoint[1] - this.dragSpecs.startPoint[1] :
- this.dragSpecs.startPoint[1] - endPoint[1]
- );
- }
- newSize = Math.min(Math.max(newSize, this.activeMinSize), this.activeMaxSize);
- if(newSize != this.dragSpecs.startSize){
- if(this.fireEvent('beforeapply', this, newSize) !== false){
- this.adapter.setElementSize(this, newSize);
- this.fireEvent("moved", this, newSize);
- this.fireEvent("resize", this, newSize);
- }
- }
- },
-
-
- getAdapter : function(){
- return this.adapter;
- },
-
-
- setAdapter : function(adapter){
- this.adapter = adapter;
- this.adapter.init(this);
- },
-
-
- getMinimumSize : function(){
- return this.minSize;
- },
-
-
- setMinimumSize : function(minSize){
- this.minSize = minSize;
- },
-
-
- getMaximumSize : function(){
- return this.maxSize;
- },
-
-
- setMaximumSize : function(maxSize){
- this.maxSize = maxSize;
- },
-
-
- setCurrentSize : function(size){
- var oldAnimate = this.animate;
- this.animate = false;
- this.adapter.setElementSize(this, size);
- this.animate = oldAnimate;
- },
-
-
- destroy : function(removeEl){
- if(this.shim){
- this.shim.remove();
- }
- this.dd.unreg();
- Ext.removeNode(this.proxy);
- if(removeEl){
- this.el.remove();
- }
- }
- });
- Ext.SplitBar.createProxy = function(dir){
- var proxy = new Ext.Element(document.createElement("div"));
- proxy.unselectable();
- var cls = 'x-splitbar-proxy';
- proxy.addClass(cls + ' ' + (dir == Ext.SplitBar.HORIZONTAL ? cls +'-h' : cls + '-v'));
- document.body.appendChild(proxy.dom);
- return proxy.dom;
- };
- Ext.SplitBar.BasicLayoutAdapter = function(){
- };
- Ext.SplitBar.BasicLayoutAdapter.prototype = {
-
- init : function(s){
-
- },
-
- getElementSize : function(s){
- if(s.orientation == Ext.SplitBar.HORIZONTAL){
- return s.resizingEl.getWidth();
- }else{
- return s.resizingEl.getHeight();
- }
- },
-
-
- setElementSize : function(s, newSize, onComplete){
- if(s.orientation == Ext.SplitBar.HORIZONTAL){
- if(!s.animate){
- s.resizingEl.setWidth(newSize);
- if(onComplete){
- onComplete(s, newSize);
- }
- }else{
- s.resizingEl.setWidth(newSize, true, .1, onComplete, 'easeOut');
- }
- }else{
-
- if(!s.animate){
- s.resizingEl.setHeight(newSize);
- if(onComplete){
- onComplete(s, newSize);
- }
- }else{
- s.resizingEl.setHeight(newSize, true, .1, onComplete, 'easeOut');
- }
- }
- }
- };
- Ext.SplitBar.AbsoluteLayoutAdapter = function(container){
- this.basic = new Ext.SplitBar.BasicLayoutAdapter();
- this.container = Ext.get(container);
- };
- Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {
- init : function(s){
- this.basic.init(s);
- },
-
- getElementSize : function(s){
- return this.basic.getElementSize(s);
- },
-
- setElementSize : function(s, newSize, onComplete){
- this.basic.setElementSize(s, newSize, this.moveSplitter.createDelegate(this, [s]));
- },
-
- moveSplitter : function(s){
- var yes = Ext.SplitBar;
- switch(s.placement){
- case yes.LEFT:
- s.el.setX(s.resizingEl.getRight());
- break;
- case yes.RIGHT:
- s.el.setStyle("right", (this.container.getWidth() - s.resizingEl.getLeft()) + "px");
- break;
- case yes.TOP:
- s.el.setY(s.resizingEl.getBottom());
- break;
- case yes.BOTTOM:
- s.el.setY(s.resizingEl.getTop() - s.el.getHeight());
- break;
- }
- }
- };
- Ext.SplitBar.VERTICAL = 1;
- Ext.SplitBar.HORIZONTAL = 2;
- Ext.SplitBar.LEFT = 1;
- Ext.SplitBar.RIGHT = 2;
- Ext.SplitBar.TOP = 3;
- Ext.SplitBar.BOTTOM = 4;
- Ext.Container = Ext.extend(Ext.BoxComponent, {
-
-
-
-
-
-
-
-
- autoDestroy: true,
-
-
- defaultType: 'panel',
- initComponent : function(){
- Ext.Container.superclass.initComponent.call(this);
- this.addEvents(
-
- 'afterlayout',
-
- 'beforeadd',
-
- 'beforeremove',
-
- 'add',
-
- 'remove'
- );
-
- var items = this.items;
- if(items){
- delete this.items;
- if(Ext.isArray(items)){
- this.add.apply(this, items);
- }else{
- this.add(items);
- }
- }
- },
- initItems : function(){
- if(!this.items){
- this.items = new Ext.util.MixedCollection(false, this.getComponentId);
- this.getLayout(); }
- },
- setLayout : function(layout){
- if(this.layout && this.layout != layout){
- this.layout.setContainer(null);
- }
- this.initItems();
- this.layout = layout;
- layout.setContainer(this);
- },
- render : function(){
- Ext.Container.superclass.render.apply(this, arguments);
- if(this.layout){
- if(typeof this.layout == 'string'){
- this.layout = new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig);
- }
- this.setLayout(this.layout);
- if(this.activeItem !== undefined){
- var item = this.activeItem;
- delete this.activeItem;
- this.layout.setActiveItem(item);
- return;
- }
- }
- if(!this.ownerCt){
- this.doLayout();
- }
- if(this.monitorResize === true){
- Ext.EventManager.onWindowResize(this.doLayout, this, [false]);
- }
- },
- getLayoutTarget : function(){
- return this.el;
- },
- getComponentId : function(comp){
- return comp.itemId || comp.id;
- },
-
- add : function(comp){
- if(!this.items){
- this.initItems();
- }
- var a = arguments, len = a.length;
- if(len > 1){
- for(var i = 0; i < len; i++) {
- this.add(a[i]);
- }
- return;
- }
- var c = this.lookupComponent(this.applyDefaults(comp));
- var pos = this.items.length;
- if(this.fireEvent('beforeadd', this, c, pos) !== false && this.onBeforeAdd(c) !== false){
- this.items.add(c);
- c.ownerCt = this;
- this.fireEvent('add', this, c, pos);
- }
- return c;
- },
-
- insert : function(index, comp){
- if(!this.items){
- this.initItems();
- }
- var a = arguments, len = a.length;
- if(len > 2){
- for(var i = len-1; i >= 1; --i) {
- this.insert(index, a[i]);
- }
- return;
- }
- var c = this.lookupComponent(this.applyDefaults(comp));
- if(c.ownerCt == this && this.items.indexOf(c) < index){
- --index;
- }
- if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
- this.items.insert(index, c);
- c.ownerCt = this;
- this.fireEvent('add', this, c, index);
- }
- return c;
- },
- applyDefaults : function(c){
- if(this.defaults){
- if(typeof c == 'string'){
- c = Ext.ComponentMgr.get(c);
- Ext.apply(c, this.defaults);
- }else if(!c.events){
- Ext.applyIf(c, this.defaults);
- }else{
- Ext.apply(c, this.defaults);
- }
- }
- return c;
- },
- onBeforeAdd : function(item){
- if(item.ownerCt){
- item.ownerCt.remove(item, false);
- }
- if(this.hideBorders === true){
- item.border = (item.border === true);
- }
- },
-
- remove : function(comp, autoDestroy){
- var c = this.getComponent(comp);
- if(c && this.fireEvent('beforeremove', this, c) !== false){
- this.items.remove(c);
- delete c.ownerCt;
- if(autoDestroy === true || (autoDestroy !== false && this.autoDestroy)){
- c.destroy();
- }
- if(this.layout && this.layout.activeItem == c){
- delete this.layout.activeItem;
- }
- this.fireEvent('remove', this, c);
- }
- return c;
- },
-
- getComponent : function(comp){
- if(typeof comp == 'object'){
- return comp;
- }
- return this.items.get(comp);
- },
- lookupComponent : function(comp){
- if(typeof comp == 'string'){
- return Ext.ComponentMgr.get(comp);
- }else if(!comp.events){
- return this.createComponent(comp);
- }
- return comp;
- },
- createComponent : function(config){
- return Ext.ComponentMgr.create(config, this.defaultType);
- },
-
- doLayout : function(shallow){
- if(this.rendered && this.layout){
- this.layout.layout();
- }
- if(shallow !== false && this.items){
- var cs = this.items.items;
- for(var i = 0, len = cs.length; i < len; i++) {
- var c = cs[i];
- if(c.doLayout){
- c.doLayout();
- }
- }
- }
- },
-
- getLayout : function(){
- if(!this.layout){
- var layout = new Ext.layout.ContainerLayout(this.layoutConfig);
- this.setLayout(layout);
- }
- return this.layout;
- },
- onDestroy : function(){
- if(this.items){
- var cs = this.items.items;
- for(var i = 0, len = cs.length; i < len; i++) {
- Ext.destroy(cs[i]);
- }
- }
- if(this.monitorResize){
- Ext.EventManager.removeResizeListener(this.doLayout, this);
- }
- Ext.Container.superclass.onDestroy.call(this);
- },
-
- bubble : function(fn, scope, args){
- var p = this;
- while(p){
- if(fn.apply(scope || p, args || [p]) === false){
- break;
- }
- p = p.ownerCt;
- }
- },
-
- cascade : function(fn, scope, args){
- if(fn.apply(scope || this, args || [this]) !== false){
- if(this.items){
- var cs = this.items.items;
- for(var i = 0, len = cs.length; i < len; i++){
- if(cs[i].cascade){
- cs[i].cascade(fn, scope, args);
- }else{
- fn.apply(scope || this, args || [cs[i]]);
- }
- }
- }
- }
- },
-
- findById : function(id){
- var m, ct = this;
- this.cascade(function(c){
- if(ct != c && c.id === id){
- m = c;
- return false;
- }
- });
- return m || null;
- },
-
- findByType : function(xtype){
- return typeof xtype == 'function' ?
- this.findBy(function(c){
- return c.constructor === xtype;
- }) :
- this.findBy(function(c){
- return c.constructor.xtype === xtype;
- });
- },
-
- find : function(prop, value){
- return this.findBy(function(c){
- return c[prop] === value;
- });
- },
-
- findBy : function(fn, scope){
- var m = [], ct = this;
- this.cascade(function(c){
- if(ct != c && fn.call(scope || c, c, ct) === true){
- m.push(c);
- }
- });
- return m;
- }
- });
- Ext.Container.LAYOUTS = {};
- Ext.reg('container', Ext.Container);
- Ext.layout.ContainerLayout = function(config){
- Ext.apply(this, config);
- };
- Ext.layout.ContainerLayout.prototype = {
-
-
-
- monitorResize:false,
- activeItem : null,
- layout : function(){
- var target = this.container.getLayoutTarget();
- this.onLayout(this.container, target);
- this.container.fireEvent('afterlayout', this.container, this);
- },
- onLayout : function(ct, target){
- this.renderAll(ct, target);
- },
- isValidParent : function(c, target){
- var el = c.getPositionEl ? c.getPositionEl() : c.getEl();
- return el.dom.parentNode == target.dom;
- },
- renderAll : function(ct, target){
- var items = ct.items.items;
- for(var i = 0, len = items.length; i < len; i++) {
- var c = items[i];
- if(c && (!c.rendered || !this.isValidParent(c, target))){
- this.renderItem(c, i, target);
- }
- }
- },
- renderItem : function(c, position, target){
- if(c && !c.rendered){
- c.render(target, position);
- if(this.extraCls){
- var t = c.getPositionEl ? c.getPositionEl() : c;
- t.addClass(this.extraCls);
- }
- if (this.renderHidden && c != this.activeItem) {
- c.hide();
- }
- }else if(c && !this.isValidParent(c, target)){
- if(this.extraCls){
- c.addClass(this.extraCls);
- }
- if(typeof position == 'number'){
- position = target.dom.childNodes[position];
- }
- target.dom.insertBefore(c.getEl().dom, position || null);
- if (this.renderHidden && c != this.activeItem) {
- c.hide();
- }
- }
- },
- onResize: function(){
- if(this.container.collapsed){
- return;
- }
- var b = this.container.bufferResize;
- if(b){
- if(!this.resizeTask){
- this.resizeTask = new Ext.util.DelayedTask(this.layout, this);
- this.resizeBuffer = typeof b == 'number' ? b : 100;
- }
- this.resizeTask.delay(this.resizeBuffer);
- }else{
- this.layout();
- }
- },
- setContainer : function(ct){
- if(this.monitorResize && ct != this.container){
- if(this.container){
- this.container.un('resize', this.onResize, this);
- }
- if(ct){
- ct.on('resize', this.onResize, this);
- }
- }
- this.container = ct;
- },
- parseMargins : function(v){
- var ms = v.split(' ');
- var len = ms.length;
- if(len == 1){
- ms[1] = ms[0];
- ms[2] = ms[0];
- ms[3] = ms[0];
- }
- if(len == 2){
- ms[2] = ms[0];
- ms[3] = ms[1];
- }
- return {
- top:parseInt(ms[0], 10) || 0,
- right:parseInt(ms[1], 10) || 0,
- bottom:parseInt(ms[2], 10) || 0,
- left:parseInt(ms[3], 10) || 0
- };
- }
- };
- Ext.Container.LAYOUTS['auto'] = Ext.layout.ContainerLayout;
- Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {
-
- monitorResize:true,
-
- onLayout : function(ct, target){
- Ext.layout.FitLayout.superclass.onLayout.call(this, ct, target);
- if(!this.container.collapsed){
- this.setItemSize(this.activeItem || ct.items.itemAt(0), target.getStyleSize());
- }
- },
-
- setItemSize : function(item, size){
- if(item && size.height > 0){
- item.setSize(size);
- }
- }
- });
- Ext.Container.LAYOUTS['fit'] = Ext.layout.FitLayout;
- Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {
-
- deferredRender : false,
-
- renderHidden : true,
-
- setActiveItem : function(item){
- item = this.container.getComponent(item);
- if(this.activeItem != item){
- if(this.activeItem){
- this.activeItem.hide();
- }
- this.activeItem = item;
- item.show();
- this.layout();
- }
- },
-
- renderAll : function(ct, target){
- if(this.deferredRender){
- this.renderItem(this.activeItem, undefined, target);
- }else{
- Ext.layout.CardLayout.superclass.renderAll.call(this, ct, target);
- }
- }
- });
- Ext.Container.LAYOUTS['card'] = Ext.layout.CardLayout;
- Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout, {
-
- monitorResize:true,
-
- getAnchorViewSize : function(ct, target){
- return target.dom == document.body ?
- target.getViewSize() : target.getStyleSize();
- },
-
- onLayout : function(ct, target){
- Ext.layout.AnchorLayout.superclass.onLayout.call(this, ct, target);
- var size = this.getAnchorViewSize(ct, target);
- var w = size.width, h = size.height;
- if(w < 20 || h < 20){
- return;
- }
-
- var aw, ah;
- if(ct.anchorSize){
- if(typeof ct.anchorSize == 'number'){
- aw = ct.anchorSize;
- }else{
- aw = ct.anchorSize.width;
- ah = ct.anchorSize.height;
- }
- }else{
- aw = ct.initialConfig.width;
- ah = ct.initialConfig.height;
- }
- var cs = ct.items.items, len = cs.length, i, c, a, cw, ch;
- for(i = 0; i < len; i++){
- c = cs[i];
- if(c.anchor){
- a = c.anchorSpec;
- if(!a){
- var vs = c.anchor.split(' ');
- c.anchorSpec = a = {
- right: this.parseAnchor(vs[0], c.initialConfig.width, aw),
- bottom: this.parseAnchor(vs[1], c.initialConfig.height, ah)
- };
- }
- cw = a.right ? this.adjustWidthAnchor(a.right(w), c) : undefined;
- ch = a.bottom ? this.adjustHeightAnchor(a.bottom(h), c) : undefined;
- if(cw || ch){
- c.setSize(cw || undefined, ch || undefined);
- }
- }
- }
- },
-
- parseAnchor : function(a, start, cstart){
- if(a && a != 'none'){
- var last;
- if(/^(r|right|b|bottom)$/i.test(a)){
- var diff = cstart - start;
- return function(v){
- if(v !== last){
- last = v;
- return v - diff;
- }
- }
- }else if(a.indexOf('%') != -1){
- var ratio = parseFloat(a.replace('%', ''))*.01;
- return function(v){
- if(v !== last){
- last = v;
- return Math.floor(v*ratio);
- }
- }
- }else{
- a = parseInt(a, 10);
- if(!isNaN(a)){
- return function(v){
- if(v !== last){
- last = v;
- return v + a;
- }
- }
- }
- }
- }
- return false;
- },
-
- adjustWidthAnchor : function(value, comp){
- return value;
- },
-
- adjustHeightAnchor : function(value, comp){
- return value;
- }
-
-
- });
- Ext.Container.LAYOUTS['anchor'] = Ext.layout.AnchorLayout;
- Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {
-
- monitorResize:true,
-
- extraCls: 'x-column',
- scrollOffset : 0,
-
- isValidParent : function(c, target){
- return c.getEl().dom.parentNode == this.innerCt.dom;
- },
-
- onLayout : function(ct, target){
- var cs = ct.items.items, len = cs.length, c, i;
- if(!this.innerCt){
- target.addClass('x-column-layout-ct');
-
-
- this.innerCt = target.createChild({cls:'x-column-inner'});
- this.innerCt.createChild({cls:'x-clear'});
- }
- this.renderAll(ct, this.innerCt);
- var size = target.getViewSize();
- if(size.width < 1 && size.height < 1){
- return;
- }
- var w = size.width - target.getPadding('lr') - this.scrollOffset,
- h = size.height - target.getPadding('tb'),
- pw = w;
- this.innerCt.setWidth(w);
-
-
-
- for(i = 0; i < len; i++){
- c = cs[i];
- if(!c.columnWidth){
- pw -= (c.getSize().width + c.getEl().getMargins('lr'));
- }
- }
- pw = pw < 0 ? 0 : pw;
- for(i = 0; i < len; i++){
- c = cs[i];
- if(c.columnWidth){
- c.setSize(Math.floor(c.columnWidth*pw) - c.getEl().getMargins('lr'));
- }
- }
- }
-
-
- });
- Ext.Container.LAYOUTS['column'] = Ext.layout.ColumnLayout;
- Ext.layout.BorderLayout = Ext.extend(Ext.layout.ContainerLayout, {
- monitorResize:true,
- rendered : false,
- onLayout : function(ct, target){
- var collapsed;
- if(!this.rendered){
- target.position();
- target.addClass('x-border-layout-ct');
- var items = ct.items.items;
- collapsed = [];
- for(var i = 0, len = items.length; i < len; i++) {
- var c = items[i];
- var pos = c.region;
- if(c.collapsed){
- collapsed.push(c);
- }
- c.collapsed = false;
- if(!c.rendered){
- c.cls = c.cls ? c.cls +' x-border-panel' : 'x-border-panel';
- c.render(target, i);
- }
- this[pos] = pos != 'center' && c.split ?
- new Ext.layout.BorderLayout.SplitRegion(this, c.initialConfig, pos) :
- new Ext.layout.BorderLayout.Region(this, c.initialConfig, pos);
- this[pos].render(target, c);
- }
- this.rendered = true;
- }
- var size = target.getViewSize();
- if(size.width < 20 || size.height < 20){ if(collapsed){
- this.restoreCollapsed = collapsed;
- }
- return;
- }else if(this.restoreCollapsed){
- collapsed = this.restoreCollapsed;
- delete this.restoreCollapsed;
- }
- var w = size.width, h = size.height;
- var centerW = w, centerH = h, centerY = 0, centerX = 0;
- var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
- if(!c){
- throw 'No center region defined in BorderLayout ' + ct.id;
- }
- if(n && n.isVisible()){
- var b = n.getSize();
- var m = n.getMargins();
- b.width = w - (m.left+m.right);
- b.x = m.left;
- b.y = m.top;
- centerY = b.height + b.y + m.bottom;
- centerH -= centerY;
- n.applyLayout(b);
- }
- if(s && s.isVisible()){
- var b = s.getSize();
- var m = s.getMargins();
- b.width = w - (m.left+m.right);
- b.x = m.left;
- var totalHeight = (b.height + m.top + m.bottom);
- b.y = h - totalHeight + m.top;
- centerH -= totalHeight;
- s.applyLayout(b);
- }
- if(west && west.isVisible()){
- var b = west.getSize();
- var m = west.getMargins();
- b.height = centerH - (m.top+m.bottom);
- b.x = m.left;
- b.y = centerY + m.top;
- var totalWidth = (b.width + m.left + m.right);
- centerX += totalWidth;
- centerW -= totalWidth;
- west.applyLayout(b);
- }
- if(e && e.isVisible()){
- var b = e.getSize();
- var m = e.getMargins();
- b.height = centerH - (m.top+m.bottom);
- var totalWidth = (b.width + m.left + m.right);
- b.x = w - totalWidth + m.left;
- b.y = centerY + m.top;
- centerW -= totalWidth;
- e.applyLayout(b);
- }
- var m = c.getMargins();
- var centerBox = {
- x: centerX + m.left,
- y: centerY + m.top,
- width: centerW - (m.left+m.right),
- height: centerH - (m.top+m.bottom)
- };
- c.applyLayout(centerBox);
- if(collapsed){
- for(var i = 0, len = collapsed.length; i < len; i++){
- collapsed[i].collapse(false);
- }
- }
- if(Ext.isIE && Ext.isStrict){ target.repaint();
- }
- }
-
-
- });
- Ext.layout.BorderLayout.Region = function(layout, config, pos){
- Ext.apply(this, config);
- this.layout = layout;
- this.position = pos;
- this.state = {};
- if(typeof this.margins == 'string'){
- this.margins = this.layout.parseMargins(this.margins);
- }
- this.margins = Ext.applyIf(this.margins || {}, this.defaultMargins);
- if(this.collapsible){
- if(typeof this.cmargins == 'string'){
- this.cmargins = this.layout.parseMargins(this.cmargins);
- }
- if(this.collapseMode == 'mini' && !this.cmargins){
- this.cmargins = {left:0,top:0,right:0,bottom:0};
- }else{
- this.cmargins = Ext.applyIf(this.cmargins || {},
- pos == 'north' || pos == 'south' ? this.defaultNSCMargins : this.defaultEWCMargins);
- }
- }
- };
- Ext.layout.BorderLayout.Region.prototype = {
-
-
-
-
-
-
- collapsible : false,
-
- split:false,
-
- floatable: true,
-
- minWidth:50,
-
- minHeight:50,
- defaultMargins : {left:0,top:0,right:0,bottom:0},
- defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
- defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
-
- isCollapsed : false,
-
-
-
- render : function(ct, p){
- this.panel = p;
- p.el.enableDisplayMode();
- this.targetEl = ct;
- this.el = p.el;
- var gs = p.getState, ps = this.position;
- p.getState = function(){
- return Ext.apply(gs.call(p) || {}, this.state);
- }.createDelegate(this);
- if(ps != 'center'){
- p.allowQueuedExpand = false;
- p.on({
- beforecollapse: this.beforeCollapse,
- collapse: this.onCollapse,
- beforeexpand: this.beforeExpand,
- expand: this.onExpand,
- hide: this.onHide,
- show: this.onShow,
- scope: this
- });
- if(this.collapsible){
- p.collapseEl = 'el';
- p.slideAnchor = this.getSlideAnchor();
- }
- if(p.tools && p.tools.toggle){
- p.tools.toggle.addClass('x-tool-collapse-'+ps);
- p.tools.toggle.addClassOnOver('x-tool-collapse-'+ps+'-over');
- }
- }
- },
- getCollapsedEl : function(){
- if(!this.collapsedEl){
- if(!this.toolTemplate){
- var tt = new Ext.Template(
- '<div class="x-tool x-tool-{id}"> </div>'
- );
- tt.disableFormats = true;
- tt.compile();
- Ext.layout.BorderLayout.Region.prototype.toolTemplate = tt;
- }
- this.collapsedEl = this.targetEl.createChild({
- cls: "x-layout-collapsed x-layout-collapsed-"+this.position,
- id: this.panel.id + '-xcollapsed'
- });
- this.collapsedEl.enableDisplayMode('block');
- if(this.collapseMode == 'mini'){
- this.collapsedEl.addClass('x-layout-cmini-'+this.position);
- this.miniCollapsedEl = this.collapsedEl.createChild({
- cls: "x-layout-mini x-layout-mini-"+this.position, html: " "
- });
- this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');
- this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
- this.collapsedEl.on('click', this.onExpandClick, this, {stopEvent:true});
- }else {
- var t = this.toolTemplate.append(
- this.collapsedEl.dom,
- {id:'expand-'+this.position}, true);
- t.addClassOnOver('x-tool-expand-'+this.position+'-over');
- t.on('click', this.onExpandClick, this, {stopEvent:true});
-
- if(this.floatable !== false){
- this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
- this.collapsedEl.on("click", this.collapseClick, this);
- }
- }
- }
- return this.collapsedEl;
- },
- onExpandClick : function(e){
- if(this.isSlid){
- this.afterSlideIn();
- this.panel.expand(false);
- }else{
- this.panel.expand();
- }
- },
- onCollapseClick : function(e){
- this.panel.collapse();
- },
- beforeCollapse : function(p, animate){
- this.lastAnim = animate;
- if(this.splitEl){
- this.splitEl.hide();
- }
- this.getCollapsedEl().show();
- this.panel.el.setStyle('z-index', 100);
- this.isCollapsed = true;
- this.layout.layout();
- },
- onCollapse : function(animate){
- this.panel.el.setStyle('z-index', 1);
- if(this.lastAnim === false || this.panel.animCollapse === false){
- this.getCollapsedEl().dom.style.visibility = 'visible';
- }else{
- this.getCollapsedEl().slideIn(this.panel.slideAnchor, {duration:.2});
- }
- this.state.collapsed = true;
- this.panel.saveState();
- },
- beforeExpand : function(animate){
- var c = this.getCollapsedEl();
- this.el.show();
- if(this.position == 'east' || this.position == 'west'){
- this.panel.setSize(undefined, c.getHeight());
- }else{
- this.panel.setSize(c.getWidth(), undefined);
- }
- c.hide();
- c.dom.style.visibility = 'hidden';
- this.panel.el.setStyle('z-index', 100);
- },
- onExpand : function(){
- this.isCollapsed = false;
- if(this.splitEl){
- this.splitEl.show();
- }
- this.layout.layout();
- this.panel.el.setStyle('z-index', 1);
- this.state.collapsed = false;
- this.panel.saveState();
- },
- collapseClick : function(e){
- if(this.isSlid){
- e.stopPropagation();
- this.slideIn();
- }else{
- e.stopPropagation();
- this.slideOut();
- }
- },
- onHide : function(){
- if(this.isCollapsed){
- this.getCollapsedEl().hide();
- }else if(this.splitEl){
- this.splitEl.hide();
- }
- },
- onShow : function(){
- if(this.isCollapsed){
- this.getCollapsedEl().show();
- }else if(this.splitEl){
- this.splitEl.show();
- }
- },
-
- isVisible : function(){
- return !this.panel.hidden;
- },
-
- getMargins : function(){
- return this.isCollapsed && this.cmargins ? this.cmargins : this.margins;
- },
-
- getSize : function(){
- return this.isCollapsed ? this.getCollapsedEl().getSize() : this.panel.getSize();
- },
-
- setPanel : function(panel){
- this.panel = panel;
- },
-
- getMinWidth: function(){
- return this.minWidth;
- },
-
- getMinHeight: function(){
- return this.minHeight;
- },
- applyLayoutCollapsed : function(box){
- var ce = this.getCollapsedEl();
- ce.setLeftTop(box.x, box.y);
- ce.setSize(box.width, box.height);
- },
- applyLayout : function(box){
- if(this.isCollapsed){
- this.applyLayoutCollapsed(box);
- }else{
- this.panel.setPosition(box.x, box.y);
- this.panel.setSize(box.width, box.height);
- }
- },
- beforeSlide: function(){
- this.panel.beforeEffect();
- },
- afterSlide : function(){
- this.panel.afterEffect();
- },
- initAutoHide : function(){
- if(this.autoHide !== false){
- if(!this.autoHideHd){
- var st = new Ext.util.DelayedTask(this.slideIn, this);
- this.autoHideHd = {
- "mouseout": function(e){
- if(!e.within(this.el, true)){
- st.delay(500);
- }
- },
- "mouseover" : function(e){
- st.cancel();
- },
- scope : this
- };
- }
- this.el.on(this.autoHideHd);
- }
- },
- clearAutoHide : function(){
- if(this.autoHide !== false){
- this.el.un("mouseout", this.autoHideHd.mouseout);
- this.el.un("mouseover", this.autoHideHd.mouseover);
- }
- },
- clearMonitor : function(){
- Ext.getDoc().un("click", this.slideInIf, this);
- },
- slideOut : function(){
- if(this.isSlid || this.el.hasActiveFx()){
- return;
- }
- this.isSlid = true;
- var ts = this.panel.tools;
- if(ts && ts.toggle){
- ts.toggle.hide();
- }
- this.el.show();
- if(this.position == 'east' || this.position == 'west'){
- this.panel.setSize(undefined, this.collapsedEl.getHeight());
- }else{
- this.panel.setSize(this.collapsedEl.getWidth(), undefined);
- }
- this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top];
- this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
- this.el.setStyle("z-index", 102);
- if(this.animFloat !== false){
- this.beforeSlide();
- this.el.slideIn(this.getSlideAnchor(), {
- callback: function(){
- this.afterSlide();
- this.initAutoHide();
- Ext.getDoc().on("click", this.slideInIf, this);
- },
- scope: this,
- block: true
- });
- }else{
- this.initAutoHide();
- Ext.getDoc().on("click", this.slideInIf, this);
- }
- },
- afterSlideIn : function(){
- this.clearAutoHide();
- this.isSlid = false;
- this.clearMonitor();
- this.el.setStyle("z-index", "");
- this.el.dom.style.left = this.restoreLT[0];
- this.el.dom.style.top = this.restoreLT[1];
- var ts = this.panel.tools;
- if(ts && ts.toggle){
- ts.toggle.show();
- }
- },
- slideIn : function(cb){
- if(!this.isSlid || this.el.hasActiveFx()){
- Ext.callback(cb);
- return;
- }
- this.isSlid = false;
- if(this.animFloat !== false){
- this.beforeSlide();
- this.el.slideOut(this.getSlideAnchor(), {
- callback: function(){
- this.el.hide();
- this.afterSlide();
- this.afterSlideIn();
- Ext.callback(cb);
- },
- scope: this,
- block: true
- });
- }else{
- this.el.hide();
- this.afterSlideIn();
- }
- },
- slideInIf : function(e){
- if(!e.within(this.el)){
- this.slideIn();
- }
- },
- anchors : {
- "west" : "left",
- "east" : "right",
- "north" : "top",
- "south" : "bottom"
- },
- sanchors : {
- "west" : "l",
- "east" : "r",
- "north" : "t",
- "south" : "b"
- },
- canchors : {
- "west" : "tl-tr",
- "east" : "tr-tl",
- "north" : "tl-bl",
- "south" : "bl-tl"
- },
- getAnchor : function(){
- return this.anchors[this.position];
- },
- getCollapseAnchor : function(){
- return this.canchors[this.position];
- },
- getSlideAnchor : function(){
- return this.sanchors[this.position];
- },
- getAlignAdj : function(){
- var cm = this.cmargins;
- switch(this.position){
- case "west":
- return [0, 0];
- break;
- case "east":
- return [0, 0];
- break;
- case "north":
- return [0, 0];
- break;
- case "south":
- return [0, 0];
- break;
- }
- },
- getExpandAdj : function(){
- var c = this.collapsedEl, cm = this.cmargins;
- switch(this.position){
- case "west":
- return [-(cm.right+c.getWidth()+cm.left), 0];
- break;
- case "east":
- return [cm.right+c.getWidth()+cm.left, 0];
- break;
- case "north":
- return [0, -(cm.top+cm.bottom+c.getHeight())];
- break;
- case "south":
- return [0, cm.top+cm.bottom+c.getHeight()];
- break;
- }
- }
- };
- Ext.layout.BorderLayout.SplitRegion = function(layout, config, pos){
- Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this, layout, config, pos);
- this.applyLayout = this.applyFns[pos];
- };
- Ext.extend(Ext.layout.BorderLayout.SplitRegion, Ext.layout.BorderLayout.Region, {
-
- splitTip : "Drag to resize.",
-
- collapsibleSplitTip : "Drag to resize. Double click to hide.",
-
- useSplitTips : false,
- splitSettings : {
- north : {
- orientation: Ext.SplitBar.VERTICAL,
- placement: Ext.SplitBar.TOP,
- maxFn : 'getVMaxSize',
- minProp: 'minHeight',
- maxProp: 'maxHeight'
- },
- south : {
- orientation: Ext.SplitBar.VERTICAL,
- placement: Ext.SplitBar.BOTTOM,
- maxFn : 'getVMaxSize',
- minProp: 'minHeight',
- maxProp: 'maxHeight'
- },
- east : {
- orientation: Ext.SplitBar.HORIZONTAL,
- placement: Ext.SplitBar.RIGHT,
- maxFn : 'getHMaxSize',
- minProp: 'minWidth',
- maxProp: 'maxWidth'
- },
- west : {
- orientation: Ext.SplitBar.HORIZONTAL,
- placement: Ext.SplitBar.LEFT,
- maxFn : 'getHMaxSize',
- minProp: 'minWidth',
- maxProp: 'maxWidth'
- }
- },
- applyFns : {
- west : function(box){
- if(this.isCollapsed){
- return this.applyLayoutCollapsed(box);
- }
- var sd = this.splitEl.dom, s = sd.style;
- this.panel.setPosition(box.x, box.y);
- var sw = sd.offsetWidth;
- s.left = (box.x+box.width-sw)+'px';
- s.top = (box.y)+'px';
- s.height = Math.max(0, box.height)+'px';
- this.panel.setSize(box.width-sw, box.height);
- },
- east : function(box){
- if(this.isCollapsed){
- return this.applyLayoutCollapsed(box);
- }
- var sd = this.splitEl.dom, s = sd.style;
- var sw = sd.offsetWidth;
- this.panel.setPosition(box.x+sw, box.y);
- s.left = (box.x)+'px';
- s.top = (box.y)+'px';
- s.height = Math.max(0, box.height)+'px';
- this.panel.setSize(box.width-sw, box.height);
- },
- north : function(box){
- if(this.isCollapsed){
- return this.applyLayoutCollapsed(box);
- }
- var sd = this.splitEl.dom, s = sd.style;
- var sh = sd.offsetHeight;
- this.panel.setPosition(box.x, box.y);
- s.left = (box.x)+'px';
- s.top = (box.y+box.height-sh)+'px';
- s.width = Math.max(0, box.width)+'px';
- this.panel.setSize(box.width, box.height-sh);
- },
- south : function(box){
- if(this.isCollapsed){
- return this.applyLayoutCollapsed(box);
- }
- var sd = this.splitEl.dom, s = sd.style;
- var sh = sd.offsetHeight;
- this.panel.setPosition(box.x, box.y+sh);
- s.left = (box.x)+'px';
- s.top = (box.y)+'px';
- s.width = Math.max(0, box.width)+'px';
- this.panel.setSize(box.width, box.height-sh);
- }
- },
- render : function(ct, p){
- Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this, ct, p);
- var ps = this.position;
- this.splitEl = ct.createChild({
- cls: "x-layout-split x-layout-split-"+ps, html: " ",
- id: this.panel.id + '-xsplit'
- });
- if(this.collapseMode == 'mini'){
- this.miniSplitEl = this.splitEl.createChild({
- cls: "x-layout-mini x-layout-mini-"+ps, html: " "
- });
- this.miniSplitEl.addClassOnOver('x-layout-mini-over');
- this.miniSplitEl.on('click', this.onCollapseClick, this, {stopEvent:true});
- }
- var s = this.splitSettings[ps];
- this.split = new Ext.SplitBar(this.splitEl.dom, p.el, s.orientation);
- this.split.placement = s.placement;
- this.split.getMaximumSize = this[s.maxFn].createDelegate(this);
- this.split.minSize = this.minSize || this[s.minProp];
- this.split.on("beforeapply", this.onSplitMove, this);
- this.split.useShim = this.useShim === true;
- this.maxSize = this.maxSize || this[s.maxProp];
- if(p.hidden){
- this.splitEl.hide();
- }
- if(this.useSplitTips){
- this.splitEl.dom.title = this.collapsible ? this.collapsibleSplitTip : this.splitTip;
- }
- if(this.collapsible){
- this.splitEl.on("dblclick", this.onCollapseClick, this);
- }
- },
- getSize : function(){
- if(this.isCollapsed){
- return this.collapsedEl.getSize();
- }
- var s = this.panel.getSize();
- if(this.position == 'north' || this.position == 'south'){
- s.height += this.splitEl.dom.offsetHeight;
- }else{
- s.width += this.splitEl.dom.offsetWidth;
- }
- return s;
- },
- getHMaxSize : function(){
- var cmax = this.maxSize || 10000;
- var center = this.layout.center;
- return Math.min(cmax, (this.el.getWidth()+center.el.getWidth())-center.getMinWidth());
- },
- getVMaxSize : function(){
- var cmax = this.maxSize || 10000;
- var center = this.layout.center;
- return Math.min(cmax, (this.el.getHeight()+center.el.getHeight())-center.getMinHeight());
- },
- onSplitMove : function(split, newSize){
- var s = this.panel.getSize();
- this.lastSplitSize = newSize;
- if(this.position == 'north' || this.position == 'south'){
- this.panel.setSize(s.width, newSize);
- this.state.height = newSize;
- }else{
- this.panel.setSize(newSize, s.height);
- this.state.width = newSize;
- }
- this.layout.layout();
- this.panel.saveState();
- return false;
- },
-
- getSplitBar : function(){
- return this.split;
- }
- });
- Ext.Container.LAYOUTS['border'] = Ext.layout.BorderLayout;
- Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {
-
-
-
- labelSeparator : ':',
- getAnchorViewSize : function(ct, target){
- return ct.body.getStyleSize();
- },
- setContainer : function(ct){
- Ext.layout.FormLayout.superclass.setContainer.call(this, ct);
- if(ct.labelAlign){
- ct.addClass('x-form-label-'+ct.labelAlign);
- }
- if(ct.hideLabels){
- this.labelStyle = "display:none";
- this.elementStyle = "padding-left:0;";
- this.labelAdjust = 0;
- }else{
- this.labelSeparator = ct.labelSeparator || this.labelSeparator;
- ct.labelWidth = ct.labelWidth || 100;
- if(typeof ct.labelWidth == 'number'){
- var pad = (typeof ct.labelPad == 'number' ? ct.labelPad : 5);
- this.labelAdjust = ct.labelWidth+pad;
- this.labelStyle = "width:"+ct.labelWidth+"px;";
- this.elementStyle = "padding-left:"+(ct.labelWidth+pad)+'px';
- }
- if(ct.labelAlign == 'top'){
- this.labelStyle = "width:auto;";
- this.labelAdjust = 0;
- this.elementStyle = "padding-left:0;";
- }
- }
- if(!this.fieldTpl){
- var t = new Ext.Template(
- '<div class="x-form-item {5}" tabIndex="-1">',
- '<label for="{0}" style="{2}" class="x-form-item-label">{1}{4}</label>',
- '<div class="x-form-element" id="x-form-el-{0}" style="{3}">',
- '</div><div class="{6}"></div>',
- '</div>'
- );
- t.disableFormats = true;
- t.compile();
- Ext.layout.FormLayout.prototype.fieldTpl = t;
- }
- },
- renderItem : function(c, position, target){
- if(c && !c.rendered && c.isFormField && c.inputType != 'hidden'){
- var args = [
- c.id, c.fieldLabel,
- c.labelStyle||this.labelStyle||'',
- this.elementStyle||'',
- typeof c.labelSeparator == 'undefined' ? this.labelSeparator : c.labelSeparator,
- (c.itemCls||this.container.itemCls||'') + (c.hideLabel ? ' x-hide-label' : ''),
- c.clearCls || 'x-form-clear-left'
- ];
- if(typeof position == 'number'){
- position = target.dom.childNodes[position] || null;
- }
- if(position){
- this.fieldTpl.insertBefore(position, args);
- }else{
- this.fieldTpl.append(target, args);
- }
- c.render('x-form-el-'+c.id);
- }else {
- Ext.layout.FormLayout.superclass.renderItem.apply(this, arguments);
- }
- },
- adjustWidthAnchor : function(value, comp){
- return value - (comp.isFormField ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
- },
- isValidParent : function(c, target){
- return true;
- }
-
- });
- Ext.Container.LAYOUTS['form'] = Ext.layout.FormLayout;
- Ext.layout.Accordion = Ext.extend(Ext.layout.FitLayout, {
-
- fill : true,
-
- autoWidth : true,
-
- titleCollapse : true,
-
- hideCollapseTool : false,
-
- collapseFirst : false,
-
- animate : false,
-
- sequence : false,
-
- activeOnTop : false,
- renderItem : function(c){
- if(this.animate === false){
- c.animCollapse = false;
- }
- c.collapsible = true;
- if(this.autoWidth){
- c.autoWidth = true;
- }
- if(this.titleCollapse){
- c.titleCollapse = true;
- }
- if(this.hideCollapseTool){
- c.hideCollapseTool = true;
- }
- if(this.collapseFirst !== undefined){
- c.collapseFirst = this.collapseFirst;
- }
- if(!this.activeItem && !c.collapsed){
- this.activeItem = c;
- }else if(this.activeItem){
- c.collapsed = true;
- }
- Ext.layout.Accordion.superclass.renderItem.apply(this, arguments);
- c.header.addClass('x-accordion-hd');
- c.on('beforeexpand', this.beforeExpand, this);
- },
-
- beforeExpand : function(p, anim){
- var ai = this.activeItem;
- if(ai){
- if(this.sequence){
- delete this.activeItem;
- ai.collapse({callback:function(){
- p.expand(anim || true);
- }, scope: this});
- return false;
- }else{
- ai.collapse(this.animate);
- }
- }
- this.activeItem = p;
- if(this.activeOnTop){
- p.el.dom.parentNode.insertBefore(p.el.dom, p.el.dom.parentNode.firstChild);
- }
- this.layout();
- },
-
- setItemSize : function(item, size){
- if(this.fill && item){
- var items = this.container.items.items;
- var hh = 0;
- for(var i = 0, len = items.length; i < len; i++){
- var p = items[i];
- if(p != item){
- hh += (p.getSize().height - p.bwrap.getHeight());
- }
- }
- size.height -= hh;
- item.setSize(size);
- }
- }
- });
- Ext.Container.LAYOUTS['accordion'] = Ext.layout.Accordion;
- Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {
-
-
- monitorResize:false,
-
- setContainer : function(ct){
- Ext.layout.TableLayout.superclass.setContainer.call(this, ct);
- this.currentRow = 0;
- this.currentColumn = 0;
- this.cells = [];
- },
-
- onLayout : function(ct, target){
- var cs = ct.items.items, len = cs.length, c, i;
- if(!this.table){
- target.addClass('x-table-layout-ct');
- this.table = target.createChild(
- {tag:'table', cls:'x-table-layout', cellspacing: 0, cn: {tag: 'tbody'}}, null, true);
- this.renderAll(ct, target);
- }
- },
-
- getRow : function(index){
- var row = this.table.tBodies[0].childNodes[index];
- if(!row){
- row = document.createElement('tr');
- this.table.tBodies[0].appendChild(row);
- }
- return row;
- },
-
- getNextCell : function(c){
- var cell = this.getNextNonSpan(this.currentColumn, this.currentRow);
- var curCol = this.currentColumn = cell[0], curRow = this.currentRow = cell[1];
- for(var rowIndex = curRow; rowIndex < curRow + (c.rowspan || 1); rowIndex++){
- if(!this.cells[rowIndex]){
- this.cells[rowIndex] = [];
- }
- for(var colIndex = curCol; colIndex < curCol + (c.colspan || 1); colIndex++){
- this.cells[rowIndex][colIndex] = true;
- }
- }
- var td = document.createElement('td');
- if(c.cellId){
- td.id = c.cellId;
- }
- var cls = 'x-table-layout-cell';
- if(c.cellCls){
- cls += ' ' + c.cellCls;
- }
- td.className = cls;
- if(c.colspan){
- td.colSpan = c.colspan;
- }
- if(c.rowspan){
- td.rowSpan = c.rowspan;
- }
- this.getRow(curRow).appendChild(td);
- return td;
- },
-
-
- getNextNonSpan: function(colIndex, rowIndex){
- var cols = this.columns;
- while((cols && colIndex >= cols) || (this.cells[rowIndex] && this.cells[rowIndex][colIndex])) {
- if(cols && colIndex >= cols){
- rowIndex++;
- colIndex = 0;
- }else{
- colIndex++;
- }
- }
- return [colIndex, rowIndex];
- },
-
- renderItem : function(c, position, target){
- if(c && !c.rendered){
- c.render(this.getNextCell(c));
- }
- },
-
- isValidParent : function(c, target){
- return true;
- }
-
- });
- Ext.Container.LAYOUTS['table'] = Ext.layout.TableLayout;
- Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {
- extraCls: 'x-abs-layout-item',
- isForm: false,
-
- setContainer : function(ct){
- Ext.layout.AbsoluteLayout.superclass.setContainer.call(this, ct);
- if(ct.isXType('form')){
- this.isForm = true;
- }
- },
- onLayout : function(ct, target){
- if(this.isForm){ ct.body.position(); } else { target.position(); }
- Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, ct, target);
- },
-
- getAnchorViewSize : function(ct, target){
- return this.isForm ? ct.body.getStyleSize() : Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this, ct, target);
- },
-
- isValidParent : function(c, target){
- return this.isForm ? true : Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this, c, target);
- },
-
- adjustWidthAnchor : function(value, comp){
- return value ? value - comp.getPosition(true)[0] : value;
- },
-
- adjustHeightAnchor : function(value, comp){
- return value ? value - comp.getPosition(true)[1] : value;
- }
-
- });
- Ext.Container.LAYOUTS['absolute'] = Ext.layout.AbsoluteLayout;
- Ext.Viewport = Ext.extend(Ext.Container, {
-
-
-
-
-
-
-
-
-
-
-
-
- initComponent : function() {
- Ext.Viewport.superclass.initComponent.call(this);
- document.getElementsByTagName('html')[0].className += ' x-viewport';
- this.el = Ext.getBody();
- this.el.setHeight = Ext.emptyFn;
- this.el.setWidth = Ext.emptyFn;
- this.el.setSize = Ext.emptyFn;
- this.el.dom.scroll = 'no';
- this.allowDomMove = false;
- this.autoWidth = true;
- this.autoHeight = true;
- Ext.EventManager.onWindowResize(this.fireResize, this);
- this.renderTo = this.el;
- },
- fireResize : function(w, h){
- this.fireEvent('resize', this, w, h, w, h);
- }
- });
- Ext.reg('viewport', Ext.Viewport);
- Ext.Panel = Ext.extend(Ext.Container, {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- baseCls : 'x-panel',
-
- collapsedCls : 'x-panel-collapsed',
-
- maskDisabled: true,
-
- animCollapse: Ext.enableFx,
-
- headerAsText: true,
-
- buttonAlign: 'right',
-
- collapsed : false,
-
- collapseFirst: true,
-
- minButtonWidth:75,
-
- elements : 'body',
- toolTarget : 'header',
- collapseEl : 'bwrap',
- slideAnchor : 't',
- deferHeight: true,
- expandDefaults: {
- duration:.25
- },
- collapseDefaults: {
- duration:.25
- },
- initComponent : function(){
- Ext.Panel.superclass.initComponent.call(this);
- this.addEvents(
-
- 'bodyresize',
-
- 'titlechange',
-
- 'collapse',
-
- 'expand',
-
- 'beforecollapse',
-
- 'beforeexpand',
-
- 'beforeclose',
-
- 'close',
-
- 'activate',
-
- 'deactivate'
- );
- if(this.tbar){
- this.elements += ',tbar';
- if(typeof this.tbar == 'object'){
- this.topToolbar = this.tbar;
- }
- delete this.tbar;
- }
- if(this.bbar){
- this.elements += ',bbar';
- if(typeof this.bbar == 'object'){
- this.bottomToolbar = this.bbar;
- }
- delete this.bbar;
- }
- if(this.header === true){
- this.elements += ',header';
- delete this.header;
- }else if(this.title && this.header !== false){
- this.elements += ',header';
- }
- if(this.footer === true){
- this.elements += ',footer';
- delete this.footer;
- }
- if(this.buttons){
- var btns = this.buttons;
-
- this.buttons = [];
- for(var i = 0, len = btns.length; i < len; i++) {
- if(btns[i].render){ this.buttons.push(btns[i]);
- }else{
- this.addButton(btns[i]);
- }
- }
- }
- if(this.autoLoad){
- this.on('render', this.doAutoLoad, this, {delay:10});
- }
- },
- createElement : function(name, pnode){
- if(this[name]){
- pnode.appendChild(this[name].dom);
- return;
- }
- if(name === 'bwrap' || this.elements.indexOf(name) != -1){
- if(this[name+'Cfg']){
- this[name] = Ext.fly(pnode).createChild(this[name+'Cfg']);
- }else{
- var el = document.createElement('div');
- el.className = this[name+'Cls'];
- this[name] = Ext.get(pnode.appendChild(el));
- }
- }
- },
- onRender : function(ct, position){
- Ext.Panel.superclass.onRender.call(this, ct, position);
- this.createClasses();
- if(this.el){ this.el.addClass(this.baseCls);
- this.header = this.el.down('.'+this.headerCls);
- this.bwrap = this.el.down('.'+this.bwrapCls);
- var cp = this.bwrap ? this.bwrap : this.el;
- this.tbar = cp.down('.'+this.tbarCls);
- this.body = cp.down('.'+this.bodyCls);
- this.bbar = cp.down('.'+this.bbarCls);
- this.footer = cp.down('.'+this.footerCls);
- this.fromMarkup = true;
- }else{
- this.el = ct.createChild({
- id: this.id,
- cls: this.baseCls
- }, position);
- }
- var el = this.el, d = el.dom;
- if(this.cls){
- this.el.addClass(this.cls);
- }
- if(this.buttons){
- this.elements += ',footer';
- }
-
- if(this.frame){
- el.insertHtml('afterBegin', String.format(Ext.Element.boxMarkup, this.baseCls));
- this.createElement('header', d.firstChild.firstChild.firstChild);
- this.createElement('bwrap', d);
- var bw = this.bwrap.dom;
- var ml = d.childNodes[1], bl = d.childNodes[2];
- bw.appendChild(ml);
- bw.appendChild(bl);
- var mc = bw.firstChild.firstChild.firstChild;
- this.createElement('tbar', mc);
- this.createElement('body', mc);
- this.createElement('bbar', mc);
- this.createElement('footer', bw.lastChild.firstChild.firstChild);
- if(!this.footer){
- this.bwrap.dom.lastChild.className += ' x-panel-nofooter';
- }
- }else{
- this.createElement('header', d);
- this.createElement('bwrap', d);
- var bw = this.bwrap.dom;
- this.createElement('tbar', bw);
- this.createElement('body', bw);
- this.createElement('bbar', bw);
- this.createElement('footer', bw);
- if(!this.header){
- this.body.addClass(this.bodyCls + '-noheader');
- if(this.tbar){
- this.tbar.addClass(this.tbarCls + '-noheader');
- }
- }
- }
- if(this.border === false){
- this.el.addClass(this.baseCls + '-noborder');
- this.body.addClass(this.bodyCls + '-noborder');
- if(this.header){
- this.header.addClass(this.headerCls + '-noborder');
- }
- if(this.footer){
- this.footer.addClass(this.footerCls + '-noborder');
- }
- if(this.tbar){
- this.tbar.addClass(this.tbarCls + '-noborder');
- }
- if(this.bbar){
- this.bbar.addClass(this.bbarCls + '-noborder');
- }
- }
- if(this.bodyBorder === false){
- this.body.addClass(this.bodyCls + '-noborder');
- }
- if(this.bodyStyle){
- this.body.applyStyles(this.bodyStyle);
- }
- this.bwrap.enableDisplayMode('block');
- if(this.header){
- this.header.unselectable();
- if(this.headerAsText){
- this.header.dom.innerHTML =
- '<span class="' + this.headerTextCls + '">'+this.header.dom.innerHTML+'</span>';
- if(this.iconCls){
- this.setIconClass(this.iconCls);
- }
- }
- }
- if(this.floating){
- this.makeFloating(this.floating);
- }
- if(this.collapsible){
- this.tools = this.tools ? this.tools.slice(0) : [];
- if(!this.hideCollapseTool){
- this.tools[this.collapseFirst?'unshift':'push']({
- id: 'toggle',
- handler : this.toggleCollapse,
- scope: this
- });
- }
- if(this.titleCollapse && this.header){
- this.header.on('click', this.toggleCollapse, this);
- this.header.setStyle('cursor', 'pointer');
- }
- }
- if(this.tools){
- var ts = this.tools;
- this.tools = {};
- this.addTool.apply(this, ts);
- }else{
- this.tools = {};
- }
- if(this.buttons && this.buttons.length > 0){
- var tb = this.footer.createChild({cls:'x-panel-btns-ct', cn: {
- cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,
- html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
- }}, null, true);
- var tr = tb.getElementsByTagName('tr')[0];
- for(var i = 0, len = this.buttons.length; i < len; i++) {
- var b = this.buttons[i];
- var td = document.createElement('td');
- td.className = 'x-panel-btn-td';
- b.render(tr.appendChild(td));
- }
- }
- if(this.tbar && this.topToolbar){
- if(Ext.isArray(this.topToolbar)){
- this.topToolbar = new Ext.Toolbar(this.topToolbar);
- }
- this.topToolbar.render(this.tbar);
- }
- if(this.bbar && this.bottomToolbar){
- if(Ext.isArray(this.bottomToolbar)){
- this.bottomToolbar = new Ext.Toolbar(this.bottomToolbar);
- }
- this.bottomToolbar.render(this.bbar);
- }
- },
-
- setIconClass : function(cls){
- var old = this.iconCls;
- this.iconCls = cls;
- if(this.rendered && this.header){
- if(this.frame){
- this.header.addClass('x-panel-icon');
- this.header.replaceClass(old, this.iconCls);
- }else{
- var hd = this.header.dom;
- var img = hd.firstChild && String(hd.firstChild.tagName).toLowerCase() == 'img' ? hd.firstChild : null;
- if(img){
- Ext.fly(img).replaceClass(old, this.iconCls);
- }else{
- Ext.DomHelper.insertBefore(hd.firstChild, {
- tag:'img', src: Ext.BLANK_IMAGE_URL, cls:'x-panel-inline-icon '+this.iconCls
- });
- }
- }
- }
- },
- makeFloating : function(cfg){
- this.floating = true;
- this.el = new Ext.Layer(
- typeof cfg == 'object' ? cfg : {
- shadow: this.shadow !== undefined ? this.shadow : 'sides',
- shadowOffset: this.shadowOffset,
- constrain:false,
- shim: this.shim === false ? false : undefined
- }, this.el
- );
- },
-
- getTopToolbar : function(){
- return this.topToolbar;
- },
-
- getBottomToolbar : function(){
- return this.bottomToolbar;
- },
-
- addButton : function(config, handler, scope){
- var bc = {
- handler: handler,
- scope: scope,
- minWidth: this.minButtonWidth,
- hideParent:true
- };
- if(typeof config == "string"){
- bc.text = config;
- }else{
- Ext.apply(bc, config);
- }
- var btn = new Ext.Button(bc);
- btn.ownerCt = this;
- if(!this.buttons){
- this.buttons = [];
- }
- this.buttons.push(btn);
- return btn;
- },
- addTool : function(){
- if(!this[this.toolTarget]) { return;
- }
- if(!this.toolTemplate){
- var tt = new Ext.Template(
- '<div class="x-tool x-tool-{id}"> </div>'
- );
- tt.disableFormats = true;
- tt.compile();
- Ext.Panel.prototype.toolTemplate = tt;
- }
- for(var i = 0, a = arguments, len = a.length; i < len; i++) {
- var tc = a[i], overCls = 'x-tool-'+tc.id+'-over';
- var t = this.toolTemplate.insertFirst(this[this.toolTarget], tc, true);
- this.tools[tc.id] = t;
- t.enableDisplayMode('block');
- t.on('click', this.createToolHandler(t, tc, overCls, this));
- if(tc.on){
- t.on(tc.on);
- }
- if(tc.hidden){
- t.hide();
- }
- if(tc.qtip){
- if(typeof tc.qtip == 'object'){
- Ext.QuickTips.register(Ext.apply({
- target: t.id
- }, tc.qtip));
- } else {
- t.dom.qtip = tc.qtip;
- }
- }
- t.addClassOnOver(overCls);
- }
- },
- onShow : function(){
- if(this.floating){
- return this.el.show();
- }
- Ext.Panel.superclass.onShow.call(this);
- },
- onHide : function(){
- if(this.floating){
- return this.el.hide();
- }
- Ext.Panel.superclass.onHide.call(this);
- },
- createToolHandler : function(t, tc, overCls, panel){
- return function(e){
- t.removeClass(overCls);
- e.stopEvent();
- if(tc.handler){
- tc.handler.call(tc.scope || t, e, t, panel);
- }
- };
- },
- afterRender : function(){
- if(this.fromMarkup && this.height === undefined && !this.autoHeight){
- this.height = this.el.getHeight();
- }
- if(this.floating && !this.hidden && !this.initHidden){
- this.el.show();
- }
- if(this.title){
- this.setTitle(this.title);
- }
- this.setAutoScroll();
- if(this.html){
- this.body.update(typeof this.html == 'object' ?
- Ext.DomHelper.markup(this.html) :
- this.html);
- delete this.html;
- }
- if(this.contentEl){
- var ce = Ext.getDom(this.contentEl);
- Ext.fly(ce).removeClass(['x-hidden', 'x-hide-display']);
- this.body.dom.appendChild(ce);
- }
- if(this.collapsed){
- this.collapsed = false;
- this.collapse(false);
- }
- Ext.Panel.superclass.afterRender.call(this); this.initEvents();
- },
-
- setAutoScroll : function(){
- if(this.rendered && this.autoScroll){
- this.body.setOverflow('auto');
- }
- },
- getKeyMap : function(){
- if(!this.keyMap){
- this.keyMap = new Ext.KeyMap(this.el, this.keys);
- }
- return this.keyMap;
- },
- initEvents : function(){
- if(this.keys){
- this.getKeyMap();
- }
- if(this.draggable){
- this.initDraggable();
- }
- },
- initDraggable : function(){
- this.dd = new Ext.Panel.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);
- },
- beforeEffect : function(){
- if(this.floating){
- this.el.beforeAction();
- }
- this.el.addClass('x-panel-animated');
- },
- afterEffect : function(){
- this.syncShadow();
- this.el.removeClass('x-panel-animated');
- },
- createEffect : function(a, cb, scope){
- var o = {
- scope:scope,
- block:true
- };
- if(a === true){
- o.callback = cb;
- return o;
- }else if(!a.callback){
- o.callback = cb;
- }else { o.callback = function(){
- cb.call(scope);
- Ext.callback(a.callback, a.scope);
- };
- }
- return Ext.applyIf(o, a);
- },
-
- collapse : function(animate){
- if(this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforecollapse', this, animate) === false){
- return;
- }
- var doAnim = animate === true || (animate !== false && this.animCollapse);
- this.beforeEffect();
- this.onCollapse(doAnim, animate);
- return this;
- },
- onCollapse : function(doAnim, animArg){
- if(doAnim){
- this[this.collapseEl].slideOut(this.slideAnchor,
- Ext.apply(this.createEffect(animArg||true, this.afterCollapse, this),
- this.collapseDefaults));
- }else{
- this[this.collapseEl].hide();
- this.afterCollapse();
- }
- },
- afterCollapse : function(){
- this.collapsed = true;
- this.el.addClass(this.collapsedCls);
- this.afterEffect();
- this.fireEvent('collapse', this);
- },
-
- expand : function(animate){
- if(!this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforeexpand', this, animate) === false){
- return;
- }
- var doAnim = animate === true || (animate !== false && this.animCollapse);
- this.el.removeClass(this.collapsedCls);
- this.beforeEffect();
- this.onExpand(doAnim, animate);
- return this;
- },
- onExpand : function(doAnim, animArg){
- if(doAnim){
- this[this.collapseEl].slideIn(this.slideAnchor,
- Ext.apply(this.createEffect(animArg||true, this.afterExpand, this),
- this.expandDefaults));
- }else{
- this[this.collapseEl].show();
- this.afterExpand();
- }
- },
- afterExpand : function(){
- this.collapsed = false;
- this.afterEffect();
- this.fireEvent('expand', this);
- },
-
- toggleCollapse : function(animate){
- this[this.collapsed ? 'expand' : 'collapse'](animate);
- return this;
- },
- onDisable : function(){
- if(this.rendered && this.maskDisabled){
- this.el.mask();
- }
- Ext.Panel.superclass.onDisable.call(this);
- },
- onEnable : function(){
- if(this.rendered && this.maskDisabled){
- this.el.unmask();
- }
- Ext.Panel.superclass.onEnable.call(this);
- },
- onResize : function(w, h){
- if(w !== undefined || h !== undefined){
- if(!this.collapsed){
- if(typeof w == 'number'){
- this.body.setWidth(
- this.adjustBodyWidth(w - this.getFrameWidth()));
- }else if(w == 'auto'){
- this.body.setWidth(w);
- }
- if(typeof h == 'number'){
- this.body.setHeight(
- this.adjustBodyHeight(h - this.getFrameHeight()));
- }else if(h == 'auto'){
- this.body.setHeight(h);
- }
- }else{
- this.queuedBodySize = {width: w, height: h};
- if(!this.queuedExpand && this.allowQueuedExpand !== false){
- this.queuedExpand = true;
- this.on('expand', function(){
- delete this.queuedExpand;
- this.onResize(this.queuedBodySize.width, this.queuedBodySize.height);
- this.doLayout();
- }, this, {single:true});
- }
- }
- this.fireEvent('bodyresize', this, w, h);
- }
- this.syncShadow();
- },
- adjustBodyHeight : function(h){
- return h;
- },
- adjustBodyWidth : function(w){
- return w;
- },
- onPosition : function(){
- this.syncShadow();
- },
- onDestroy : function(){
- if(this.tools){
- for(var k in this.tools){
- Ext.destroy(this.tools[k]);
- }
- }
- if(this.buttons){
- for(var b in this.buttons){
- Ext.destroy(this.buttons[b]);
- }
- }
- Ext.destroy(
- this.topToolbar,
- this.bottomToolbar
- );
- Ext.Panel.superclass.onDestroy.call(this);
- },
-
- getFrameWidth : function(){
- var w = this.el.getFrameWidth('lr');
- if(this.frame){
- var l = this.bwrap.dom.firstChild;
- w += (Ext.fly(l).getFrameWidth('l') + Ext.fly(l.firstChild).getFrameWidth('r'));
- var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
- w += Ext.fly(mc).getFrameWidth('lr');
- }
- return w;
- },
-
- getFrameHeight : function(){
- var h = this.el.getFrameWidth('tb');
- h += (this.tbar ? this.tbar.getHeight() : 0) +
- (this.bbar ? this.bbar.getHeight() : 0);
- if(this.frame){
- var hd = this.el.dom.firstChild;
- var ft = this.bwrap.dom.lastChild;
- h += (hd.offsetHeight + ft.offsetHeight);
- var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
- h += Ext.fly(mc).getFrameWidth('tb');
- }else{
- h += (this.header ? this.header.getHeight() : 0) +
- (this.footer ? this.footer.getHeight() : 0);
- }
- return h;
- },
-
- getInnerWidth : function(){
- return this.getSize().width - this.getFrameWidth();
- },
-
- getInnerHeight : function(){
- return this.getSize().height - this.getFrameHeight();
- },
- syncShadow : function(){
- if(this.floating){
- this.el.sync(true);
- }
- },
- getLayoutTarget : function(){
- return this.body;
- },
-
- setTitle : function(title, iconCls){
- this.title = title;
- if(this.header && this.headerAsText){
- this.header.child('span').update(title);
- }
- if(iconCls){
- this.setIconClass(iconCls);
- }
- this.fireEvent('titlechange', this, title);
- return this;
- },
-
- getUpdater : function(){
- return this.body.getUpdater();
- },
-
- load : function(){
- var um = this.body.getUpdater();
- um.update.apply(um, arguments);
- return this;
- },
- beforeDestroy : function(){
- Ext.Element.uncache(
- this.header,
- this.tbar,
- this.bbar,
- this.footer,
- this.body
- );
- },
- createClasses : function(){
- this.headerCls = this.baseCls + '-header';
- this.headerTextCls = this.baseCls + '-header-text';
- this.bwrapCls = this.baseCls + '-bwrap';
- this.tbarCls = this.baseCls + '-tbar';
- this.bodyCls = this.baseCls + '-body';
- this.bbarCls = this.baseCls + '-bbar';
- this.footerCls = this.baseCls + '-footer';
- },
- createGhost : function(cls, useShim, appendTo){
- var el = document.createElement('div');
- el.className = 'x-panel-ghost ' + (cls ? cls : '');
- if(this.header){
- el.appendChild(this.el.dom.firstChild.cloneNode(true));
- }
- Ext.fly(el.appendChild(document.createElement('ul'))).setHeight(this.bwrap.getHeight());
- el.style.width = this.el.dom.offsetWidth + 'px';;
- if(!appendTo){
- this.container.dom.appendChild(el);
- }else{
- Ext.getDom(appendTo).appendChild(el);
- }
- if(useShim !== false && this.el.useShim !== false){
- var layer = new Ext.Layer({shadow:false, useDisplay:true, constrain:false}, el);
- layer.show();
- return layer;
- }else{
- return new Ext.Element(el);
- }
- },
- doAutoLoad : function(){
- this.body.load(
- typeof this.autoLoad == 'object' ?
- this.autoLoad : {url: this.autoLoad});
- }
- });
- Ext.reg('panel', Ext.Panel);
- Ext.Window = Ext.extend(Ext.Panel, {
-
-
-
-
-
-
-
- baseCls : 'x-window',
-
- resizable:true,
-
- draggable:true,
-
- closable : true,
-
- constrain:false,
-
- constrainHeader:false,
-
- plain:false,
-
- minimizable : false,
-
- maximizable : false,
-
- minHeight: 100,
-
- minWidth: 200,
-
- expandOnShow: true,
-
- closeAction: 'close',
- collapsible:false,
- initHidden : true,
-
- monitorResize : true,
-
- elements: 'header,body',
-
- frame:true,
-
- floating:true,
- initComponent : function(){
- Ext.Window.superclass.initComponent.call(this);
- this.addEvents(
-
-
-
- 'resize',
-
- 'maximize',
-
- 'minimize',
-
- 'restore'
- );
- },
- getState : function(){
- return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this.getBox());
- },
- onRender : function(ct, position){
- Ext.Window.superclass.onRender.call(this, ct, position);
- if(this.plain){
- this.el.addClass('x-window-plain');
- }
- this.focusEl = this.el.createChild({
- tag: "a", href:"#", cls:"x-dlg-focus",
- tabIndex:"-1", html: " "});
- this.focusEl.swallowEvent('click', true);
- this.proxy = this.el.createProxy("x-window-proxy");
- this.proxy.enableDisplayMode('block');
- if(this.modal){
- this.mask = this.container.createChild({cls:"ext-el-mask"}, this.el.dom);
- this.mask.enableDisplayMode("block");
- this.mask.hide();
- }
- },
- initEvents : function(){
- Ext.Window.superclass.initEvents.call(this);
- if(this.animateTarget){
- this.setAnimateTarget(this.animateTarget);
- }
- if(this.resizable){
- this.resizer = new Ext.Resizable(this.el, {
- minWidth: this.minWidth,
- minHeight:this.minHeight,
- handles: this.resizeHandles || "all",
- pinned: true,
- resizeElement : this.resizerAction
- });
- this.resizer.window = this;
- this.resizer.on("beforeresize", this.beforeResize, this);
- }
- if(this.draggable){
- this.header.addClass("x-window-draggable");
- }
- this.initTools();
- this.el.on("mousedown", this.toFront, this);
- this.manager = this.manager || Ext.WindowMgr;
- this.manager.register(this);
- this.hidden = true;
- if(this.maximized){
- this.maximized = false;
- this.maximize();
- }
- if(this.closable){
- var km = this.getKeyMap();
- km.on(27, this.onEsc, this);
- km.disable();
- }
- },
- initDraggable : function(){
- this.dd = new Ext.Window.DD(this);
- },
- onEsc : function(){
- this[this.closeAction]();
- },
- beforeDestroy : function(){
- Ext.destroy(
- this.resizer,
- this.dd,
- this.proxy,
- this.mask
- );
- Ext.Window.superclass.beforeDestroy.call(this);
- },
-
- onDestroy : function(){
- if(this.manager){
- this.manager.unregister(this);
- }
- Ext.Window.superclass.onDestroy.call(this);
- },
- initTools : function(){
- if(this.minimizable){
- this.addTool({
- id: 'minimize',
- handler: this.minimize.createDelegate(this, [])
- });
- }
- if(this.maximizable){
- this.addTool({
- id: 'maximize',
- handler: this.maximize.createDelegate(this, [])
- });
- this.addTool({
- id: 'restore',
- handler: this.restore.createDelegate(this, []),
- hidden:true
- });
- this.header.on('dblclick', this.toggleMaximize, this);
- }
- if(this.closable){
- this.addTool({
- id: 'close',
- handler: this[this.closeAction].createDelegate(this, [])
- });
- }
- },
- resizerAction : function(){
- var box = this.proxy.getBox();
- this.proxy.hide();
- this.window.handleResize(box);
- return box;
- },
- beforeResize : function(){
- this.resizer.minHeight = Math.max(this.minHeight, this.getFrameHeight() + 40); this.resizer.minWidth = Math.max(this.minWidth, this.getFrameWidth() + 40);
- this.resizeBox = this.el.getBox();
- },
- updateHandles : function(){
- if(Ext.isIE && this.resizer){
- this.resizer.syncHandleHeight();
- this.el.repaint();
- }
- },
- handleResize : function(box){
- var rz = this.resizeBox;
- if(rz.x != box.x || rz.y != box.y){
- this.updateBox(box);
- }else{
- this.setSize(box);
- }
- this.focus();
- this.updateHandles();
- this.saveState();
- this.fireEvent("resize", this, box.width, box.height);
- },
-
- focus : function(){
- var f = this.focusEl, db = this.defaultButton, t = typeof db;
- if(t != 'undefined'){
- if(t == 'number'){
- f = this.buttons[db];
- }else if(t == 'string'){
- f = Ext.getCmp(db);
- }else{
- f = db;
- }
- }
- f.focus.defer(10, f);
- },
-
- setAnimateTarget : function(el){
- el = Ext.get(el);
- this.animateTarget = el;
- },
- beforeShow : function(){
- delete this.el.lastXY;
- delete this.el.lastLT;
- if(this.x === undefined || this.y === undefined){
- var xy = this.el.getAlignToXY(this.container, 'c-c');
- var pos = this.el.translatePoints(xy[0], xy[1]);
- this.x = this.x === undefined? pos.left : this.x;
- this.y = this.y === undefined? pos.top : this.y;
- }
- this.el.setLeftTop(this.x, this.y);
- if(this.expandOnShow){
- this.expand(false);
- }
- if(this.modal){
- Ext.getBody().addClass("x-body-masked");
- this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
- this.mask.show();
- }
- },
-
- show : function(animateTarget, cb, scope){
- if(!this.rendered){
- this.render(Ext.getBody());
- }
- if(this.hidden === false){
- this.toFront();
- return;
- }
- if(this.fireEvent("beforeshow", this) === false){
- return;
- }
- if(cb){
- this.on('show', cb, scope, {single:true});
- }
- this.hidden = false;
- if(animateTarget !== undefined){
- this.setAnimateTarget(animateTarget);
- }
- this.beforeShow();
- if(this.animateTarget){
- this.animShow();
- }else{
- this.afterShow();
- }
- },
- afterShow : function(){
- this.proxy.hide();
- this.el.setStyle('display', 'block');
- this.el.show();
- if(this.maximized){
- this.fitContainer();
- }
- if(Ext.isMac && Ext.isGecko){ this.cascade(this.setAutoScroll);
- }
- if(this.monitorResize || this.modal || this.constrain || this.constrainHeader){
- Ext.EventManager.onWindowResize(this.onWindowResize, this);
- }
- this.doConstrain();
- if(this.layout){
- this.doLayout();
- }
- if(this.keyMap){
- this.keyMap.enable();
- }
- this.toFront();
- this.updateHandles();
- this.fireEvent("show", this);
- },
- animShow : function(){
- this.proxy.show();
- this.proxy.setBox(this.animateTarget.getBox());
- this.proxy.setOpacity(0);
- var b = this.getBox(false);
- b.callback = this.afterShow;
- b.scope = this;
- b.duration = .25;
- b.easing = 'easeNone';
- b.opacity = .5;
- b.block = true;
- this.el.setStyle('display', 'none');
- this.proxy.shift(b);
- },
-
- hide : function(animateTarget, cb, scope){
- if(this.hidden || this.fireEvent("beforehide", this) === false){
- return;
- }
- if(cb){
- this.on('hide', cb, scope, {single:true});
- }
- this.hidden = true;
- if(animateTarget !== undefined){
- this.setAnimateTarget(animateTarget);
- }
- if(this.animateTarget){
- this.animHide();
- }else{
- this.el.hide();
- this.afterHide();
- }
- },
- afterHide : function(){
- this.proxy.hide();
- if(this.monitorResize || this.modal || this.constrain || this.constrainHeader){
- Ext.EventManager.removeResizeListener(this.onWindowResize, this);
- }
- if(this.modal){
- this.mask.hide();
- Ext.getBody().removeClass("x-body-masked");
- }
- if(this.keyMap){
- this.keyMap.disable();
- }
- this.fireEvent("hide", this);
- },
- animHide : function(){
- this.proxy.setOpacity(.5);
- this.proxy.show();
- var tb = this.getBox(false);
- this.proxy.setBox(tb);
- this.el.hide();
- var b = this.animateTarget.getBox();
- b.callback = this.afterHide;
- b.scope = this;
- b.duration = .25;
- b.easing = 'easeNone';
- b.block = true;
- b.opacity = 0;
- this.proxy.shift(b);
- },
- onWindowResize : function(){
- if(this.maximized){
- this.fitContainer();
- }
- if(this.modal){
- this.mask.setSize('100%', '100%');
- var force = this.mask.dom.offsetHeight;
- this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
- }
- this.doConstrain();
- },
- doConstrain : function(){
- if(this.constrain || this.constrainHeader){
- var offsets;
- if(this.constrain){
- offsets = {
- right:this.el.shadowOffset,
- left:this.el.shadowOffset,
- bottom:this.el.shadowOffset
- };
- }else {
- var s = this.getSize();
- offsets = {
- right:-(s.width - 100),
- bottom:-(s.height - 25)
- };
- }
- var xy = this.el.getConstrainToXY(this.container, true, offsets);
- if(xy){
- this.setPosition(xy[0], xy[1]);
- }
- }
- },
- ghost : function(cls){
- var ghost = this.createGhost(cls);
- var box = this.getBox(true);
- ghost.setLeftTop(box.x, box.y);
- ghost.setWidth(box.width);
- this.el.hide();
- this.activeGhost = ghost;
- return ghost;
- },
- unghost : function(show, matchPosition){
- if(show !== false){
- this.el.show();
- this.focus();
- if(Ext.isMac && Ext.isGecko){ this.cascade(this.setAutoScroll);
- }
- }
- if(matchPosition !== false){
- this.setPosition(this.activeGhost.getLeft(true), this.activeGhost.getTop(true));
- }
- this.activeGhost.hide();
- this.activeGhost.remove();
- delete this.activeGhost;
- },
-
- minimize : function(){
- this.fireEvent('minimize', this);
- },
-
- close : function(){
- if(this.fireEvent("beforeclose", this) !== false){
- this.hide(null, function(){
- this.fireEvent('close', this);
- this.destroy();
- }, this);
- }
- },
-
- maximize : function(){
- if(!this.maximized){
- this.expand(false);
- this.restoreSize = this.getSize();
- this.restorePos = this.getPosition(true);
- this.tools.maximize.hide();
- this.tools.restore.show();
- this.maximized = true;
- this.el.disableShadow();
- if(this.dd){
- this.dd.lock();
- }
- if(this.collapsible){
- this.tools.toggle.hide();
- }
- this.el.addClass('x-window-maximized');
- this.container.addClass('x-window-maximized-ct');
- this.setPosition(0, 0);
- this.fitContainer();
- this.fireEvent('maximize', this);
- }
- },
-
- restore : function(){
- if(this.maximized){
- this.el.removeClass('x-window-maximized');
- this.tools.restore.hide();
- this.tools.maximize.show();
- this.setPosition(this.restorePos[0], this.restorePos[1]);
- this.setSize(this.restoreSize.width, this.restoreSize.height);
- delete this.restorePos;
- delete this.restoreSize;
- this.maximized = false;
- this.el.enableShadow(true);
- if(this.dd){
- this.dd.unlock();
- }
- if(this.collapsible){
- this.tools.toggle.show();
- }
- this.container.removeClass('x-window-maximized-ct');
- this.doConstrain();
- this.fireEvent('restore', this);
- }
- },
-
- toggleMaximize : function(){
- this[this.maximized ? 'restore' : 'maximize']();
- },
- fitContainer : function(){
- var vs = this.container.getViewSize();
- this.setSize(vs.width, vs.height);
- },
- setZIndex : function(index){
- if(this.modal){
- this.mask.setStyle("z-index", index);
- }
- this.el.setZIndex(++index);
- index += 5;
- if(this.resizer){
- this.resizer.proxy.setStyle("z-index", ++index);
- }
- this.lastZIndex = index;
- },
-
- alignTo : function(element, position, offsets){
- var xy = this.el.getAlignToXY(element, position, offsets);
- this.setPagePosition(xy[0], xy[1]);
- return this;
- },
-
- anchorTo : function(el, alignment, offsets, monitorScroll, _pname){
- var action = function(){
- this.alignTo(el, alignment, offsets);
- };
- Ext.EventManager.onWindowResize(action, this);
- var tm = typeof monitorScroll;
- if(tm != 'undefined'){
- Ext.EventManager.on(window, 'scroll', action, this,
- {buffer: tm == 'number' ? monitorScroll : 50});
- }
- action.call(this);
- this[_pname] = action;
- return this;
- },
-
- toFront : function(){
- if(this.manager.bringToFront(this)){
- this.focus();
- }
- return this;
- },
-
- setActive : function(active){
- if(active){
- if(!this.maximized){
- this.el.enableShadow(true);
- }
- this.fireEvent('activate', this);
- }else{
- this.el.disableShadow();
- this.fireEvent('deactivate', this);
- }
- },
-
- toBack : function(){
- this.manager.sendToBack(this);
- return this;
- },
-
- center : function(){
- var xy = this.el.getAlignToXY(this.container, 'c-c');
- this.setPagePosition(xy[0], xy[1]);
- return this;
- }
- });
- Ext.reg('window', Ext.Window);
- Ext.Window.DD = function(win){
- this.win = win;
- Ext.Window.DD.superclass.constructor.call(this, win.el.id, 'WindowDD-'+win.id);
- this.setHandleElId(win.header.id);
- this.scroll = false;
- };
- Ext.extend(Ext.Window.DD, Ext.dd.DD, {
- moveOnly:true,
- headerOffsets:[100, 25],
- startDrag : function(){
- var w = this.win;
- this.proxy = w.ghost();
- if(w.constrain !== false){
- var so = w.el.shadowOffset;
- this.constrainTo(w.container, {right: so, left: so, bottom: so});
- }else if(w.constrainHeader !== false){
- var s = this.proxy.getSize();
- this.constrainTo(w.container, {right: -(s.width-this.headerOffsets[0]), bottom: -(s.height-this.headerOffsets[1])});
- }
- },
- b4Drag : Ext.emptyFn,
- onDrag : function(e){
- this.alignElWithMouse(this.proxy, e.getPageX(), e.getPageY());
- },
- endDrag : function(e){
- this.win.unghost();
- this.win.saveState();
- }
- });
- Ext.WindowGroup = function(){
- var list = {};
- var accessList = [];
- var front = null;
- var sortWindows = function(d1, d2){
- return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
- };
- var orderWindows = function(){
- var a = accessList, len = a.length;
- if(len > 0){
- a.sort(sortWindows);
- var seed = a[0].manager.zseed;
- for(var i = 0; i < len; i++){
- var win = a[i];
- if(win && !win.hidden){
- win.setZIndex(seed + (i*10));
- }
- }
- }
- activateLast();
- };
- var setActiveWin = function(win){
- if(win != front){
- if(front){
- front.setActive(false);
- }
- front = win;
- if(win){
- win.setActive(true);
- }
- }
- };
- var activateLast = function(){
- for(var i = accessList.length-1; i >=0; --i) {
- if(!accessList[i].hidden){
- setActiveWin(accessList[i]);
- return;
- }
- }
- setActiveWin(null);
- };
- return {
-
- zseed : 9000,
- register : function(win){
- list[win.id] = win;
- accessList.push(win);
- win.on('hide', activateLast);
- },
- unregister : function(win){
- delete list[win.id];
- win.un('hide', activateLast);
- accessList.remove(win);
- },
-
- get : function(id){
- return typeof id == "object" ? id : list[id];
- },
-
- bringToFront : function(win){
- win = this.get(win);
- if(win != front){
- win._lastAccess = new Date().getTime();
- orderWindows();
- return true;
- }
- return false;
- },
-
- sendToBack : function(win){
- win = this.get(win);
- win._lastAccess = -(new Date().getTime());
- orderWindows();
- return win;
- },
-
- hideAll : function(){
- for(var id in list){
- if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
- list[id].hide();
- }
- }
- },
-
- getActive : function(){
- return front;
- },
-
- getBy : function(fn, scope){
- var r = [];
- for(var i = accessList.length-1; i >=0; --i) {
- var win = accessList[i];
- if(fn.call(scope||win, win) !== false){
- r.push(win);
- }
- }
- return r;
- },
-
- each : function(fn, scope){
- for(var id in list){
- if(list[id] && typeof list[id] != "function"){
- if(fn.call(scope || list[id], list[id]) === false){
- return;
- }
- }
- }
- }
- };
- };
- Ext.WindowMgr = new Ext.WindowGroup();
- Ext.dd.PanelProxy = function(panel, config){
- this.panel = panel;
- this.id = this.panel.id +'-ddproxy';
- Ext.apply(this, config);
- };
- Ext.dd.PanelProxy.prototype = {
-
- insertProxy : true,
-
- setStatus : Ext.emptyFn,
- reset : Ext.emptyFn,
- update : Ext.emptyFn,
- stop : Ext.emptyFn,
- sync: Ext.emptyFn,
-
- getEl : function(){
- return this.ghost;
- },
-
- getGhost : function(){
- return this.ghost;
- },
-
- getProxy : function(){
- return this.proxy;
- },
-
- hide : function(){
- if(this.ghost){
- if(this.proxy){
- this.proxy.remove();
- delete this.proxy;
- }
- this.panel.el.dom.style.display = '';
- this.ghost.remove();
- delete this.ghost;
- }
- },
-
- show : function(){
- if(!this.ghost){
- this.ghost = this.panel.createGhost(undefined, undefined, Ext.getBody());
- this.ghost.setXY(this.panel.el.getXY())
- if(this.insertProxy){
- this.proxy = this.panel.el.insertSibling({cls:'x-panel-dd-spacer'});
- this.proxy.setSize(this.panel.getSize());
- }
- this.panel.el.dom.style.display = 'none';
- }
- },
-
- repair : function(xy, callback, scope){
- this.hide();
- if(typeof callback == "function"){
- callback.call(scope || this);
- }
- },
-
- moveProxy : function(parentNode, before){
- if(this.proxy){
- parentNode.insertBefore(this.proxy.dom, before);
- }
- }
- };
- Ext.Panel.DD = function(panel, cfg){
- this.panel = panel;
- this.dragData = {panel: panel};
- this.proxy = new Ext.dd.PanelProxy(panel, cfg);
- Ext.Panel.DD.superclass.constructor.call(this, panel.el, cfg);
- this.setHandleElId(panel.header.id);
- panel.header.setStyle('cursor', 'move');
- this.scroll = false;
- };
- Ext.extend(Ext.Panel.DD, Ext.dd.DragSource, {
- showFrame: Ext.emptyFn,
- startDrag: Ext.emptyFn,
- b4StartDrag: function(x, y) {
- this.proxy.show();
- },
- b4MouseDown: function(e) {
- var x = e.getPageX();
- var y = e.getPageY();
- this.autoOffset(x, y);
- },
- onInitDrag : function(x, y){
- this.onStartDrag(x, y);
- return true;
- },
- createFrame : Ext.emptyFn,
- getDragEl : function(e){
- return this.proxy.ghost.dom;
- },
- endDrag : function(e){
- this.proxy.hide();
- this.panel.saveState();
- },
- autoOffset : function(x, y) {
- x -= this.startPageX;
- y -= this.startPageY;
- this.setDelta(x, y);
- }
- });
- Ext.state.Provider = function(){
-
- this.addEvents("statechange");
- this.state = {};
- Ext.state.Provider.superclass.constructor.call(this);
- };
- Ext.extend(Ext.state.Provider, Ext.util.Observable, {
-
- get : function(name, defaultValue){
- return typeof this.state[name] == "undefined" ?
- defaultValue : this.state[name];
- },
-
-
- clear : function(name){
- delete this.state[name];
- this.fireEvent("statechange", this, name, null);
- },
-
-
- set : function(name, value){
- this.state[name] = value;
-
- this.fireEvent("statechange", this, name, value);
- },
-
-
- decodeValue : function(cookie){
- var re = /^(a|n|d|b|s|o)\:(.*)$/;
- var matches = re.exec(unescape(cookie));
- if(!matches || !matches[1]) return;
- var type = matches[1];
- var v = matches[2];
- switch(type){
- case "n":
- return parseFloat(v);
- case "d":
- return new Date(Date.parse(v));
- case "b":
- return (v == "1");
- case "a":
- var all = [];
- var values = v.split("^");
- for(var i = 0, len = values.length; i < len; i++){
- all.push(this.decodeValue(values[i]));
- }
- return all;
- case "o":
- var all = {};
- var values = v.split("^");
- for(var i = 0, len = values.length; i < len; i++){
- var kv = values[i].split("=");
- all[kv[0]] = this.decodeValue(kv[1]);
- }
- return all;
- default:
- return v;
- }
- },
-
-
- encodeValue : function(v){
- var enc;
- if(typeof v == "number"){
- enc = "n:" + v;
- }else if(typeof v == "boolean"){
- enc = "b:" + (v ? "1" : "0");
- }else if(Ext.isDate(v)){
- enc = "d:" + v.toGMTString();
- }else if(Ext.isArray(v)){
- var flat = "";
- for(var i = 0, len = v.length; i < len; i++){
- flat += this.encodeValue(v[i]);
- if(i != len-1) flat += "^";
- }
- enc = "a:" + flat;
- }else if(typeof v == "object"){
- var flat = "";
- for(var key in v){
- if(typeof v[key] != "function" && v[key] !== undefined){
- flat += key + "=" + this.encodeValue(v[key]) + "^";
- }
- }
- enc = "o:" + flat.substring(0, flat.length-1);
- }else{
- enc = "s:" + v;
- }
- return escape(enc);
- }
- });
- Ext.state.Manager = function(){
- var provider = new Ext.state.Provider();
- return {
-
- setProvider : function(stateProvider){
- provider = stateProvider;
- },
-
- get : function(key, defaultValue){
- return provider.get(key, defaultValue);
- },
-
- set : function(key, value){
- provider.set(key, value);
- },
-
- clear : function(key){
- provider.clear(key);
- },
-
- getProvider : function(){
- return provider;
- }
- };
- }();
- Ext.state.CookieProvider = function(config){
- Ext.state.CookieProvider.superclass.constructor.call(this);
- this.path = "/";
- this.expires = new Date(new Date().getTime()+(1000*60*60*24*7));
- this.domain = null;
- this.secure = false;
- Ext.apply(this, config);
- this.state = this.readCookies();
- };
- Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {
-
- set : function(name, value){
- if(typeof value == "undefined" || value === null){
- this.clear(name);
- return;
- }
- this.setCookie(name, value);
- Ext.state.CookieProvider.superclass.set.call(this, name, value);
- },
-
- clear : function(name){
- this.clearCookie(name);
- Ext.state.CookieProvider.superclass.clear.call(this, name);
- },
-
- readCookies : function(){
- var cookies = {};
- var c = document.cookie + ";";
- var re = /\s?(.*?)=(.*?);/g;
- var matches;
- while((matches = re.exec(c)) != null){
- var name = matches[1];
- var value = matches[2];
- if(name && name.substring(0,3) == "ys-"){
- cookies[name.substr(3)] = this.decodeValue(value);
- }
- }
- return cookies;
- },
-
- setCookie : function(name, value){
- document.cookie = "ys-"+ name + "=" + this.encodeValue(value) +
- ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
- ((this.path == null) ? "" : ("; path=" + this.path)) +
- ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
- ((this.secure == true) ? "; secure" : "");
- },
-
- clearCookie : function(name){
- document.cookie = "ys-" + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
- ((this.path == null) ? "" : ("; path=" + this.path)) +
- ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
- ((this.secure == true) ? "; secure" : "");
- }
- });
- Ext.DataView = Ext.extend(Ext.BoxComponent, {
-
-
-
-
-
-
-
-
-
- selectedClass : "x-view-selected",
-
- emptyText : "",
-
- last: false,
-
- initComponent : function(){
- Ext.DataView.superclass.initComponent.call(this);
- if(typeof this.tpl == "string"){
- this.tpl = new Ext.XTemplate(this.tpl);
- }
- this.addEvents(
-
- "beforeclick",
-
- "click",
-
- "containerclick",
-
- "dblclick",
-
- "contextmenu",
-
- "selectionchange",
-
- "beforeselect"
- );
- this.all = new Ext.CompositeElementLite();
- this.selected = new Ext.CompositeElementLite();
- },
-
- onRender : function(){
- if(!this.el){
- this.el = document.createElement('div');
- }
- Ext.DataView.superclass.onRender.apply(this, arguments);
- },
-
- afterRender : function(){
- Ext.DataView.superclass.afterRender.call(this);
- this.el.on({
- "click": this.onClick,
- "dblclick": this.onDblClick,
- "contextmenu": this.onContextMenu,
- scope:this
- });
- if(this.overClass){
- this.el.on({
- "mouseover": this.onMouseOver,
- "mouseout": this.onMouseOut,
- scope:this
- });
- }
- if(this.store){
- this.setStore(this.store, true);
- }
- },
-
- refresh : function(){
- this.clearSelections(false, true);
- this.el.update("");
- var html = [];
- var records = this.store.getRange();
- if(records.length < 1){
- this.el.update(this.emptyText);
- this.all.clear();
- return;
- }
- this.tpl.overwrite(this.el, this.collectData(records, 0));
- this.all.fill(Ext.query(this.itemSelector, this.el.dom));
- this.updateIndexes(0);
- },
-
- prepareData : function(data){
- return data;
- },
-
- collectData : function(records, startIndex){
- var r = [];
- for(var i = 0, len = records.length; i < len; i++){
- r[r.length] = this.prepareData(records[i].data, startIndex+i, records[i]);
- }
- return r;
- },
-
- bufferRender : function(records){
- var div = document.createElement('div');
- this.tpl.overwrite(div, this.collectData(records));
- return Ext.query(this.itemSelector, div);
- },
-
- onUpdate : function(ds, record){
- var index = this.store.indexOf(record);
- var sel = this.isSelected(index);
- var original = this.all.elements[index];
- var node = this.bufferRender([record], index)[0];
- this.all.replaceElement(index, node, true);
- if(sel){
- this.selected.replaceElement(original, node);
- this.all.item(index).addClass(this.selectedClass);
- }
- this.updateIndexes(index, index);
- },
-
- onAdd : function(ds, records, index){
- if(this.all.getCount() == 0){
- this.refresh();
- return;
- }
- var nodes = this.bufferRender(records, index), n;
- if(index < this.all.getCount()){
- n = this.all.item(index).insertSibling(nodes, 'before', true);
- this.all.elements.splice(index, 0, n);
- }else{
- n = this.all.last().insertSibling(nodes, 'after', true);
- this.all.elements.push(n);
- }
- this.updateIndexes(index);
- },
-
- onRemove : function(ds, record, index){
- this.deselect(index);
- this.all.removeElement(index, true);
- this.updateIndexes(index);
- },
-
- refreshNode : function(index){
- this.onUpdate(this.store, this.store.getAt(index));
- },
-
- updateIndexes : function(startIndex, endIndex){
- var ns = this.all.elements;
- startIndex = startIndex || 0;
- endIndex = endIndex || ((endIndex === 0) ? 0 : (ns.length - 1));
- for(var i = startIndex; i <= endIndex; i++){
- ns[i].viewIndex = i;
- }
- },
-
- setStore : function(store, initial){
- if(!initial && this.store){
- this.store.un("beforeload", this.onBeforeLoad, this);
- this.store.un("datachanged", this.refresh, this);
- this.store.un("add", this.onAdd, this);
- this.store.un("remove", this.onRemove, this);
- this.store.un("update", this.onUpdate, this);
- this.store.un("clear", this.refresh, this);
- }
- if(store){
- store = Ext.StoreMgr.lookup(store);
- store.on("beforeload", this.onBeforeLoad, this);
- store.on("datachanged", this.refresh, this);
- store.on("add", this.onAdd, this);
- store.on("remove", this.onRemove, this);
- store.on("update", this.onUpdate, this);
- store.on("clear", this.refresh, this);
- }
- this.store = store;
- if(store){
- this.refresh();
- }
- },
-
- findItemFromChild : function(node){
- return Ext.fly(node).findParent(this.itemSelector, this.el);
- },
-
- onClick : function(e){
- var item = e.getTarget(this.itemSelector, this.el);
- if(item){
- var index = this.indexOf(item);
- if(this.onItemClick(item, index, e) !== false){
- this.fireEvent("click", this, index, item, e);
- }
- }else{
- if(this.fireEvent("containerclick", this, e) !== false){
- this.clearSelections();
- }
- }
- },
-
- onContextMenu : function(e){
- var item = e.getTarget(this.itemSelector, this.el);
- if(item){
- this.fireEvent("contextmenu", this, this.indexOf(item), item, e);
- }
- },
-
- onDblClick : function(e){
- var item = e.getTarget(this.itemSelector, this.el);
- if(item){
- this.fireEvent("dblclick", this, this.indexOf(item), item, e);
- }
- },
-
- onMouseOver : function(e){
- var item = e.getTarget(this.itemSelector, this.el);
- if(item && item !== this.lastItem){
- this.lastItem = item;
- Ext.fly(item).addClass(this.overClass);
- }
- },
-
- onMouseOut : function(e){
- if(this.lastItem){
- if(!e.within(this.lastItem, true)){
- Ext.fly(this.lastItem).removeClass(this.overClass);
- delete this.lastItem;
- }
- }
- },
-
- onItemClick : function(item, index, e){
- if(this.fireEvent("beforeclick", this, index, item, e) === false){
- return false;
- }
- if(this.multiSelect){
- this.doMultiSelection(item, index, e);
- e.preventDefault();
- }else if(this.singleSelect){
- this.doSingleSelection(item, index, e);
- e.preventDefault();
- }
- return true;
- },
-
- doSingleSelection : function(item, index, e){
- if(e.ctrlKey && this.isSelected(index)){
- this.deselect(index);
- }else{
- this.select(index, false);
- }
- },
-
- doMultiSelection : function(item, index, e){
- if(e.shiftKey && this.last !== false){
- var last = this.last;
- this.selectRange(last, index, e.ctrlKey);
- this.last = last;
- }else{
- if((e.ctrlKey||this.simpleSelect) && this.isSelected(index)){
- this.deselect(index);
- }else{
- this.select(index, e.ctrlKey || e.shiftKey || this.simpleSelect);
- }
- }
- },
-
- getSelectionCount : function(){
- return this.selected.getCount()
- },
-
- getSelectedNodes : function(){
- return this.selected.elements;
- },
-
- getSelectedIndexes : function(){
- var indexes = [], s = this.selected.elements;
- for(var i = 0, len = s.length; i < len; i++){
- indexes.push(s[i].viewIndex);
- }
- return indexes;
- },
-
- getSelectedRecords : function(){
- var r = [], s = this.selected.elements;
- for(var i = 0, len = s.length; i < len; i++){
- r[r.length] = this.store.getAt(s[i].viewIndex);
- }
- return r;
- },
-
- getRecords : function(nodes){
- var r = [], s = nodes;
- for(var i = 0, len = s.length; i < len; i++){
- r[r.length] = this.store.getAt(s[i].viewIndex);
- }
- return r;
- },
-
- getRecord : function(node){
- return this.store.getAt(node.viewIndex);
- },
-
- clearSelections : function(suppressEvent, skipUpdate){
- if(this.multiSelect || this.singleSelect){
- if(!skipUpdate){
- this.selected.removeClass(this.selectedClass);
- }
- this.selected.clear();
- this.last = false;
- if(!suppressEvent){
- this.fireEvent("selectionchange", this, this.selected.elements);
- }
- }
- },
-
- isSelected : function(node){
- return this.selected.contains(this.getNode(node));
- },
-
- deselect : function(node){
- if(this.isSelected(node)){
- var node = this.getNode(node);
- this.selected.removeElement(node);
- if(this.last == node.viewIndex){
- this.last = false;
- }
- Ext.fly(node).removeClass(this.selectedClass);
- this.fireEvent("selectionchange", this, this.selected.elements);
- }
- },
-
- select : function(nodeInfo, keepExisting, suppressEvent){
- if(Ext.isArray(nodeInfo)){
- if(!keepExisting){
- this.clearSelections(true);
- }
- for(var i = 0, len = nodeInfo.length; i < len; i++){
- this.select(nodeInfo[i], true, true);
- }
- } else{
- var node = this.getNode(nodeInfo);
- if(!keepExisting){
- this.clearSelections(true);
- }
- if(node && !this.isSelected(node)){
- if(this.fireEvent("beforeselect", this, node, this.selected.elements) !== false){
- Ext.fly(node).addClass(this.selectedClass);
- this.selected.add(node);
- this.last = node.viewIndex;
- if(!suppressEvent){
- this.fireEvent("selectionchange", this, this.selected.elements);
- }
- }
- }
- }
- },
-
- selectRange : function(start, end, keepExisting){
- if(!keepExisting){
- this.clearSelections(true);
- }
- this.select(this.getNodes(start, end), true);
- },
-
- getNode : function(nodeInfo){
- if(typeof nodeInfo == "string"){
- return document.getElementById(nodeInfo);
- }else if(typeof nodeInfo == "number"){
- return this.all.elements[nodeInfo];
- }
- return nodeInfo;
- },
-
- getNodes : function(start, end){
- var ns = this.all.elements;
- start = start || 0;
- end = typeof end == "undefined" ? ns.length - 1 : end;
- var nodes = [], i;
- if(start <= end){
- for(i = start; i <= end; i++){
- nodes.push(ns[i]);
- }
- } else{
- for(i = start; i >= end; i--){
- nodes.push(ns[i]);
- }
- }
- return nodes;
- },
-
- indexOf : function(node){
- node = this.getNode(node);
- if(typeof node.viewIndex == "number"){
- return node.viewIndex;
- }
- return this.all.indexOf(node);
- },
-
- onBeforeLoad : function(){
- if(this.loadingText){
- this.clearSelections(false, true);
- this.el.update('<div class="loading-indicator">'+this.loadingText+'</div>');
- this.all.clear();
- }
- }
- });
- Ext.reg('dataview', Ext.DataView);
- Ext.ColorPalette = function(config){
- Ext.ColorPalette.superclass.constructor.call(this, config);
- this.addEvents(
-
- 'select'
- );
- if(this.handler){
- this.on("select", this.handler, this.scope, true);
- }
- };
- Ext.extend(Ext.ColorPalette, Ext.Component, {
-
-
- itemCls : "x-color-palette",
-
- value : null,
- clickEvent:'click',
- ctype: "Ext.ColorPalette",
-
- allowReselect : false,
-
- colors : [
- "000000", "993300", "333300", "003300", "003366", "000080", "333399", "333333",
- "800000", "FF6600", "808000", "008000", "008080", "0000FF", "666699", "808080",
- "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF", "800080", "969696",
- "FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0",
- "FF99CC", "FFCC99", "FFFFCC", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
- ],
- onRender : function(container, position){
- var t = this.tpl || new Ext.XTemplate(
- '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on"> </span></em></a></tpl>'
- );
- var el = document.createElement("div");
- el.className = this.itemCls;
- t.overwrite(el, this.colors);
- container.dom.insertBefore(el, position);
- this.el = Ext.get(el);
- this.el.on(this.clickEvent, this.handleClick, this, {delegate: "a"});
- if(this.clickEvent != 'click'){
- this.el.on('click', Ext.emptyFn, this, {delegate: "a", preventDefault:true});
- }
- },
- afterRender : function(){
- Ext.ColorPalette.superclass.afterRender.call(this);
- if(this.value){
- var s = this.value;
- this.value = null;
- this.select(s);
- }
- },
- handleClick : function(e, t){
- e.preventDefault();
- if(!this.disabled){
- var c = t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
- this.select(c.toUpperCase());
- }
- },
-
- select : function(color){
- color = color.replace("#", "");
- if(color != this.value || this.allowReselect){
- var el = this.el;
- if(this.value){
- el.child("a.color-"+this.value).removeClass("x-color-palette-sel");
- }
- el.child("a.color-"+color).addClass("x-color-palette-sel");
- this.value = color;
- this.fireEvent("select", this, color);
- }
- }
-
- });
- Ext.reg('colorpalette', Ext.ColorPalette);
- Ext.DatePicker = Ext.extend(Ext.Component, {
-
- todayText : "Today",
-
- okText : " OK ",
-
- cancelText : "Cancel",
-
- todayTip : "{0} (Spacebar)",
-
- minDate : null,
-
- maxDate : null,
-
- minText : "This date is before the minimum date",
-
- maxText : "This date is after the maximum date",
-
- format : "m/d/y",
-
- disabledDays : null,
-
- disabledDaysText : "",
-
- disabledDatesRE : null,
-
- disabledDatesText : "",
-
- constrainToViewport : true,
-
- monthNames : Date.monthNames,
-
- dayNames : Date.dayNames,
-
- nextText: 'Next Month (Control+Right)',
-
- prevText: 'Previous Month (Control+Left)',
-
- monthYearText: 'Choose a month (Control+Up/Down to move years)',
-
- startDay : 0,
- initComponent : function(){
- Ext.DatePicker.superclass.initComponent.call(this);
- this.value = this.value ?
- this.value.clearTime() : new Date().clearTime();
- this.addEvents(
-
- 'select'
- );
- if(this.handler){
- this.on("select", this.handler, this.scope || this);
- }
- this.initDisabledDays();
- },
-
- initDisabledDays : function(){
- if(!this.disabledDatesRE && this.disabledDates){
- var dd = this.disabledDates;
- var re = "(?:";
- for(var i = 0; i < dd.length; i++){
- re += dd[i];
- if(i != dd.length-1) re += "|";
- }
- this.disabledDatesRE = new RegExp(re + ")");
- }
- },
-
- setValue : function(value){
- var old = this.value;
- this.value = value.clearTime(true);
- if(this.el){
- this.update(this.value);
- }
- },
-
- getValue : function(){
- return this.value;
- },
-
- focus : function(){
- if(this.el){
- this.update(this.activeDate);
- }
- },
-
- onRender : function(container, position){
- var m = [
- '<table cellspacing="0">',
- '<tr><td class="x-date-left"><a href="#" title="', this.prevText ,'"> </a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="', this.nextText ,'"> </a></td></tr>',
- '<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];
- var dn = this.dayNames;
- for(var i = 0; i < 7; i++){
- var d = this.startDay+i;
- if(d > 6){
- d = d-7;
- }
- m.push("<th><span>", dn[d].substr(0,1), "</span></th>");
- }
- m[m.length] = "</tr></thead><tbody><tr>";
- for(var i = 0; i < 42; i++) {
- if(i % 7 == 0 && i != 0){
- m[m.length] = "</tr><tr>";
- }
- m[m.length] = '<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';
- }
- m[m.length] = '</tr></tbody></table></td></tr><tr><td colspan="3" class="x-date-bottom" align="center"></td></tr></table><div class="x-date-mp"></div>';
- var el = document.createElement("div");
- el.className = "x-date-picker";
- el.innerHTML = m.join("");
- container.dom.insertBefore(el, position);
- this.el = Ext.get(el);
- this.eventEl = Ext.get(el.firstChild);
- new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {
- handler: this.showPrevMonth,
- scope: this,
- preventDefault:true,
- stopDefault:true
- });
- new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {
- handler: this.showNextMonth,
- scope: this,
- preventDefault:true,
- stopDefault:true
- });
- this.eventEl.on("mousewheel", this.handleMouseWheel, this);
- this.monthPicker = this.el.down('div.x-date-mp');
- this.monthPicker.enableDisplayMode('block');
-
- var kn = new Ext.KeyNav(this.eventEl, {
- "left" : function(e){
- e.ctrlKey ?
- this.showPrevMonth() :
- this.update(this.activeDate.add("d", -1));
- },
- "right" : function(e){
- e.ctrlKey ?
- this.showNextMonth() :
- this.update(this.activeDate.add("d", 1));
- },
- "up" : function(e){
- e.ctrlKey ?
- this.showNextYear() :
- this.update(this.activeDate.add("d", -7));
- },
- "down" : function(e){
- e.ctrlKey ?
- this.showPrevYear() :
- this.update(this.activeDate.add("d", 7));
- },
- "pageUp" : function(e){
- this.showNextMonth();
- },
- "pageDown" : function(e){
- this.showPrevMonth();
- },
- "enter" : function(e){
- e.stopPropagation();
- return true;
- },
- scope : this
- });
- this.eventEl.on("click", this.handleDateClick, this, {delegate: "a.x-date-date"});
- this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday, this);
- this.el.unselectable();
-
- this.cells = this.el.select("table.x-date-inner tbody td");
- this.textNodes = this.el.query("table.x-date-inner tbody span");
- this.mbtn = new Ext.Button({
- text: " ",
- tooltip: this.monthYearText,
- renderTo: this.el.child("td.x-date-middle", true)
- });
- this.mbtn.on('click', this.showMonthPicker, this);
- this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");
- var today = (new Date()).dateFormat(this.format);
- this.todayBtn = new Ext.Button({
- renderTo: this.el.child("td.x-date-bottom", true),
- text: String.format(this.todayText, today),
- tooltip: String.format(this.todayTip, today),
- handler: this.selectToday,
- scope: this
- });
-
- if(Ext.isIE){
- this.el.repaint();
- }
- this.update(this.value);
- },
- createMonthPicker : function(){
- if(!this.monthPicker.dom.firstChild){
- var buf = ['<table border="0" cellspacing="0">'];
- for(var i = 0; i < 6; i++){
- buf.push(
- '<tr><td class="x-date-mp-month"><a href="#">', this.monthNames[i].substr(0, 3), '</a></td>',
- '<td class="x-date-mp-month x-date-mp-sep"><a href="#">', this.monthNames[i+6].substr(0, 3), '</a></td>',
- i == 0 ?
- '<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td></tr>' :
- '<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>'
- );
- }
- buf.push(
- '<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',
- this.okText,
- '</button><button type="button" class="x-date-mp-cancel">',
- this.cancelText,
- '</button></td></tr>',
- '</table>'
- );
- this.monthPicker.update(buf.join(''));
- this.monthPicker.on('click', this.onMonthClick, this);
- this.monthPicker.on('dblclick', this.onMonthDblClick, this);
- this.mpMonths = this.monthPicker.select('td.x-date-mp-month');
- this.mpYears = this.monthPicker.select('td.x-date-mp-year');
- this.mpMonths.each(function(m, a, i){
- i += 1;
- if((i%2) == 0){
- m.dom.xmonth = 5 + Math.round(i * .5);
- }else{
- m.dom.xmonth = Math.round((i-1) * .5);
- }
- });
- }
- },
- showMonthPicker : function(){
- this.createMonthPicker();
- var size = this.el.getSize();
- this.monthPicker.setSize(size);
- this.monthPicker.child('table').setSize(size);
- this.mpSelMonth = (this.activeDate || this.value).getMonth();
- this.updateMPMonth(this.mpSelMonth);
- this.mpSelYear = (this.activeDate || this.value).getFullYear();
- this.updateMPYear(this.mpSelYear);
- this.monthPicker.slideIn('t', {duration:.2});
- },
- updateMPYear : function(y){
- this.mpyear = y;
- var ys = this.mpYears.elements;
- for(var i = 1; i <= 10; i++){
- var td = ys[i-1], y2;
- if((i%2) == 0){
- y2 = y + Math.round(i * .5);
- td.firstChild.innerHTML = y2;
- td.xyear = y2;
- }else{
- y2 = y - (5-Math.round(i * .5));
- td.firstChild.innerHTML = y2;
- td.xyear = y2;
- }
- this.mpYears.item(i-1)[y2 == this.mpSelYear ? 'addClass' : 'removeClass']('x-date-mp-sel');
- }
- },
- updateMPMonth : function(sm){
- this.mpMonths.each(function(m, a, i){
- m[m.dom.xmonth == sm ? 'addClass' : 'removeClass']('x-date-mp-sel');
- });
- },
- selectMPMonth: function(m){
-
- },
- onMonthClick : function(e, t){
- e.stopEvent();
- var el = new Ext.Element(t), pn;
- if(el.is('button.x-date-mp-cancel')){
- this.hideMonthPicker();
- }
- else if(el.is('button.x-date-mp-ok')){
- this.update(new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
- this.hideMonthPicker();
- }
- else if(pn = el.up('td.x-date-mp-month', 2)){
- this.mpMonths.removeClass('x-date-mp-sel');
- pn.addClass('x-date-mp-sel');
- this.mpSelMonth = pn.dom.xmonth;
- }
- else if(pn = el.up('td.x-date-mp-year', 2)){
- this.mpYears.removeClass('x-date-mp-sel');
- pn.addClass('x-date-mp-sel');
- this.mpSelYear = pn.dom.xyear;
- }
- else if(el.is('a.x-date-mp-prev')){
- this.updateMPYear(this.mpyear-10);
- }
- else if(el.is('a.x-date-mp-next')){
- this.updateMPYear(this.mpyear+10);
- }
- },
- onMonthDblClick : function(e, t){
- e.stopEvent();
- var el = new Ext.Element(t), pn;
- if(pn = el.up('td.x-date-mp-month', 2)){
- this.update(new Date(this.mpSelYear, pn.dom.xmonth, (this.activeDate || this.value).getDate()));
- this.hideMonthPicker();
- }
- else if(pn = el.up('td.x-date-mp-year', 2)){
- this.update(new Date(pn.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
- this.hideMonthPicker();
- }
- },
- hideMonthPicker : function(disableAnim){
- if(this.monthPicker){
- if(disableAnim === true){
- this.monthPicker.hide();
- }else{
- this.monthPicker.slideOut('t', {duration:.2});
- }
- }
- },
-
- showPrevMonth : function(e){
- this.update(this.activeDate.add("mo", -1));
- },
-
- showNextMonth : function(e){
- this.update(this.activeDate.add("mo", 1));
- },
-
- showPrevYear : function(){
- this.update(this.activeDate.add("y", -1));
- },
-
- showNextYear : function(){
- this.update(this.activeDate.add("y", 1));
- },
-
- handleMouseWheel : function(e){
- var delta = e.getWheelDelta();
- if(delta > 0){
- this.showPrevMonth();
- e.stopEvent();
- } else if(delta < 0){
- this.showNextMonth();
- e.stopEvent();
- }
- },
-
- handleDateClick : function(e, t){
- e.stopEvent();
- if(t.dateValue && !Ext.fly(t.parentNode).hasClass("x-date-disabled")){
- this.setValue(new Date(t.dateValue));
- this.fireEvent("select", this, this.value);
- }
- },
-
- selectToday : function(){
- this.setValue(new Date().clearTime());
- this.fireEvent("select", this, this.value);
- },
-
- update : function(date){
- var vd = this.activeDate;
- this.activeDate = date;
- if(vd && this.el){
- var t = date.getTime();
- if(vd.getMonth() == date.getMonth() && vd.getFullYear() == date.getFullYear()){
- this.cells.removeClass("x-date-selected");
- this.cells.each(function(c){
- if(c.dom.firstChild.dateValue == t){
- c.addClass("x-date-selected");
- setTimeout(function(){
- try{c.dom.firstChild.focus();}catch(e){}
- }, 50);
- return false;
- }
- });
- return;
- }
- }
- var days = date.getDaysInMonth();
- var firstOfMonth = date.getFirstDateOfMonth();
- var startingPos = firstOfMonth.getDay()-this.startDay;
- if(startingPos <= this.startDay){
- startingPos += 7;
- }
- var pm = date.add("mo", -1);
- var prevStart = pm.getDaysInMonth()-startingPos;
- var cells = this.cells.elements;
- var textEls = this.textNodes;
- days += startingPos;
-
- var day = 86400000;
- var d = (new Date(pm.getFullYear(), pm.getMonth(), prevStart)).clearTime();
- var today = new Date().clearTime().getTime();
- var sel = date.clearTime().getTime();
- var min = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY;
- var max = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY;
- var ddMatch = this.disabledDatesRE;
- var ddText = this.disabledDatesText;
- var ddays = this.disabledDays ? this.disabledDays.join("") : false;
- var ddaysText = this.disabledDaysText;
- var format = this.format;
- var setCellClass = function(cal, cell){
- cell.title = "";
- var t = d.getTime();
- cell.firstChild.dateValue = t;
- if(t == today){
- cell.className += " x-date-today";
- cell.title = cal.todayText;
- }
- if(t == sel){
- cell.className += " x-date-selected";
- setTimeout(function(){
- try{cell.firstChild.focus();}catch(e){}
- }, 50);
- }
-
- if(t < min) {
- cell.className = " x-date-disabled";
- cell.title = cal.minText;
- return;
- }
- if(t > max) {
- cell.className = " x-date-disabled";
- cell.title = cal.maxText;
- return;
- }
- if(ddays){
- if(ddays.indexOf(d.getDay()) != -1){
- cell.title = ddaysText;
- cell.className = " x-date-disabled";
- }
- }
- if(ddMatch && format){
- var fvalue = d.dateFormat(format);
- if(ddMatch.test(fvalue)){
- cell.title = ddText.replace("%0", fvalue);
- cell.className = " x-date-disabled";
- }
- }
- };
- var i = 0;
- for(; i < startingPos; i++) {
- textEls[i].innerHTML = (++prevStart);
- d.setDate(d.getDate()+1);
- cells[i].className = "x-date-prevday";
- setCellClass(this, cells[i]);
- }
- for(; i < days; i++){
- intDay = i - startingPos + 1;
- textEls[i].innerHTML = (intDay);
- d.setDate(d.getDate()+1);
- cells[i].className = "x-date-active";
- setCellClass(this, cells[i]);
- }
- var extraDays = 0;
- for(; i < 42; i++) {
- textEls[i].innerHTML = (++extraDays);
- d.setDate(d.getDate()+1);
- cells[i].className = "x-date-nextday";
- setCellClass(this, cells[i]);
- }
- this.mbtn.setText(this.monthNames[date.getMonth()] + " " + date.getFullYear());
- if(!this.internalRender){
- var main = this.el.dom.firstChild;
- var w = main.offsetWidth;
- this.el.setWidth(w + this.el.getBorderWidth("lr"));
- Ext.fly(main).setWidth(w);
- this.internalRender = true;
-
-
-
- if(Ext.isOpera && !this.secondPass){
- main.rows[0].cells[1].style.width = (w - (main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth)) + "px";
- this.secondPass = true;
- this.update.defer(10, this, [date]);
- }
- }
- },
-
- beforeDestroy : function() {
- this.mbtn.destroy();
- this.todayBtn.destroy();
- }
-
- });
- Ext.reg('datepicker', Ext.DatePicker);
- Ext.TabPanel = Ext.extend(Ext.Panel, {
-
-
- monitorResize : true,
-
- deferredRender : true,
-
- tabWidth: 120,
-
- minTabWidth: 30,
-
- resizeTabs:false,
-
- enableTabScroll: false,
-
- scrollIncrement : 0,
-
- scrollRepeatInterval : 400,
-
- scrollDuration : .35,
-
- animScroll : true,
-
- tabPosition: 'top',
-
- baseCls: 'x-tab-panel',
-
- autoTabs : false,
-
- autoTabSelector:'div.x-tab',
-
- activeTab : null,
-
- tabMargin : 2,
-
- plain: false,
-
- wheelIncrement : 20,
-
- idDelimiter : '__',
- itemCls : 'x-tab-item',
- elements: 'body',
- headerAsText: false,
- frame: false,
- hideBorders:true,
- initComponent : function(){
- this.frame = false;
- Ext.TabPanel.superclass.initComponent.call(this);
- this.addEvents(
-
- 'beforetabchange',
-
- 'tabchange',
-
- 'contextmenu'
- );
- this.setLayout(new Ext.layout.CardLayout({
- deferredRender: this.deferredRender
- }));
- if(this.tabPosition == 'top'){
- this.elements += ',header';
- this.stripTarget = 'header';
- }else {
- this.elements += ',footer';
- this.stripTarget = 'footer';
- }
- if(!this.stack){
- this.stack = Ext.TabPanel.AccessStack();
- }
- this.initItems();
- },
- render : function(){
- Ext.TabPanel.superclass.render.apply(this, arguments);
- if(this.activeTab !== undefined){
- var item = this.activeTab;
- delete this.activeTab;
- this.setActiveTab(item);
- }
- },
- onRender : function(ct, position){
- Ext.TabPanel.superclass.onRender.call(this, ct, position);
- if(this.plain){
- var pos = this.tabPosition == 'top' ? 'header' : 'footer';
- this[pos].addClass('x-tab-panel-'+pos+'-plain');
- }
- var st = this[this.stripTarget];
- this.stripWrap = st.createChild({cls:'x-tab-strip-wrap', cn:{
- tag:'ul', cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});
- this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'});
- this.strip = new Ext.Element(this.stripWrap.dom.firstChild);
- this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'});
- this.strip.createChild({cls:'x-clear'});
- this.body.addClass('x-tab-panel-body-'+this.tabPosition);
- if(!this.itemTpl){
- var tt = new Ext.Template(
- '<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>',
- '<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">',
- '<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>',
- '</em></a></li>'
- );
- tt.disableFormats = true;
- tt.compile();
- Ext.TabPanel.prototype.itemTpl = tt;
- }
- this.items.each(this.initTab, this);
- },
- afterRender : function(){
- Ext.TabPanel.superclass.afterRender.call(this);
- if(this.autoTabs){
- this.readTabs(false);
- }
- },
- initEvents : function(){
- Ext.TabPanel.superclass.initEvents.call(this);
- this.on('add', this.onAdd, this);
- this.on('remove', this.onRemove, this);
- this.strip.on('mousedown', this.onStripMouseDown, this);
- this.strip.on('click', this.onStripClick, this);
- this.strip.on('contextmenu', this.onStripContextMenu, this);
- if(this.enableTabScroll){
- this.strip.on('mousewheel', this.onWheel, this);
- }
- },
- findTargets : function(e){
- var item = null;
- var itemEl = e.getTarget('li', this.strip);
- if(itemEl){
- item = this.getComponent(itemEl.id.split(this.idDelimiter)[1]);
- if(item.disabled){
- return {
- close : null,
- item : null,
- el : null
- };
- }
- }
- return {
- close : e.getTarget('.x-tab-strip-close', this.strip),
- item : item,
- el : itemEl
- };
- },
- onStripMouseDown : function(e){
- e.preventDefault();
- if(e.button != 0){
- return;
- }
- var t = this.findTargets(e);
- if(t.close){
- this.remove(t.item);
- return;
- }
- if(t.item && t.item != this.activeTab){
- this.setActiveTab(t.item);
- }
- },
- onStripClick : function(e){
- var t = this.findTargets(e);
- if(!t.close && t.item && t.item != this.activeTab){
- this.setActiveTab(t.item);
- }
- },
- onStripContextMenu : function(e){
- e.preventDefault();
- var t = this.findTargets(e);
- if(t.item){
- this.fireEvent('contextmenu', this, t.item, e);
- }
- },
-
- readTabs : function(removeExisting){
- if(removeExisting === true){
- this.items.each(function(item){
- this.remove(item);
- }, this);
- }
- var tabs = this.el.query(this.autoTabSelector);
- for(var i = 0, len = tabs.length; i < len; i++){
- var tab = tabs[i];
- var title = tab.getAttribute('title');
- tab.removeAttribute('title');
- this.add({
- title: title,
- el: tab
- });
- }
- },
- initTab : function(item, index){
- var before = this.strip.dom.childNodes[index];
- var cls = item.closable ? 'x-tab-strip-closable' : '';
- if(item.disabled){
- cls += ' x-item-disabled';
- }
- if(item.iconCls){
- cls += ' x-tab-with-icon';
- }
- if(item.tabCls){
- cls += ' ' + item.tabCls;
- }
-
- var p = {
- id: this.id + this.idDelimiter + item.getItemId(),
- text: item.title,
- cls: cls,
- iconCls: item.iconCls || ''
- };
- var el = before ?
- this.itemTpl.insertBefore(before, p) :
- this.itemTpl.append(this.strip, p);
- Ext.fly(el).addClassOnOver('x-tab-strip-over');
- if(item.tabTip){
- Ext.fly(el).child('span.x-tab-strip-text', true).qtip = item.tabTip;
- }
- item.on('disable', this.onItemDisabled, this);
- item.on('enable', this.onItemEnabled, this);
- item.on('titlechange', this.onItemTitleChanged, this);
- item.on('beforeshow', this.onBeforeShowItem, this);
- },
- onAdd : function(tp, item, index){
- this.initTab(item, index);
- if(this.items.getCount() == 1){
- this.syncSize();
- }
- this.delegateUpdates();
- },
- onBeforeAdd : function(item){
- var existing = item.events ? (this.items.containsKey(item.getItemId()) ? item : null) : this.items.get(item);
- if(existing){
- this.setActiveTab(item);
- return false;
- }
- Ext.TabPanel.superclass.onBeforeAdd.apply(this, arguments);
- var es = item.elements;
- item.elements = es ? es.replace(',header', '') : es;
- item.border = (item.border === true);
- },
- onRemove : function(tp, item){
- Ext.removeNode(this.getTabEl(item));
- this.stack.remove(item);
- if(item == this.activeTab){
- var next = this.stack.next();
- if(next){
- this.setActiveTab(next);
- }else{
- this.setActiveTab(0);
- }
- }
- this.delegateUpdates();
- },
- onBeforeShowItem : function(item){
- if(item != this.activeTab){
- this.setActiveTab(item);
- return false;
- }
- },
- onItemDisabled : function(item){
- var el = this.getTabEl(item);
- if(el){
- Ext.fly(el).addClass('x-item-disabled');
- }
- this.stack.remove(item);
- },
- onItemEnabled : function(item){
- var el = this.getTabEl(item);
- if(el){
- Ext.fly(el).removeClass('x-item-disabled');
- }
- },
- onItemTitleChanged : function(item){
- var el = this.getTabEl(item);
- if(el){
- Ext.fly(el).child('span.x-tab-strip-text', true).innerHTML = item.title;
- }
- },
-
- getTabEl : function(item){
- var itemId = (typeof item === 'number')?this.items.items[item].getItemId() : item.getItemId();
- return document.getElementById(this.id+this.idDelimiter+itemId);
- },
- onResize : function(){
- Ext.TabPanel.superclass.onResize.apply(this, arguments);
- this.delegateUpdates();
- },
-
- beginUpdate : function(){
- this.suspendUpdates = true;
- },
-
- endUpdate : function(){
- this.suspendUpdates = false;
- this.delegateUpdates();
- },
-
- hideTabStripItem : function(item){
- item = this.getComponent(item);
- var el = this.getTabEl(item);
- if(el){
- el.style.display = 'none';
- this.delegateUpdates();
- }
- },
-
- unhideTabStripItem : function(item){
- item = this.getComponent(item);
- var el = this.getTabEl(item);
- if(el){
- el.style.display = '';
- this.delegateUpdates();
- }
- },
- delegateUpdates : function(){
- if(this.suspendUpdates){
- return;
- }
- if(this.resizeTabs && this.rendered){
- this.autoSizeTabs();
- }
- if(this.enableTabScroll && this.rendered){
- this.autoScrollTabs();
- }
- },
- autoSizeTabs : function(){
- var count = this.items.length;
- var ce = this.tabPosition != 'bottom' ? 'header' : 'footer';
- var ow = this[ce].dom.offsetWidth;
- var aw = this[ce].dom.clientWidth;
- if(!this.resizeTabs || count < 1 || !aw){ return;
- }
- var each = Math.max(Math.min(Math.floor((aw-4) / count) - this.tabMargin, this.tabWidth), this.minTabWidth); this.lastTabWidth = each;
- var lis = this.stripWrap.dom.getElementsByTagName('li');
- for(var i = 0, len = lis.length-1; i < len; i++) { var li = lis[i];
- var inner = li.childNodes[1].firstChild.firstChild;
- var tw = li.offsetWidth;
- var iw = inner.offsetWidth;
- inner.style.width = (each - (tw-iw)) + 'px';
- }
- },
- adjustBodyWidth : function(w){
- if(this.header){
- this.header.setWidth(w);
- }
- if(this.footer){
- this.footer.setWidth(w);
- }
- return w;
- },
-
- setActiveTab : function(item){
- item = this.getComponent(item);
- if(!item || this.fireEvent('beforetabchange', this, item, this.activeTab) === false){
- return;
- }
- if(!this.rendered){
- this.activeTab = item;
- return;
- }
- if(this.activeTab != item){
- if(this.activeTab){
- var oldEl = this.getTabEl(this.activeTab);
- if(oldEl){
- Ext.fly(oldEl).removeClass('x-tab-strip-active');
- }
- this.activeTab.fireEvent('deactivate', this.activeTab);
- }
- var el = this.getTabEl(item);
- Ext.fly(el).addClass('x-tab-strip-active');
- this.activeTab = item;
- this.stack.add(item);
- this.layout.setActiveItem(item);
- if(this.layoutOnTabChange && item.doLayout){
- item.doLayout();
- }
- if(this.scrolling){
- this.scrollToTab(item, this.animScroll);
- }
- item.fireEvent('activate', item);
- this.fireEvent('tabchange', this, item);
- }
- },
-
- getActiveTab : function(){
- return this.activeTab || null;
- },
-
- getItem : function(item){
- return this.getComponent(item);
- },
- autoScrollTabs : function(){
- var count = this.items.length;
- var ow = this.header.dom.offsetWidth;
- var tw = this.header.dom.clientWidth;
- var wrap = this.stripWrap;
- var wd = wrap.dom;
- var cw = wd.offsetWidth;
- var pos = this.getScrollPos();
- var l = this.edge.getOffsetsTo(this.stripWrap)[0] + pos;
- if(!this.enableTabScroll || count < 1 || cw < 20){ return;
- }
- if(l <= tw){
- wd.scrollLeft = 0;
- wrap.setWidth(tw);
- if(this.scrolling){
- this.scrolling = false;
- this.header.removeClass('x-tab-scrolling');
- this.scrollLeft.hide();
- this.scrollRight.hide();
- if(Ext.isAir){
- wd.style.marginLeft = '';
- wd.style.marginRight = '';
- }
- }
- }else{
- if(!this.scrolling){
- this.header.addClass('x-tab-scrolling');
- if(Ext.isAir){
- wd.style.marginLeft = '18px';
- wd.style.marginRight = '18px';
- }
- }
- tw -= wrap.getMargins('lr');
- wrap.setWidth(tw > 20 ? tw : 20);
- if(!this.scrolling){
- if(!this.scrollLeft){
- this.createScrollers();
- }else{
- this.scrollLeft.show();
- this.scrollRight.show();
- }
- }
- this.scrolling = true;
- if(pos > (l-tw)){ wd.scrollLeft = l-tw;
- }else{ this.scrollToTab(this.activeTab, false);
- }
- this.updateScrollButtons();
- }
- },
- createScrollers : function(){
- var h = this.stripWrap.dom.offsetHeight;
- var sl = this.header.insertFirst({
- cls:'x-tab-scroller-left'
- });
- sl.setHeight(h);
- sl.addClassOnOver('x-tab-scroller-left-over');
- this.leftRepeater = new Ext.util.ClickRepeater(sl, {
- interval : this.scrollRepeatInterval,
- handler: this.onScrollLeft,
- scope: this
- });
- this.scrollLeft = sl;
- var sr = this.header.insertFirst({
- cls:'x-tab-scroller-right'
- });
- sr.setHeight(h);
- sr.addClassOnOver('x-tab-scroller-right-over');
- this.rightRepeater = new Ext.util.ClickRepeater(sr, {
- interval : this.scrollRepeatInterval,
- handler: this.onScrollRight,
- scope: this
- });
- this.scrollRight = sr;
- },
- getScrollWidth : function(){
- return this.edge.getOffsetsTo(this.stripWrap)[0] + this.getScrollPos();
- },
- getScrollPos : function(){
- return parseInt(this.stripWrap.dom.scrollLeft, 10) || 0;
- },
- getScrollArea : function(){
- return parseInt(this.stripWrap.dom.clientWidth, 10) || 0;
- },
- getScrollAnim : function(){
- return {duration:this.scrollDuration, callback: this.updateScrollButtons, scope: this};
- },
- getScrollIncrement : function(){
- return this.scrollIncrement || (this.resizeTabs ? this.lastTabWidth+2 : 100);
- },
-
- scrollToTab : function(item, animate){
- if(!item){ return; }
- var el = this.getTabEl(item);
- var pos = this.getScrollPos(), area = this.getScrollArea();
- var left = Ext.fly(el).getOffsetsTo(this.stripWrap)[0] + pos;
- var right = left + el.offsetWidth;
- if(left < pos){
- this.scrollTo(left, animate);
- }else if(right > (pos + area)){
- this.scrollTo(right - area, animate);
- }
- },
- scrollTo : function(pos, animate){
- this.stripWrap.scrollTo('left', pos, animate ? this.getScrollAnim() : false);
- if(!animate){
- this.updateScrollButtons();
- }
- },
- onWheel : function(e){
- var d = e.getWheelDelta()*this.wheelIncrement*-1;
- e.stopEvent();
- var pos = this.getScrollPos();
- var newpos = pos + d;
- var sw = this.getScrollWidth()-this.getScrollArea();
- var s = Math.max(0, Math.min(sw, newpos));
- if(s != pos){
- this.scrollTo(s, false);
- }
- },
- onScrollRight : function(){
- var sw = this.getScrollWidth()-this.getScrollArea();
- var pos = this.getScrollPos();
- var s = Math.min(sw, pos + this.getScrollIncrement());
- if(s != pos){
- this.scrollTo(s, this.animScroll);
- }
- },
- onScrollLeft : function(){
- var pos = this.getScrollPos();
- var s = Math.max(0, pos - this.getScrollIncrement());
- if(s != pos){
- this.scrollTo(s, this.animScroll);
- }
- },
- updateScrollButtons : function(){
- var pos = this.getScrollPos();
- this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('x-tab-scroller-left-disabled');
- this.scrollRight[pos >= (this.getScrollWidth()-this.getScrollArea()) ? 'addClass' : 'removeClass']('x-tab-scroller-right-disabled');
- }
-
-
-
-
-
-
-
-
-
- });
- Ext.reg('tabpanel', Ext.TabPanel);
- Ext.TabPanel.prototype.activate = Ext.TabPanel.prototype.setActiveTab;
- Ext.TabPanel.AccessStack = function(){
- var items = [];
- return {
- add : function(item){
- items.push(item);
- if(items.length > 10){
- items.shift();
- }
- },
- remove : function(item){
- var s = [];
- for(var i = 0, len = items.length; i < len; i++) {
- if(items[i] != item){
- s.push(items[i]);
- }
- }
- items = s;
- },
- next : function(){
- return items.pop();
- }
- };
- };
- Ext.Button = Ext.extend(Ext.Component, {
-
- hidden : false,
-
- disabled : false,
-
- pressed : false,
-
-
-
- enableToggle: false,
-
-
- menuAlign : "tl-bl?",
-
-
- type : 'button',
- menuClassTarget: 'tr',
-
- clickEvent : 'click',
-
- handleMouseEvents : true,
-
- tooltipType : 'qtip',
- buttonSelector : "button:first",
-
-
- initComponent : function(){
- Ext.Button.superclass.initComponent.call(this);
- this.addEvents(
-
- "click",
-
- "toggle",
-
- 'mouseover',
-
- 'mouseout',
-
- 'menushow',
-
- 'menuhide',
-
- 'menutriggerover',
-
- 'menutriggerout'
- );
- if(this.menu){
- this.menu = Ext.menu.MenuMgr.get(this.menu);
- }
- if(typeof this.toggleGroup === 'string'){
- this.enableToggle = true;
- }
- },
- onRender : function(ct, position){
- if(!this.template){
- if(!Ext.Button.buttonTemplate){
- Ext.Button.buttonTemplate = new Ext.Template(
- '<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>',
- '<td class="x-btn-left"><i> </i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i> </i></td>',
- "</tr></tbody></table>");
- }
- this.template = Ext.Button.buttonTemplate;
- }
- var btn, targs = [this.text || ' ', this.type];
- if(position){
- btn = this.template.insertBefore(position, targs, true);
- }else{
- btn = this.template.append(ct, targs, true);
- }
- var btnEl = btn.child(this.buttonSelector);
- btnEl.on('focus', this.onFocus, this);
- btnEl.on('blur', this.onBlur, this);
- this.initButtonEl(btn, btnEl);
- if(this.menu){
- this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");
- }
- Ext.ButtonToggleMgr.register(this);
- },
- initButtonEl : function(btn, btnEl){
- this.el = btn;
- btn.addClass("x-btn");
- if(this.icon){
- btnEl.setStyle('background-image', 'url(' +this.icon +')');
- }
- if(this.iconCls){
- btnEl.addClass(this.iconCls);
- if(!this.cls){
- btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon');
- }
- }
- if(this.tabIndex !== undefined){
- btnEl.dom.tabIndex = this.tabIndex;
- }
- if(this.tooltip){
- if(typeof this.tooltip == 'object'){
- Ext.QuickTips.register(Ext.apply({
- target: btnEl.id
- }, this.tooltip));
- } else {
- btnEl.dom[this.tooltipType] = this.tooltip;
- }
- }
- if(this.pressed){
- this.el.addClass("x-btn-pressed");
- }
- if(this.handleMouseEvents){
- btn.on("mouseover", this.onMouseOver, this);
- btn.on("mousedown", this.onMouseDown, this);
- }
- if(this.menu){
- this.menu.on("show", this.onMenuShow, this);
- this.menu.on("hide", this.onMenuHide, this);
- }
- if(this.id){
- this.el.dom.id = this.el.id = this.id;
- }
- if(this.repeat){
- var repeater = new Ext.util.ClickRepeater(btn,
- typeof this.repeat == "object" ? this.repeat : {}
- );
- repeater.on("click", this.onClick, this);
- }
- btn.on(this.clickEvent, this.onClick, this);
- },
- afterRender : function(){
- Ext.Button.superclass.afterRender.call(this);
- if(Ext.isIE6){
- this.autoWidth.defer(1, this);
- }else{
- this.autoWidth();
- }
- },
-
- setIconClass : function(cls){
- if(this.el){
- this.el.child(this.buttonSelector).replaceClass(this.iconCls, cls);
- }
- this.iconCls = cls;
- },
- beforeDestroy: function(){
- if(this.rendered){
- var btn = this.el.child(this.buttonSelector);
- if(btn){
- btn.removeAllListeners();
- }
- }
- if(this.menu){
- Ext.destroy(this.menu);
- }
- },
- onDestroy : function(){
- if(this.rendered){
- Ext.ButtonToggleMgr.unregister(this);
- }
- },
- autoWidth : function(){
- if(this.el){
- this.el.setWidth("auto");
- if(Ext.isIE7 && Ext.isStrict){
- var ib = this.el.child(this.buttonSelector);
- if(ib && ib.getWidth() > 20){
- ib.clip();
- ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
- }
- }
- if(this.minWidth){
- if(this.el.getWidth() < this.minWidth){
- this.el.setWidth(this.minWidth);
- }
- }
- }
- },
-
- setHandler : function(handler, scope){
- this.handler = handler;
- this.scope = scope;
- },
-
- setText : function(text){
- this.text = text;
- if(this.el){
- this.el.child("td.x-btn-center " + this.buttonSelector).update(text);
- }
- this.autoWidth();
- },
-
- getText : function(){
- return this.text;
- },
-
- toggle : function(state){
- state = state === undefined ? !this.pressed : state;
- if(state != this.pressed){
- if(state){
- this.el.addClass("x-btn-pressed");
- this.pressed = true;
- this.fireEvent("toggle", this, true);
- }else{
- this.el.removeClass("x-btn-pressed");
- this.pressed = false;
- this.fireEvent("toggle", this, false);
- }
- if(this.toggleHandler){
- this.toggleHandler.call(this.scope || this, this, state);
- }
- }
- },
-
- focus : function(){
- this.el.child(this.buttonSelector).focus();
- },
- onDisable : function(){
- if(this.el){
- if(!Ext.isIE6 || !this.text){
- this.el.addClass(this.disabledClass);
- }
- this.el.dom.disabled = true;
- }
- this.disabled = true;
- },
- onEnable : function(){
- if(this.el){
- if(!Ext.isIE6 || !this.text){
- this.el.removeClass(this.disabledClass);
- }
- this.el.dom.disabled = false;
- }
- this.disabled = false;
- },
-
- showMenu : function(){
- if(this.menu){
- this.menu.show(this.el, this.menuAlign);
- }
- return this;
- },
-
- hideMenu : function(){
- if(this.menu){
- this.menu.hide();
- }
- return this;
- },
-
- hasVisibleMenu : function(){
- return this.menu && this.menu.isVisible();
- },
- onClick : function(e){
- if(e){
- e.preventDefault();
- }
- if(e.button != 0){
- return;
- }
- if(!this.disabled){
- if(this.enableToggle && (this.allowDepress !== false || !this.pressed)){
- this.toggle();
- }
- if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){
- this.showMenu();
- }
- this.fireEvent("click", this, e);
- if(this.handler){
- this.handler.call(this.scope || this, this, e);
- }
- }
- },
- isMenuTriggerOver : function(e, internal){
- return this.menu && !internal;
- },
- isMenuTriggerOut : function(e, internal){
- return this.menu && !internal;
- },
- onMouseOver : function(e){
- if(!this.disabled){
- var internal = e.within(this.el, true);
- if(!internal){
- this.el.addClass("x-btn-over");
- Ext.getDoc().on('mouseover', this.monitorMouseOver, this);
- this.fireEvent('mouseover', this, e);
- }
- if(this.isMenuTriggerOver(e, internal)){
- this.fireEvent('menutriggerover', this, this.menu, e);
- }
- }
- },
- monitorMouseOver : function(e){
- if(e.target != this.el.dom && !e.within(this.el)){
- Ext.getDoc().un('mouseover', this.monitorMouseOver, this);
- this.onMouseOut(e);
- }
- },
- onMouseOut : function(e){
- var internal = e.within(this.el) && e.target != this.el.dom;
- this.el.removeClass("x-btn-over");
- this.fireEvent('mouseout', this, e);
- if(this.isMenuTriggerOut(e, internal)){
- this.fireEvent('menutriggerout', this, this.menu, e);
- }
- },
- onFocus : function(e){
- if(!this.disabled){
- this.el.addClass("x-btn-focus");
- }
- },
- onBlur : function(e){
- this.el.removeClass("x-btn-focus");
- },
- getClickEl : function(e, isUp){
- return this.el;
- },
- onMouseDown : function(e){
- if(!this.disabled && e.button == 0){
- this.getClickEl(e).addClass("x-btn-click");
- Ext.getDoc().on('mouseup', this.onMouseUp, this);
- }
- },
- onMouseUp : function(e){
- if(e.button == 0){
- this.getClickEl(e, true).removeClass("x-btn-click");
- Ext.getDoc().un('mouseup', this.onMouseUp, this);
- }
- },
- onMenuShow : function(e){
- this.ignoreNextClick = 0;
- this.el.addClass("x-btn-menu-active");
- this.fireEvent('menushow', this, this.menu);
- },
- onMenuHide : function(e){
- this.el.removeClass("x-btn-menu-active");
- this.ignoreNextClick = this.restoreClick.defer(250, this);
- this.fireEvent('menuhide', this, this.menu);
- },
- restoreClick : function(){
- this.ignoreNextClick = 0;
- }
-
- });
- Ext.reg('button', Ext.Button);
- Ext.ButtonToggleMgr = function(){
- var groups = {};
- function toggleGroup(btn, state){
- if(state){
- var g = groups[btn.toggleGroup];
- for(var i = 0, l = g.length; i < l; i++){
- if(g[i] != btn){
- g[i].toggle(false);
- }
- }
- }
- }
- return {
- register : function(btn){
- if(!btn.toggleGroup){
- return;
- }
- var g = groups[btn.toggleGroup];
- if(!g){
- g = groups[btn.toggleGroup] = [];
- }
- g.push(btn);
- btn.on("toggle", toggleGroup);
- },
- unregister : function(btn){
- if(!btn.toggleGroup){
- return;
- }
- var g = groups[btn.toggleGroup];
- if(g){
- g.remove(btn);
- btn.un("toggle", toggleGroup);
- }
- }
- };
- }();
- Ext.SplitButton = Ext.extend(Ext.Button, {
-
- arrowSelector : 'button:last',
-
- initComponent : function(){
- Ext.SplitButton.superclass.initComponent.call(this);
-
- this.addEvents("arrowclick");
- },
-
- onRender : function(ct, position){
-
- var tpl = new Ext.Template(
- '<table cellspacing="0" class="x-btn-menu-wrap x-btn"><tr><td>',
- '<table cellspacing="0" class="x-btn-wrap x-btn-menu-text-wrap"><tbody>',
- '<tr><td class="x-btn-left"><i> </i></td><td class="x-btn-center"><button class="x-btn-text" type="{1}">{0}</button></td></tr>',
- "</tbody></table></td><td>",
- '<table cellspacing="0" class="x-btn-wrap x-btn-menu-arrow-wrap"><tbody>',
- '<tr><td class="x-btn-center"><button class="x-btn-menu-arrow-el" type="button"> </button></td><td class="x-btn-right"><i> </i></td></tr>',
- "</tbody></table></td></tr></table>"
- );
- var btn, targs = [this.text || ' ', this.type];
- if(position){
- btn = tpl.insertBefore(position, targs, true);
- }else{
- btn = tpl.append(ct, targs, true);
- }
- var btnEl = btn.child(this.buttonSelector);
- this.initButtonEl(btn, btnEl);
- this.arrowBtnTable = btn.child("table:last");
- if(this.arrowTooltip){
- btn.child(this.arrowSelector).dom[this.tooltipType] = this.arrowTooltip;
- }
- },
-
- autoWidth : function(){
- if(this.el){
- var tbl = this.el.child("table:first");
- var tbl2 = this.el.child("table:last");
- this.el.setWidth("auto");
- tbl.setWidth("auto");
- if(Ext.isIE7 && Ext.isStrict){
- var ib = this.el.child(this.buttonSelector);
- if(ib && ib.getWidth() > 20){
- ib.clip();
- ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
- }
- }
- if(this.minWidth){
- if((tbl.getWidth()+tbl2.getWidth()) < this.minWidth){
- tbl.setWidth(this.minWidth-tbl2.getWidth());
- }
- }
- this.el.setWidth(tbl.getWidth()+tbl2.getWidth());
- }
- },
-
- setArrowHandler : function(handler, scope){
- this.arrowHandler = handler;
- this.scope = scope;
- },
-
- onClick : function(e){
- e.preventDefault();
- if(!this.disabled){
- if(e.getTarget(".x-btn-menu-arrow-wrap")){
- if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){
- this.showMenu();
- }
- this.fireEvent("arrowclick", this, e);
- if(this.arrowHandler){
- this.arrowHandler.call(this.scope || this, this, e);
- }
- }else{
- if(this.enableToggle){
- this.toggle();
- }
- this.fireEvent("click", this, e);
- if(this.handler){
- this.handler.call(this.scope || this, this, e);
- }
- }
- }
- },
-
- getClickEl : function(e, isUp){
- if(!isUp){
- return (this.lastClickEl = e.getTarget("table", 10, true));
- }
- return this.lastClickEl;
- },
-
- onDisable : function(){
- if(this.el){
- if(!Ext.isIE6){
- this.el.addClass("x-item-disabled");
- }
- this.el.child(this.buttonSelector).dom.disabled = true;
- this.el.child(this.arrowSelector).dom.disabled = true;
- }
- this.disabled = true;
- },
-
- onEnable : function(){
- if(this.el){
- if(!Ext.isIE6){
- this.el.removeClass("x-item-disabled");
- }
- this.el.child(this.buttonSelector).dom.disabled = false;
- this.el.child(this.arrowSelector).dom.disabled = false;
- }
- this.disabled = false;
- },
-
- isMenuTriggerOver : function(e){
- return this.menu && e.within(this.arrowBtnTable) && !e.within(this.arrowBtnTable, true);
- },
-
- isMenuTriggerOut : function(e, internal){
- return this.menu && !e.within(this.arrowBtnTable);
- },
-
- onDestroy : function(){
- Ext.destroy(this.arrowBtnTable);
- Ext.SplitButton.superclass.onDestroy.call(this);
- }
- });
- Ext.MenuButton = Ext.SplitButton;
- Ext.reg('splitbutton', Ext.SplitButton);
- Ext.CycleButton = Ext.extend(Ext.SplitButton, {
-
-
-
-
-
-
- getItemText : function(item){
- if(item && this.showText === true){
- var text = '';
- if(this.prependText){
- text += this.prependText;
- }
- text += item.text;
- return text;
- }
- return undefined;
- },
-
- setActiveItem : function(item, suppressEvent){
- if(typeof item != 'object'){
- item = this.menu.items.get(item);
- }
- if(item){
- if(!this.rendered){
- this.text = this.getItemText(item);
- this.iconCls = item.iconCls;
- }else{
- var t = this.getItemText(item);
- if(t){
- this.setText(t);
- }
- this.setIconClass(item.iconCls);
- }
- this.activeItem = item;
- if(!item.checked){
- item.setChecked(true, true);
- }
- if(this.forceIcon){
- this.setIconClass(this.forceIcon);
- }
- if(!suppressEvent){
- this.fireEvent('change', this, item);
- }
- }
- },
-
- getActiveItem : function(){
- return this.activeItem;
- },
-
- initComponent : function(){
- this.addEvents(
-
- "change"
- );
- if(this.changeHandler){
- this.on('change', this.changeHandler, this.scope||this);
- delete this.changeHandler;
- }
- this.itemCount = this.items.length;
- this.menu = {cls:'x-cycle-menu', items:[]};
- var checked;
- for(var i = 0, len = this.itemCount; i < len; i++){
- var item = this.items[i];
- item.group = item.group || this.id;
- item.itemIndex = i;
- item.checkHandler = this.checkHandler;
- item.scope = this;
- item.checked = item.checked || false;
- this.menu.items.push(item);
- if(item.checked){
- checked = item;
- }
- }
- this.setActiveItem(checked, true);
- Ext.CycleButton.superclass.initComponent.call(this);
- this.on('click', this.toggleSelected, this);
- },
-
- checkHandler : function(item, pressed){
- if(pressed){
- this.setActiveItem(item);
- }
- },
-
- toggleSelected : function(){
- this.menu.render();
-
- var nextIdx, checkItem;
- for (var i = 1; i < this.itemCount; i++) {
- nextIdx = (this.activeItem.itemIndex + i) % this.itemCount;
-
- checkItem = this.menu.items.itemAt(nextIdx);
-
- if (!checkItem.disabled) {
- checkItem.setChecked(true);
- break;
- }
- }
- }
- });
- Ext.reg('cycle', Ext.CycleButton);
-
- Ext.Toolbar = function(config){
- if(Ext.isArray(config)){
- config = {buttons:config};
- }
- Ext.Toolbar.superclass.constructor.call(this, config);
- };
- (function(){
- var T = Ext.Toolbar;
- Ext.extend(T, Ext.BoxComponent, {
- trackMenus : true,
-
- initComponent : function(){
- T.superclass.initComponent.call(this);
- if(this.items){
- this.buttons = this.items;
- }
-
- this.items = new Ext.util.MixedCollection(false, function(o){
- return o.itemId || o.id || Ext.id();
- });
- },
-
- autoCreate: {
- cls:'x-toolbar x-small-editor',
- html:'<table cellspacing="0"><tr></tr></table>'
- },
-
- onRender : function(ct, position){
- this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);
- this.tr = this.el.child("tr", true);
- },
-
- afterRender : function(){
- T.superclass.afterRender.call(this);
- if(this.buttons){
- this.add.apply(this, this.buttons);
- delete this.buttons;
- }
- },
-
- add : function(){
- var a = arguments, l = a.length;
- for(var i = 0; i < l; i++){
- var el = a[i];
- if(el.isFormField){
- this.addField(el);
- }else if(el.render){
- this.addItem(el);
- }else if(typeof el == "string"){
- if(el == "separator" || el == "-"){
- this.addSeparator();
- }else if(el == " "){
- this.addSpacer();
- }else if(el == "->"){
- this.addFill();
- }else{
- this.addText(el);
- }
- }else if(el.tagName){
- this.addElement(el);
- }else if(typeof el == "object"){
- if(el.xtype){
- this.addField(Ext.ComponentMgr.create(el, 'button'));
- }else{
- this.addButton(el);
- }
- }
- }
- },
-
-
- addSeparator : function(){
- return this.addItem(new T.Separator());
- },
-
- addSpacer : function(){
- return this.addItem(new T.Spacer());
- },
-
- addFill : function(){
- return this.addItem(new T.Fill());
- },
-
- addElement : function(el){
- return this.addItem(new T.Item(el));
- },
-
-
- addItem : function(item){
- var td = this.nextBlock();
- this.initMenuTracking(item);
- item.render(td);
- this.items.add(item);
- return item;
- },
-
-
- addButton : function(config){
- if(Ext.isArray(config)){
- var buttons = [];
- for(var i = 0, len = config.length; i < len; i++) {
- buttons.push(this.addButton(config[i]));
- }
- return buttons;
- }
- var b = config;
- if(!(config instanceof T.Button)){
- b = config.split ?
- new T.SplitButton(config) :
- new T.Button(config);
- }
- var td = this.nextBlock();
- this.initMenuTracking(b);
- b.render(td);
- this.items.add(b);
- return b;
- },
-
- initMenuTracking : function(item){
- if(this.trackMenus && item.menu){
- item.on({
- 'menutriggerover' : this.onButtonTriggerOver,
- 'menushow' : this.onButtonMenuShow,
- 'menuhide' : this.onButtonMenuHide,
- scope: this
- })
- }
- },
-
- addText : function(text){
- return this.addItem(new T.TextItem(text));
- },
-
-
- insertButton : function(index, item){
- if(Ext.isArray(item)){
- var buttons = [];
- for(var i = 0, len = item.length; i < len; i++) {
- buttons.push(this.insertButton(index + i, item[i]));
- }
- return buttons;
- }
- if (!(item instanceof T.Button)){
- item = new T.Button(item);
- }
- var td = document.createElement("td");
- this.tr.insertBefore(td, this.tr.childNodes[index]);
- this.initMenuTracking(item);
- item.render(td);
- this.items.insert(index, item);
- return item;
- },
-
-
- addDom : function(config, returnEl){
- var td = this.nextBlock();
- Ext.DomHelper.overwrite(td, config);
- var ti = new T.Item(td.firstChild);
- ti.render(td);
- this.items.add(ti);
- return ti;
- },
-
- addField : function(field){
- var td = this.nextBlock();
- field.render(td);
- var ti = new T.Item(td.firstChild);
- ti.render(td);
- this.items.add(ti);
- return ti;
- },
-
- nextBlock : function(){
- var td = document.createElement("td");
- this.tr.appendChild(td);
- return td;
- },
-
- onDestroy : function(){
- Ext.Toolbar.superclass.onDestroy.call(this);
- if(this.rendered){
- if(this.items){
- Ext.destroy.apply(Ext, this.items.items);
- }
- Ext.Element.uncache(this.tr);
- }
- },
-
- onDisable : function(){
- this.items.each(function(item){
- if(item.disable){
- item.disable();
- }
- });
- },
-
- onEnable : function(){
- this.items.each(function(item){
- if(item.enable){
- item.enable();
- }
- });
- },
-
- onButtonTriggerOver : function(btn){
- if(this.activeMenuBtn && this.activeMenuBtn != btn){
- this.activeMenuBtn.hideMenu();
- btn.showMenu();
- this.activeMenuBtn = btn;
- }
- },
-
- onButtonMenuShow : function(btn){
- this.activeMenuBtn = btn;
- },
-
- onButtonMenuHide : function(btn){
- delete this.activeMenuBtn;
- }
-
- });
- Ext.reg('toolbar', Ext.Toolbar);
- T.Item = function(el){
- this.el = Ext.getDom(el);
- this.id = Ext.id(this.el);
- this.hidden = false;
- };
- T.Item.prototype = {
-
-
- getEl : function(){
- return this.el;
- },
-
- render : function(td){
- this.td = td;
- td.appendChild(this.el);
- },
-
-
- destroy : function(){
- if(this.td && this.td.parentNode){
- this.td.parentNode.removeChild(this.td);
- }
- },
-
-
- show: function(){
- this.hidden = false;
- this.td.style.display = "";
- },
-
-
- hide: function(){
- this.hidden = true;
- this.td.style.display = "none";
- },
-
-
- setVisible: function(visible){
- if(visible) {
- this.show();
- }else{
- this.hide();
- }
- },
-
-
- focus : function(){
- Ext.fly(this.el).focus();
- },
-
-
- disable : function(){
- Ext.fly(this.td).addClass("x-item-disabled");
- this.disabled = true;
- this.el.disabled = true;
- },
-
-
- enable : function(){
- Ext.fly(this.td).removeClass("x-item-disabled");
- this.disabled = false;
- this.el.disabled = false;
- }
- };
- Ext.reg('tbitem', T.Item);
- T.Separator = function(){
- var s = document.createElement("span");
- s.className = "ytb-sep";
- T.Separator.superclass.constructor.call(this, s);
- };
- Ext.extend(T.Separator, T.Item, {
- enable:Ext.emptyFn,
- disable:Ext.emptyFn,
- focus:Ext.emptyFn
- });
- Ext.reg('tbseparator', T.Separator);
- T.Spacer = function(){
- var s = document.createElement("div");
- s.className = "ytb-spacer";
- T.Spacer.superclass.constructor.call(this, s);
- };
- Ext.extend(T.Spacer, T.Item, {
- enable:Ext.emptyFn,
- disable:Ext.emptyFn,
- focus:Ext.emptyFn
- });
- Ext.reg('tbspacer', T.Spacer);
- T.Fill = Ext.extend(T.Spacer, {
-
- render : function(td){
- td.style.width = '100%';
- T.Fill.superclass.render.call(this, td);
- }
- });
- Ext.reg('tbfill', T.Fill);
- T.TextItem = function(t){
- var s = document.createElement("span");
- s.className = "ytb-text";
- s.innerHTML = t.text ? t.text : t;
- T.TextItem.superclass.constructor.call(this, s);
- };
- Ext.extend(T.TextItem, T.Item, {
- enable:Ext.emptyFn,
- disable:Ext.emptyFn,
- focus:Ext.emptyFn
- });
- Ext.reg('tbtext', T.TextItem);
- T.Button = Ext.extend(Ext.Button, {
- hideParent : true,
- onDestroy : function(){
- T.Button.superclass.onDestroy.call(this);
- if(this.container){
- this.container.remove();
- }
- }
- });
- Ext.reg('tbbutton', T.Button);
- T.SplitButton = Ext.extend(Ext.SplitButton, {
- hideParent : true,
- onDestroy : function(){
- T.SplitButton.superclass.onDestroy.call(this);
- if(this.container){
- this.container.remove();
- }
- }
- });
- Ext.reg('tbsplit', T.SplitButton);
- T.MenuButton = T.SplitButton;
- })();
- Ext.PagingToolbar = Ext.extend(Ext.Toolbar, {
-
-
-
- pageSize: 20,
-
- displayMsg : 'Displaying {0} - {1} of {2}',
-
- emptyMsg : 'No data to display',
-
- beforePageText : "Page",
-
- afterPageText : "of {0}",
-
- firstText : "First Page",
-
- prevText : "Previous Page",
-
- nextText : "Next Page",
-
- lastText : "Last Page",
-
- refreshText : "Refresh",
-
- paramNames : {start: 'start', limit: 'limit'},
- initComponent : function(){
- Ext.PagingToolbar.superclass.initComponent.call(this);
- this.cursor = 0;
- this.bind(this.store);
- },
- onRender : function(ct, position){
- Ext.PagingToolbar.superclass.onRender.call(this, ct, position);
- this.first = this.addButton({
- tooltip: this.firstText,
- iconCls: "x-tbar-page-first",
- disabled: true,
- handler: this.onClick.createDelegate(this, ["first"])
- });
- this.prev = this.addButton({
- tooltip: this.prevText,
- iconCls: "x-tbar-page-prev",
- disabled: true,
- handler: this.onClick.createDelegate(this, ["prev"])
- });
- this.addSeparator();
- this.add(this.beforePageText);
- this.field = Ext.get(this.addDom({
- tag: "input",
- type: "text",
- size: "3",
- value: "1",
- cls: "x-tbar-page-number"
- }).el);
- this.field.on("keydown", this.onPagingKeydown, this);
- this.field.on("focus", function(){this.dom.select();});
- this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
- this.field.setHeight(18);
- this.addSeparator();
- this.next = this.addButton({
- tooltip: this.nextText,
- iconCls: "x-tbar-page-next",
- disabled: true,
- handler: this.onClick.createDelegate(this, ["next"])
- });
- this.last = this.addButton({
- tooltip: this.lastText,
- iconCls: "x-tbar-page-last",
- disabled: true,
- handler: this.onClick.createDelegate(this, ["last"])
- });
- this.addSeparator();
- this.loading = this.addButton({
- tooltip: this.refreshText,
- iconCls: "x-tbar-loading",
- handler: this.onClick.createDelegate(this, ["refresh"])
- });
- if(this.displayInfo){
- this.displayEl = Ext.fly(this.el.dom).createChild({cls:'x-paging-info'});
- }
- if(this.dsLoaded){
- this.onLoad.apply(this, this.dsLoaded);
- }
- },
- updateInfo : function(){
- if(this.displayEl){
- var count = this.store.getCount();
- var msg = count == 0 ?
- this.emptyMsg :
- String.format(
- this.displayMsg,
- this.cursor+1, this.cursor+count, this.store.getTotalCount()
- );
- this.displayEl.update(msg);
- }
- },
- onLoad : function(store, r, o){
- if(!this.rendered){
- this.dsLoaded = [store, r, o];
- return;
- }
- this.cursor = o.params ? o.params[this.paramNames.start] : 0;
- var d = this.getPageData(), ap = d.activePage, ps = d.pages;
- this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages);
- this.field.dom.value = ap;
- this.first.setDisabled(ap == 1);
- this.prev.setDisabled(ap == 1);
- this.next.setDisabled(ap == ps);
- this.last.setDisabled(ap == ps);
- this.loading.enable();
- this.updateInfo();
- },
- getPageData : function(){
- var total = this.store.getTotalCount();
- return {
- total : total,
- activePage : Math.ceil((this.cursor+this.pageSize)/this.pageSize),
- pages : total < this.pageSize ? 1 : Math.ceil(total/this.pageSize)
- };
- },
- onLoadError : function(){
- if(!this.rendered){
- return;
- }
- this.loading.enable();
- },
- readPage : function(d){
- var v = this.field.dom.value, pageNum;
- if (!v || isNaN(pageNum = parseInt(v, 10))) {
- this.field.dom.value = d.activePage;
- return false;
- }
- return pageNum;
- },
- onPagingKeydown : function(e){
- var k = e.getKey(), d = this.getPageData(), pageNum;
- if (k == e.RETURN) {
- e.stopEvent();
- if(pageNum = this.readPage(d)){
- pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1;
- this.doLoad(pageNum * this.pageSize);
- }
- }else if (k == e.HOME || k == e.END){
- e.stopEvent();
- pageNum = k == e.HOME ? 1 : d.pages;
- this.field.dom.value = pageNum;
- }else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN){
- e.stopEvent();
- if(pageNum = this.readPage(d)){
- var increment = e.shiftKey ? 10 : 1;
- if(k == e.DOWN || k == e.PAGEDOWN){
- increment *= -1;
- }
- pageNum += increment;
- if(pageNum >= 1 & pageNum <= d.pages){
- this.field.dom.value = pageNum;
- }
- }
- }
- },
- beforeLoad : function(){
- if(this.rendered && this.loading){
- this.loading.disable();
- }
- },
- doLoad : function(start){
- var o = {}, pn = this.paramNames;
- o[pn.start] = start;
- o[pn.limit] = this.pageSize;
- this.store.load({params:o});
- },
- onClick : function(which){
- var store = this.store;
- switch(which){
- case "first":
- this.doLoad(0);
- break;
- case "prev":
- this.doLoad(Math.max(0, this.cursor-this.pageSize));
- break;
- case "next":
- this.doLoad(this.cursor+this.pageSize);
- break;
- case "last":
- var total = store.getTotalCount();
- var extra = total % this.pageSize;
- var lastStart = extra ? (total - extra) : total-this.pageSize;
- this.doLoad(lastStart);
- break;
- case "refresh":
- this.doLoad(this.cursor);
- break;
- }
- },
-
- unbind : function(store){
- store = Ext.StoreMgr.lookup(store);
- store.un("beforeload", this.beforeLoad, this);
- store.un("load", this.onLoad, this);
- store.un("loadexception", this.onLoadError, this);
- this.store = undefined;
- },
-
- bind : function(store){
- store = Ext.StoreMgr.lookup(store);
- store.on("beforeload", this.beforeLoad, this);
- store.on("load", this.onLoad, this);
- store.on("loadexception", this.onLoadError, this);
- this.store = store;
- }
- });
- Ext.reg('paging', Ext.PagingToolbar);
- Ext.Resizable = function(el, config){
- this.el = Ext.get(el);
-
- if(config && config.wrap){
- config.resizeChild = this.el;
- this.el = this.el.wrap(typeof config.wrap == "object" ? config.wrap : {cls:"xresizable-wrap"});
- this.el.id = this.el.dom.id = config.resizeChild.id + "-rzwrap";
- this.el.setStyle("overflow", "hidden");
- this.el.setPositioning(config.resizeChild.getPositioning());
- config.resizeChild.clearPositioning();
- if(!config.width || !config.height){
- var csize = config.resizeChild.getSize();
- this.el.setSize(csize.width, csize.height);
- }
- if(config.pinned && !config.adjustments){
- config.adjustments = "auto";
- }
- }
- this.proxy = this.el.createProxy({tag: "div", cls: "x-resizable-proxy", id: this.el.id + "-rzproxy"});
- this.proxy.unselectable();
- this.proxy.enableDisplayMode('block');
- Ext.apply(this, config);
-
- if(this.pinned){
- this.disableTrackOver = true;
- this.el.addClass("x-resizable-pinned");
- }
-
- var position = this.el.getStyle("position");
- if(position != "absolute" && position != "fixed"){
- this.el.setStyle("position", "relative");
- }
- if(!this.handles){
- this.handles = 's,e,se';
- if(this.multiDirectional){
- this.handles += ',n,w';
- }
- }
- if(this.handles == "all"){
- this.handles = "n s e w ne nw se sw";
- }
- var hs = this.handles.split(/\s*?[,;]\s*?| /);
- var ps = Ext.Resizable.positions;
- for(var i = 0, len = hs.length; i < len; i++){
- if(hs[i] && ps[hs[i]]){
- var pos = ps[hs[i]];
- this[pos] = new Ext.Resizable.Handle(this, pos, this.disableTrackOver, this.transparent);
- }
- }
-
- this.corner = this.southeast;
-
- if(this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1){
- this.updateBox = true;
- }
-
- this.activeHandle = null;
-
- if(this.resizeChild){
- if(typeof this.resizeChild == "boolean"){
- this.resizeChild = Ext.get(this.el.dom.firstChild, true);
- }else{
- this.resizeChild = Ext.get(this.resizeChild, true);
- }
- }
-
- if(this.adjustments == "auto"){
- var rc = this.resizeChild;
- var hw = this.west, he = this.east, hn = this.north, hs = this.south;
- if(rc && (hw || hn)){
- rc.position("relative");
- rc.setLeft(hw ? hw.el.getWidth() : 0);
- rc.setTop(hn ? hn.el.getHeight() : 0);
- }
- this.adjustments = [
- (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),
- (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1
- ];
- }
-
- if(this.draggable){
- this.dd = this.dynamic ?
- this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});
- this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id);
- }
-
-
- this.addEvents(
- "beforeresize",
- "resize"
- );
-
- if(this.width !== null && this.height !== null){
- this.resizeTo(this.width, this.height);
- }else{
- this.updateChildSize();
- }
- if(Ext.isIE){
- this.el.dom.style.zoom = 1;
- }
- Ext.Resizable.superclass.constructor.call(this);
- };
- Ext.extend(Ext.Resizable, Ext.util.Observable, {
- resizeChild : false,
- adjustments : [0, 0],
- minWidth : 5,
- minHeight : 5,
- maxWidth : 10000,
- maxHeight : 10000,
- enabled : true,
- animate : false,
- duration : .35,
- dynamic : false,
- handles : false,
- multiDirectional : false,
- disableTrackOver : false,
- easing : 'easeOutStrong',
- widthIncrement : 0,
- heightIncrement : 0,
- pinned : false,
- width : null,
- height : null,
- preserveRatio : false,
- transparent: false,
- minX: 0,
- minY: 0,
- draggable: false,
-
-
-
-
-
-
- resizeTo : function(width, height){
- this.el.setSize(width, height);
- this.updateChildSize();
- this.fireEvent("resize", this, width, height, null);
- },
-
- startSizing : function(e, handle){
- this.fireEvent("beforeresize", this, e);
- if(this.enabled){
- if(!this.overlay){
- this.overlay = this.el.createProxy({tag: "div", cls: "x-resizable-overlay", html: " "}, Ext.getBody());
- this.overlay.unselectable();
- this.overlay.enableDisplayMode("block");
- this.overlay.on("mousemove", this.onMouseMove, this);
- this.overlay.on("mouseup", this.onMouseUp, this);
- }
- this.overlay.setStyle("cursor", handle.el.getStyle("cursor"));
- this.resizing = true;
- this.startBox = this.el.getBox();
- this.startPoint = e.getXY();
- this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],
- (this.startBox.y + this.startBox.height) - this.startPoint[1]];
- this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
- this.overlay.show();
- if(this.constrainTo) {
- var ct = Ext.get(this.constrainTo);
- this.resizeRegion = ct.getRegion().adjust(
- ct.getFrameWidth('t'),
- ct.getFrameWidth('l'),
- -ct.getFrameWidth('b'),
- -ct.getFrameWidth('r')
- );
- }
- this.proxy.setStyle('visibility', 'hidden');
- this.proxy.show();
- this.proxy.setBox(this.startBox);
- if(!this.dynamic){
- this.proxy.setStyle('visibility', 'visible');
- }
- }
- },
-
- onMouseDown : function(handle, e){
- if(this.enabled){
- e.stopEvent();
- this.activeHandle = handle;
- this.startSizing(e, handle);
- }
- },
-
- onMouseUp : function(e){
- var size = this.resizeElement();
- this.resizing = false;
- this.handleOut();
- this.overlay.hide();
- this.proxy.hide();
- this.fireEvent("resize", this, size.width, size.height, e);
- },
-
- updateChildSize : function(){
- if(this.resizeChild){
- var el = this.el;
- var child = this.resizeChild;
- var adj = this.adjustments;
- if(el.dom.offsetWidth){
- var b = el.getSize(true);
- child.setSize(b.width+adj[0], b.height+adj[1]);
- }
-
-
-
-
- if(Ext.isIE){
- setTimeout(function(){
- if(el.dom.offsetWidth){
- var b = el.getSize(true);
- child.setSize(b.width+adj[0], b.height+adj[1]);
- }
- }, 10);
- }
- }
- },
-
- snap : function(value, inc, min){
- if(!inc || !value) return value;
- var newValue = value;
- var m = value % inc;
- if(m > 0){
- if(m > (inc/2)){
- newValue = value + (inc-m);
- }else{
- newValue = value - m;
- }
- }
- return Math.max(min, newValue);
- },
-
- resizeElement : function(){
- var box = this.proxy.getBox();
- if(this.updateBox){
- this.el.setBox(box, false, this.animate, this.duration, null, this.easing);
- }else{
- this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);
- }
- this.updateChildSize();
- if(!this.dynamic){
- this.proxy.hide();
- }
- return box;
- },
-
- constrain : function(v, diff, m, mx){
- if(v - diff < m){
- diff = v - m;
- }else if(v - diff > mx){
- diff = mx - v;
- }
- return diff;
- },
-
- onMouseMove : function(e){
- if(this.enabled){
- try{
- if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {
- return;
- }
-
- var curSize = this.curSize || this.startBox;
- var x = this.startBox.x, y = this.startBox.y;
- var ox = x, oy = y;
- var w = curSize.width, h = curSize.height;
- var ow = w, oh = h;
- var mw = this.minWidth, mh = this.minHeight;
- var mxw = this.maxWidth, mxh = this.maxHeight;
- var wi = this.widthIncrement;
- var hi = this.heightIncrement;
-
- var eventXY = e.getXY();
- var diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0]));
- var diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1]));
-
- var pos = this.activeHandle.position;
-
- switch(pos){
- case "east":
- w += diffX;
- w = Math.min(Math.max(mw, w), mxw);
- break;
- case "south":
- h += diffY;
- h = Math.min(Math.max(mh, h), mxh);
- break;
- case "southeast":
- w += diffX;
- h += diffY;
- w = Math.min(Math.max(mw, w), mxw);
- h = Math.min(Math.max(mh, h), mxh);
- break;
- case "north":
- diffY = this.constrain(h, diffY, mh, mxh);
- y += diffY;
- h -= diffY;
- break;
- case "west":
- diffX = this.constrain(w, diffX, mw, mxw);
- x += diffX;
- w -= diffX;
- break;
- case "northeast":
- w += diffX;
- w = Math.min(Math.max(mw, w), mxw);
- diffY = this.constrain(h, diffY, mh, mxh);
- y += diffY;
- h -= diffY;
- break;
- case "northwest":
- diffX = this.constrain(w, diffX, mw, mxw);
- diffY = this.constrain(h, diffY, mh, mxh);
- y += diffY;
- h -= diffY;
- x += diffX;
- w -= diffX;
- break;
- case "southwest":
- diffX = this.constrain(w, diffX, mw, mxw);
- h += diffY;
- h = Math.min(Math.max(mh, h), mxh);
- x += diffX;
- w -= diffX;
- break;
- }
-
- var sw = this.snap(w, wi, mw);
- var sh = this.snap(h, hi, mh);
- if(sw != w || sh != h){
- switch(pos){
- case "northeast":
- y -= sh - h;
- break;
- case "north":
- y -= sh - h;
- break;
- case "southwest":
- x -= sw - w;
- break;
- case "west":
- x -= sw - w;
- break;
- case "northwest":
- x -= sw - w;
- y -= sh - h;
- break;
- }
- w = sw;
- h = sh;
- }
-
- if(this.preserveRatio){
- switch(pos){
- case "southeast":
- case "east":
- h = oh * (w/ow);
- h = Math.min(Math.max(mh, h), mxh);
- w = ow * (h/oh);
- break;
- case "south":
- w = ow * (h/oh);
- w = Math.min(Math.max(mw, w), mxw);
- h = oh * (w/ow);
- break;
- case "northeast":
- w = ow * (h/oh);
- w = Math.min(Math.max(mw, w), mxw);
- h = oh * (w/ow);
- break;
- case "north":
- var tw = w;
- w = ow * (h/oh);
- w = Math.min(Math.max(mw, w), mxw);
- h = oh * (w/ow);
- x += (tw - w) / 2;
- break;
- case "southwest":
- h = oh * (w/ow);
- h = Math.min(Math.max(mh, h), mxh);
- var tw = w;
- w = ow * (h/oh);
- x += tw - w;
- break;
- case "west":
- var th = h;
- h = oh * (w/ow);
- h = Math.min(Math.max(mh, h), mxh);
- y += (th - h) / 2;
- var tw = w;
- w = ow * (h/oh);
- x += tw - w;
- break;
- case "northwest":
- var tw = w;
- var th = h;
- h = oh * (w/ow);
- h = Math.min(Math.max(mh, h), mxh);
- w = ow * (h/oh);
- y += th - h;
- x += tw - w;
- break;
-
- }
- }
- this.proxy.setBounds(x, y, w, h);
- if(this.dynamic){
- this.resizeElement();
- }
- }catch(e){}
- }
- },
-
- handleOver : function(){
- if(this.enabled){
- this.el.addClass("x-resizable-over");
- }
- },
-
- handleOut : function(){
- if(!this.resizing){
- this.el.removeClass("x-resizable-over");
- }
- },
-
-
- getEl : function(){
- return this.el;
- },
-
-
- getResizeChild : function(){
- return this.resizeChild;
- },
-
-
- destroy : function(removeEl){
- this.proxy.remove();
- if(this.overlay){
- this.overlay.removeAllListeners();
- this.overlay.remove();
- }
- var ps = Ext.Resizable.positions;
- for(var k in ps){
- if(typeof ps[k] != "function" && this[ps[k]]){
- var h = this[ps[k]];
- h.el.removeAllListeners();
- h.el.remove();
- }
- }
- if(removeEl){
- this.el.update("");
- this.el.remove();
- }
- },
- syncHandleHeight : function(){
- var h = this.el.getHeight(true);
- if(this.west){
- this.west.el.setHeight(h);
- }
- if(this.east){
- this.east.el.setHeight(h);
- }
- }
- });
- Ext.Resizable.positions = {
- n: "north", s: "south", e: "east", w: "west", se: "southeast", sw: "southwest", nw: "northwest", ne: "northeast"
- };
- Ext.Resizable.Handle = function(rz, pos, disableTrackOver, transparent){
- if(!this.tpl){
-
- var tpl = Ext.DomHelper.createTemplate(
- {tag: "div", cls: "x-resizable-handle x-resizable-handle-{0}"}
- );
- tpl.compile();
- Ext.Resizable.Handle.prototype.tpl = tpl;
- }
- this.position = pos;
- this.rz = rz;
- this.el = this.tpl.append(rz.el.dom, [this.position], true);
- this.el.unselectable();
- if(transparent){
- this.el.setOpacity(0);
- }
- this.el.on("mousedown", this.onMouseDown, this);
- if(!disableTrackOver){
- this.el.on("mouseover", this.onMouseOver, this);
- this.el.on("mouseout", this.onMouseOut, this);
- }
- };
- Ext.Resizable.Handle.prototype = {
- afterResize : function(rz){
-
- },
-
- onMouseDown : function(e){
- this.rz.onMouseDown(this, e);
- },
-
- onMouseOver : function(e){
- this.rz.handleOver(this, e);
- },
-
- onMouseOut : function(e){
- this.rz.handleOut(this, e);
- }
- };
- Ext.Editor = function(field, config){
- this.field = field;
- Ext.Editor.superclass.constructor.call(this, config);
- };
- Ext.extend(Ext.Editor, Ext.Component, {
-
-
-
-
-
- value : "",
-
- alignment: "c-c?",
-
- shadow : "frame",
-
- constrain : false,
-
- swallowKeys : true,
-
- completeOnEnter : false,
-
- cancelOnEsc : false,
-
- updateEl : false,
- initComponent : function(){
- Ext.Editor.superclass.initComponent.call(this);
- this.addEvents(
-
- "beforestartedit",
-
- "startedit",
-
- "beforecomplete",
-
- "complete",
-
- "specialkey"
- );
- },
- onRender : function(ct, position){
- this.el = new Ext.Layer({
- shadow: this.shadow,
- cls: "x-editor",
- parentEl : ct,
- shim : this.shim,
- shadowOffset:4,
- id: this.id,
- constrain: this.constrain
- });
- this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
- if(this.field.msgTarget != 'title'){
- this.field.msgTarget = 'qtip';
- }
- this.field.inEditor = true;
- this.field.render(this.el);
- if(Ext.isGecko){
- this.field.el.dom.setAttribute('autocomplete', 'off');
- }
- this.field.on("specialkey", this.onSpecialKey, this);
- if(this.swallowKeys){
- this.field.el.swallowEvent(['keydown','keypress']);
- }
- this.field.show();
- this.field.on("blur", this.onBlur, this);
- if(this.field.grow){
- this.field.on("autosize", this.el.sync, this.el, {delay:1});
- }
- },
- onSpecialKey : function(field, e){
- if(this.completeOnEnter && e.getKey() == e.ENTER){
- e.stopEvent();
- this.completeEdit();
- }else if(this.cancelOnEsc && e.getKey() == e.ESC){
- this.cancelEdit();
- }else{
- this.fireEvent('specialkey', field, e);
- }
- },
-
- startEdit : function(el, value){
- if(this.editing){
- this.completeEdit();
- }
- this.boundEl = Ext.get(el);
- var v = value !== undefined ? value : this.boundEl.dom.innerHTML;
- if(!this.rendered){
- this.render(this.parentEl || document.body);
- }
- if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){
- return;
- }
- this.startValue = v;
- this.field.setValue(v);
- this.doAutoSize();
- this.el.alignTo(this.boundEl, this.alignment);
- this.editing = true;
- this.show();
- },
- doAutoSize : function(){
- if(this.autoSize){
- var sz = this.boundEl.getSize();
- switch(this.autoSize){
- case "width":
- this.setSize(sz.width, "");
- break;
- case "height":
- this.setSize("", sz.height);
- break;
- default:
- this.setSize(sz.width, sz.height);
- }
- }
- },
-
- setSize : function(w, h){
- delete this.field.lastSize;
- this.field.setSize(w, h);
- if(this.el){
- this.el.sync();
- }
- },
-
- realign : function(){
- this.el.alignTo(this.boundEl, this.alignment);
- },
-
- completeEdit : function(remainVisible){
- if(!this.editing){
- return;
- }
- var v = this.getValue();
- if(this.revertInvalid !== false && !this.field.isValid()){
- v = this.startValue;
- this.cancelEdit(true);
- }
- if(String(v) === String(this.startValue) && this.ignoreNoChange){
- this.editing = false;
- this.hide();
- return;
- }
- if(this.fireEvent("beforecomplete", this, v, this.startValue) !== false){
- this.editing = false;
- if(this.updateEl && this.boundEl){
- this.boundEl.update(v);
- }
- if(remainVisible !== true){
- this.hide();
- }
- this.fireEvent("complete", this, v, this.startValue);
- }
- },
- onShow : function(){
- this.el.show();
- if(this.hideEl !== false){
- this.boundEl.hide();
- }
- this.field.show();
- if(Ext.isIE && !this.fixIEFocus){ this.fixIEFocus = true;
- this.deferredFocus.defer(50, this);
- }else{
- this.field.focus();
- }
- this.fireEvent("startedit", this.boundEl, this.startValue);
- },
- deferredFocus : function(){
- if(this.editing){
- this.field.focus();
- }
- },
-
- cancelEdit : function(remainVisible){
- if(this.editing){
- this.setValue(this.startValue);
- if(remainVisible !== true){
- this.hide();
- }
- }
- },
- onBlur : function(){
- if(this.allowBlur !== true && this.editing){
- this.completeEdit();
- }
- },
- onHide : function(){
- if(this.editing){
- this.completeEdit();
- return;
- }
- this.field.blur();
- if(this.field.collapse){
- this.field.collapse();
- }
- this.el.hide();
- if(this.hideEl !== false){
- this.boundEl.show();
- }
- },
-
- setValue : function(v){
- this.field.setValue(v);
- },
-
- getValue : function(){
- return this.field.getValue();
- },
- beforeDestroy : function(){
- this.field.destroy();
- this.field = null;
- }
- });
- Ext.reg('editor', Ext.Editor);
- Ext.MessageBox = function(){
- var dlg, opt, mask, waitTimer;
- var bodyEl, msgEl, textboxEl, textareaEl, progressBar, pp, iconEl, spacerEl;
- var buttons, activeTextEl, bwidth, iconCls = '';
-
- var handleButton = function(button){
- dlg.hide();
- Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value], 1);
- };
-
- var handleHide = function(){
- if(opt && opt.cls){
- dlg.el.removeClass(opt.cls);
- }
- progressBar.reset();
- };
-
- var handleEsc = function(d, k, e){
- if(opt && opt.closable !== false){
- dlg.hide();
- }
- if(e){
- e.stopEvent();
- }
- };
-
- var updateButtons = function(b){
- var width = 0;
- if(!b){
- buttons["ok"].hide();
- buttons["cancel"].hide();
- buttons["yes"].hide();
- buttons["no"].hide();
- return width;
- }
- dlg.footer.dom.style.display = '';
- for(var k in buttons){
- if(typeof buttons[k] != "function"){
- if(b[k]){
- buttons[k].show();
- buttons[k].setText(typeof b[k] == "string" ? b[k] : Ext.MessageBox.buttonText[k]);
- width += buttons[k].el.getWidth()+15;
- }else{
- buttons[k].hide();
- }
- }
- }
- return width;
- };
- return {
-
- getDialog : function(titleText){
- if(!dlg){
- dlg = new Ext.Window({
- autoCreate : true,
- title:titleText,
- resizable:false,
- constrain:true,
- constrainHeader:true,
- minimizable : false,
- maximizable : false,
- stateful: false,
- modal: true,
- shim:true,
- buttonAlign:"center",
- width:400,
- height:100,
- minHeight: 80,
- plain:true,
- footer:true,
- closable:true,
- close : function(){
- if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){
- handleButton("no");
- }else{
- handleButton("cancel");
- }
- }
- });
- buttons = {};
- var bt = this.buttonText;
-
- buttons["ok"] = dlg.addButton(bt["ok"], handleButton.createCallback("ok"));
- buttons["yes"] = dlg.addButton(bt["yes"], handleButton.createCallback("yes"));
- buttons["no"] = dlg.addButton(bt["no"], handleButton.createCallback("no"));
- buttons["cancel"] = dlg.addButton(bt["cancel"], handleButton.createCallback("cancel"));
- buttons["ok"].hideMode = buttons["yes"].hideMode = buttons["no"].hideMode = buttons["cancel"].hideMode = 'offsets';
- dlg.render(document.body);
- dlg.getEl().addClass('x-window-dlg');
- mask = dlg.mask;
- bodyEl = dlg.body.createChild({
- html:'<div class="ext-mb-icon"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea></div>'
- });
- iconEl = Ext.get(bodyEl.dom.firstChild);
- var contentEl = bodyEl.dom.childNodes[1];
- msgEl = Ext.get(contentEl.firstChild);
- textboxEl = Ext.get(contentEl.childNodes[2]);
- textboxEl.enableDisplayMode();
- textboxEl.addKeyListener([10,13], function(){
- if(dlg.isVisible() && opt && opt.buttons){
- if(opt.buttons.ok){
- handleButton("ok");
- }else if(opt.buttons.yes){
- handleButton("yes");
- }
- }
- });
- textareaEl = Ext.get(contentEl.childNodes[3]);
- textareaEl.enableDisplayMode();
- progressBar = new Ext.ProgressBar({
- renderTo:bodyEl
- });
- bodyEl.createChild({cls:'x-clear'});
- }
- return dlg;
- },
-
- updateText : function(text){
- if(!dlg.isVisible() && !opt.width){
- dlg.setSize(this.maxWidth, 100);
- }
- msgEl.update(text || ' ');
- var iw = iconCls != '' ? (iconEl.getWidth() + iconEl.getMargins('lr')) : 0;
- var mw = msgEl.getWidth() + msgEl.getMargins('lr');
- var fw = dlg.getFrameWidth('lr');
- var bw = dlg.body.getFrameWidth('lr');
- if (Ext.isIE && iw > 0){
-
-
- iw += 3;
- }
- var w = Math.max(Math.min(opt.width || iw+mw+fw+bw, this.maxWidth),
- Math.max(opt.minWidth || this.minWidth, bwidth || 0));
- if(opt.prompt === true){
- activeTextEl.setWidth(w-iw-fw-bw);
- }
- if(opt.progress === true || opt.wait === true){
- progressBar.setSize(w-iw-fw-bw);
- }
- dlg.setSize(w, 'auto').center();
- return this;
- },
-
- updateProgress : function(value, progressText, msg){
- progressBar.updateProgress(value, progressText);
- if(msg){
- this.updateText(msg);
- }
- return this;
- },
-
- isVisible : function(){
- return dlg && dlg.isVisible();
- },
-
- hide : function(){
- if(this.isVisible()){
- dlg.hide();
- handleHide();
- }
- return this;
- },
-
- show : function(options){
- if(this.isVisible()){
- this.hide();
- }
- opt = options;
- var d = this.getDialog(opt.title || " ");
- d.setTitle(opt.title || " ");
- var allowClose = (opt.closable !== false && opt.progress !== true && opt.wait !== true);
- d.tools.close.setDisplayed(allowClose);
- activeTextEl = textboxEl;
- opt.prompt = opt.prompt || (opt.multiline ? true : false);
- if(opt.prompt){
- if(opt.multiline){
- textboxEl.hide();
- textareaEl.show();
- textareaEl.setHeight(typeof opt.multiline == "number" ?
- opt.multiline : this.defaultTextHeight);
- activeTextEl = textareaEl;
- }else{
- textboxEl.show();
- textareaEl.hide();
- }
- }else{
- textboxEl.hide();
- textareaEl.hide();
- }
- activeTextEl.dom.value = opt.value || "";
- if(opt.prompt){
- d.focusEl = activeTextEl;
- }else{
- var bs = opt.buttons;
- var db = null;
- if(bs && bs.ok){
- db = buttons["ok"];
- }else if(bs && bs.yes){
- db = buttons["yes"];
- }
- if (db){
- d.focusEl = db;
- }
- }
- this.setIcon(opt.icon);
- bwidth = updateButtons(opt.buttons);
- progressBar.setVisible(opt.progress === true || opt.wait === true);
- this.updateProgress(0, opt.progressText);
- this.updateText(opt.msg);
- if(opt.cls){
- d.el.addClass(opt.cls);
- }
- d.proxyDrag = opt.proxyDrag === true;
- d.modal = opt.modal !== false;
- d.mask = opt.modal !== false ? mask : false;
- if(!d.isVisible()){
-
- document.body.appendChild(dlg.el.dom);
- d.setAnimateTarget(opt.animEl);
- d.show(opt.animEl);
- }
-
- d.on('show', function(){
- if(allowClose === true){
- d.keyMap.enable();
- }else{
- d.keyMap.disable();
- }
- }, this, {single:true});
- if(opt.wait === true){
- progressBar.wait(opt.waitConfig);
- }
- return this;
- },
-
- setIcon : function(icon){
- if(icon && icon != ''){
- iconEl.removeClass('x-hidden');
- iconEl.replaceClass(iconCls, icon);
- iconCls = icon;
- }else{
- iconEl.replaceClass(iconCls, 'x-hidden');
- iconCls = '';
- }
- return this;
- },
-
- progress : function(title, msg, progressText){
- this.show({
- title : title,
- msg : msg,
- buttons: false,
- progress:true,
- closable:false,
- minWidth: this.minProgressWidth,
- progressText: progressText
- });
- return this;
- },
-
- wait : function(msg, title, config){
- this.show({
- title : title,
- msg : msg,
- buttons: false,
- closable:false,
- wait:true,
- modal:true,
- minWidth: this.minProgressWidth,
- waitConfig: config
- });
- return this;
- },
-
- alert : function(title, msg, fn, scope){
- this.show({
- title : title,
- msg : msg,
- buttons: this.OK,
- fn: fn,
- scope : scope
- });
- return this;
- },
-
- confirm : function(title, msg, fn, scope){
- this.show({
- title : title,
- msg : msg,
- buttons: this.YESNO,
- fn: fn,
- scope : scope,
- icon: this.QUESTION
- });
- return this;
- },
-
- prompt : function(title, msg, fn, scope, multiline){
- this.show({
- title : title,
- msg : msg,
- buttons: this.OKCANCEL,
- fn: fn,
- minWidth:250,
- scope : scope,
- prompt:true,
- multiline: multiline
- });
- return this;
- },
-
- OK : {ok:true},
-
- CANCEL : {cancel:true},
-
- OKCANCEL : {ok:true, cancel:true},
-
- YESNO : {yes:true, no:true},
-
- YESNOCANCEL : {yes:true, no:true, cancel:true},
-
- INFO : 'ext-mb-info',
-
- WARNING : 'ext-mb-warning',
-
- QUESTION : 'ext-mb-question',
-
- ERROR : 'ext-mb-error',
-
- defaultTextHeight : 75,
-
- maxWidth : 600,
-
- minWidth : 100,
-
- minProgressWidth : 250,
-
- buttonText : {
- ok : "OK",
- cancel : "Cancel",
- yes : "Yes",
- no : "No"
- }
- };
- }();
- Ext.Msg = Ext.MessageBox;
- Ext.Tip = Ext.extend(Ext.Panel, {
-
-
-
- minWidth : 40,
-
- maxWidth : 300,
-
- shadow : "sides",
-
- defaultAlign : "tl-bl?",
- autoRender: true,
- quickShowInterval : 250,
-
- frame:true,
- hidden:true,
- baseCls: 'x-tip',
- floating:{shadow:true,shim:true,useDisplay:true,constrain:false},
- autoHeight:true,
-
- initComponent : function(){
- Ext.Tip.superclass.initComponent.call(this);
- if(this.closable && !this.title){
- this.elements += ',header';
- }
- },
-
- afterRender : function(){
- Ext.Tip.superclass.afterRender.call(this);
- if(this.closable){
- this.addTool({
- id: 'close',
- handler: this.hide,
- scope: this
- });
- }
- },
-
- showAt : function(xy){
- Ext.Tip.superclass.show.call(this);
- if(this.measureWidth !== false && (!this.initialConfig || typeof this.initialConfig.width != 'number')){
- var bw = this.body.getTextWidth();
- if(this.title){
- bw = Math.max(bw, this.header.child('span').getTextWidth(this.title));
- }
- bw += this.getFrameWidth() + (this.closable ? 20 : 0) + this.body.getPadding("lr");
- this.setWidth(bw.constrain(this.minWidth, this.maxWidth));
- }
- if(this.constrainPosition){
- xy = this.el.adjustForConstraints(xy);
- }
- this.setPagePosition(xy[0], xy[1]);
- },
-
- showBy : function(el, pos){
- if(!this.rendered){
- this.render(Ext.getBody());
- }
- this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign));
- },
- initDraggable : function(){
- this.dd = new Ext.Tip.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);
- this.header.addClass('x-tip-draggable');
- }
- });
- Ext.Tip.DD = function(tip, config){
- Ext.apply(this, config);
- this.tip = tip;
- Ext.Tip.DD.superclass.constructor.call(this, tip.el.id, 'WindowDD-'+tip.id);
- this.setHandleElId(tip.header.id);
- this.scroll = false;
- };
- Ext.extend(Ext.Tip.DD, Ext.dd.DD, {
- moveOnly:true,
- scroll:false,
- headerOffsets:[100, 25],
- startDrag : function(){
- this.tip.el.disableShadow();
- },
- endDrag : function(e){
- this.tip.el.enableShadow(true);
- }
- });
- Ext.ToolTip = Ext.extend(Ext.Tip, {
-
-
-
- showDelay: 500,
-
- hideDelay: 200,
-
- dismissDelay: 5000,
-
- mouseOffset: [15,18],
-
- trackMouse : false,
- constrainPosition: true,
-
- initComponent: function(){
- Ext.ToolTip.superclass.initComponent.call(this);
- this.lastActive = new Date();
- this.initTarget();
- },
-
- initTarget : function(){
- if(this.target){
- this.target = Ext.get(this.target);
- this.target.on('mouseover', this.onTargetOver, this);
- this.target.on('mouseout', this.onTargetOut, this);
- this.target.on('mousemove', this.onMouseMove, this);
- }
- },
-
- onMouseMove : function(e){
- this.targetXY = e.getXY();
- if(!this.hidden && this.trackMouse){
- this.setPagePosition(this.getTargetXY());
- }
- },
-
- getTargetXY : function(){
- return [this.targetXY[0]+this.mouseOffset[0], this.targetXY[1]+this.mouseOffset[1]];
- },
-
- onTargetOver : function(e){
- if(this.disabled || e.within(this.target.dom, true)){
- return;
- }
- this.clearTimer('hide');
- this.targetXY = e.getXY();
- this.delayShow();
- },
-
- delayShow : function(){
- if(this.hidden && !this.showTimer){
- if(this.lastActive.getElapsed() < this.quickShowInterval){
- this.show();
- }else{
- this.showTimer = this.show.defer(this.showDelay, this);
- }
- }else if(!this.hidden && this.autoHide !== false){
- this.show();
- }
- },
-
- onTargetOut : function(e){
- if(this.disabled || e.within(this.target.dom, true)){
- return;
- }
- this.clearTimer('show');
- if(this.autoHide !== false){
- this.delayHide();
- }
- },
-
- delayHide : function(){
- if(!this.hidden && !this.hideTimer){
- this.hideTimer = this.hide.defer(this.hideDelay, this);
- }
- },
-
- hide: function(){
- this.clearTimer('dismiss');
- this.lastActive = new Date();
- Ext.ToolTip.superclass.hide.call(this);
- },
-
- show : function(){
- this.showAt(this.getTargetXY());
- },
-
- showAt : function(xy){
- this.lastActive = new Date();
- this.clearTimers();
- Ext.ToolTip.superclass.showAt.call(this, xy);
- if(this.dismissDelay && this.autoHide !== false){
- this.dismissTimer = this.hide.defer(this.dismissDelay, this);
- }
- },
-
- clearTimer : function(name){
- name = name + 'Timer';
- clearTimeout(this[name]);
- delete this[name];
- },
-
- clearTimers : function(){
- this.clearTimer('show');
- this.clearTimer('dismiss');
- this.clearTimer('hide');
- },
-
- onShow : function(){
- Ext.ToolTip.superclass.onShow.call(this);
- Ext.getDoc().on('mousedown', this.onDocMouseDown, this);
- },
-
- onHide : function(){
- Ext.ToolTip.superclass.onHide.call(this);
- Ext.getDoc().un('mousedown', this.onDocMouseDown, this);
- },
-
- onDocMouseDown : function(e){
- if(this.autoHide !== false && !e.within(this.el.dom)){
- this.disable();
- this.enable.defer(100, this);
- }
- },
-
- onDisable : function(){
- this.clearTimers();
- this.hide();
- },
-
- adjustPosition : function(x, y){
-
- var ay = this.targetXY[1], h = this.getSize().height;
- if(this.constrainPosition && y <= ay && (y+h) >= ay){
- y = ay-h-5;
- }
- return {x : x, y: y};
- },
-
- onDestroy : function(){
- Ext.ToolTip.superclass.onDestroy.call(this);
- if(this.target){
- this.target.un('mouseover', this.onTargetOver, this);
- this.target.un('mouseout', this.onTargetOut, this);
- this.target.un('mousemove', this.onMouseMove, this);
- }
- }
- });
- Ext.QuickTip = Ext.extend(Ext.ToolTip, {
-
-
- interceptTitles : false,
-
- tagConfig : {
- namespace : "ext",
- attribute : "qtip",
- width : "qwidth",
- target : "target",
- title : "qtitle",
- hide : "hide",
- cls : "qclass",
- align : "qalign"
- },
-
- initComponent : function(){
- this.target = this.target || Ext.getDoc();
- this.targets = this.targets || {};
- Ext.QuickTip.superclass.initComponent.call(this);
- },
-
- register : function(config){
- var cs = Ext.isArray(config) ? config : arguments;
- for(var i = 0, len = cs.length; i < len; i++){
- var c = cs[i];
- var target = c.target;
- if(target){
- if(Ext.isArray(target)){
- for(var j = 0, jlen = target.length; j < jlen; j++){
- this.targets[Ext.id(target[j])] = c;
- }
- } else{
- this.targets[Ext.id(target)] = c;
- }
- }
- }
- },
-
- unregister : function(el){
- delete this.targets[Ext.id(el)];
- },
-
- onTargetOver : function(e){
- if(this.disabled){
- return;
- }
- this.targetXY = e.getXY();
- var t = e.getTarget();
- if(!t || t.nodeType !== 1 || t == document || t == document.body){
- return;
- }
- if(this.activeTarget && t == this.activeTarget.el){
- this.clearTimer('hide');
- this.show();
- return;
- }
- if(t && this.targets[t.id]){
- this.activeTarget = this.targets[t.id];
- this.activeTarget.el = t;
- this.delayShow();
- return;
- }
- var ttp, et = Ext.fly(t), cfg = this.tagConfig;
- var ns = cfg.namespace;
- if(this.interceptTitles && t.title){
- ttp = t.title;
- t.qtip = ttp;
- t.removeAttribute("title");
- e.preventDefault();
- } else{
- ttp = t.qtip || et.getAttributeNS(ns, cfg.attribute);
- }
- if(ttp){
- var autoHide = et.getAttributeNS(ns, cfg.hide);
- this.activeTarget = {
- el: t,
- text: ttp,
- width: et.getAttributeNS(ns, cfg.width),
- autoHide: autoHide != "user" && autoHide !== 'false',
- title: et.getAttributeNS(ns, cfg.title),
- cls: et.getAttributeNS(ns, cfg.cls),
- align: et.getAttributeNS(ns, cfg.align)
- };
- this.delayShow();
- }
- },
-
- onTargetOut : function(e){
- this.clearTimer('show');
- if(this.autoHide !== false){
- this.delayHide();
- }
- },
-
- showAt : function(xy){
- var t = this.activeTarget;
- if(t){
- if(!this.rendered){
- this.render(Ext.getBody());
- this.activeTarget = t;
- }
- if(t.width){
- this.setWidth(t.width);
- this.body.setWidth(this.adjustBodyWidth(t.width - this.getFrameWidth()));
- this.measureWidth = false;
- } else{
- this.measureWidth = true;
- }
- this.setTitle(t.title || '');
- this.body.update(t.text);
- this.autoHide = t.autoHide;
- this.dismissDelay = t.dismissDelay || this.dismissDelay;
- if(this.lastCls){
- this.el.removeClass(this.lastCls);
- delete this.lastCls;
- }
- if(t.cls){
- this.el.addClass(t.cls);
- this.lastCls = t.cls;
- }
- if(t.align){
- xy = this.el.getAlignToXY(t.el, t.align);
- this.constrainPosition = false;
- } else{
- this.constrainPosition = true;
- }
- }
- Ext.QuickTip.superclass.showAt.call(this, xy);
- },
-
- hide: function(){
- delete this.activeTarget;
- Ext.QuickTip.superclass.hide.call(this);
- }
- });
- Ext.QuickTips = function(){
- var tip, locks = [];
- return {
-
- init : function(){
- if(!tip){
- tip = new Ext.QuickTip({elements:'header,body'});
- }
- },
-
- enable : function(){
- if(tip){
- locks.pop();
- if(locks.length < 1){
- tip.enable();
- }
- }
- },
-
- disable : function(){
- if(tip){
- tip.disable();
- }
- locks.push(1);
- },
-
- isEnabled : function(){
- return tip && !tip.disabled;
- },
-
- getQuickTip : function(){
- return tip;
- },
-
- register : function(){
- tip.register.apply(tip, arguments);
- },
-
- unregister : function(){
- tip.unregister.apply(tip, arguments);
- },
-
- tips :function(){
- tip.register.apply(tip, arguments);
- }
- }
- }();
- Ext.tree.TreePanel = Ext.extend(Ext.Panel, {
- rootVisible : true,
- animate: Ext.enableFx,
- lines : true,
- enableDD : false,
- hlDrop : Ext.enableFx,
- pathSeparator: "/",
- initComponent : function(){
- Ext.tree.TreePanel.superclass.initComponent.call(this);
- if(!this.eventModel){
- this.eventModel = new Ext.tree.TreeEventModel(this);
- }
-
- this.nodeHash = {};
-
- if(this.root){
- this.setRootNode(this.root);
- }
- this.addEvents(
-
- "append",
-
- "remove",
-
- "movenode",
-
- "insert",
-
- "beforeappend",
-
- "beforeremove",
-
- "beforemovenode",
-
- "beforeinsert",
-
- "beforeload",
-
- "load",
-
- "textchange",
-
- "beforeexpandnode",
-
- "beforecollapsenode",
-
- "expandnode",
-
- "disabledchange",
-
- "collapsenode",
-
- "beforeclick",
-
- "click",
-
- "checkchange",
-
- "dblclick",
-
- "contextmenu",
-
- "beforechildrenrendered",
-
- "startdrag",
-
- "enddrag",
-
- "dragdrop",
-
- "beforenodedrop",
-
- "nodedrop",
-
- "nodedragover"
- );
- if(this.singleExpand){
- this.on("beforeexpandnode", this.restrictExpand, this);
- }
- },
-
- proxyNodeEvent : function(ename, a1, a2, a3, a4, a5, a6){
- if(ename == 'collapse' || ename == 'expand' || ename == 'beforecollapse' || ename == 'beforeexpand' || ename == 'move' || ename == 'beforemove'){
- ename = ename+'node';
- }
-
- return this.fireEvent(ename, a1, a2, a3, a4, a5, a6);
- },
-
- getRootNode : function(){
- return this.root;
- },
-
- setRootNode : function(node){
- this.root = node;
- node.ownerTree = this;
- node.isRoot = true;
- this.registerNode(node);
- if(!this.rootVisible){
- var uiP = node.attributes.uiProvider;
- node.ui = uiP ? new uiP(node) : new Ext.tree.RootTreeNodeUI(node);
- }
- return node;
- },
-
- getNodeById : function(id){
- return this.nodeHash[id];
- },
-
- registerNode : function(node){
- this.nodeHash[node.id] = node;
- },
-
- unregisterNode : function(node){
- delete this.nodeHash[node.id];
- },
-
- toString : function(){
- return "[Tree"+(this.id?" "+this.id:"")+"]";
- },
-
- restrictExpand : function(node){
- var p = node.parentNode;
- if(p){
- if(p.expandedChild && p.expandedChild.parentNode == p){
- p.expandedChild.collapse();
- }
- p.expandedChild = node;
- }
- },
-
- getChecked : function(a, startNode){
- startNode = startNode || this.root;
- var r = [];
- var f = function(){
- if(this.attributes.checked){
- r.push(!a ? this : (a == 'id' ? this.id : this.attributes[a]));
- }
- }
- startNode.cascade(f);
- return r;
- },
-
- getEl : function(){
- return this.el;
- },
-
- getLoader : function(){
- return this.loader;
- },
-
- expandAll : function(){
- this.root.expand(true);
- },
-
- collapseAll : function(){
- this.root.collapse(true);
- },
-
- getSelectionModel : function(){
- if(!this.selModel){
- this.selModel = new Ext.tree.DefaultSelectionModel();
- }
- return this.selModel;
- },
-
- expandPath : function(path, attr, callback){
- attr = attr || "id";
- var keys = path.split(this.pathSeparator);
- var curNode = this.root;
- if(curNode.attributes[attr] != keys[1]){
- if(callback){
- callback(false, null);
- }
- return;
- }
- var index = 1;
- var f = function(){
- if(++index == keys.length){
- if(callback){
- callback(true, curNode);
- }
- return;
- }
- var c = curNode.findChild(attr, keys[index]);
- if(!c){
- if(callback){
- callback(false, curNode);
- }
- return;
- }
- curNode = c;
- c.expand(false, false, f);
- };
- curNode.expand(false, false, f);
- },
-
- selectPath : function(path, attr, callback){
- attr = attr || "id";
- var keys = path.split(this.pathSeparator);
- var v = keys.pop();
- if(keys.length > 0){
- var f = function(success, node){
- if(success && node){
- var n = node.findChild(attr, v);
- if(n){
- n.select();
- if(callback){
- callback(true, n);
- }
- }else if(callback){
- callback(false, n);
- }
- }else{
- if(callback){
- callback(false, n);
- }
- }
- };
- this.expandPath(keys.join(this.pathSeparator), attr, f);
- }else{
- this.root.select();
- if(callback){
- callback(true, this.root);
- }
- }
- },
-
- getTreeEl : function(){
- return this.body;
- },
-
- onRender : function(ct, position){
- Ext.tree.TreePanel.superclass.onRender.call(this, ct, position);
- this.el.addClass('x-tree');
- this.innerCt = this.body.createChild({tag:"ul",
- cls:"x-tree-root-ct " +
- (this.useArrows ? 'x-tree-arrows' : this.lines ? "x-tree-lines" : "x-tree-no-lines")});
- },
-
- initEvents : function(){
- Ext.tree.TreePanel.superclass.initEvents.call(this);
- if(this.containerScroll){
- Ext.dd.ScrollManager.register(this.body);
- }
- if((this.enableDD || this.enableDrop) && !this.dropZone){
-
- this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || {
- ddGroup: this.ddGroup || "TreeDD", appendOnly: this.ddAppendOnly === true
- });
- }
- if((this.enableDD || this.enableDrag) && !this.dragZone){
-
- this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || {
- ddGroup: this.ddGroup || "TreeDD",
- scroll: this.ddScroll
- });
- }
- this.getSelectionModel().init(this);
- },
-
- afterRender : function(){
- Ext.tree.TreePanel.superclass.afterRender.call(this);
- this.root.render();
- if(!this.rootVisible){
- this.root.renderChildren();
- }
- },
- onDestroy : function(){
- if(this.rendered){
- this.body.removeAllListeners();
- Ext.dd.ScrollManager.unregister(this.body);
- if(this.dropZone){
- this.dropZone.unreg();
- }
- if(this.dragZone){
- this.dragZone.unreg();
- }
- }
- this.root.destroy();
- this.nodeHash = null;
- Ext.tree.TreePanel.superclass.onDestroy.call(this);
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- });
- Ext.reg('treepanel', Ext.tree.TreePanel);
- Ext.tree.TreeEventModel = function(tree){
- this.tree = tree;
- this.tree.on('render', this.initEvents, this);
- }
- Ext.tree.TreeEventModel.prototype = {
- initEvents : function(){
- var el = this.tree.getTreeEl();
- el.on('click', this.delegateClick, this);
- if(this.tree.trackMouseOver !== false){
- el.on('mouseover', this.delegateOver, this);
- el.on('mouseout', this.delegateOut, this);
- }
- el.on('dblclick', this.delegateDblClick, this);
- el.on('contextmenu', this.delegateContextMenu, this);
- },
- getNode : function(e){
- var t;
- if(t = e.getTarget('.x-tree-node-el', 10)){
- var id = Ext.fly(t, '_treeEvents').getAttributeNS('ext', 'tree-node-id');
- if(id){
- return this.tree.getNodeById(id);
- }
- }
- return null;
- },
- getNodeTarget : function(e){
- var t = e.getTarget('.x-tree-node-icon', 1);
- if(!t){
- t = e.getTarget('.x-tree-node-el', 6);
- }
- return t;
- },
- delegateOut : function(e, t){
- if(!this.beforeEvent(e)){
- return;
- }
- if(e.getTarget('.x-tree-ec-icon', 1)){
- var n = this.getNode(e);
- this.onIconOut(e, n);
- if(n == this.lastEcOver){
- delete this.lastEcOver;
- }
- }
- if((t = this.getNodeTarget(e)) && !e.within(t, true)){
- this.onNodeOut(e, this.getNode(e));
- }
- },
- delegateOver : function(e, t){
- if(!this.beforeEvent(e)){
- return;
- }
- if(this.lastEcOver){
- this.onIconOut(e, this.lastEcOver);
- delete this.lastEcOver;
- }
- if(e.getTarget('.x-tree-ec-icon', 1)){
- this.lastEcOver = this.getNode(e);
- this.onIconOver(e, this.lastEcOver);
- }
- if(t = this.getNodeTarget(e)){
- this.onNodeOver(e, this.getNode(e));
- }
- },
- delegateClick : function(e, t){
- if(!this.beforeEvent(e)){
- return;
- }
- if(e.getTarget('input[type=checkbox]', 1)){
- this.onCheckboxClick(e, this.getNode(e));
- }
- else if(e.getTarget('.x-tree-ec-icon', 1)){
- this.onIconClick(e, this.getNode(e));
- }
- else if(this.getNodeTarget(e)){
- this.onNodeClick(e, this.getNode(e));
- }
- },
- delegateDblClick : function(e, t){
- if(this.beforeEvent(e) && this.getNodeTarget(e)){
- this.onNodeDblClick(e, this.getNode(e));
- }
- },
- delegateContextMenu : function(e, t){
- if(this.beforeEvent(e) && this.getNodeTarget(e)){
- this.onNodeContextMenu(e, this.getNode(e));
- }
- },
- onNodeClick : function(e, node){
- node.ui.onClick(e);
- },
- onNodeOver : function(e, node){
- node.ui.onOver(e);
- },
- onNodeOut : function(e, node){
- node.ui.onOut(e);
- },
- onIconOver : function(e, node){
- node.ui.addClass('x-tree-ec-over');
- },
- onIconOut : function(e, node){
- node.ui.removeClass('x-tree-ec-over');
- },
- onIconClick : function(e, node){
- node.ui.ecClick(e);
- },
- onCheckboxClick : function(e, node){
- node.ui.onCheckChange(e);
- },
- onNodeDblClick : function(e, node){
- node.ui.onDblClick(e);
- },
- onNodeContextMenu : function(e, node){
- node.ui.onContextMenu(e);
- },
- beforeEvent : function(e){
- if(this.disabled){
- e.stopEvent();
- return false;
- }
- return true;
- },
- disable: function(){
- this.disabled = true;
- },
- enable: function(){
- this.disabled = false;
- }
- };
- Ext.tree.DefaultSelectionModel = function(config){
- this.selNode = null;
-
- this.addEvents(
-
- "selectionchange",
-
- "beforeselect"
- );
- Ext.apply(this, config);
- Ext.tree.DefaultSelectionModel.superclass.constructor.call(this);
- };
- Ext.extend(Ext.tree.DefaultSelectionModel, Ext.util.Observable, {
- init : function(tree){
- this.tree = tree;
- tree.getTreeEl().on("keydown", this.onKeyDown, this);
- tree.on("click", this.onNodeClick, this);
- },
-
- onNodeClick : function(node, e){
- this.select(node);
- },
-
-
- select : function(node){
- var last = this.selNode;
- if(last != node && this.fireEvent('beforeselect', this, node, last) !== false){
- if(last){
- last.ui.onSelectedChange(false);
- }
- this.selNode = node;
- node.ui.onSelectedChange(true);
- this.fireEvent("selectionchange", this, node, last);
- }
- return node;
- },
-
-
- unselect : function(node){
- if(this.selNode == node){
- this.clearSelections();
- }
- },
-
-
- clearSelections : function(){
- var n = this.selNode;
- if(n){
- n.ui.onSelectedChange(false);
- this.selNode = null;
- this.fireEvent("selectionchange", this, null);
- }
- return n;
- },
-
-
- getSelectedNode : function(){
- return this.selNode;
- },
-
-
- isSelected : function(node){
- return this.selNode == node;
- },
-
- selectPrevious : function(){
- var s = this.selNode || this.lastSelNode;
- if(!s){
- return null;
- }
- var ps = s.previousSibling;
- if(ps){
- if(!ps.isExpanded() || ps.childNodes.length < 1){
- return this.select(ps);
- } else{
- var lc = ps.lastChild;
- while(lc && lc.isExpanded() && lc.childNodes.length > 0){
- lc = lc.lastChild;
- }
- return this.select(lc);
- }
- } else if(s.parentNode && (this.tree.rootVisible || !s.parentNode.isRoot)){
- return this.select(s.parentNode);
- }
- return null;
- },
-
- selectNext : function(){
- var s = this.selNode || this.lastSelNode;
- if(!s){
- return null;
- }
- if(s.firstChild && s.isExpanded()){
- return this.select(s.firstChild);
- }else if(s.nextSibling){
- return this.select(s.nextSibling);
- }else if(s.parentNode){
- var newS = null;
- s.parentNode.bubble(function(){
- if(this.nextSibling){
- newS = this.getOwnerTree().selModel.select(this.nextSibling);
- return false;
- }
- });
- return newS;
- }
- return null;
- },
- onKeyDown : function(e){
- var s = this.selNode || this.lastSelNode;
-
- var sm = this;
- if(!s){
- return;
- }
- var k = e.getKey();
- switch(k){
- case e.DOWN:
- e.stopEvent();
- this.selectNext();
- break;
- case e.UP:
- e.stopEvent();
- this.selectPrevious();
- break;
- case e.RIGHT:
- e.preventDefault();
- if(s.hasChildNodes()){
- if(!s.isExpanded()){
- s.expand();
- }else if(s.firstChild){
- this.select(s.firstChild, e);
- }
- }
- break;
- case e.LEFT:
- e.preventDefault();
- if(s.hasChildNodes() && s.isExpanded()){
- s.collapse();
- }else if(s.parentNode && (this.tree.rootVisible || s.parentNode != this.tree.getRootNode())){
- this.select(s.parentNode, e);
- }
- break;
- };
- }
- });
- Ext.tree.MultiSelectionModel = function(config){
- this.selNodes = [];
- this.selMap = {};
- this.addEvents(
-
- "selectionchange"
- );
- Ext.apply(this, config);
- Ext.tree.MultiSelectionModel.superclass.constructor.call(this);
- };
- Ext.extend(Ext.tree.MultiSelectionModel, Ext.util.Observable, {
- init : function(tree){
- this.tree = tree;
- tree.getTreeEl().on("keydown", this.onKeyDown, this);
- tree.on("click", this.onNodeClick, this);
- },
-
- onNodeClick : function(node, e){
- this.select(node, e, e.ctrlKey);
- },
-
-
- select : function(node, e, keepExisting){
- if(keepExisting !== true){
- this.clearSelections(true);
- }
- if(this.isSelected(node)){
- this.lastSelNode = node;
- return node;
- }
- this.selNodes.push(node);
- this.selMap[node.id] = node;
- this.lastSelNode = node;
- node.ui.onSelectedChange(true);
- this.fireEvent("selectionchange", this, this.selNodes);
- return node;
- },
-
-
- unselect : function(node){
- if(this.selMap[node.id]){
- node.ui.onSelectedChange(false);
- var sn = this.selNodes;
- var index = sn.indexOf(node);
- if(index != -1){
- this.selNodes.splice(index, 1);
- }
- delete this.selMap[node.id];
- this.fireEvent("selectionchange", this, this.selNodes);
- }
- },
-
-
- clearSelections : function(suppressEvent){
- var sn = this.selNodes;
- if(sn.length > 0){
- for(var i = 0, len = sn.length; i < len; i++){
- sn[i].ui.onSelectedChange(false);
- }
- this.selNodes = [];
- this.selMap = {};
- if(suppressEvent !== true){
- this.fireEvent("selectionchange", this, this.selNodes);
- }
- }
- },
-
-
- isSelected : function(node){
- return this.selMap[node.id] ? true : false;
- },
-
-
- getSelectedNodes : function(){
- return this.selNodes;
- },
- onKeyDown : Ext.tree.DefaultSelectionModel.prototype.onKeyDown,
- selectNext : Ext.tree.DefaultSelectionModel.prototype.selectNext,
- selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious
- });
- Ext.tree.TreeNode = function(attributes){
- attributes = attributes || {};
- if(typeof attributes == "string"){
- attributes = {text: attributes};
- }
- this.childrenRendered = false;
- this.rendered = false;
- Ext.tree.TreeNode.superclass.constructor.call(this, attributes);
- this.expanded = attributes.expanded === true;
- this.isTarget = attributes.isTarget !== false;
- this.draggable = attributes.draggable !== false && attributes.allowDrag !== false;
- this.allowChildren = attributes.allowChildren !== false && attributes.allowDrop !== false;
-
- this.text = attributes.text;
-
- this.disabled = attributes.disabled === true;
- this.addEvents(
-
- "textchange",
-
- "beforeexpand",
-
- "beforecollapse",
-
- "expand",
-
- "disabledchange",
-
- "collapse",
-
- "beforeclick",
-
- "click",
-
- "checkchange",
-
- "dblclick",
-
- "contextmenu",
-
- "beforechildrenrendered"
- );
- var uiClass = this.attributes.uiProvider || this.defaultUI || Ext.tree.TreeNodeUI;
-
- this.ui = new uiClass(this);
- };
- Ext.extend(Ext.tree.TreeNode, Ext.data.Node, {
- preventHScroll: true,
-
- isExpanded : function(){
- return this.expanded;
- },
- getUI : function(){
- return this.ui;
- },
-
- setFirstChild : function(node){
- var of = this.firstChild;
- Ext.tree.TreeNode.superclass.setFirstChild.call(this, node);
- if(this.childrenRendered && of && node != of){
- of.renderIndent(true, true);
- }
- if(this.rendered){
- this.renderIndent(true, true);
- }
- },
-
- setLastChild : function(node){
- var ol = this.lastChild;
- Ext.tree.TreeNode.superclass.setLastChild.call(this, node);
- if(this.childrenRendered && ol && node != ol){
- ol.renderIndent(true, true);
- }
- if(this.rendered){
- this.renderIndent(true, true);
- }
- },
-
-
- appendChild : function(){
- var node = Ext.tree.TreeNode.superclass.appendChild.apply(this, arguments);
- if(node && this.childrenRendered){
- node.render();
- }
- this.ui.updateExpandIcon();
- return node;
- },
-
- removeChild : function(node){
- this.ownerTree.getSelectionModel().unselect(node);
- Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments);
-
- if(this.childrenRendered){
- node.ui.remove();
- }
- if(this.childNodes.length < 1){
- this.collapse(false, false);
- }else{
- this.ui.updateExpandIcon();
- }
- if(!this.firstChild && !this.isHiddenRoot()) {
- this.childrenRendered = false;
- }
- return node;
- },
-
- insertBefore : function(node, refNode){
- var newNode = Ext.tree.TreeNode.superclass.insertBefore.apply(this, arguments);
- if(newNode && refNode && this.childrenRendered){
- node.render();
- }
- this.ui.updateExpandIcon();
- return newNode;
- },
-
- setText : function(text){
- var oldText = this.text;
- this.text = text;
- this.attributes.text = text;
- if(this.rendered){
- this.ui.onTextChange(this, text, oldText);
- }
- this.fireEvent("textchange", this, text, oldText);
- },
-
- select : function(){
- this.getOwnerTree().getSelectionModel().select(this);
- },
-
- unselect : function(){
- this.getOwnerTree().getSelectionModel().unselect(this);
- },
-
- isSelected : function(){
- return this.getOwnerTree().getSelectionModel().isSelected(this);
- },
-
- expand : function(deep, anim, callback){
- if(!this.expanded){
- if(this.fireEvent("beforeexpand", this, deep, anim) === false){
- return;
- }
- if(!this.childrenRendered){
- this.renderChildren();
- }
- this.expanded = true;
- if(!this.isHiddenRoot() && (this.getOwnerTree().animate && anim !== false) || anim){
- this.ui.animExpand(function(){
- this.fireEvent("expand", this);
- if(typeof callback == "function"){
- callback(this);
- }
- if(deep === true){
- this.expandChildNodes(true);
- }
- }.createDelegate(this));
- return;
- }else{
- this.ui.expand();
- this.fireEvent("expand", this);
- if(typeof callback == "function"){
- callback(this);
- }
- }
- }else{
- if(typeof callback == "function"){
- callback(this);
- }
- }
- if(deep === true){
- this.expandChildNodes(true);
- }
- },
- isHiddenRoot : function(){
- return this.isRoot && !this.getOwnerTree().rootVisible;
- },
-
- collapse : function(deep, anim){
- if(this.expanded && !this.isHiddenRoot()){
- if(this.fireEvent("beforecollapse", this, deep, anim) === false){
- return;
- }
- this.expanded = false;
- if((this.getOwnerTree().animate && anim !== false) || anim){
- this.ui.animCollapse(function(){
- this.fireEvent("collapse", this);
- if(deep === true){
- this.collapseChildNodes(true);
- }
- }.createDelegate(this));
- return;
- }else{
- this.ui.collapse();
- this.fireEvent("collapse", this);
- }
- }
- if(deep === true){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- cs[i].collapse(true, false);
- }
- }
- },
-
- delayedExpand : function(delay){
- if(!this.expandProcId){
- this.expandProcId = this.expand.defer(delay, this);
- }
- },
-
- cancelExpand : function(){
- if(this.expandProcId){
- clearTimeout(this.expandProcId);
- }
- this.expandProcId = false;
- },
-
- toggle : function(){
- if(this.expanded){
- this.collapse();
- }else{
- this.expand();
- }
- },
-
- ensureVisible : function(callback){
- var tree = this.getOwnerTree();
- tree.expandPath(this.parentNode.getPath(), false, function(){
- var node = tree.getNodeById(this.id);
- tree.getTreeEl().scrollChildIntoView(node.ui.anchor);
- Ext.callback(callback);
- }.createDelegate(this));
- },
-
- expandChildNodes : function(deep){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- cs[i].expand(deep);
- }
- },
-
- collapseChildNodes : function(deep){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++) {
- cs[i].collapse(deep);
- }
- },
-
- disable : function(){
- this.disabled = true;
- this.unselect();
- if(this.rendered && this.ui.onDisableChange){
- this.ui.onDisableChange(this, true);
- }
- this.fireEvent("disabledchange", this, true);
- },
-
- enable : function(){
- this.disabled = false;
- if(this.rendered && this.ui.onDisableChange){
- this.ui.onDisableChange(this, false);
- }
- this.fireEvent("disabledchange", this, false);
- },
-
- renderChildren : function(suppressEvent){
- if(suppressEvent !== false){
- this.fireEvent("beforechildrenrendered", this);
- }
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++){
- cs[i].render(true);
- }
- this.childrenRendered = true;
- },
-
- sort : function(fn, scope){
- Ext.tree.TreeNode.superclass.sort.apply(this, arguments);
- if(this.childrenRendered){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++){
- cs[i].render(true);
- }
- }
- },
-
- render : function(bulkRender){
- this.ui.render(bulkRender);
- if(!this.rendered){
-
- this.getOwnerTree().registerNode(this);
- this.rendered = true;
- if(this.expanded){
- this.expanded = false;
- this.expand(false, false);
- }
- }
- },
-
- renderIndent : function(deep, refresh){
- if(refresh){
- this.ui.childIndent = null;
- }
- this.ui.renderIndent();
- if(deep === true && this.childrenRendered){
- var cs = this.childNodes;
- for(var i = 0, len = cs.length; i < len; i++){
- cs[i].renderIndent(true, refresh);
- }
- }
- },
- beginUpdate : function(){
- this.childrenRendered = false;
- },
- endUpdate : function(){
- if(this.expanded){
- this.renderChildren();
- }
- },
- destroy : function(){
- for(var i = 0,l = this.childNodes.length; i < l; i++){
- this.childNodes[i].destroy();
- }
- this.childNodes = null;
- if(this.ui.destroy){
- this.ui.destroy();
- }
- }
- });
- Ext.tree.AsyncTreeNode = function(config){
- this.loaded = false;
- this.loading = false;
- Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments);
-
- this.addEvents('beforeload', 'load');
-
-
- };
- Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, {
- expand : function(deep, anim, callback){
- if(this.loading){
- var timer;
- var f = function(){
- if(!this.loading){
- clearInterval(timer);
- this.expand(deep, anim, callback);
- }
- }.createDelegate(this);
- timer = setInterval(f, 200);
- return;
- }
- if(!this.loaded){
- if(this.fireEvent("beforeload", this) === false){
- return;
- }
- this.loading = true;
- this.ui.beforeLoad(this);
- var loader = this.loader || this.attributes.loader || this.getOwnerTree().getLoader();
- if(loader){
- loader.load(this, this.loadComplete.createDelegate(this, [deep, anim, callback]));
- return;
- }
- }
- Ext.tree.AsyncTreeNode.superclass.expand.call(this, deep, anim, callback);
- },
-
-
- isLoading : function(){
- return this.loading;
- },
-
- loadComplete : function(deep, anim, callback){
- this.loading = false;
- this.loaded = true;
- this.ui.afterLoad(this);
- this.fireEvent("load", this);
- this.expand(deep, anim, callback);
- },
-
-
- isLoaded : function(){
- return this.loaded;
- },
-
- hasChildNodes : function(){
- if(!this.isLeaf() && !this.loaded){
- return true;
- }else{
- return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this);
- }
- },
-
- reload : function(callback){
- this.collapse(false, false);
- while(this.firstChild){
- this.removeChild(this.firstChild);
- }
- this.childrenRendered = false;
- this.loaded = false;
- if(this.isHiddenRoot()){
- this.expanded = false;
- }
- this.expand(false, false, callback);
- }
- });
- Ext.tree.TreeNodeUI = function(node){
- this.node = node;
- this.rendered = false;
- this.animating = false;
- this.wasLeaf = true;
- this.ecc = 'x-tree-ec-icon x-tree-elbow';
- this.emptyIcon = Ext.BLANK_IMAGE_URL;
- };
- Ext.tree.TreeNodeUI.prototype = {
-
- removeChild : function(node){
- if(this.rendered){
- this.ctNode.removeChild(node.ui.getEl());
- }
- },
-
- beforeLoad : function(){
- this.addClass("x-tree-node-loading");
- },
-
- afterLoad : function(){
- this.removeClass("x-tree-node-loading");
- },
-
- onTextChange : function(node, text, oldText){
- if(this.rendered){
- this.textNode.innerHTML = text;
- }
- },
-
- onDisableChange : function(node, state){
- this.disabled = state;
- if (this.checkbox) {
- this.checkbox.disabled = state;
- }
- if(state){
- this.addClass("x-tree-node-disabled");
- }else{
- this.removeClass("x-tree-node-disabled");
- }
- },
-
- onSelectedChange : function(state){
- if(state){
- this.focus();
- this.addClass("x-tree-selected");
- }else{
-
- this.removeClass("x-tree-selected");
- }
- },
-
- onMove : function(tree, node, oldParent, newParent, index, refNode){
- this.childIndent = null;
- if(this.rendered){
- var targetNode = newParent.ui.getContainer();
- if(!targetNode){
- this.holder = document.createElement("div");
- this.holder.appendChild(this.wrap);
- return;
- }
- var insertBefore = refNode ? refNode.ui.getEl() : null;
- if(insertBefore){
- targetNode.insertBefore(this.wrap, insertBefore);
- }else{
- targetNode.appendChild(this.wrap);
- }
- this.node.renderIndent(true);
- }
- },
- addClass : function(cls){
- if(this.elNode){
- Ext.fly(this.elNode).addClass(cls);
- }
- },
- removeClass : function(cls){
- if(this.elNode){
- Ext.fly(this.elNode).removeClass(cls);
- }
- },
-
- remove : function(){
- if(this.rendered){
- this.holder = document.createElement("div");
- this.holder.appendChild(this.wrap);
- }
- },
-
- fireEvent : function(){
- return this.node.fireEvent.apply(this.node, arguments);
- },
-
- initEvents : function(){
- this.node.on("move", this.onMove, this);
- if(this.node.disabled){
- this.addClass("x-tree-node-disabled");
- if (this.checkbox) {
- this.checkbox.disabled = true;
- }
- }
- if(this.node.hidden){
- this.hide();
- }
- var ot = this.node.getOwnerTree();
- var dd = ot.enableDD || ot.enableDrag || ot.enableDrop;
- if(dd && (!this.node.isRoot || ot.rootVisible)){
- Ext.dd.Registry.register(this.elNode, {
- node: this.node,
- handles: this.getDDHandles(),
- isHandle: false
- });
- }
- },
-
- getDDHandles : function(){
- return [this.iconNode, this.textNode, this.elNode];
- },
- hide : function(){
- this.node.hidden = true;
- if(this.wrap){
- this.wrap.style.display = "none";
- }
- },
- show : function(){
- this.node.hidden = false;
- if(this.wrap){
- this.wrap.style.display = "";
- }
- },
-
- onContextMenu : function(e){
- if (this.node.hasListener("contextmenu") || this.node.getOwnerTree().hasListener("contextmenu")) {
- e.preventDefault();
- this.focus();
- this.fireEvent("contextmenu", this.node, e);
- }
- },
-
- onClick : function(e){
- if(this.dropping){
- e.stopEvent();
- return;
- }
- if(this.fireEvent("beforeclick", this.node, e) !== false){
- var a = e.getTarget('a');
- if(!this.disabled && this.node.attributes.href && a){
- this.fireEvent("click", this.node, e);
- return;
- }else if(a && e.ctrlKey){
- e.stopEvent();
- }
- e.preventDefault();
- if(this.disabled){
- return;
- }
- if(this.node.attributes.singleClickExpand && !this.animating && this.node.hasChildNodes()){
- this.node.toggle();
- }
- this.fireEvent("click", this.node, e);
- }else{
- e.stopEvent();
- }
- },
-
- onDblClick : function(e){
- e.preventDefault();
- if(this.disabled){
- return;
- }
- if(this.checkbox){
- this.toggleCheck();
- }
- if(!this.animating && this.node.hasChildNodes()){
- this.node.toggle();
- }
- this.fireEvent("dblclick", this.node, e);
- },
- onOver : function(e){
- this.addClass('x-tree-node-over');
- },
- onOut : function(e){
- this.removeClass('x-tree-node-over');
- },
-
- onCheckChange : function(){
- var checked = this.checkbox.checked;
- this.node.attributes.checked = checked;
- this.fireEvent('checkchange', this.node, checked);
- },
-
- ecClick : function(e){
- if(!this.animating && (this.node.hasChildNodes() || this.node.attributes.expandable)){
- this.node.toggle();
- }
- },
-
- startDrop : function(){
- this.dropping = true;
- },
-
-
- endDrop : function(){
- setTimeout(function(){
- this.dropping = false;
- }.createDelegate(this), 50);
- },
-
- expand : function(){
- this.updateExpandIcon();
- this.ctNode.style.display = "";
- },
-
- focus : function(){
- if(!this.node.preventHScroll){
- try{this.anchor.focus();
- }catch(e){}
- }else if(!Ext.isIE){
- try{
- var noscroll = this.node.getOwnerTree().getTreeEl().dom;
- var l = noscroll.scrollLeft;
- this.anchor.focus();
- noscroll.scrollLeft = l;
- }catch(e){}
- }
- },
- toggleCheck : function(value){
- var cb = this.checkbox;
- if(cb){
- cb.checked = (value === undefined ? !cb.checked : value);
- }
- },
-
- blur : function(){
- try{
- this.anchor.blur();
- }catch(e){}
- },
-
- animExpand : function(callback){
- var ct = Ext.get(this.ctNode);
- ct.stopFx();
- if(!this.node.hasChildNodes()){
- this.updateExpandIcon();
- this.ctNode.style.display = "";
- Ext.callback(callback);
- return;
- }
- this.animating = true;
- this.updateExpandIcon();
-
- ct.slideIn('t', {
- callback : function(){
- this.animating = false;
- Ext.callback(callback);
- },
- scope: this,
- duration: this.node.ownerTree.duration || .25
- });
- },
-
- highlight : function(){
- var tree = this.node.getOwnerTree();
- Ext.fly(this.wrap).highlight(
- tree.hlColor || "C3DAF9",
- {endColor: tree.hlBaseColor}
- );
- },
-
- collapse : function(){
- this.updateExpandIcon();
- this.ctNode.style.display = "none";
- },
-
- animCollapse : function(callback){
- var ct = Ext.get(this.ctNode);
- ct.enableDisplayMode('block');
- ct.stopFx();
- this.animating = true;
- this.updateExpandIcon();
- ct.slideOut('t', {
- callback : function(){
- this.animating = false;
- Ext.callback(callback);
- },
- scope: this,
- duration: this.node.ownerTree.duration || .25
- });
- },
-
- getContainer : function(){
- return this.ctNode;
- },
-
- getEl : function(){
- return this.wrap;
- },
-
- appendDDGhost : function(ghostNode){
- ghostNode.appendChild(this.elNode.cloneNode(true));
- },
-
- getDDRepairXY : function(){
- return Ext.lib.Dom.getXY(this.iconNode);
- },
-
- onRender : function(){
- this.render();
- },
-
- render : function(bulkRender){
- var n = this.node, a = n.attributes;
- var targetNode = n.parentNode ?
- n.parentNode.ui.getContainer() : n.ownerTree.innerCt.dom;
-
- if(!this.rendered){
- this.rendered = true;
- this.renderElements(n, a, targetNode, bulkRender);
- if(a.qtip){
- if(this.textNode.setAttributeNS){
- this.textNode.setAttributeNS("ext", "qtip", a.qtip);
- if(a.qtipTitle){
- this.textNode.setAttributeNS("ext", "qtitle", a.qtipTitle);
- }
- }else{
- this.textNode.setAttribute("ext:qtip", a.qtip);
- if(a.qtipTitle){
- this.textNode.setAttribute("ext:qtitle", a.qtipTitle);
- }
- }
- }else if(a.qtipCfg){
- a.qtipCfg.target = Ext.id(this.textNode);
- Ext.QuickTips.register(a.qtipCfg);
- }
- this.initEvents();
- if(!this.node.expanded){
- this.updateExpandIcon(true);
- }
- }else{
- if(bulkRender === true) {
- targetNode.appendChild(this.wrap);
- }
- }
- },
-
- renderElements : function(n, a, targetNode, bulkRender){
-
- this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';
- var cb = typeof a.checked == 'boolean';
- var href = a.href ? a.href : Ext.isGecko ? "" : "#";
- var buf = ['<li class="x-tree-node"><div tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" unselectable="on">',
- '<span class="x-tree-node-indent">',this.indentMarkup,"</span>",
- '<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" />',
- '<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on" />',
- cb ? ('<input class="x-tree-node-cb" type="checkbox" ' + (a.checked ? 'checked="checked" />' : '/>')) : '',
- '<a hidefocus="on" class="x-tree-node-anchor" href="',href,'" tabIndex="1" ',
- a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '><span unselectable="on">',n.text,"</span></a></div>",
- '<ul class="x-tree-node-ct" style="display:none;"></ul>',
- "</li>"].join('');
- var nel;
- if(bulkRender !== true && n.nextSibling && (nel = n.nextSibling.ui.getEl())){
- this.wrap = Ext.DomHelper.insertHtml("beforeBegin", nel, buf);
- }else{
- this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf);
- }
-
- this.elNode = this.wrap.childNodes[0];
- this.ctNode = this.wrap.childNodes[1];
- var cs = this.elNode.childNodes;
- this.indentNode = cs[0];
- this.ecNode = cs[1];
- this.iconNode = cs[2];
- var index = 3;
- if(cb){
- this.checkbox = cs[3];
- index++;
- }
- this.anchor = cs[index];
- this.textNode = cs[index].firstChild;
- },
- getAnchor : function(){
- return this.anchor;
- },
-
- getTextEl : function(){
- return this.textNode;
- },
-
- getIconEl : function(){
- return this.iconNode;
- },
- isChecked : function(){
- return this.checkbox ? this.checkbox.checked : false;
- },
-
- updateExpandIcon : function(){
- if(this.rendered){
- var n = this.node, c1, c2;
- var cls = n.isLast() ? "x-tree-elbow-end" : "x-tree-elbow";
- var hasChild = n.hasChildNodes();
- if(hasChild || n.attributes.expandable){
- if(n.expanded){
- cls += "-minus";
- c1 = "x-tree-node-collapsed";
- c2 = "x-tree-node-expanded";
- }else{
- cls += "-plus";
- c1 = "x-tree-node-expanded";
- c2 = "x-tree-node-collapsed";
- }
- if(this.wasLeaf){
- this.removeClass("x-tree-node-leaf");
- this.wasLeaf = false;
- }
- if(this.c1 != c1 || this.c2 != c2){
- Ext.fly(this.elNode).replaceClass(c1, c2);
- this.c1 = c1; this.c2 = c2;
- }
- }else{
- if(!this.wasLeaf){
- Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-leaf");
- delete this.c1;
- delete this.c2;
- this.wasLeaf = true;
- }
- }
- var ecc = "x-tree-ec-icon "+cls;
- if(this.ecc != ecc){
- this.ecNode.className = ecc;
- this.ecc = ecc;
- }
- }
- },
-
- getChildIndent : function(){
- if(!this.childIndent){
- var buf = [];
- var p = this.node;
- while(p){
- if(!p.isRoot || (p.isRoot && p.ownerTree.rootVisible)){
- if(!p.isLast()) {
- buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-elbow-line" />');
- } else {
- buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-icon" />');
- }
- }
- p = p.parentNode;
- }
- this.childIndent = buf.join("");
- }
- return this.childIndent;
- },
-
- renderIndent : function(){
- if(this.rendered){
- var indent = "";
- var p = this.node.parentNode;
- if(p){
- indent = p.ui.getChildIndent();
- }
- if(this.indentMarkup != indent){
- this.indentNode.innerHTML = indent;
- this.indentMarkup = indent;
- }
- this.updateExpandIcon();
- }
- },
- destroy : function(){
- if(this.elNode){
- Ext.dd.Registry.unregister(this.elNode.id);
- }
- delete this.elNode;
- delete this.ctNode;
- delete this.indentNode;
- delete this.ecNode;
- delete this.iconNode;
- delete this.checkbox;
- delete this.anchor;
- delete this.textNode;
- Ext.removeNode(this.ctNode);
- }
- };
- Ext.tree.RootTreeNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
-
- render : function(){
- if(!this.rendered){
- var targetNode = this.node.ownerTree.innerCt.dom;
- this.node.expanded = true;
- targetNode.innerHTML = '<div class="x-tree-root-node"></div>';
- this.wrap = this.ctNode = targetNode.firstChild;
- }
- },
- collapse : Ext.emptyFn,
- expand : Ext.emptyFn
- });
- Ext.tree.TreeLoader = function(config){
- this.baseParams = {};
- this.requestMethod = "POST";
- Ext.apply(this, config);
- this.addEvents(
-
- "beforeload",
-
- "load",
-
- "loadexception"
- );
- Ext.tree.TreeLoader.superclass.constructor.call(this);
- };
- Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {
-
-
-
-
-
-
-
- uiProviders : {},
-
- clearOnLoad : true,
-
- load : function(node, callback){
- if(this.clearOnLoad){
- while(node.firstChild){
- node.removeChild(node.firstChild);
- }
- }
- if(this.doPreload(node)){
- if(typeof callback == "function"){
- callback();
- }
- }else if(this.dataUrl||this.url){
- this.requestData(node, callback);
- }
- },
- doPreload : function(node){
- if(node.attributes.children){
- if(node.childNodes.length < 1){
- var cs = node.attributes.children;
- node.beginUpdate();
- for(var i = 0, len = cs.length; i < len; i++){
- var cn = node.appendChild(this.createNode(cs[i]));
- if(this.preloadChildren){
- this.doPreload(cn);
- }
- }
- node.endUpdate();
- }
- return true;
- }else {
- return false;
- }
- },
- getParams: function(node){
- var buf = [], bp = this.baseParams;
- for(var key in bp){
- if(typeof bp[key] != "function"){
- buf.push(encodeURIComponent(key), "=", encodeURIComponent(bp[key]), "&");
- }
- }
- buf.push("node=", encodeURIComponent(node.id));
- return buf.join("");
- },
- requestData : function(node, callback){
- if(this.fireEvent("beforeload", this, node, callback) !== false){
- this.transId = Ext.Ajax.request({
- method:this.requestMethod,
- url: this.dataUrl||this.url,
- success: this.handleResponse,
- failure: this.handleFailure,
- scope: this,
- argument: {callback: callback, node: node},
- params: this.getParams(node)
- });
- }else{
-
-
- if(typeof callback == "function"){
- callback();
- }
- }
- },
- isLoading : function(){
- return this.transId ? true : false;
- },
- abort : function(){
- if(this.isLoading()){
- Ext.Ajax.abort(this.transId);
- }
- },
-
- createNode : function(attr){
-
- if(this.baseAttrs){
- Ext.applyIf(attr, this.baseAttrs);
- }
- if(this.applyLoader !== false){
- attr.loader = this;
- }
- if(typeof attr.uiProvider == 'string'){
- attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
- }
- return(attr.leaf ?
- new Ext.tree.TreeNode(attr) :
- new Ext.tree.AsyncTreeNode(attr));
- },
- processResponse : function(response, node, callback){
- var json = response.responseText;
- try {
- var o = eval("("+json+")");
- node.beginUpdate();
- for(var i = 0, len = o.length; i < len; i++){
- var n = this.createNode(o[i]);
- if(n){
- node.appendChild(n);
- }
- }
- node.endUpdate();
- if(typeof callback == "function"){
- callback(this, node);
- }
- }catch(e){
- this.handleFailure(response);
- }
- },
- handleResponse : function(response){
- this.transId = false;
- var a = response.argument;
- this.processResponse(response, a.node, a.callback);
- this.fireEvent("load", this, a.node, response);
- },
- handleFailure : function(response){
- this.transId = false;
- var a = response.argument;
- this.fireEvent("loadexception", this, a.node, response);
- if(typeof a.callback == "function"){
- a.callback(this, a.node);
- }
- }
- });
- Ext.tree.TreeFilter = function(tree, config){
- this.tree = tree;
- this.filtered = {};
- Ext.apply(this, config);
- };
- Ext.tree.TreeFilter.prototype = {
- clearBlank:false,
- reverse:false,
- autoClear:false,
- remove:false,
-
- filter : function(value, attr, startNode){
- attr = attr || "text";
- var f;
- if(typeof value == "string"){
- var vlen = value.length;
-
- if(vlen == 0 && this.clearBlank){
- this.clear();
- return;
- }
- value = value.toLowerCase();
- f = function(n){
- return n.attributes[attr].substr(0, vlen).toLowerCase() == value;
- };
- }else if(value.exec){
- f = function(n){
- return value.test(n.attributes[attr]);
- };
- }else{
- throw 'Illegal filter type, must be string or regex';
- }
- this.filterBy(f, null, startNode);
- },
-
-
- filterBy : function(fn, scope, startNode){
- startNode = startNode || this.tree.root;
- if(this.autoClear){
- this.clear();
- }
- var af = this.filtered, rv = this.reverse;
- var f = function(n){
- if(n == startNode){
- return true;
- }
- if(af[n.id]){
- return false;
- }
- var m = fn.call(scope || n, n);
- if(!m || rv){
- af[n.id] = n;
- n.ui.hide();
- return false;
- }
- return true;
- };
- startNode.cascade(f);
- if(this.remove){
- for(var id in af){
- if(typeof id != "function"){
- var n = af[id];
- if(n && n.parentNode){
- n.parentNode.removeChild(n);
- }
- }
- }
- }
- },
-
-
- clear : function(){
- var t = this.tree;
- var af = this.filtered;
- for(var id in af){
- if(typeof id != "function"){
- var n = af[id];
- if(n){
- n.ui.show();
- }
- }
- }
- this.filtered = {};
- }
- };
- Ext.tree.TreeSorter = function(tree, config){
- Ext.apply(this, config);
- tree.on("beforechildrenrendered", this.doSort, this);
- tree.on("append", this.updateSort, this);
- tree.on("insert", this.updateSort, this);
- tree.on("textchange", this.updateSortParent, this);
-
- var dsc = this.dir && this.dir.toLowerCase() == "desc";
- var p = this.property || "text";
- var sortType = this.sortType;
- var fs = this.folderSort;
- var cs = this.caseSensitive === true;
- var leafAttr = this.leafAttr || 'leaf';
- this.sortFn = function(n1, n2){
- if(fs){
- if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
- return 1;
- }
- if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
- return -1;
- }
- }
- var v1 = sortType ? sortType(n1) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
- var v2 = sortType ? sortType(n2) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
- if(v1 < v2){
- return dsc ? +1 : -1;
- }else if(v1 > v2){
- return dsc ? -1 : +1;
- }else{
- return 0;
- }
- };
- };
- Ext.tree.TreeSorter.prototype = {
- doSort : function(node){
- node.sort(this.sortFn);
- },
-
- compareNodes : function(n1, n2){
- return (n1.text.toUpperCase() > n2.text.toUpperCase() ? 1 : -1);
- },
-
- updateSort : function(tree, node){
- if(node.childrenRendered){
- this.doSort.defer(1, this, [node]);
- }
- },
-
- updateSortParent : function(node){
- var p = node.parentNode;
- if(p && p.childrenRendered){
- this.doSort.defer(1, this, [p]);
- }
- }
- };
- if(Ext.dd.DropZone){
-
- Ext.tree.TreeDropZone = function(tree, config){
-
- this.allowParentInsert = false;
-
- this.allowContainerDrop = false;
-
- this.appendOnly = false;
- Ext.tree.TreeDropZone.superclass.constructor.call(this, tree.innerCt, config);
-
- this.tree = tree;
-
- this.dragOverData = {};
-
- this.lastInsertClass = "x-tree-no-status";
- };
- Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, {
-
- ddGroup : "TreeDD",
-
- expandDelay : 1000,
-
- expandNode : function(node){
- if(node.hasChildNodes() && !node.isExpanded()){
- node.expand(false, null, this.triggerCacheRefresh.createDelegate(this));
- }
- },
-
- queueExpand : function(node){
- this.expandProcId = this.expandNode.defer(this.expandDelay, this, [node]);
- },
-
- cancelExpand : function(){
- if(this.expandProcId){
- clearTimeout(this.expandProcId);
- this.expandProcId = false;
- }
- },
-
- isValidDropPoint : function(n, pt, dd, e, data){
- if(!n || !data){ return false; }
- var targetNode = n.node;
- var dropNode = data.node;
-
- if(!(targetNode && targetNode.isTarget && pt)){
- return false;
- }
- if(pt == "append" && targetNode.allowChildren === false){
- return false;
- }
- if((pt == "above" || pt == "below") && (targetNode.parentNode && targetNode.parentNode.allowChildren === false)){
- return false;
- }
- if(dropNode && (targetNode == dropNode || dropNode.contains(targetNode))){
- return false;
- }
-
- var overEvent = this.dragOverData;
- overEvent.tree = this.tree;
- overEvent.target = targetNode;
- overEvent.data = data;
- overEvent.point = pt;
- overEvent.source = dd;
- overEvent.rawEvent = e;
- overEvent.dropNode = dropNode;
- overEvent.cancel = false;
- var result = this.tree.fireEvent("nodedragover", overEvent);
- return overEvent.cancel === false && result !== false;
- },
-
- getDropPoint : function(e, n, dd){
- var tn = n.node;
- if(tn.isRoot){
- return tn.allowChildren !== false ? "append" : false;
- }
- var dragEl = n.ddel;
- var t = Ext.lib.Dom.getY(dragEl), b = t + dragEl.offsetHeight;
- var y = Ext.lib.Event.getPageY(e);
- var noAppend = tn.allowChildren === false || tn.isLeaf();
- if(this.appendOnly || tn.parentNode.allowChildren === false){
- return noAppend ? false : "append";
- }
- var noBelow = false;
- if(!this.allowParentInsert){
- noBelow = tn.hasChildNodes() && tn.isExpanded();
- }
- var q = (b - t) / (noAppend ? 2 : 3);
- if(y >= t && y < (t + q)){
- return "above";
- }else if(!noBelow && (noAppend || y >= b-q && y <= b)){
- return "below";
- }else{
- return "append";
- }
- },
-
- onNodeEnter : function(n, dd, e, data){
- this.cancelExpand();
- },
-
- onNodeOver : function(n, dd, e, data){
- var pt = this.getDropPoint(e, n, dd);
- var node = n.node;
-
-
- if(!this.expandProcId && pt == "append" && node.hasChildNodes() && !n.node.isExpanded()){
- this.queueExpand(node);
- }else if(pt != "append"){
- this.cancelExpand();
- }
-
-
- var returnCls = this.dropNotAllowed;
- if(this.isValidDropPoint(n, pt, dd, e, data)){
- if(pt){
- var el = n.ddel;
- var cls;
- if(pt == "above"){
- returnCls = n.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between";
- cls = "x-tree-drag-insert-above";
- }else if(pt == "below"){
- returnCls = n.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between";
- cls = "x-tree-drag-insert-below";
- }else{
- returnCls = "x-tree-drop-ok-append";
- cls = "x-tree-drag-append";
- }
- if(this.lastInsertClass != cls){
- Ext.fly(el).replaceClass(this.lastInsertClass, cls);
- this.lastInsertClass = cls;
- }
- }
- }
- return returnCls;
- },
-
- onNodeOut : function(n, dd, e, data){
- this.cancelExpand();
- this.removeDropIndicators(n);
- },
-
- onNodeDrop : function(n, dd, e, data){
- var point = this.getDropPoint(e, n, dd);
- var targetNode = n.node;
- targetNode.ui.startDrop();
- if(!this.isValidDropPoint(n, point, dd, e, data)){
- targetNode.ui.endDrop();
- return false;
- }
-
- var dropNode = data.node || (dd.getTreeNode ? dd.getTreeNode(data, targetNode, point, e) : null);
- var dropEvent = {
- tree : this.tree,
- target: targetNode,
- data: data,
- point: point,
- source: dd,
- rawEvent: e,
- dropNode: dropNode,
- cancel: !dropNode,
- dropStatus: false
- };
- var retval = this.tree.fireEvent("beforenodedrop", dropEvent);
- if(retval === false || dropEvent.cancel === true || !dropEvent.dropNode){
- targetNode.ui.endDrop();
- return dropEvent.dropStatus;
- }
-
- targetNode = dropEvent.target;
- if(point == "append" && !targetNode.isExpanded()){
- targetNode.expand(false, null, function(){
- this.completeDrop(dropEvent);
- }.createDelegate(this));
- }else{
- this.completeDrop(dropEvent);
- }
- return true;
- },
-
- completeDrop : function(de){
- var ns = de.dropNode, p = de.point, t = de.target;
- if(!Ext.isArray(ns)){
- ns = [ns];
- }
- var n;
- for(var i = 0, len = ns.length; i < len; i++){
- n = ns[i];
- if(p == "above"){
- t.parentNode.insertBefore(n, t);
- }else if(p == "below"){
- t.parentNode.insertBefore(n, t.nextSibling);
- }else{
- t.appendChild(n);
- }
- }
- n.ui.focus();
- if(this.tree.hlDrop){
- n.ui.highlight();
- }
- t.ui.endDrop();
- this.tree.fireEvent("nodedrop", de);
- },
-
- afterNodeMoved : function(dd, data, e, targetNode, dropNode){
- if(this.tree.hlDrop){
- dropNode.ui.focus();
- dropNode.ui.highlight();
- }
- this.tree.fireEvent("nodedrop", this.tree, targetNode, data, dd, e);
- },
-
- getTree : function(){
- return this.tree;
- },
-
- removeDropIndicators : function(n){
- if(n && n.ddel){
- var el = n.ddel;
- Ext.fly(el).removeClass([
- "x-tree-drag-insert-above",
- "x-tree-drag-insert-below",
- "x-tree-drag-append"]);
- this.lastInsertClass = "_noclass";
- }
- },
-
- beforeDragDrop : function(target, e, id){
- this.cancelExpand();
- return true;
- },
-
- afterRepair : function(data){
- if(data && Ext.enableFx){
- data.node.ui.highlight();
- }
- this.hideProxy();
- }
- });
- }
- if(Ext.dd.DragZone){
- Ext.tree.TreeDragZone = function(tree, config){
- Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.getTreeEl(), config);
-
- this.tree = tree;
- };
- Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {
-
- ddGroup : "TreeDD",
-
- onBeforeDrag : function(data, e){
- var n = data.node;
- return n && n.draggable && !n.disabled;
- },
-
- onInitDrag : function(e){
- var data = this.dragData;
- this.tree.getSelectionModel().select(data.node);
- this.tree.eventModel.disable();
- this.proxy.update("");
- data.node.ui.appendDDGhost(this.proxy.ghost.dom);
- this.tree.fireEvent("startdrag", this.tree, data.node, e);
- },
-
- getRepairXY : function(e, data){
- return data.node.ui.getDDRepairXY();
- },
-
- onEndDrag : function(data, e){
- this.tree.eventModel.enable.defer(100, this.tree.eventModel);
- this.tree.fireEvent("enddrag", this.tree, data.node, e);
- },
-
- onValidDrop : function(dd, e, id){
- this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e);
- this.hideProxy();
- },
-
- beforeInvalidDrop : function(e, id){
-
- var sm = this.tree.getSelectionModel();
- sm.clearSelections();
- sm.select(this.dragData.node);
- }
- });
- }
- Ext.tree.TreeEditor = function(tree, config){
- config = config || {};
- var field = config.events ? config : new Ext.form.TextField(config);
- Ext.tree.TreeEditor.superclass.constructor.call(this, field);
- this.tree = tree;
- if(!tree.rendered){
- tree.on('render', this.initEditor, this);
- }else{
- this.initEditor(tree);
- }
- };
- Ext.extend(Ext.tree.TreeEditor, Ext.Editor, {
-
- alignment: "l-l",
- autoSize: false,
-
- hideEl : false,
-
- cls: "x-small-editor x-tree-editor",
-
- shim:false,
- shadow:"frame",
-
- maxWidth: 250,
-
- editDelay : 350,
- initEditor : function(tree){
- tree.on('beforeclick', this.beforeNodeClick, this);
- tree.on('dblclick', this.onNodeDblClick, this);
- this.on('complete', this.updateNode, this);
- this.on('beforestartedit', this.fitToTree, this);
- this.on('startedit', this.bindScroll, this, {delay:10});
- this.on('specialkey', this.onSpecialKey, this);
- },
- fitToTree : function(ed, el){
- var td = this.tree.getTreeEl().dom, nd = el.dom;
- if(td.scrollLeft > nd.offsetLeft){ td.scrollLeft = nd.offsetLeft;
- }
- var w = Math.min(
- this.maxWidth,
- (td.clientWidth > 20 ? td.clientWidth : td.offsetWidth) - Math.max(0, nd.offsetLeft-td.scrollLeft) - 5);
- this.setSize(w, '');
- },
- triggerEdit : function(node, defer){
- this.completeEdit();
- if(node.attributes.editable !== false){
- this.editNode = node;
- this.autoEditTimer = this.startEdit.defer(this.editDelay, this, [node.ui.textNode, node.text]);
- return false;
- }
- },
- bindScroll : function(){
- this.tree.getTreeEl().on('scroll', this.cancelEdit, this);
- },
- beforeNodeClick : function(node, e){
- clearTimeout(this.autoEditTimer);
- if(this.tree.getSelectionModel().isSelected(node)){
- e.stopEvent();
- return this.triggerEdit(node);
- }
- },
- onNodeDblClick : function(node, e){
- clearTimeout(this.autoEditTimer);
- },
- updateNode : function(ed, value){
- this.tree.getTreeEl().un('scroll', this.cancelEdit, this);
- this.editNode.setText(value);
- },
- onHide : function(){
- Ext.tree.TreeEditor.superclass.onHide.call(this);
- if(this.editNode){
- this.editNode.ui.focus.defer(50, this.editNode.ui);
- }
- },
- onSpecialKey : function(field, e){
- var k = e.getKey();
- if(k == e.ESC){
- e.stopEvent();
- this.cancelEdit();
- }else if(k == e.ENTER && !e.hasModifier()){
- e.stopEvent();
- this.completeEdit();
- }
- }
- });
- Ext.menu.Menu = function(config){
- if(Ext.isArray(config)){
- config = {items:config};
- }
- Ext.apply(this, config);
- this.id = this.id || Ext.id();
- this.addEvents(
-
- 'beforeshow',
-
- 'beforehide',
-
- 'show',
-
- 'hide',
-
- 'click',
-
- 'mouseover',
-
- 'mouseout',
-
- 'itemclick'
- );
- Ext.menu.MenuMgr.register(this);
- Ext.menu.Menu.superclass.constructor.call(this);
- var mis = this.items;
-
- this.items = new Ext.util.MixedCollection();
- if(mis){
- this.add.apply(this, mis);
- }
- };
- Ext.extend(Ext.menu.Menu, Ext.util.Observable, {
-
-
-
- minWidth : 120,
-
- shadow : "sides",
-
- subMenuAlign : "tl-tr?",
-
- defaultAlign : "tl-bl?",
-
- allowOtherMenus : false,
- hidden:true,
- createEl : function(){
- return new Ext.Layer({
- cls: "x-menu",
- shadow:this.shadow,
- constrain: false,
- parentEl: this.parentEl || document.body,
- zindex:15000
- });
- },
- render : function(){
- if(this.el){
- return;
- }
- var el = this.el = this.createEl();
- if(!this.keyNav){
- this.keyNav = new Ext.menu.MenuNav(this);
- }
- if(this.plain){
- el.addClass("x-menu-plain");
- }
- if(this.cls){
- el.addClass(this.cls);
- }
- this.focusEl = el.createChild({
- tag: "a", cls: "x-menu-focus", href: "#", onclick: "return false;", tabIndex:"-1"
- });
- var ul = el.createChild({tag: "ul", cls: "x-menu-list"});
- ul.on("click", this.onClick, this);
- ul.on("mouseover", this.onMouseOver, this);
- ul.on("mouseout", this.onMouseOut, this);
- this.items.each(function(item){
- var li = document.createElement("li");
- li.className = "x-menu-list-item";
- ul.dom.appendChild(li);
- item.render(li, this);
- }, this);
- this.ul = ul;
- this.autoWidth();
- },
- autoWidth : function(){
- var el = this.el, ul = this.ul;
- if(!el){
- return;
- }
- var w = this.width;
- if(w){
- el.setWidth(w);
- }else if(Ext.isIE){
- el.setWidth(this.minWidth);
- var t = el.dom.offsetWidth; el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));
- }
- },
- delayAutoWidth : function(){
- if(this.el){
- if(!this.awTask){
- this.awTask = new Ext.util.DelayedTask(this.autoWidth, this);
- }
- this.awTask.delay(20);
- }
- },
- findTargetItem : function(e){
- var t = e.getTarget(".x-menu-list-item", this.ul, true);
- if(t && t.menuItemId){
- return this.items.get(t.menuItemId);
- }
- },
- onClick : function(e){
- var t;
- if(t = this.findTargetItem(e)){
- t.onClick(e);
- this.fireEvent("click", this, t, e);
- }
- },
- setActiveItem : function(item, autoExpand){
- if(item != this.activeItem){
- if(this.activeItem){
- this.activeItem.deactivate();
- }
- this.activeItem = item;
- item.activate(autoExpand);
- }else if(autoExpand){
- item.expandMenu();
- }
- },
- tryActivate : function(start, step){
- var items = this.items;
- for(var i = start, len = items.length; i >= 0 && i < len; i+= step){
- var item = items.get(i);
- if(!item.disabled && item.canActivate){
- this.setActiveItem(item, false);
- return item;
- }
- }
- return false;
- },
- onMouseOver : function(e){
- var t;
- if(t = this.findTargetItem(e)){
- if(t.canActivate && !t.disabled){
- this.setActiveItem(t, true);
- }
- }
- this.fireEvent("mouseover", this, e, t);
- },
- onMouseOut : function(e){
- var t;
- if(t = this.findTargetItem(e)){
- if(t == this.activeItem && t.shouldDeactivate(e)){
- this.activeItem.deactivate();
- delete this.activeItem;
- }
- }
- this.fireEvent("mouseout", this, e, t);
- },
-
- isVisible : function(){
- return this.el && !this.hidden;
- },
-
- show : function(el, pos, parentMenu){
- this.parentMenu = parentMenu;
- if(!this.el){
- this.render();
- }
- this.fireEvent("beforeshow", this);
- this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
- },
-
- showAt : function(xy, parentMenu, _e){
- this.parentMenu = parentMenu;
- if(!this.el){
- this.render();
- }
- if(_e !== false){
- this.fireEvent("beforeshow", this);
- xy = this.el.adjustForConstraints(xy);
- }
- this.el.setXY(xy);
- this.el.show();
- this.hidden = false;
- this.focus();
- this.fireEvent("show", this);
- },
-
- focus : function(){
- if(!this.hidden){
- this.doFocus.defer(50, this);
- }
- },
- doFocus : function(){
- if(!this.hidden){
- this.focusEl.focus();
- }
- },
-
- hide : function(deep){
- if(this.el && this.isVisible()){
- this.fireEvent("beforehide", this);
- if(this.activeItem){
- this.activeItem.deactivate();
- this.activeItem = null;
- }
- this.el.hide();
- this.hidden = true;
- this.fireEvent("hide", this);
- }
- if(deep === true && this.parentMenu){
- this.parentMenu.hide(true);
- }
- },
-
- add : function(){
- var a = arguments, l = a.length, item;
- for(var i = 0; i < l; i++){
- var el = a[i];
- if(el.render){ item = this.addItem(el);
- }else if(typeof el == "string"){ if(el == "separator" || el == "-"){
- item = this.addSeparator();
- }else{
- item = this.addText(el);
- }
- }else if(el.tagName || el.el){ item = this.addElement(el);
- }else if(typeof el == "object"){ Ext.applyIf(el, this.defaults);
- item = this.addMenuItem(el);
- }
- }
- return item;
- },
-
- getEl : function(){
- if(!this.el){
- this.render();
- }
- return this.el;
- },
-
- addSeparator : function(){
- return this.addItem(new Ext.menu.Separator());
- },
-
- addElement : function(el){
- return this.addItem(new Ext.menu.BaseItem(el));
- },
-
- addItem : function(item){
- this.items.add(item);
- if(this.ul){
- var li = document.createElement("li");
- li.className = "x-menu-list-item";
- this.ul.dom.appendChild(li);
- item.render(li, this);
- this.delayAutoWidth();
- }
- return item;
- },
-
- addMenuItem : function(config){
- if(!(config instanceof Ext.menu.Item)){
- if(typeof config.checked == "boolean"){ config = new Ext.menu.CheckItem(config);
- }else{
- config = new Ext.menu.Item(config);
- }
- }
- return this.addItem(config);
- },
-
- addText : function(text){
- return this.addItem(new Ext.menu.TextItem(text));
- },
-
- insert : function(index, item){
- this.items.insert(index, item);
- if(this.ul){
- var li = document.createElement("li");
- li.className = "x-menu-list-item";
- this.ul.dom.insertBefore(li, this.ul.dom.childNodes[index]);
- item.render(li, this);
- this.delayAutoWidth();
- }
- return item;
- },
-
- remove : function(item){
- this.items.removeKey(item.id);
- item.destroy();
- },
-
- removeAll : function(){
- var f;
- while(f = this.items.first()){
- this.remove(f);
- }
- },
-
- destroy : function(){
- this.beforeDestroy();
- Ext.menu.MenuMgr.unregister(this);
- if (this.keyNav) {
- this.keyNav.disable();
- }
- this.removeAll();
- if (this.ul) {
- this.ul.removeAllListeners();
- }
- if (this.el) {
- this.el.destroy();
- }
- },
- beforeDestroy : Ext.emptyFn
- });
- Ext.menu.MenuNav = function(menu){
- Ext.menu.MenuNav.superclass.constructor.call(this, menu.el);
- this.scope = this.menu = menu;
- };
- Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, {
- doRelay : function(e, h){
- var k = e.getKey();
- if(!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN){
- this.menu.tryActivate(0, 1);
- return false;
- }
- return h.call(this.scope || this, e, this.menu);
- },
- up : function(e, m){
- if(!m.tryActivate(m.items.indexOf(m.activeItem)-1, -1)){
- m.tryActivate(m.items.length-1, -1);
- }
- },
- down : function(e, m){
- if(!m.tryActivate(m.items.indexOf(m.activeItem)+1, 1)){
- m.tryActivate(0, 1);
- }
- },
- right : function(e, m){
- if(m.activeItem){
- m.activeItem.expandMenu(true);
- }
- },
- left : function(e, m){
- m.hide();
- if(m.parentMenu && m.parentMenu.activeItem){
- m.parentMenu.activeItem.activate();
- }
- },
- enter : function(e, m){
- if(m.activeItem){
- e.stopPropagation();
- m.activeItem.onClick(e);
- m.fireEvent("click", this, m.activeItem);
- return true;
- }
- }
- });
- Ext.menu.MenuMgr = function(){
- var menus, active, groups = {}, attached = false, lastShow = new Date();
- function init(){
- menus = {};
- active = new Ext.util.MixedCollection();
- Ext.getDoc().addKeyListener(27, function(){
- if(active.length > 0){
- hideAll();
- }
- });
- }
- function hideAll(){
- if(active && active.length > 0){
- var c = active.clone();
- c.each(function(m){
- m.hide();
- });
- }
- }
- function onHide(m){
- active.remove(m);
- if(active.length < 1){
- Ext.getDoc().un("mousedown", onMouseDown);
- attached = false;
- }
- }
- function onShow(m){
- var last = active.last();
- lastShow = new Date();
- active.add(m);
- if(!attached){
- Ext.getDoc().on("mousedown", onMouseDown);
- attached = true;
- }
- if(m.parentMenu){
- m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
- m.parentMenu.activeChild = m;
- }else if(last && last.isVisible()){
- m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
- }
- }
- function onBeforeHide(m){
- if(m.activeChild){
- m.activeChild.hide();
- }
- if(m.autoHideTimer){
- clearTimeout(m.autoHideTimer);
- delete m.autoHideTimer;
- }
- }
- function onBeforeShow(m){
- var pm = m.parentMenu;
- if(!pm && !m.allowOtherMenus){
- hideAll();
- }else if(pm && pm.activeChild){
- pm.activeChild.hide();
- }
- }
- function onMouseDown(e){
- if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
- hideAll();
- }
- }
- function onBeforeCheck(mi, state){
- if(state){
- var g = groups[mi.group];
- for(var i = 0, l = g.length; i < l; i++){
- if(g[i] != mi){
- g[i].setChecked(false);
- }
- }
- }
- }
- return {
-
- hideAll : function(){
- hideAll();
- },
- register : function(menu){
- if(!menus){
- init();
- }
- menus[menu.id] = menu;
- menu.on("beforehide", onBeforeHide);
- menu.on("hide", onHide);
- menu.on("beforeshow", onBeforeShow);
- menu.on("show", onShow);
- var g = menu.group;
- if(g && menu.events["checkchange"]){
- if(!groups[g]){
- groups[g] = [];
- }
- groups[g].push(menu);
- menu.on("checkchange", onCheck);
- }
- },
-
- get : function(menu){
- if(typeof menu == "string"){ if(!menus){ return null;
- }
- return menus[menu];
- }else if(menu.events){ return menu;
- }else if(typeof menu.length == 'number'){ return new Ext.menu.Menu({items:menu});
- }else{ return new Ext.menu.Menu(menu);
- }
- },
- unregister : function(menu){
- delete menus[menu.id];
- menu.un("beforehide", onBeforeHide);
- menu.un("hide", onHide);
- menu.un("beforeshow", onBeforeShow);
- menu.un("show", onShow);
- var g = menu.group;
- if(g && menu.events["checkchange"]){
- groups[g].remove(menu);
- menu.un("checkchange", onCheck);
- }
- },
- registerCheckable : function(menuItem){
- var g = menuItem.group;
- if(g){
- if(!groups[g]){
- groups[g] = [];
- }
- groups[g].push(menuItem);
- menuItem.on("beforecheckchange", onBeforeCheck);
- }
- },
- unregisterCheckable : function(menuItem){
- var g = menuItem.group;
- if(g){
- groups[g].remove(menuItem);
- menuItem.un("beforecheckchange", onBeforeCheck);
- }
- },
- getCheckedItem : function(groupId){
- var g = groups[groupId];
- if(g){
- for(var i = 0, l = g.length; i < l; i++){
- if(g[i].checked){
- return g[i];
- }
- }
- }
- return null;
- },
- setCheckedItem : function(groupId, itemId){
- var g = groups[groupId];
- if(g){
- for(var i = 0, l = g.length; i < l; i++){
- if(g[i].id == itemId){
- g[i].setChecked(true);
- }
- }
- }
- return null;
- }
- };
- }();
- Ext.menu.BaseItem = function(config){
- Ext.menu.BaseItem.superclass.constructor.call(this, config);
- this.addEvents(
-
- 'click',
-
- 'activate',
-
- 'deactivate'
- );
- if(this.handler){
- this.on("click", this.handler, this.scope);
- }
- };
- Ext.extend(Ext.menu.BaseItem, Ext.Component, {
-
-
-
- canActivate : false,
-
- activeClass : "x-menu-item-active",
-
- hideOnClick : true,
-
- hideDelay : 100,
- ctype: "Ext.menu.BaseItem",
- actionMode : "container",
- render : function(container, parentMenu){
- this.parentMenu = parentMenu;
- Ext.menu.BaseItem.superclass.render.call(this, container);
- this.container.menuItemId = this.id;
- },
- onRender : function(container, position){
- this.el = Ext.get(this.el);
- container.dom.appendChild(this.el.dom);
- },
-
- setHandler : function(handler, scope){
- if(this.handler){
- this.un("click", this.handler, this.scope);
- }
- this.on("click", this.handler = handler, this.scope = scope);
- },
- onClick : function(e){
- if(!this.disabled && this.fireEvent("click", this, e) !== false
- && this.parentMenu.fireEvent("itemclick", this, e) !== false){
- this.handleClick(e);
- }else{
- e.stopEvent();
- }
- },
- activate : function(){
- if(this.disabled){
- return false;
- }
- var li = this.container;
- li.addClass(this.activeClass);
- this.region = li.getRegion().adjust(2, 2, -2, -2);
- this.fireEvent("activate", this);
- return true;
- },
- deactivate : function(){
- this.container.removeClass(this.activeClass);
- this.fireEvent("deactivate", this);
- },
- shouldDeactivate : function(e){
- return !this.region || !this.region.contains(e.getPoint());
- },
- handleClick : function(e){
- if(this.hideOnClick){
- this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]);
- }
- },
- expandMenu : function(autoActivate){
- },
- hideMenu : function(){
- }
- });
- Ext.menu.TextItem = function(text){
- this.text = text;
- Ext.menu.TextItem.superclass.constructor.call(this);
- };
- Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, {
-
-
- hideOnClick : false,
-
- itemCls : "x-menu-text",
- onRender : function(){
- var s = document.createElement("span");
- s.className = this.itemCls;
- s.innerHTML = this.text;
- this.el = s;
- Ext.menu.TextItem.superclass.onRender.apply(this, arguments);
- }
- });
- Ext.menu.Separator = function(config){
- Ext.menu.Separator.superclass.constructor.call(this, config);
- };
- Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, {
-
- itemCls : "x-menu-sep",
-
- hideOnClick : false,
- onRender : function(li){
- var s = document.createElement("span");
- s.className = this.itemCls;
- s.innerHTML = " ";
- this.el = s;
- li.addClass("x-menu-sep-li");
- Ext.menu.Separator.superclass.onRender.apply(this, arguments);
- }
- });
- Ext.menu.Item = function(config){
- Ext.menu.Item.superclass.constructor.call(this, config);
- if(this.menu){
- this.menu = Ext.menu.MenuMgr.get(this.menu);
- }
- };
- Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, {
-
-
-
-
-
-
- itemCls : "x-menu-item",
-
- canActivate : true,
-
- showDelay: 200,
- hideDelay: 200,
- ctype: "Ext.menu.Item",
- onRender : function(container, position){
- var el = document.createElement("a");
- el.hideFocus = true;
- el.unselectable = "on";
- el.href = this.href || "#";
- if(this.hrefTarget){
- el.target = this.hrefTarget;
- }
- el.className = this.itemCls + (this.menu ? " x-menu-item-arrow" : "") + (this.cls ? " " + this.cls : "");
- el.innerHTML = String.format(
- '<img src="{0}" class="x-menu-item-icon {2}" />{1}',
- this.icon || Ext.BLANK_IMAGE_URL, this.itemText||this.text, this.iconCls || '');
- this.el = el;
- Ext.menu.Item.superclass.onRender.call(this, container, position);
- },
-
- setText : function(text){
- this.text = text;
- if(this.rendered){
- this.el.update(String.format(
- '<img src="{0}" class="x-menu-item-icon {2}">{1}',
- this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || ''));
- this.parentMenu.autoWidth();
- }
- },
-
- setIconClass : function(cls){
- var oldCls = this.iconCls;
- this.iconCls = cls;
- if(this.rendered){
- this.el.child('img.x-menu-item-icon').replaceClass(oldCls, this.iconCls);
- }
- },
- handleClick : function(e){
- if(!this.href){ e.stopEvent();
- }
- Ext.menu.Item.superclass.handleClick.apply(this, arguments);
- },
- activate : function(autoExpand){
- if(Ext.menu.Item.superclass.activate.apply(this, arguments)){
- this.focus();
- if(autoExpand){
- this.expandMenu();
- }
- }
- return true;
- },
- shouldDeactivate : function(e){
- if(Ext.menu.Item.superclass.shouldDeactivate.call(this, e)){
- if(this.menu && this.menu.isVisible()){
- return !this.menu.getEl().getRegion().contains(e.getPoint());
- }
- return true;
- }
- return false;
- },
- deactivate : function(){
- Ext.menu.Item.superclass.deactivate.apply(this, arguments);
- this.hideMenu();
- },
- expandMenu : function(autoActivate){
- if(!this.disabled && this.menu){
- clearTimeout(this.hideTimer);
- delete this.hideTimer;
- if(!this.menu.isVisible() && !this.showTimer){
- this.showTimer = this.deferExpand.defer(this.showDelay, this, [autoActivate]);
- }else if (this.menu.isVisible() && autoActivate){
- this.menu.tryActivate(0, 1);
- }
- }
- },
- deferExpand : function(autoActivate){
- delete this.showTimer;
- this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu);
- if(autoActivate){
- this.menu.tryActivate(0, 1);
- }
- },
- hideMenu : function(){
- clearTimeout(this.showTimer);
- delete this.showTimer;
- if(!this.hideTimer && this.menu && this.menu.isVisible()){
- this.hideTimer = this.deferHide.defer(this.hideDelay, this);
- }
- },
- deferHide : function(){
- delete this.hideTimer;
- this.menu.hide();
- }
- });
- Ext.menu.CheckItem = function(config){
- Ext.menu.CheckItem.superclass.constructor.call(this, config);
- this.addEvents(
-
- "beforecheckchange" ,
-
- "checkchange"
- );
-
- if(this.checkHandler){
- this.on('checkchange', this.checkHandler, this.scope);
- }
- Ext.menu.MenuMgr.registerCheckable(this);
- };
- Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, {
-
-
- itemCls : "x-menu-item x-menu-check-item",
-
- groupClass : "x-menu-group-item",
-
- checked: false,
- ctype: "Ext.menu.CheckItem",
- onRender : function(c){
- Ext.menu.CheckItem.superclass.onRender.apply(this, arguments);
- if(this.group){
- this.el.addClass(this.groupClass);
- }
- if(this.checked){
- this.checked = false;
- this.setChecked(true, true);
- }
- },
- destroy : function(){
- Ext.menu.MenuMgr.unregisterCheckable(this);
- Ext.menu.CheckItem.superclass.destroy.apply(this, arguments);
- },
-
- setChecked : function(state, suppressEvent){
- if(this.checked != state && this.fireEvent("beforecheckchange", this, state) !== false){
- if(this.container){
- this.container[state ? "addClass" : "removeClass"]("x-menu-item-checked");
- }
- this.checked = state;
- if(suppressEvent !== true){
- this.fireEvent("checkchange", this, state);
- }
- }
- },
- handleClick : function(e){
- if(!this.disabled && !(this.checked && this.group)){ this.setChecked(!this.checked);
- }
- Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments);
- }
- });
- Ext.menu.Adapter = function(component, config){
- Ext.menu.Adapter.superclass.constructor.call(this, config);
- this.component = component;
- };
- Ext.extend(Ext.menu.Adapter, Ext.menu.BaseItem, {
- canActivate : true,
- onRender : function(container, position){
- this.component.render(container);
- this.el = this.component.getEl();
- },
- activate : function(){
- if(this.disabled){
- return false;
- }
- this.component.focus();
- this.fireEvent("activate", this);
- return true;
- },
- deactivate : function(){
- this.fireEvent("deactivate", this);
- },
- disable : function(){
- this.component.disable();
- Ext.menu.Adapter.superclass.disable.call(this);
- },
- enable : function(){
- this.component.enable();
- Ext.menu.Adapter.superclass.enable.call(this);
- }
- });
- Ext.menu.DateItem = function(config){
- Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(config), config);
-
- this.picker = this.component;
- this.addEvents('select');
-
- this.picker.on("render", function(picker){
- picker.getEl().swallowEvent("click");
- picker.container.addClass("x-menu-date-item");
- });
- this.picker.on("select", this.onSelect, this);
- };
- Ext.extend(Ext.menu.DateItem, Ext.menu.Adapter, {
- onSelect : function(picker, date){
- this.fireEvent("select", this, date, picker);
- Ext.menu.DateItem.superclass.handleClick.call(this);
- }
- });
- Ext.menu.ColorItem = function(config){
- Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(config), config);
-
- this.palette = this.component;
- this.relayEvents(this.palette, ["select"]);
- if(this.selectHandler){
- this.on('select', this.selectHandler, this.scope);
- }
- };
- Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter);
- Ext.menu.DateMenu = function(config){
- Ext.menu.DateMenu.superclass.constructor.call(this, config);
- this.plain = true;
- var di = new Ext.menu.DateItem(config);
- this.add(di);
-
- this.picker = di.picker;
-
- this.relayEvents(di, ["select"]);
- this.on('beforeshow', function(){
- if(this.picker){
- this.picker.hideMonthPicker(true);
- }
- }, this);
- };
- Ext.extend(Ext.menu.DateMenu, Ext.menu.Menu, {
- cls:'x-date-menu',
- beforeDestroy : function() {
- this.picker.destroy();
- }
- });
- Ext.menu.ColorMenu = function(config){
- Ext.menu.ColorMenu.superclass.constructor.call(this, config);
- this.plain = true;
- var ci = new Ext.menu.ColorItem(config);
- this.add(ci);
-
- this.palette = ci.palette;
-
- this.relayEvents(ci, ["select"]);
- };
- Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu);
- Ext.form.Field = Ext.extend(Ext.BoxComponent, {
-
-
-
-
-
-
-
- invalidClass : "x-form-invalid",
-
- invalidText : "The value in this field is invalid",
-
- focusClass : "x-form-focus",
-
- validationEvent : "keyup",
-
- validateOnBlur : true,
-
- validationDelay : 250,
-
- defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"},
-
- fieldClass : "x-form-field",
-
- msgTarget : 'qtip',
-
- msgFx : 'normal',
-
-
- readOnly : false,
-
- disabled : false,
-
-
- isFormField : true,
- hasFocus : false,
-
-
-
-
- initComponent : function(){
- Ext.form.Field.superclass.initComponent.call(this);
- this.addEvents(
-
- 'focus',
-
- 'blur',
-
- 'specialkey',
-
- 'change',
-
- 'invalid',
-
- 'valid'
- );
- },
-
- getName: function(){
- return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || '');
- },
- onRender : function(ct, position){
- Ext.form.Field.superclass.onRender.call(this, ct, position);
- if(!this.el){
- var cfg = this.getAutoCreate();
- if(!cfg.name){
- cfg.name = this.name || this.id;
- }
- if(this.inputType){
- cfg.type = this.inputType;
- }
- this.el = ct.createChild(cfg, position);
- }
- var type = this.el.dom.type;
- if(type){
- if(type == 'password'){
- type = 'text';
- }
- this.el.addClass('x-form-'+type);
- }
- if(this.readOnly){
- this.el.dom.readOnly = true;
- }
- if(this.tabIndex !== undefined){
- this.el.dom.setAttribute('tabIndex', this.tabIndex);
- }
- this.el.addClass([this.fieldClass, this.cls]);
- this.initValue();
- },
- initValue : function(){
- if(this.value !== undefined){
- this.setValue(this.value);
- }else if(this.el.dom.value.length > 0){
- this.setValue(this.el.dom.value);
- }
- },
-
- isDirty : function() {
- if(this.disabled) {
- return false;
- }
- return String(this.getValue()) !== String(this.originalValue);
- },
- afterRender : function(){
- Ext.form.Field.superclass.afterRender.call(this);
- this.initEvents();
- },
- fireKey : function(e){
- if(e.isSpecialKey()){
- this.fireEvent("specialkey", this, e);
- }
- },
-
- reset : function(){
- this.setValue(this.originalValue);
- this.clearInvalid();
- },
- initEvents : function(){
- this.el.on(Ext.isIE ? "keydown" : "keypress", this.fireKey, this);
- this.el.on("focus", this.onFocus, this);
- this.el.on("blur", this.onBlur, this);
- this.originalValue = this.getValue();
- },
- onFocus : function(){
- if(!Ext.isOpera && this.focusClass){ this.el.addClass(this.focusClass);
- }
- if(!this.hasFocus){
- this.hasFocus = true;
- this.startValue = this.getValue();
- this.fireEvent("focus", this);
- }
- },
- beforeBlur : Ext.emptyFn,
- onBlur : function(){
- this.beforeBlur();
- if(!Ext.isOpera && this.focusClass){ this.el.removeClass(this.focusClass);
- }
- this.hasFocus = false;
- if(this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur"){
- this.validate();
- }
- var v = this.getValue();
- if(String(v) !== String(this.startValue)){
- this.fireEvent('change', this, v, this.startValue);
- }
- this.fireEvent("blur", this);
- },
-
- isValid : function(preventMark){
- if(this.disabled){
- return true;
- }
- var restore = this.preventMark;
- this.preventMark = preventMark === true;
- var v = this.validateValue(this.processValue(this.getRawValue()));
- this.preventMark = restore;
- return v;
- },
-
- validate : function(){
- if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){
- this.clearInvalid();
- return true;
- }
- return false;
- },
- processValue : function(value){
- return value;
- },
- validateValue : function(value){
- return true;
- },
-
- markInvalid : function(msg){
- if(!this.rendered || this.preventMark){ return;
- }
- this.el.addClass(this.invalidClass);
- msg = msg || this.invalidText;
- switch(this.msgTarget){
- case 'qtip':
- this.el.dom.qtip = msg;
- this.el.dom.qclass = 'x-form-invalid-tip';
- if(Ext.QuickTips){ Ext.QuickTips.enable();
- }
- break;
- case 'title':
- this.el.dom.title = msg;
- break;
- case 'under':
- if(!this.errorEl){
- var elp = this.el.findParent('.x-form-element', 5, true);
- this.errorEl = elp.createChild({cls:'x-form-invalid-msg'});
- this.errorEl.setWidth(elp.getWidth(true)-20);
- }
- this.errorEl.update(msg);
- Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);
- break;
- case 'side':
- if(!this.errorIcon){
- var elp = this.el.findParent('.x-form-element', 5, true);
- this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});
- }
- this.alignErrorIcon();
- this.errorIcon.dom.qtip = msg;
- this.errorIcon.dom.qclass = 'x-form-invalid-tip';
- this.errorIcon.show();
- this.on('resize', this.alignErrorIcon, this);
- break;
- default:
- var t = Ext.getDom(this.msgTarget);
- t.innerHTML = msg;
- t.style.display = this.msgDisplay;
- break;
- }
- this.fireEvent('invalid', this, msg);
- },
- alignErrorIcon : function(){
- this.errorIcon.alignTo(this.el, 'tl-tr', [2, 0]);
- },
-
- clearInvalid : function(){
- if(!this.rendered || this.preventMark){ return;
- }
- this.el.removeClass(this.invalidClass);
- switch(this.msgTarget){
- case 'qtip':
- this.el.dom.qtip = '';
- break;
- case 'title':
- this.el.dom.title = '';
- break;
- case 'under':
- if(this.errorEl){
- Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);
- }
- break;
- case 'side':
- if(this.errorIcon){
- this.errorIcon.dom.qtip = '';
- this.errorIcon.hide();
- this.un('resize', this.alignErrorIcon, this);
- }
- break;
- default:
- var t = Ext.getDom(this.msgTarget);
- t.innerHTML = '';
- t.style.display = 'none';
- break;
- }
- this.fireEvent('valid', this);
- },
-
- getRawValue : function(){
- var v = this.rendered ? this.el.getValue() : Ext.value(this.value, '');
- if(v === this.emptyText){
- v = '';
- }
- return v;
- },
-
- getValue : function(){
- if(!this.rendered) {
- return this.value;
- }
- var v = this.el.getValue();
- if(v === this.emptyText || v === undefined){
- v = '';
- }
- return v;
- },
-
- setRawValue : function(v){
- return this.el.dom.value = (v === null || v === undefined ? '' : v);
- },
-
- setValue : function(v){
- this.value = v;
- if(this.rendered){
- this.el.dom.value = (v === null || v === undefined ? '' : v);
- this.validate();
- }
- },
- adjustSize : function(w, h){
- var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
- s.width = this.adjustWidth(this.el.dom.tagName, s.width);
- return s;
- },
- adjustWidth : function(tag, w){
- tag = tag.toLowerCase();
- if(typeof w == 'number' && !Ext.isSafari){
- if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
- if(tag == 'input' && !Ext.isStrict){
- return this.inEditor ? w : w - 3;
- }
- if(tag == 'input' && Ext.isStrict){
- return w - (Ext.isIE6 ? 4 : 1);
- }
- if(tag = 'textarea' && Ext.isStrict){
- return w-2;
- }
- }else if(Ext.isOpera && Ext.isStrict){
- if(tag == 'input'){
- return w + 2;
- }
- if(tag = 'textarea'){
- return w-2;
- }
- }
- }
- return w;
- }
-
-
-
- });
- Ext.form.Field.msgFx = {
- normal : {
- show: function(msgEl, f){
- msgEl.setDisplayed('block');
- },
- hide : function(msgEl, f){
- msgEl.setDisplayed(false).update('');
- }
- },
- slide : {
- show: function(msgEl, f){
- msgEl.slideIn('t', {stopFx:true});
- },
- hide : function(msgEl, f){
- msgEl.slideOut('t', {stopFx:true,useDisplay:true});
- }
- },
- slideRight : {
- show: function(msgEl, f){
- msgEl.fixDisplay();
- msgEl.alignTo(f.el, 'tl-tr');
- msgEl.slideIn('l', {stopFx:true});
- },
- hide : function(msgEl, f){
- msgEl.slideOut('l', {stopFx:true,useDisplay:true});
- }
- }
- };
- Ext.reg('field', Ext.form.Field);
- Ext.form.TextField = Ext.extend(Ext.form.Field, {
-
-
- grow : false,
-
- growMin : 30,
-
- growMax : 800,
-
- vtype : null,
-
- maskRe : null,
-
- disableKeyFilter : false,
-
- allowBlank : true,
-
- minLength : 0,
-
- maxLength : Number.MAX_VALUE,
-
- minLengthText : "The minimum length for this field is {0}",
-
- maxLengthText : "The maximum length for this field is {0}",
-
- selectOnFocus : false,
-
- blankText : "This field is required",
-
- validator : null,
-
- regex : null,
-
- regexText : "",
-
- emptyText : null,
-
- emptyClass : 'x-form-empty-field',
- initComponent : function(){
- Ext.form.TextField.superclass.initComponent.call(this);
- this.addEvents(
-
- 'autosize'
- );
- },
- initEvents : function(){
- Ext.form.TextField.superclass.initEvents.call(this);
- if(this.validationEvent == 'keyup'){
- this.validationTask = new Ext.util.DelayedTask(this.validate, this);
- this.el.on('keyup', this.filterValidation, this);
- }
- else if(this.validationEvent !== false){
- this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay});
- }
- if(this.selectOnFocus || this.emptyText){
- this.on("focus", this.preFocus, this);
- if(this.emptyText){
- this.on('blur', this.postBlur, this);
- this.applyEmptyText();
- }
- }
- if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){
- this.el.on("keypress", this.filterKeys, this);
- }
- if(this.grow){
- this.el.on("keyup", this.onKeyUp, this, {buffer:50});
- this.el.on("click", this.autoSize, this);
- }
- },
- processValue : function(value){
- if(this.stripCharsRe){
- var newValue = value.replace(this.stripCharsRe, '');
- if(newValue !== value){
- this.setRawValue(newValue);
- return newValue;
- }
- }
- return value;
- },
- filterValidation : function(e){
- if(!e.isNavKeyPress()){
- this.validationTask.delay(this.validationDelay);
- }
- },
- onKeyUp : function(e){
- if(!e.isNavKeyPress()){
- this.autoSize();
- }
- },
-
- reset : function(){
- Ext.form.TextField.superclass.reset.call(this);
- this.applyEmptyText();
- },
- applyEmptyText : function(){
- if(this.rendered && this.emptyText && this.getRawValue().length < 1){
- this.setRawValue(this.emptyText);
- this.el.addClass(this.emptyClass);
- }
- },
- preFocus : function(){
- if(this.emptyText){
- if(this.el.dom.value == this.emptyText){
- this.setRawValue('');
- }
- this.el.removeClass(this.emptyClass);
- }
- if(this.selectOnFocus){
- this.el.dom.select();
- }
- },
- postBlur : function(){
- this.applyEmptyText();
- },
- filterKeys : function(e){
- var k = e.getKey();
- if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
- return;
- }
- var c = e.getCharCode(), cc = String.fromCharCode(c);
- if(Ext.isIE && (e.isSpecialKey() || !cc)){
- return;
- }
- if(!this.maskRe.test(cc)){
- e.stopEvent();
- }
- },
- setValue : function(v){
- if(this.emptyText && this.el && v !== undefined && v !== null && v !== ''){
- this.el.removeClass(this.emptyClass);
- }
- Ext.form.TextField.superclass.setValue.apply(this, arguments);
- this.applyEmptyText();
- this.autoSize();
- },
-
- validateValue : function(value){
- if(value.length < 1 || value === this.emptyText){ if(this.allowBlank){
- this.clearInvalid();
- return true;
- }else{
- this.markInvalid(this.blankText);
- return false;
- }
- }
- if(value.length < this.minLength){
- this.markInvalid(String.format(this.minLengthText, this.minLength));
- return false;
- }
- if(value.length > this.maxLength){
- this.markInvalid(String.format(this.maxLengthText, this.maxLength));
- return false;
- }
- if(this.vtype){
- var vt = Ext.form.VTypes;
- if(!vt[this.vtype](value, this)){
- this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
- return false;
- }
- }
- if(typeof this.validator == "function"){
- var msg = this.validator(value);
- if(msg !== true){
- this.markInvalid(msg);
- return false;
- }
- }
- if(this.regex && !this.regex.test(value)){
- this.markInvalid(this.regexText);
- return false;
- }
- return true;
- },
-
- selectText : function(start, end){
- var v = this.getRawValue();
- if(v.length > 0){
- start = start === undefined ? 0 : start;
- end = end === undefined ? v.length : end;
- var d = this.el.dom;
- if(d.setSelectionRange){
- d.setSelectionRange(start, end);
- }else if(d.createTextRange){
- var range = d.createTextRange();
- range.moveStart("character", start);
- range.moveEnd("character", end-v.length);
- range.select();
- }
- }
- },
-
- autoSize : function(){
- if(!this.grow || !this.rendered){
- return;
- }
- if(!this.metrics){
- this.metrics = Ext.util.TextMetrics.createInstance(this.el);
- }
- var el = this.el;
- var v = el.dom.value;
- var d = document.createElement('div');
- d.appendChild(document.createTextNode(v));
- v = d.innerHTML;
- d = null;
- v += " ";
- var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) + 10, this.growMin));
- this.el.setWidth(w);
- this.fireEvent("autosize", this, w);
- }
- });
- Ext.reg('textfield', Ext.form.TextField);
- Ext.form.TriggerField = Ext.extend(Ext.form.TextField, {
-
-
- defaultAutoCreate : {tag: "input", type: "text", size: "16", autocomplete: "off"},
-
- hideTrigger:false,
-
- autoSize: Ext.emptyFn,
- monitorTab : true,
- deferHeight : true,
- mimicing : false,
- onResize : function(w, h){
- Ext.form.TriggerField.superclass.onResize.call(this, w, h);
- if(typeof w == 'number'){
- this.el.setWidth(this.adjustWidth('input', w - this.trigger.getWidth()));
- }
- this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
- },
- adjustSize : Ext.BoxComponent.prototype.adjustSize,
- getResizeEl : function(){
- return this.wrap;
- },
- getPositionEl : function(){
- return this.wrap;
- },
- alignErrorIcon : function(){
- this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
- },
- onRender : function(ct, position){
- Ext.form.TriggerField.superclass.onRender.call(this, ct, position);
- this.wrap = this.el.wrap({cls: "x-form-field-wrap"});
- this.trigger = this.wrap.createChild(this.triggerConfig ||
- {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass});
- if(this.hideTrigger){
- this.trigger.setDisplayed(false);
- }
- this.initTrigger();
- if(!this.width){
- this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
- }
- },
- initTrigger : function(){
- this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
- this.trigger.addClassOnOver('x-form-trigger-over');
- this.trigger.addClassOnClick('x-form-trigger-click');
- },
- onDestroy : function(){
- if(this.trigger){
- this.trigger.removeAllListeners();
- this.trigger.remove();
- }
- if(this.wrap){
- this.wrap.remove();
- }
- Ext.form.TriggerField.superclass.onDestroy.call(this);
- },
- onFocus : function(){
- Ext.form.TriggerField.superclass.onFocus.call(this);
- if(!this.mimicing){
- this.wrap.addClass('x-trigger-wrap-focus');
- this.mimicing = true;
- Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this, {delay: 10});
- if(this.monitorTab){
- this.el.on("keydown", this.checkTab, this);
- }
- }
- },
- checkTab : function(e){
- if(e.getKey() == e.TAB){
- this.triggerBlur();
- }
- },
- onBlur : function(){
- },
- mimicBlur : function(e){
- if(!this.wrap.contains(e.target) && this.validateBlur(e)){
- this.triggerBlur();
- }
- },
- triggerBlur : function(){
- this.mimicing = false;
- Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur);
- if(this.monitorTab){
- this.el.un("keydown", this.checkTab, this);
- }
- this.beforeBlur();
- this.wrap.removeClass('x-trigger-wrap-focus');
- Ext.form.TriggerField.superclass.onBlur.call(this);
- },
- beforeBlur : Ext.emptyFn,
- validateBlur : function(e){
- return true;
- },
- onDisable : function(){
- Ext.form.TriggerField.superclass.onDisable.call(this);
- if(this.wrap){
- this.wrap.addClass('x-item-disabled');
- }
- },
- onEnable : function(){
- Ext.form.TriggerField.superclass.onEnable.call(this);
- if(this.wrap){
- this.wrap.removeClass('x-item-disabled');
- }
- },
- onShow : function(){
- if(this.wrap){
- this.wrap.dom.style.display = '';
- this.wrap.dom.style.visibility = 'visible';
- }
- },
- onHide : function(){
- this.wrap.dom.style.display = 'none';
- },
-
- onTriggerClick : Ext.emptyFn
-
-
-
- });
- Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {
- initComponent : function(){
- Ext.form.TwinTriggerField.superclass.initComponent.call(this);
- this.triggerConfig = {
- tag:'span', cls:'x-form-twin-triggers', cn:[
- {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class},
- {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger2Class}
- ]};
- },
- getTrigger : function(index){
- return this.triggers[index];
- },
- initTrigger : function(){
- var ts = this.trigger.select('.x-form-trigger', true);
- this.wrap.setStyle('overflow', 'hidden');
- var triggerField = this;
- ts.each(function(t, all, index){
- t.hide = function(){
- var w = triggerField.wrap.getWidth();
- this.dom.style.display = 'none';
- triggerField.el.setWidth(w-triggerField.trigger.getWidth());
- };
- t.show = function(){
- var w = triggerField.wrap.getWidth();
- this.dom.style.display = '';
- triggerField.el.setWidth(w-triggerField.trigger.getWidth());
- };
- var triggerIndex = 'Trigger'+(index+1);
- if(this['hide'+triggerIndex]){
- t.dom.style.display = 'none';
- }
- t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
- t.addClassOnOver('x-form-trigger-over');
- t.addClassOnClick('x-form-trigger-click');
- }, this);
- this.triggers = ts.elements;
- },
- onTrigger1Click : Ext.emptyFn,
- onTrigger2Click : Ext.emptyFn
- });
- Ext.reg('trigger', Ext.form.TriggerField);
- Ext.form.TextArea = Ext.extend(Ext.form.TextField, {
-
- growMin : 60,
-
- growMax: 1000,
- growAppend : ' \n ',
- growPad : 0,
- enterIsSpecial : false,
-
- preventScrollbars: false,
-
- onRender : function(ct, position){
- if(!this.el){
- this.defaultAutoCreate = {
- tag: "textarea",
- style:"width:100px;height:60px;",
- autocomplete: "off"
- };
- }
- Ext.form.TextArea.superclass.onRender.call(this, ct, position);
- if(this.grow){
- this.textSizeEl = Ext.DomHelper.append(document.body, {
- tag: "pre", cls: "x-form-grow-sizer"
- });
- if(this.preventScrollbars){
- this.el.setStyle("overflow", "hidden");
- }
- this.el.setHeight(this.growMin);
- }
- },
- onDestroy : function(){
- if(this.textSizeEl){
- Ext.removeNode(this.textSizeEl);
- }
- Ext.form.TextArea.superclass.onDestroy.call(this);
- },
- fireKey : function(e){
- if(e.isSpecialKey() && (this.enterIsSpecial || (e.getKey() != e.ENTER || e.hasModifier()))){
- this.fireEvent("specialkey", this, e);
- }
- },
- onKeyUp : function(e){
- if(!e.isNavKeyPress() || e.getKey() == e.ENTER){
- this.autoSize();
- }
- },
-
- autoSize : function(){
- if(!this.grow || !this.textSizeEl){
- return;
- }
- var el = this.el;
- var v = el.dom.value;
- var ts = this.textSizeEl;
- ts.innerHTML = '';
- ts.appendChild(document.createTextNode(v));
- v = ts.innerHTML;
- Ext.fly(ts).setWidth(this.el.getWidth());
- if(v.length < 1){
- v = "  ";
- }else{
- if(Ext.isIE){
- v = v.replace(/\n/g, '<p> </p>');
- }
- v += this.growAppend;
- }
- ts.innerHTML = v;
- var h = Math.min(this.growMax, Math.max(ts.offsetHeight, this.growMin)+this.growPad);
- if(h != this.lastHeight){
- this.lastHeight = h;
- this.el.setHeight(h);
- this.fireEvent("autosize", this, h);
- }
- }
- });
- Ext.reg('textarea', Ext.form.TextArea);
- Ext.form.NumberField = Ext.extend(Ext.form.TextField, {
-
- fieldClass: "x-form-field x-form-num-field",
-
- allowDecimals : true,
-
- decimalSeparator : ".",
-
- decimalPrecision : 2,
-
- allowNegative : true,
-
- minValue : Number.NEGATIVE_INFINITY,
-
- maxValue : Number.MAX_VALUE,
-
- minText : "The minimum value for this field is {0}",
-
- maxText : "The maximum value for this field is {0}",
-
- nanText : "{0} is not a valid number",
-
- baseChars : "0123456789",
- initEvents : function(){
- Ext.form.NumberField.superclass.initEvents.call(this);
- var allowed = this.baseChars+'';
- if(this.allowDecimals){
- allowed += this.decimalSeparator;
- }
- if(this.allowNegative){
- allowed += "-";
- }
- this.stripCharsRe = new RegExp('[^'+allowed+']', 'gi');
- var keyPress = function(e){
- var k = e.getKey();
- if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){
- return;
- }
- var c = e.getCharCode();
- if(allowed.indexOf(String.fromCharCode(c)) === -1){
- e.stopEvent();
- }
- };
- this.el.on("keypress", keyPress, this);
- },
- validateValue : function(value){
- if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){
- return false;
- }
- if(value.length < 1){ return true;
- }
- value = String(value).replace(this.decimalSeparator, ".");
- if(isNaN(value)){
- this.markInvalid(String.format(this.nanText, value));
- return false;
- }
- var num = this.parseValue(value);
- if(num < this.minValue){
- this.markInvalid(String.format(this.minText, this.minValue));
- return false;
- }
- if(num > this.maxValue){
- this.markInvalid(String.format(this.maxText, this.maxValue));
- return false;
- }
- return true;
- },
- getValue : function(){
- return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)));
- },
- setValue : function(v){
- v = parseFloat(v);
- v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
- Ext.form.NumberField.superclass.setValue.call(this, v);
- },
- parseValue : function(value){
- value = parseFloat(String(value).replace(this.decimalSeparator, "."));
- return isNaN(value) ? '' : value;
- },
- fixPrecision : function(value){
- var nan = isNaN(value);
- if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
- return nan ? '' : value;
- }
- return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));
- },
- beforeBlur : function(){
- var v = this.parseValue(this.getRawValue());
- if(v){
- this.setValue(this.fixPrecision(v));
- }
- }
- });
- Ext.reg('numberfield', Ext.form.NumberField);
- Ext.form.DateField = Ext.extend(Ext.form.TriggerField, {
-
- format : "m/d/y",
-
- altFormats : "m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",
-
- disabledDays : null,
-
- disabledDaysText : "Disabled",
-
- disabledDates : null,
-
- disabledDatesText : "Disabled",
-
- minValue : null,
-
- maxValue : null,
-
- minText : "The date in this field must be equal to or after {0}",
-
- maxText : "The date in this field must be equal to or before {0}",
-
- invalidText : "{0} is not a valid date - it must be in the format {1}",
-
- triggerClass : 'x-form-date-trigger',
-
- defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"},
- initComponent : function(){
- Ext.form.DateField.superclass.initComponent.call(this);
- if(typeof this.minValue == "string"){
- this.minValue = this.parseDate(this.minValue);
- }
- if(typeof this.maxValue == "string"){
- this.maxValue = this.parseDate(this.maxValue);
- }
- this.ddMatch = null;
- if(this.disabledDates){
- var dd = this.disabledDates;
- var re = "(?:";
- for(var i = 0; i < dd.length; i++){
- re += dd[i];
- if(i != dd.length-1) re += "|";
- }
- this.ddMatch = new RegExp(re + ")");
- }
- },
- validateValue : function(value){
- value = this.formatDate(value);
- if(!Ext.form.DateField.superclass.validateValue.call(this, value)){
- return false;
- }
- if(value.length < 1){ return true;
- }
- var svalue = value;
- value = this.parseDate(value);
- if(!value){
- this.markInvalid(String.format(this.invalidText, svalue, this.format));
- return false;
- }
- var time = value.getTime();
- if(this.minValue && time < this.minValue.getTime()){
- this.markInvalid(String.format(this.minText, this.formatDate(this.minValue)));
- return false;
- }
- if(this.maxValue && time > this.maxValue.getTime()){
- this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue)));
- return false;
- }
- if(this.disabledDays){
- var day = value.getDay();
- for(var i = 0; i < this.disabledDays.length; i++) {
- if(day === this.disabledDays[i]){
- this.markInvalid(this.disabledDaysText);
- return false;
- }
- }
- }
- var fvalue = this.formatDate(value);
- if(this.ddMatch && this.ddMatch.test(fvalue)){
- this.markInvalid(String.format(this.disabledDatesText, fvalue));
- return false;
- }
- return true;
- },
- validateBlur : function(){
- return !this.menu || !this.menu.isVisible();
- },
-
- getValue : function(){
- return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || "";
- },
-
- setValue : function(date){
- Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
- },
- parseDate : function(value){
- if(!value || Ext.isDate(value)){
- return value;
- }
- var v = Date.parseDate(value, this.format);
- if(!v && this.altFormats){
- if(!this.altFormatsArray){
- this.altFormatsArray = this.altFormats.split("|");
- }
- for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){
- v = Date.parseDate(value, this.altFormatsArray[i]);
- }
- }
- return v;
- },
- onDestroy : function(){
- if(this.menu) {
- this.menu.destroy();
- }
- if(this.wrap){
- this.wrap.remove();
- }
- Ext.form.DateField.superclass.onDestroy.call(this);
- },
- formatDate : function(date){
- return Ext.isDate(date) ? date.dateFormat(this.format) : date;
- },
- menuListeners : {
- select: function(m, d){
- this.setValue(d);
- },
- show : function(){ this.onFocus();
- },
- hide : function(){
- this.focus.defer(10, this);
- var ml = this.menuListeners;
- this.menu.un("select", ml.select, this);
- this.menu.un("show", ml.show, this);
- this.menu.un("hide", ml.hide, this);
- }
- },
- onTriggerClick : function(){
- if(this.disabled){
- return;
- }
- if(this.menu == null){
- this.menu = new Ext.menu.DateMenu();
- }
- Ext.apply(this.menu.picker, {
- minDate : this.minValue,
- maxDate : this.maxValue,
- disabledDatesRE : this.ddMatch,
- disabledDatesText : this.disabledDatesText,
- disabledDays : this.disabledDays,
- disabledDaysText : this.disabledDaysText,
- format : this.format,
- minText : String.format(this.minText, this.formatDate(this.minValue)),
- maxText : String.format(this.maxText, this.formatDate(this.maxValue))
- });
- this.menu.on(Ext.apply({}, this.menuListeners, {
- scope:this
- }));
- this.menu.picker.setValue(this.getValue() || new Date());
- this.menu.show(this.el, "tl-bl?");
- },
- beforeBlur : function(){
- var v = this.parseDate(this.getRawValue());
- if(v){
- this.setValue(v);
- }
- }
-
-
-
-
- });
- Ext.reg('datefield', Ext.form.DateField);
- Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {
-
-
-
-
-
- defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},
-
-
-
-
-
-
- listClass: '',
-
- selectedClass: 'x-combo-selected',
-
- triggerClass : 'x-form-arrow-trigger',
-
- shadow:'sides',
-
- listAlign: 'tl-bl?',
-
- maxHeight: 300,
-
- minHeight: 90,
-
- triggerAction: 'query',
-
- minChars : 4,
-
- typeAhead: false,
-
- queryDelay: 500,
-
- pageSize: 0,
-
- selectOnFocus:false,
-
- queryParam: 'query',
-
- loadingText: 'Loading...',
-
- resizable: false,
-
- handleHeight : 8,
-
- editable: true,
-
- allQuery: '',
-
- mode: 'remote',
-
- minListWidth : 70,
-
- forceSelection:false,
-
- typeAheadDelay : 250,
-
-
- lazyInit : true,
- initComponent : function(){
- Ext.form.ComboBox.superclass.initComponent.call(this);
- this.addEvents(
-
- 'expand',
-
- 'collapse',
-
- 'beforeselect',
-
- 'select',
-
- 'beforequery'
- );
- if(this.transform){
- this.allowDomMove = false;
- var s = Ext.getDom(this.transform);
- if(!this.hiddenName){
- this.hiddenName = s.name;
- }
- if(!this.store){
- this.mode = 'local';
- var d = [], opts = s.options;
- for(var i = 0, len = opts.length;i < len; i++){
- var o = opts[i];
- var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text;
- if(o.selected) {
- this.value = value;
- }
- d.push([value, o.text]);
- }
- this.store = new Ext.data.SimpleStore({
- 'id': 0,
- fields: ['value', 'text'],
- data : d
- });
- this.valueField = 'value';
- this.displayField = 'text';
- }
- s.name = Ext.id(); if(!this.lazyRender){
- this.target = true;
- this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);
- Ext.removeNode(s); this.render(this.el.parentNode);
- }else{
- Ext.removeNode(s); }
- }
- this.selectedIndex = -1;
- if(this.mode == 'local'){
- if(this.initialConfig.queryDelay === undefined){
- this.queryDelay = 10;
- }
- if(this.initialConfig.minChars === undefined){
- this.minChars = 0;
- }
- }
- },
- onRender : function(ct, position){
- Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
- if(this.hiddenName){
- this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)},
- 'before', true);
- this.hiddenField.value =
- this.hiddenValue !== undefined ? this.hiddenValue :
- this.value !== undefined ? this.value : '';
- this.el.dom.removeAttribute('name');
- }
- if(Ext.isGecko){
- this.el.dom.setAttribute('autocomplete', 'off');
- }
- if(!this.lazyInit){
- this.initList();
- }else{
- this.on('focus', this.initList, this, {single: true});
- }
- if(!this.editable){
- this.editable = true;
- this.setEditable(false);
- }
- },
- initList : function(){
- if(!this.list){
- var cls = 'x-combo-list';
- this.list = new Ext.Layer({
- shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false
- });
- var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
- this.list.setWidth(lw);
- this.list.swallowEvent('mousewheel');
- this.assetHeight = 0;
- if(this.title){
- this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
- this.assetHeight += this.header.getHeight();
- }
- this.innerList = this.list.createChild({cls:cls+'-inner'});
- this.innerList.on('mouseover', this.onViewOver, this);
- this.innerList.on('mousemove', this.onViewMove, this);
- this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
- if(this.pageSize){
- this.footer = this.list.createChild({cls:cls+'-ft'});
- this.pageTb = new Ext.PagingToolbar({
- store:this.store,
- pageSize: this.pageSize,
- renderTo:this.footer
- });
- this.assetHeight += this.footer.getHeight();
- }
- if(!this.tpl){
-
- this.tpl = '<tpl for="."><div class="'+cls+'-item">{' + this.displayField + '}</div></tpl>';
- }
-
- this.view = new Ext.DataView({
- applyTo: this.innerList,
- tpl: this.tpl,
- singleSelect: true,
- selectedClass: this.selectedClass,
- itemSelector: this.itemSelector || '.' + cls + '-item'
- });
- this.view.on('click', this.onViewClick, this);
- this.bindStore(this.store, true);
- if(this.resizable){
- this.resizer = new Ext.Resizable(this.list, {
- pinned:true, handles:'se'
- });
- this.resizer.on('resize', function(r, w, h){
- this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;
- this.listWidth = w;
- this.innerList.setWidth(w - this.list.getFrameWidth('lr'));
- this.restrictHeight();
- }, this);
- this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px');
- }
- }
- },
- bindStore : function(store, initial){
- if(this.store && !initial){
- this.store.un('beforeload', this.onBeforeLoad, this);
- this.store.un('load', this.onLoad, this);
- this.store.un('loadexception', this.collapse, this);
- if(!store){
- this.store = null;
- if(this.view){
- this.view.setStore(null);
- }
- }
- }
- if(store){
- this.store = Ext.StoreMgr.lookup(store);
- this.store.on('beforeload', this.onBeforeLoad, this);
- this.store.on('load', this.onLoad, this);
- this.store.on('loadexception', this.collapse, this);
- if(this.view){
- this.view.setStore(store);
- }
- }
- },
- initEvents : function(){
- Ext.form.ComboBox.superclass.initEvents.call(this);
- this.keyNav = new Ext.KeyNav(this.el, {
- "up" : function(e){
- this.inKeyMode = true;
- this.selectPrev();
- },
- "down" : function(e){
- if(!this.isExpanded()){
- this.onTriggerClick();
- }else{
- this.inKeyMode = true;
- this.selectNext();
- }
- },
- "enter" : function(e){
- this.onViewClick();
- this.delayedCheck = true;
- this.unsetDelayCheck.defer(10, this);
- },
- "esc" : function(e){
- this.collapse();
- },
- "tab" : function(e){
- this.onViewClick(false);
- return true;
- },
- scope : this,
- doRelay : function(foo, bar, hname){
- if(hname == 'down' || this.scope.isExpanded()){
- return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
- }
- return true;
- },
- forceKeyDown : true
- });
- this.queryDelay = Math.max(this.queryDelay || 10,
- this.mode == 'local' ? 10 : 250);
- this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
- if(this.typeAhead){
- this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
- }
- if(this.editable !== false){
- this.el.on("keyup", this.onKeyUp, this);
- }
- if(this.forceSelection){
- this.on('blur', this.doForce, this);
- }
- },
- onDestroy : function(){
- if(this.view){
- this.view.el.removeAllListeners();
- this.view.el.remove();
- this.view.purgeListeners();
- }
- if(this.list){
- this.list.destroy();
- }
- this.bindStore(null);
- Ext.form.ComboBox.superclass.onDestroy.call(this);
- },
- unsetDelayCheck : function(){
- delete this.delayedCheck;
- },
- fireKey : function(e){
- if(e.isNavKeyPress() && !this.isExpanded() && !this.delayedCheck){
- this.fireEvent("specialkey", this, e);
- }
- },
- onResize: function(w, h){
- Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
- if(this.list && this.listWidth === undefined){
- var lw = Math.max(w, this.minListWidth);
- this.list.setWidth(lw);
- this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
- }
- },
- onEnable: function(){
- Ext.form.ComboBox.superclass.onEnable.apply(this, arguments);
- if(this.hiddenField){
- this.hiddenField.disabled = false;
- }
- },
- onDisable: function(){
- Ext.form.ComboBox.superclass.onDisable.apply(this, arguments);
- if(this.hiddenField){
- this.hiddenField.disabled = true;
- }
- },
-
- setEditable : function(value){
- if(value == this.editable){
- return;
- }
- this.editable = value;
- if(!value){
- this.el.dom.setAttribute('readOnly', true);
- this.el.on('mousedown', this.onTriggerClick, this);
- this.el.addClass('x-combo-noedit');
- }else{
- this.el.dom.setAttribute('readOnly', false);
- this.el.un('mousedown', this.onTriggerClick, this);
- this.el.removeClass('x-combo-noedit');
- }
- },
- onBeforeLoad : function(){
- if(!this.hasFocus){
- return;
- }
- this.innerList.update(this.loadingText ?
- '<div class="loading-indicator">'+this.loadingText+'</div>' : '');
- this.restrictHeight();
- this.selectedIndex = -1;
- },
- onLoad : function(){
- if(!this.hasFocus){
- return;
- }
- if(this.store.getCount() > 0){
- this.expand();
- this.restrictHeight();
- if(this.lastQuery == this.allQuery){
- if(this.editable){
- this.el.dom.select();
- }
- if(!this.selectByValue(this.value, true)){
- this.select(0, true);
- }
- }else{
- this.selectNext();
- if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){
- this.taTask.delay(this.typeAheadDelay);
- }
- }
- }else{
- this.onEmptyResults();
- }
- },
- onTypeAhead : function(){
- if(this.store.getCount() > 0){
- var r = this.store.getAt(0);
- var newValue = r.data[this.displayField];
- var len = newValue.length;
- var selStart = this.getRawValue().length;
- if(selStart != len){
- this.setRawValue(newValue);
- this.selectText(selStart, newValue.length);
- }
- }
- },
- onSelect : function(record, index){
- if(this.fireEvent('beforeselect', this, record, index) !== false){
- this.setValue(record.data[this.valueField || this.displayField]);
- this.collapse();
- this.fireEvent('select', this, record, index);
- }
- },
-
- getValue : function(){
- if(this.valueField){
- return typeof this.value != 'undefined' ? this.value : '';
- }else{
- return Ext.form.ComboBox.superclass.getValue.call(this);
- }
- },
-
- clearValue : function(){
- if(this.hiddenField){
- this.hiddenField.value = '';
- }
- this.setRawValue('');
- this.lastSelectionText = '';
- this.applyEmptyText();
- this.value = '';
- },
-
- setValue : function(v){
- var text = v;
- if(this.valueField){
- var r = this.findRecord(this.valueField, v);
- if(r){
- text = r.data[this.displayField];
- }else if(this.valueNotFoundText !== undefined){
- text = this.valueNotFoundText;
- }
- }
- this.lastSelectionText = text;
- if(this.hiddenField){
- this.hiddenField.value = v;
- }
- Ext.form.ComboBox.superclass.setValue.call(this, text);
- this.value = v;
- },
- findRecord : function(prop, value){
- var record;
- if(this.store.getCount() > 0){
- this.store.each(function(r){
- if(r.data[prop] == value){
- record = r;
- return false;
- }
- });
- }
- return record;
- },
- onViewMove : function(e, t){
- this.inKeyMode = false;
- },
- onViewOver : function(e, t){
- if(this.inKeyMode){ return;
- }
- var item = this.view.findItemFromChild(t);
- if(item){
- var index = this.view.indexOf(item);
- this.select(index, false);
- }
- },
- onViewClick : function(doFocus){
- var index = this.view.getSelectedIndexes()[0];
- var r = this.store.getAt(index);
- if(r){
- this.onSelect(r, index);
- }
- if(doFocus !== false){
- this.el.focus();
- }
- },
- restrictHeight : function(){
- this.innerList.dom.style.height = '';
- var inner = this.innerList.dom;
- var pad = this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight;
- var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight);
- var ha = this.getPosition()[1]-Ext.getBody().getScroll().top;
- var hb = Ext.lib.Dom.getViewHeight()-ha-this.getSize().height;
- var space = Math.max(ha, hb, this.minHeight || 0)-this.list.shadow.offset-pad-2;
- h = Math.min(h, space, this.maxHeight);
-
- this.innerList.setHeight(h);
- this.list.beginUpdate();
- this.list.setHeight(h+pad);
- this.list.alignTo(this.el, this.listAlign);
- this.list.endUpdate();
- },
- onEmptyResults : function(){
- this.collapse();
- },
-
- isExpanded : function(){
- return this.list && this.list.isVisible();
- },
-
- selectByValue : function(v, scrollIntoView){
- if(v !== undefined && v !== null){
- var r = this.findRecord(this.valueField || this.displayField, v);
- if(r){
- this.select(this.store.indexOf(r), scrollIntoView);
- return true;
- }
- }
- return false;
- },
-
- select : function(index, scrollIntoView){
- this.selectedIndex = index;
- this.view.select(index);
- if(scrollIntoView !== false){
- var el = this.view.getNode(index);
- if(el){
- this.innerList.scrollChildIntoView(el, false);
- }
- }
- },
- selectNext : function(){
- var ct = this.store.getCount();
- if(ct > 0){
- if(this.selectedIndex == -1){
- this.select(0);
- }else if(this.selectedIndex < ct-1){
- this.select(this.selectedIndex+1);
- }
- }
- },
- selectPrev : function(){
- var ct = this.store.getCount();
- if(ct > 0){
- if(this.selectedIndex == -1){
- this.select(0);
- }else if(this.selectedIndex != 0){
- this.select(this.selectedIndex-1);
- }
- }
- },
- onKeyUp : function(e){
- if(this.editable !== false && !e.isSpecialKey()){
- this.lastKey = e.getKey();
- this.dqTask.delay(this.queryDelay);
- }
- },
- validateBlur : function(){
- return !this.list || !this.list.isVisible();
- },
- initQuery : function(){
- this.doQuery(this.getRawValue());
- },
- doForce : function(){
- if(this.el.dom.value.length > 0){
- this.el.dom.value =
- this.lastSelectionText === undefined ? '' : this.lastSelectionText;
- this.applyEmptyText();
- }
- },
-
- doQuery : function(q, forceAll){
- if(q === undefined || q === null){
- q = '';
- }
- var qe = {
- query: q,
- forceAll: forceAll,
- combo: this,
- cancel:false
- };
- if(this.fireEvent('beforequery', qe)===false || qe.cancel){
- return false;
- }
- q = qe.query;
- forceAll = qe.forceAll;
- if(forceAll === true || (q.length >= this.minChars)){
- if(this.lastQuery !== q){
- this.lastQuery = q;
- if(this.mode == 'local'){
- this.selectedIndex = -1;
- if(forceAll){
- this.store.clearFilter();
- }else{
- this.store.filter(this.displayField, q);
- }
- this.onLoad();
- }else{
- this.store.baseParams[this.queryParam] = q;
- this.store.load({
- params: this.getParams(q)
- });
- this.expand();
- }
- }else{
- this.selectedIndex = -1;
- this.onLoad();
- }
- }
- },
- getParams : function(q){
- var p = {};
- if(this.pageSize){
- p.start = 0;
- p.limit = this.pageSize;
- }
- return p;
- },
-
- collapse : function(){
- if(!this.isExpanded()){
- return;
- }
- this.list.hide();
- Ext.getDoc().un('mousewheel', this.collapseIf, this);
- Ext.getDoc().un('mousedown', this.collapseIf, this);
- this.fireEvent('collapse', this);
- },
- collapseIf : function(e){
- if(!e.within(this.wrap) && !e.within(this.list)){
- this.collapse();
- }
- },
-
- expand : function(){
- if(this.isExpanded() || !this.hasFocus){
- return;
- }
- this.list.alignTo(this.wrap, this.listAlign);
- this.list.show();
- this.innerList.setOverflow('auto'); Ext.getDoc().on('mousewheel', this.collapseIf, this);
- Ext.getDoc().on('mousedown', this.collapseIf, this);
- this.fireEvent('expand', this);
- },
- onTriggerClick : function(){
- if(this.disabled){
- return;
- }
- if(this.isExpanded()){
- this.collapse();
- this.el.focus();
- }else {
- this.onFocus({});
- if(this.triggerAction == 'all') {
- this.doQuery(this.allQuery, true);
- } else {
- this.doQuery(this.getRawValue());
- }
- this.el.focus();
- }
- }
-
-
-
-
- });
- Ext.reg('combo', Ext.form.ComboBox);
- Ext.form.Checkbox = Ext.extend(Ext.form.Field, {
-
- focusClass : undefined,
-
- fieldClass: "x-form-field",
-
- checked: false,
-
- defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
-
-
- initComponent : function(){
- Ext.form.Checkbox.superclass.initComponent.call(this);
- this.addEvents(
-
- 'check'
- );
- },
- onResize : function(){
- Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
- if(!this.boxLabel){
- this.el.alignTo(this.wrap, 'c-c');
- }
- },
-
- initEvents : function(){
- Ext.form.Checkbox.superclass.initEvents.call(this);
- this.el.on("click", this.onClick, this);
- this.el.on("change", this.onClick, this);
- },
- getResizeEl : function(){
- return this.wrap;
- },
- getPositionEl : function(){
- return this.wrap;
- },
-
- markInvalid : Ext.emptyFn,
-
- clearInvalid : Ext.emptyFn,
- onRender : function(ct, position){
- Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
- if(this.inputValue !== undefined){
- this.el.dom.value = this.inputValue;
- }
- this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
- if(this.boxLabel){
- this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
- }
- if(this.checked){
- this.setValue(true);
- }else{
- this.checked = this.el.dom.checked;
- }
- },
-
- onDestroy : function(){
- if(this.wrap){
- this.wrap.remove();
- }
- Ext.form.Checkbox.superclass.onDestroy.call(this);
- },
- initValue : Ext.emptyFn,
-
- getValue : function(){
- if(this.rendered){
- return this.el.dom.checked;
- }
- return false;
- },
- onClick : function(){
- if(this.el.dom.checked != this.checked){
- this.setValue(this.el.dom.checked);
- }
- },
-
- setValue : function(v){
- this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
- if(this.el && this.el.dom){
- this.el.dom.checked = this.checked;
- this.el.dom.defaultChecked = this.checked;
- }
- this.fireEvent("check", this, this.checked);
- }
- });
- Ext.reg('checkbox', Ext.form.Checkbox);
- Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {
- inputType: 'radio',
-
- markInvalid : Ext.emptyFn,
-
- clearInvalid : Ext.emptyFn,
-
- getGroupValue : function(){
- var p = this.el.up('form') || Ext.getBody();
- var c = p.child('input[name='+this.el.dom.name+']:checked', true);
- return c ? c.value : null;
- },
-
- onClick : function(){
- if(this.el.dom.checked != this.checked){
- var p = this.el.up('form') || Ext.getBody();
- var els = p.select('input[name='+this.el.dom.name+']');
- els.each(function(el){
- if(el.dom.id == this.id){
- this.setValue(true);
- }else{
- Ext.getCmp(el.dom.id).setValue(false);
- }
- }, this);
- }
- },
-
- setValue : function(v){
- if (typeof v == 'boolean') {
- Ext.form.Radio.superclass.setValue.call(this, v);
- } else {
- var r = this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']', true);
- if (r){
- r.checked = true;
- };
- }
- }
- });
- Ext.reg('radio', Ext.form.Radio);
- Ext.form.Hidden = Ext.extend(Ext.form.Field, {
-
- inputType : 'hidden',
-
- onRender : function(){
- Ext.form.Hidden.superclass.onRender.apply(this, arguments);
- },
-
- initEvents : function(){
- this.originalValue = this.getValue();
- },
-
- setSize : Ext.emptyFn,
- setWidth : Ext.emptyFn,
- setHeight : Ext.emptyFn,
- setPosition : Ext.emptyFn,
- setPagePosition : Ext.emptyFn,
- markInvalid : Ext.emptyFn,
- clearInvalid : Ext.emptyFn
- });
- Ext.reg('hidden', Ext.form.Hidden);
- Ext.form.BasicForm = function(el, config){
- Ext.apply(this, config);
-
- this.items = new Ext.util.MixedCollection(false, function(o){
- return o.id || (o.id = Ext.id());
- });
- this.addEvents(
-
- 'beforeaction',
-
- 'actionfailed',
-
- 'actioncomplete'
- );
-
- if(el){
- this.initEl(el);
- }
- Ext.form.BasicForm.superclass.constructor.call(this);
- };
- Ext.extend(Ext.form.BasicForm, Ext.util.Observable, {
-
-
-
-
-
-
-
- timeout: 30,
- activeAction : null,
-
- trackResetOnLoad : false,
-
-
-
- initEl : function(el){
- this.el = Ext.get(el);
- this.id = this.el.id || Ext.id();
- if(!this.standardSubmit){
- this.el.on('submit', this.onSubmit, this);
- }
- this.el.addClass('x-form');
- },
-
- getEl: function(){
- return this.el;
- },
- onSubmit : function(e){
- e.stopEvent();
- },
-
- destroy: function() {
- this.items.each(function(f){
- Ext.destroy(f);
- });
- if(this.el){
- this.el.removeAllListeners();
- this.el.remove();
- }
- this.purgeListeners();
- },
-
- isValid : function(){
- var valid = true;
- this.items.each(function(f){
- if(!f.validate()){
- valid = false;
- }
- });
- return valid;
- },
-
- isDirty : function(){
- var dirty = false;
- this.items.each(function(f){
- if(f.isDirty()){
- dirty = true;
- return false;
- }
- });
- return dirty;
- },
-
- doAction : function(action, options){
- if(typeof action == 'string'){
- action = new Ext.form.Action.ACTION_TYPES[action](this, options);
- }
- if(this.fireEvent('beforeaction', this, action) !== false){
- this.beforeAction(action);
- action.run.defer(100, action);
- }
- return this;
- },
-
- submit : function(options){
- if(this.standardSubmit){
- var v = this.isValid();
- if(v){
- this.el.dom.submit();
- }
- return v;
- }
- this.doAction('submit', options);
- return this;
- },
-
- load : function(options){
- this.doAction('load', options);
- return this;
- },
-
- updateRecord : function(record){
- record.beginEdit();
- var fs = record.fields;
- fs.each(function(f){
- var field = this.findField(f.name);
- if(field){
- record.set(f.name, field.getValue());
- }
- }, this);
- record.endEdit();
- return this;
- },
-
- loadRecord : function(record){
- this.setValues(record.data);
- return this;
- },
- beforeAction : function(action){
- var o = action.options;
- if(o.waitMsg){
- if(this.waitMsgTarget === true){
- this.el.mask(o.waitMsg, 'x-mask-loading');
- }else if(this.waitMsgTarget){
- this.waitMsgTarget = Ext.get(this.waitMsgTarget);
- this.waitMsgTarget.mask(o.waitMsg, 'x-mask-loading');
- }else{
- Ext.MessageBox.wait(o.waitMsg, o.waitTitle || this.waitTitle || 'Please Wait...');
- }
- }
- },
- afterAction : function(action, success){
- this.activeAction = null;
- var o = action.options;
- if(o.waitMsg){
- if(this.waitMsgTarget === true){
- this.el.unmask();
- }else if(this.waitMsgTarget){
- this.waitMsgTarget.unmask();
- }else{
- Ext.MessageBox.updateProgress(1);
- Ext.MessageBox.hide();
- }
- }
- if(success){
- if(o.reset){
- this.reset();
- }
- Ext.callback(o.success, o.scope, [this, action]);
- this.fireEvent('actioncomplete', this, action);
- }else{
- Ext.callback(o.failure, o.scope, [this, action]);
- this.fireEvent('actionfailed', this, action);
- }
- },
-
- findField : function(id){
- var field = this.items.get(id);
- if(!field){
- this.items.each(function(f){
- if(f.isFormField && (f.dataIndex == id || f.id == id || f.getName() == id)){
- field = f;
- return false;
- }
- });
- }
- return field || null;
- },
-
- markInvalid : function(errors){
- if(Ext.isArray(errors)){
- for(var i = 0, len = errors.length; i < len; i++){
- var fieldError = errors[i];
- var f = this.findField(fieldError.id);
- if(f){
- f.markInvalid(fieldError.msg);
- }
- }
- }else{
- var field, id;
- for(id in errors){
- if(typeof errors[id] != 'function' && (field = this.findField(id))){
- field.markInvalid(errors[id]);
- }
- }
- }
- return this;
- },
-
- setValues : function(values){
- if(Ext.isArray(values)){ for(var i = 0, len = values.length; i < len; i++){
- var v = values[i];
- var f = this.findField(v.id);
- if(f){
- f.setValue(v.value);
- if(this.trackResetOnLoad){
- f.originalValue = f.getValue();
- }
- }
- }
- }else{ var field, id;
- for(id in values){
- if(typeof values[id] != 'function' && (field = this.findField(id))){
- field.setValue(values[id]);
- if(this.trackResetOnLoad){
- field.originalValue = field.getValue();
- }
- }
- }
- }
- return this;
- },
-
- getValues : function(asString){
- var fs = Ext.lib.Ajax.serializeForm(this.el.dom);
- if(asString === true){
- return fs;
- }
- return Ext.urlDecode(fs);
- },
-
- clearInvalid : function(){
- this.items.each(function(f){
- f.clearInvalid();
- });
- return this;
- },
-
- reset : function(){
- this.items.each(function(f){
- f.reset();
- });
- return this;
- },
-
- add : function(){
- this.items.addAll(Array.prototype.slice.call(arguments, 0));
- return this;
- },
-
- remove : function(field){
- this.items.remove(field);
- return this;
- },
-
- render : function(){
- this.items.each(function(f){
- if(f.isFormField && !f.rendered && document.getElementById(f.id)){ f.applyToMarkup(f.id);
- }
- });
- return this;
- },
-
- applyToFields : function(o){
- this.items.each(function(f){
- Ext.apply(f, o);
- });
- return this;
- },
-
- applyIfToFields : function(o){
- this.items.each(function(f){
- Ext.applyIf(f, o);
- });
- return this;
- }
- });
- Ext.BasicForm = Ext.form.BasicForm;
- Ext.FormPanel = Ext.extend(Ext.Panel, {
-
-
-
-
- buttonAlign:'center',
-
- minButtonWidth:75,
-
- labelAlign:'left',
-
- monitorValid : false,
-
- monitorPoll : 200,
-
- layout: 'form',
- initComponent :function(){
- this.form = this.createForm();
-
- Ext.FormPanel.superclass.initComponent.call(this);
- this.addEvents(
-
- 'clientvalidation'
- );
- this.relayEvents(this.form, ['beforeaction', 'actionfailed', 'actioncomplete']);
- },
- createForm: function(){
- delete this.initialConfig.listeners;
- return new Ext.form.BasicForm(null, this.initialConfig);
- },
- initFields : function(){
- var f = this.form;
- var formPanel = this;
- var fn = function(c){
- if(c.doLayout && c != formPanel){
- Ext.applyIf(c, {
- labelAlign: c.ownerCt.labelAlign,
- labelWidth: c.ownerCt.labelWidth,
- itemCls: c.ownerCt.itemCls
- });
- if(c.items){
- c.items.each(fn);
- }
- }else if(c.isFormField){
- f.add(c);
- }
- }
- this.items.each(fn);
- },
- getLayoutTarget : function(){
- return this.form.el;
- },
-
- getForm : function(){
- return this.form;
- },
- onRender : function(ct, position){
- this.initFields();
- Ext.FormPanel.superclass.onRender.call(this, ct, position);
- var o = {
- tag: 'form',
- method : this.method || 'POST',
- id : this.formId || Ext.id()
- };
- if(this.fileUpload) {
- o.enctype = 'multipart/form-data';
- }
- this.form.initEl(this.body.createChild(o));
- },
-
- beforeDestroy: function(){
- Ext.FormPanel.superclass.beforeDestroy.call(this);
- Ext.destroy(this.form);
- },
- initEvents : function(){
- Ext.FormPanel.superclass.initEvents.call(this);
- this.items.on('remove', this.onRemove, this);
- this.items.on('add', this.onAdd, this);
- if(this.monitorValid){ this.startMonitoring();
- }
- },
-
- onAdd : function(ct, c) {
- if (c.isFormField) {
- this.form.add(c);
- }
- },
-
- onRemove : function(c) {
- if (c.isFormField) {
- Ext.destroy(c.container.up('.x-form-item'));
- this.form.remove(c);
- }
- },
-
- startMonitoring : function(){
- if(!this.bound){
- this.bound = true;
- Ext.TaskMgr.start({
- run : this.bindHandler,
- interval : this.monitorPoll || 200,
- scope: this
- });
- }
- },
-
- stopMonitoring : function(){
- this.bound = false;
- },
-
- load : function(){
- this.form.load.apply(this.form, arguments);
- },
- onDisable : function(){
- Ext.FormPanel.superclass.onDisable.call(this);
- if(this.form){
- this.form.items.each(function(){
- this.disable();
- });
- }
- },
- onEnable : function(){
- Ext.FormPanel.superclass.onEnable.call(this);
- if(this.form){
- this.form.items.each(function(){
- this.enable();
- });
- }
- },
- bindHandler : function(){
- if(!this.bound){
- return false; }
- var valid = true;
- this.form.items.each(function(f){
- if(!f.isValid(true)){
- valid = false;
- return false;
- }
- });
- if(this.buttons){
- for(var i = 0, len = this.buttons.length; i < len; i++){
- var btn = this.buttons[i];
- if(btn.formBind === true && btn.disabled === valid){
- btn.setDisabled(!valid);
- }
- }
- }
- this.fireEvent('clientvalidation', this, valid);
- }
- });
- Ext.reg('form', Ext.FormPanel);
- Ext.form.FormPanel = Ext.FormPanel;
- Ext.form.FieldSet = Ext.extend(Ext.Panel, {
-
-
-
-
-
- baseCls:'x-fieldset',
-
- layout: 'form',
-
- onRender : function(ct, position){
- if(!this.el){
- this.el = document.createElement('fieldset');
- this.el.id = this.id;
- if (this.title || this.header || this.checkboxToggle) {
- this.el.appendChild(document.createElement('legend')).className = 'x-fieldset-header';
- }
- }
- Ext.form.FieldSet.superclass.onRender.call(this, ct, position);
- if(this.checkboxToggle){
- var o = typeof this.checkboxToggle == 'object' ?
- this.checkboxToggle :
- {tag: 'input', type: 'checkbox', name: this.checkboxName || this.id+'-checkbox'};
- this.checkbox = this.header.insertFirst(o);
- this.checkbox.dom.checked = !this.collapsed;
- this.checkbox.on('click', this.onCheckClick, this);
- }
- },
-
- onCollapse : function(doAnim, animArg){
- if(this.checkbox){
- this.checkbox.dom.checked = false;
- }
- this.afterCollapse();
- },
-
- onExpand : function(doAnim, animArg){
- if(this.checkbox){
- this.checkbox.dom.checked = true;
- }
- this.afterExpand();
- },
-
- onCheckClick : function(){
- this[this.checkbox.dom.checked ? 'expand' : 'collapse']();
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- });
- Ext.reg('fieldset', Ext.form.FieldSet);
- Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {
-
- enableFormat : true,
-
- enableFontSize : true,
-
- enableColors : true,
-
- enableAlignments : true,
-
- enableLists : true,
-
- enableSourceEdit : true,
-
- enableLinks : true,
-
- enableFont : true,
-
- createLinkText : 'Please enter the URL for the link:',
-
- defaultLinkValue : 'http:/'+'/',
-
- fontFamilies : [
- 'Arial',
- 'Courier New',
- 'Tahoma',
- 'Times New Roman',
- 'Verdana'
- ],
- defaultFont: 'tahoma',
-
- validationEvent : false,
- deferHeight: true,
- initialized : false,
- activated : false,
- sourceEditMode : false,
- onFocus : Ext.emptyFn,
- iframePad:3,
- hideMode:'offsets',
- defaultAutoCreate : {
- tag: "textarea",
- style:"width:500px;height:300px;",
- autocomplete: "off"
- },
-
- initComponent : function(){
- this.addEvents(
-
- 'initialize',
-
- 'activate',
-
- 'beforesync',
-
- 'beforepush',
-
- 'sync',
-
- 'push',
-
- 'editmodechange'
- )
- },
- createFontOptions : function(){
- var buf = [], fs = this.fontFamilies, ff, lc;
- for(var i = 0, len = fs.length; i< len; i++){
- ff = fs[i];
- lc = ff.toLowerCase();
- buf.push(
- '<option value="',lc,'" style="font-family:',ff,';"',
- (this.defaultFont == lc ? ' selected="true">' : '>'),
- ff,
- '</option>'
- );
- }
- return buf.join('');
- },
-
- createToolbar : function(editor){
- function btn(id, toggle, handler){
- return {
- itemId : id,
- cls : 'x-btn-icon x-edit-'+id,
- enableToggle:toggle !== false,
- scope: editor,
- handler:handler||editor.relayBtnCmd,
- clickEvent:'mousedown',
- tooltip: editor.buttonTips[id] || undefined,
- tabIndex:-1
- };
- }
-
- var tb = new Ext.Toolbar({
- renderTo:this.wrap.dom.firstChild
- });
-
- tb.el.on('click', function(e){
- e.preventDefault();
- });
- if(this.enableFont && !Ext.isSafari){
- this.fontSelect = tb.el.createChild({
- tag:'select',
- cls:'x-font-select',
- html: this.createFontOptions()
- });
- this.fontSelect.on('change', function(){
- var font = this.fontSelect.dom.value;
- this.relayCmd('fontname', font);
- this.deferFocus();
- }, this);
- tb.add(
- this.fontSelect.dom,
- '-'
- );
- };
- if(this.enableFormat){
- tb.add(
- btn('bold'),
- btn('italic'),
- btn('underline')
- );
- };
- if(this.enableFontSize){
- tb.add(
- '-',
- btn('increasefontsize', false, this.adjustFont),
- btn('decreasefontsize', false, this.adjustFont)
- );
- };
- if(this.enableColors){
- tb.add(
- '-', {
- itemId:'forecolor',
- cls:'x-btn-icon x-edit-forecolor',
- clickEvent:'mousedown',
- tooltip: editor.buttonTips['forecolor'] || undefined,
- tabIndex:-1,
- menu : new Ext.menu.ColorMenu({
- allowReselect: true,
- focus: Ext.emptyFn,
- value:'000000',
- plain:true,
- selectHandler: function(cp, color){
- this.execCmd('forecolor', Ext.isSafari || Ext.isIE ? '#'+color : color);
- this.deferFocus();
- },
- scope: this,
- clickEvent:'mousedown'
- })
- }, {
- itemId:'backcolor',
- cls:'x-btn-icon x-edit-backcolor',
- clickEvent:'mousedown',
- tooltip: editor.buttonTips['backcolor'] || undefined,
- tabIndex:-1,
- menu : new Ext.menu.ColorMenu({
- focus: Ext.emptyFn,
- value:'FFFFFF',
- plain:true,
- allowReselect: true,
- selectHandler: function(cp, color){
- if(Ext.isGecko){
- this.execCmd('useCSS', false);
- this.execCmd('hilitecolor', color);
- this.execCmd('useCSS', true);
- this.deferFocus();
- }else{
- this.execCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isSafari || Ext.isIE ? '#'+color : color);
- this.deferFocus();
- }
- },
- scope:this,
- clickEvent:'mousedown'
- })
- }
- );
- };
- if(this.enableAlignments){
- tb.add(
- '-',
- btn('justifyleft'),
- btn('justifycenter'),
- btn('justifyright')
- );
- };
- if(!Ext.isSafari){
- if(this.enableLinks){
- tb.add(
- '-',
- btn('createlink', false, this.createLink)
- );
- };
- if(this.enableLists){
- tb.add(
- '-',
- btn('insertorderedlist'),
- btn('insertunorderedlist')
- );
- }
- if(this.enableSourceEdit){
- tb.add(
- '-',
- btn('sourceedit', true, function(btn){
- this.toggleSourceEdit(btn.pressed);
- })
- );
- }
- }
- this.tb = tb;
- },
-
- getDocMarkup : function(){
- return '<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';
- },
- getEditorBody : function(){
- return this.doc.body || this.doc.documentElement;
- },
-
- onRender : function(ct, position){
- Ext.form.HtmlEditor.superclass.onRender.call(this, ct, position);
- this.el.dom.style.border = '0 none';
- this.el.dom.setAttribute('tabIndex', -1);
- this.el.addClass('x-hidden');
- if(Ext.isIE){
- this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
- }
- this.wrap = this.el.wrap({
- cls:'x-html-editor-wrap', cn:{cls:'x-html-editor-tb'}
- });
- this.createToolbar(this);
- this.tb.items.each(function(item){
- if(item.itemId != 'sourceedit'){
- item.disable();
- }
- });
- var iframe = document.createElement('iframe');
- iframe.name = Ext.id();
- iframe.frameBorder = 'no';
- iframe.src=(Ext.SSL_SECURE_URL || "javascript:false");
- this.wrap.dom.appendChild(iframe);
- this.iframe = iframe;
- if(Ext.isIE){
- iframe.contentWindow.document.designMode = 'on';
- this.doc = iframe.contentWindow.document;
- this.win = iframe.contentWindow;
- } else {
- this.doc = (iframe.contentDocument || window.frames[iframe.name].document);
- this.win = window.frames[iframe.name];
- this.doc.designMode = 'on';
- }
- this.doc.open();
- this.doc.write(this.getDocMarkup())
- this.doc.close();
- var task = {
- run : function(){
- if(this.doc.body || this.doc.readyState == 'complete'){
- Ext.TaskMgr.stop(task);
- this.doc.designMode="on";
- this.initEditor.defer(10, this);
- }
- },
- interval : 10,
- duration:10000,
- scope: this
- };
- Ext.TaskMgr.start(task);
- if(!this.width){
- this.setSize(this.el.getSize());
- }
- },
-
- onResize : function(w, h){
- Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments);
- if(this.el && this.iframe){
- if(typeof w == 'number'){
- var aw = w - this.wrap.getFrameWidth('lr');
- this.el.setWidth(this.adjustWidth('textarea', aw));
- this.iframe.style.width = aw + 'px';
- }
- if(typeof h == 'number'){
- var ah = h - this.wrap.getFrameWidth('tb') - this.tb.el.getHeight();
- this.el.setHeight(this.adjustWidth('textarea', ah));
- this.iframe.style.height = ah + 'px';
- if(this.doc){
- this.getEditorBody().style.height = (ah - (this.iframePad*2)) + 'px';
- }
- }
- }
- },
-
- toggleSourceEdit : function(sourceEditMode){
- if(sourceEditMode === undefined){
- sourceEditMode = !this.sourceEditMode;
- }
- this.sourceEditMode = sourceEditMode === true;
- var btn = this.tb.items.get('sourceedit');
- if(btn.pressed !== this.sourceEditMode){
- btn.toggle(this.sourceEditMode);
- return;
- }
- if(this.sourceEditMode){
- this.tb.items.each(function(item){
- if(item.itemId != 'sourceedit'){
- item.disable();
- }
- });
- this.syncValue();
- this.iframe.className = 'x-hidden';
- this.el.removeClass('x-hidden');
- this.el.dom.removeAttribute('tabIndex');
- this.el.focus();
- }else{
- if(this.initialized){
- this.tb.items.each(function(item){
- item.enable();
- });
- }
- this.pushValue();
- this.iframe.className = '';
- this.el.addClass('x-hidden');
- this.el.dom.setAttribute('tabIndex', -1);
- this.deferFocus();
- }
- var lastSize = this.lastSize;
- if(lastSize){
- delete this.lastSize;
- this.setSize(lastSize);
- }
- this.fireEvent('editmodechange', this, this.sourceEditMode);
- },
-
- createLink : function(){
- var url = prompt(this.createLinkText, this.defaultLinkValue);
- if(url && url != 'http:/'+'/'){
- this.relayCmd('createlink', url);
- }
- },
-
- adjustSize : Ext.BoxComponent.prototype.adjustSize,
-
- getResizeEl : function(){
- return this.wrap;
- },
-
- getPositionEl : function(){
- return this.wrap;
- },
-
- initEvents : function(){
- this.originalValue = this.getValue();
- },
-
- markInvalid : Ext.emptyFn,
-
- clearInvalid : Ext.emptyFn,
- setValue : function(v){
- Ext.form.HtmlEditor.superclass.setValue.call(this, v);
- this.pushValue();
- },
-
- cleanHtml : function(html){
- html = String(html);
- if(html.length > 5){
- if(Ext.isSafari){
- html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
- }
- }
- if(html == ' '){
- html = '';
- }
- return html;
- },
-
- syncValue : function(){
- if(this.initialized){
- var bd = this.getEditorBody();
- var html = bd.innerHTML;
- if(Ext.isSafari){
- var bs = bd.getAttribute('style');
- var m = bs.match(/text-align:(.*?);/i);
- if(m && m[1]){
- html = '<div style="'+m[0]+'">' + html + '</div>';
- }
- }
- html = this.cleanHtml(html);
- if(this.fireEvent('beforesync', this, html) !== false){
- this.el.dom.value = html;
- this.fireEvent('sync', this, html);
- }
- }
- },
-
- pushValue : function(){
- if(this.initialized){
- var v = this.el.dom.value;
- if(!this.activated && v.length < 1){
- v = ' ';
- }
- if(this.fireEvent('beforepush', this, v) !== false){
- this.getEditorBody().innerHTML = v;
- this.fireEvent('push', this, v);
- }
- }
- },
-
- deferFocus : function(){
- this.focus.defer(10, this);
- },
-
- focus : function(){
- if(this.win && !this.sourceEditMode){
- this.win.focus();
- }else{
- this.el.focus();
- }
- },
-
- initEditor : function(){
- var dbody = this.getEditorBody();
- var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
- ss['background-attachment'] = 'fixed';
- dbody.bgProperties = 'fixed';
- Ext.DomHelper.applyStyles(dbody, ss);
- Ext.EventManager.on(this.doc, {
- 'mousedown': this.onEditorEvent,
- 'dblclick': this.onEditorEvent,
- 'click': this.onEditorEvent,
- 'keyup': this.onEditorEvent,
- buffer:100,
- scope: this
- });
- if(Ext.isGecko){
- Ext.EventManager.on(this.doc, 'keypress', this.applyCommand, this);
- }
- if(Ext.isIE || Ext.isSafari || Ext.isOpera){
- Ext.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
- }
- this.initialized = true;
- this.fireEvent('initialize', this);
- this.pushValue();
- },
-
- onDestroy : function(){
- if(this.rendered){
- this.tb.items.each(function(item){
- if(item.menu){
- item.menu.removeAll();
- if(item.menu.el){
- item.menu.el.destroy();
- }
- }
- item.destroy();
- });
- this.wrap.dom.innerHTML = '';
- this.wrap.remove();
- }
- },
-
- onFirstFocus : function(){
- this.activated = true;
- this.tb.items.each(function(item){
- item.enable();
- });
- if(Ext.isGecko){
- this.win.focus();
- var s = this.win.getSelection();
- if(!s.focusNode || s.focusNode.nodeType != 3){
- var r = s.getRangeAt(0);
- r.selectNodeContents(this.getEditorBody());
- r.collapse(true);
- this.deferFocus();
- }
- try{
- this.execCmd('useCSS', true);
- this.execCmd('styleWithCSS', false);
- }catch(e){}
- }
- this.fireEvent('activate', this);
- },
-
- adjustFont: function(btn){
- var adjust = btn.itemId == 'increasefontsize' ? 1 : -1;
- var v = parseInt(this.doc.queryCommandValue('FontSize') || 2, 10);
- if(Ext.isSafari3 || Ext.isAir){
-
-
- if(v <= 10){
- v = 1 + adjust;
- }else if(v <= 13){
- v = 2 + adjust;
- }else if(v <= 16){
- v = 3 + adjust;
- }else if(v <= 18){
- v = 4 + adjust;
- }else if(v <= 24){
- v = 5 + adjust;
- }else {
- v = 6 + adjust;
- }
- v = v.constrain(1, 6);
- }else{
- if(Ext.isSafari){
- adjust *= 2;
- }
- v = Math.max(1, v+adjust) + (Ext.isSafari ? 'px' : 0);
- }
- this.execCmd('FontSize', v);
- },
- onEditorEvent : function(e){
- this.updateToolbar();
- },
-
- updateToolbar: function(){
- if(!this.activated){
- this.onFirstFocus();
- return;
- }
- var btns = this.tb.items.map, doc = this.doc;
- if(this.enableFont && !Ext.isSafari){
- var name = (this.doc.queryCommandValue('FontName')||this.defaultFont).toLowerCase();
- if(name != this.fontSelect.dom.value){
- this.fontSelect.dom.value = name;
- }
- }
- if(this.enableFormat){
- btns.bold.toggle(doc.queryCommandState('bold'));
- btns.italic.toggle(doc.queryCommandState('italic'));
- btns.underline.toggle(doc.queryCommandState('underline'));
- }
- if(this.enableAlignments){
- btns.justifyleft.toggle(doc.queryCommandState('justifyleft'));
- btns.justifycenter.toggle(doc.queryCommandState('justifycenter'));
- btns.justifyright.toggle(doc.queryCommandState('justifyright'));
- }
- if(!Ext.isSafari && this.enableLists){
- btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist'));
- btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist'));
- }
-
- Ext.menu.MenuMgr.hideAll();
- this.syncValue();
- },
-
- relayBtnCmd : function(btn){
- this.relayCmd(btn.itemId);
- },
-
- relayCmd : function(cmd, value){
- this.win.focus();
- this.execCmd(cmd, value);
- this.updateToolbar();
- this.deferFocus();
- },
-
- execCmd : function(cmd, value){
- this.doc.execCommand(cmd, false, value === undefined ? null : value);
- this.syncValue();
- },
-
- applyCommand : function(e){
- if(e.ctrlKey){
- var c = e.getCharCode(), cmd;
- if(c > 0){
- c = String.fromCharCode(c);
- switch(c){
- case 'b':
- cmd = 'bold';
- break;
- case 'i':
- cmd = 'italic';
- break;
- case 'u':
- cmd = 'underline';
- break;
- }
- if(cmd){
- this.win.focus();
- this.execCmd(cmd);
- this.deferFocus();
- e.preventDefault();
- }
- }
- }
- },
-
- insertAtCursor : function(text){
- if(!this.activated){
- return;
- }
- if(Ext.isIE){
- this.win.focus();
- var r = this.doc.selection.createRange();
- if(r){
- r.collapse(true);
- r.pasteHTML(text);
- this.syncValue();
- this.deferFocus();
- }
- }else if(Ext.isGecko || Ext.isOpera){
- this.win.focus();
- this.execCmd('InsertHTML', text);
- this.deferFocus();
- }else if(Ext.isSafari){
- this.execCmd('InsertText', text);
- this.deferFocus();
- }
- },
-
- fixKeys : function(){
- if(Ext.isIE){
- return function(e){
- var k = e.getKey(), r;
- if(k == e.TAB){
- e.stopEvent();
- r = this.doc.selection.createRange();
- if(r){
- r.collapse(true);
- r.pasteHTML(' ');
- this.deferFocus();
- }
- }else if(k == e.ENTER){
- r = this.doc.selection.createRange();
- if(r){
- var target = r.parentElement();
- if(!target || target.tagName.toLowerCase() != 'li'){
- e.stopEvent();
- r.pasteHTML('<br />');
- r.collapse(false);
- r.select();
- }
- }
- }
- };
- }else if(Ext.isOpera){
- return function(e){
- var k = e.getKey();
- if(k == e.TAB){
- e.stopEvent();
- this.win.focus();
- this.execCmd('InsertHTML',' ');
- this.deferFocus();
- }
- };
- }else if(Ext.isSafari){
- return function(e){
- var k = e.getKey();
- if(k == e.TAB){
- e.stopEvent();
- this.execCmd('InsertText','\t');
- this.deferFocus();
- }
- };
- }
- }(),
-
- getToolbar : function(){
- return this.tb;
- },
-
- buttonTips : {
- bold : {
- title: 'Bold (Ctrl+B)',
- text: 'Make the selected text bold.',
- cls: 'x-html-editor-tip'
- },
- italic : {
- title: 'Italic (Ctrl+I)',
- text: 'Make the selected text italic.',
- cls: 'x-html-editor-tip'
- },
- underline : {
- title: 'Underline (Ctrl+U)',
- text: 'Underline the selected text.',
- cls: 'x-html-editor-tip'
- },
- increasefontsize : {
- title: 'Grow Text',
- text: 'Increase the font size.',
- cls: 'x-html-editor-tip'
- },
- decreasefontsize : {
- title: 'Shrink Text',
- text: 'Decrease the font size.',
- cls: 'x-html-editor-tip'
- },
- backcolor : {
- title: 'Text Highlight Color',
- text: 'Change the background color of the selected text.',
- cls: 'x-html-editor-tip'
- },
- forecolor : {
- title: 'Font Color',
- text: 'Change the color of the selected text.',
- cls: 'x-html-editor-tip'
- },
- justifyleft : {
- title: 'Align Text Left',
- text: 'Align text to the left.',
- cls: 'x-html-editor-tip'
- },
- justifycenter : {
- title: 'Center Text',
- text: 'Center text in the editor.',
- cls: 'x-html-editor-tip'
- },
- justifyright : {
- title: 'Align Text Right',
- text: 'Align text to the right.',
- cls: 'x-html-editor-tip'
- },
- insertunorderedlist : {
- title: 'Bullet List',
- text: 'Start a bulleted list.',
- cls: 'x-html-editor-tip'
- },
- insertorderedlist : {
- title: 'Numbered List',
- text: 'Start a numbered list.',
- cls: 'x-html-editor-tip'
- },
- createlink : {
- title: 'Hyperlink',
- text: 'Make the selected text a hyperlink.',
- cls: 'x-html-editor-tip'
- },
- sourceedit : {
- title: 'Source Edit',
- text: 'Switch to source editing mode.',
- cls: 'x-html-editor-tip'
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- });
- Ext.reg('htmleditor', Ext.form.HtmlEditor);
- Ext.form.TimeField = Ext.extend(Ext.form.ComboBox, {
-
- minValue : null,
-
- maxValue : null,
-
- minText : "The time in this field must be equal to or after {0}",
-
- maxText : "The time in this field must be equal to or before {0}",
-
- invalidText : "{0} is not a valid time",
-
- format : "g:i A",
-
- altFormats : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H",
-
- increment: 15,
-
- mode: 'local',
-
- triggerAction: 'all',
-
- typeAhead: false,
-
- initComponent : function(){
- Ext.form.TimeField.superclass.initComponent.call(this);
- if(typeof this.minValue == "string"){
- this.minValue = this.parseDate(this.minValue);
- }
- if(typeof this.maxValue == "string"){
- this.maxValue = this.parseDate(this.maxValue);
- }
- if(!this.store){
- var min = this.parseDate(this.minValue);
- if(!min){
- min = new Date().clearTime();
- }
- var max = this.parseDate(this.maxValue);
- if(!max){
- max = new Date().clearTime().add('mi', (24 * 60) - 1);
- }
- var times = [];
- while(min <= max){
- times.push([min.dateFormat(this.format)]);
- min = min.add('mi', this.increment);
- }
- this.store = new Ext.data.SimpleStore({
- fields: ['text'],
- data : times
- });
- this.displayField = 'text';
- }
- },
-
- getValue : function(){
- var v = Ext.form.TimeField.superclass.getValue.call(this);
- return this.formatDate(this.parseDate(v)) || '';
- },
-
- setValue : function(value){
- Ext.form.TimeField.superclass.setValue.call(this, this.formatDate(this.parseDate(value)));
- },
-
- validateValue : Ext.form.DateField.prototype.validateValue,
- parseDate : Ext.form.DateField.prototype.parseDate,
- formatDate : Ext.form.DateField.prototype.formatDate,
-
- beforeBlur : function(){
- var v = this.parseDate(this.getRawValue());
- if(v){
- this.setValue(v.dateFormat(this.format));
- }
- }
-
-
-
-
- });
- Ext.reg('timefield', Ext.form.TimeField);
- Ext.form.Label = Ext.extend(Ext.BoxComponent, {
- onRender : function(ct, position){
- if(!this.el){
- this.el = document.createElement('label');
- this.el.innerHTML = this.text ? Ext.util.Format.htmlEncode(this.text) : (this.html || '');
- if(this.forId){
- this.el.setAttribute('htmlFor', this.forId);
- }
- }
- Ext.form.Label.superclass.onRender.call(this, ct, position);
- }
- });
- Ext.reg('label', Ext.form.Label);
- Ext.form.Action = function(form, options){
- this.form = form;
- this.options = options || {};
- };
- Ext.form.Action.CLIENT_INVALID = 'client';
- Ext.form.Action.SERVER_INVALID = 'server';
- Ext.form.Action.CONNECT_FAILURE = 'connect';
- Ext.form.Action.LOAD_FAILURE = 'load';
- Ext.form.Action.prototype = {
- type : 'default',
- run : function(options){
- },
- success : function(response){
- },
- handleResponse : function(response){
- },
- failure : function(response){
- this.response = response;
- this.failureType = Ext.form.Action.CONNECT_FAILURE;
- this.form.afterAction(this, false);
- },
- processResponse : function(response){
- this.response = response;
- if(!response.responseText){
- return true;
- }
- this.result = this.handleResponse(response);
- return this.result;
- },
- getUrl : function(appendParams){
- var url = this.options.url || this.form.url || this.form.el.dom.action;
- if(appendParams){
- var p = this.getParams();
- if(p){
- url += (url.indexOf('?') != -1 ? '&' : '?') + p;
- }
- }
- return url;
- },
- getMethod : function(){
- return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase();
- },
- getParams : function(){
- var bp = this.form.baseParams;
- var p = this.options.params;
- if(p){
- if(typeof p == "object"){
- p = Ext.urlEncode(Ext.applyIf(p, bp));
- }else if(typeof p == 'string' && bp){
- p += '&' + Ext.urlEncode(bp);
- }
- }else if(bp){
- p = Ext.urlEncode(bp);
- }
- return p;
- },
- createCallback : function(opts){
- var opts = opts || {};
- return {
- success: this.success,
- failure: this.failure,
- scope: this,
- timeout: (opts.timeout*1000) || (this.form.timeout*1000),
- upload: this.form.fileUpload ? this.success : undefined
- };
- }
- };
- Ext.form.Action.Submit = function(form, options){
- Ext.form.Action.Submit.superclass.constructor.call(this, form, options);
- };
- Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {
-
- type : 'submit',
- run : function(){
- var o = this.options;
- var method = this.getMethod();
- var isPost = method == 'POST';
- if(o.clientValidation === false || this.form.isValid()){
- Ext.Ajax.request(Ext.apply(this.createCallback(o), {
- form:this.form.el.dom,
- url:this.getUrl(!isPost),
- method: method,
- params:isPost ? this.getParams() : null,
- isUpload: this.form.fileUpload
- }));
- }else if (o.clientValidation !== false){ this.failureType = Ext.form.Action.CLIENT_INVALID;
- this.form.afterAction(this, false);
- }
- },
- success : function(response){
- var result = this.processResponse(response);
- if(result === true || result.success){
- this.form.afterAction(this, true);
- return;
- }
- if(result.errors){
- this.form.markInvalid(result.errors);
- this.failureType = Ext.form.Action.SERVER_INVALID;
- }
- this.form.afterAction(this, false);
- },
- handleResponse : function(response){
- if(this.form.errorReader){
- var rs = this.form.errorReader.read(response);
- var errors = [];
- if(rs.records){
- for(var i = 0, len = rs.records.length; i < len; i++) {
- var r = rs.records[i];
- errors[i] = r.data;
- }
- }
- if(errors.length < 1){
- errors = null;
- }
- return {
- success : rs.success,
- errors : errors
- };
- }
- return Ext.decode(response.responseText);
- }
- });
- Ext.form.Action.Load = function(form, options){
- Ext.form.Action.Load.superclass.constructor.call(this, form, options);
- this.reader = this.form.reader;
- };
- Ext.extend(Ext.form.Action.Load, Ext.form.Action, {
- type : 'load',
- run : function(){
- Ext.Ajax.request(Ext.apply(
- this.createCallback(this.options), {
- method:this.getMethod(),
- url:this.getUrl(false),
- params:this.getParams()
- }));
- },
- success : function(response){
- var result = this.processResponse(response);
- if(result === true || !result.success || !result.data){
- this.failureType = Ext.form.Action.LOAD_FAILURE;
- this.form.afterAction(this, false);
- return;
- }
- this.form.clearInvalid();
- this.form.setValues(result.data);
- this.form.afterAction(this, true);
- },
- handleResponse : function(response){
- if(this.form.reader){
- var rs = this.form.reader.read(response);
- var data = rs.records && rs.records[0] ? rs.records[0].data : null;
- return {
- success : rs.success,
- data : data
- };
- }
- return Ext.decode(response.responseText);
- }
- });
- Ext.form.Action.ACTION_TYPES = {
- 'load' : Ext.form.Action.Load,
- 'submit' : Ext.form.Action.Submit
- };
- Ext.form.VTypes = function(){
- var alpha = /^[a-zA-Z_]+$/;
- var alphanum = /^[a-zA-Z0-9_]+$/;
- var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
- var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
- return {
-
- 'email' : function(v){
- return email.test(v);
- },
-
- 'emailText' : 'This field should be an e-mail address in the format "user@domain.com"',
-
- 'emailMask' : /[a-z0-9_\.\-@]/i,
-
- 'url' : function(v){
- return url.test(v);
- },
-
- 'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"',
-
-
- 'alpha' : function(v){
- return alpha.test(v);
- },
-
- 'alphaText' : 'This field should only contain letters and _',
-
- 'alphaMask' : /[a-z_]/i,
-
- 'alphanum' : function(v){
- return alphanum.test(v);
- },
-
- 'alphanumText' : 'This field should only contain letters, numbers and _',
-
- 'alphanumMask' : /[a-z0-9_]/i
- };
- }();
- Ext.grid.GridPanel = Ext.extend(Ext.Panel, {
-
-
-
-
-
-
-
-
-
-
-
-
-
- ddText : "{0} selected row{1}",
-
- minColumnWidth : 25,
-
- trackMouseOver : true,
-
- enableDragDrop : false,
-
- enableColumnMove : true,
-
- enableColumnHide : true,
-
- enableHdMenu : true,
-
- stripeRows : false,
-
- autoExpandColumn : false,
-
- autoExpandMin : 50,
-
- autoExpandMax : 1000,
-
- view : null,
-
- loadMask : false,
-
- rendered : false,
-
- viewReady: false,
-
- stateEvents: ["columnmove", "columnresize", "sortchange"],
-
- initComponent : function(){
- Ext.grid.GridPanel.superclass.initComponent.call(this);
-
-
- this.autoScroll = false;
- this.autoWidth = false;
- if(Ext.isArray(this.columns)){
- this.colModel = new Ext.grid.ColumnModel(this.columns);
- delete this.columns;
- }
-
- if(this.ds){
- this.store = this.ds;
- delete this.ds;
- }
- if(this.cm){
- this.colModel = this.cm;
- delete this.cm;
- }
- if(this.sm){
- this.selModel = this.sm;
- delete this.sm;
- }
- this.store = Ext.StoreMgr.lookup(this.store);
- this.addEvents(
-
-
- "click",
-
- "dblclick",
-
- "contextmenu",
-
- "mousedown",
-
- "mouseup",
-
- "mouseover",
-
- "mouseout",
-
- "keypress",
-
- "keydown",
-
-
- "cellmousedown",
-
- "rowmousedown",
-
- "headermousedown",
-
- "cellclick",
-
- "celldblclick",
-
- "rowclick",
-
- "rowdblclick",
-
- "headerclick",
-
- "headerdblclick",
-
- "rowcontextmenu",
-
- "cellcontextmenu",
-
- "headercontextmenu",
-
- "bodyscroll",
-
- "columnresize",
-
- "columnmove",
-
- "sortchange"
- );
- },
-
- onRender : function(ct, position){
- Ext.grid.GridPanel.superclass.onRender.apply(this, arguments);
- var c = this.body;
- this.el.addClass('x-grid-panel');
- var view = this.getView();
- view.init(this);
- c.on("mousedown", this.onMouseDown, this);
- c.on("click", this.onClick, this);
- c.on("dblclick", this.onDblClick, this);
- c.on("contextmenu", this.onContextMenu, this);
- c.on("keydown", this.onKeyDown, this);
- this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]);
- this.getSelectionModel().init(this);
- this.view.render();
- },
-
- initEvents : function(){
- Ext.grid.GridPanel.superclass.initEvents.call(this);
- if(this.loadMask){
- this.loadMask = new Ext.LoadMask(this.bwrap,
- Ext.apply({store:this.store}, this.loadMask));
- }
- },
- initStateEvents : function(){
- Ext.grid.GridPanel.superclass.initStateEvents.call(this);
- this.colModel.on('hiddenchange', this.saveState, this, {delay: 100});
- },
- applyState : function(state){
- var cm = this.colModel;
- var cs = state.columns;
- if(cs){
- for(var i = 0, len = cs.length; i < len; i++){
- var s = cs[i];
- var c = cm.getColumnById(s.id);
- if(c){
- c.hidden = s.hidden;
- c.width = s.width;
- var oldIndex = cm.getIndexById(s.id);
- if(oldIndex != i){
- cm.moveColumn(oldIndex, i);
- }
- }
- }
- }
- if(state.sort){
- this.store[this.store.remoteSort ? 'setDefaultSort' : 'sort'](state.sort.field, state.sort.direction);
- }
- },
- getState : function(){
- var o = {columns: []};
- for(var i = 0, c; c = this.colModel.config[i]; i++){
- o.columns[i] = {
- id: c.id,
- width: c.width
- };
- if(c.hidden){
- o.columns[i].hidden = true;
- }
- }
- var ss = this.store.getSortState();
- if(ss){
- o.sort = ss;
- }
- return o;
- },
-
- afterRender : function(){
- Ext.grid.GridPanel.superclass.afterRender.call(this);
- this.view.layout();
- this.viewReady = true;
- },
-
- reconfigure : function(store, colModel){
- if(this.loadMask){
- this.loadMask.destroy();
- this.loadMask = new Ext.LoadMask(this.bwrap,
- Ext.apply({store:store}, this.initialConfig.loadMask));
- }
- this.view.bind(store, colModel);
- this.store = store;
- this.colModel = colModel;
- if(this.rendered){
- this.view.refresh(true);
- }
- },
-
- onKeyDown : function(e){
- this.fireEvent("keydown", e);
- },
-
- onDestroy : function(){
- if(this.rendered){
- if(this.loadMask){
- this.loadMask.destroy();
- }
- var c = this.body;
- c.removeAllListeners();
- this.view.destroy();
- c.update("");
- }
- this.colModel.purgeListeners();
- Ext.grid.GridPanel.superclass.onDestroy.call(this);
- },
-
- processEvent : function(name, e){
- this.fireEvent(name, e);
- var t = e.getTarget();
- var v = this.view;
- var header = v.findHeaderIndex(t);
- if(header !== false){
- this.fireEvent("header" + name, this, header, e);
- }else{
- var row = v.findRowIndex(t);
- var cell = v.findCellIndex(t);
- if(row !== false){
- this.fireEvent("row" + name, this, row, e);
- if(cell !== false){
- this.fireEvent("cell" + name, this, row, cell, e);
- }
- }
- }
- },
-
- onClick : function(e){
- this.processEvent("click", e);
- },
-
- onMouseDown : function(e){
- this.processEvent("mousedown", e);
- },
-
- onContextMenu : function(e, t){
- this.processEvent("contextmenu", e);
- },
-
- onDblClick : function(e){
- this.processEvent("dblclick", e);
- },
-
- walkCells : function(row, col, step, fn, scope){
- var cm = this.colModel, clen = cm.getColumnCount();
- var ds = this.store, rlen = ds.getCount(), first = true;
- if(step < 0){
- if(col < 0){
- row--;
- first = false;
- }
- while(row >= 0){
- if(!first){
- col = clen-1;
- }
- first = false;
- while(col >= 0){
- if(fn.call(scope || this, row, col, cm) === true){
- return [row, col];
- }
- col--;
- }
- row--;
- }
- } else {
- if(col >= clen){
- row++;
- first = false;
- }
- while(row < rlen){
- if(!first){
- col = 0;
- }
- first = false;
- while(col < clen){
- if(fn.call(scope || this, row, col, cm) === true){
- return [row, col];
- }
- col++;
- }
- row++;
- }
- }
- return null;
- },
-
- getSelections : function(){
- return this.selModel.getSelections();
- },
-
- onResize : function(){
- Ext.grid.GridPanel.superclass.onResize.apply(this, arguments);
- if(this.viewReady){
- this.view.layout();
- }
- },
-
- getGridEl : function(){
- return this.body;
- },
-
- stopEditing : function(){},
-
- getSelectionModel : function(){
- if(!this.selModel){
- this.selModel = new Ext.grid.RowSelectionModel(
- this.disableSelection ? {selectRow: Ext.emptyFn} : null);
- }
- return this.selModel;
- },
-
- getStore : function(){
- return this.store;
- },
-
- getColumnModel : function(){
- return this.colModel;
- },
-
- getView : function(){
- if(!this.view){
- this.view = new Ext.grid.GridView(this.viewConfig);
- }
- return this.view;
- },
-
- getDragDropText : function(){
- var count = this.selModel.getCount();
- return String.format(this.ddText, count, count == 1 ? '' : 's');
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- });
- Ext.reg('grid', Ext.grid.GridPanel);
- Ext.grid.GridView = function(config){
- Ext.apply(this, config);
- this.addEvents(
-
- "beforerowremoved",
-
- "beforerowsinserted",
-
- "beforerefresh",
-
- "rowremoved",
-
- "rowsinserted",
-
- "rowupdated",
-
- "refresh"
- );
- Ext.grid.GridView.superclass.constructor.call(this);
- };
- Ext.extend(Ext.grid.GridView, Ext.util.Observable, {
-
-
-
-
- scrollOffset: 19,
-
- autoFill: false,
-
- forceFit: false,
-
- sortClasses : ["sort-asc", "sort-desc"],
-
- sortAscText : "Sort Ascending",
-
- sortDescText : "Sort Descending",
-
- columnsText : "Columns",
- borderWidth: 2,
-
- initTemplates : function(){
- var ts = this.templates || {};
- if(!ts.master){
- ts.master = new Ext.Template(
- '<div class="x-grid3" hidefocus="true">',
- '<div class="x-grid3-viewport">',
- '<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>',
- '<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',
- "</div>",
- '<div class="x-grid3-resize-marker"> </div>',
- '<div class="x-grid3-resize-proxy"> </div>',
- "</div>"
- );
- }
- if(!ts.header){
- ts.header = new Ext.Template(
- '<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
- '<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',
- "</table>"
- );
- }
- if(!ts.hcell){
- ts.hcell = new Ext.Template(
- '<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">', this.grid.enableHdMenu ? '<a class="x-grid3-hd-btn" href="#"></a>' : '',
- '{value}<img class="x-grid3-sort-icon" src="', Ext.BLANK_IMAGE_URL, '" />',
- "</div></td>"
- );
- }
- if(!ts.body){
- ts.body = new Ext.Template('{rows}');
- }
- if(!ts.row){
- ts.row = new Ext.Template(
- '<div class="x-grid3-row {alt}" style="{tstyle}"><table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
- '<tbody><tr>{cells}</tr>',
- (this.enableRowBody ? '<tr class="x-grid3-row-body-tr" style="{bodyStyle}"><td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on"><div class="x-grid3-row-body">{body}</div></td></tr>' : ''),
- '</tbody></table></div>'
- );
- }
- if(!ts.cell){
- ts.cell = new Ext.Template(
- '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}" tabIndex="0" {cellAttr}>',
- '<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on" {attr}>{value}</div>',
- "</td>"
- );
- }
- for(var k in ts){
- var t = ts[k];
- if(t && typeof t.compile == 'function' && !t.compiled){
- t.disableFormats = true;
- t.compile();
- }
- }
- this.templates = ts;
- this.tdClass = 'x-grid3-cell';
- this.cellSelector = 'td.x-grid3-cell';
- this.hdCls = 'x-grid3-hd';
- this.rowSelector = 'div.x-grid3-row';
- this.colRe = new RegExp("x-grid3-td-([^\\s]+)", "");
- },
- fly : function(el){
- if(!this._flyweight){
- this._flyweight = new Ext.Element.Flyweight(document.body);
- }
- this._flyweight.dom = el;
- return this._flyweight;
- },
- getEditorParent : function(ed){
- return this.scroller.dom;
- },
- initElements : function(){
- var E = Ext.Element;
- var el = this.grid.getGridEl().dom.firstChild;
- var cs = el.childNodes;
- this.el = new E(el);
- this.mainWrap = new E(cs[0]);
- this.mainHd = new E(this.mainWrap.dom.firstChild);
- if(this.grid.hideHeaders){
- this.mainHd.setDisplayed(false);
- }
- this.innerHd = this.mainHd.dom.firstChild;
- this.scroller = new E(this.mainWrap.dom.childNodes[1]);
- if(this.forceFit){
- this.scroller.setStyle('overflow-x', 'hidden');
- }
- this.mainBody = new E(this.scroller.dom.firstChild);
- this.focusEl = new E(this.scroller.dom.childNodes[1]);
- this.focusEl.swallowEvent("click", true);
- this.resizeMarker = new E(cs[1]);
- this.resizeProxy = new E(cs[2]);
- },
- getRows : function(){
- return this.hasRows() ? this.mainBody.dom.childNodes : [];
- },
-
- findCell : function(el){
- if(!el){
- return false;
- }
- return this.fly(el).findParent(this.cellSelector, 3);
- },
- findCellIndex : function(el, requiredCls){
- var cell = this.findCell(el);
- if(cell && (!requiredCls || this.fly(cell).hasClass(requiredCls))){
- return this.getCellIndex(cell);
- }
- return false;
- },
- getCellIndex : function(el){
- if(el){
- var m = el.className.match(this.colRe);
- if(m && m[1]){
- return this.cm.getIndexById(m[1]);
- }
- }
- return false;
- },
- findHeaderCell : function(el){
- var cell = this.findCell(el);
- return cell && this.fly(cell).hasClass(this.hdCls) ? cell : null;
- },
- findHeaderIndex : function(el){
- return this.findCellIndex(el, this.hdCls);
- },
- findRow : function(el){
- if(!el){
- return false;
- }
- return this.fly(el).findParent(this.rowSelector, 10);
- },
- findRowIndex : function(el){
- var r = this.findRow(el);
- return r ? r.rowIndex : false;
- },
-
- getRow : function(row){
- return this.getRows()[row];
- },
- getCell : function(row, col){
- return this.getRow(row).getElementsByTagName('td')[col];
- },
- getHeaderCell : function(index){
- return this.mainHd.dom.getElementsByTagName('td')[index];
- },
-
- addRowClass : function(row, cls){
- var r = this.getRow(row);
- if(r){
- this.fly(r).addClass(cls);
- }
- },
- removeRowClass : function(row, cls){
- var r = this.getRow(row);
- if(r){
- this.fly(r).removeClass(cls);
- }
- },
- removeRow : function(row){
- Ext.removeNode(this.getRow(row));
- },
- removeRows : function(firstRow, lastRow){
- var bd = this.mainBody.dom;
- for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
- Ext.removeNode(bd.childNodes[firstRow]);
- }
- },
-
- getScrollState : function(){
- var sb = this.scroller.dom;
- return {left: sb.scrollLeft, top: sb.scrollTop};
- },
- restoreScroll : function(state){
- var sb = this.scroller.dom;
- sb.scrollLeft = state.left;
- sb.scrollTop = state.top;
- },
-
- scrollToTop : function(){
- this.scroller.dom.scrollTop = 0;
- this.scroller.dom.scrollLeft = 0;
- },
- syncScroll : function(){
- this.syncHeaderScroll();
- var mb = this.scroller.dom;
- this.grid.fireEvent("bodyscroll", mb.scrollLeft, mb.scrollTop);
- },
- syncHeaderScroll : function(){
- var mb = this.scroller.dom;
- this.innerHd.scrollLeft = mb.scrollLeft;
- this.innerHd.scrollLeft = mb.scrollLeft; },
- updateSortIcon : function(col, dir){
- var sc = this.sortClasses;
- var hds = this.mainHd.select('td').removeClass(sc);
- hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);
- },
- updateAllColumnWidths : function(){
- var tw = this.getTotalWidth();
- var clen = this.cm.getColumnCount();
- var ws = [];
- for(var i = 0; i < clen; i++){
- ws[i] = this.getColumnWidth(i);
- }
- this.innerHd.firstChild.firstChild.style.width = tw;
- for(var i = 0; i < clen; i++){
- var hd = this.getHeaderCell(i);
- hd.style.width = ws[i];
- }
- var ns = this.getRows();
- for(var i = 0, len = ns.length; i < len; i++){
- ns[i].style.width = tw;
- ns[i].firstChild.style.width = tw;
- var row = ns[i].firstChild.rows[0];
- for(var j = 0; j < clen; j++){
- row.childNodes[j].style.width = ws[j];
- }
- }
- this.onAllColumnWidthsUpdated(ws, tw);
- },
- updateColumnWidth : function(col, width){
- var w = this.getColumnWidth(col);
- var tw = this.getTotalWidth();
- this.innerHd.firstChild.firstChild.style.width = tw;
- var hd = this.getHeaderCell(col);
- hd.style.width = w;
- var ns = this.getRows();
- for(var i = 0, len = ns.length; i < len; i++){
- ns[i].style.width = tw;
- ns[i].firstChild.style.width = tw;
- ns[i].firstChild.rows[0].childNodes[col].style.width = w;
- }
- this.onColumnWidthUpdated(col, w, tw);
- },
- updateColumnHidden : function(col, hidden){
- var tw = this.getTotalWidth();
- this.innerHd.firstChild.firstChild.style.width = tw;
- var display = hidden ? 'none' : '';
- var hd = this.getHeaderCell(col);
- hd.style.display = display;
- var ns = this.getRows();
- for(var i = 0, len = ns.length; i < len; i++){
- ns[i].style.width = tw;
- ns[i].firstChild.style.width = tw;
- ns[i].firstChild.rows[0].childNodes[col].style.display = display;
- }
- this.onColumnHiddenUpdated(col, hidden, tw);
- delete this.lastViewWidth; this.layout();
- },
- doRender : function(cs, rs, ds, startRow, colCount, stripe){
- var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1;
- var tstyle = 'width:'+this.getTotalWidth()+';';
- var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
- for(var j = 0, len = rs.length; j < len; j++){
- r = rs[j]; cb = [];
- var rowIndex = (j+startRow);
- for(var i = 0; i < colCount; i++){
- c = cs[i];
- p.id = c.id;
- p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
- p.attr = p.cellAttr = "";
- p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
- p.style = c.style;
- if(p.value == undefined || p.value === "") p.value = " ";
- if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
- p.css += ' x-grid3-dirty-cell';
- }
- cb[cb.length] = ct.apply(p);
- }
- var alt = [];
- if(stripe && ((rowIndex+1) % 2 == 0)){
- alt[0] = "x-grid3-row-alt";
- }
- if(r.dirty){
- alt[1] = " x-grid3-dirty-row";
- }
- rp.cols = colCount;
- if(this.getRowClass){
- alt[2] = this.getRowClass(r, rowIndex, rp, ds);
- }
- rp.alt = alt.join(" ");
- rp.cells = cb.join("");
- buf[buf.length] = rt.apply(rp);
- }
- return buf.join("");
- },
- processRows : function(startRow, skipStripe){
- if(this.ds.getCount() < 1){
- return;
- }
- skipStripe = skipStripe || !this.grid.stripeRows;
- startRow = startRow || 0;
- var rows = this.getRows();
- var cls = ' x-grid3-row-alt ';
- for(var i = startRow, len = rows.length; i < len; i++){
- var row = rows[i];
- row.rowIndex = i;
- if(!skipStripe){
- var isAlt = ((i+1) % 2 == 0);
- var hasAlt = (' '+row.className + ' ').indexOf(cls) != -1;
- if(isAlt == hasAlt){
- continue;
- }
- if(isAlt){
- row.className += " x-grid3-row-alt";
- }else{
- row.className = row.className.replace("x-grid3-row-alt", "");
- }
- }
- }
- },
- renderUI : function(){
- var header = this.renderHeaders();
- var body = this.templates.body.apply({rows:''});
- var html = this.templates.master.apply({
- body: body,
- header: header
- });
- var g = this.grid;
- g.getGridEl().dom.innerHTML = html;
- this.initElements();
- this.mainBody.dom.innerHTML = this.renderRows();
- this.processRows(0, true);
- Ext.fly(this.innerHd).on("click", this.handleHdDown, this);
- this.mainHd.on("mouseover", this.handleHdOver, this);
- this.mainHd.on("mouseout", this.handleHdOut, this);
- this.mainHd.on("mousemove", this.handleHdMove, this);
- this.scroller.on('scroll', this.syncScroll, this);
- if(g.enableColumnResize !== false){
- this.splitone = new Ext.grid.GridView.SplitDragZone(g, this.mainHd.dom);
- }
- if(g.enableColumnMove){
- this.columnDrag = new Ext.grid.GridView.ColumnDragZone(g, this.innerHd);
- this.columnDrop = new Ext.grid.HeaderDropZone(g, this.mainHd.dom);
- }
- if(g.enableHdMenu !== false){
- if(g.enableColumnHide !== false){
- this.colMenu = new Ext.menu.Menu({id:g.id + "-hcols-menu"});
- this.colMenu.on("beforeshow", this.beforeColMenuShow, this);
- this.colMenu.on("itemclick", this.handleHdMenuClick, this);
- }
- this.hmenu = new Ext.menu.Menu({id: g.id + "-hctx"});
- this.hmenu.add(
- {id:"asc", text: this.sortAscText, cls: "xg-hmenu-sort-asc"},
- {id:"desc", text: this.sortDescText, cls: "xg-hmenu-sort-desc"}
- );
- if(g.enableColumnHide !== false){
- this.hmenu.add('-',
- {id:"columns", text: this.columnsText, menu: this.colMenu, iconCls: 'x-cols-icon'}
- );
- }
- this.hmenu.on("itemclick", this.handleHdMenuClick, this);
- }
- if(g.enableDragDrop || g.enableDrag){
- var dd = new Ext.grid.GridDragZone(g, {
- ddGroup : g.ddGroup || 'GridDD'
- });
- }
- this.updateHeaderSortState();
- },
- layout : function(){
- if(!this.mainBody){
- return; }
- var g = this.grid;
- var c = g.getGridEl(), cm = this.cm,
- expandCol = g.autoExpandColumn,
- gv = this;
- var csize = c.getSize(true);
- var vw = csize.width;
- if(vw < 20 || csize.height < 20){ return;
- }
- if(g.autoHeight){
- this.scroller.dom.style.overflow = 'visible';
- }else{
- this.el.setSize(csize.width, csize.height);
- var hdHeight = this.mainHd.getHeight();
- var vh = csize.height - (hdHeight);
- this.scroller.setSize(vw, vh);
- if(this.innerHd){
- this.innerHd.style.width = (vw)+'px';
- }
- }
- if(this.forceFit){
- if(this.lastViewWidth != vw){
- this.fitColumns(false, false);
- this.lastViewWidth = vw;
- }
- }else {
- this.autoExpand();
- this.syncHeaderScroll();
- }
- this.onLayout(vw, vh);
- },
- onLayout : function(vw, vh){
- },
- onColumnWidthUpdated : function(col, w, tw){
- },
- onAllColumnWidthsUpdated : function(ws, tw){
- },
- onColumnHiddenUpdated : function(col, hidden, tw){
- },
- updateColumnText : function(col, text){
- },
- afterMove : function(colIndex){
- },
-
- init: function(grid){
- this.grid = grid;
- this.initTemplates();
- this.initData(grid.store, grid.colModel);
- this.initUI(grid);
- },
- getColumnId : function(index){
- return this.cm.getColumnId(index);
- },
- renderHeaders : function(){
- var cm = this.cm, ts = this.templates;
- var ct = ts.hcell;
- var cb = [], sb = [], p = {};
- for(var i = 0, len = cm.getColumnCount(); i < len; i++){
- p.id = cm.getColumnId(i);
- p.value = cm.getColumnHeader(i) || "";
- p.style = this.getColumnStyle(i, true);
- p.tooltip = this.getColumnTooltip(i);
- if(cm.config[i].align == 'right'){
- p.istyle = 'padding-right:16px';
- } else {
- delete p.istyle;
- }
- cb[cb.length] = ct.apply(p);
- }
- return ts.header.apply({cells: cb.join(""), tstyle:'width:'+this.getTotalWidth()+';'});
- },
- getColumnTooltip : function(i){
- var tt = this.cm.getColumnTooltip(i);
- if(tt){
- if(Ext.QuickTips.isEnabled()){
- return 'ext:qtip="'+tt+'"';
- }else{
- return 'title="'+tt+'"';
- }
- }
- return "";
- },
- beforeUpdate : function(){
- this.grid.stopEditing(true);
- },
- updateHeaders : function(){
- this.innerHd.firstChild.innerHTML = this.renderHeaders();
- },
-
- focusRow : function(row){
- this.focusCell(row, 0, false);
- },
-
- focusCell : function(row, col, hscroll){
- var xy = this.ensureVisible(row, col, hscroll);
- this.focusEl.setXY(xy);
- if(Ext.isGecko){
- this.focusEl.focus();
- }else{
- this.focusEl.focus.defer(1, this.focusEl);
- }
- },
- ensureVisible : function(row, col, hscroll){
- if(typeof row != "number"){
- row = row.rowIndex;
- }
- if(!this.ds){
- return;
- }
- if(row < 0 || row >= this.ds.getCount()){
- return;
- }
- col = (col !== undefined ? col : 0);
- var rowEl = this.getRow(row), cellEl;
- if(!(hscroll === false && col === 0)){
- while(this.cm.isHidden(col)){
- col++;
- }
- cellEl = this.getCell(row, col);
- }
- if(!rowEl){
- return;
- }
- var c = this.scroller.dom;
- var ctop = 0;
- var p = rowEl, stop = this.el.dom;
- while(p && p != stop){
- ctop += p.offsetTop;
- p = p.offsetParent;
- }
- ctop -= this.mainHd.dom.offsetHeight;
- var cbot = ctop + rowEl.offsetHeight;
- var ch = c.clientHeight;
- var stop = parseInt(c.scrollTop, 10);
- var sbot = stop + ch;
- if(ctop < stop){
- c.scrollTop = ctop;
- }else if(cbot > sbot){
- c.scrollTop = cbot-ch;
- }
- if(hscroll !== false){
- var cleft = parseInt(cellEl.offsetLeft, 10);
- var cright = cleft + cellEl.offsetWidth;
- var sleft = parseInt(c.scrollLeft, 10);
- var sright = sleft + c.clientWidth;
- if(cleft < sleft){
- c.scrollLeft = cleft;
- }else if(cright > sright){
- c.scrollLeft = cright-c.clientWidth;
- }
- }
- return cellEl ? Ext.fly(cellEl).getXY() : [c.scrollLeft, Ext.fly(rowEl).getY()];
- },
- insertRows : function(dm, firstRow, lastRow, isUpdate){
- if(!isUpdate && firstRow === 0 && lastRow == dm.getCount()-1){
- this.refresh();
- }else{
- if(!isUpdate){
- this.fireEvent("beforerowsinserted", this, firstRow, lastRow);
- }
- var html = this.renderRows(firstRow, lastRow);
- var before = this.getRow(firstRow);
- if(before){
- Ext.DomHelper.insertHtml('beforeBegin', before, html);
- }else{
- Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html);
- }
- if(!isUpdate){
- this.fireEvent("rowsinserted", this, firstRow, lastRow);
- this.processRows(firstRow);
- }
- }
- },
- deleteRows : function(dm, firstRow, lastRow){
- if(dm.getRowCount()<1){
- this.refresh();
- }else{
- this.fireEvent("beforerowsdeleted", this, firstRow, lastRow);
- this.removeRows(firstRow, lastRow);
- this.processRows(firstRow);
- this.fireEvent("rowsdeleted", this, firstRow, lastRow);
- }
- },
- getColumnStyle : function(col, isHeader){
- var style = !isHeader ? (this.cm.config[col].css || '') : '';
- style += 'width:'+this.getColumnWidth(col)+';';
- if(this.cm.isHidden(col)){
- style += 'display:none;';
- }
- var align = this.cm.config[col].align;
- if(align){
- style += 'text-align:'+align+';';
- }
- return style;
- },
- getColumnWidth : function(col){
- var w = this.cm.getColumnWidth(col);
- if(typeof w == 'number'){
- return (Ext.isBorderBox ? w : (w-this.borderWidth > 0 ? w-this.borderWidth:0)) + 'px';
- }
- return w;
- },
- getTotalWidth : function(){
- return this.cm.getTotalWidth()+'px';
- },
- fitColumns : function(preventRefresh, onlyExpand, omitColumn){
- var cm = this.cm, leftOver, dist, i;
- var tw = cm.getTotalWidth(false);
- var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
- if(aw < 20){ return;
- }
- var extra = aw - tw;
- if(extra === 0){
- return false;
- }
- var vc = cm.getColumnCount(true);
- var ac = vc-(typeof omitColumn == 'number' ? 1 : 0);
- if(ac === 0){
- ac = 1;
- omitColumn = undefined;
- }
- var colCount = cm.getColumnCount();
- var cols = [];
- var extraCol = 0;
- var width = 0;
- var w;
- for (i = 0; i < colCount; i++){
- if(!cm.isHidden(i) && !cm.isFixed(i) && i !== omitColumn){
- w = cm.getColumnWidth(i);
- cols.push(i);
- extraCol = i;
- cols.push(w);
- width += w;
- }
- }
- var frac = (aw - cm.getTotalWidth())/width;
- while (cols.length){
- w = cols.pop();
- i = cols.pop();
- cm.setColumnWidth(i, Math.max(this.grid.minColumnWidth, Math.floor(w + w*frac)), true);
- }
- if((tw = cm.getTotalWidth(false)) > aw){
- var adjustCol = ac != vc ? omitColumn : extraCol;
- cm.setColumnWidth(adjustCol, Math.max(1,
- cm.getColumnWidth(adjustCol)- (tw-aw)), true);
- }
- if(preventRefresh !== true){
- this.updateAllColumnWidths();
- }
- return true;
- },
- autoExpand : function(preventUpdate){
- var g = this.grid, cm = this.cm;
- if(!this.userResized && g.autoExpandColumn){
- var tw = cm.getTotalWidth(false);
- var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
- if(tw != aw){
- var ci = cm.getIndexById(g.autoExpandColumn);
- var currentWidth = cm.getColumnWidth(ci);
- var cw = Math.min(Math.max(((aw-tw)+currentWidth), g.autoExpandMin), g.autoExpandMax);
- if(cw != currentWidth){
- cm.setColumnWidth(ci, cw, true);
- if(preventUpdate !== true){
- this.updateColumnWidth(ci, cw);
- }
- }
- }
- }
- },
- getColumnData : function(){
- var cs = [], cm = this.cm, colCount = cm.getColumnCount();
- for(var i = 0; i < colCount; i++){
- var name = cm.getDataIndex(i);
- cs[i] = {
- name : (typeof name == 'undefined' ? this.ds.fields.get(i).name : name),
- renderer : cm.getRenderer(i),
- id : cm.getColumnId(i),
- style : this.getColumnStyle(i)
- };
- }
- return cs;
- },
- renderRows : function(startRow, endRow){
- var g = this.grid, cm = g.colModel, ds = g.store, stripe = g.stripeRows;
- var colCount = cm.getColumnCount();
- if(ds.getCount() < 1){
- return "";
- }
- var cs = this.getColumnData();
- startRow = startRow || 0;
- endRow = typeof endRow == "undefined"? ds.getCount()-1 : endRow;
- var rs = ds.getRange(startRow, endRow);
- return this.doRender(cs, rs, ds, startRow, colCount, stripe);
- },
- renderBody : function(){
- var markup = this.renderRows();
- return this.templates.body.apply({rows: markup});
- },
- refreshRow : function(record){
- var ds = this.ds, index;
- if(typeof record == 'number'){
- index = record;
- record = ds.getAt(index);
- }else{
- index = ds.indexOf(record);
- }
- var cls = [];
- this.insertRows(ds, index, index, true);
- this.getRow(index).rowIndex = index;
- this.onRemove(ds, record, index+1, true);
- this.fireEvent("rowupdated", this, index, record);
- },
-
- refresh : function(headersToo){
- this.fireEvent("beforerefresh", this);
- this.grid.stopEditing(true);
- var result = this.renderBody();
- this.mainBody.update(result);
- if(headersToo === true){
- this.updateHeaders();
- this.updateHeaderSortState();
- }
- this.processRows(0, true);
- this.layout();
- this.applyEmptyText();
- this.fireEvent("refresh", this);
- },
- applyEmptyText : function(){
- if(this.emptyText && !this.hasRows()){
- this.mainBody.update('<div class="x-grid-empty">' + this.emptyText + '</div>');
- }
- },
- updateHeaderSortState : function(){
- var state = this.ds.getSortState();
- if(!state){
- return;
- }
- if(!this.sortState || (this.sortState.field != state.field || this.sortState.direction != state.direction)){
- this.grid.fireEvent('sortchange', this.grid, state);
- }
- this.sortState = state;
- var sortColumn = this.cm.findColumnIndex(state.field);
- if(sortColumn != -1){
- var sortDir = state.direction;
- this.updateSortIcon(sortColumn, sortDir);
- }
- },
- destroy : function(){
- if(this.colMenu){
- this.colMenu.removeAll();
- Ext.menu.MenuMgr.unregister(this.colMenu);
- this.colMenu.getEl().remove();
- delete this.colMenu;
- }
- if(this.hmenu){
- this.hmenu.removeAll();
- Ext.menu.MenuMgr.unregister(this.hmenu);
- this.hmenu.getEl().remove();
- delete this.hmenu;
- }
- if(this.grid.enableColumnMove){
- var dds = Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
- if(dds){
- for(var dd in dds){
- if(!dds[dd].config.isTarget && dds[dd].dragElId){
- var elid = dds[dd].dragElId;
- dds[dd].unreg();
- Ext.get(elid).remove();
- } else if(dds[dd].config.isTarget){
- dds[dd].proxyTop.remove();
- dds[dd].proxyBottom.remove();
- dds[dd].unreg();
- }
- if(Ext.dd.DDM.locationCache[dd]){
- delete Ext.dd.DDM.locationCache[dd];
- }
- }
- delete Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
- }
- }
- Ext.destroy(this.resizeMarker, this.resizeProxy);
- this.initData(null, null);
- Ext.EventManager.removeResizeListener(this.onWindowResize, this);
- },
- onDenyColumnHide : function(){
- },
- render : function(){
- var cm = this.cm;
- var colCount = cm.getColumnCount();
- if(this.autoFill){
- this.fitColumns(true, true);
- }else if(this.forceFit){
- this.fitColumns(true, false);
- }else if(this.grid.autoExpandColumn){
- this.autoExpand(true);
- }
- this.renderUI();
- },
-
- initData : function(ds, cm){
- if(this.ds){
- this.ds.un("load", this.onLoad, this);
- this.ds.un("datachanged", this.onDataChange, this);
- this.ds.un("add", this.onAdd, this);
- this.ds.un("remove", this.onRemove, this);
- this.ds.un("update", this.onUpdate, this);
- this.ds.un("clear", this.onClear, this);
- }
- if(ds){
- ds.on("load", this.onLoad, this);
- ds.on("datachanged", this.onDataChange, this);
- ds.on("add", this.onAdd, this);
- ds.on("remove", this.onRemove, this);
- ds.on("update", this.onUpdate, this);
- ds.on("clear", this.onClear, this);
- }
- this.ds = ds;
- if(this.cm){
- this.cm.un("configchange", this.onColConfigChange, this);
- this.cm.un("widthchange", this.onColWidthChange, this);
- this.cm.un("headerchange", this.onHeaderChange, this);
- this.cm.un("hiddenchange", this.onHiddenChange, this);
- this.cm.un("columnmoved", this.onColumnMove, this);
- this.cm.un("columnlockchange", this.onColumnLock, this);
- }
- if(cm){
- cm.on("configchange", this.onColConfigChange, this);
- cm.on("widthchange", this.onColWidthChange, this);
- cm.on("headerchange", this.onHeaderChange, this);
- cm.on("hiddenchange", this.onHiddenChange, this);
- cm.on("columnmoved", this.onColumnMove, this);
- cm.on("columnlockchange", this.onColumnLock, this);
- }
- this.cm = cm;
- },
- onDataChange : function(){
- this.refresh();
- this.updateHeaderSortState();
- },
- onClear : function(){
- this.refresh();
- },
- onUpdate : function(ds, record){
- this.refreshRow(record);
- },
- onAdd : function(ds, records, index){
- this.insertRows(ds, index, index + (records.length-1));
- },
- onRemove : function(ds, record, index, isUpdate){
- if(isUpdate !== true){
- this.fireEvent("beforerowremoved", this, index, record);
- }
- this.removeRow(index);
- if(isUpdate !== true){
- this.processRows(index);
- this.applyEmptyText();
- this.fireEvent("rowremoved", this, index, record);
- }
- },
- onLoad : function(){
- this.scrollToTop();
- },
- onColWidthChange : function(cm, col, width){
- this.updateColumnWidth(col, width);
- },
- onHeaderChange : function(cm, col, text){
- this.updateHeaders();
- },
- onHiddenChange : function(cm, col, hidden){
- this.updateColumnHidden(col, hidden);
- },
- onColumnMove : function(cm, oldIndex, newIndex){
- this.indexMap = null;
- var s = this.getScrollState();
- this.refresh(true);
- this.restoreScroll(s);
- this.afterMove(newIndex);
- },
- onColConfigChange : function(){
- delete this.lastViewWidth;
- this.indexMap = null;
- this.refresh(true);
- },
-
- initUI : function(grid){
- grid.on("headerclick", this.onHeaderClick, this);
- if(grid.trackMouseOver){
- grid.on("mouseover", this.onRowOver, this);
- grid.on("mouseout", this.onRowOut, this);
- }
- },
- initEvents : function(){
- },
- onHeaderClick : function(g, index){
- if(this.headersDisabled || !this.cm.isSortable(index)){
- return;
- }
- g.stopEditing(true);
- g.store.sort(this.cm.getDataIndex(index));
- },
- onRowOver : function(e, t){
- var row;
- if((row = this.findRowIndex(t)) !== false){
- this.addRowClass(row, "x-grid3-row-over");
- }
- },
- onRowOut : function(e, t){
- var row;
- if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
- this.removeRowClass(row, "x-grid3-row-over");
- }
- },
- handleWheel : function(e){
- e.stopPropagation();
- },
- onRowSelect : function(row){
- this.addRowClass(row, "x-grid3-row-selected");
- },
- onRowDeselect : function(row){
- this.removeRowClass(row, "x-grid3-row-selected");
- },
- onCellSelect : function(row, col){
- var cell = this.getCell(row, col);
- if(cell){
- this.fly(cell).addClass("x-grid3-cell-selected");
- }
- },
- onCellDeselect : function(row, col){
- var cell = this.getCell(row, col);
- if(cell){
- this.fly(cell).removeClass("x-grid3-cell-selected");
- }
- },
- onColumnSplitterMoved : function(i, w){
- this.userResized = true;
- var cm = this.grid.colModel;
- cm.setColumnWidth(i, w, true);
- if(this.forceFit){
- this.fitColumns(true, false, i);
- this.updateAllColumnWidths();
- }else{
- this.updateColumnWidth(i, w);
- }
- this.grid.fireEvent("columnresize", i, w);
- },
- handleHdMenuClick : function(item){
- var index = this.hdCtxIndex;
- var cm = this.cm, ds = this.ds;
- switch(item.id){
- case "asc":
- ds.sort(cm.getDataIndex(index), "ASC");
- break;
- case "desc":
- ds.sort(cm.getDataIndex(index), "DESC");
- break;
- default:
- index = cm.getIndexById(item.id.substr(4));
- if(index != -1){
- if(item.checked && cm.getColumnsBy(this.isHideableColumn, this).length <= 1){
- this.onDenyColumnHide();
- return false;
- }
- cm.setHidden(index, item.checked);
- }
- }
- return true;
- },
- isHideableColumn : function(c){
- return !c.hidden && !c.fixed;
- },
- beforeColMenuShow : function(){
- var cm = this.cm, colCount = cm.getColumnCount();
- this.colMenu.removeAll();
- for(var i = 0; i < colCount; i++){
- if(cm.config[i].fixed !== true && cm.config[i].hideable !== false){
- this.colMenu.add(new Ext.menu.CheckItem({
- id: "col-"+cm.getColumnId(i),
- text: cm.getColumnHeader(i),
- checked: !cm.isHidden(i),
- hideOnClick:false,
- disabled: cm.config[i].hideable === false
- }));
- }
- }
- },
- handleHdDown : function(e, t){
- if(Ext.fly(t).hasClass('x-grid3-hd-btn')){
- e.stopEvent();
- var hd = this.findHeaderCell(t);
- Ext.fly(hd).addClass('x-grid3-hd-menu-open');
- var index = this.getCellIndex(hd);
- this.hdCtxIndex = index;
- var ms = this.hmenu.items, cm = this.cm;
- ms.get("asc").setDisabled(!cm.isSortable(index));
- ms.get("desc").setDisabled(!cm.isSortable(index));
- this.hmenu.on("hide", function(){
- Ext.fly(hd).removeClass('x-grid3-hd-menu-open');
- }, this, {single:true});
- this.hmenu.show(t, "tl-bl?");
- }
- },
- handleHdOver : function(e, t){
- var hd = this.findHeaderCell(t);
- if(hd && !this.headersDisabled){
- this.activeHd = hd;
- this.activeHdIndex = this.getCellIndex(hd);
- var fly = this.fly(hd);
- this.activeHdRegion = fly.getRegion();
- if(!this.cm.isMenuDisabled(this.activeHdIndex)){
- fly.addClass("x-grid3-hd-over");
- this.activeHdBtn = fly.child('.x-grid3-hd-btn');
- if(this.activeHdBtn){
- this.activeHdBtn.dom.style.height = (hd.firstChild.offsetHeight-1)+'px';
- }
- }
- }
- },
- handleHdMove : function(e, t){
- if(this.activeHd && !this.headersDisabled){
- var hw = this.splitHandleWidth || 5;
- var r = this.activeHdRegion;
- var x = e.getPageX();
- var ss = this.activeHd.style;
- if(x - r.left <= hw && this.cm.isResizable(this.activeHdIndex-1)){
- ss.cursor = Ext.isAir ? 'move' : Ext.isSafari ? 'e-resize' : 'col-resize'; }else if(r.right - x <= (!this.activeHdBtn ? hw : 2) && this.cm.isResizable(this.activeHdIndex)){
- ss.cursor = Ext.isAir ? 'move' : Ext.isSafari ? 'w-resize' : 'col-resize';
- }else{
- ss.cursor = '';
- }
- }
- },
- handleHdOut : function(e, t){
- var hd = this.findHeaderCell(t);
- if(hd && (!Ext.isIE || !e.within(hd, true))){
- this.activeHd = null;
- this.fly(hd).removeClass("x-grid3-hd-over");
- hd.style.cursor = '';
- }
- },
- hasRows : function(){
- var fc = this.mainBody.dom.firstChild;
- return fc && fc.className != 'x-grid-empty';
- },
- bind : function(d, c){
- this.initData(d, c);
- }
- });
- Ext.grid.GridView.SplitDragZone = function(grid, hd){
- this.grid = grid;
- this.view = grid.getView();
- this.marker = this.view.resizeMarker;
- this.proxy = this.view.resizeProxy;
- Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this, hd,
- "gridSplitters" + this.grid.getGridEl().id, {
- dragElId : Ext.id(this.proxy.dom), resizeFrame:false
- });
- this.scroll = false;
- this.hw = this.view.splitHandleWidth || 5;
- };
- Ext.extend(Ext.grid.GridView.SplitDragZone, Ext.dd.DDProxy, {
- b4StartDrag : function(x, y){
- this.view.headersDisabled = true;
- var h = this.view.mainWrap.getHeight();
- this.marker.setHeight(h);
- this.marker.show();
- this.marker.alignTo(this.view.getHeaderCell(this.cellIndex), 'tl-tl', [-2, 0]);
- this.proxy.setHeight(h);
- var w = this.cm.getColumnWidth(this.cellIndex);
- var minw = Math.max(w-this.grid.minColumnWidth, 0);
- this.resetConstraints();
- this.setXConstraint(minw, 1000);
- this.setYConstraint(0, 0);
- this.minX = x - minw;
- this.maxX = x + 1000;
- this.startPos = x;
- Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
- },
- handleMouseDown : function(e){
- var t = this.view.findHeaderCell(e.getTarget());
- if(t){
- var xy = this.view.fly(t).getXY(), x = xy[0], y = xy[1];
- var exy = e.getXY(), ex = exy[0], ey = exy[1];
- var w = t.offsetWidth, adjust = false;
- if((ex - x) <= this.hw){
- adjust = -1;
- }else if((x+w) - ex <= this.hw){
- adjust = 0;
- }
- if(adjust !== false){
- this.cm = this.grid.colModel;
- var ci = this.view.getCellIndex(t);
- if(adjust == -1){
- if (ci + adjust < 0) {
- return;
- }
- while(this.cm.isHidden(ci+adjust)){
- --adjust;
- if(ci+adjust < 0){
- return;
- }
- }
- }
- this.cellIndex = ci+adjust;
- this.split = t.dom;
- if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
- Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
- }
- }else if(this.view.columnDrag){
- this.view.columnDrag.callHandleMouseDown(e);
- }
- }
- },
- endDrag : function(e){
- this.marker.hide();
- var v = this.view;
- var endX = Math.max(this.minX, e.getPageX());
- var diff = endX - this.startPos;
- v.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
- setTimeout(function(){
- v.headersDisabled = false;
- }, 50);
- },
- autoOffset : function(){
- this.setDelta(0,0);
- }
- });
- Ext.grid.GroupingView = Ext.extend(Ext.grid.GridView, {
-
- hideGroupedColumn:false,
-
- showGroupName:true,
-
- startCollapsed:false,
-
- enableGrouping:true,
-
- enableGroupingMenu:true,
-
- enableNoGroups:true,
-
- emptyGroupText : '(None)',
-
- ignoreAdd: false,
-
- groupTextTpl : '{text}',
-
-
-
- gidSeed : 1000,
-
- initTemplates : function(){
- Ext.grid.GroupingView.superclass.initTemplates.call(this);
- this.state = {};
- var sm = this.grid.getSelectionModel();
- sm.on(sm.selectRow ? 'beforerowselect' : 'beforecellselect',
- this.onBeforeRowSelect, this);
- if(!this.startGroup){
- this.startGroup = new Ext.XTemplate(
- '<div id="{groupId}" class="x-grid-group {cls}">',
- '<div id="{groupId}-hd" class="x-grid-group-hd" style="{style}"><div>', this.groupTextTpl ,'</div></div>',
- '<div id="{groupId}-bd" class="x-grid-group-body">'
- );
- }
- this.startGroup.compile();
- this.endGroup = '</div></div>';
- },
-
- findGroup : function(el){
- return Ext.fly(el).up('.x-grid-group', this.mainBody.dom);
- },
-
- getGroups : function(){
- return this.hasRows() ? this.mainBody.dom.childNodes : [];
- },
-
- onAdd : function(){
- if(this.enableGrouping && !this.ignoreAdd){
- var ss = this.getScrollState();
- this.refresh();
- this.restoreScroll(ss);
- }else if(!this.enableGrouping){
- Ext.grid.GroupingView.superclass.onAdd.apply(this, arguments);
- }
- },
-
- onRemove : function(ds, record, index, isUpdate){
- Ext.grid.GroupingView.superclass.onRemove.apply(this, arguments);
- var g = document.getElementById(record._groupId);
- if(g && g.childNodes[1].childNodes.length < 1){
- Ext.removeNode(g);
- }
- this.applyEmptyText();
- },
-
- refreshRow : function(record){
- if(this.ds.getCount()==1){
- this.refresh();
- }else{
- this.isUpdating = true;
- Ext.grid.GroupingView.superclass.refreshRow.apply(this, arguments);
- this.isUpdating = false;
- }
- },
-
- beforeMenuShow : function(){
- var field = this.getGroupField();
- var g = this.hmenu.items.get('groupBy');
- if(g){
- g.setDisabled(this.cm.config[this.hdCtxIndex].groupable === false);
- }
- var s = this.hmenu.items.get('showGroups');
- if(s){
- if (!!field){
- s.setDisabled(this.cm.config[this.hdCtxIndex].groupable === false)
- }
- s.setChecked(!!field);
- }
- },
-
- renderUI : function(){
- Ext.grid.GroupingView.superclass.renderUI.call(this);
- this.mainBody.on('mousedown', this.interceptMouse, this);
- if(this.enableGroupingMenu && this.hmenu){
- this.hmenu.add('-',{
- id:'groupBy',
- text: this.groupByText,
- handler: this.onGroupByClick,
- scope: this,
- iconCls:'x-group-by-icon'
- });
- if(this.enableNoGroups){
- this.hmenu.add({
- id:'showGroups',
- text: this.showGroupsText,
- checked: true,
- checkHandler: this.onShowGroupsClick,
- scope: this
- });
- }
- this.hmenu.on('beforeshow', this.beforeMenuShow, this);
- }
- },
-
- onGroupByClick : function(){
- this.grid.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));
- this.beforeMenuShow();
- },
-
- onShowGroupsClick : function(mi, checked){
- if(checked){
- this.onGroupByClick();
- }else{
- this.grid.store.clearGrouping();
- }
- },
-
- toggleGroup : function(group, expanded){
- this.grid.stopEditing(true);
- group = Ext.getDom(group);
- var gel = Ext.fly(group);
- expanded = expanded !== undefined ?
- expanded : gel.hasClass('x-grid-group-collapsed');
- this.state[gel.dom.id] = expanded;
- gel[expanded ? 'removeClass' : 'addClass']('x-grid-group-collapsed');
- },
-
- toggleAllGroups : function(expanded){
- var groups = this.getGroups();
- for(var i = 0, len = groups.length; i < len; i++){
- this.toggleGroup(groups[i], expanded);
- }
- },
-
- expandAllGroups : function(){
- this.toggleAllGroups(true);
- },
-
- collapseAllGroups : function(){
- this.toggleAllGroups(false);
- },
-
- interceptMouse : function(e){
- var hd = e.getTarget('.x-grid-group-hd', this.mainBody);
- if(hd){
- e.stopEvent();
- this.toggleGroup(hd.parentNode);
- }
- },
-
- getGroup : function(v, r, groupRenderer, rowIndex, colIndex, ds){
- var g = groupRenderer ? groupRenderer(v, {}, r, rowIndex, colIndex, ds) : String(v);
- if(g === ''){
- g = this.cm.config[colIndex].emptyGroupText || this.emptyGroupText;
- }
- return g;
- },
-
- getGroupField : function(){
- return this.grid.store.getGroupState();
- },
-
- renderRows : function(){
- var groupField = this.getGroupField();
- var eg = !!groupField;
-
- if(this.hideGroupedColumn) {
- var colIndex = this.cm.findColumnIndex(groupField);
- if(!eg && this.lastGroupField !== undefined) {
- this.mainBody.update('');
- this.cm.setHidden(this.cm.findColumnIndex(this.lastGroupField), false);
- delete this.lastGroupField;
- }else if (eg && this.lastGroupField === undefined) {
- this.lastGroupField = groupField;
- this.cm.setHidden(colIndex, true);
- }else if (eg && this.lastGroupField !== undefined && groupField !== this.lastGroupField) {
- this.mainBody.update('');
- var oldIndex = this.cm.findColumnIndex(this.lastGroupField);
- this.cm.setHidden(oldIndex, false);
- this.lastGroupField = groupField;
- this.cm.setHidden(colIndex, true);
- }
- }
- return Ext.grid.GroupingView.superclass.renderRows.apply(
- this, arguments);
- },
-
- doRender : function(cs, rs, ds, startRow, colCount, stripe){
- if(rs.length < 1){
- return '';
- }
- var groupField = this.getGroupField();
- var colIndex = this.cm.findColumnIndex(groupField);
- this.enableGrouping = !!groupField;
- if(!this.enableGrouping || this.isUpdating){
- return Ext.grid.GroupingView.superclass.doRender.apply(
- this, arguments);
- }
- var gstyle = 'width:'+this.getTotalWidth()+';';
- var gidPrefix = this.grid.getGridEl().id;
- var cfg = this.cm.config[colIndex];
- var groupRenderer = cfg.groupRenderer || cfg.renderer;
- var prefix = this.showGroupName ?
- (cfg.groupName || cfg.header)+': ' : '';
- var groups = [], curGroup, i, len, gid;
- for(i = 0, len = rs.length; i < len; i++){
- var rowIndex = startRow + i;
- var r = rs[i],
- gvalue = r.data[groupField],
- g = this.getGroup(gvalue, r, groupRenderer, rowIndex, colIndex, ds);
- if(!curGroup || curGroup.group != g){
- gid = gidPrefix + '-gp-' + groupField + '-' + Ext.util.Format.htmlEncode(g);
-
-
- var isCollapsed = typeof this.state[gid] !== 'undefined' ? !this.state[gid] : this.startCollapsed;
- var gcls = isCollapsed ? 'x-grid-group-collapsed' : '';
- curGroup = {
- group: g,
- gvalue: gvalue,
- text: prefix + g,
- groupId: gid,
- startRow: rowIndex,
- rs: [r],
- cls: gcls,
- style: gstyle
- };
- groups.push(curGroup);
- }else{
- curGroup.rs.push(r);
- }
- r._groupId = gid;
- }
- var buf = [];
- for(i = 0, len = groups.length; i < len; i++){
- var g = groups[i];
- this.doGroupStart(buf, g, cs, ds, colCount);
- buf[buf.length] = Ext.grid.GroupingView.superclass.doRender.call(
- this, cs, g.rs, ds, g.startRow, colCount, stripe);
- this.doGroupEnd(buf, g, cs, ds, colCount);
- }
- return buf.join('');
- },
-
- getGroupId : function(value){
- var gidPrefix = this.grid.getGridEl().id;
- var groupField = this.getGroupField();
- var colIndex = this.cm.findColumnIndex(groupField);
- var cfg = this.cm.config[colIndex];
- var groupRenderer = cfg.groupRenderer || cfg.renderer;
- var gtext = this.getGroup(value, {data:{}}, groupRenderer, 0, colIndex, this.ds);
- return gidPrefix + '-gp-' + groupField + '-' + Ext.util.Format.htmlEncode(value);
- },
-
- doGroupStart : function(buf, g, cs, ds, colCount){
- buf[buf.length] = this.startGroup.apply(g);
- },
-
- doGroupEnd : function(buf, g, cs, ds, colCount){
- buf[buf.length] = this.endGroup;
- },
-
- getRows : function(){
- if(!this.enableGrouping){
- return Ext.grid.GroupingView.superclass.getRows.call(this);
- }
- var r = [];
- var g, gs = this.getGroups();
- for(var i = 0, len = gs.length; i < len; i++){
- g = gs[i].childNodes[1].childNodes;
- for(var j = 0, jlen = g.length; j < jlen; j++){
- r[r.length] = g[j];
- }
- }
- return r;
- },
-
- updateGroupWidths : function(){
- if(!this.enableGrouping || !this.hasRows()){
- return;
- }
- var tw = Math.max(this.cm.getTotalWidth(), this.el.dom.offsetWidth-this.scrollOffset) +'px';
- var gs = this.getGroups();
- for(var i = 0, len = gs.length; i < len; i++){
- gs[i].firstChild.style.width = tw;
- }
- },
-
- onColumnWidthUpdated : function(col, w, tw){
- this.updateGroupWidths();
- },
-
- onAllColumnWidthsUpdated : function(ws, tw){
- this.updateGroupWidths();
- },
-
- onColumnHiddenUpdated : function(col, hidden, tw){
- this.updateGroupWidths();
- },
-
- onLayout : function(){
- this.updateGroupWidths();
- },
-
- onBeforeRowSelect : function(sm, rowIndex){
- if(!this.enableGrouping){
- return;
- }
- var row = this.getRow(rowIndex);
- if(row && !row.offsetParent){
- var g = this.findGroup(row);
- this.toggleGroup(g, true);
- }
- },
-
- groupByText: 'Group By This Field',
-
- showGroupsText: 'Show in Groups'
- });
- Ext.grid.GroupingView.GROUP_ID = 1000;
- Ext.grid.HeaderDragZone = function(grid, hd, hd2){
- this.grid = grid;
- this.view = grid.getView();
- this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
- Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd);
- if(hd2){
- this.setHandleElId(Ext.id(hd));
- this.setOuterHandleElId(Ext.id(hd2));
- }
- this.scroll = false;
- };
- Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, {
- maxDragWidth: 120,
- getDragData : function(e){
- var t = Ext.lib.Event.getTarget(e);
- var h = this.view.findHeaderCell(t);
- if(h){
- return {ddel: h.firstChild, header:h};
- }
- return false;
- },
- onInitDrag : function(e){
- this.view.headersDisabled = true;
- var clone = this.dragData.ddel.cloneNode(true);
- clone.id = Ext.id();
- clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px";
- this.proxy.update(clone);
- return true;
- },
- afterValidDrop : function(){
- var v = this.view;
- setTimeout(function(){
- v.headersDisabled = false;
- }, 50);
- },
- afterInvalidDrop : function(){
- var v = this.view;
- setTimeout(function(){
- v.headersDisabled = false;
- }, 50);
- }
- });
- Ext.grid.HeaderDropZone = function(grid, hd, hd2){
- this.grid = grid;
- this.view = grid.getView();
-
- this.proxyTop = Ext.DomHelper.append(document.body, {
- cls:"col-move-top", html:" "
- }, true);
- this.proxyBottom = Ext.DomHelper.append(document.body, {
- cls:"col-move-bottom", html:" "
- }, true);
- this.proxyTop.hide = this.proxyBottom.hide = function(){
- this.setLeftTop(-100,-100);
- this.setStyle("visibility", "hidden");
- };
- this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
-
-
- Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom);
- };
- Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, {
- proxyOffsets : [-4, -9],
- fly: Ext.Element.fly,
- getTargetFromEvent : function(e){
- var t = Ext.lib.Event.getTarget(e);
- var cindex = this.view.findCellIndex(t);
- if(cindex !== false){
- return this.view.getHeaderCell(cindex);
- }
- },
- nextVisible : function(h){
- var v = this.view, cm = this.grid.colModel;
- h = h.nextSibling;
- while(h){
- if(!cm.isHidden(v.getCellIndex(h))){
- return h;
- }
- h = h.nextSibling;
- }
- return null;
- },
- prevVisible : function(h){
- var v = this.view, cm = this.grid.colModel;
- h = h.prevSibling;
- while(h){
- if(!cm.isHidden(v.getCellIndex(h))){
- return h;
- }
- h = h.prevSibling;
- }
- return null;
- },
- positionIndicator : function(h, n, e){
- var x = Ext.lib.Event.getPageX(e);
- var r = Ext.lib.Dom.getRegion(n.firstChild);
- var px, pt, py = r.top + this.proxyOffsets[1];
- if((r.right - x) <= (r.right-r.left)/2){
- px = r.right+this.view.borderWidth;
- pt = "after";
- }else{
- px = r.left;
- pt = "before";
- }
- var oldIndex = this.view.getCellIndex(h);
- var newIndex = this.view.getCellIndex(n);
- if(this.grid.colModel.isFixed(newIndex)){
- return false;
- }
- var locked = this.grid.colModel.isLocked(newIndex);
- if(pt == "after"){
- newIndex++;
- }
- if(oldIndex < newIndex){
- newIndex--;
- }
- if(oldIndex == newIndex && (locked == this.grid.colModel.isLocked(oldIndex))){
- return false;
- }
- px += this.proxyOffsets[0];
- this.proxyTop.setLeftTop(px, py);
- this.proxyTop.show();
- if(!this.bottomOffset){
- this.bottomOffset = this.view.mainHd.getHeight();
- }
- this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset);
- this.proxyBottom.show();
- return pt;
- },
- onNodeEnter : function(n, dd, e, data){
- if(data.header != n){
- this.positionIndicator(data.header, n, e);
- }
- },
- onNodeOver : function(n, dd, e, data){
- var result = false;
- if(data.header != n){
- result = this.positionIndicator(data.header, n, e);
- }
- if(!result){
- this.proxyTop.hide();
- this.proxyBottom.hide();
- }
- return result ? this.dropAllowed : this.dropNotAllowed;
- },
- onNodeOut : function(n, dd, e, data){
- this.proxyTop.hide();
- this.proxyBottom.hide();
- },
- onNodeDrop : function(n, dd, e, data){
- var h = data.header;
- if(h != n){
- var cm = this.grid.colModel;
- var x = Ext.lib.Event.getPageX(e);
- var r = Ext.lib.Dom.getRegion(n.firstChild);
- var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";
- var oldIndex = this.view.getCellIndex(h);
- var newIndex = this.view.getCellIndex(n);
- var locked = cm.isLocked(newIndex);
- if(pt == "after"){
- newIndex++;
- }
- if(oldIndex < newIndex){
- newIndex--;
- }
- if(oldIndex == newIndex && (locked == cm.isLocked(oldIndex))){
- return false;
- }
- cm.setLocked(oldIndex, locked, true);
- cm.moveColumn(oldIndex, newIndex);
- this.grid.fireEvent("columnmove", oldIndex, newIndex);
- return true;
- }
- return false;
- }
- });
- Ext.grid.GridView.ColumnDragZone = function(grid, hd){
- Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null);
- this.proxy.el.addClass('x-grid3-col-dd');
- };
- Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, {
- handleMouseDown : function(e){
- },
- callHandleMouseDown : function(e){
- Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);
- }
- });
- Ext.grid.SplitDragZone = function(grid, hd, hd2){
- this.grid = grid;
- this.view = grid.getView();
- this.proxy = this.view.resizeProxy;
- Ext.grid.SplitDragZone.superclass.constructor.call(this, hd,
- "gridSplitters" + this.grid.getGridEl().id, {
- dragElId : Ext.id(this.proxy.dom), resizeFrame:false
- });
- this.setHandleElId(Ext.id(hd));
- this.setOuterHandleElId(Ext.id(hd2));
- this.scroll = false;
- };
- Ext.extend(Ext.grid.SplitDragZone, Ext.dd.DDProxy, {
- fly: Ext.Element.fly,
- b4StartDrag : function(x, y){
- this.view.headersDisabled = true;
- this.proxy.setHeight(this.view.mainWrap.getHeight());
- var w = this.cm.getColumnWidth(this.cellIndex);
- var minw = Math.max(w-this.grid.minColumnWidth, 0);
- this.resetConstraints();
- this.setXConstraint(minw, 1000);
- this.setYConstraint(0, 0);
- this.minX = x - minw;
- this.maxX = x + 1000;
- this.startPos = x;
- Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
- },
- handleMouseDown : function(e){
- ev = Ext.EventObject.setEvent(e);
- var t = this.fly(ev.getTarget());
- if(t.hasClass("x-grid-split")){
- this.cellIndex = this.view.getCellIndex(t.dom);
- this.split = t.dom;
- this.cm = this.grid.colModel;
- if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
- Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
- }
- }
- },
- endDrag : function(e){
- this.view.headersDisabled = false;
- var endX = Math.max(this.minX, Ext.lib.Event.getPageX(e));
- var diff = endX - this.startPos;
- this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
- },
- autoOffset : function(){
- this.setDelta(0,0);
- }
- });
- Ext.grid.GridDragZone = function(grid, config){
- this.view = grid.getView();
- Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, config);
- if(this.view.lockedBody){
- this.setHandleElId(Ext.id(this.view.mainBody.dom));
- this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom));
- }
- this.scroll = false;
- this.grid = grid;
- this.ddel = document.createElement('div');
- this.ddel.className = 'x-grid-dd-wrap';
- };
- Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, {
- ddGroup : "GridDD",
- getDragData : function(e){
- var t = Ext.lib.Event.getTarget(e);
- var rowIndex = this.view.findRowIndex(t);
- if(rowIndex !== false){
- var sm = this.grid.selModel;
- if(!sm.isSelected(rowIndex) || e.hasModifier()){
- sm.handleMouseDown(this.grid, rowIndex, e);
- }
- return {grid: this.grid, ddel: this.ddel, rowIndex: rowIndex, selections:sm.getSelections()};
- }
- return false;
- },
- onInitDrag : function(e){
- var data = this.dragData;
- this.ddel.innerHTML = this.grid.getDragDropText();
- this.proxy.update(this.ddel);
- },
- afterRepair : function(){
- this.dragging = false;
- },
- getRepairXY : function(e, data){
- return false;
- },
- onEndDrag : function(data, e){
- },
- onValidDrop : function(dd, e, id){
- this.hideProxy();
- },
- beforeInvalidDrop : function(e, id){
- }
- });
- Ext.grid.ColumnModel = function(config){
-
- this.defaultWidth = 100;
-
- this.defaultSortable = false;
-
- if(config.columns){
- Ext.apply(this, config);
- this.setConfig(config.columns, true);
- }else{
- this.setConfig(config, true);
- }
- this.addEvents(
-
- "widthchange",
-
- "headerchange",
-
- "hiddenchange",
-
- "columnmoved",
-
- "columnlockchange",
-
- "configchange"
- );
- Ext.grid.ColumnModel.superclass.constructor.call(this);
- };
- Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- getColumnId : function(index){
- return this.config[index].id;
- },
-
- setConfig : function(config, initial){
- if(!initial){
- delete this.totalWidth;
- for(var i = 0, len = this.config.length; i < len; i++){
- var c = this.config[i];
- if(c.editor){
- c.editor.destroy();
- }
- }
- }
- this.config = config;
- this.lookup = {};
-
- for(var i = 0, len = config.length; i < len; i++){
- var c = config[i];
- if(typeof c.renderer == "string"){
- c.renderer = Ext.util.Format[c.renderer];
- }
- if(typeof c.id == "undefined"){
- c.id = i;
- }
- if(c.editor && c.editor.isFormField){
- c.editor = new Ext.grid.GridEditor(c.editor);
- }
- this.lookup[c.id] = c;
- }
- if(!initial){
- this.fireEvent('configchange', this);
- }
- },
-
- getColumnById : function(id){
- return this.lookup[id];
- },
-
- getIndexById : function(id){
- for(var i = 0, len = this.config.length; i < len; i++){
- if(this.config[i].id == id){
- return i;
- }
- }
- return -1;
- },
-
- moveColumn : function(oldIndex, newIndex){
- var c = this.config[oldIndex];
- this.config.splice(oldIndex, 1);
- this.config.splice(newIndex, 0, c);
- this.dataMap = null;
- this.fireEvent("columnmoved", this, oldIndex, newIndex);
- },
-
- isLocked : function(colIndex){
- return this.config[colIndex].locked === true;
- },
-
- setLocked : function(colIndex, value, suppressEvent){
- if(this.isLocked(colIndex) == value){
- return;
- }
- this.config[colIndex].locked = value;
- if(!suppressEvent){
- this.fireEvent("columnlockchange", this, colIndex, value);
- }
- },
-
- getTotalLockedWidth : function(){
- var totalWidth = 0;
- for(var i = 0; i < this.config.length; i++){
- if(this.isLocked(i) && !this.isHidden(i)){
- this.totalWidth += this.getColumnWidth(i);
- }
- }
- return totalWidth;
- },
-
- getLockedCount : function(){
- for(var i = 0, len = this.config.length; i < len; i++){
- if(!this.isLocked(i)){
- return i;
- }
- }
- },
-
- getColumnCount : function(visibleOnly){
- if(visibleOnly === true){
- var c = 0;
- for(var i = 0, len = this.config.length; i < len; i++){
- if(!this.isHidden(i)){
- c++;
- }
- }
- return c;
- }
- return this.config.length;
- },
-
- getColumnsBy : function(fn, scope){
- var r = [];
- for(var i = 0, len = this.config.length; i < len; i++){
- var c = this.config[i];
- if(fn.call(scope||this, c, i) === true){
- r[r.length] = c;
- }
- }
- return r;
- },
-
- isSortable : function(col){
- if(typeof this.config[col].sortable == "undefined"){
- return this.defaultSortable;
- }
- return this.config[col].sortable;
- },
-
- isMenuDisabled : function(col){
- return !!this.config[col].menuDisabled;
- },
-
- getRenderer : function(col){
- if(!this.config[col].renderer){
- return Ext.grid.ColumnModel.defaultRenderer;
- }
- return this.config[col].renderer;
- },
-
- setRenderer : function(col, fn){
- this.config[col].renderer = fn;
- },
-
- getColumnWidth : function(col){
- return this.config[col].width || this.defaultWidth;
- },
-
- setColumnWidth : function(col, width, suppressEvent){
- this.config[col].width = width;
- this.totalWidth = null;
- if(!suppressEvent){
- this.fireEvent("widthchange", this, col, width);
- }
- },
-
- getTotalWidth : function(includeHidden){
- if(!this.totalWidth){
- this.totalWidth = 0;
- for(var i = 0, len = this.config.length; i < len; i++){
- if(includeHidden || !this.isHidden(i)){
- this.totalWidth += this.getColumnWidth(i);
- }
- }
- }
- return this.totalWidth;
- },
-
- getColumnHeader : function(col){
- return this.config[col].header;
- },
-
- setColumnHeader : function(col, header){
- this.config[col].header = header;
- this.fireEvent("headerchange", this, col, header);
- },
-
- getColumnTooltip : function(col){
- return this.config[col].tooltip;
- },
-
- setColumnTooltip : function(col, tooltip){
- this.config[col].tooltip = tooltip;
- },
-
- getDataIndex : function(col){
- return this.config[col].dataIndex;
- },
-
- setDataIndex : function(col, dataIndex){
- this.config[col].dataIndex = dataIndex;
- },
- findColumnIndex : function(dataIndex){
- var c = this.config;
- for(var i = 0, len = c.length; i < len; i++){
- if(c[i].dataIndex == dataIndex){
- return i;
- }
- }
- return -1;
- },
-
- isCellEditable : function(colIndex, rowIndex){
- return (this.config[colIndex].editable || (typeof this.config[colIndex].editable == "undefined" && this.config[colIndex].editor)) ? true : false;
- },
-
- getCellEditor : function(colIndex, rowIndex){
- return this.config[colIndex].editor;
- },
-
- setEditable : function(col, editable){
- this.config[col].editable = editable;
- },
-
- isHidden : function(colIndex){
- return this.config[colIndex].hidden;
- },
-
- isFixed : function(colIndex){
- return this.config[colIndex].fixed;
- },
-
- isResizable : function(colIndex){
- return colIndex >= 0 && this.config[colIndex].resizable !== false && this.config[colIndex].fixed !== true;
- },
-
- setHidden : function(colIndex, hidden){
- var c = this.config[colIndex];
- if(c.hidden !== hidden){
- c.hidden = hidden;
- this.totalWidth = null;
- this.fireEvent("hiddenchange", this, colIndex, hidden);
- }
- },
-
- setEditor : function(col, editor){
- this.config[col].editor = editor;
- }
- });
- Ext.grid.ColumnModel.defaultRenderer = function(value){
- if(typeof value == "string" && value.length < 1){
- return " ";
- }
- return value;
- };
- Ext.grid.DefaultColumnModel = Ext.grid.ColumnModel;
- Ext.grid.AbstractSelectionModel = function(){
- this.locked = false;
- Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);
- };
- Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable, {
-
- init : function(grid){
- this.grid = grid;
- this.initEvents();
- },
-
- lock : function(){
- this.locked = true;
- },
-
- unlock : function(){
- this.locked = false;
- },
-
- isLocked : function(){
- return this.locked;
- }
- });
- Ext.grid.RowSelectionModel = function(config){
- Ext.apply(this, config);
- this.selections = new Ext.util.MixedCollection(false, function(o){
- return o.id;
- });
- this.last = false;
- this.lastActive = false;
- this.addEvents(
-
- "selectionchange",
-
- "beforerowselect",
-
- "rowselect",
-
- "rowdeselect"
- );
- Ext.grid.RowSelectionModel.superclass.constructor.call(this);
- };
- Ext.extend(Ext.grid.RowSelectionModel, Ext.grid.AbstractSelectionModel, {
-
- singleSelect : false,
-
- initEvents : function(){
- if(!this.grid.enableDragDrop && !this.grid.enableDrag){
- this.grid.on("rowmousedown", this.handleMouseDown, this);
- }else{ this.grid.on("rowclick", function(grid, rowIndex, e) {
- if(e.button === 0 && !e.shiftKey && !e.ctrlKey) {
- this.selectRow(rowIndex, false);
- grid.view.focusRow(rowIndex);
- }
- }, this);
- }
- this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {
- "up" : function(e){
- if(!e.shiftKey){
- this.selectPrevious(e.shiftKey);
- }else if(this.last !== false && this.lastActive !== false){
- var last = this.last;
- this.selectRange(this.last, this.lastActive-1);
- this.grid.getView().focusRow(this.lastActive);
- if(last !== false){
- this.last = last;
- }
- }else{
- this.selectFirstRow();
- }
- },
- "down" : function(e){
- if(!e.shiftKey){
- this.selectNext(e.shiftKey);
- }else if(this.last !== false && this.lastActive !== false){
- var last = this.last;
- this.selectRange(this.last, this.lastActive+1);
- this.grid.getView().focusRow(this.lastActive);
- if(last !== false){
- this.last = last;
- }
- }else{
- this.selectFirstRow();
- }
- },
- scope: this
- });
- var view = this.grid.view;
- view.on("refresh", this.onRefresh, this);
- view.on("rowupdated", this.onRowUpdated, this);
- view.on("rowremoved", this.onRemove, this);
- },
- onRefresh : function(){
- var ds = this.grid.store, index;
- var s = this.getSelections();
- this.clearSelections(true);
- for(var i = 0, len = s.length; i < len; i++){
- var r = s[i];
- if((index = ds.indexOfId(r.id)) != -1){
- this.selectRow(index, true);
- }
- }
- if(s.length != this.selections.getCount()){
- this.fireEvent("selectionchange", this);
- }
- },
- onRemove : function(v, index, r){
- if(this.selections.remove(r) !== false){
- this.fireEvent('selectionchange', this);
- }
- },
- onRowUpdated : function(v, index, r){
- if(this.isSelected(r)){
- v.onRowSelect(index);
- }
- },
-
- selectRecords : function(records, keepExisting){
- if(!keepExisting){
- this.clearSelections();
- }
- var ds = this.grid.store;
- for(var i = 0, len = records.length; i < len; i++){
- this.selectRow(ds.indexOf(records[i]), true);
- }
- },
-
- getCount : function(){
- return this.selections.length;
- },
-
- selectFirstRow : function(){
- this.selectRow(0);
- },
-
- selectLastRow : function(keepExisting){
- this.selectRow(this.grid.store.getCount() - 1, keepExisting);
- },
-
- selectNext : function(keepExisting){
- if(this.hasNext()){
- this.selectRow(this.last+1, keepExisting);
- this.grid.getView().focusRow(this.last);
- return true;
- }
- return false;
- },
-
- selectPrevious : function(keepExisting){
- if(this.hasPrevious()){
- this.selectRow(this.last-1, keepExisting);
- this.grid.getView().focusRow(this.last);
- return true;
- }
- return false;
- },
-
- hasNext : function(){
- return this.last !== false && (this.last+1) < this.grid.store.getCount();
- },
-
- hasPrevious : function(){
- return !!this.last;
- },
-
- getSelections : function(){
- return [].concat(this.selections.items);
- },
-
- getSelected : function(){
- return this.selections.itemAt(0);
- },
-
- each : function(fn, scope){
- var s = this.getSelections();
- for(var i = 0, len = s.length; i < len; i++){
- if(fn.call(scope || this, s[i], i) === false){
- return false;
- }
- }
- return true;
- },
-
- clearSelections : function(fast){
- if(this.locked) return;
- if(fast !== true){
- var ds = this.grid.store;
- var s = this.selections;
- s.each(function(r){
- this.deselectRow(ds.indexOfId(r.id));
- }, this);
- s.clear();
- }else{
- this.selections.clear();
- }
- this.last = false;
- },
-
- selectAll : function(){
- if(this.locked) return;
- this.selections.clear();
- for(var i = 0, len = this.grid.store.getCount(); i < len; i++){
- this.selectRow(i, true);
- }
- },
-
- hasSelection : function(){
- return this.selections.length > 0;
- },
-
- isSelected : function(index){
- var r = typeof index == "number" ? this.grid.store.getAt(index) : index;
- return (r && this.selections.key(r.id) ? true : false);
- },
-
- isIdSelected : function(id){
- return (this.selections.key(id) ? true : false);
- },
- handleMouseDown : function(g, rowIndex, e){
- if(e.button !== 0 || this.isLocked()){
- return;
- };
- var view = this.grid.getView();
- if(e.shiftKey && this.last !== false){
- var last = this.last;
- this.selectRange(last, rowIndex, e.ctrlKey);
- this.last = last; view.focusRow(rowIndex);
- }else{
- var isSelected = this.isSelected(rowIndex);
- if(e.ctrlKey && isSelected){
- this.deselectRow(rowIndex);
- }else if(!isSelected || this.getCount() > 1){
- this.selectRow(rowIndex, e.ctrlKey || e.shiftKey);
- view.focusRow(rowIndex);
- }
- }
- },
-
- selectRows : function(rows, keepExisting){
- if(!keepExisting){
- this.clearSelections();
- }
- for(var i = 0, len = rows.length; i < len; i++){
- this.selectRow(rows[i], true);
- }
- },
-
- selectRange : function(startRow, endRow, keepExisting){
- if(this.locked) return;
- if(!keepExisting){
- this.clearSelections();
- }
- if(startRow <= endRow){
- for(var i = startRow; i <= endRow; i++){
- this.selectRow(i, true);
- }
- }else{
- for(var i = startRow; i >= endRow; i--){
- this.selectRow(i, true);
- }
- }
- },
-
- deselectRange : function(startRow, endRow, preventViewNotify){
- if(this.locked) return;
- for(var i = startRow; i <= endRow; i++){
- this.deselectRow(i, preventViewNotify);
- }
- },
-
- selectRow : function(index, keepExisting, preventViewNotify){
- if(this.locked || (index < 0 || index >= this.grid.store.getCount())) return;
- var r = this.grid.store.getAt(index);
- if(r && this.fireEvent("beforerowselect", this, index, keepExisting, r) !== false){
- if(!keepExisting || this.singleSelect){
- this.clearSelections();
- }
- this.selections.add(r);
- this.last = this.lastActive = index;
- if(!preventViewNotify){
- this.grid.getView().onRowSelect(index);
- }
- this.fireEvent("rowselect", this, index, r);
- this.fireEvent("selectionchange", this);
- }
- },
-
- deselectRow : function(index, preventViewNotify){
- if(this.locked) return;
- if(this.last == index){
- this.last = false;
- }
- if(this.lastActive == index){
- this.lastActive = false;
- }
- var r = this.grid.store.getAt(index);
- if(r){
- this.selections.remove(r);
- if(!preventViewNotify){
- this.grid.getView().onRowDeselect(index);
- }
- this.fireEvent("rowdeselect", this, index, r);
- this.fireEvent("selectionchange", this);
- }
- },
- restoreLast : function(){
- if(this._last){
- this.last = this._last;
- }
- },
- acceptsNav : function(row, col, cm){
- return !cm.isHidden(col) && cm.isCellEditable(col, row);
- },
- onEditorKey : function(field, e){
- var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
- var shift = e.shiftKey;
- if(k == e.TAB){
- e.stopEvent();
- ed.completeEdit();
- if(shift){
- newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
- }else{
- newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
- }
- }else if(k == e.ENTER){
- e.stopEvent();
- ed.completeEdit();
- if(this.moveEditorOnEnter !== false){
- if(shift){
- newCell = g.walkCells(ed.row - 1, ed.col, -1, this.acceptsNav, this);
- }else{
- newCell = g.walkCells(ed.row + 1, ed.col, 1, this.acceptsNav, this);
- }
- }
- }else if(k == e.ESC){
- ed.cancelEdit();
- }
- if(newCell){
- g.startEditing(newCell[0], newCell[1]);
- }
- }
- });
- Ext.grid.CellSelectionModel = function(config){
- Ext.apply(this, config);
- this.selection = null;
- this.addEvents(
-
- "beforecellselect",
-
- "cellselect",
-
- "selectionchange"
- );
- Ext.grid.CellSelectionModel.superclass.constructor.call(this);
- };
- Ext.extend(Ext.grid.CellSelectionModel, Ext.grid.AbstractSelectionModel, {
-
- initEvents : function(){
- this.grid.on("cellmousedown", this.handleMouseDown, this);
- this.grid.getGridEl().on(Ext.isIE ? "keydown" : "keypress", this.handleKeyDown, this);
- var view = this.grid.view;
- view.on("refresh", this.onViewChange, this);
- view.on("rowupdated", this.onRowUpdated, this);
- view.on("beforerowremoved", this.clearSelections, this);
- view.on("beforerowsinserted", this.clearSelections, this);
- if(this.grid.isEditor){
- this.grid.on("beforeedit", this.beforeEdit, this);
- }
- },
- beforeEdit : function(e){
- this.select(e.row, e.column, false, true, e.record);
- },
- onRowUpdated : function(v, index, r){
- if(this.selection && this.selection.record == r){
- v.onCellSelect(index, this.selection.cell[1]);
- }
- },
- onViewChange : function(){
- this.clearSelections(true);
- },
-
- getSelectedCell : function(){
- return this.selection ? this.selection.cell : null;
- },
-
- clearSelections : function(preventNotify){
- var s = this.selection;
- if(s){
- if(preventNotify !== true){
- this.grid.view.onCellDeselect(s.cell[0], s.cell[1]);
- }
- this.selection = null;
- this.fireEvent("selectionchange", this, null);
- }
- },
-
- hasSelection : function(){
- return this.selection ? true : false;
- },
-
- handleMouseDown : function(g, row, cell, e){
- if(e.button !== 0 || this.isLocked()){
- return;
- };
- this.select(row, cell);
- },
-
- select : function(rowIndex, colIndex, preventViewNotify, preventFocus, r){
- if(this.fireEvent("beforecellselect", this, rowIndex, colIndex) !== false){
- this.clearSelections();
- r = r || this.grid.store.getAt(rowIndex);
- this.selection = {
- record : r,
- cell : [rowIndex, colIndex]
- };
- if(!preventViewNotify){
- var v = this.grid.getView();
- v.onCellSelect(rowIndex, colIndex);
- if(preventFocus !== true){
- v.focusCell(rowIndex, colIndex);
- }
- }
- this.fireEvent("cellselect", this, rowIndex, colIndex);
- this.fireEvent("selectionchange", this, this.selection);
- }
- },
- isSelectable : function(rowIndex, colIndex, cm){
- return !cm.isHidden(colIndex);
- },
-
- handleKeyDown : function(e){
- if(!e.isNavKeyPress()){
- return;
- }
- var g = this.grid, s = this.selection;
- if(!s){
- e.stopEvent();
- var cell = g.walkCells(0, 0, 1, this.isSelectable, this);
- if(cell){
- this.select(cell[0], cell[1]);
- }
- return;
- }
- var sm = this;
- var walk = function(row, col, step){
- return g.walkCells(row, col, step, sm.isSelectable, sm);
- };
- var k = e.getKey(), r = s.cell[0], c = s.cell[1];
- var newCell;
- switch(k){
- case e.TAB:
- if(e.shiftKey){
- newCell = walk(r, c-1, -1);
- }else{
- newCell = walk(r, c+1, 1);
- }
- break;
- case e.DOWN:
- newCell = walk(r+1, c, 1);
- break;
- case e.UP:
- newCell = walk(r-1, c, -1);
- break;
- case e.RIGHT:
- newCell = walk(r, c+1, 1);
- break;
- case e.LEFT:
- newCell = walk(r, c-1, -1);
- break;
- case e.ENTER:
- if(g.isEditor && !g.editing){
- g.startEditing(r, c);
- e.stopEvent();
- return;
- }
- break;
- };
- if(newCell){
- this.select(newCell[0], newCell[1]);
- e.stopEvent();
- }
- },
- acceptsNav : function(row, col, cm){
- return !cm.isHidden(col) && cm.isCellEditable(col, row);
- },
- onEditorKey : function(field, e){
- var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
- if(k == e.TAB){
- if(e.shiftKey){
- newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
- }else{
- newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
- }
- e.stopEvent();
- }else if(k == e.ENTER){
- ed.completeEdit();
- e.stopEvent();
- }else if(k == e.ESC){
- e.stopEvent();
- ed.cancelEdit();
- }
- if(newCell){
- g.startEditing(newCell[0], newCell[1]);
- }
- }
- });
- Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {
-
- clicksToEdit: 2,
-
- isEditor : true,
-
- detectEdit: false,
-
- autoEncode : false,
-
-
- trackMouseOver: false,
-
-
- initComponent : function(){
- Ext.grid.EditorGridPanel.superclass.initComponent.call(this);
- if(!this.selModel){
- this.selModel = new Ext.grid.CellSelectionModel();
- }
- this.activeEditor = null;
- this.addEvents(
-
- "beforeedit",
-
- "afteredit",
-
- "validateedit"
- );
- },
-
- initEvents : function(){
- Ext.grid.EditorGridPanel.superclass.initEvents.call(this);
-
- this.on("bodyscroll", this.stopEditing, this, [true]);
- if(this.clicksToEdit == 1){
- this.on("cellclick", this.onCellDblClick, this);
- }else {
- if(this.clicksToEdit == 'auto' && this.view.mainBody){
- this.view.mainBody.on("mousedown", this.onAutoEditClick, this);
- }
- this.on("celldblclick", this.onCellDblClick, this);
- }
- this.getGridEl().addClass("xedit-grid");
- },
-
- onCellDblClick : function(g, row, col){
- this.startEditing(row, col);
- },
-
- onAutoEditClick : function(e, t){
- if(e.button !== 0){
- return;
- }
- var row = this.view.findRowIndex(t);
- var col = this.view.findCellIndex(t);
- if(row !== false && col !== false){
- this.stopEditing();
- if(this.selModel.getSelectedCell){
- var sc = this.selModel.getSelectedCell();
- if(sc && sc.cell[0] === row && sc.cell[1] === col){
- this.startEditing(row, col);
- }
- }else{
- if(this.selModel.isSelected(row)){
- this.startEditing(row, col);
- }
- }
- }
- },
-
- onEditComplete : function(ed, value, startValue){
- this.editing = false;
- this.activeEditor = null;
- ed.un("specialkey", this.selModel.onEditorKey, this.selModel);
- var r = ed.record;
- var field = this.colModel.getDataIndex(ed.col);
- value = this.postEditValue(value, startValue, r, field);
- if(String(value) !== String(startValue)){
- var e = {
- grid: this,
- record: r,
- field: field,
- originalValue: startValue,
- value: value,
- row: ed.row,
- column: ed.col,
- cancel:false
- };
- if(this.fireEvent("validateedit", e) !== false && !e.cancel){
- r.set(field, e.value);
- delete e.cancel;
- this.fireEvent("afteredit", e);
- }
- }
- this.view.focusCell(ed.row, ed.col);
- },
-
- startEditing : function(row, col){
- this.stopEditing();
- if(this.colModel.isCellEditable(col, row)){
- this.view.ensureVisible(row, col, true);
- var r = this.store.getAt(row);
- var field = this.colModel.getDataIndex(col);
- var e = {
- grid: this,
- record: r,
- field: field,
- value: r.data[field],
- row: row,
- column: col,
- cancel:false
- };
- if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
- this.editing = true;
- var ed = this.colModel.getCellEditor(col, row);
- if(!ed.rendered){
- ed.render(this.view.getEditorParent(ed));
- }
- (function(){
- ed.row = row;
- ed.col = col;
- ed.record = r;
- ed.on("complete", this.onEditComplete, this, {single: true});
- ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
- this.activeEditor = ed;
- var v = this.preEditValue(r, field);
- ed.startEdit(this.view.getCell(row, col), v);
- }).defer(50, this);
- }
- }
- },
-
- preEditValue : function(r, field){
- return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlDecode(r.data[field]) : r.data[field];
- },
-
- postEditValue : function(value, originalValue, r, field){
- return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlEncode(value) : value;
- },
-
-
- stopEditing : function(cancel){
- if(this.activeEditor){
- this.activeEditor[cancel === true ? 'cancelEdit' : 'completeEdit']();
- }
- this.activeEditor = null;
- }
- });
- Ext.reg('editorgrid', Ext.grid.EditorGridPanel);
- Ext.grid.GridEditor = function(field, config){
- Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
- field.monitorTab = false;
- };
- Ext.extend(Ext.grid.GridEditor, Ext.Editor, {
- alignment: "tl-tl",
- autoSize: "width",
- hideEl : false,
- cls: "x-small-editor x-grid-editor",
- shim:false,
- shadow:false
- });
- Ext.grid.PropertyRecord = Ext.data.Record.create([
- {name:'name',type:'string'}, 'value'
- ]);
- Ext.grid.PropertyStore = function(grid, source){
- this.grid = grid;
- this.store = new Ext.data.Store({
- recordType : Ext.grid.PropertyRecord
- });
- this.store.on('update', this.onUpdate, this);
- if(source){
- this.setSource(source);
- }
- Ext.grid.PropertyStore.superclass.constructor.call(this);
- };
- Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, {
- setSource : function(o){
- this.source = o;
- this.store.removeAll();
- var data = [];
- for(var k in o){
- if(this.isEditableValue(o[k])){
- data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k));
- }
- }
- this.store.loadRecords({records: data}, {}, true);
- },
- onUpdate : function(ds, record, type){
- if(type == Ext.data.Record.EDIT){
- var v = record.data['value'];
- var oldValue = record.modified['value'];
- if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){
- this.source[record.id] = v;
- record.commit();
- this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue);
- }else{
- record.reject();
- }
- }
- },
- getProperty : function(row){
- return this.store.getAt(row);
- },
- isEditableValue: function(val){
- if(Ext.isDate(val)){
- return true;
- }else if(typeof val == 'object' || typeof val == 'function'){
- return false;
- }
- return true;
- },
- setValue : function(prop, value){
- this.source[prop] = value;
- this.store.getById(prop).set('value', value);
- },
- getSource : function(){
- return this.source;
- }
- });
- Ext.grid.PropertyColumnModel = function(grid, store){
- this.grid = grid;
- var g = Ext.grid;
- g.PropertyColumnModel.superclass.constructor.call(this, [
- {header: this.nameText, width:50, sortable: true, dataIndex:'name', id: 'name', menuDisabled:true},
- {header: this.valueText, width:50, resizable:false, dataIndex: 'value', id: 'value', menuDisabled:true}
- ]);
- this.store = store;
- this.bselect = Ext.DomHelper.append(document.body, {
- tag: 'select', cls: 'x-grid-editor x-hide-display', children: [
- {tag: 'option', value: 'true', html: 'true'},
- {tag: 'option', value: 'false', html: 'false'}
- ]
- });
- var f = Ext.form;
- var bfield = new f.Field({
- el:this.bselect,
- bselect : this.bselect,
- autoShow: true,
- getValue : function(){
- return this.bselect.value == 'true';
- }
- });
- this.editors = {
- 'date' : new g.GridEditor(new f.DateField({selectOnFocus:true})),
- 'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})),
- 'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})),
- 'boolean' : new g.GridEditor(bfield)
- };
- this.renderCellDelegate = this.renderCell.createDelegate(this);
- this.renderPropDelegate = this.renderProp.createDelegate(this);
- };
- Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, {
- nameText : 'Name',
- valueText : 'Value',
- dateFormat : 'm/j/Y',
- renderDate : function(dateVal){
- return dateVal.dateFormat(this.dateFormat);
- },
- renderBool : function(bVal){
- return bVal ? 'true' : 'false';
- },
- isCellEditable : function(colIndex, rowIndex){
- return colIndex == 1;
- },
- getRenderer : function(col){
- return col == 1 ?
- this.renderCellDelegate : this.renderPropDelegate;
- },
- renderProp : function(v){
- return this.getPropertyName(v);
- },
- renderCell : function(val){
- var rv = val;
- if(Ext.isDate(val)){
- rv = this.renderDate(val);
- }else if(typeof val == 'boolean'){
- rv = this.renderBool(val);
- }
- return Ext.util.Format.htmlEncode(rv);
- },
- getPropertyName : function(name){
- var pn = this.grid.propertyNames;
- return pn && pn[name] ? pn[name] : name;
- },
- getCellEditor : function(colIndex, rowIndex){
- var p = this.store.getProperty(rowIndex);
- var n = p.data['name'], val = p.data['value'];
- if(this.grid.customEditors[n]){
- return this.grid.customEditors[n];
- }
- if(Ext.isDate(val)){
- return this.editors['date'];
- }else if(typeof val == 'number'){
- return this.editors['number'];
- }else if(typeof val == 'boolean'){
- return this.editors['boolean'];
- }else{
- return this.editors['string'];
- }
- }
- });
- Ext.grid.PropertyGrid = Ext.extend(Ext.grid.EditorGridPanel, {
-
-
- enableColumnMove:false,
- stripeRows:false,
- trackMouseOver: false,
- clicksToEdit:1,
- enableHdMenu : false,
- viewConfig : {
- forceFit:true
- },
- initComponent : function(){
- this.customEditors = this.customEditors || {};
- this.lastEditRow = null;
- var store = new Ext.grid.PropertyStore(this);
- this.propStore = store;
- var cm = new Ext.grid.PropertyColumnModel(this, store);
- store.store.sort('name', 'ASC');
- this.addEvents(
-
- 'beforepropertychange',
-
- 'propertychange'
- );
- this.cm = cm;
- this.ds = store.store;
- Ext.grid.PropertyGrid.superclass.initComponent.call(this);
- this.selModel.on('beforecellselect', function(sm, rowIndex, colIndex){
- if(colIndex === 0){
- this.startEditing.defer(200, this, [rowIndex, 1]);
- return false;
- }
- }, this);
- },
- onRender : function(){
- Ext.grid.PropertyGrid.superclass.onRender.apply(this, arguments);
- this.getGridEl().addClass('x-props-grid');
- },
- afterRender: function(){
- Ext.grid.PropertyGrid.superclass.afterRender.apply(this, arguments);
- if(this.source){
- this.setSource(this.source);
- }
- },
-
- setSource : function(source){
- this.propStore.setSource(source);
- },
-
- getSource : function(){
- return this.propStore.getSource();
- }
- });
- Ext.grid.RowNumberer = function(config){
- Ext.apply(this, config);
- if(this.rowspan){
- this.renderer = this.renderer.createDelegate(this);
- }
- };
- Ext.grid.RowNumberer.prototype = {
-
- header: "",
-
- width: 23,
-
- sortable: false,
-
- fixed:true,
- menuDisabled:true,
- dataIndex: '',
- id: 'numberer',
- rowspan: undefined,
-
- renderer : function(v, p, record, rowIndex){
- if(this.rowspan){
- p.cellAttr = 'rowspan="'+this.rowspan+'"';
- }
- return rowIndex+1;
- }
- };
- Ext.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {
-
- header: '<div class="x-grid3-hd-checker"> </div>',
-
- width: 20,
-
- sortable: false,
-
- menuDisabled:true,
- fixed:true,
- dataIndex: '',
- id: 'checker',
-
- initEvents : function(){
- Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);
- this.grid.on('render', function(){
- var view = this.grid.getView();
- view.mainBody.on('mousedown', this.onMouseDown, this);
- Ext.fly(view.innerHd).on('mousedown', this.onHdMouseDown, this);
- }, this);
- },
-
- onMouseDown : function(e, t){
- if(e.button === 0 && t.className == 'x-grid3-row-checker'){
- e.stopEvent();
- var row = e.getTarget('.x-grid3-row');
- if(row){
- var index = row.rowIndex;
- if(this.isSelected(index)){
- this.deselectRow(index);
- }else{
- this.selectRow(index, true);
- }
- }
- }
- },
-
- onHdMouseDown : function(e, t){
- if(t.className == 'x-grid3-hd-checker'){
- e.stopEvent();
- var hd = Ext.fly(t.parentNode);
- var isChecked = hd.hasClass('x-grid3-hd-checker-on');
- if(isChecked){
- hd.removeClass('x-grid3-hd-checker-on');
- this.clearSelections();
- }else{
- hd.addClass('x-grid3-hd-checker-on');
- this.selectAll();
- }
- }
- },
-
- renderer : function(v, p, record){
- return '<div class="x-grid3-row-checker"> </div>';
- }
- });
- Ext.LoadMask = function(el, config){
- this.el = Ext.get(el);
- Ext.apply(this, config);
- if(this.store){
- this.store.on('beforeload', this.onBeforeLoad, this);
- this.store.on('load', this.onLoad, this);
- this.store.on('loadexception', this.onLoad, this);
- this.removeMask = Ext.value(this.removeMask, false);
- }else{
- var um = this.el.getUpdater();
- um.showLoadIndicator = false; um.on('beforeupdate', this.onBeforeLoad, this);
- um.on('update', this.onLoad, this);
- um.on('failure', this.onLoad, this);
- this.removeMask = Ext.value(this.removeMask, true);
- }
- };
- Ext.LoadMask.prototype = {
-
-
-
- msg : 'Loading...',
-
- msgCls : 'x-mask-loading',
-
- disabled: false,
-
- disable : function(){
- this.disabled = true;
- },
-
- enable : function(){
- this.disabled = false;
- },
- onLoad : function(){
- this.el.unmask(this.removeMask);
- },
- onBeforeLoad : function(){
- if(!this.disabled){
- this.el.mask(this.msg, this.msgCls);
- }
- },
-
- show: function(){
- this.onBeforeLoad();
- },
-
- hide: function(){
- this.onLoad();
- },
- destroy : function(){
- if(this.store){
- this.store.un('beforeload', this.onBeforeLoad, this);
- this.store.un('load', this.onLoad, this);
- this.store.un('loadexception', this.onLoad, this);
- }else{
- var um = this.el.getUpdater();
- um.un('beforeupdate', this.onBeforeLoad, this);
- um.un('update', this.onLoad, this);
- um.un('failure', this.onLoad, this);
- }
- }
- };
- Ext.ProgressBar = Ext.extend(Ext.BoxComponent, {
-
- baseCls : 'x-progress',
-
- waitTimer : null,
-
- initComponent : function(){
- Ext.ProgressBar.superclass.initComponent.call(this);
- this.addEvents(
-
- "update"
- );
- },
-
- onRender : function(ct, position){
- Ext.ProgressBar.superclass.onRender.call(this, ct, position);
- var tpl = new Ext.Template(
- '<div class="{cls}-wrap">',
- '<div class="{cls}-inner">',
- '<div class="{cls}-bar">',
- '<div class="{cls}-text">',
- '<div> </div>',
- '</div>',
- '</div>',
- '<div class="{cls}-text {cls}-text-back">',
- '<div> </div>',
- '</div>',
- '</div>',
- '</div>'
- );
- if(position){
- this.el = tpl.insertBefore(position, {cls: this.baseCls}, true);
- }else{
- this.el = tpl.append(ct, {cls: this.baseCls}, true);
- }
- if(this.id){
- this.el.dom.id = this.id;
- }
- var inner = this.el.dom.firstChild;
- this.progressBar = Ext.get(inner.firstChild);
- if(this.textEl){
-
- this.textEl = Ext.get(this.textEl);
- delete this.textTopEl;
- }else{
-
- this.textTopEl = Ext.get(this.progressBar.dom.firstChild);
- var textBackEl = Ext.get(inner.childNodes[1]);
- this.textTopEl.setStyle("z-index", 99).addClass('x-hidden');
- this.textEl = new Ext.CompositeElement([this.textTopEl.dom.firstChild, textBackEl.dom.firstChild]);
- this.textEl.setWidth(inner.offsetWidth);
- }
- if(this.value){
- this.updateProgress(this.value, this.text);
- }else{
- this.updateText(this.text);
- }
- this.setSize(this.width || 'auto', 'auto');
- this.progressBar.setHeight(inner.offsetHeight);
- },
-
- updateProgress : function(value, text){
- this.value = value || 0;
- if(text){
- this.updateText(text);
- }
- var w = Math.floor(value*this.el.dom.firstChild.offsetWidth);
- this.progressBar.setWidth(w);
- if(this.textTopEl){
-
- this.textTopEl.removeClass('x-hidden').setWidth(w);
- }
- this.fireEvent('update', this, value, text);
- return this;
- },
-
- wait : function(o){
- if(!this.waitTimer){
- var scope = this;
- o = o || {};
- this.waitTimer = Ext.TaskMgr.start({
- run: function(i){
- var inc = o.increment || 10;
- this.updateProgress(((((i+inc)%inc)+1)*(100/inc))*.01);
- },
- interval: o.interval || 1000,
- duration: o.duration,
- onStop: function(){
- if(o.fn){
- o.fn.apply(o.scope || this);
- }
- this.reset();
- },
- scope: scope
- });
- }
- return this;
- },
-
- isWaiting : function(){
- return this.waitTimer != null;
- },
-
- updateText : function(text){
- this.text = text || ' ';
- this.textEl.update(this.text);
- return this;
- },
-
- setSize : function(w, h){
- Ext.ProgressBar.superclass.setSize.call(this, w, h);
- if(this.textTopEl){
- var inner = this.el.dom.firstChild;
- this.textEl.setSize(inner.offsetWidth, inner.offsetHeight);
- }
- return this;
- },
-
- reset : function(hide){
- this.updateProgress(0);
- if(this.textTopEl){
- this.textTopEl.addClass('x-hidden');
- }
- if(this.waitTimer){
- this.waitTimer.onStop = null;
- Ext.TaskMgr.stop(this.waitTimer);
- this.waitTimer = null;
- }
- if(hide === true){
- this.hide();
- }
- return this;
- }
- });
- Ext.reg('progress', Ext.ProgressBar);
- Ext.debug = {};
- (function(){
- var cp;
- function createConsole(){
- var scriptPanel = new Ext.debug.ScriptsPanel();
- var logView = new Ext.debug.LogPanel();
- var tree = new Ext.debug.DomTree();
- var tabs = new Ext.TabPanel({
- activeTab: 0,
- border: false,
- tabPosition: 'bottom',
- items: [{
- title: 'Debug Console',
- layout:'border',
- items: [logView, scriptPanel]
- },{
- title: 'DOM Inspector',
- layout:'border',
- items: [tree]
- }]
- });
- cp = new Ext.Panel({
- id: 'x-debug-browser',
- title: 'Console',
- collapsible: true,
- animCollapse: false,
- style: 'position:absolute;left:0;bottom:0;',
- height:200,
- logView: logView,
- layout: 'fit',
-
- tools:[{
- id: 'close',
- handler: function(){
- cp.destroy();
- cp = null;
- Ext.EventManager.removeResizeListener(handleResize);
- }
- }],
- items: tabs
- });
- cp.render(document.body);
- cp.resizer = new Ext.Resizable(cp.el, {
- minHeight:50,
- handles: "n",
- pinned: true,
- transparent:true,
- resizeElement : function(){
- var box = this.proxy.getBox();
- this.proxy.hide();
- cp.setHeight(box.height);
- return box;
- }
- });
- function handleResize(){
- cp.setWidth(Ext.getBody().getViewSize().width);
- }
- Ext.EventManager.onWindowResize(handleResize);
- handleResize();
- }
- Ext.apply(Ext, {
- log : function(){
- if(!cp){
- createConsole();
- }
- cp.logView.log.apply(cp.logView, arguments);
- },
- logf : function(format, arg1, arg2, etc){
- Ext.log(String.format.apply(String, arguments));
- },
- dump : function(o){
- if(typeof o == 'string' || typeof o == 'number' || typeof o == 'undefined' || Ext.isDate(o)){
- Ext.log(o);
- }else if(!o){
- Ext.log("null");
- }else if(typeof o != "object"){
- Ext.log('Unknown return type');
- }else if(Ext.isArray(o)){
- Ext.log('['+o.join(',')+']');
- }else{
- var b = ["{\n"];
- for(var key in o){
- var to = typeof o[key];
- if(to != "function" && to != "object"){
- b.push(String.format(" {0}: {1},\n", key, o[key]));
- }
- }
- var s = b.join("");
- if(s.length > 3){
- s = s.substr(0, s.length-2);
- }
- Ext.log(s + "\n}");
- }
- },
- _timers : {},
- time : function(name){
- name = name || "def";
- Ext._timers[name] = new Date().getTime();
- },
- timeEnd : function(name, printResults){
- var t = new Date().getTime();
- name = name || "def";
- var v = String.format("{0} ms", t-Ext._timers[name]);
- Ext._timers[name] = new Date().getTime();
- if(printResults !== false){
- Ext.log('Timer ' + (name == "def" ? v : name + ": " + v));
- }
- return v;
- }
- });
- })();
- Ext.debug.ScriptsPanel = Ext.extend(Ext.Panel, {
- id:'x-debug-scripts',
- region: 'east',
- minWidth: 200,
- split: true,
- width: 350,
- border: false,
- layout:'anchor',
- style:'border-width:0 0 0 1px;',
- initComponent : function(){
- this.scriptField = new Ext.form.TextArea({
- anchor: '100% -26',
- style:'border-width:0;'
- });
- this.trapBox = new Ext.form.Checkbox({
- id: 'console-trap',
- boxLabel: 'Trap Errors',
- checked: true
- });
- this.toolbar = new Ext.Toolbar([{
- text: 'Run',
- scope: this,
- handler: this.evalScript
- },{
- text: 'Clear',
- scope: this,
- handler: this.clear
- },
- '->',
- this.trapBox,
- ' ', ' '
- ]);
- this.items = [this.toolbar, this.scriptField];
- Ext.debug.ScriptsPanel.superclass.initComponent.call(this);
- },
- evalScript : function(){
- var s = this.scriptField.getValue();
- if(this.trapBox.getValue()){
- try{
- var rt = eval(s);
- Ext.dump(rt === undefined? '(no return)' : rt);
- }catch(e){
- Ext.log(e.message || e.descript);
- }
- }else{
- var rt = eval(s);
- Ext.dump(rt === undefined? '(no return)' : rt);
- }
- },
- clear : function(){
- this.scriptField.setValue('');
- this.scriptField.focus();
- }
- });
- Ext.debug.LogPanel = Ext.extend(Ext.Panel, {
- autoScroll: true,
- region: 'center',
- border: false,
- style:'border-width:0 1px 0 0',
- log : function(){
- var markup = [ '<div style="padding:5px !important;border-bottom:1px solid #ccc;">',
- Ext.util.Format.htmlEncode(Array.prototype.join.call(arguments, ', ')).replace(/\n/g, '<br />').replace(/\s/g, ' '),
- '</div>'].join('');
- this.body.insertHtml('beforeend', markup);
- this.body.scrollTo('top', 100000);
- },
- clear : function(){
- this.body.update('');
- this.body.dom.scrollTop = 0;
- }
- });
- Ext.debug.DomTree = Ext.extend(Ext.tree.TreePanel, {
- enableDD:false ,
- lines:false,
- rootVisible:false,
- animate:false,
- hlColor:'ffff9c',
- autoScroll: true,
- region:'center',
- border:false,
- initComponent : function(){
- Ext.debug.DomTree.superclass.initComponent.call(this);
-
- var styles = false, hnode;
- var nonSpace = /^\s*$/;
- var html = Ext.util.Format.htmlEncode;
- var ellipsis = Ext.util.Format.ellipsis;
- var styleRe = /\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;
- function findNode(n){
- if(!n || n.nodeType != 1 || n == document.body || n == document){
- return false;
- }
- var pn = [n], p = n;
- while((p = p.parentNode) && p.nodeType == 1 && p.tagName.toUpperCase() != 'HTML'){
- pn.unshift(p);
- }
- var cn = hnode;
- for(var i = 0, len = pn.length; i < len; i++){
- cn.expand();
- cn = cn.findChild('htmlNode', pn[i]);
- if(!cn){ return false;
- }
- }
- cn.select();
- var a = cn.ui.anchor;
- treeEl.dom.scrollTop = Math.max(0 ,a.offsetTop-10);
- cn.highlight();
- return true;
- }
- function nodeTitle(n){
- var s = n.tagName;
- if(n.id){
- s += '#'+n.id;
- }else if(n.className){
- s += '.'+n.className;
- }
- return s;
- }
- function onNodeSelect(t, n, last){
- return;
- if(last && last.unframe){
- last.unframe();
- }
- var props = {};
- if(n && n.htmlNode){
- if(frameEl.pressed){
- n.frame();
- }
- if(inspecting){
- return;
- }
- addStyle.enable();
- reload.setDisabled(n.leaf);
- var dom = n.htmlNode;
- stylePanel.setTitle(nodeTitle(dom));
- if(styles && !showAll.pressed){
- var s = dom.style ? dom.style.cssText : '';
- if(s){
- var m;
- while ((m = styleRe.exec(s)) != null){
- props[m[1].toLowerCase()] = m[2];
- }
- }
- }else if(styles){
- var cl = Ext.debug.cssList;
- var s = dom.style, fly = Ext.fly(dom);
- if(s){
- for(var i = 0, len = cl.length; i<len; i++){
- var st = cl[i];
- var v = s[st] || fly.getStyle(st);
- if(v != undefined && v !== null && v !== ''){
- props[st] = v;
- }
- }
- }
- }else{
- for(var a in dom){
- var v = dom[a];
- if((isNaN(a+10)) && v != undefined && v !== null && v !== '' && !(Ext.isGecko && a[0] == a[0].toUpperCase())){
- props[a] = v;
- }
- }
- }
- }else{
- if(inspecting){
- return;
- }
- addStyle.disable();
- reload.disabled();
- }
- stylesGrid.setSource(props);
- stylesGrid.treeNode = n;
- stylesGrid.view.fitColumns();
- }
- this.loader = new Ext.tree.TreeLoader();
- this.loader.load = function(n, cb){
- var isBody = n.htmlNode == document.body;
- var cn = n.htmlNode.childNodes;
- for(var i = 0, c; c = cn[i]; i++){
- if(isBody && c.id == 'x-debug-browser'){
- continue;
- }
- if(c.nodeType == 1){
- n.appendChild(new Ext.debug.HtmlNode(c));
- }else if(c.nodeType == 3 && !nonSpace.test(c.nodeValue)){
- n.appendChild(new Ext.tree.TreeNode({
- text:'<em>' + ellipsis(html(String(c.nodeValue)), 35) + '</em>',
- cls: 'x-tree-noicon'
- }));
- }
- }
- cb();
- };
-
- this.root = this.setRootNode(new Ext.tree.TreeNode('Ext'));
- hnode = this.root.appendChild(new Ext.debug.HtmlNode(
- document.getElementsByTagName('html')[0]
- ));
- }
- });
- Ext.debug.HtmlNode = function(){
- var html = Ext.util.Format.htmlEncode;
- var ellipsis = Ext.util.Format.ellipsis;
- var nonSpace = /^\s*$/;
- var attrs = [
- {n: 'id', v: 'id'},
- {n: 'className', v: 'class'},
- {n: 'name', v: 'name'},
- {n: 'type', v: 'type'},
- {n: 'src', v: 'src'},
- {n: 'href', v: 'href'}
- ];
- function hasChild(n){
- for(var i = 0, c; c = n.childNodes[i]; i++){
- if(c.nodeType == 1){
- return true;
- }
- }
- return false;
- }
- function renderNode(n, leaf){
- var tag = n.tagName.toLowerCase();
- var s = '<' + tag;
- for(var i = 0, len = attrs.length; i < len; i++){
- var a = attrs[i];
- var v = n[a.n];
- if(v && !nonSpace.test(v)){
- s += ' ' + a.v + '="<i>' + html(v) +'</i>"';
- }
- }
- var style = n.style ? n.style.cssText : '';
- if(style){
- s += ' style="<i>' + html(style.toLowerCase()) +'</i>"';
- }
- if(leaf && n.childNodes.length > 0){
- s+='><em>' + ellipsis(html(String(n.innerHTML)), 35) + '</em></'+tag+'>';
- }else if(leaf){
- s += ' />';
- }else{
- s += '>';
- }
- return s;
- }
- var HtmlNode = function(n){
- var leaf = !hasChild(n);
- this.htmlNode = n;
- this.tagName = n.tagName.toLowerCase();
- var attr = {
- text : renderNode(n, leaf),
- leaf : leaf,
- cls: 'x-tree-noicon'
- };
- HtmlNode.superclass.constructor.call(this, attr);
- this.attributes.htmlNode = n; if(!leaf){
- this.on('expand', this.onExpand, this);
- this.on('collapse', this.onCollapse, this);
- }
- };
- Ext.extend(HtmlNode, Ext.tree.AsyncTreeNode, {
- cls: 'x-tree-noicon',
- preventHScroll: true,
- refresh : function(highlight){
- var leaf = !hasChild(this.htmlNode);
- this.setText(renderNode(this.htmlNode, leaf));
- if(highlight){
- Ext.fly(this.ui.textNode).highlight();
- }
- },
- onExpand : function(){
- if(!this.closeNode && this.parentNode){
- this.closeNode = this.parentNode.insertBefore(new Ext.tree.TreeNode({
- text:'</' + this.tagName + '>',
- cls: 'x-tree-noicon'
- }), this.nextSibling);
- }else if(this.closeNode){
- this.closeNode.ui.show();
- }
- },
- onCollapse : function(){
- if(this.closeNode){
- this.closeNode.ui.hide();
- }
- },
- render : function(bulkRender){
- HtmlNode.superclass.render.call(this, bulkRender);
- },
- highlightNode : function(){
- },
- highlight : function(){
- },
- frame : function(){
- this.htmlNode.style.border = '1px solid #0000ff';
- },
- unframe : function(){
- this.htmlNode.style.border = '';
- }
- });
- return HtmlNode;
- }();
|