12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500 |
- /**
- * jQuery EasyUI 1.4.1
- *
- * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.
- *
- * Licensed under the commercial license: http://www.jeasyui.com/license_commercial.php
- * To use it on other terms please contact us: info@jeasyui.com
- *
- */
- /**
- * parser - jQuery EasyUI
- *
- */
- (function($){
- $.parser = {
- auto: true,
- onComplete: function(context){},
- plugins:['draggable','droppable','resizable','pagination','tooltip',
- 'linkbutton','menu','menubutton','splitbutton','progressbar',
- 'tree','textbox','filebox','combo','combobox','combotree','combogrid','numberbox','validatebox','searchbox',
- 'spinner','numberspinner','timespinner','datetimespinner','calendar','datebox','datetimebox','slider',
- 'layout','panel','datagrid','propertygrid','treegrid','tabs','accordion','window','dialog','form'
- ],
- parse: function(context){
- var aa = [];
- for(var i=0; i<$.parser.plugins.length; i++){
- var name = $.parser.plugins[i];
- var r = $('.easyui-' + name, context);
- if (r.length){
- if (r[name]){
- r[name]();
- } else {
- aa.push({name:name,jq:r});
- }
- }
- }
- if (aa.length && window.easyloader){
- var names = [];
- for(var i=0; i<aa.length; i++){
- names.push(aa[i].name);
- }
- easyloader.load(names, function(){
- for(var i=0; i<aa.length; i++){
- var name = aa[i].name;
- var jq = aa[i].jq;
- jq[name]();
- }
- $.parser.onComplete.call($.parser, context);
- });
- } else {
- $.parser.onComplete.call($.parser, context);
- }
- },
-
- parseValue: function(property, value, parent, delta){
- delta = delta || 0;
- var v = $.trim(String(value||''));
- var endchar = v.substr(v.length-1, 1);
- if (endchar == '%'){
- v = parseInt(v.substr(0, v.length-1));
- if (property.toLowerCase().indexOf('width') >= 0){
- v = Math.floor((parent.width()-delta) * v / 100.0);
- } else {
- v = Math.floor((parent.height()-delta) * v / 100.0);
- }
- } else {
- v = parseInt(v) || undefined;
- }
- return v;
- },
-
- /**
- * parse options, including standard 'data-options' attribute.
- *
- * calling examples:
- * $.parser.parseOptions(target);
- * $.parser.parseOptions(target, ['id','title','width',{fit:'boolean',border:'boolean'},{min:'number'}]);
- */
- parseOptions: function(target, properties){
- var t = $(target);
- var options = {};
-
- var s = $.trim(t.attr('data-options'));
- if (s){
- if (s.substring(0, 1) != '{'){
- s = '{' + s + '}';
- }
- options = (new Function('return ' + s))();
- }
- $.map(['width','height','left','top','minWidth','maxWidth','minHeight','maxHeight'], function(p){
- var pv = $.trim(target.style[p] || '');
- if (pv){
- if (pv.indexOf('%') == -1){
- pv = parseInt(pv) || undefined;
- }
- options[p] = pv;
- }
- });
-
- if (properties){
- var opts = {};
- for(var i=0; i<properties.length; i++){
- var pp = properties[i];
- if (typeof pp == 'string'){
- opts[pp] = t.attr(pp);
- } else {
- for(var name in pp){
- var type = pp[name];
- if (type == 'boolean'){
- opts[name] = t.attr(name) ? (t.attr(name) == 'true') : undefined;
- } else if (type == 'number'){
- opts[name] = t.attr(name)=='0' ? 0 : parseFloat(t.attr(name)) || undefined;
- }
- }
- }
- }
- $.extend(options, opts);
- }
- return options;
- }
- };
- $(function(){
- var d = $('<div style="position:absolute;top:-1000px;width:100px;height:100px;padding:5px"></div>').appendTo('body');
- $._boxModel = d.outerWidth()!=100;
- d.remove();
-
- if (!window.easyloader && $.parser.auto){
- $.parser.parse();
- }
- });
-
- /**
- * extend plugin to set box model width
- */
- $.fn._outerWidth = function(width){
- if (width == undefined){
- if (this[0] == window){
- return this.width() || document.body.clientWidth;
- }
- return this.outerWidth()||0;
- }
- return this._size('width', width);
- };
-
- /**
- * extend plugin to set box model height
- */
- $.fn._outerHeight = function(height){
- if (height == undefined){
- if (this[0] == window){
- return this.height() || document.body.clientHeight;
- }
- return this.outerHeight()||0;
- }
- return this._size('height', height);
- };
-
- $.fn._scrollLeft = function(left){
- if (left == undefined){
- return this.scrollLeft();
- } else {
- return this.each(function(){$(this).scrollLeft(left)});
- }
- };
-
- $.fn._propAttr = $.fn.prop || $.fn.attr;
-
- $.fn._size = function(options, parent){
- if (typeof options == 'string'){
- if (options == 'clear'){
- return this.each(function(){
- $(this).css({width:'',minWidth:'',maxWidth:'',height:'',minHeight:'',maxHeight:''});
- });
- } else if (options == 'fit'){
- return this.each(function(){
- _fit(this, this.tagName=='BODY' ? $('body') : $(this).parent(), true);
- });
- } else if (options == 'unfit'){
- return this.each(function(){
- _fit(this, $(this).parent(), false);
- });
- } else {
- if (parent == undefined){
- return _css(this[0], options);
- } else {
- return this.each(function(){
- _css(this, options, parent);
- });
- }
- }
- } else {
- return this.each(function(){
- parent = parent || $(this).parent();
- $.extend(options, _fit(this, parent, options.fit)||{});
- var r1 = _setSize(this, 'width', parent, options);
- var r2 = _setSize(this, 'height', parent, options);
- if (r1 || r2){
- $(this).addClass('easyui-fluid');
- } else {
- $(this).removeClass('easyui-fluid');
- }
- });
- }
-
- function _fit(target, parent, fit){
- if (!parent.length){return false;}
- var t = $(target)[0];
- var p = parent[0];
- var fcount = p.fcount || 0;
- if (fit){
- if (!t.fitted){
- t.fitted = true;
- p.fcount = fcount + 1;
- $(p).addClass('panel-noscroll');
- if (p.tagName == 'BODY'){
- $('html').addClass('panel-fit');
- }
- }
- return {
- width: ($(p).width()||1),
- height: ($(p).height()||1)
- };
- } else {
- if (t.fitted){
- t.fitted = false;
- p.fcount = fcount - 1;
- if (p.fcount == 0){
- $(p).removeClass('panel-noscroll');
- if (p.tagName == 'BODY'){
- $('html').removeClass('panel-fit');
- }
- }
- }
- return false;
- }
- }
- function _setSize(target, property, parent, options){
- var t = $(target);
- var p = property;
- var p1 = p.substr(0,1).toUpperCase() + p.substr(1);
- var min = $.parser.parseValue('min'+p1, options['min'+p1], parent);// || 0;
- var max = $.parser.parseValue('max'+p1, options['max'+p1], parent);// || 99999;
- var val = $.parser.parseValue(p, options[p], parent);
- var fluid = (String(options[p]||'').indexOf('%') >= 0 ? true : false);
-
- if (!isNaN(val)){
- var v = Math.min(Math.max(val, min||0), max||99999);
- if (!fluid){
- options[p] = v;
- }
- t._size('min'+p1, '');
- t._size('max'+p1, '');
- t._size(p, v);
- } else {
- t._size(p, '');
- t._size('min'+p1, min);
- t._size('max'+p1, max);
- }
- return fluid || options.fit;
- }
- function _css(target, property, value){
- var t = $(target);
- if (value == undefined){
- value = parseInt(target.style[property]);
- if (isNaN(value)){return undefined;}
- if ($._boxModel){
- value += getDeltaSize();
- }
- return value;
- } else if (value === ''){
- t.css(property, '');
- } else {
- if ($._boxModel){
- value -= getDeltaSize();
- if (value < 0){value = 0;}
- }
- t.css(property, value+'px');
- }
- function getDeltaSize(){
- if (property.toLowerCase().indexOf('width') >= 0){
- return t.outerWidth() - t.width();
- } else {
- return t.outerHeight() - t.height();
- }
- }
- }
- };
-
- })(jQuery);
- /**
- * support for mobile devices
- */
- (function($){
- var longTouchTimer = null;
- var dblTouchTimer = null;
- var isDblClick = false;
-
- function onTouchStart(e){
- if (e.touches.length != 1){return}
- if (!isDblClick){
- isDblClick = true;
- dblClickTimer = setTimeout(function(){
- isDblClick = false;
- }, 500);
- } else {
- clearTimeout(dblClickTimer);
- isDblClick = false;
- fire(e, 'dblclick');
- // e.preventDefault();
- }
- longTouchTimer = setTimeout(function(){
- fire(e, 'contextmenu', 3);
- }, 1000);
- fire(e, 'mousedown');
- if ($.fn.draggable.isDragging || $.fn.resizable.isResizing){
- e.preventDefault();
- }
- }
- function onTouchMove(e){
- if (e.touches.length != 1){return}
- if (longTouchTimer){
- clearTimeout(longTouchTimer);
- }
- fire(e, 'mousemove');
- if ($.fn.draggable.isDragging || $.fn.resizable.isResizing){
- e.preventDefault();
- }
- }
- function onTouchEnd(e){
- // if (e.touches.length > 0){return}
- if (longTouchTimer){
- clearTimeout(longTouchTimer);
- }
- fire(e, 'mouseup');
- if ($.fn.draggable.isDragging || $.fn.resizable.isResizing){
- e.preventDefault();
- }
- }
-
- function fire(e, name, which){
- var event = new $.Event(name);
- event.pageX = e.changedTouches[0].pageX;
- event.pageY = e.changedTouches[0].pageY;
- event.which = which || 1;
- $(e.target).trigger(event);
- }
-
- if (document.addEventListener){
- document.addEventListener("touchstart", onTouchStart, true);
- document.addEventListener("touchmove", onTouchMove, true);
- document.addEventListener("touchend", onTouchEnd, true);
- }
- })(jQuery);
- /**
- * draggable - jQuery EasyUI
- *
- */
- (function($){
- // var isDragging = false;
- function drag(e){
- var state = $.data(e.data.target, 'draggable');
- var opts = state.options;
- var proxy = state.proxy;
-
- var dragData = e.data;
- var left = dragData.startLeft + e.pageX - dragData.startX;
- var top = dragData.startTop + e.pageY - dragData.startY;
-
- if (proxy){
- if (proxy.parent()[0] == document.body){
- if (opts.deltaX != null && opts.deltaX != undefined){
- left = e.pageX + opts.deltaX;
- } else {
- left = e.pageX - e.data.offsetWidth;
- }
- if (opts.deltaY != null && opts.deltaY != undefined){
- top = e.pageY + opts.deltaY;
- } else {
- top = e.pageY - e.data.offsetHeight;
- }
- } else {
- if (opts.deltaX != null && opts.deltaX != undefined){
- left += e.data.offsetWidth + opts.deltaX;
- }
- if (opts.deltaY != null && opts.deltaY != undefined){
- top += e.data.offsetHeight + opts.deltaY;
- }
- }
- }
-
- // if (opts.deltaX != null && opts.deltaX != undefined){
- // left = e.pageX + opts.deltaX;
- // }
- // if (opts.deltaY != null && opts.deltaY != undefined){
- // top = e.pageY + opts.deltaY;
- // }
-
- if (e.data.parent != document.body) {
- left += $(e.data.parent).scrollLeft();
- top += $(e.data.parent).scrollTop();
- }
-
- if (opts.axis == 'h') {
- dragData.left = left;
- } else if (opts.axis == 'v') {
- dragData.top = top;
- } else {
- dragData.left = left;
- dragData.top = top;
- }
- }
-
- function applyDrag(e){
- var state = $.data(e.data.target, 'draggable');
- var opts = state.options;
- var proxy = state.proxy;
- if (!proxy){
- proxy = $(e.data.target);
- }
- // if (proxy){
- // proxy.css('cursor', opts.cursor);
- // } else {
- // proxy = $(e.data.target);
- // $.data(e.data.target, 'draggable').handle.css('cursor', opts.cursor);
- // }
- proxy.css({
- left:e.data.left,
- top:e.data.top
- });
- $('body').css('cursor', opts.cursor);
- }
-
- function doDown(e){
- // isDragging = true;
- $.fn.draggable.isDragging = true;
- var state = $.data(e.data.target, 'draggable');
- var opts = state.options;
-
- var droppables = $('.droppable').filter(function(){
- return e.data.target != this;
- }).filter(function(){
- var accept = $.data(this, 'droppable').options.accept;
- if (accept){
- return $(accept).filter(function(){
- return this == e.data.target;
- }).length > 0;
- } else {
- return true;
- }
- });
- state.droppables = droppables;
-
- var proxy = state.proxy;
- if (!proxy){
- if (opts.proxy){
- if (opts.proxy == 'clone'){
- proxy = $(e.data.target).clone().insertAfter(e.data.target);
- } else {
- proxy = opts.proxy.call(e.data.target, e.data.target);
- }
- state.proxy = proxy;
- } else {
- proxy = $(e.data.target);
- }
- }
-
- proxy.css('position', 'absolute');
- drag(e);
- applyDrag(e);
-
- opts.onStartDrag.call(e.data.target, e);
- return false;
- }
-
- function doMove(e){
- var state = $.data(e.data.target, 'draggable');
- drag(e);
- if (state.options.onDrag.call(e.data.target, e) != false){
- applyDrag(e);
- }
-
- var source = e.data.target;
- state.droppables.each(function(){
- var dropObj = $(this);
- if (dropObj.droppable('options').disabled){return;}
-
- var p2 = dropObj.offset();
- if (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()
- && e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){
- if (!this.entered){
- $(this).trigger('_dragenter', [source]);
- this.entered = true;
- }
- $(this).trigger('_dragover', [source]);
- } else {
- if (this.entered){
- $(this).trigger('_dragleave', [source]);
- this.entered = false;
- }
- }
- });
-
- return false;
- }
-
- function doUp(e){
- // isDragging = false;
- $.fn.draggable.isDragging = false;
- // drag(e);
- doMove(e);
-
- var state = $.data(e.data.target, 'draggable');
- var proxy = state.proxy;
- var opts = state.options;
- if (opts.revert){
- if (checkDrop() == true){
- $(e.data.target).css({
- position:e.data.startPosition,
- left:e.data.startLeft,
- top:e.data.startTop
- });
- } else {
- if (proxy){
- var left, top;
- if (proxy.parent()[0] == document.body){
- left = e.data.startX - e.data.offsetWidth;
- top = e.data.startY - e.data.offsetHeight;
- } else {
- left = e.data.startLeft;
- top = e.data.startTop;
- }
- proxy.animate({
- left: left,
- top: top
- }, function(){
- removeProxy();
- });
- } else {
- $(e.data.target).animate({
- left:e.data.startLeft,
- top:e.data.startTop
- }, function(){
- $(e.data.target).css('position', e.data.startPosition);
- });
- }
- }
- } else {
- $(e.data.target).css({
- position:'absolute',
- left:e.data.left,
- top:e.data.top
- });
- checkDrop();
- }
-
- opts.onStopDrag.call(e.data.target, e);
-
- $(document).unbind('.draggable');
- setTimeout(function(){
- $('body').css('cursor','');
- },100);
-
- function removeProxy(){
- if (proxy){
- proxy.remove();
- }
- state.proxy = null;
- }
-
- function checkDrop(){
- var dropped = false;
- state.droppables.each(function(){
- var dropObj = $(this);
- if (dropObj.droppable('options').disabled){return;}
-
- var p2 = dropObj.offset();
- if (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()
- && e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){
- if (opts.revert){
- $(e.data.target).css({
- position:e.data.startPosition,
- left:e.data.startLeft,
- top:e.data.startTop
- });
- }
- $(this).trigger('_drop', [e.data.target]);
- removeProxy();
- dropped = true;
- this.entered = false;
- return false;
- }
- });
- if (!dropped && !opts.revert){
- removeProxy();
- }
- return dropped;
- }
-
- return false;
- }
-
- $.fn.draggable = function(options, param){
- if (typeof options == 'string'){
- return $.fn.draggable.methods[options](this, param);
- }
-
- return this.each(function(){
- var opts;
- var state = $.data(this, 'draggable');
- if (state) {
- state.handle.unbind('.draggable');
- opts = $.extend(state.options, options);
- } else {
- opts = $.extend({}, $.fn.draggable.defaults, $.fn.draggable.parseOptions(this), options || {});
- }
- var handle = opts.handle ? (typeof opts.handle=='string' ? $(opts.handle, this) : opts.handle) : $(this);
-
- $.data(this, 'draggable', {
- options: opts,
- handle: handle
- });
-
- if (opts.disabled) {
- $(this).css('cursor', '');
- return;
- }
-
- handle.unbind('.draggable').bind('mousemove.draggable', {target:this}, function(e){
- // if (isDragging) return;
- if ($.fn.draggable.isDragging){return}
- var opts = $.data(e.data.target, 'draggable').options;
- if (checkArea(e)){
- $(this).css('cursor', opts.cursor);
- } else {
- $(this).css('cursor', '');
- }
- }).bind('mouseleave.draggable', {target:this}, function(e){
- $(this).css('cursor', '');
- }).bind('mousedown.draggable', {target:this}, function(e){
- if (checkArea(e) == false) return;
- $(this).css('cursor', '');
- var position = $(e.data.target).position();
- var offset = $(e.data.target).offset();
- var data = {
- startPosition: $(e.data.target).css('position'),
- startLeft: position.left,
- startTop: position.top,
- left: position.left,
- top: position.top,
- startX: e.pageX,
- startY: e.pageY,
- offsetWidth: (e.pageX - offset.left),
- offsetHeight: (e.pageY - offset.top),
- target: e.data.target,
- parent: $(e.data.target).parent()[0]
- };
-
- $.extend(e.data, data);
- var opts = $.data(e.data.target, 'draggable').options;
- if (opts.onBeforeDrag.call(e.data.target, e) == false) return;
-
- $(document).bind('mousedown.draggable', e.data, doDown);
- $(document).bind('mousemove.draggable', e.data, doMove);
- $(document).bind('mouseup.draggable', e.data, doUp);
- // $('body').css('cursor', opts.cursor);
- });
-
- // check if the handle can be dragged
- function checkArea(e) {
- var state = $.data(e.data.target, 'draggable');
- var handle = state.handle;
- var offset = $(handle).offset();
- var width = $(handle).outerWidth();
- var height = $(handle).outerHeight();
- var t = e.pageY - offset.top;
- var r = offset.left + width - e.pageX;
- var b = offset.top + height - e.pageY;
- var l = e.pageX - offset.left;
-
- return Math.min(t,r,b,l) > state.options.edge;
- }
-
- });
- };
-
- $.fn.draggable.methods = {
- options: function(jq){
- return $.data(jq[0], 'draggable').options;
- },
- proxy: function(jq){
- return $.data(jq[0], 'draggable').proxy;
- },
- enable: function(jq){
- return jq.each(function(){
- $(this).draggable({disabled:false});
- });
- },
- disable: function(jq){
- return jq.each(function(){
- $(this).draggable({disabled:true});
- });
- }
- };
-
- $.fn.draggable.parseOptions = function(target){
- var t = $(target);
- return $.extend({},
- $.parser.parseOptions(target, ['cursor','handle','axis',
- {'revert':'boolean','deltaX':'number','deltaY':'number','edge':'number'}]), {
- disabled: (t.attr('disabled') ? true : undefined)
- });
- };
-
- $.fn.draggable.defaults = {
- proxy:null, // 'clone' or a function that will create the proxy object,
- // the function has the source parameter that indicate the source object dragged.
- revert:false,
- cursor:'move',
- deltaX:null,
- deltaY:null,
- handle: null,
- disabled: false,
- edge:0,
- axis:null, // v or h
-
- onBeforeDrag: function(e){},
- onStartDrag: function(e){},
- onDrag: function(e){},
- onStopDrag: function(e){}
- };
-
- $.fn.draggable.isDragging = false;
-
- // $(function(){
- // function touchHandler(e) {
- // var touches = e.changedTouches, first = touches[0], type = "";
- //
- // switch(e.type) {
- // case "touchstart": type = "mousedown"; break;
- // case "touchmove": type = "mousemove"; break;
- // case "touchend": type = "mouseup"; break;
- // default: return;
- // }
- // var simulatedEvent = document.createEvent("MouseEvent");
- // simulatedEvent.initMouseEvent(type, true, true, window, 1,
- // first.screenX, first.screenY,
- // first.clientX, first.clientY, false,
- // false, false, false, 0/*left*/, null);
- //
- // first.target.dispatchEvent(simulatedEvent);
- // if (isDragging){
- // e.preventDefault();
- // }
- // }
- //
- // if (document.addEventListener){
- // document.addEventListener("touchstart", touchHandler, true);
- // document.addEventListener("touchmove", touchHandler, true);
- // document.addEventListener("touchend", touchHandler, true);
- // document.addEventListener("touchcancel", touchHandler, true);
- // }
- // });
- })(jQuery);
- /**
- * droppable - jQuery EasyUI
- *
- */
- (function($){
- function init(target){
- $(target).addClass('droppable');
- $(target).bind('_dragenter', function(e, source){
- $.data(target, 'droppable').options.onDragEnter.apply(target, [e, source]);
- });
- $(target).bind('_dragleave', function(e, source){
- $.data(target, 'droppable').options.onDragLeave.apply(target, [e, source]);
- });
- $(target).bind('_dragover', function(e, source){
- $.data(target, 'droppable').options.onDragOver.apply(target, [e, source]);
- });
- $(target).bind('_drop', function(e, source){
- $.data(target, 'droppable').options.onDrop.apply(target, [e, source]);
- });
- }
-
- $.fn.droppable = function(options, param){
- if (typeof options == 'string'){
- return $.fn.droppable.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'droppable');
- if (state){
- $.extend(state.options, options);
- } else {
- init(this);
- $.data(this, 'droppable', {
- options: $.extend({}, $.fn.droppable.defaults, $.fn.droppable.parseOptions(this), options)
- });
- }
- });
- };
-
- $.fn.droppable.methods = {
- options: function(jq){
- return $.data(jq[0], 'droppable').options;
- },
- enable: function(jq){
- return jq.each(function(){
- $(this).droppable({disabled:false});
- });
- },
- disable: function(jq){
- return jq.each(function(){
- $(this).droppable({disabled:true});
- });
- }
- };
-
- $.fn.droppable.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, ['accept']), {
- disabled: (t.attr('disabled') ? true : undefined)
- });
- };
-
- $.fn.droppable.defaults = {
- accept:null,
- disabled:false,
- onDragEnter:function(e, source){},
- onDragOver:function(e, source){},
- onDragLeave:function(e, source){},
- onDrop:function(e, source){}
- };
- })(jQuery);
- /**
- * resizable - jQuery EasyUI
- *
- */
- (function($){
- // var isResizing = false;
- $.fn.resizable = function(options, param){
- if (typeof options == 'string'){
- return $.fn.resizable.methods[options](this, param);
- }
-
- function resize(e){
- var resizeData = e.data;
- var options = $.data(resizeData.target, 'resizable').options;
- if (resizeData.dir.indexOf('e') != -1) {
- var width = resizeData.startWidth + e.pageX - resizeData.startX;
- width = Math.min(
- Math.max(width, options.minWidth),
- options.maxWidth
- );
- resizeData.width = width;
- }
- if (resizeData.dir.indexOf('s') != -1) {
- var height = resizeData.startHeight + e.pageY - resizeData.startY;
- height = Math.min(
- Math.max(height, options.minHeight),
- options.maxHeight
- );
- resizeData.height = height;
- }
- if (resizeData.dir.indexOf('w') != -1) {
- var width = resizeData.startWidth - e.pageX + resizeData.startX;
- width = Math.min(
- Math.max(width, options.minWidth),
- options.maxWidth
- );
- resizeData.width = width;
- resizeData.left = resizeData.startLeft + resizeData.startWidth - resizeData.width;
-
- // resizeData.width = resizeData.startWidth - e.pageX + resizeData.startX;
- // if (resizeData.width >= options.minWidth && resizeData.width <= options.maxWidth) {
- // resizeData.left = resizeData.startLeft + e.pageX - resizeData.startX;
- // }
- }
- if (resizeData.dir.indexOf('n') != -1) {
- var height = resizeData.startHeight - e.pageY + resizeData.startY;
- height = Math.min(
- Math.max(height, options.minHeight),
- options.maxHeight
- );
- resizeData.height = height;
- resizeData.top = resizeData.startTop + resizeData.startHeight - resizeData.height;
-
- // resizeData.height = resizeData.startHeight - e.pageY + resizeData.startY;
- // if (resizeData.height >= options.minHeight && resizeData.height <= options.maxHeight) {
- // resizeData.top = resizeData.startTop + e.pageY - resizeData.startY;
- // }
- }
- }
-
- function applySize(e){
- var resizeData = e.data;
- var t = $(resizeData.target);
- t.css({
- left: resizeData.left,
- top: resizeData.top
- });
- if (t.outerWidth() != resizeData.width){t._outerWidth(resizeData.width)}
- if (t.outerHeight() != resizeData.height){t._outerHeight(resizeData.height)}
- // t._outerWidth(resizeData.width)._outerHeight(resizeData.height);
- }
-
- function doDown(e){
- // isResizing = true;
- $.fn.resizable.isResizing = true;
- $.data(e.data.target, 'resizable').options.onStartResize.call(e.data.target, e);
- return false;
- }
-
- function doMove(e){
- resize(e);
- if ($.data(e.data.target, 'resizable').options.onResize.call(e.data.target, e) != false){
- applySize(e)
- }
- return false;
- }
-
- function doUp(e){
- // isResizing = false;
- $.fn.resizable.isResizing = false;
- resize(e, true);
- applySize(e);
- $.data(e.data.target, 'resizable').options.onStopResize.call(e.data.target, e);
- $(document).unbind('.resizable');
- $('body').css('cursor','');
- // $('body').css('cursor','auto');
- return false;
- }
-
- return this.each(function(){
- var opts = null;
- var state = $.data(this, 'resizable');
- if (state) {
- $(this).unbind('.resizable');
- opts = $.extend(state.options, options || {});
- } else {
- opts = $.extend({}, $.fn.resizable.defaults, $.fn.resizable.parseOptions(this), options || {});
- $.data(this, 'resizable', {
- options:opts
- });
- }
-
- if (opts.disabled == true) {
- return;
- }
-
- // bind mouse event using namespace resizable
- $(this).bind('mousemove.resizable', {target:this}, function(e){
- // if (isResizing) return;
- if ($.fn.resizable.isResizing){return}
- var dir = getDirection(e);
- if (dir == '') {
- $(e.data.target).css('cursor', '');
- } else {
- $(e.data.target).css('cursor', dir + '-resize');
- }
- }).bind('mouseleave.resizable', {target:this}, function(e){
- $(e.data.target).css('cursor', '');
- }).bind('mousedown.resizable', {target:this}, function(e){
- var dir = getDirection(e);
- if (dir == '') return;
-
- function getCssValue(css) {
- var val = parseInt($(e.data.target).css(css));
- if (isNaN(val)) {
- return 0;
- } else {
- return val;
- }
- }
-
- var data = {
- target: e.data.target,
- dir: dir,
- startLeft: getCssValue('left'),
- startTop: getCssValue('top'),
- left: getCssValue('left'),
- top: getCssValue('top'),
- startX: e.pageX,
- startY: e.pageY,
- startWidth: $(e.data.target).outerWidth(),
- startHeight: $(e.data.target).outerHeight(),
- width: $(e.data.target).outerWidth(),
- height: $(e.data.target).outerHeight(),
- deltaWidth: $(e.data.target).outerWidth() - $(e.data.target).width(),
- deltaHeight: $(e.data.target).outerHeight() - $(e.data.target).height()
- };
- $(document).bind('mousedown.resizable', data, doDown);
- $(document).bind('mousemove.resizable', data, doMove);
- $(document).bind('mouseup.resizable', data, doUp);
- $('body').css('cursor', dir+'-resize');
- });
-
- // get the resize direction
- function getDirection(e) {
- var tt = $(e.data.target);
- var dir = '';
- var offset = tt.offset();
- var width = tt.outerWidth();
- var height = tt.outerHeight();
- var edge = opts.edge;
- if (e.pageY > offset.top && e.pageY < offset.top + edge) {
- dir += 'n';
- } else if (e.pageY < offset.top + height && e.pageY > offset.top + height - edge) {
- dir += 's';
- }
- if (e.pageX > offset.left && e.pageX < offset.left + edge) {
- dir += 'w';
- } else if (e.pageX < offset.left + width && e.pageX > offset.left + width - edge) {
- dir += 'e';
- }
-
- var handles = opts.handles.split(',');
- for(var i=0; i<handles.length; i++) {
- var handle = handles[i].replace(/(^\s*)|(\s*$)/g, '');
- if (handle == 'all' || handle == dir) {
- return dir;
- }
- }
- return '';
- }
-
-
- });
- };
-
- $.fn.resizable.methods = {
- options: function(jq){
- return $.data(jq[0], 'resizable').options;
- },
- enable: function(jq){
- return jq.each(function(){
- $(this).resizable({disabled:false});
- });
- },
- disable: function(jq){
- return jq.each(function(){
- $(this).resizable({disabled:true});
- });
- }
- };
-
- $.fn.resizable.parseOptions = function(target){
- var t = $(target);
- return $.extend({},
- $.parser.parseOptions(target, [
- 'handles',{minWidth:'number',minHeight:'number',maxWidth:'number',maxHeight:'number',edge:'number'}
- ]), {
- disabled: (t.attr('disabled') ? true : undefined)
- })
- };
-
- $.fn.resizable.defaults = {
- disabled:false,
- handles:'n, e, s, w, ne, se, sw, nw, all',
- minWidth: 10,
- minHeight: 10,
- maxWidth: 10000,//$(document).width(),
- maxHeight: 10000,//$(document).height(),
- edge:5,
- onStartResize: function(e){},
- onResize: function(e){},
- onStopResize: function(e){}
- };
-
- $.fn.resizable.isResizing = false;
-
- })(jQuery);
- /**
- * linkbutton - jQuery EasyUI
- *
- */
- (function($){
- function setSize(target, param){
- var opts = $.data(target, 'linkbutton').options;
- if (param){
- $.extend(opts, param);
- }
- if (opts.width || opts.height || opts.fit){
- var btn = $(target);
- var parent = btn.parent();
- var isVisible = btn.is(':visible');
- if (!isVisible){
- var spacer = $('<div style="display:none"></div>').insertBefore(target);
- var style = {
- position: btn.css('position'),
- display: btn.css('display'),
- left: btn.css('left')
- };
- btn.appendTo('body');
- btn.css({
- position: 'absolute',
- display: 'inline-block',
- left: -20000
- });
- }
- btn._size(opts, parent);
- var left = btn.find('.l-btn-left');
- left.css('margin-top', 0);
- left.css('margin-top', parseInt((btn.height()-left.height())/2)+'px');
- if (!isVisible){
- btn.insertAfter(spacer);
- btn.css(style);
- spacer.remove();
- }
- }
- }
-
- function createButton(target) {
- var opts = $.data(target, 'linkbutton').options;
- var t = $(target).empty();
-
- t.addClass('l-btn').removeClass('l-btn-plain l-btn-selected l-btn-plain-selected');
- t.removeClass('l-btn-small l-btn-medium l-btn-large').addClass('l-btn-'+opts.size);
- if (opts.plain){t.addClass('l-btn-plain')}
- if (opts.selected){
- t.addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');
- }
- t.attr('group', opts.group || '');
- t.attr('id', opts.id || '');
-
- var inner = $('<span class="l-btn-left"></span>').appendTo(t);
- if (opts.text){
- $('<span class="l-btn-text"></span>').html(opts.text).appendTo(inner);
- } else {
- $('<span class="l-btn-text l-btn-empty"> </span>').appendTo(inner);
- }
- if (opts.iconCls){
- $('<span class="l-btn-icon"> </span>').addClass(opts.iconCls).appendTo(inner);
- inner.addClass('l-btn-icon-'+opts.iconAlign);
- }
-
- t.unbind('.linkbutton').bind('focus.linkbutton',function(){
- if (!opts.disabled){
- $(this).addClass('l-btn-focus');
- }
- }).bind('blur.linkbutton',function(){
- $(this).removeClass('l-btn-focus');
- }).bind('click.linkbutton',function(){
- if (!opts.disabled){
- if (opts.toggle){
- if (opts.selected){
- $(this).linkbutton('unselect');
- } else {
- $(this).linkbutton('select');
- }
- }
- opts.onClick.call(this);
- }
- // return false;
- });
- // if (opts.toggle && !opts.disabled){
- // t.bind('click.linkbutton', function(){
- // if (opts.selected){
- // $(this).linkbutton('unselect');
- // } else {
- // $(this).linkbutton('select');
- // }
- // });
- // }
-
- setSelected(target, opts.selected)
- setDisabled(target, opts.disabled);
- }
-
- function setSelected(target, selected){
- var opts = $.data(target, 'linkbutton').options;
- if (selected){
- if (opts.group){
- $('a.l-btn[group="'+opts.group+'"]').each(function(){
- var o = $(this).linkbutton('options');
- if (o.toggle){
- $(this).removeClass('l-btn-selected l-btn-plain-selected');
- o.selected = false;
- }
- });
- }
- $(target).addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');
- opts.selected = true;
- } else {
- if (!opts.group){
- $(target).removeClass('l-btn-selected l-btn-plain-selected');
- opts.selected = false;
- }
- }
- }
-
- function setDisabled(target, disabled){
- var state = $.data(target, 'linkbutton');
- var opts = state.options;
- $(target).removeClass('l-btn-disabled l-btn-plain-disabled');
- if (disabled){
- opts.disabled = true;
- var href = $(target).attr('href');
- if (href){
- state.href = href;
- $(target).attr('href', 'javascript:void(0)');
- }
- if (target.onclick){
- state.onclick = target.onclick;
- target.onclick = null;
- }
- opts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled');
- } else {
- opts.disabled = false;
- if (state.href) {
- $(target).attr('href', state.href);
- }
- if (state.onclick) {
- target.onclick = state.onclick;
- }
- }
- }
-
- $.fn.linkbutton = function(options, param){
- if (typeof options == 'string'){
- return $.fn.linkbutton.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'linkbutton');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'linkbutton', {
- options: $.extend({}, $.fn.linkbutton.defaults, $.fn.linkbutton.parseOptions(this), options)
- });
- $(this).removeAttr('disabled');
- $(this).bind('_resize', function(e, force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(this);
- }
- return false;
- });
- }
-
- createButton(this);
- setSize(this);
- });
- };
-
- $.fn.linkbutton.methods = {
- options: function(jq){
- return $.data(jq[0], 'linkbutton').options;
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- enable: function(jq){
- return jq.each(function(){
- setDisabled(this, false);
- });
- },
- disable: function(jq){
- return jq.each(function(){
- setDisabled(this, true);
- });
- },
- select: function(jq){
- return jq.each(function(){
- setSelected(this, true);
- });
- },
- unselect: function(jq){
- return jq.each(function(){
- setSelected(this, false);
- });
- }
- };
-
- $.fn.linkbutton.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target,
- ['id','iconCls','iconAlign','group','size',{plain:'boolean',toggle:'boolean',selected:'boolean'}]
- ), {
- disabled: (t.attr('disabled') ? true : undefined),
- text: $.trim(t.html()),
- iconCls: (t.attr('icon') || t.attr('iconCls'))
- });
- };
-
- $.fn.linkbutton.defaults = {
- id: null,
- disabled: false,
- toggle: false,
- selected: false,
- group: null,
- plain: false,
- text: '',
- iconCls: null,
- iconAlign: 'left',
- size: 'small', // small,large
- onClick: function(){}
- };
-
- })(jQuery);
- /**
- * pagination - jQuery EasyUI
- *
- * Dependencies:
- * linkbutton
- *
- */
- (function($){
- function buildToolbar(target){
- var state = $.data(target, 'pagination');
- var opts = state.options;
- var bb = state.bb = {}; // the buttons;
-
- var pager = $(target).addClass('pagination').html('<table cellspacing="0" cellpadding="0" border="0"><tr></tr></table>');
- var tr = pager.find('tr');
-
- var aa = $.extend([], opts.layout);
- if (!opts.showPageList){removeArrayItem(aa, 'list');}
- if (!opts.showRefresh){removeArrayItem(aa, 'refresh');}
- if (aa[0] == 'sep'){aa.shift();}
- if (aa[aa.length-1] == 'sep'){aa.pop();}
-
- for(var index=0; index<aa.length; index++){
- var item = aa[index];
- if (item == 'list'){
- var ps = $('<select class="pagination-page-list"></select>');
- ps.bind('change', function(){
- opts.pageSize = parseInt($(this).val());
- opts.onChangePageSize.call(target, opts.pageSize);
- selectPage(target, opts.pageNumber);
- });
- for(var i=0; i<opts.pageList.length; i++) {
- $('<option></option>').text(opts.pageList[i]).appendTo(ps);
- }
- $('<td></td>').append(ps).appendTo(tr);
- } else if (item == 'sep'){
- $('<td><div class="pagination-btn-separator"></div></td>').appendTo(tr);
- } else if (item == 'first'){
- bb.first = createButton('first');
- } else if (item == 'prev'){
- bb.prev = createButton('prev');
- } else if (item == 'next'){
- bb.next = createButton('next');
- } else if (item == 'last'){
- bb.last = createButton('last');
- } else if (item == 'manual'){
- $('<span style="padding-left:6px;"></span>').html(opts.beforePageText).appendTo(tr).wrap('<td></td>');
- bb.num = $('<input class="pagination-num" type="text" value="1" size="2">').appendTo(tr).wrap('<td></td>');
- bb.num.unbind('.pagination').bind('keydown.pagination', function(e){
- if (e.keyCode == 13){
- var pageNumber = parseInt($(this).val()) || 1;
- selectPage(target, pageNumber);
- return false;
- }
- });
- bb.after = $('<span style="padding-right:6px;"></span>').appendTo(tr).wrap('<td></td>');
- } else if (item == 'refresh'){
- bb.refresh = createButton('refresh');
- } else if (item == 'links'){
- $('<td class="pagination-links"></td>').appendTo(tr);
- }
- }
- if (opts.buttons){
- $('<td><div class="pagination-btn-separator"></div></td>').appendTo(tr);
- if ($.isArray(opts.buttons)){
- for(var i=0; i<opts.buttons.length; i++){
- var btn = opts.buttons[i];
- if (btn == '-') {
- $('<td><div class="pagination-btn-separator"></div></td>').appendTo(tr);
- } else {
- var td = $('<td></td>').appendTo(tr);
- var a = $('<a href="javascript:void(0)"></a>').appendTo(td);
- a[0].onclick = eval(btn.handler || function(){});
- a.linkbutton($.extend({}, btn, {
- plain:true
- }));
- }
- }
- } else {
- var td = $('<td></td>').appendTo(tr);
- $(opts.buttons).appendTo(td).show();
- }
- }
- $('<div class="pagination-info"></div>').appendTo(pager);
- $('<div style="clear:both;"></div>').appendTo(pager);
-
- function createButton(name){
- var btn = opts.nav[name];
- var a = $('<a href="javascript:void(0)"></a>').appendTo(tr);
- a.wrap('<td></td>');
- a.linkbutton({
- iconCls: btn.iconCls,
- plain: true
- }).unbind('.pagination').bind('click.pagination', function(){
- btn.handler.call(target);
- });
- return a;
- }
- function removeArrayItem(aa, item){
- var index = $.inArray(item, aa);
- if (index >= 0){
- aa.splice(index, 1);
- }
- return aa;
- }
- }
-
- function selectPage(target, page){
- var opts = $.data(target, 'pagination').options;
- refreshData(target, {pageNumber:page});
- opts.onSelectPage.call(target, opts.pageNumber, opts.pageSize);
- }
-
- function refreshData(target, param){
- var state = $.data(target, 'pagination');
- var opts = state.options;
- var bb = state.bb;
-
- $.extend(opts, param||{});
-
- var ps = $(target).find('select.pagination-page-list');
- if (ps.length){
- ps.val(opts.pageSize+'');
- opts.pageSize = parseInt(ps.val());
- }
-
- var pageCount = Math.ceil(opts.total/opts.pageSize) || 1;
- if (opts.pageNumber < 1){opts.pageNumber = 1;}
- if (opts.pageNumber > pageCount){opts.pageNumber = pageCount}
- if (opts.total == 0){
- opts.pageNumber = 0;
- pageCount = 0;
- }
-
- if (bb.num) {bb.num.val(opts.pageNumber);}
- if (bb.after) {bb.after.html(opts.afterPageText.replace(/{pages}/, pageCount));}
-
- var td = $(target).find('td.pagination-links');
- if (td.length){
- td.empty();
- var listBegin = opts.pageNumber - Math.floor(opts.links/2);
- if (listBegin < 1) {listBegin = 1;}
- var listEnd = listBegin + opts.links - 1;
- if (listEnd > pageCount) {listEnd = pageCount;}
- listBegin = listEnd - opts.links + 1;
- if (listBegin < 1) {listBegin = 1;}
- for(var i=listBegin; i<=listEnd; i++){
- var a = $('<a class="pagination-link" href="javascript:void(0)"></a>').appendTo(td);
- a.linkbutton({
- plain:true,
- text:i
- });
- if (i == opts.pageNumber){
- a.linkbutton('select');
- } else {
- a.unbind('.pagination').bind('click.pagination', {pageNumber:i}, function(e){
- selectPage(target, e.data.pageNumber);
- });
- }
- }
- }
-
- var pinfo = opts.displayMsg;
- pinfo = pinfo.replace(/{from}/, opts.total==0 ? 0 : opts.pageSize*(opts.pageNumber-1)+1);
- pinfo = pinfo.replace(/{to}/, Math.min(opts.pageSize*(opts.pageNumber), opts.total));
- pinfo = pinfo.replace(/{total}/, opts.total);
-
- $(target).find('div.pagination-info').html(pinfo);
-
- // bb.first.add(bb.prev).linkbutton({disabled: (opts.pageNumber == 1)});
- // bb.next.add(bb.last).linkbutton({disabled: (opts.pageNumber == pageCount)});
-
- if (bb.first){bb.first.linkbutton({disabled: ((!opts.total) || opts.pageNumber == 1)})}
- if (bb.prev){bb.prev.linkbutton({disabled: ((!opts.total) || opts.pageNumber == 1)})}
- if (bb.next){bb.next.linkbutton({disabled: (opts.pageNumber == pageCount)})}
- if (bb.last){bb.last.linkbutton({disabled: (opts.pageNumber == pageCount)})}
-
- setLoadStatus(target, opts.loading);
- }
-
- function setLoadStatus(target, loading){
- var state = $.data(target, 'pagination');
- var opts = state.options;
- opts.loading = loading;
- if (opts.showRefresh && state.bb.refresh){
- state.bb.refresh.linkbutton({
- iconCls:(opts.loading ? 'pagination-loading' : 'pagination-load')
- });
- }
- }
-
- $.fn.pagination = function(options, param) {
- if (typeof options == 'string'){
- return $.fn.pagination.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var opts;
- var state = $.data(this, 'pagination');
- if (state) {
- opts = $.extend(state.options, options);
- } else {
- opts = $.extend({}, $.fn.pagination.defaults, $.fn.pagination.parseOptions(this), options);
- $.data(this, 'pagination', {
- options: opts
- });
- }
-
- buildToolbar(this);
- refreshData(this);
-
- });
- };
-
- $.fn.pagination.methods = {
- options: function(jq){
- return $.data(jq[0], 'pagination').options;
- },
- loading: function(jq){
- return jq.each(function(){
- setLoadStatus(this, true);
- });
- },
- loaded: function(jq){
- return jq.each(function(){
- setLoadStatus(this, false);
- });
- },
- refresh: function(jq, options){
- return jq.each(function(){
- refreshData(this, options);
- });
- },
- select: function(jq, page){
- return jq.each(function(){
- selectPage(this, page);
- });
- }
- };
-
- $.fn.pagination.parseOptions = function(target){
- var t = $(target);
- return $.extend({},
- $.parser.parseOptions(target, [
- {total:'number',pageSize:'number',pageNumber:'number',links:'number'},
- {loading:'boolean',showPageList:'boolean',showRefresh:'boolean'}
- ]), {
- pageList: (t.attr('pageList') ? eval(t.attr('pageList')) : undefined)
- });
- };
-
- $.fn.pagination.defaults = {
- total: 1,
- pageSize: 10,
- pageNumber: 1,
- pageList: [10,20,30,50],
- loading: false,
- buttons: null,
- showPageList: true,
- showRefresh: true,
- links: 10,
- layout: ['list','sep','first','prev','sep','manual','sep','next','last','sep','refresh'],
-
- onSelectPage: function(pageNumber, pageSize){},
- onBeforeRefresh: function(pageNumber, pageSize){},
- onRefresh: function(pageNumber, pageSize){},
- onChangePageSize: function(pageSize){},
-
- beforePageText: 'Page',
- afterPageText: 'of {pages}',
- displayMsg: 'Displaying {from} to {to} of {total} items',
-
- nav: {
- first: {
- iconCls: 'pagination-first',
- handler: function(){
- var opts = $(this).pagination('options');
- if (opts.pageNumber > 1){$(this).pagination('select', 1)}
- }
- },
- prev: {
- iconCls: 'pagination-prev',
- handler: function(){
- var opts = $(this).pagination('options');
- if (opts.pageNumber > 1){$(this).pagination('select', opts.pageNumber - 1)}
- }
- },
- next: {
- iconCls: 'pagination-next',
- handler: function(){
- var opts = $(this).pagination('options');
- var pageCount = Math.ceil(opts.total/opts.pageSize);
- if (opts.pageNumber < pageCount){$(this).pagination('select', opts.pageNumber + 1)}
- }
- },
- last: {
- iconCls: 'pagination-last',
- handler: function(){
- var opts = $(this).pagination('options');
- var pageCount = Math.ceil(opts.total/opts.pageSize);
- if (opts.pageNumber < pageCount){$(this).pagination('select', pageCount)}
- }
- },
- refresh: {
- iconCls: 'pagination-refresh',
- handler: function(){
- var opts = $(this).pagination('options');
- if (opts.onBeforeRefresh.call(this, opts.pageNumber, opts.pageSize) != false){
- $(this).pagination('select', opts.pageNumber);
- opts.onRefresh.call(this, opts.pageNumber, opts.pageSize);
- }
- }
- }
- }
- };
- })(jQuery);
- /**
- * tree - jQuery EasyUI
- *
- * Dependencies:
- * draggable
- * droppable
- *
- * Node is a javascript object which contains following properties:
- * 1 id: An identity value bind to the node.
- * 2 text: Text to be showed.
- * 3 checked: Indicate whether the node is checked selected.
- * 3 attributes: Custom attributes bind to the node.
- * 4 target: Target DOM object.
- */
- (function($){
- /**
- * wrap the <ul> tag as a tree and then return it.
- */
- function wrapTree(target){
- var tree = $(target);
- tree.addClass('tree');
- return tree;
- }
-
- function bindTreeEvents(target){
- var opts = $.data(target, 'tree').options;
- $(target).unbind().bind('mouseover', function(e){
- var tt = $(e.target);
- var node = tt.closest('div.tree-node');
- if (!node.length){return;}
- node.addClass('tree-node-hover');
- if (tt.hasClass('tree-hit')){
- if (tt.hasClass('tree-expanded')){
- tt.addClass('tree-expanded-hover');
- } else {
- tt.addClass('tree-collapsed-hover');
- }
- }
- e.stopPropagation();
- }).bind('mouseout', function(e){
- var tt = $(e.target);
- var node = tt.closest('div.tree-node');
- if (!node.length){return;}
- node.removeClass('tree-node-hover');
- if (tt.hasClass('tree-hit')){
- if (tt.hasClass('tree-expanded')){
- tt.removeClass('tree-expanded-hover');
- } else {
- tt.removeClass('tree-collapsed-hover');
- }
- }
- e.stopPropagation();
- }).bind('click', function(e){
- var tt = $(e.target);
- var node = tt.closest('div.tree-node');
- if (!node.length){return;}
- if (tt.hasClass('tree-hit')){
- toggleNode(target, node[0]);
- return false;
- } else if (tt.hasClass('tree-checkbox')){
- checkNode(target, node[0], !tt.hasClass('tree-checkbox1'));
- return false;
- } else {
- selectNode(target, node[0]);
- opts.onClick.call(target, getNode(target, node[0]));
- }
- e.stopPropagation();
- }).bind('dblclick', function(e){
- var node = $(e.target).closest('div.tree-node');
- if (!node.length){return;}
- selectNode(target, node[0]);
- opts.onDblClick.call(target, getNode(target, node[0]));
- e.stopPropagation();
- }).bind('contextmenu', function(e){
- var node = $(e.target).closest('div.tree-node');
- if (!node.length){return;}
- opts.onContextMenu.call(target, e, getNode(target, node[0]));
- e.stopPropagation();
- });
- }
-
- function disableDnd(target){
- var opts = $.data(target, 'tree').options;
- opts.dnd = false;
- var nodes = $(target).find('div.tree-node');
- nodes.draggable('disable');
- nodes.css('cursor', 'pointer');
- }
-
- function enableDnd(target){
- var state = $.data(target, 'tree');
- var opts = state.options;
- var tree = state.tree;
- state.disabledNodes = [];
- opts.dnd = true;
-
- tree.find('div.tree-node').draggable({
- disabled: false,
- revert: true,
- cursor: 'pointer',
- proxy: function(source){
- var p = $('<div class="tree-node-proxy"></div>').appendTo('body');
- // var p = $('<div class="tree-node-proxy tree-dnd-no"></div>').appendTo('body');
- p.html('<span class="tree-dnd-icon tree-dnd-no"> </span>'+$(source).find('.tree-title').html());
- p.hide();
- return p;
- },
- deltaX: 15,
- deltaY: 15,
- onBeforeDrag: function(e){
- if (opts.onBeforeDrag.call(target, getNode(target, this)) == false){return false}
- if ($(e.target).hasClass('tree-hit') || $(e.target).hasClass('tree-checkbox')){return false;}
- if (e.which != 1){return false;}
- $(this).next('ul').find('div.tree-node').droppable({accept:'no-accept'}); // the child node can't be dropped
- var indent = $(this).find('span.tree-indent');
- if (indent.length){
- e.data.offsetWidth -= indent.length*indent.width();
- }
- },
- onStartDrag: function(){
- $(this).draggable('proxy').css({
- left:-10000,
- top:-10000
- });
- opts.onStartDrag.call(target, getNode(target, this));
- var node = getNode(target, this);
- if (node.id == undefined){
- node.id = 'easyui_tree_node_id_temp';
- updateNode(target, node);
- }
- state.draggingNodeId = node.id; // store the dragging node id
- },
- onDrag: function(e){
- var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY;
- var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
- if (d>3){ // when drag a little distance, show the proxy object
- $(this).draggable('proxy').show();
- }
- this.pageY = e.pageY;
- },
- onStopDrag: function(){
- $(this).next('ul').find('div.tree-node').droppable({accept:'div.tree-node'}); // restore the accept property of child nodes
- for(var i=0; i<state.disabledNodes.length; i++){
- $(state.disabledNodes[i]).droppable('enable');
- }
- state.disabledNodes = [];
- // get the source node
- var node = findNode(target, state.draggingNodeId);
- if (node && node.id == 'easyui_tree_node_id_temp'){
- node.id = '';
- updateNode(target, node);
- }
- opts.onStopDrag.call(target, node);
- }
- }).droppable({
- accept:'div.tree-node',
- onDragEnter: function(e, source){
- if (opts.onDragEnter.call(target, this, getSourceData(source)) == false){
- allowDrop(source, false);
- // $(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');
- $(this).removeClass('tree-node-append tree-node-top tree-node-bottom');
- $(this).droppable('disable');
- state.disabledNodes.push(this);
- }
- },
- onDragOver: function(e, source){
- if ($(this).droppable('options').disabled){return}
- var pageY = source.pageY;
- var top = $(this).offset().top;
- var bottom = top + $(this).outerHeight();
-
- allowDrop(source, true);
- // $(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes');
- $(this).removeClass('tree-node-append tree-node-top tree-node-bottom');
- if (pageY > top + (bottom - top) / 2){
- if (bottom - pageY < 5){
- $(this).addClass('tree-node-bottom');
- } else {
- $(this).addClass('tree-node-append');
- }
- } else {
- if (pageY - top < 5){
- $(this).addClass('tree-node-top');
- } else {
- $(this).addClass('tree-node-append');
- }
- }
- if (opts.onDragOver.call(target, this, getSourceData(source)) == false){
- allowDrop(source, false);
- // $(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');
- $(this).removeClass('tree-node-append tree-node-top tree-node-bottom');
- $(this).droppable('disable');
- state.disabledNodes.push(this);
- }
- },
- onDragLeave: function(e, source){
- allowDrop(source, false);
- // $(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');
- $(this).removeClass('tree-node-append tree-node-top tree-node-bottom');
- opts.onDragLeave.call(target, this, getSourceData(source));
- },
- onDrop: function(e, source){
- var dest = this;
- var action, point;
- if ($(this).hasClass('tree-node-append')){
- action = append;
- point = 'append';
- } else {
- action = insert;
- point = $(this).hasClass('tree-node-top') ? 'top' : 'bottom';
- }
-
- if (opts.onBeforeDrop.call(target, dest, getSourceData(source), point) == false){
- $(this).removeClass('tree-node-append tree-node-top tree-node-bottom');
- return;
- }
- action(source, dest, point);
- $(this).removeClass('tree-node-append tree-node-top tree-node-bottom');
- }
- });
-
- function getSourceData(source, pop){
- return $(source).closest('ul.tree').tree(pop?'pop':'getData', source);
- }
-
- function allowDrop(source, allowed){
- var icon = $(source).draggable('proxy').find('span.tree-dnd-icon');
- icon.removeClass('tree-dnd-yes tree-dnd-no').addClass(allowed ? 'tree-dnd-yes' : 'tree-dnd-no');
- }
-
- function append(source, dest){
- if (getNode(target, dest).state == 'closed'){
- expandNode(target, dest, function(){
- doAppend();
- });
- } else {
- doAppend();
- }
-
- function doAppend(){
- var node = getSourceData(source, true);
- $(target).tree('append', {
- parent: dest,
- data: [node]
- });
- opts.onDrop.call(target, dest, node, 'append');
- }
- }
-
- function insert(source, dest, point){
- var param = {};
- if (point == 'top'){
- param.before = dest;
- } else {
- param.after = dest;
- }
-
- var node = getSourceData(source, true);
- param.data = node;
- $(target).tree('insert', param);
- opts.onDrop.call(target, dest, node, point);
- }
- }
-
- function checkNode(target, nodeEl, checked){
- var opts = $.data(target, 'tree').options;
- if (!opts.checkbox) {return;}
-
- var nodedata = getNode(target, nodeEl);
- if (opts.onBeforeCheck.call(target, nodedata, checked) == false){return;}
-
- var node = $(nodeEl);
- var ck = node.find('.tree-checkbox');
- ck.removeClass('tree-checkbox0 tree-checkbox1 tree-checkbox2');
- if (checked){
- ck.addClass('tree-checkbox1');
- } else {
- ck.addClass('tree-checkbox0');
- }
- if (opts.cascadeCheck){
- setParentCheckbox(node);
- setChildCheckbox(node);
- }
-
- opts.onCheck.call(target, nodedata, checked);
-
- function setChildCheckbox(node){
- var childck = node.next().find('.tree-checkbox');
- childck.removeClass('tree-checkbox0 tree-checkbox1 tree-checkbox2');
- if (node.find('.tree-checkbox').hasClass('tree-checkbox1')){
- childck.addClass('tree-checkbox1');
- } else {
- childck.addClass('tree-checkbox0');
- }
- }
-
- function setParentCheckbox(node){
- var pnode = getParentNode(target, node[0]);
- if (pnode){
- var ck = $(pnode.target).find('.tree-checkbox');
- ck.removeClass('tree-checkbox0 tree-checkbox1 tree-checkbox2');
- if (isAllSelected(node)){
- ck.addClass('tree-checkbox1');
- } else if (isAllNull(node)){
- ck.addClass('tree-checkbox0');
- } else {
- ck.addClass('tree-checkbox2');
- }
- setParentCheckbox($(pnode.target));
- }
-
- function isAllSelected(n){
- var ck = n.find('.tree-checkbox');
- if (ck.hasClass('tree-checkbox0') || ck.hasClass('tree-checkbox2')) return false;
- var b = true;
- n.parent().siblings().each(function(){
- if (!$(this).children('div.tree-node').children('.tree-checkbox').hasClass('tree-checkbox1')){
- b = false;
- }
- });
- return b;
- }
- function isAllNull(n){
- var ck = n.find('.tree-checkbox');
- if (ck.hasClass('tree-checkbox1') || ck.hasClass('tree-checkbox2')) return false;
- var b = true;
- n.parent().siblings().each(function(){
- if (!$(this).children('div.tree-node').children('.tree-checkbox').hasClass('tree-checkbox0')){
- b = false;
- }
- });
- return b;
- }
- }
- }
-
- /**
- * when append or remove node, adjust its parent node check status.
- */
- function adjustCheck(target, nodeEl){
- var opts = $.data(target, 'tree').options;
- if (!opts.checkbox){return}
-
- var node = $(nodeEl);
- if (isLeaf(target, nodeEl)){
- var ck = node.find('.tree-checkbox');
- if (ck.length){
- if (ck.hasClass('tree-checkbox1')){
- checkNode(target, nodeEl, true);
- } else {
- checkNode(target, nodeEl, false);
- }
- } else if (opts.onlyLeafCheck){
- $('<span class="tree-checkbox tree-checkbox0"></span>').insertBefore(node.find('.tree-title'));
- }
- } else {
- var ck = node.find('.tree-checkbox');
- if (opts.onlyLeafCheck){
- ck.remove();
- } else {
- if (ck.hasClass('tree-checkbox1')){
- checkNode(target, nodeEl, true);
- } else if (ck.hasClass('tree-checkbox2')){
- var allchecked = true;
- var allunchecked = true;
- var children = getChildren(target, nodeEl);
- for(var i=0; i<children.length; i++){
- if (children[i].checked){
- allunchecked = false;
- } else {
- allchecked = false;
- }
- }
- if (allchecked){
- checkNode(target, nodeEl, true);
- }
- if (allunchecked){
- checkNode(target, nodeEl, false);
- }
- }
- }
- }
- }
-
- /**
- * load tree data to <ul> tag
- * ul: the <ul> dom element
- * data: array, the tree node data
- * append: defines if to append data
- */
- function loadData(target, ul, data, append){
- var state = $.data(target, 'tree');
- var opts = state.options;
- var parent = $(ul).prevAll('div.tree-node:first');
- data = opts.loadFilter.call(target, data, parent[0]);
-
- var pnode = findNodeBy(target, 'domId', parent.attr('id'));
- if (!append){
- pnode ? pnode.children = data : state.data = data;
- $(ul).empty();
- } else {
- if (pnode){
- pnode.children ? pnode.children = pnode.children.concat(data) : pnode.children = data;
- } else {
- state.data = state.data.concat(data);
- }
- }
-
- opts.view.render.call(opts.view, target, ul, data);
-
- if (opts.dnd){enableDnd(target);}
- if (pnode){updateNode(target, pnode);}
-
- var uncheckedNodes = [];
- var checkedNodes = [];
- for(var i=0; i<data.length; i++){
- var node = data[i];
- if (!node.checked){
- uncheckedNodes.push(node);
- }
- }
- forNodes(data, function(node){
- if (node.checked){
- checkedNodes.push(node);
- }
- });
-
- var onCheck = opts.onCheck;
- opts.onCheck = function(){};
- if (uncheckedNodes.length){
- checkNode(target, $('#'+uncheckedNodes[0].domId)[0], false);
- }
- for(var i=0; i<checkedNodes.length; i++){
- checkNode(target, $('#'+checkedNodes[i].domId)[0], true);
- }
- opts.onCheck = onCheck;
-
- setTimeout(function(){
- showLines(target, target);
- }, 0);
-
- opts.onLoadSuccess.call(target, pnode, data);
- }
-
- /**
- * draw tree lines
- */
- function showLines(target, ul, called){
- var opts = $.data(target, 'tree').options;
- if (opts.lines){
- $(target).addClass('tree-lines');
- } else {
- $(target).removeClass('tree-lines');
- return;
- }
-
- if (!called){
- called = true;
- $(target).find('span.tree-indent').removeClass('tree-line tree-join tree-joinbottom');
- $(target).find('div.tree-node').removeClass('tree-node-last tree-root-first tree-root-one');
- var roots = $(target).tree('getRoots');
- if (roots.length > 1){
- $(roots[0].target).addClass('tree-root-first');
- } else if (roots.length == 1){
- $(roots[0].target).addClass('tree-root-one');
- }
- }
- $(ul).children('li').each(function(){
- var node = $(this).children('div.tree-node');
- var ul = node.next('ul');
- if (ul.length){
- if ($(this).next().length){
- _line(node);
- }
- showLines(target, ul, called);
- } else {
- _join(node);
- }
- });
- var lastNode = $(ul).children('li:last').children('div.tree-node').addClass('tree-node-last');
- lastNode.children('span.tree-join').removeClass('tree-join').addClass('tree-joinbottom');
-
- function _join(node, hasNext){
- var icon = node.find('span.tree-icon');
- icon.prev('span.tree-indent').addClass('tree-join');
- }
-
- function _line(node){
- var depth = node.find('span.tree-indent, span.tree-hit').length;
- node.next().find('div.tree-node').each(function(){
- $(this).children('span:eq('+(depth-1)+')').addClass('tree-line');
- });
- }
- }
-
- /**
- * request remote data and then load nodes in the <ul> tag.
- * ul: the <ul> dom element
- * param: request parameter
- */
- function request(target, ul, param, callback){
- var opts = $.data(target, 'tree').options;
-
- param = $.extend({}, opts.queryParams, param||{});
- // param = param || {};
-
- var nodedata = null;
- if (target != ul){
- var node = $(ul).prev();
- nodedata = getNode(target, node[0]);
- }
- if (opts.onBeforeLoad.call(target, nodedata, param) == false) return;
-
- var folder = $(ul).prev().children('span.tree-folder');
- folder.addClass('tree-loading');
- var result = opts.loader.call(target, param, function(data){
- folder.removeClass('tree-loading');
- loadData(target, ul, data);
- if (callback){
- callback();
- }
- }, function(){
- folder.removeClass('tree-loading');
- opts.onLoadError.apply(target, arguments);
- if (callback){
- callback();
- }
- });
- if (result == false){
- folder.removeClass('tree-loading');
- }
- }
-
- function expandNode(target, nodeEl, callback){
- var opts = $.data(target, 'tree').options;
-
- var hit = $(nodeEl).children('span.tree-hit');
- if (hit.length == 0) return; // is a leaf node
- if (hit.hasClass('tree-expanded')) return; // has expanded
-
- var node = getNode(target, nodeEl);
- if (opts.onBeforeExpand.call(target, node) == false) return;
-
- hit.removeClass('tree-collapsed tree-collapsed-hover').addClass('tree-expanded');
- hit.next().addClass('tree-folder-open');
- var ul = $(nodeEl).next();
- if (ul.length){
- if (opts.animate){
- ul.slideDown('normal', function(){
- node.state = 'open';
- opts.onExpand.call(target, node);
- if (callback) callback();
- });
- } else {
- ul.css('display','block');
- node.state = 'open';
- opts.onExpand.call(target, node);
- if (callback) callback();
- }
- } else {
- var subul = $('<ul style="display:none"></ul>').insertAfter(nodeEl);
- // request children nodes data
- request(target, subul[0], {id:node.id}, function(){
- if (subul.is(':empty')){
- subul.remove(); // if load children data fail, remove the children node container
- }
- if (opts.animate){
- subul.slideDown('normal', function(){
- node.state = 'open';
- opts.onExpand.call(target, node);
- if (callback) callback();
- });
- } else {
- subul.css('display','block');
- node.state = 'open';
- opts.onExpand.call(target, node);
- if (callback) callback();
- }
- });
- }
- }
-
- function collapseNode(target, nodeEl){
- var opts = $.data(target, 'tree').options;
-
- var hit = $(nodeEl).children('span.tree-hit');
- if (hit.length == 0) return; // is a leaf node
- if (hit.hasClass('tree-collapsed')) return; // has collapsed
-
- var node = getNode(target, nodeEl);
- if (opts.onBeforeCollapse.call(target, node) == false) return;
-
- hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed');
- hit.next().removeClass('tree-folder-open');
- var ul = $(nodeEl).next();
- if (opts.animate){
- ul.slideUp('normal', function(){
- node.state = 'closed';
- opts.onCollapse.call(target, node);
- });
- } else {
- ul.css('display','none');
- node.state = 'closed';
- opts.onCollapse.call(target, node);
- }
- }
-
- function toggleNode(target, nodeEl){
- var hit = $(nodeEl).children('span.tree-hit');
- if (hit.length == 0) return; // is a leaf node
-
- if (hit.hasClass('tree-expanded')){
- collapseNode(target, nodeEl);
- } else {
- expandNode(target, nodeEl);
- }
- }
-
- function expandAllNode(target, nodeEl){
- var nodes = getChildren(target, nodeEl);
- if (nodeEl){
- nodes.unshift(getNode(target, nodeEl));
- }
- for(var i=0; i<nodes.length; i++){
- expandNode(target, nodes[i].target);
- }
- }
-
- function expandToNode(target, nodeEl){
- var nodes = [];
- var p = getParentNode(target, nodeEl);
- while(p){
- nodes.unshift(p);
- p = getParentNode(target, p.target);
- }
- for(var i=0; i<nodes.length; i++){
- expandNode(target, nodes[i].target);
- }
- }
-
- function scrollToNode(target, nodeEl){
- var c = $(target).parent();
- while(c[0].tagName != 'BODY' && c.css('overflow-y') != 'auto'){
- c = c.parent();
- }
- var n = $(nodeEl);
- var ntop = n.offset().top;
- if (c[0].tagName != 'BODY'){
- var ctop = c.offset().top;
- if (ntop < ctop){
- c.scrollTop(c.scrollTop() + ntop - ctop);
- } else if (ntop + n.outerHeight() > ctop + c.outerHeight() - 18){
- c.scrollTop(c.scrollTop() + ntop + n.outerHeight() - ctop - c.outerHeight() + 18);
- }
- } else {
- c.scrollTop(ntop);
- }
- }
-
- function collapseAllNode(target, nodeEl){
- var nodes = getChildren(target, nodeEl);
- if (nodeEl){
- nodes.unshift(getNode(target, nodeEl));
- }
- for(var i=0; i<nodes.length; i++){
- collapseNode(target, nodes[i].target);
- }
- }
-
-
- /**
- * Append nodes to tree.
- * The param parameter has two properties:
- * 1 parent: DOM object, the parent node to append to.
- * 2 data: array, the nodes data.
- */
- function appendNodes(target, param){
- var node = $(param.parent);
- var data = param.data;
- if (!data){return}
- data = $.isArray(data) ? data : [data];
- if (!data.length){return}
-
- var ul;
- if (node.length == 0){
- ul = $(target);
- } else {
- // ensure the node is a folder node
- if (isLeaf(target, node[0])){
- var nodeIcon = node.find('span.tree-icon');
- nodeIcon.removeClass('tree-file').addClass('tree-folder tree-folder-open');
- var hit = $('<span class="tree-hit tree-expanded"></span>').insertBefore(nodeIcon);
- if (hit.prev().length){
- hit.prev().remove();
- }
- }
-
- ul = node.next();
- if (!ul.length){
- ul = $('<ul></ul>').insertAfter(node);
- }
- }
-
- loadData(target, ul[0], data, true);
-
- adjustCheck(target, ul.prev());
- }
-
- /**
- * insert node to before or after specified node
- * param has the following properties:
- * before: DOM object, the node to insert before
- * after: DOM object, the node to insert after
- * data: object, the node data
- */
- function insertNode(target, param){
- var ref = param.before || param.after;
- var pnode = getParentNode(target, ref);
- var data = param.data;
- if (!data){return}
- data = $.isArray(data) ? data : [data];
- if (!data.length){return}
-
- appendNodes(target, {
- parent: (pnode ? pnode.target : null),
- data: data
- });
-
- //adjust the sequence of nodes
- var pdata = pnode ? pnode.children : $(target).tree('getRoots');
- for(var i=0; i<pdata.length; i++){
- if (pdata[i].domId == $(ref).attr('id')){
- for(var j=data.length-1; j>=0; j--){
- pdata.splice((param.before ? i : (i+1)), 0, data[j]);
- }
- pdata.splice(pdata.length-data.length, data.length);
- break;
- }
- }
-
- var li = $();
- for(var i=0; i<data.length; i++){
- li = li.add($('#'+data[i].domId).parent());
- }
-
- if (param.before){
- li.insertBefore($(ref).parent());
- } else {
- li.insertAfter($(ref).parent());
- }
- }
-
- /**
- * Remove node from tree.
- * nodeEl: DOM object, indicate the node to be removed.
- */
- function removeNode(target, nodeEl){
- var parent = del(nodeEl);
- $(nodeEl).parent().remove();
- if (parent){
- if (!parent.children || !parent.children.length){
- var node = $(parent.target);
- node.find('.tree-icon').removeClass('tree-folder').addClass('tree-file');
- node.find('.tree-hit').remove();
- $('<span class="tree-indent"></span>').prependTo(node);
- node.next().remove();
- }
- updateNode(target, parent);
- adjustCheck(target, parent.target);
- }
-
- showLines(target, target);
-
- function del(nodeEl){
- var id = $(nodeEl).attr('id');
- var parent = getParentNode(target, nodeEl);
- var cc = parent ? parent.children : $.data(target, 'tree').data;
- for(var i=0; i<cc.length; i++){
- if (cc[i].domId == id){
- cc.splice(i, 1);
- break;
- }
- }
- return parent;
- }
- }
-
- function updateNode(target, param){
- var opts = $.data(target, 'tree').options;
- var node = $(param.target);
- var data = getNode(target, param.target);
- var oldChecked = data.checked;
- if (data.iconCls){
- node.find('.tree-icon').removeClass(data.iconCls);
- }
- $.extend(data, param);
- node.find('.tree-title').html(opts.formatter.call(target, data));
- if (data.iconCls){
- node.find('.tree-icon').addClass(data.iconCls);
- }
- if (oldChecked != data.checked){
- checkNode(target, param.target, data.checked);
- }
-
- }
-
- /**
- * get the first root node of a specified node, if no root node exists, return null.
- */
- function getRootNode(target, nodeEl){
- if (nodeEl){
- var p = getParentNode(target, nodeEl);
- while(p){
- nodeEl = p.target;
- p = getParentNode(target, nodeEl);
- }
- return getNode(target, nodeEl);
- } else {
- var roots = getRootNodes(target);
- return roots.length ? roots[0] : null;
- }
- }
-
- /**
- * get the root nodes.
- */
- function getRootNodes(target){
- var nodes = $.data(target, 'tree').data;
- for(var i=0; i<nodes.length; i++){
- attachProperties(nodes[i]);
- }
- return nodes;
- }
-
- /**
- * get all child nodes corresponding to specified node
- * nodeEl: the node DOM element
- */
- function getChildren(target, nodeEl){
- var nodes = [];
- var n = getNode(target, nodeEl);
- var data = n ? (n.children||[]) : $.data(target, 'tree').data;
- forNodes(data, function(node){
- nodes.push(attachProperties(node));
- });
- return nodes;
- }
-
- /**
- * get the parent node
- * nodeEl: DOM object, from which to search it's parent node
- */
- function getParentNode(target, nodeEl){
- var p = $(nodeEl).closest('ul').prevAll('div.tree-node:first');
- return getNode(target, p[0]);
- }
-
- /**
- * get the specified state nodes
- * the state available values are: 'checked','unchecked','indeterminate', default is 'checked'.
- */
- function getCheckedNode(target, state){
- state = state || 'checked';
- if (!$.isArray(state)){state = [state]}
-
- var selectors = [];
- for(var i=0; i<state.length; i++){
- var s = state[i];
- if (s == 'checked'){
- selectors.push('span.tree-checkbox1');
- } else if (s == 'unchecked'){
- selectors.push('span.tree-checkbox0');
- } else if (s == 'indeterminate'){
- selectors.push('span.tree-checkbox2');
- }
- }
-
- var nodes = [];
- $(target).find(selectors.join(',')).each(function(){
- var node = $(this).parent();
- nodes.push(getNode(target, node[0]));
- });
- return nodes;
- }
-
- /**
- * Get the selected node data which contains following properties: id,text,attributes,target
- */
- function getSelectedNode(target){
- var node = $(target).find('div.tree-node-selected');
- return node.length ? getNode(target, node[0]) : null;
- }
-
- /**
- * get specified node data, include its children data
- */
- function getData(target, nodeEl){
- var data = getNode(target, nodeEl);
- if (data && data.children){
- forNodes(data.children, function(node){
- attachProperties(node);
- });
- }
- return data;
- }
-
- /**
- * get the specified node
- */
- function getNode(target, nodeEl){
- return findNodeBy(target, 'domId', $(nodeEl).attr('id'));
- }
-
- function findNode(target, id){
- return findNodeBy(target, 'id', id);
- }
-
- function findNodeBy(target, param, value){
- var data = $.data(target, 'tree').data;
- var result = null;
- forNodes(data, function(node){
- if (node[param] == value){
- result = attachProperties(node);
- return false;
- }
- });
- return result;
- }
-
- function attachProperties(node){
- var d = $('#'+node.domId);
- node.target = d[0];
- node.checked = d.find('.tree-checkbox').hasClass('tree-checkbox1');
- return node;
- }
-
- function forNodes(data, callback){
- var nodes = [];
- for(var i=0; i<data.length; i++){
- nodes.push(data[i]);
- }
- while(nodes.length){
- var node = nodes.shift();
- if (callback(node) == false){return;}
- if (node.children){
- for(var i=node.children.length-1; i>=0; i--){
- nodes.unshift(node.children[i]);
- }
- }
- }
- }
-
- /**
- * select the specified node.
- * nodeEl: DOM object, indicate the node to be selected.
- */
- function selectNode(target, nodeEl){
- var opts = $.data(target, 'tree').options;
- var node = getNode(target, nodeEl);
- if (opts.onBeforeSelect.call(target, node) == false) return;
- $(target).find('div.tree-node-selected').removeClass('tree-node-selected');
- $(nodeEl).addClass('tree-node-selected');
- opts.onSelect.call(target, node);
- }
-
- /**
- * Check if the specified node is leaf.
- * nodeEl: DOM object, indicate the node to be checked.
- */
- function isLeaf(target, nodeEl){
- return $(nodeEl).children('span.tree-hit').length == 0;
- }
-
- function beginEdit(target, nodeEl){
- var opts = $.data(target, 'tree').options;
- var node = getNode(target, nodeEl);
-
- if (opts.onBeforeEdit.call(target, node) == false) return;
-
- $(nodeEl).css('position', 'relative');
- var nt = $(nodeEl).find('.tree-title');
- var width = nt.outerWidth();
- nt.empty();
- var editor = $('<input class="tree-editor">').appendTo(nt);
- editor.val(node.text).focus();
- editor.width(width + 20);
- editor.height(document.compatMode=='CSS1Compat' ? (18-(editor.outerHeight()-editor.height())) : 18);
- editor.bind('click', function(e){
- return false;
- }).bind('mousedown', function(e){
- e.stopPropagation();
- }).bind('mousemove', function(e){
- e.stopPropagation();
- }).bind('keydown', function(e){
- if (e.keyCode == 13){ // enter
- endEdit(target, nodeEl);
- return false;
- } else if (e.keyCode == 27){ // esc
- cancelEdit(target, nodeEl);
- return false;
- }
- }).bind('blur', function(e){
- e.stopPropagation();
- endEdit(target, nodeEl);
- });
- }
-
- function endEdit(target, nodeEl){
- var opts = $.data(target, 'tree').options;
- $(nodeEl).css('position', '');
- var editor = $(nodeEl).find('input.tree-editor');
- var val = editor.val();
- editor.remove();
- var node = getNode(target, nodeEl);
- node.text = val;
- updateNode(target, node);
- opts.onAfterEdit.call(target, node);
- }
-
- function cancelEdit(target, nodeEl){
- var opts = $.data(target, 'tree').options;
- $(nodeEl).css('position', '');
- $(nodeEl).find('input.tree-editor').remove();
- var node = getNode(target, nodeEl);
- updateNode(target, node);
- opts.onCancelEdit.call(target, node);
- }
-
- $.fn.tree = function(options, param){
- if (typeof options == 'string'){
- return $.fn.tree.methods[options](this, param);
- }
-
- var options = options || {};
- return this.each(function(){
- var state = $.data(this, 'tree');
- var opts;
- if (state){
- opts = $.extend(state.options, options);
- state.options = opts;
- } else {
- opts = $.extend({}, $.fn.tree.defaults, $.fn.tree.parseOptions(this), options);
- $.data(this, 'tree', {
- options: opts,
- tree: wrapTree(this),
- data: []
- });
- var data = $.fn.tree.parseData(this);
- if (data.length){
- loadData(this, this, data);
- }
- }
- bindTreeEvents(this);
-
- if (opts.data){
- loadData(this, this, $.extend(true,[],opts.data));
- }
- request(this, this);
- });
- };
-
- $.fn.tree.methods = {
- options: function(jq){
- return $.data(jq[0], 'tree').options;
- },
- loadData: function(jq, data){
- return jq.each(function(){
- loadData(this, this, data);
- });
- },
- getNode: function(jq, nodeEl){ // get the single node
- return getNode(jq[0], nodeEl);
- },
- getData: function(jq, nodeEl){ // get the specified node data, include its children
- return getData(jq[0], nodeEl);
- },
- reload: function(jq, nodeEl){
- return jq.each(function(){
- if (nodeEl){
- var node = $(nodeEl);
- var hit = node.children('span.tree-hit');
- hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed');
- node.next().remove();
- expandNode(this, nodeEl);
- } else {
- $(this).empty();
- request(this, this);
- }
- });
- },
- getRoot: function(jq, nodeEl){ // if specify 'nodeEl', return its top parent node, otherwise return the first root node.
- return getRootNode(jq[0], nodeEl);
- },
- getRoots: function(jq){
- return getRootNodes(jq[0]);
- },
- getParent: function(jq, nodeEl){
- return getParentNode(jq[0], nodeEl);
- },
- getChildren: function(jq, nodeEl){
- return getChildren(jq[0], nodeEl);
- },
- getChecked: function(jq, state){ // the state available values are: 'checked','unchecked','indeterminate', default is 'checked'.
- return getCheckedNode(jq[0], state);
- },
- getSelected: function(jq){
- return getSelectedNode(jq[0]);
- },
- isLeaf: function(jq, nodeEl){
- return isLeaf(jq[0], nodeEl);
- },
- find: function(jq, id){
- return findNode(jq[0], id);
- },
- select: function(jq, nodeEl){
- return jq.each(function(){
- selectNode(this, nodeEl);
- });
- },
- check: function(jq, nodeEl){
- return jq.each(function(){
- checkNode(this, nodeEl, true);
- });
- },
- uncheck: function(jq, nodeEl){
- return jq.each(function(){
- checkNode(this, nodeEl, false);
- });
- },
- collapse: function(jq, nodeEl){
- return jq.each(function(){
- collapseNode(this, nodeEl);
- });
- },
- expand: function(jq, nodeEl){
- return jq.each(function(){
- expandNode(this, nodeEl);
- });
- },
- collapseAll: function(jq, nodeEl){
- return jq.each(function(){
- collapseAllNode(this, nodeEl);
- });
- },
- expandAll: function(jq, nodeEl){
- return jq.each(function(){
- expandAllNode(this, nodeEl);
- });
- },
- expandTo: function(jq, nodeEl){
- return jq.each(function(){
- expandToNode(this, nodeEl);
- });
- },
- scrollTo: function(jq, nodeEl){
- return jq.each(function(){
- scrollToNode(this, nodeEl);
- });
- },
- toggle: function(jq, nodeEl){
- return jq.each(function(){
- toggleNode(this, nodeEl);
- });
- },
- append: function(jq, param){
- return jq.each(function(){
- appendNodes(this, param);
- });
- },
- insert: function(jq, param){
- return jq.each(function(){
- insertNode(this, param);
- });
- },
- remove: function(jq, nodeEl){
- return jq.each(function(){
- removeNode(this, nodeEl);
- });
- },
- pop: function(jq, nodeEl){
- var node = jq.tree('getData', nodeEl);
- jq.tree('remove', nodeEl);
- return node;
- },
- update: function(jq, param){
- return jq.each(function(){
- updateNode(this, param);
- });
- },
- enableDnd: function(jq){
- return jq.each(function(){
- enableDnd(this);
- });
- },
- disableDnd: function(jq){
- return jq.each(function(){
- disableDnd(this);
- });
- },
- beginEdit: function(jq, nodeEl){
- return jq.each(function(){
- beginEdit(this, nodeEl);
- });
- },
- endEdit: function(jq, nodeEl){
- return jq.each(function(){
- endEdit(this, nodeEl);
- });
- },
- cancelEdit: function(jq, nodeEl){
- return jq.each(function(){
- cancelEdit(this, nodeEl);
- });
- }
- };
-
- $.fn.tree.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [
- 'url','method',
- {checkbox:'boolean',cascadeCheck:'boolean',onlyLeafCheck:'boolean'},
- {animate:'boolean',lines:'boolean',dnd:'boolean'}
- ]));
- };
-
- $.fn.tree.parseData = function(target){
- var data = [];
- _parseNode(data, $(target));
- return data;
-
- function _parseNode(aa, tree){
- tree.children('li').each(function(){
- var node = $(this);
- var item = $.extend({}, $.parser.parseOptions(this, ['id','iconCls','state']), {
- checked: (node.attr('checked') ? true : undefined)
- });
- item.text = node.children('span').html();
- if (!item.text){
- item.text = node.html();
- }
-
- var subTree = node.children('ul');
- if (subTree.length){
- item.children = [];
- _parseNode(item.children, subTree);
- }
- aa.push(item);
- });
- }
- };
-
- var nodeIndex = 1;
- var defaultView = {
- render: function(target, ul, data) {
- var opts = $.data(target, 'tree').options;
- var depth = $(ul).prev('div.tree-node').find('span.tree-indent, span.tree-hit').length;
- var cc = getTreeData(depth, data);
- $(ul).append(cc.join(''));
-
- function getTreeData(depth, children){
- var cc = [];
- for(var i=0; i<children.length; i++){
- var item = children[i];
- if (item.state != 'open' && item.state != 'closed'){
- item.state = 'open';
- }
- item.domId = '_easyui_tree_' + nodeIndex++;
-
- cc.push('<li>');
- cc.push('<div id="' + item.domId + '" class="tree-node">');
- for(var j=0; j<depth; j++){
- cc.push('<span class="tree-indent"></span>');
- }
- var isFileNode = false;
- if (item.state == 'closed'){
- cc.push('<span class="tree-hit tree-collapsed"></span>');
- cc.push('<span class="tree-icon tree-folder ' + (item.iconCls?item.iconCls:'') + '"></span>');
- } else {
- if (item.children && item.children.length){
- cc.push('<span class="tree-hit tree-expanded"></span>');
- cc.push('<span class="tree-icon tree-folder tree-folder-open ' + (item.iconCls?item.iconCls:'') + '"></span>');
- } else {
- cc.push('<span class="tree-indent"></span>');
- cc.push('<span class="tree-icon tree-file ' + (item.iconCls?item.iconCls:'') + '"></span>');
- isFileNode = true;
- }
- }
- if (opts.checkbox){
- if ((!opts.onlyLeafCheck) || isFileNode){
- cc.push('<span class="tree-checkbox tree-checkbox0"></span>');
- }
- }
- cc.push('<span class="tree-title">' + opts.formatter.call(target, item) + '</span>');
- cc.push('</div>');
-
- if (item.children && item.children.length){
- var tmp = getTreeData(depth+1, item.children);
- cc.push('<ul style="display:' + (item.state=='closed'?'none':'block') + '">');
- cc = cc.concat(tmp);
- cc.push('</ul>');
- }
- cc.push('</li>');
- }
- return cc;
- }
- }
- };
-
- $.fn.tree.defaults = {
- url: null,
- method: 'post',
- animate: false,
- checkbox: false,
- cascadeCheck: true,
- onlyLeafCheck: false,
- lines: false,
- dnd: false,
- data: null,
- queryParams: {},
- formatter: function(node){
- return node.text;
- },
- loader: function(param, success, error){
- var opts = $(this).tree('options');
- if (!opts.url) return false;
- $.ajax({
- type: opts.method,
- url: opts.url,
- data: param,
- dataType: 'json',
- success: function(data){
- success(data);
- },
- error: function(){
- error.apply(this, arguments);
- }
- });
- },
- loadFilter: function(data, parent){
- return data;
- },
- view: defaultView,
-
- onBeforeLoad: function(node, param){},
- onLoadSuccess: function(node, data){},
- onLoadError: function(){},
- onClick: function(node){}, // node: id,text,checked,attributes,target
- onDblClick: function(node){}, // node: id,text,checked,attributes,target
- onBeforeExpand: function(node){},
- onExpand: function(node){},
- onBeforeCollapse: function(node){},
- onCollapse: function(node){},
- onBeforeCheck: function(node, checked){},
- onCheck: function(node, checked){},
- onBeforeSelect: function(node){},
- onSelect: function(node){},
- onContextMenu: function(e, node){},
- onBeforeDrag: function(node){}, // return false to deny drag
- onStartDrag: function(node){},
- onStopDrag: function(node){},
- onDragEnter: function(target, source){}, // return false to deny drop
- onDragOver: function(target, source){}, // return false to deny drop
- onDragLeave: function(target, source){},
- onBeforeDrop: function(target, source, point){},
- onDrop: function(target, source, point){}, // point:'append','top','bottom'
- onBeforeEdit: function(node){},
- onAfterEdit: function(node){},
- onCancelEdit: function(node){}
- };
- })(jQuery);
- /**
- * progressbar - jQuery EasyUI
- *
- * Dependencies:
- * none
- *
- */
- (function($){
- function init(target){
- $(target).addClass('progressbar');
- $(target).html('<div class="progressbar-text"></div><div class="progressbar-value"><div class="progressbar-text"></div></div>');
- $(target).bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(target);
- }
- return false;
- });
- return $(target);
- }
-
- function setSize(target,width){
- var opts = $.data(target, 'progressbar').options;
- var bar = $.data(target, 'progressbar').bar;
- if (width) opts.width = width;
- bar._size(opts);
-
- bar.find('div.progressbar-text').css('width', bar.width());
- bar.find('div.progressbar-text,div.progressbar-value').css({
- height: bar.height()+'px',
- lineHeight: bar.height()+'px'
- });
- }
-
- $.fn.progressbar = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.progressbar.methods[options];
- if (method){
- return method(this, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'progressbar');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'progressbar', {
- options: $.extend({}, $.fn.progressbar.defaults, $.fn.progressbar.parseOptions(this), options),
- bar: init(this)
- });
- }
- $(this).progressbar('setValue', state.options.value);
- setSize(this);
- });
- };
-
- $.fn.progressbar.methods = {
- options: function(jq){
- return $.data(jq[0], 'progressbar').options;
- },
- resize: function(jq, width){
- return jq.each(function(){
- setSize(this, width);
- });
- },
- getValue: function(jq){
- return $.data(jq[0], 'progressbar').options.value;
- },
- setValue: function(jq, value){
- if (value < 0) value = 0;
- if (value > 100) value = 100;
- return jq.each(function(){
- var opts = $.data(this, 'progressbar').options;
- var text = opts.text.replace(/{value}/, value);
- var oldValue = opts.value;
- opts.value = value;
- $(this).find('div.progressbar-value').width(value+'%');
- $(this).find('div.progressbar-text').html(text);
- if (oldValue != value){
- opts.onChange.call(this, value, oldValue);
- }
- });
- }
- };
-
- $.fn.progressbar.parseOptions = function(target){
- return $.extend({}, $.parser.parseOptions(target, ['width','height','text',{value:'number'}]));
- };
-
- $.fn.progressbar.defaults = {
- width: 'auto',
- height: 22,
- value: 0, // percentage value
- text: '{value}%',
- onChange:function(newValue,oldValue){}
- };
- })(jQuery);
- /**
- * tooltip - jQuery EasyUI
- *
- */
- (function($){
- function init(target){
- $(target).addClass('tooltip-f');
- }
-
- function bindEvents(target){
- var opts = $.data(target, 'tooltip').options;
- $(target).unbind('.tooltip').bind(opts.showEvent+'.tooltip', function(e){
- // showTip(target, e);
- $(target).tooltip('show', e);
- }).bind(opts.hideEvent+'.tooltip', function(e){
- // hideTip(target, e);
- $(target).tooltip('hide', e);
- }).bind('mousemove.tooltip', function(e){
- if (opts.trackMouse){
- opts.trackMouseX = e.pageX;
- opts.trackMouseY = e.pageY;
- $(target).tooltip('reposition');
- }
- });
- }
-
- function clearTimeouts(target){
- var state = $.data(target, 'tooltip');
- if (state.showTimer){
- clearTimeout(state.showTimer);
- state.showTimer = null;
- }
- if (state.hideTimer){
- clearTimeout(state.hideTimer);
- state.hideTimer = null;
- }
- }
-
- function reposition(target){
- var state = $.data(target, 'tooltip');
- if (!state || !state.tip){return}
- var opts = state.options;
- var tip = state.tip;
- var pos = {left:-100000,top:-100000};
-
- if ($(target).is(':visible')){
- pos = getPosition(opts.position);
- if (opts.position == 'top' && pos.top < 0){
- pos = getPosition('bottom');
- } else if ((opts.position == 'bottom') && (pos.top + tip._outerHeight() > $(window)._outerHeight() + $(document).scrollTop())){
- pos = getPosition('top');
- }
- if (pos.left < 0){
- if (opts.position == 'left'){
- pos = getPosition('right');
- } else {
- $(target).tooltip('arrow').css('left', tip._outerWidth()/2 + pos.left);
- pos.left = 0;
- }
- } else if (pos.left + tip._outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()){
- if (opts.position == 'right'){
- pos = getPosition('left');
- } else {
- var left = pos.left;
- pos.left = $(window)._outerWidth() + $(document)._scrollLeft() - tip._outerWidth();
- $(target).tooltip('arrow').css('left', tip._outerWidth()/2 - (pos.left-left));
- }
- }
- }
-
- tip.css({
- left: pos.left,
- top: pos.top,
- zIndex: (opts.zIndex!=undefined ? opts.zIndex : ($.fn.window ? $.fn.window.defaults.zIndex++ : ''))
- });
- opts.onPosition.call(target, pos.left, pos.top);
-
- function getPosition(position){
- opts.position = position || 'bottom';
- tip.removeClass('tooltip-top tooltip-bottom tooltip-left tooltip-right').addClass('tooltip-'+opts.position);
- var left,top;
- if (opts.trackMouse){
- t = $();
- left = opts.trackMouseX + opts.deltaX;
- top = opts.trackMouseY + opts.deltaY;
- } else {
- var t = $(target);
- left = t.offset().left + opts.deltaX;
- top = t.offset().top + opts.deltaY;
- }
- switch(opts.position){
- case 'right':
- left += t._outerWidth() + 12 + (opts.trackMouse?12:0);
- top -= (tip._outerHeight() - t._outerHeight()) / 2;
- break;
- case 'left':
- left -= tip._outerWidth() + 12 + (opts.trackMouse?12:0);
- top -= (tip._outerHeight() - t._outerHeight()) / 2;
- break;
- case 'top':
- left -= (tip._outerWidth() - t._outerWidth()) / 2;
- top -= tip._outerHeight() + 12 + (opts.trackMouse?12:0);
- break;
- case 'bottom':
- left -= (tip._outerWidth() - t._outerWidth()) / 2;
- top += t._outerHeight() + 12 + (opts.trackMouse?12:0);
- break;
- }
- return {
- left: left,
- top: top
- }
- }
- }
-
- function showTip(target, e){
- var state = $.data(target, 'tooltip');
- var opts = state.options;
- var tip = state.tip;
- if (!tip){
- tip = $(
- '<div tabindex="-1" class="tooltip">' +
- '<div class="tooltip-content"></div>' +
- '<div class="tooltip-arrow-outer"></div>' +
- '<div class="tooltip-arrow"></div>' +
- '</div>'
- ).appendTo('body');
- state.tip = tip;
- updateTip(target);
- }
- // tip.removeClass('tooltip-top tooltip-bottom tooltip-left tooltip-right').addClass('tooltip-'+opts.position);
-
- clearTimeouts(target);
-
- state.showTimer = setTimeout(function(){
- $(target).tooltip('reposition');
- tip.show();
- opts.onShow.call(target, e);
-
- var arrowOuter = tip.children('.tooltip-arrow-outer');
- var arrow = tip.children('.tooltip-arrow');
- var bc = 'border-'+opts.position+'-color';
- arrowOuter.add(arrow).css({
- borderTopColor:'',
- borderBottomColor:'',
- borderLeftColor:'',
- borderRightColor:''
- });
- arrowOuter.css(bc, tip.css(bc));
- arrow.css(bc, tip.css('backgroundColor'));
- }, opts.showDelay);
- }
-
- function hideTip(target, e){
- var state = $.data(target, 'tooltip');
- if (state && state.tip){
- clearTimeouts(target);
- state.hideTimer = setTimeout(function(){
- state.tip.hide();
- state.options.onHide.call(target, e);
- }, state.options.hideDelay);
- }
- }
-
- function updateTip(target, content){
- var state = $.data(target, 'tooltip');
- var opts = state.options;
- if (content){opts.content = content;}
- if (!state.tip){return;}
-
- var cc = typeof opts.content == 'function' ? opts.content.call(target) : opts.content;
- state.tip.children('.tooltip-content').html(cc);
- opts.onUpdate.call(target, cc);
- }
-
- function destroyTip(target){
- var state = $.data(target, 'tooltip');
- if (state){
- clearTimeouts(target);
- var opts = state.options;
- if (state.tip){state.tip.remove();}
- if (opts._title){
- $(target).attr('title', opts._title);
- }
- $.removeData(target, 'tooltip');
- $(target).unbind('.tooltip').removeClass('tooltip-f');
- opts.onDestroy.call(target);
- }
- }
-
- $.fn.tooltip = function(options, param){
- if (typeof options == 'string'){
- return $.fn.tooltip.methods[options](this, param);
- }
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'tooltip');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'tooltip', {
- options: $.extend({}, $.fn.tooltip.defaults, $.fn.tooltip.parseOptions(this), options)
- });
- init(this);
- }
- bindEvents(this);
- updateTip(this);
- });
- };
-
- $.fn.tooltip.methods = {
- options: function(jq){
- return $.data(jq[0], 'tooltip').options;
- },
- tip: function(jq){
- return $.data(jq[0], 'tooltip').tip;
- },
- arrow: function(jq){
- return jq.tooltip('tip').children('.tooltip-arrow-outer,.tooltip-arrow');
- },
- show: function(jq, e){
- return jq.each(function(){
- showTip(this, e);
- });
- },
- hide: function(jq, e){
- return jq.each(function(){
- hideTip(this, e);
- });
- },
- update: function(jq, content){
- return jq.each(function(){
- updateTip(this, content);
- });
- },
- reposition: function(jq){
- return jq.each(function(){
- reposition(this);
- });
- },
- destroy: function(jq){
- return jq.each(function(){
- destroyTip(this);
- });
- }
- };
-
- $.fn.tooltip.parseOptions = function(target){
- var t = $(target);
- var opts = $.extend({}, $.parser.parseOptions(target, [
- 'position','showEvent','hideEvent','content',
- {trackMouse:'boolean',deltaX:'number',deltaY:'number',showDelay:'number',hideDelay:'number'}
- ]), {
- _title: t.attr('title')
- });
- t.attr('title', '');
- if (!opts.content){
- opts.content = opts._title;
- }
- return opts;
- };
-
- $.fn.tooltip.defaults = {
- position: 'bottom', // possible values are: 'left','right','top','bottom'
- content: null,
- trackMouse: false,
- deltaX: 0,
- deltaY: 0,
- showEvent: 'mouseenter',
- hideEvent: 'mouseleave',
- showDelay: 200,
- hideDelay: 100,
-
- onShow: function(e){},
- onHide: function(e){},
- onUpdate: function(content){},
- onPosition: function(left,top){},
- onDestroy: function(){}
- };
- })(jQuery);
- /**
- * panel - jQuery EasyUI
- *
- */
- (function($){
- $.fn._remove = function(){
- return this.each(function(){
- $(this).remove();
- try{
- this.outerHTML = '';
- } catch(err){}
- });
- }
- function removeNode(node){
- node._remove();
- }
-
- function setSize(target, param){
- var state = $.data(target, 'panel');
- var opts = state.options;
- var panel = state.panel;
- var pheader = panel.children('div.panel-header');
- var pbody = panel.children('div.panel-body');
- var pfooter = panel.children('div.panel-footer');
-
- if (param){
- $.extend(opts, {
- width: param.width,
- height: param.height,
- minWidth: param.minWidth,
- maxWidth: param.maxWidth,
- minHeight: param.minHeight,
- maxHeight: param.maxHeight,
- left: param.left,
- top: param.top
- });
- }
-
- panel._size(opts);
- pheader.add(pbody)._outerWidth(panel.width());
- if (!isNaN(parseInt(opts.height))){
- pbody._outerHeight(panel.height() - pheader._outerHeight() - pfooter._outerHeight());
- } else {
- pbody.css('height', '');
- var min = $.parser.parseValue('minHeight', opts.minHeight, panel.parent());
- var max = $.parser.parseValue('maxHeight', opts.maxHeight, panel.parent());
- var distance = pheader._outerHeight() + pfooter._outerHeight() + panel._outerHeight() - panel.height();
- pbody._size('minHeight', min ? (min - distance) : '');
- pbody._size('maxHeight', max ? (max - distance) : '');
- }
- panel.css({
- height: '',
- minHeight: '',
- maxHeight: '',
- left: opts.left,
- top: opts.top
- });
-
- opts.onResize.apply(target, [opts.width, opts.height]);
-
- $(target).panel('doLayout');
- // $(target).find('>div:visible,>form>div:visible').triggerHandler('_resize');
- }
-
- function movePanel(target, param){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
- if (param){
- if (param.left != null) opts.left = param.left;
- if (param.top != null) opts.top = param.top;
- }
- panel.css({
- left: opts.left,
- top: opts.top
- });
- opts.onMove.apply(target, [opts.left, opts.top]);
- }
-
- function wrapPanel(target){
- $(target).addClass('panel-body')._size('clear');
- var panel = $('<div class="panel"></div>').insertBefore(target);
- panel[0].appendChild(target);
- panel.bind('_resize', function(e, force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(target);
- }
- return false;
- });
-
- return panel;
- }
-
- function createPanel(target){
- var state = $.data(target, 'panel');
- var opts = state.options;
- var panel = state.panel;
- panel.css(opts.style);
- panel.addClass(opts.cls);
-
- _addHeader();
- _addFooter();
-
- var header = $(target).panel('header');
- var body = $(target).panel('body');
- var footer = $(target).siblings('div.panel-footer');
- if (opts.border){
- header.removeClass('panel-header-noborder');
- body.removeClass('panel-body-noborder');
- footer.removeClass('panel-footer-noborder');
- } else {
- header.addClass('panel-header-noborder');
- body.addClass('panel-body-noborder');
- footer.addClass('panel-footer-noborder');
- }
- header.addClass(opts.headerCls);
- body.addClass(opts.bodyCls);
-
- $(target).attr('id', opts.id || '');
- if (opts.content){
- $(target).panel('clear');
- $(target).html(opts.content);
- $.parser.parse($(target));
- }
-
- function _addHeader(){
- if (opts.tools && typeof opts.tools == 'string'){
- panel.find('>div.panel-header>div.panel-tool .panel-tool-a').appendTo(opts.tools);
- }
- removeNode(panel.children('div.panel-header'));
- if (opts.title && !opts.noheader){
- var header = $('<div class="panel-header"></div>').prependTo(panel);
- var htitle = $('<div class="panel-title"></div>').html(opts.title).appendTo(header);
- if (opts.iconCls){
- htitle.addClass('panel-with-icon');
- $('<div class="panel-icon"></div>').addClass(opts.iconCls).appendTo(header);
- }
- var tool = $('<div class="panel-tool"></div>').appendTo(header);
- tool.bind('click', function(e){
- e.stopPropagation();
- });
-
- if (opts.tools){
- if ($.isArray(opts.tools)){
- for(var i=0; i<opts.tools.length; i++){
- var t = $('<a href="javascript:void(0)"></a>').addClass(opts.tools[i].iconCls).appendTo(tool);
- if (opts.tools[i].handler){
- t.bind('click', eval(opts.tools[i].handler));
- }
- }
- } else {
- $(opts.tools).children().each(function(){
- $(this).addClass($(this).attr('iconCls')).addClass('panel-tool-a').appendTo(tool);
- });
- }
- }
- if (opts.collapsible){
- $('<a class="panel-tool-collapse" href="javascript:void(0)"></a>').appendTo(tool).bind('click', function(){
- if (opts.collapsed == true){
- expandPanel(target, true);
- } else {
- collapsePanel(target, true);
- }
- return false;
- });
- }
- if (opts.minimizable){
- $('<a class="panel-tool-min" href="javascript:void(0)"></a>').appendTo(tool).bind('click', function(){
- minimizePanel(target);
- return false;
- });
- }
- if (opts.maximizable){
- $('<a class="panel-tool-max" href="javascript:void(0)"></a>').appendTo(tool).bind('click', function(){
- if (opts.maximized == true){
- restorePanel(target);
- } else {
- maximizePanel(target);
- }
- return false;
- });
- }
- if (opts.closable){
- $('<a class="panel-tool-close" href="javascript:void(0)"></a>').appendTo(tool).bind('click',function(){
- closePanel(target);
- return false;
- });
- }
- panel.children('div.panel-body').removeClass('panel-body-noheader');
- } else {
- panel.children('div.panel-body').addClass('panel-body-noheader');
- }
- }
- function _addFooter(){
- if (opts.footer){
- $(opts.footer).addClass('panel-footer').appendTo(panel);
- $(target).addClass('panel-body-nobottom');
- } else {
- panel.children('div.panel-footer').remove();
- $(target).removeClass('panel-body-nobottom');
- }
- }
- }
-
- /**
- * load content from remote site if the href attribute is defined
- */
- function loadData(target, params){
- var state = $.data(target, 'panel');
- var opts = state.options;
- if (param){opts.queryParams = params}
- if (!opts.href){return;}
- if (!state.isLoaded || !opts.cache){
- var param = $.extend({}, opts.queryParams);
- if (opts.onBeforeLoad.call(target, param) == false){return}
- state.isLoaded = false;
- $(target).panel('clear');
- if (opts.loadingMessage){
- $(target).html($('<div class="panel-loading"></div>').html(opts.loadingMessage));
- }
-
- if(opts.iframe){
- var height = $(target).parent().parent().height();
- var contentStr='<div><iframe style="width:100%;height:'+height+'px" scrolling="no" frameborder="0" src="'+opts.href+'"></iframe></div>';
- $(target).html(contentStr);
- $.parser.parse($(target));
- opts.onLoad.apply(target, arguments);
- state.isLoaded = true;
- }else
- opts.loader.call(target, param, function(data){
- var content = opts.extractor.call(target, data);
- $(target).html(content);
- $.parser.parse($(target));
- opts.onLoad.apply(target, arguments);
- state.isLoaded = true;
- }, function(){
- opts.onLoadError.apply(target, arguments);
- });
- }
- }
-
- /**
- * clear the panel content.
- */
- function clearPanel(target){
- var t = $(target);
- t.find('.combo-f').each(function(){
- $(this).combo('destroy');
- });
- t.find('.m-btn').each(function(){
- $(this).menubutton('destroy');
- });
- t.find('.s-btn').each(function(){
- $(this).splitbutton('destroy');
- });
- t.find('.tooltip-f').each(function(){
- $(this).tooltip('destroy');
- });
- t.children('div').each(function(){
- $(this)._size('unfit');
- });
- t.empty();
- }
-
- function doLayout(target){
- $(target).panel('doLayout', true);
- // $(target).find('div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible').each(function(){
- // $(this).triggerHandler('_resize', [true]);
- // });
- }
-
- function openPanel(target, forceOpen){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
-
- if (forceOpen != true){
- if (opts.onBeforeOpen.call(target) == false) return;
- }
- panel.stop(true, true);
- if ($.isFunction(opts.openAnimation)){
- opts.openAnimation.call(target, cb);
- } else {
- switch(opts.openAnimation){
- case 'slide':
- panel.slideDown(opts.openDuration, cb);
- break;
- case 'fade':
- panel.fadeIn(opts.openDuration, cb);
- break;
- case 'show':
- panel.show(opts.openDuration, cb);
- break;
- default:
- panel.show();
- cb();
- }
- }
-
- function cb(){
- opts.closed = false;
- opts.minimized = false;
- var tool = panel.children('div.panel-header').find('a.panel-tool-restore');
- if (tool.length){
- opts.maximized = true;
- }
- opts.onOpen.call(target);
-
- if (opts.maximized == true) {
- opts.maximized = false;
- maximizePanel(target);
- }
- if (opts.collapsed == true) {
- opts.collapsed = false;
- collapsePanel(target);
- }
-
- if (!opts.collapsed){
- loadData(target);
- doLayout(target);
- }
- }
- }
-
- function closePanel(target, forceClose){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
-
- if (forceClose != true){
- if (opts.onBeforeClose.call(target) == false) return;
- }
- panel.stop(true, true);
- panel._size('unfit');
-
- if ($.isFunction(opts.closeAnimation)){
- opts.closeAnimation.call(target, cb);
- } else {
- switch(opts.closeAnimation){
- case 'slide':
- panel.slideUp(opts.closeDuration, cb);
- break;
- case 'fade':
- panel.fadeOut(opts.closeDuration, cb);
- break;
- case 'hide':
- panel.hide(opts.closeDuration, cb);
- break;
- default:
- panel.hide();
- cb();
- }
- }
-
- function cb(){
- opts.closed = true;
- opts.onClose.call(target);
- }
- }
-
- function destroyPanel(target, forceDestroy){
- var state = $.data(target, 'panel');
- var opts = state.options;
- var panel = state.panel;
-
- if (forceDestroy != true){
- if (opts.onBeforeDestroy.call(target) == false) return;
- }
- $(target).panel('clear').panel('clear', 'footer');
- removeNode(panel);
- opts.onDestroy.call(target);
- }
-
- function collapsePanel(target, animate){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
- var body = panel.children('div.panel-body');
- var tool = panel.children('div.panel-header').find('a.panel-tool-collapse');
-
- if (opts.collapsed == true) return;
-
- body.stop(true, true); // stop animation
- if (opts.onBeforeCollapse.call(target) == false) return;
-
- tool.addClass('panel-tool-expand');
- if (animate == true){
- body.slideUp('normal', function(){
- opts.collapsed = true;
- opts.onCollapse.call(target);
- });
- } else {
- body.hide();
- opts.collapsed = true;
- opts.onCollapse.call(target);
- }
- }
-
- function expandPanel(target, animate){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
- var body = panel.children('div.panel-body');
- var tool = panel.children('div.panel-header').find('a.panel-tool-collapse');
-
- if (opts.collapsed == false) return;
-
- body.stop(true, true); // stop animation
- if (opts.onBeforeExpand.call(target) == false) return;
-
- tool.removeClass('panel-tool-expand');
- if (animate == true){
- body.slideDown('normal', function(){
- opts.collapsed = false;
- opts.onExpand.call(target);
- loadData(target);
- doLayout(target);
- });
- } else {
- body.show();
- opts.collapsed = false;
- opts.onExpand.call(target);
- loadData(target);
- doLayout(target);
- }
- }
-
- function maximizePanel(target){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
- var tool = panel.children('div.panel-header').find('a.panel-tool-max');
-
- if (opts.maximized == true) return;
-
- tool.addClass('panel-tool-restore');
-
- if (!$.data(target, 'panel').original){
- $.data(target, 'panel').original = {
- width: opts.width,
- height: opts.height,
- left: opts.left,
- top: opts.top,
- fit: opts.fit
- };
- }
- opts.left = 0;
- opts.top = 0;
- opts.fit = true;
- setSize(target);
- opts.minimized = false;
- opts.maximized = true;
- opts.onMaximize.call(target);
- }
-
- function minimizePanel(target){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
- panel._size('unfit');
- panel.hide();
- opts.minimized = true;
- opts.maximized = false;
- opts.onMinimize.call(target);
- }
-
- function restorePanel(target){
- var opts = $.data(target, 'panel').options;
- var panel = $.data(target, 'panel').panel;
- var tool = panel.children('div.panel-header').find('a.panel-tool-max');
-
- if (opts.maximized == false) return;
-
- panel.show();
- tool.removeClass('panel-tool-restore');
- $.extend(opts, $.data(target, 'panel').original);
- // var original = $.data(target, 'panel').original;
- // opts.width = original.width;
- // opts.height = original.height;
- // opts.left = original.left;
- // opts.top = original.top;
- // opts.fit = original.fit;
- setSize(target);
- opts.minimized = false;
- opts.maximized = false;
- $.data(target, 'panel').original = null;
- opts.onRestore.call(target);
- }
-
-
- function setTitle(target, title){
- $.data(target, 'panel').options.title = title;
- $(target).panel('header').find('div.panel-title').html(title);
- }
-
- var resizeTimer = null;
- $(window).unbind('.panel').bind('resize.panel', function(){
- if (resizeTimer){
- clearTimeout(resizeTimer);
- }
- resizeTimer = setTimeout(function(){
- var layout = $('body.layout');
- if (layout.length){
- layout.layout('resize');
- $('body').children('.easyui-fluid:visible').trigger('_resize');
- } else {
- $('body').panel('doLayout');
- // $('body').children('div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible').triggerHandler('_resize');
- }
- resizeTimer = null;
- }, 100);
- });
-
- $.fn.panel = function(options, param){
- if (typeof options == 'string'){
- return $.fn.panel.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'panel');
- var opts;
- if (state){
- opts = $.extend(state.options, options);
- state.isLoaded = false;
- } else {
- opts = $.extend({}, $.fn.panel.defaults, $.fn.panel.parseOptions(this), options);
- $(this).attr('title', '');
- state = $.data(this, 'panel', {
- options: opts,
- panel: wrapPanel(this),
- isLoaded: false
- });
- }
-
- createPanel(this);
-
- if (opts.doSize == true){
- state.panel.css('display','block');
- setSize(this);
- }
- if (opts.closed == true || opts.minimized == true){
- state.panel.hide();
- } else {
- openPanel(this);
- }
- });
- };
-
- $.fn.panel.methods = {
- options: function(jq){
- return $.data(jq[0], 'panel').options;
- },
- panel: function(jq){
- return $.data(jq[0], 'panel').panel;
- },
- header: function(jq){
- return $.data(jq[0], 'panel').panel.find('>div.panel-header');
- },
- footer: function(jq){
- return jq.panel('panel').children('.panel-footer');
- },
- body: function(jq){
- return $.data(jq[0], 'panel').panel.find('>div.panel-body');
- },
- setTitle: function(jq, title){
- return jq.each(function(){
- setTitle(this, title);
- });
- },
- open: function(jq, forceOpen){
- return jq.each(function(){
- openPanel(this, forceOpen);
- });
- },
- close: function(jq, forceClose){
- return jq.each(function(){
- closePanel(this, forceClose);
- });
- },
- destroy: function(jq, forceDestroy){
- return jq.each(function(){
- destroyPanel(this, forceDestroy);
- });
- },
- clear: function(jq, type){
- return jq.each(function(){
- clearPanel(type=='footer' ? $(this).panel('footer') : this);
- // clearPanel(this);
- });
- },
- refresh: function(jq, href){
- return jq.each(function(){
- var state = $.data(this, 'panel');
- state.isLoaded = false;
- if (href){
- if (typeof href == 'string'){
- state.options.href = href;
- } else {
- state.options.queryParams = href;
- }
- }
- loadData(this);
- });
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- doLayout: function(jq, all){
- return jq.each(function(){
- _layout(this, 'body');
- _layout($(this).siblings('div.panel-footer')[0], 'footer');
- function _layout(target, type){
- if (!target){return}
- var isBody = target == $('body')[0];
- var s = $(target).find('div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible').filter(function(index, el){
- var p = $(el).parents('div.panel-'+type+':first');
- return isBody ? p.length==0 : p[0]==target;
- });
- s.trigger('_resize', [all||false]);
- }
- });
- },
- move: function(jq, param){
- return jq.each(function(){
- movePanel(this, param);
- });
- },
- maximize: function(jq){
- return jq.each(function(){
- maximizePanel(this);
- });
- },
- minimize: function(jq){
- return jq.each(function(){
- minimizePanel(this);
- });
- },
- restore: function(jq){
- return jq.each(function(){
- restorePanel(this);
- });
- },
- collapse: function(jq, animate){
- return jq.each(function(){
- collapsePanel(this, animate);
- });
- },
- expand: function(jq, animate){
- return jq.each(function(){
- expandPanel(this, animate);
- });
- }
- };
-
- $.fn.panel.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, ['id','width','height','left','top',
- 'title','iconCls','cls','headerCls','bodyCls','tools','href','method',
- {cache:'boolean',fit:'boolean',border:'boolean',noheader:'boolean',iframe:'boolean'},
- {collapsible:'boolean',minimizable:'boolean',maximizable:'boolean'},
- {closable:'boolean',collapsed:'boolean',minimized:'boolean',maximized:'boolean',closed:'boolean'},
- 'openAnimation','closeAnimation',
- {openDuration:'number',closeDuration:'number'},
- ]), {
- loadingMessage: (t.attr('loadingMessage')!=undefined ? t.attr('loadingMessage') : undefined)
- });
- };
-
- $.fn.panel.defaults = {
- id: null,
- title: null,
- iconCls: null,
- width: 'auto',
- height: 'auto',
- left: null,
- top: null,
- cls: null,
- headerCls: null,
- bodyCls: null,
- style: {},
- href: null,
- cache: true,
- fit: false,
- border: true,
- doSize: true, // true to set size and do layout
- noheader: false,
- content: null, // the body content if specified
-
- collapsible: false,
- minimizable: false,
- maximizable: false,
- closable: false,
- collapsed: false,
- minimized: false,
- maximized: false,
- closed: false,
-
- openAnimation: false,
- openDuration: 400,
- closeAnimation: false,
- closeDuration: 400,
-
- // custom tools, every tool can contain two properties: iconCls and handler
- // iconCls is a icon CSS class
- // handler is a function, which will be run when tool button is clicked
- tools: null,
- footer: null,
-
- queryParams: {},
- method: 'get',
- href: null,
- loadingMessage: 'Loading...',
- loader: function(param, success, error){
- var opts = $(this).panel('options');
- if (!opts.href){return false}
- $.ajax({
- type: opts.method,
- url: opts.href,
- cache: false,
- data: param,
- dataType: 'html',
- success: function(data){
- success(data);
- },
- error: function(){
- error.apply(this, arguments);
- }
- });
- },
- extractor: function(data){ // define how to extract the content from ajax response, return extracted data
- var pattern = /<body[^>]*>((.|[\n\r])*)<\/body>/im;
- var matches = pattern.exec(data);
- if (matches){
- return matches[1]; // only extract body content
- } else {
- return data;
- }
- },
-
- onBeforeLoad: function(param){},
- onLoad: function(){},
- onLoadError: function(){},
- onBeforeOpen: function(){},
- onOpen: function(){},
- onBeforeClose: function(){},
- onClose: function(){},
- onBeforeDestroy: function(){},
- onDestroy: function(){},
- onResize: function(width,height){},
- onMove: function(left,top){},
- onMaximize: function(){},
- onRestore: function(){},
- onMinimize: function(){},
- onBeforeCollapse: function(){},
- onBeforeExpand: function(){},
- onCollapse: function(){},
- onExpand: function(){}
- };
- })(jQuery);
- /**
- * window - jQuery EasyUI
- *
- * Dependencies:
- * panel
- * draggable
- * resizable
- *
- */
- (function($){
- function moveWindow(target, param){
- var state = $.data(target, 'window');
- if (param){
- if (param.left != null) state.options.left = param.left;
- if (param.top != null) state.options.top = param.top;
- }
- $(target).panel('move', state.options);
- if (state.shadow){
- state.shadow.css({
- left: state.options.left,
- top: state.options.top
- });
- }
- }
-
- /**
- * center the window only horizontally
- */
- function hcenter(target, tomove){
- var opts = $.data(target, 'window').options;
- var pp = $(target).window('panel');
- var width = pp._outerWidth();
- if (opts.inline){
- var parent = pp.parent();
- opts.left = Math.ceil((parent.width() - width) / 2 + parent.scrollLeft());
- } else {
- opts.left = Math.ceil(($(window)._outerWidth() - width) / 2 + $(document).scrollLeft());
- }
- if (tomove){moveWindow(target);}
- }
-
- /**
- * center the window only vertically
- */
- function vcenter(target, tomove){
- var opts = $.data(target, 'window').options;
- var pp = $(target).window('panel');
- var height = pp._outerHeight();
- if (opts.inline){
- var parent = pp.parent();
- opts.top = Math.ceil((parent.height() - height) / 2 + parent.scrollTop());
- } else {
- opts.top = Math.ceil(($(window)._outerHeight() - height) / 2 + $(document).scrollTop());
- }
- if (tomove){moveWindow(target);}
- }
-
- function create(target){
- var state = $.data(target, 'window');
- var opts = state.options;
- var win = $(target).panel($.extend({}, state.options, {
- border: false,
- doSize: true, // size the panel, the property undefined in window component
- closed: true, // close the panel
- cls: 'window',
- headerCls: 'window-header',
- bodyCls: 'window-body ' + (opts.noheader ? 'window-body-noheader' : ''),
-
- onBeforeDestroy: function(){
- if (opts.onBeforeDestroy.call(target) == false){return false;}
- if (state.shadow){state.shadow.remove();}
- if (state.mask){state.mask.remove();}
- },
- onClose: function(){
- if (state.shadow){state.shadow.hide();}
- if (state.mask){state.mask.hide();}
- //关闭iframe的背景
- if (window.hideBackgroundIfream){hideBackgroundIfream();}
- opts.onClose.call(target);
- },
- onOpen: function(){
- if (state.mask){
- state.mask.css({
- display:'block',
- zIndex: $.fn.window.defaults.zIndex++
- });
- }
- if (state.shadow){
- state.shadow.css({
- display:'block',
- zIndex: $.fn.window.defaults.zIndex++,
- left: opts.left,
- top: opts.top,
- width: state.window._outerWidth(),
- height: state.window._outerHeight()
- });
- }
- state.window.css('z-index', $.fn.window.defaults.zIndex++);
-
- opts.onOpen.call(target);
- },
- onResize: function(width, height){
- var popts = $(this).panel('options');
- $.extend(opts, {
- width: popts.width,
- height: popts.height,
- left: popts.left,
- top: popts.top
- });
- if (state.shadow){
- state.shadow.css({
- left: opts.left,
- top: opts.top,
- width: state.window._outerWidth(),
- height: state.window._outerHeight()
- });
- }
- opts.onResize.call(target, width, height);
- },
- onMinimize: function(){
- if (state.shadow){state.shadow.hide();}
- if (state.mask){state.mask.hide();}
- state.options.onMinimize.call(target);
- },
- onBeforeCollapse: function(){
- if (opts.onBeforeCollapse.call(target) == false){return false;}
- if (state.shadow){state.shadow.hide();}
- },
- onExpand: function(){
- if (state.shadow){state.shadow.show();}
- opts.onExpand.call(target);
- }
- }));
-
- state.window = win.panel('panel');
-
- // create mask
- if (state.mask){state.mask.remove();}
- if (opts.modal == true){
- state.mask = $('<div class="window-mask"></div>').insertAfter(state.window);
- state.mask.css({
- width: (opts.inline ? state.mask.parent().width() : getPageArea().width),
- height: (opts.inline ? state.mask.parent().height() : getPageArea().height),
- display: 'none'
- });
- }
-
- // create shadow
- if (state.shadow){state.shadow.remove();}
- if (opts.shadow == true){
- state.shadow = $('<div class="window-shadow"></div>').insertAfter(state.window);
- state.shadow.css({
- display: 'none'
- });
- }
-
- // if require center the window
- if (opts.left == null){hcenter(target);}
- if (opts.top == null){vcenter(target);}
- moveWindow(target);
-
- if (!opts.closed){
- win.window('open'); // open the window
- }
- }
-
-
- /**
- * set window drag and resize property
- */
- function setProperties(target){
- var state = $.data(target, 'window');
-
- state.window.draggable({
- handle: '>div.panel-header>div.panel-title',
- disabled: state.options.draggable == false,
- onStartDrag: function(e){
- if (state.mask) state.mask.css('z-index', $.fn.window.defaults.zIndex++);
- if (state.shadow) state.shadow.css('z-index', $.fn.window.defaults.zIndex++);
- state.window.css('z-index', $.fn.window.defaults.zIndex++);
-
- if (!state.proxy){
- state.proxy = $('<div class="window-proxy"></div>').insertAfter(state.window);
- }
- state.proxy.css({
- display:'none',
- zIndex: $.fn.window.defaults.zIndex++,
- left: e.data.left,
- top: e.data.top
- });
- state.proxy._outerWidth(state.window._outerWidth());
- state.proxy._outerHeight(state.window._outerHeight());
- setTimeout(function(){
- if (state.proxy) state.proxy.show();
- }, 500);
- },
- onDrag: function(e){
- state.proxy.css({
- display:'block',
- left: e.data.left,
- top: e.data.top
- });
- return false;
- },
- onStopDrag: function(e){
- state.options.left = e.data.left;
- state.options.top = e.data.top;
- $(target).window('move');
- state.proxy.remove();
- state.proxy = null;
- }
- });
-
- state.window.resizable({
- disabled: state.options.resizable == false,
- onStartResize:function(e){
- if (state.pmask){state.pmask.remove();}
- state.pmask = $('<div class="window-proxy-mask"></div>').insertAfter(state.window);
- state.pmask.css({
- zIndex: $.fn.window.defaults.zIndex++,
- left: e.data.left,
- top: e.data.top,
- width: state.window._outerWidth(),
- height: state.window._outerHeight()
- });
- if (state.proxy){state.proxy.remove();}
- state.proxy = $('<div class="window-proxy"></div>').insertAfter(state.window);
- state.proxy.css({
- zIndex: $.fn.window.defaults.zIndex++,
- left: e.data.left,
- top: e.data.top
- });
- state.proxy._outerWidth(e.data.width)._outerHeight(e.data.height);
- },
- onResize: function(e){
- state.proxy.css({
- left: e.data.left,
- top: e.data.top
- });
- state.proxy._outerWidth(e.data.width);
- state.proxy._outerHeight(e.data.height);
- return false;
- },
- onStopResize: function(e){
- $(target).window('resize', e.data);
- state.pmask.remove();
- state.pmask = null;
- state.proxy.remove();
- state.proxy = null;
- }
- });
- }
-
- function getPageArea() {
- if (document.compatMode == 'BackCompat') {
- return {
- width: Math.max(document.body.scrollWidth, document.body.clientWidth),
- height: Math.max(document.body.scrollHeight, document.body.clientHeight)
- }
- } else {
- return {
- width: Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth),
- height: Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight)
- }
- }
- }
-
- // when window resize, reset the width and height of the window's mask
- $(window).resize(function(){
- $('body>div.window-mask').css({
- width: $(window)._outerWidth(),
- height: $(window)._outerHeight()
- });
- setTimeout(function(){
- $('body>div.window-mask').css({
- width: getPageArea().width,
- height: getPageArea().height
- });
- }, 50);
- });
-
- $.fn.window = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.window.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.panel(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'window');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'window', {
- options: $.extend({}, $.fn.window.defaults, $.fn.window.parseOptions(this), options)
- });
- if (!state.options.inline){
- // $(this).appendTo('body');
- document.body.appendChild(this);
- }
- }
- create(this);
- setProperties(this);
- });
- };
-
- $.fn.window.methods = {
- options: function(jq){
- var popts = jq.panel('options');
- var wopts = $.data(jq[0], 'window').options;
- return $.extend(wopts, {
- closed: popts.closed,
- collapsed: popts.collapsed,
- minimized: popts.minimized,
- maximized: popts.maximized
- });
- },
- window: function(jq){
- return $.data(jq[0], 'window').window;
- },
- move: function(jq, param){
- return jq.each(function(){
- moveWindow(this, param);
- });
- },
- hcenter: function(jq){
- return jq.each(function(){
- hcenter(this, true);
- });
- },
- vcenter: function(jq){
- return jq.each(function(){
- vcenter(this, true);
- });
- },
- center: function(jq){
- return jq.each(function(){
- hcenter(this);
- vcenter(this);
- moveWindow(this);
- });
- }
- };
-
- $.fn.window.parseOptions = function(target){
- return $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [
- {draggable:'boolean',resizable:'boolean',shadow:'boolean',modal:'boolean',inline:'boolean'}
- ]));
- };
-
- // Inherited from $.fn.panel.defaults
- $.fn.window.defaults = $.extend({}, $.fn.panel.defaults, {
- zIndex: 9000,
- draggable: true,
- resizable: true,
- shadow: true,
- modal: false,
- inline: false, // true to stay inside its parent, false to go on top of all elements
-
- // window's property which difference from panel
- title: 'New Window',
- collapsible: true,
- minimizable: true,
- maximizable: true,
- closable: true,
- closed: false
- });
- })(jQuery);
- /**
- * dialog - jQuery EasyUI
- *
- * Dependencies:
- * window
- * linkbutton
- *
- */
- (function($){
- /**
- * build the dialog
- */
- function buildDialog(target){
- var opts = $.data(target, 'dialog').options;
- opts.inited = false;
- $(target).window($.extend({}, opts, {
- onResize: function(w,h){
- if (opts.inited){
- setContentSize(this);
- opts.onResize.call(this, w, h);
- }
- }
- }));
- var win = $(target).window('window');
-
- if (opts.toolbar){
- if ($.isArray(opts.toolbar)){
- $(target).siblings('div.dialog-toolbar').remove();
- var toolbar = $('<div class="dialog-toolbar"><table cellspacing="0" cellpadding="0"><tr></tr></table></div>').appendTo(win);
- var tr = toolbar.find('tr');
- for(var i=0; i<opts.toolbar.length; i++){
- var btn = opts.toolbar[i];
- if (btn == '-'){
- $('<td><div class="dialog-tool-separator"></div></td>').appendTo(tr);
- } else {
- var td = $('<td></td>').appendTo(tr);
- var tool = $('<a href="javascript:void(0)"></a>').appendTo(td);
- tool[0].onclick = eval(btn.handler || function(){});
- tool.linkbutton($.extend({}, btn, {
- plain:true
- }));
- }
- }
- } else {
- $(opts.toolbar).addClass('dialog-toolbar').appendTo(win);
- $(opts.toolbar).show();
- }
- } else {
- $(target).siblings('div.dialog-toolbar').remove();
- }
-
- if (opts.buttons){
- if ($.isArray(opts.buttons)){
- $(target).siblings('div.dialog-button').remove();
- var buttons = $('<div class="dialog-button"></div>').appendTo(win);
- for(var i=0; i<opts.buttons.length; i++){
- var p = opts.buttons[i];
- var button = $('<a href="javascript:void(0)"></a>').appendTo(buttons);
- if (p.handler) button[0].onclick = p.handler;
- button.linkbutton(p);
- }
- } else {
- $(opts.buttons).addClass('dialog-button').appendTo(win);
- $(opts.buttons).show();
- }
- } else {
- $(target).siblings('div.dialog-button').remove();
- }
-
- opts.inited = true;
- win.show();
- $(target).window('resize');
- if (opts.closed){
- win.hide();
- }
- }
-
- function setContentSize(target, param){
- var t = $(target);
- var opts = t.dialog('options');
- var noheader = opts.noheader;
- var tb = t.siblings('.dialog-toolbar');
- var bb = t.siblings('.dialog-button');
-
- tb.insertBefore(target).css({
- position:'relative',
- borderTopWidth: (noheader?1:0),
- top: (noheader?tb.length:0)
- });
- bb.insertAfter(target).css({
- position:'relative',
- top: -1
- });
-
- if (!isNaN(parseInt(opts.height))){
- t._outerHeight(t._outerHeight()-tb._outerHeight()-bb._outerHeight());
- }
-
- tb.add(bb)._outerWidth(t._outerWidth());
-
- var shadow = $.data(target, 'window').shadow;
- if (shadow){
- var cc = t.panel('panel');
- shadow.css({
- width: cc._outerWidth(),
- height: cc._outerHeight()
- });
- }
- }
-
- $.fn.dialog = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.dialog.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.window(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'dialog');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'dialog', {
- options: $.extend({}, $.fn.dialog.defaults, $.fn.dialog.parseOptions(this), options)
- });
- }
- buildDialog(this);
- });
- };
-
- $.fn.dialog.methods = {
- options: function(jq){
- var dopts = $.data(jq[0], 'dialog').options;
- var popts = jq.panel('options');
- $.extend(dopts, {
- width: popts.width,
- height: popts.height,
- left: popts.left,
- top: popts.top,
- closed: popts.closed,
- collapsed: popts.collapsed,
- minimized: popts.minimized,
- maximized: popts.maximized
- });
- return dopts;
- },
- dialog: function(jq){
- return jq.window('window');
- }
- };
-
- $.fn.dialog.parseOptions = function(target){
- return $.extend({}, $.fn.window.parseOptions(target), $.parser.parseOptions(target,['toolbar','buttons']));
- };
-
- // Inherited from $.fn.window.defaults.
- $.fn.dialog.defaults = $.extend({}, $.fn.window.defaults, {
- title: 'New Dialog',
- collapsible: false,
- minimizable: false,
- maximizable: false,
- resizable: false,
-
- toolbar:null,
- buttons:null
- });
- })(jQuery);
- /**
- * messager - jQuery EasyUI
- *
- * Dependencies:
- * linkbutton
- * window
- * progressbar
- */
- (function($){
-
- /**
- * show window with animate, after sometime close the window
- */
- function show(el, type, speed, timeout){
- var win = $(el).window('window');
- if (!win) return;
-
- switch(type){
- case null:
- win.show();
- break;
- case 'slide':
- win.slideDown(speed);
- break;
- case 'fade':
- win.fadeIn(speed);
- break;
- case 'show':
- win.show(speed);
- break;
- }
-
- var timer = null;
- if (timeout > 0){
- timer = setTimeout(function(){
- hide(el, type, speed);
- }, timeout);
- }
- win.hover(
- function(){
- if (timer){
- clearTimeout(timer);
- }
- },
- function(){
- if (timeout > 0){
- timer = setTimeout(function(){
- hide(el, type, speed);
- }, timeout);
- }
- }
- )
-
- }
-
- /**
- * hide window with animate
- */
- function hide(el, type, speed){
- if (el.locked == true) return;
- el.locked = true;
-
- var win = $(el).window('window');
- if (!win) return;
-
- switch(type){
- case null:
- win.hide();
- break;
- case 'slide':
- win.slideUp(speed);
- break;
- case 'fade':
- win.fadeOut(speed);
- break;
- case 'show':
- win.hide(speed);
- break;
- }
-
- setTimeout(function(){
- $(el).window('destroy');
- }, speed);
- }
-
- /**
- * create the message window
- */
- function createWindow(options){
- var opts = $.extend({}, $.fn.window.defaults, {
- collapsible: false,
- minimizable: false,
- maximizable: false,
- shadow: false,
- draggable: false,
- resizable: false,
- closed: true,
- // set the message window to the right bottom position
- style:{
- left: '',
- top: '',
- right: 0,
- zIndex: $.fn.window.defaults.zIndex++,
- bottom: -document.body.scrollTop-document.documentElement.scrollTop
- },
- onBeforeOpen: function(){
- show(this, opts.showType, opts.showSpeed, opts.timeout);
- return false;
- },
- onBeforeClose: function(){
- hide(this, opts.showType, opts.showSpeed);
- return false;
- }
- }, {
- title: '',
- width: 250,
- height: 100,
- showType: 'slide',
- showSpeed: 600,
- msg: '',
- timeout: 4000
- }, options);
- opts.style.zIndex = $.fn.window.defaults.zIndex++;
-
- var win = $('<div class="messager-body"></div>').html(opts.msg).appendTo('body');
- win.window(opts);
- win.window('window').css(opts.style);
- win.window('open');
- return win;
- }
-
- /**
- * create a dialog, when dialog is closed destroy it
- */
- function createDialog(title, content, buttons){
- var win = $('<div class="messager-body"></div>').appendTo('body');
- win.append(content);
- if (buttons){
- var tb = $('<div class="messager-button"></div>').appendTo(win);
- for(var label in buttons){
- $('<a></a>').attr('href', 'javascript:void(0)').text(label)
- .css('margin-left', 10)
- .bind('click', eval(buttons[label]))
- .appendTo(tb).linkbutton();
- }
- }
- win.window({
- title: title,
- noheader: (title?false:true),
- width: 300,
- height: 'auto',
- modal: true,
- collapsible: false,
- minimizable: false,
- maximizable: false,
- resizable: false,
- onClose: function(){
- setTimeout(function(){
- win.window('destroy');
- }, 100);
- }
- });
- win.window('window').addClass('messager-window');
- win.children('div.messager-button').children('a:first').focus();
- return win;
- }
-
- $.messager = {
- show: function(options){
- return createWindow(options);
- },
-
- alert: function(title, msg, icon, fn) {
- var content = '<div>' + msg + '</div>';
- switch(icon) {
- case 'error':
- content = '<div class="messager-icon messager-error"></div>' + content;
- break;
- case 'info':
- content = '<div class="messager-icon messager-info"></div>' + content;
- break;
- case 'question':
- content = '<div class="messager-icon messager-question"></div>' + content;
- break;
- case 'warning':
- content = '<div class="messager-icon messager-warning"></div>' + content;
- break;
- }
- content += '<div style="clear:both;"/>';
-
- var buttons = {};
- buttons[$.messager.defaults.ok] = function(){
- win.window('close');
- if (fn){
- fn();
- return false;
- }
- };
- var win = createDialog(title,content,buttons);
- return win;
- },
-
- confirm: function(title, msg, fn) {
- var content = '<div class="messager-icon messager-question"></div>'
- + '<div>' + msg + '</div>'
- + '<div style="clear:both;"/>';
- var buttons = {};
- buttons[$.messager.defaults.ok] = function(){
- win.window('close');
- if (fn){
- fn(true);
- return false;
- }
- };
- buttons[$.messager.defaults.cancel] = function(){
- win.window('close');
- if (fn){
- fn(false);
- return false;
- }
- };
- var win = createDialog(title,content,buttons);
- return win;
- },
-
- prompt: function(title, msg, fn) {
- var content = '<div class="messager-icon messager-question"></div>'
- + '<div>' + msg + '</div>'
- + '<br/>'
- + '<div style="clear:both;"/>'
- + '<div><input class="messager-input" type="text"/></div>';
- var buttons = {};
- buttons[$.messager.defaults.ok] = function(){
- win.window('close');
- if (fn){
- fn($('.messager-input', win).val());
- return false;
- }
- };
- buttons[$.messager.defaults.cancel] = function(){
- win.window('close');
- if (fn){
- fn();
- return false;
- }
- };
- var win = createDialog(title,content,buttons);
- win.children('input.messager-input').focus();
- return win;
- },
-
- progress: function(options){
- var methods = {
- bar: function(){ // get the progress bar object
- return $('body>div.messager-window').find('div.messager-p-bar');
- },
- close: function(){ // close the progress window
- var win = $('body>div.messager-window>div.messager-body:has(div.messager-progress)');
- if (win.length){
- win.window('close');
- }
- }
- };
-
- if (typeof options == 'string'){
- var method = methods[options];
- return method();
- }
-
- var opts = $.extend({
- title: '',
- msg: '', // The message box body text
- text: undefined, // The text to display in the progress bar
- interval: 300 // The length of time in milliseconds between each progress update
- }, options||{});
-
- var content = '<div class="messager-progress"><div class="messager-p-msg"></div><div class="messager-p-bar"></div></div>';
- var win = createDialog(opts.title, content, null);
- win.find('div.messager-p-msg').html(opts.msg);
- var bar = win.find('div.messager-p-bar');
- bar.progressbar({
- text: opts.text
- });
- win.window({
- closable:false,
- onClose:function(){
- if (this.timer){
- clearInterval(this.timer);
- }
- $(this).window('destroy');
- }
- });
-
- if (opts.interval){
- win[0].timer = setInterval(function(){
- var v = bar.progressbar('getValue');
- v += 10;
- if (v > 100) v = 0;
- bar.progressbar('setValue', v);
- }, opts.interval);
- }
- return win;
- }
- };
-
- $.messager.defaults = {
- ok: 'Ok',
- cancel: 'Cancel'
- };
-
- })(jQuery);
- /**
- * accordion - jQuery EasyUI
- *
- * Dependencies:
- * panel
- *
- */
- (function($){
-
- function setSize(container, param){
- var state = $.data(container, 'accordion');
- var opts = state.options;
- var panels = state.panels;
- var cc = $(container);
-
- if (param){
- $.extend(opts, {
- width: param.width,
- height: param.height
- });
- }
- cc._size(opts);
- var headerHeight = 0;
- var bodyHeight = 'auto';
- var headers = cc.find('>div.panel>div.accordion-header');
- if (headers.length){
- headerHeight = $(headers[0]).css('height', '')._outerHeight();
- }
- if (!isNaN(parseInt(opts.height))){
- bodyHeight = cc.height() - headerHeight*headers.length;
- }
-
- _resize(true, bodyHeight - _resize(false) + 1);
-
- function _resize(collapsible, height){
- var totalHeight = 0;
- for(var i=0; i<panels.length; i++){
- var p = panels[i];
- var h = p.panel('header')._outerHeight(headerHeight);
- if (p.panel('options').collapsible == collapsible){
- var pheight = isNaN(height) ? undefined : (height+headerHeight*h.length);
- p.panel('resize', {
- width: cc.width(),
- height: (collapsible ? pheight : undefined)
- });
- totalHeight += p.panel('panel').outerHeight()-headerHeight*h.length;
- }
- }
- return totalHeight;
- }
- }
-
- /**
- * find a panel by specified property, return the panel object or panel index.
- */
- function findBy(container, property, value, all){
- var panels = $.data(container, 'accordion').panels;
- var pp = [];
- for(var i=0; i<panels.length; i++){
- var p = panels[i];
- if (property){
- if (p.panel('options')[property] == value){
- pp.push(p);
- }
- } else {
- if (p[0] == $(value)[0]){
- return i;
- }
- }
- }
- if (property){
- return all ? pp : (pp.length ? pp[0] : null);
- } else {
- return -1;
- }
- }
-
- function getSelections(container){
- return findBy(container, 'collapsed', false, true);
- }
-
- function getSelected(container){
- var pp = getSelections(container);
- return pp.length ? pp[0] : null;
- }
-
- /**
- * get panel index, start with 0
- */
- function getPanelIndex(container, panel){
- return findBy(container, null, panel);
- }
-
- /**
- * get the specified panel.
- */
- function getPanel(container, which){
- var panels = $.data(container, 'accordion').panels;
- if (typeof which == 'number'){
- if (which < 0 || which >= panels.length){
- return null;
- } else {
- return panels[which];
- }
- }
- return findBy(container, 'title', which);
- }
-
- function setProperties(container){
- var opts = $.data(container, 'accordion').options;
- var cc = $(container);
- if (opts.border){
- cc.removeClass('accordion-noborder');
- } else {
- cc.addClass('accordion-noborder');
- }
- }
-
- function init(container){
- var state = $.data(container, 'accordion');
- var cc = $(container);
- cc.addClass('accordion');
-
- state.panels = [];
- cc.children('div').each(function(){
- var opts = $.extend({}, $.parser.parseOptions(this), {
- selected: ($(this).attr('selected') ? true : undefined)
- });
- var pp = $(this);
- state.panels.push(pp);
- createPanel(container, pp, opts);
- });
-
- cc.bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(container);
- }
- return false;
- });
- }
-
- function createPanel(container, pp, options){
- var opts = $.data(container, 'accordion').options;
- pp.panel($.extend({}, {
- collapsible: true,
- minimizable: false,
- maximizable: false,
- closable: false,
- doSize: false,
- collapsed: true,
- headerCls: 'accordion-header',
- bodyCls: 'accordion-body'
- }, options, {
- onBeforeExpand: function(){
- if (options.onBeforeExpand){
- if (options.onBeforeExpand.call(this) == false){return false}
- }
- if (!opts.multiple){
- // get all selected panel
- var all = $.grep(getSelections(container), function(p){
- return p.panel('options').collapsible;
- });
- for(var i=0; i<all.length; i++){
- unselect(container, getPanelIndex(container, all[i]));
- }
- }
- var header = $(this).panel('header');
- header.addClass('accordion-header-selected');
- header.find('.accordion-collapse').removeClass('accordion-expand');
- },
- onExpand: function(){
- if (options.onExpand){options.onExpand.call(this)}
- opts.onSelect.call(container, $(this).panel('options').title, getPanelIndex(container, this));
- },
- onBeforeCollapse: function(){
- if (options.onBeforeCollapse){
- if (options.onBeforeCollapse.call(this) == false){return false}
- }
- var header = $(this).panel('header');
- header.removeClass('accordion-header-selected');
- header.find('.accordion-collapse').addClass('accordion-expand');
- },
- onCollapse: function(){
- if (options.onCollapse){options.onCollapse.call(this)}
- opts.onUnselect.call(container, $(this).panel('options').title, getPanelIndex(container, this));
- }
- }));
-
- var header = pp.panel('header');
- var tool = header.children('div.panel-tool');
- tool.children('a.panel-tool-collapse').hide(); // hide the old collapse button
- var t = $('<a href="javascript:void(0)"></a>').addClass('accordion-collapse accordion-expand').appendTo(tool);
- t.bind('click', function(){
- var index = getPanelIndex(container, pp);
- if (pp.panel('options').collapsed){
- select(container, index);
- } else {
- unselect(container, index);
- }
- return false;
- });
- pp.panel('options').collapsible ? t.show() : t.hide();
-
- header.click(function(){
- $(this).find('a.accordion-collapse:visible').triggerHandler('click');
- return false;
- });
- }
-
- /**
- * select and set the specified panel active
- */
- function select(container, which){
- var p = getPanel(container, which);
- if (!p){return}
- stopAnimate(container);
- var opts = $.data(container, 'accordion').options;
- p.panel('expand', opts.animate);
- }
-
- function unselect(container, which){
- var p = getPanel(container, which);
- if (!p){return}
- stopAnimate(container);
- var opts = $.data(container, 'accordion').options;
- p.panel('collapse', opts.animate);
- }
-
- function doFirstSelect(container){
- var opts = $.data(container, 'accordion').options;
- var p = findBy(container, 'selected', true);
- if (p){
- _select(getPanelIndex(container, p));
- } else {
- _select(opts.selected);
- }
-
- function _select(index){
- var animate = opts.animate;
- opts.animate = false;
- select(container, index);
- opts.animate = animate;
- }
- }
-
- /**
- * stop the animation of all panels
- */
- function stopAnimate(container){
- var panels = $.data(container, 'accordion').panels;
- for(var i=0; i<panels.length; i++){
- panels[i].stop(true,true);
- }
- }
-
- function add(container, options){
- var state = $.data(container, 'accordion');
- var opts = state.options;
- var panels = state.panels;
- if (options.selected == undefined) options.selected = true;
- stopAnimate(container);
-
- var pp = $('<div></div>').appendTo(container);
- panels.push(pp);
- createPanel(container, pp, options);
- setSize(container);
-
- opts.onAdd.call(container, options.title, panels.length-1);
-
- if (options.selected){
- select(container, panels.length-1);
- }
- }
-
- function remove(container, which){
- var state = $.data(container, 'accordion');
- var opts = state.options;
- var panels = state.panels;
-
- stopAnimate(container);
-
- var panel = getPanel(container, which);
- var title = panel.panel('options').title;
- var index = getPanelIndex(container, panel);
-
- if (!panel){return}
- if (opts.onBeforeRemove.call(container, title, index) == false){return}
-
- panels.splice(index, 1);
- panel.panel('destroy');
- if (panels.length){
- setSize(container);
- var curr = getSelected(container);
- if (!curr){
- select(container, 0);
- }
- }
-
- opts.onRemove.call(container, title, index);
- }
-
- $.fn.accordion = function(options, param){
- if (typeof options == 'string'){
- return $.fn.accordion.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'accordion');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'accordion', {
- options: $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), options),
- accordion: $(this).addClass('accordion'),
- panels: []
- });
- init(this);
- }
-
- setProperties(this);
- setSize(this);
- doFirstSelect(this);
- });
- };
-
- $.fn.accordion.methods = {
- options: function(jq){
- return $.data(jq[0], 'accordion').options;
- },
- panels: function(jq){
- return $.data(jq[0], 'accordion').panels;
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- getSelections: function(jq){
- return getSelections(jq[0]);
- },
- getSelected: function(jq){
- return getSelected(jq[0]);
- },
- getPanel: function(jq, which){
- return getPanel(jq[0], which);
- },
- getPanelIndex: function(jq, panel){
- return getPanelIndex(jq[0], panel);
- },
- select: function(jq, which){
- return jq.each(function(){
- select(this, which);
- });
- },
- unselect: function(jq, which){
- return jq.each(function(){
- unselect(this, which);
- });
- },
- add: function(jq, options){
- return jq.each(function(){
- add(this, options);
- });
- },
- remove: function(jq, which){
- return jq.each(function(){
- remove(this, which);
- });
- }
- };
-
- $.fn.accordion.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [
- 'width','height',
- {fit:'boolean',border:'boolean',animate:'boolean',multiple:'boolean',selected:'number'}
- ]));
- };
-
- $.fn.accordion.defaults = {
- width: 'auto',
- height: 'auto',
- fit: false,
- border: true,
- animate: true,
- multiple: false,
- selected: 0,
-
- onSelect: function(title, index){},
- onUnselect: function(title, index){},
- onAdd: function(title, index){},
- onBeforeRemove: function(title, index){},
- onRemove: function(title, index){}
- };
- })(jQuery);
- /**
- * tabs - jQuery EasyUI
- *
- * Dependencies:
- * panel
- * linkbutton
- *
- */
- (function($){
-
- /**
- * set the tabs scrollers to show or not,
- * dependent on the tabs count and width
- */
- function setScrollers(container) {
- var opts = $.data(container, 'tabs').options;
- if (opts.tabPosition == 'left' || opts.tabPosition == 'right' || !opts.showHeader){return}
-
- var header = $(container).children('div.tabs-header');
- var tool = header.children('div.tabs-tool');
- var sLeft = header.children('div.tabs-scroller-left');
- var sRight = header.children('div.tabs-scroller-right');
- var wrap = header.children('div.tabs-wrap');
-
- // set the tool height
- var tHeight = header.outerHeight();
- if (opts.plain){
- tHeight -= tHeight - header.height();
- }
- tool._outerHeight(tHeight);
-
- var tabsWidth = 0;
- $('ul.tabs li', header).each(function(){
- tabsWidth += $(this).outerWidth(true);
- });
- var cWidth = header.width() - tool._outerWidth();
-
- if (tabsWidth > cWidth) {
- sLeft.add(sRight).show()._outerHeight(tHeight);
- if (opts.toolPosition == 'left'){
- tool.css({
- left: sLeft.outerWidth(),
- right: ''
- });
- wrap.css({
- marginLeft: sLeft.outerWidth() + tool._outerWidth(),
- marginRight: sRight._outerWidth(),
- width: cWidth - sLeft.outerWidth() - sRight.outerWidth()
- });
- } else {
- tool.css({
- left: '',
- right: sRight.outerWidth()
- });
- wrap.css({
- marginLeft: sLeft.outerWidth(),
- marginRight: sRight.outerWidth() + tool._outerWidth(),
- width: cWidth - sLeft.outerWidth() - sRight.outerWidth()
- });
- }
- } else {
- sLeft.add(sRight).hide();
- if (opts.toolPosition == 'left'){
- tool.css({
- left: 0,
- right: ''
- });
- wrap.css({
- marginLeft: tool._outerWidth(),
- marginRight: 0,
- width: cWidth
- });
- } else {
- tool.css({
- left: '',
- right: 0
- });
- wrap.css({
- marginLeft: 0,
- marginRight: tool._outerWidth(),
- width: cWidth
- });
- }
- }
- }
-
- function addTools(container){
- var opts = $.data(container, 'tabs').options;
- var header = $(container).children('div.tabs-header');
- if (opts.tools) {
- if (typeof opts.tools == 'string'){
- $(opts.tools).addClass('tabs-tool').appendTo(header);
- $(opts.tools).show();
- } else {
- header.children('div.tabs-tool').remove();
- var tools = $('<div class="tabs-tool"><table cellspacing="0" cellpadding="0" style="height:100%"><tr></tr></table></div>').appendTo(header);
- var tr = tools.find('tr');
- for(var i=0; i<opts.tools.length; i++){
- var td = $('<td></td>').appendTo(tr);
- var tool = $('<a href="javascript:void(0);"></a>').appendTo(td);
- tool[0].onclick = eval(opts.tools[i].handler || function(){});
- tool.linkbutton($.extend({}, opts.tools[i], {
- plain: true
- }));
- }
- }
- } else {
- header.children('div.tabs-tool').remove();
- }
- }
-
- function setSize(container, param) {
- var state = $.data(container, 'tabs');
- var opts = state.options;
- var cc = $(container);
-
- if (param){
- $.extend(opts, {
- width: param.width,
- height: param.height
- });
- }
- cc._size(opts);
-
- var header = cc.children('div.tabs-header');
- var panels = cc.children('div.tabs-panels');
- var wrap = header.find('div.tabs-wrap');
- var ul = wrap.find('.tabs');
-
- for(var i=0; i<state.tabs.length; i++){
- var p_opts = state.tabs[i].panel('options');
- var p_t = p_opts.tab.find('a.tabs-inner');
- var width = parseInt(p_opts.tabWidth || opts.tabWidth) || undefined;
- if (width){
- p_t._outerWidth(width);
- } else {
- p_t.css('width', '');
- }
- p_t._outerHeight(opts.tabHeight);
- p_t.css('lineHeight', p_t.height()+'px');
- }
- if (opts.tabPosition == 'left' || opts.tabPosition == 'right'){
- header._outerWidth(opts.showHeader ? opts.headerWidth : 0);
- // header._outerWidth(opts.headerWidth);
- panels._outerWidth(cc.width() - header.outerWidth());
- header.add(panels)._outerHeight(opts.height);
- wrap._outerWidth(header.width());
- ul._outerWidth(wrap.width()).css('height','');
- } else {
- var lrt = header.children('div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool');
- header._outerWidth(opts.width).css('height','');
- if (opts.showHeader){
- header.css('background-color','');
- wrap.css('height','');
- lrt.show();
- } else {
- header.css('background-color','transparent');
- header._outerHeight(0);
- wrap._outerHeight(0);
- lrt.hide();
- }
- ul._outerHeight(opts.tabHeight).css('width','');
-
- setScrollers(container);
-
- panels._size('height', isNaN(opts.height) ? '' : (opts.height-header.outerHeight()));
- panels._size('width', isNaN(opts.width) ? '' : opts.width);
- }
- }
-
- /**
- * set selected tab panel size
- */
- function setSelectedSize(container){
- var opts = $.data(container, 'tabs').options;
- var tab = getSelectedTab(container);
- if (tab){
- var panels = $(container).children('div.tabs-panels');
- var width = opts.width=='auto' ? 'auto' : panels.width();
- var height = opts.height=='auto' ? 'auto' : panels.height();
- tab.panel('resize', {
- width: width,
- height: height
- });
- }
- }
-
- /**
- * wrap the tabs header and body
- */
- function wrapTabs(container) {
- var tabs = $.data(container, 'tabs').tabs;
- var cc = $(container);
- cc.addClass('tabs-container');
- var pp = $('<div class="tabs-panels"></div>').insertBefore(cc);
- cc.children('div').each(function(){
- pp[0].appendChild(this);
- });
- cc[0].appendChild(pp[0]);
- // cc.wrapInner('<div class="tabs-panels"/>');
- $('<div class="tabs-header">'
- + '<div class="tabs-scroller-left"></div>'
- + '<div class="tabs-scroller-right"></div>'
- + '<div class="tabs-wrap">'
- + '<ul class="tabs"></ul>'
- + '</div>'
- + '</div>').prependTo(container);
-
- cc.children('div.tabs-panels').children('div').each(function(i){
- var opts = $.extend({}, $.parser.parseOptions(this), {
- selected: ($(this).attr('selected') ? true : undefined)
- });
- var pp = $(this);
- tabs.push(pp);
- createTab(container, pp, opts);
- });
-
- cc.children('div.tabs-header').find('.tabs-scroller-left, .tabs-scroller-right').hover(
- function(){$(this).addClass('tabs-scroller-over');},
- function(){$(this).removeClass('tabs-scroller-over');}
- );
- cc.bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(container);
- setSelectedSize(container);
- }
- return false;
- });
- }
-
- function bindEvents(container){
- var state = $.data(container, 'tabs')
- var opts = state.options;
- $(container).children('div.tabs-header').unbind().bind('click', function(e){
- if ($(e.target).hasClass('tabs-scroller-left')){
- $(container).tabs('scrollBy', -opts.scrollIncrement);
- } else if ($(e.target).hasClass('tabs-scroller-right')){
- $(container).tabs('scrollBy', opts.scrollIncrement);
- } else {
- var li = $(e.target).closest('li');
- if (li.hasClass('tabs-disabled')){return;}
- var a = $(e.target).closest('a.tabs-close');
- if (a.length){
- closeTab(container, getLiIndex(li));
- } else if (li.length){
- // selectTab(container, getLiIndex(li));
- var index = getLiIndex(li);
- var popts = state.tabs[index].panel('options');
- if (popts.collapsible){
- popts.closed ? selectTab(container, index) : unselectTab(container, index);
- } else {
- selectTab(container, index);
- }
- }
- }
- }).bind('contextmenu', function(e){
- var li = $(e.target).closest('li');
- if (li.hasClass('tabs-disabled')){return;}
- if (li.length){
- opts.onContextMenu.call(container, e, li.find('span.tabs-title').html(), getLiIndex(li));
- }
- });
-
- function getLiIndex(li){
- var index = 0;
- li.parent().children('li').each(function(i){
- if (li[0] == this){
- index = i;
- return false;
- }
- });
- return index;
- }
- }
-
- function setProperties(container){
- var opts = $.data(container, 'tabs').options;
- var header = $(container).children('div.tabs-header');
- var panels = $(container).children('div.tabs-panels');
-
- header.removeClass('tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right');
- panels.removeClass('tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right');
- if (opts.tabPosition == 'top'){
- header.insertBefore(panels);
- } else if (opts.tabPosition == 'bottom'){
- header.insertAfter(panels);
- header.addClass('tabs-header-bottom');
- panels.addClass('tabs-panels-top');
- } else if (opts.tabPosition == 'left'){
- header.addClass('tabs-header-left');
- panels.addClass('tabs-panels-right');
- } else if (opts.tabPosition == 'right'){
- header.addClass('tabs-header-right');
- panels.addClass('tabs-panels-left');
- }
-
- if (opts.plain == true) {
- header.addClass('tabs-header-plain');
- } else {
- header.removeClass('tabs-header-plain');
- }
- if (opts.border == true){
- header.removeClass('tabs-header-noborder');
- panels.removeClass('tabs-panels-noborder');
- } else {
- header.addClass('tabs-header-noborder');
- panels.addClass('tabs-panels-noborder');
- }
- }
-
- function createTab(container, pp, options) {
- var state = $.data(container, 'tabs');
- options = options || {};
-
- // create panel
- pp.panel($.extend({}, options, {
- border: false,
- noheader: true,
- closed: true,
- doSize: false,
- iconCls: (options.icon ? options.icon : undefined),
- onLoad: function(){
- if (options.onLoad){
- options.onLoad.call(this, arguments);
- }
- state.options.onLoad.call(container, $(this));
- }
- }));
-
- var opts = pp.panel('options');
- var tabs = $(container).children('div.tabs-header').find('ul.tabs');
-
- opts.tab = $('<li></li>').appendTo(tabs); // set the tab object in panel options
- opts.tab.append(
- '<a href="javascript:void(0)" class="tabs-inner">' +
- '<span class="tabs-title"></span>' +
- '<span class="tabs-icon"></span>' +
- '</a>'
- );
-
- // only update the tab header
- $(container).tabs('update', {
- tab: pp,
- options: opts,
- type: 'header'
- });
- }
-
- function addTab(container, options) {
- var state = $.data(container, 'tabs');
- var opts = state.options;
- var tabs = state.tabs;
- if (options.selected == undefined) options.selected = true;
-
- var pp = $('<div></div>').appendTo($(container).children('div.tabs-panels'));
- tabs.push(pp);
- createTab(container, pp, options);
-
- opts.onAdd.call(container, options.title, tabs.length-1);
-
- setSize(container);
- if (options.selected){
- selectTab(container, tabs.length-1); // select the added tab panel
- }
- }
-
- /**
- * update tab panel, param has following properties:
- * tab: the tab panel to be updated
- * options: the tab panel options
- * type: the update type, possible values are: 'header','body','all'
- */
- function updateTab(container, param){
- param.type = param.type || 'all';
- var selectHis = $.data(container, 'tabs').selectHis;
- var pp = param.tab; // the tab panel
- var oldTitle = pp.panel('options').title;
-
- if (param.type == 'all' || param == 'body'){
- pp.panel($.extend({}, param.options, {
- iconCls: (param.options.icon ? param.options.icon : undefined)
- }));
- }
- if (param.type == 'all' || param.type == 'header'){
- var opts = pp.panel('options'); // get the tab panel options
- var tab = opts.tab;
-
- var s_title = tab.find('span.tabs-title');
- var s_icon = tab.find('span.tabs-icon');
- s_title.html(opts.title);
- s_icon.attr('class', 'tabs-icon');
-
- tab.find('a.tabs-close').remove();
- if (opts.closable){
- s_title.addClass('tabs-closable');
- $('<a href="javascript:void(0)" class="tabs-close"></a>').appendTo(tab);
- } else{
- s_title.removeClass('tabs-closable');
- }
- if (opts.iconCls){
- s_title.addClass('tabs-with-icon');
- s_icon.addClass(opts.iconCls);
- } else {
- s_title.removeClass('tabs-with-icon');
- }
-
- if (oldTitle != opts.title){
- for(var i=0; i<selectHis.length; i++){
- if (selectHis[i] == oldTitle){
- selectHis[i] = opts.title;
- }
- }
- }
-
- tab.find('span.tabs-p-tool').remove();
- if (opts.tools){
- var p_tool = $('<span class="tabs-p-tool"></span>').insertAfter(tab.find('a.tabs-inner'));
- if ($.isArray(opts.tools)){
- for(var i=0; i<opts.tools.length; i++){
- var t = $('<a href="javascript:void(0)"></a>').appendTo(p_tool);
- t.addClass(opts.tools[i].iconCls);
- if (opts.tools[i].handler){
- t.bind('click', {handler:opts.tools[i].handler}, function(e){
- if ($(this).parents('li').hasClass('tabs-disabled')){return;}
- e.data.handler.call(this);
- });
- }
- }
- } else {
- $(opts.tools).children().appendTo(p_tool);
- }
- var pr = p_tool.children().length * 12;
- if (opts.closable) {
- pr += 8;
- } else {
- pr -= 3;
- p_tool.css('right','5px');
- }
- s_title.css('padding-right', pr+'px');
- }
- }
-
- setSize(container);
-
- $.data(container, 'tabs').options.onUpdate.call(container, opts.title, getTabIndex(container, pp));
- }
-
- /**
- * close a tab with specified index or title
- */
- function closeTab(container, which) {
- var opts = $.data(container, 'tabs').options;
- var tabs = $.data(container, 'tabs').tabs;
- var selectHis = $.data(container, 'tabs').selectHis;
-
- if (!exists(container, which)) return;
-
- var tab = getTab(container, which);
- var title = tab.panel('options').title;
- var index = getTabIndex(container, tab);
-
- if (opts.onBeforeClose.call(container, title, index) == false) return;
-
- var tab = getTab(container, which, true);
- tab.panel('options').tab.remove();
- tab.panel('destroy');
-
- opts.onClose.call(container, title, index);
-
- // setScrollers(container);
- setSize(container);
-
- // remove the select history item
- for(var i=0; i<selectHis.length; i++){
- if (selectHis[i] == title){
- selectHis.splice(i, 1);
- i --;
- }
- }
-
- // select the nearest tab panel
- var hisTitle = selectHis.pop();
- if (hisTitle){
- selectTab(container, hisTitle);
- } else if (tabs.length){
- selectTab(container, 0);
- }
- }
-
- /**
- * get the specified tab panel
- */
- function getTab(container, which, removeit){
- var tabs = $.data(container, 'tabs').tabs;
- if (typeof which == 'number'){
- if (which < 0 || which >= tabs.length){
- return null;
- } else {
- var tab = tabs[which];
- if (removeit) {
- tabs.splice(which, 1);
- }
- return tab;
- }
- }
- for(var i=0; i<tabs.length; i++){
- var tab = tabs[i];
- if (tab.panel('options').title == which){
- if (removeit){
- tabs.splice(i, 1);
- }
- return tab;
- }
- }
- return null;
- }
-
- function getTabIndex(container, tab){
- var tabs = $.data(container, 'tabs').tabs;
- for(var i=0; i<tabs.length; i++){
- if (tabs[i][0] == $(tab)[0]){
- return i;
- }
- }
- return -1;
- }
-
- function getSelectedTab(container){
- var tabs = $.data(container, 'tabs').tabs;
- for(var i=0; i<tabs.length; i++){
- var tab = tabs[i];
- if (tab.panel('options').closed == false){
- return tab;
- }
- }
- return null;
- }
-
- /**
- * do first select action, if no tab is setted the first tab will be selected.
- */
- function doFirstSelect(container){
- var state = $.data(container, 'tabs')
- var tabs = state.tabs;
- for(var i=0; i<tabs.length; i++){
- if (tabs[i].panel('options').selected){
- selectTab(container, i);
- return;
- }
- }
- // if (tabs.length){
- // selectTab(container, 0);
- // }
- selectTab(container, state.options.selected);
- }
-
- function selectTab(container, which){
- var state = $.data(container, 'tabs');
- var opts = state.options;
- var tabs = state.tabs;
- var selectHis = state.selectHis;
-
- if (tabs.length == 0) {return;}
-
- var panel = getTab(container, which); // get the panel to be activated
- if (!panel){return}
-
- var selected = getSelectedTab(container);
- if (selected){
- if (panel[0] == selected[0]){
- setSelectedSize(container);
- return;
- }
- unselectTab(container, getTabIndex(container, selected));
- if (!selected.panel('options').closed){return}
- }
-
- panel.panel('open');
- var title = panel.panel('options').title; // the panel title
- selectHis.push(title); // push select history
-
- var tab = panel.panel('options').tab; // get the tab object
- tab.addClass('tabs-selected');
-
- // scroll the tab to center position if required.
- var wrap = $(container).find('>div.tabs-header>div.tabs-wrap');
- var left = tab.position().left;
- var right = left + tab.outerWidth();
- if (left < 0 || right > wrap.width()){
- var deltaX = left - (wrap.width()-tab.width()) / 2;
- $(container).tabs('scrollBy', deltaX);
- } else {
- $(container).tabs('scrollBy', 0);
- }
-
- setSelectedSize(container);
-
- opts.onSelect.call(container, title, getTabIndex(container, panel));
- }
-
- function unselectTab(container, which){
- var state = $.data(container, 'tabs');
- var p = getTab(container, which);
- if (p){
- var opts = p.panel('options');
- if (!opts.closed){
- p.panel('close');
- if (opts.closed){
- opts.tab.removeClass('tabs-selected');
- state.options.onUnselect.call(container, opts.title, getTabIndex(container, p));
- }
- }
- }
- }
-
- function exists(container, which){
- return getTab(container, which) != null;
- }
-
- function showHeader(container, visible){
- var opts = $.data(container, 'tabs').options;
- opts.showHeader = visible;
- $(container).tabs('resize');
- }
-
-
- $.fn.tabs = function(options, param){
- if (typeof options == 'string') {
- return $.fn.tabs.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'tabs');
- if (state) {
- $.extend(state.options, options);
- } else {
- $.data(this, 'tabs', {
- options: $.extend({},$.fn.tabs.defaults, $.fn.tabs.parseOptions(this), options),
- tabs: [],
- selectHis: []
- });
- wrapTabs(this);
- }
-
- addTools(this);
- setProperties(this);
- setSize(this);
- bindEvents(this);
-
- doFirstSelect(this);
- });
- };
-
- $.fn.tabs.methods = {
- options: function(jq){
- var cc = jq[0];
- var opts = $.data(cc, 'tabs').options;
- var s = getSelectedTab(cc);
- opts.selected = s ? getTabIndex(cc, s) : -1;
- return opts;
- },
- tabs: function(jq){
- return $.data(jq[0], 'tabs').tabs;
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- setSelectedSize(this);
- });
- },
- add: function(jq, options){
- return jq.each(function(){
- addTab(this, options);
- });
- },
- close: function(jq, which){
- return jq.each(function(){
- closeTab(this, which);
- });
- },
- getTab: function(jq, which){
- return getTab(jq[0], which);
- },
- getTabIndex: function(jq, tab){
- return getTabIndex(jq[0], tab);
- },
- getSelected: function(jq){
- return getSelectedTab(jq[0]);
- },
- select: function(jq, which){
- return jq.each(function(){
- selectTab(this, which);
- });
- },
- unselect: function(jq, which){
- return jq.each(function(){
- unselectTab(this, which);
- });
- },
- exists: function(jq, which){
- return exists(jq[0], which);
- },
- update: function(jq, options){
- return jq.each(function(){
- updateTab(this, options);
- });
- },
- enableTab: function(jq, which){
- return jq.each(function(){
- $(this).tabs('getTab', which).panel('options').tab.removeClass('tabs-disabled');
- });
- },
- disableTab: function(jq, which){
- return jq.each(function(){
- $(this).tabs('getTab', which).panel('options').tab.addClass('tabs-disabled');
- });
- },
- showHeader: function(jq){
- return jq.each(function(){
- showHeader(this, true);
- });
- },
- hideHeader: function(jq){
- return jq.each(function(){
- showHeader(this, false);
- });
- },
- scrollBy: function(jq, deltaX){ // scroll the tab header by the specified amount of pixels
- return jq.each(function(){
- var opts = $(this).tabs('options');
- var wrap = $(this).find('>div.tabs-header>div.tabs-wrap');
- var pos = Math.min(wrap._scrollLeft() + deltaX, getMaxScrollWidth());
- wrap.animate({scrollLeft: pos}, opts.scrollDuration);
-
- function getMaxScrollWidth(){
- var w = 0;
- var ul = wrap.children('ul');
- ul.children('li').each(function(){
- w += $(this).outerWidth(true);
- });
- return w - wrap.width() + (ul.outerWidth() - ul.width());
- }
- });
- }
- };
-
- $.fn.tabs.parseOptions = function(target){
- return $.extend({}, $.parser.parseOptions(target, [
- 'tools','toolPosition','tabPosition',
- {fit:'boolean',border:'boolean',plain:'boolean',headerWidth:'number',tabWidth:'number',tabHeight:'number',selected:'number',showHeader:'boolean'}
- ]));
- };
-
- $.fn.tabs.defaults = {
- width: 'auto',
- height: 'auto',
- headerWidth: 150, // the tab header width, it is valid only when tabPosition set to 'left' or 'right'
- tabWidth: 'auto', // the tab width
- tabHeight: 27, // the tab height
- selected: 0, // the initialized selected tab index
- showHeader: true,
- plain: false,
- fit: false,
- border: true,
- tools: null,
- toolPosition: 'right', // left,right
- tabPosition: 'top', // possible values: top,bottom
- scrollIncrement: 100,
- scrollDuration: 400,
- onLoad: function(panel){},
- onSelect: function(title, index){},
- onUnselect: function(title, index){},
- onBeforeClose: function(title, index){},
- onClose: function(title, index){},
- onAdd: function(title, index){},
- onUpdate: function(title, index){},
- onContextMenu: function(e, title, index){}
- };
- })(jQuery);
- /**
- * layout - jQuery EasyUI
- *
- * Dependencies:
- * resizable
- * panel
- */
- (function($){
- var resizing = false; // indicate if the region panel is being resized
-
- function setSize(container, param){
- var state = $.data(container, 'layout');
- var opts = state.options;
- var panels = state.panels;
- var cc = $(container);
-
- if (param){
- $.extend(opts, {
- width: param.width,
- height: param.height
- });
- }
- if (container.tagName.toLowerCase() == 'body'){
- // opts.fit = true;
- // cc._size(opts, $('body'))._size('clear');
- cc._size('fit');
- } else {
- cc._size(opts);
- }
-
- var cpos = {
- top:0,
- left:0,
- width:cc.width(),
- height:cc.height()
- };
-
- setVSize(isVisible(panels.expandNorth) ? panels.expandNorth : panels.north, 'n');
- setVSize(isVisible(panels.expandSouth) ? panels.expandSouth : panels.south, 's');
- setHSize(isVisible(panels.expandEast) ? panels.expandEast : panels.east, 'e');
- setHSize(isVisible(panels.expandWest) ? panels.expandWest : panels.west, 'w');
-
- panels.center.panel('resize', cpos);
-
- function setVSize(pp, type){
- if (!pp.length || !isVisible(pp)){return}
- var opts = pp.panel('options');
- pp.panel('resize', {
- width: cc.width(),
- height: opts.height
- });
- var height = pp.panel('panel').outerHeight();
- pp.panel('move', {
- left: 0,
- top: (type=='n' ? 0 : cc.height()-height)
- });
- cpos.height -= height;
- if (type == 'n'){
- cpos.top += height;
- if (!opts.split && opts.border){cpos.top--;}
- }
- if (!opts.split && opts.border){
- cpos.height++;
- }
- }
- function setHSize(pp, type){
- if (!pp.length || !isVisible(pp)){return}
- var opts = pp.panel('options');
- pp.panel('resize', {
- width: opts.width,
- height: cpos.height
- });
- var width = pp.panel('panel').outerWidth();
- pp.panel('move', {
- left: (type=='e' ? cc.width()-width : 0),
- top: cpos.top
- });
- cpos.width -= width;
- if (type == 'w'){
- cpos.left += width;
- if (!opts.split && opts.border){cpos.left--;}
- }
- if (!opts.split && opts.border){cpos.width++;}
- }
- }
-
- /**
- * initialize and wrap the layout
- */
- function init(container){
- var cc = $(container);
-
- cc.addClass('layout');
-
- function _add(cc){
- cc.children('div').each(function(){
- var opts = $.fn.layout.parsePanelOptions(this);
- if ('north,south,east,west,center'.indexOf(opts.region) >= 0){
- addPanel(container, opts, this);
- }
- });
- }
-
- cc.children('form').length ? _add(cc.children('form')) : _add(cc);
-
- cc.append('<div class="layout-split-proxy-h"></div><div class="layout-split-proxy-v"></div>');
-
- cc.bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(container);
- }
- // var opts = $.data(container, 'layout').options;
- // if (opts.fit == true || force){
- // setSize(container);
- // }
- return false;
- });
- }
-
- /**
- * Add a new region panel on specified element
- */
- function addPanel(container, param, el){
- param.region = param.region || 'center';
- var panels = $.data(container, 'layout').panels;
- var cc = $(container);
- var dir = param.region;
-
- if (panels[dir].length) return; // the region panel is already exists
-
- var pp = $(el);
- if (!pp.length){
- pp = $('<div></div>').appendTo(cc); // the predefined panel isn't exists, create a new panel instead
- }
-
- var popts = $.extend({}, $.fn.layout.paneldefaults, {
- width: (pp.length ? parseInt(pp[0].style.width) || pp.outerWidth() : 'auto'),
- height: (pp.length ? parseInt(pp[0].style.height) || pp.outerHeight() : 'auto'),
- doSize: false,
- collapsible: true,
- cls: ('layout-panel layout-panel-' + dir),
- bodyCls: 'layout-body',
- onOpen: function(){
- var tool = $(this).panel('header').children('div.panel-tool');
- tool.children('a.panel-tool-collapse').hide(); // hide the old collapse button
-
- var buttonDir = {north:'up',south:'down',east:'right',west:'left'};
- if (!buttonDir[dir]) return;
-
- var iconCls = 'layout-button-' + buttonDir[dir];
- // add collapse tool to panel header
- var t = tool.children('a.' + iconCls);
- if (!t.length){
- t = $('<a href="javascript:void(0)"></a>').addClass(iconCls).appendTo(tool);
- t.bind('click', {dir:dir}, function(e){
- collapsePanel(container, e.data.dir);
- return false;
- });
- }
- $(this).panel('options').collapsible ? t.show() : t.hide();
- }
- }, param);
-
- pp.panel(popts); // create region panel
- panels[dir] = pp;
-
- if (pp.panel('options').split){
- var panel = pp.panel('panel');
- panel.addClass('layout-split-' + dir);
-
- var handles = '';
- if (dir == 'north') handles = 's';
- if (dir == 'south') handles = 'n';
- if (dir == 'east') handles = 'w';
- if (dir == 'west') handles = 'e';
-
- panel.resizable($.extend({}, {
- handles:handles,
- onStartResize: function(e){
- resizing = true;
-
- if (dir == 'north' || dir == 'south'){
- var proxy = $('>div.layout-split-proxy-v', container);
- } else {
- var proxy = $('>div.layout-split-proxy-h', container);
- }
- var top=0,left=0,width=0,height=0;
- var pos = {display: 'block'};
- if (dir == 'north'){
- pos.top = parseInt(panel.css('top')) + panel.outerHeight() - proxy.height();
- pos.left = parseInt(panel.css('left'));
- pos.width = panel.outerWidth();
- pos.height = proxy.height();
- } else if (dir == 'south'){
- pos.top = parseInt(panel.css('top'));
- pos.left = parseInt(panel.css('left'));
- pos.width = panel.outerWidth();
- pos.height = proxy.height();
- } else if (dir == 'east'){
- pos.top = parseInt(panel.css('top')) || 0;
- pos.left = parseInt(panel.css('left')) || 0;
- pos.width = proxy.width();
- pos.height = panel.outerHeight();
- } else if (dir == 'west'){
- pos.top = parseInt(panel.css('top')) || 0;
- pos.left = panel.outerWidth() - proxy.width();
- pos.width = proxy.width();
- pos.height = panel.outerHeight();
- }
- proxy.css(pos);
-
- $('<div class="layout-mask"></div>').css({
- left:0,
- top:0,
- width:cc.width(),
- height:cc.height()
- }).appendTo(cc);
- },
- onResize: function(e){
- if (dir == 'north' || dir == 'south'){
- var proxy = $('>div.layout-split-proxy-v', container);
- proxy.css('top', e.pageY - $(container).offset().top - proxy.height()/2);
- } else {
- var proxy = $('>div.layout-split-proxy-h', container);
- proxy.css('left', e.pageX - $(container).offset().left - proxy.width()/2);
- }
- return false;
- },
- onStopResize: function(e){
- // $('>div.layout-split-proxy-v', container).css('display','none');
- // $('>div.layout-split-proxy-h', container).css('display','none');
- // var opts = pp.panel('options');
- // opts.width = panel.outerWidth();
- // opts.height = panel.outerHeight();
- // opts.left = panel.css('left');
- // opts.top = panel.css('top');
- // pp.panel('resize');
-
- cc.children('div.layout-split-proxy-v,div.layout-split-proxy-h').hide();
- pp.panel('resize',e.data);
-
- setSize(container);
- resizing = false;
-
- cc.find('>div.layout-mask').remove();
- }
- }, param));
- }
- }
-
- /**
- * remove a region panel
- */
- function removePanel(container, region){
- var panels = $.data(container, 'layout').panels;
- if (panels[region].length){
- panels[region].panel('destroy');
- panels[region] = $();
- var expandP = 'expand' + region.substring(0,1).toUpperCase() + region.substring(1);
- if (panels[expandP]){
- panels[expandP].panel('destroy');
- panels[expandP] = undefined;
- }
- }
- }
-
- function collapsePanel(container, region, animateSpeed){
- if (animateSpeed == undefined){animateSpeed = 'normal';}
- var panels = $.data(container, 'layout').panels;
-
- var p = panels[region];
- var popts = p.panel('options');
- if (popts.onBeforeCollapse.call(p) == false) return;
-
- // expand panel name: expandNorth, expandSouth, expandWest, expandEast
- var expandP = 'expand' + region.substring(0,1).toUpperCase() + region.substring(1);
- if (!panels[expandP]){
- panels[expandP] = createExpandPanel(region);
- panels[expandP].panel('panel').bind('click', function(){
- p.panel('expand',false).panel('open');
- var copts = getOption();
- p.panel('resize', copts.collapse);
- p.panel('panel').animate(copts.expand, function(){
- $(this).unbind('.layout').bind('mouseleave.layout', {region:region}, function(e){
- if (resizing == true){return;}
- if ($('body>div.combo-p>div.combo-panel:visible').length){return;}
- collapsePanel(container, e.data.region);
- });
- });
-
- return false;
- });
- }
-
- var copts = getOption();
- if (!isVisible(panels[expandP])){
- panels.center.panel('resize', copts.resizeC);
- }
- p.panel('panel').animate(copts.collapse, animateSpeed, function(){
- p.panel('collapse',false).panel('close');
- panels[expandP].panel('open').panel('resize', copts.expandP);
-
- $(this).unbind('.layout');
- });
-
- /**
- * create expand panel
- */
- function createExpandPanel(dir){
- var icon;
- if (dir == 'east') icon = 'layout-button-left'
- else if (dir == 'west') icon = 'layout-button-right'
- else if (dir == 'north') icon = 'layout-button-down'
- else if (dir == 'south') icon = 'layout-button-up';
-
- var p = $('<div></div>').appendTo(container);
- p.panel($.extend({}, $.fn.layout.paneldefaults, {
- cls: ('layout-expand layout-expand-' + dir),
- title: ' ',
- closed: true,
- minWidth: 0,
- minHeight: 0,
- doSize: false,
- tools: [{
- iconCls: icon,
- handler:function(){
- expandPanel(container, region);
- return false;
- }
- }]
- }));
- p.panel('panel').hover(
- function(){$(this).addClass('layout-expand-over');},
- function(){$(this).removeClass('layout-expand-over');}
- );
- return p;
- }
-
- /**
- * get collapse option:{
- * resizeC:{},
- * expand:{},
- * expandP:{}, // the expand holder panel
- * collapse:{}
- * }
- */
- function getOption(){
- var cc = $(container);
- var copts = panels.center.panel('options');
- var csize = popts.collapsedSize;
-
- if (region == 'east'){
- var pwidth = p.panel('panel')._outerWidth();
- var cwidth = copts.width + pwidth - csize;
- if (popts.split || !popts.border){cwidth++;}
- return {
- resizeC:{
- width: cwidth
- },
- expand:{
- left: cc.width() - pwidth
- },
- expandP:{
- top: copts.top,
- left: cc.width() - csize,
- width: csize,
- height: copts.height
- },
- collapse:{
- left: cc.width(),
- top: copts.top,
- height: copts.height
- }
- };
- } else if (region == 'west'){
- var pwidth = p.panel('panel')._outerWidth();
- var cwidth = copts.width + pwidth - csize;
- if (popts.split || !popts.border){cwidth++;}
- return {
- resizeC:{
- width: cwidth,
- left: csize - 1
- },
- expand:{
- left: 0
- },
- expandP:{
- left: 0,
- top: copts.top,
- width: csize,
- height: copts.height
- },
- collapse:{
- left: -pwidth,
- top: copts.top,
- height: copts.height
- }
- };
- } else if (region == 'north'){
- var pheight = p.panel('panel')._outerHeight();
- var hh = copts.height;
- if (!isVisible(panels.expandNorth)){
- hh += pheight - csize + ((popts.split || !popts.border)?1:0);
- }
- panels.east.add(panels.west).add(panels.expandEast).add(panels.expandWest).panel('resize', {
- top: csize - 1,
- height: hh
- });
-
- return {
- resizeC:{
- top: csize - 1,
- height: hh
- },
- expand:{
- top:0
- },
- expandP:{
- top: 0,
- left: 0,
- width: cc.width(),
- height: csize
- },
- collapse:{
- top: -pheight,
- width: cc.width()
- }
- };
- } else if (region == 'south'){
- var pheight = p.panel('panel')._outerHeight();
- var hh = copts.height;
- if (!isVisible(panels.expandSouth)){
- hh += pheight - csize + ((popts.split || !popts.border)?1:0);
- }
- panels.east.add(panels.west).add(panels.expandEast).add(panels.expandWest).panel('resize', {
- height: hh
- });
-
- return {
- resizeC:{
- height: hh
- },
- expand:{
- top: cc.height()-pheight
- },
- expandP:{
- top: cc.height() - csize,
- left: 0,
- width: cc.width(),
- height: csize
- },
- collapse:{
- top: cc.height(),
- width: cc.width()
- }
- };
- }
- }
- }
-
- function expandPanel(container, region){
- var panels = $.data(container, 'layout').panels;
-
- var p = panels[region];
- var popts = p.panel('options');
- if (popts.onBeforeExpand.call(p) == false){return;}
-
- var expandP = 'expand' + region.substring(0,1).toUpperCase() + region.substring(1);
- if (panels[expandP]){
- panels[expandP].panel('close');
- p.panel('panel').stop(true,true);
- p.panel('expand',false).panel('open');
- var eopts = getOption();
- p.panel('resize', eopts.collapse);
- p.panel('panel').animate(eopts.expand, function(){
- setSize(container);
- });
- }
-
- /**
- * get expand option: {
- * collapse:{},
- * expand:{}
- * }
- */
- function getOption(){
- var cc = $(container);
- var copts = panels.center.panel('options');
-
- if (region == 'east' && panels.expandEast){
- return {
- collapse:{
- left: cc.width(),
- top: copts.top,
- height: copts.height
- },
- expand:{
- left: cc.width() - p.panel('panel')._outerWidth()
- }
- };
- } else if (region == 'west' && panels.expandWest){
- return {
- collapse:{
- left: -p.panel('panel')._outerWidth(),
- top: copts.top,
- height: copts.height
- },
- expand:{
- left: 0
- }
- };
- } else if (region == 'north' && panels.expandNorth){
- return {
- collapse:{
- top: -p.panel('panel')._outerHeight(),
- width: cc.width()
- },
- expand:{
- top: 0
- }
- };
- } else if (region == 'south' && panels.expandSouth){
- return {
- collapse:{
- top: cc.height(),
- width: cc.width()
- },
- expand:{
- top: cc.height()-p.panel('panel')._outerHeight()
- }
- };
- }
- }
- }
-
- // function bindEvents(container){
- // var panels = $.data(container, 'layout').panels;
- // var cc = $(container);
- //
- // // bind east panel events
- // if (panels.east.length){
- // panels.east.panel('panel').bind('mouseover','east',_collapse);
- // }
- //
- // // bind west panel events
- // if (panels.west.length){
- // panels.west.panel('panel').bind('mouseover','west',_collapse);
- // }
- //
- // // bind north panel events
- // if (panels.north.length){
- // panels.north.panel('panel').bind('mouseover','north',_collapse);
- // }
- //
- // // bind south panel events
- // if (panels.south.length){
- // panels.south.panel('panel').bind('mouseover','south',_collapse);
- // }
- //
- // panels.center.panel('panel').bind('mouseover','center',_collapse);
- //
- // function _collapse(e){
- // if (resizing == true) return;
- //
- // if (e.data != 'east' && isVisible(panels.east) && isVisible(panels.expandEast)){
- // collapsePanel(container, 'east');
- // }
- // if (e.data != 'west' && isVisible(panels.west) && isVisible(panels.expandWest)){
- // collapsePanel(container, 'west');
- // }
- // if (e.data != 'north' && isVisible(panels.north) && isVisible(panels.expandNorth)){
- // collapsePanel(container, 'north');
- // }
- // if (e.data != 'south' && isVisible(panels.south) && isVisible(panels.expandSouth)){
- // collapsePanel(container, 'south');
- // }
- // return false;
- // }
- // }
-
- function isVisible(pp){
- if (!pp) return false;
- if (pp.length){
- return pp.panel('panel').is(':visible');
- } else {
- return false;
- }
- }
-
- function initCollapse(container){
- var panels = $.data(container, 'layout').panels;
- if (panels.east.length && panels.east.panel('options').collapsed) {
- collapsePanel(container, 'east', 0);
- }
- if (panels.west.length && panels.west.panel('options').collapsed) {
- collapsePanel(container, 'west', 0);
- }
- if (panels.north.length && panels.north.panel('options').collapsed) {
- collapsePanel(container, 'north', 0);
- }
- if (panels.south.length && panels.south.panel('options').collapsed) {
- collapsePanel(container, 'south', 0);
- }
- }
-
- $.fn.layout = function(options, param){
- if (typeof options == 'string'){
- return $.fn.layout.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'layout');
- if (state){
- $.extend(state.options, options);
- } else {
- var opts = $.extend({}, $.fn.layout.defaults, $.fn.layout.parseOptions(this), options);
- $.data(this, 'layout', {
- options: opts,
- panels: {center:$(), north:$(), south:$(), east:$(), west:$()}
- });
- init(this);
- // bindEvents(this);
- }
- setSize(this);
- initCollapse(this);
- });
- };
-
- $.fn.layout.methods = {
- options: function(jq){
- return $.data(jq[0], 'layout').options;
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- panel: function(jq, region){
- return $.data(jq[0], 'layout').panels[region];
- },
- collapse: function(jq, region){
- return jq.each(function(){
- collapsePanel(this, region);
- });
- },
- expand: function(jq, region){
- return jq.each(function(){
- expandPanel(this, region);
- });
- },
- add: function(jq, options){
- return jq.each(function(){
- addPanel(this, options);
- setSize(this);
- if ($(this).layout('panel', options.region).panel('options').collapsed){
- collapsePanel(this, options.region, 0);
- }
- });
- },
- remove: function(jq, region){
- return jq.each(function(){
- removePanel(this, region);
- setSize(this);
- });
- }
- };
-
- $.fn.layout.parseOptions = function(target){
- return $.extend({}, $.parser.parseOptions(target,[{fit:'boolean'}]));
- };
-
- $.fn.layout.defaults = {
- fit: false
- };
-
- $.fn.layout.parsePanelOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.panel.parseOptions(target),
- $.parser.parseOptions(target, [
- 'region',{split:'boolean',collpasedSize:'number',minWidth:'number',minHeight:'number',maxWidth:'number',maxHeight:'number'}
- ]));
- };
-
- $.fn.layout.paneldefaults = $.extend({}, $.fn.panel.defaults, {
- region:null, // possible values are: 'north','south','east','west','center'
- split:false,
- collapsedSize:28,
- minWidth:10,
- minHeight:10,
- maxWidth:10000,
- maxHeight:10000
- });
- })(jQuery);
- /**
- * menu - jQuery EasyUI
- *
- */
- (function($){
-
- /**
- * initialize the target menu, the function can be invoked only once
- */
- function init(target){
- $(target).appendTo('body');
- $(target).addClass('menu-top'); // the top menu
-
- $(document).unbind('.menu').bind('mousedown.menu', function(e){
- // var allMenu = $('body>div.menu:visible');
- // var m = $(e.target).closest('div.menu', allMenu);
- var m = $(e.target).closest('div.menu,div.combo-p');
- if (m.length){return}
- $('body>div.menu-top:visible').menu('hide');
- });
-
- var menus = splitMenu($(target));
- for(var i=0; i<menus.length; i++){
- createMenu(menus[i]);
- }
-
- function splitMenu(menu){
- var menus = [];
- menu.addClass('menu');
- menus.push(menu);
- if (!menu.hasClass('menu-content')){
- menu.children('div').each(function(){
- var submenu = $(this).children('div');
- if (submenu.length){
- submenu.insertAfter(target);
- this.submenu = submenu; // point to the sub menu
- var mm = splitMenu(submenu);
- menus = menus.concat(mm);
- }
- });
- }
- return menus;
- }
-
- function createMenu(menu){
- var wh = $.parser.parseOptions(menu[0], ['width','height']);
- menu[0].originalHeight = wh.height || 0;
- if (menu.hasClass('menu-content')){
- menu[0].originalWidth = wh.width || menu._outerWidth();
- } else {
- menu[0].originalWidth = wh.width || 0;
- menu.children('div').each(function(){
- var item = $(this);
- var itemOpts = $.extend({}, $.parser.parseOptions(this,['name','iconCls','href',{separator:'boolean'}]), {
- disabled: (item.attr('disabled') ? true : undefined)
- });
- if (itemOpts.separator){
- item.addClass('menu-sep');
- }
- if (!item.hasClass('menu-sep')){
- item[0].itemName = itemOpts.name || '';
- item[0].itemHref = itemOpts.href || '';
-
- var text = item.addClass('menu-item').html();
- item.empty().append($('<div class="menu-text"></div>').html(text));
- if (itemOpts.iconCls){
- $('<div class="menu-icon"></div>').addClass(itemOpts.iconCls).appendTo(item);
- }
- if (itemOpts.disabled){
- setDisabled(target, item[0], true);
- }
- if (item[0].submenu){
- $('<div class="menu-rightarrow"></div>').appendTo(item); // has sub menu
- }
-
- bindMenuItemEvent(target, item);
- }
- });
- $('<div class="menu-line"></div>').prependTo(menu);
- }
- setMenuSize(target, menu);
- menu.hide();
-
- bindMenuEvent(target, menu);
- }
- }
-
- function setMenuSize(target, menu){
- var opts = $.data(target, 'menu').options;
- var style = menu.attr('style') || '';
- menu.css({
- display: 'block',
- left:-10000,
- height: 'auto',
- overflow: 'hidden'
- });
-
- var el = menu[0];
- var width = el.originalWidth || 0;
- if (!width){
- width = 0;
- menu.find('div.menu-text').each(function(){
- if (width < $(this)._outerWidth()){
- width = $(this)._outerWidth();
- }
- $(this).closest('div.menu-item')._outerHeight($(this)._outerHeight()+2);
- });
- width += 40;
- }
-
- width = Math.max(width, opts.minWidth);
- // var height = el.originalHeight || menu.outerHeight();
- var height = el.originalHeight || 0;
- if (!height){
- height = menu.outerHeight();
-
- if (menu.hasClass('menu-top') && opts.alignTo){
- var at = $(opts.alignTo);
- var h1 = at.offset().top - $(document).scrollTop();
- var h2 = $(window)._outerHeight() + $(document).scrollTop() - at.offset().top - at._outerHeight();
- height = Math.min(height, Math.max(h1, h2));
- } else if (height > $(window)._outerHeight()){
- height = $(window).height();
- style += ';overflow:auto';
- } else {
- style += ';overflow:hidden';
- }
-
- // if (height > $(window).height()-5){
- // height = $(window).height()-5;
- // style += ';overflow:auto';
- // } else {
- // style += ';overflow:hidden';
- // }
- }
- var lineHeight = Math.max(el.originalHeight, menu.outerHeight()) - 2;
- menu._outerWidth(width)._outerHeight(height);
- menu.children('div.menu-line')._outerHeight(lineHeight);
-
- style += ';width:' + el.style.width + ';height:' + el.style.height;
-
- menu.attr('style', style);
- }
-
- /**
- * bind menu event
- */
- function bindMenuEvent(target, menu){
- var state = $.data(target, 'menu');
- menu.unbind('.menu').bind('mouseenter.menu', function(){
- if (state.timer){
- clearTimeout(state.timer);
- state.timer = null;
- }
- }).bind('mouseleave.menu', function(){
- if (state.options.hideOnUnhover){
- state.timer = setTimeout(function(){
- hideAll(target);
- }, state.options.duration);
- }
- });
- }
-
- /**
- * bind menu item event
- */
- function bindMenuItemEvent(target, item){
- if (!item.hasClass('menu-item')){return}
- item.unbind('.menu');
- item.bind('click.menu', function(){
- if ($(this).hasClass('menu-item-disabled')){
- return;
- }
- // only the sub menu clicked can hide all menus
- if (!this.submenu){
- hideAll(target);
- var href = this.itemHref;
- if (href){
- location.href = href;
- }
- }
- var item = $(target).menu('getItem', this);
- $.data(target, 'menu').options.onClick.call(target, item);
- }).bind('mouseenter.menu', function(e){
- // hide other menu
- item.siblings().each(function(){
- if (this.submenu){
- hideMenu(this.submenu);
- }
- $(this).removeClass('menu-active');
- });
- // show this menu
- item.addClass('menu-active');
-
- if ($(this).hasClass('menu-item-disabled')){
- item.addClass('menu-active-disabled');
- return;
- }
-
- var submenu = item[0].submenu;
- if (submenu){
- $(target).menu('show', {
- menu: submenu,
- parent: item
- });
- }
- }).bind('mouseleave.menu', function(e){
- item.removeClass('menu-active menu-active-disabled');
- var submenu = item[0].submenu;
- if (submenu){
- if (e.pageX>=parseInt(submenu.css('left'))){
- item.addClass('menu-active');
- } else {
- hideMenu(submenu);
- }
-
- } else {
- item.removeClass('menu-active');
- }
- });
- }
-
- /**
- * hide top menu and it's all sub menus
- */
- function hideAll(target){
- var state = $.data(target, 'menu');
- if (state){
- if ($(target).is(':visible')){
- hideMenu($(target));
- state.options.onHide.call(target);
- }
- }
- return false;
- }
-
- /**
- * show the menu, the 'param' object has one or more properties:
- * left: the left position to display
- * top: the top position to display
- * menu: the menu to display, if not defined, the 'target menu' is used
- * parent: the parent menu item to align to
- * alignTo: the element object to align to
- */
- function showMenu(target, param){
- var left,top;
- param = param || {};
- var menu = $(param.menu || target);
- $(target).menu('resize', menu[0]);
- if (menu.hasClass('menu-top')){
- var opts = $.data(target, 'menu').options;
- $.extend(opts, param);
- left = opts.left;
- top = opts.top;
- if (opts.alignTo){
- var at = $(opts.alignTo);
- left = at.offset().left;
- top = at.offset().top + at._outerHeight();
- if (opts.align == 'right'){
- left += at.outerWidth() - menu.outerWidth();
- }
- }
- if (left + menu.outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()){
- left = $(window)._outerWidth() + $(document).scrollLeft() - menu.outerWidth() - 5;
- }
- if (left < 0){left = 0;}
- top = _fixTop(top, opts.alignTo);
- } else {
- var parent = param.parent; // the parent menu item
- left = parent.offset().left + parent.outerWidth() - 2;
- if (left + menu.outerWidth() + 5 > $(window)._outerWidth() + $(document).scrollLeft()){
- left = parent.offset().left - menu.outerWidth() + 2;
- }
- top = _fixTop(parent.offset().top - 3);
- }
-
- function _fixTop(top, alignTo){
- if (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){
- if (alignTo){
- top = $(alignTo).offset().top - menu._outerHeight();
- } else {
- top = $(window)._outerHeight() + $(document).scrollTop() - menu.outerHeight();
- }
- }
- if (top < 0){top = 0;}
- return top;
- }
-
- menu.css({left:left,top:top});
- menu.show(0, function(){
- if (!menu[0].shadow){
- menu[0].shadow = $('<div class="menu-shadow"></div>').insertAfter(menu);
- }
- menu[0].shadow.css({
- display:'block',
- zIndex:$.fn.menu.defaults.zIndex++,
- left:menu.css('left'),
- top:menu.css('top'),
- width:menu.outerWidth(),
- height:menu.outerHeight()
- });
- menu.css('z-index', $.fn.menu.defaults.zIndex++);
- if (menu.hasClass('menu-top')){
- $.data(menu[0], 'menu').options.onShow.call(menu[0]);
- }
- });
- }
-
- function hideMenu(menu){
- if (!menu) return;
-
- hideit(menu);
- menu.find('div.menu-item').each(function(){
- if (this.submenu){
- hideMenu(this.submenu);
- }
- $(this).removeClass('menu-active');
- });
-
- function hideit(m){
- m.stop(true,true);
- if (m[0].shadow){
- m[0].shadow.hide();
- }
- m.hide();
- }
- }
-
- function findItem(target, text){
- var result = null;
- var tmp = $('<div></div>');
- function find(menu){
- menu.children('div.menu-item').each(function(){
- var item = $(target).menu('getItem', this);
- var s = tmp.empty().html(item.text).text();
- if (text == $.trim(s)) {
- result = item;
- } else if (this.submenu && !result){
- find(this.submenu);
- }
- });
- }
- find($(target));
- tmp.remove();
- return result;
- }
-
- function setDisabled(target, itemEl, disabled){
- var t = $(itemEl);
- if (!t.hasClass('menu-item')){return}
-
- if (disabled){
- t.addClass('menu-item-disabled');
- if (itemEl.onclick){
- itemEl.onclick1 = itemEl.onclick;
- itemEl.onclick = null;
- }
- } else {
- t.removeClass('menu-item-disabled');
- if (itemEl.onclick1){
- itemEl.onclick = itemEl.onclick1;
- itemEl.onclick1 = null;
- }
- }
- }
-
- function appendItem(target, param){
- var menu = $(target);
- if (param.parent){
- if (!param.parent.submenu){
- var submenu = $('<div class="menu"><div class="menu-line"></div></div>').appendTo('body');
- submenu.hide();
- param.parent.submenu = submenu;
- $('<div class="menu-rightarrow"></div>').appendTo(param.parent);
- }
- menu = param.parent.submenu;
- }
- if (param.separator){
- var item = $('<div class="menu-sep"></div>').appendTo(menu);
- } else {
- var item = $('<div class="menu-item"></div>').appendTo(menu);
- $('<div class="menu-text"></div>').html(param.text).appendTo(item);
- }
- if (param.iconCls) $('<div class="menu-icon"></div>').addClass(param.iconCls).appendTo(item);
- if (param.id) item.attr('id', param.id);
- if (param.name){item[0].itemName = param.name}
- if (param.href){item[0].itemHref = param.href}
- if (param.onclick){
- if (typeof param.onclick == 'string'){
- item.attr('onclick', param.onclick);
- } else {
- item[0].onclick = eval(param.onclick);
- }
- }
- if (param.handler){item[0].onclick = eval(param.handler)}
- if (param.disabled){setDisabled(target, item[0], true)}
-
- bindMenuItemEvent(target, item);
- bindMenuEvent(target, menu);
- setMenuSize(target, menu);
- }
-
- function removeItem(target, itemEl){
- function removeit(el){
- if (el.submenu){
- el.submenu.children('div.menu-item').each(function(){
- removeit(this);
- });
- var shadow = el.submenu[0].shadow;
- if (shadow) shadow.remove();
- el.submenu.remove();
- }
- $(el).remove();
- }
- var menu = $(itemEl).parent();
- removeit(itemEl);
- setMenuSize(target, menu);
- }
-
- function setVisible(target, itemEl, visible){
- var menu = $(itemEl).parent();
- if (visible){
- $(itemEl).show();
- } else {
- $(itemEl).hide();
- }
- setMenuSize(target, menu);
- }
-
- function destroyMenu(target){
- $(target).children('div.menu-item').each(function(){
- removeItem(target, this);
- });
- if (target.shadow) target.shadow.remove();
- $(target).remove();
- }
-
- $.fn.menu = function(options, param){
- if (typeof options == 'string'){
- return $.fn.menu.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'menu');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'menu', {
- options: $.extend({}, $.fn.menu.defaults, $.fn.menu.parseOptions(this), options)
- });
- init(this);
- }
- $(this).css({
- left: state.options.left,
- top: state.options.top
- });
- });
- };
-
- $.fn.menu.methods = {
- options: function(jq){
- return $.data(jq[0], 'menu').options;
- },
- show: function(jq, pos){
- return jq.each(function(){
- showMenu(this, pos);
- });
- },
- hide: function(jq){
- return jq.each(function(){
- hideAll(this);
- });
- },
- destroy: function(jq){
- return jq.each(function(){
- destroyMenu(this);
- });
- },
- /**
- * set the menu item text
- * param: {
- * target: DOM object, indicate the menu item
- * text: string, the new text
- * }
- */
- setText: function(jq, param){
- return jq.each(function(){
- $(param.target).children('div.menu-text').html(param.text);
- });
- },
- /**
- * set the menu icon class
- * param: {
- * target: DOM object, indicate the menu item
- * iconCls: the menu item icon class
- * }
- */
- setIcon: function(jq, param){
- return jq.each(function(){
- $(param.target).children('div.menu-icon').remove();
- if (param.iconCls){
- $('<div class="menu-icon"></div>').addClass(param.iconCls).appendTo(param.target);
- }
- });
- },
- /**
- * get the menu item data that contains the following property:
- * {
- * target: DOM object, the menu item
- * id: the menu id
- * text: the menu item text
- * iconCls: the icon class
- * href: a remote address to redirect to
- * onclick: a function to be called when the item is clicked
- * }
- */
- getItem: function(jq, itemEl){
- var t = $(itemEl);
- var item = {
- target: itemEl,
- id: t.attr('id'),
- text: $.trim(t.children('div.menu-text').html()),
- disabled: t.hasClass('menu-item-disabled'),
- // href: t.attr('href'),
- // name: t.attr('name'),
- name: itemEl.itemName,
- href: itemEl.itemHref,
- onclick: itemEl.onclick
- }
- var icon = t.children('div.menu-icon');
- if (icon.length){
- var cc = [];
- var aa = icon.attr('class').split(' ');
- for(var i=0; i<aa.length; i++){
- if (aa[i] != 'menu-icon'){
- cc.push(aa[i]);
- }
- }
- item.iconCls = cc.join(' ');
- }
- return item;
- },
- findItem: function(jq, text){
- return findItem(jq[0], text);
- },
- /**
- * append menu item, the param contains following properties:
- * parent,id,text,iconCls,href,onclick
- * when parent property is assigned, append menu item to it
- */
- appendItem: function(jq, param){
- return jq.each(function(){
- appendItem(this, param);
- });
- },
- removeItem: function(jq, itemEl){
- return jq.each(function(){
- removeItem(this, itemEl);
- });
- },
- enableItem: function(jq, itemEl){
- return jq.each(function(){
- setDisabled(this, itemEl, false);
- });
- },
- disableItem: function(jq, itemEl){
- return jq.each(function(){
- setDisabled(this, itemEl, true);
- });
- },
- showItem: function(jq, itemEl){
- return jq.each(function(){
- setVisible(this, itemEl, true);
- });
- },
- hideItem: function(jq, itemEl){
- return jq.each(function(){
- setVisible(this, itemEl, false);
- });
- },
- resize: function(jq, menuEl){
- return jq.each(function(){
- setMenuSize(this, $(menuEl));
- });
- }
- };
-
- $.fn.menu.parseOptions = function(target){
- return $.extend({}, $.parser.parseOptions(target, [{minWidth:'number',duration:'number',hideOnUnhover:'boolean'}]));
- };
-
- $.fn.menu.defaults = {
- zIndex:110000,
- left: 0,
- top: 0,
- alignTo: null,
- align: 'left',
- minWidth: 120,
- duration: 100, // Defines duration time in milliseconds to hide when the mouse leaves the menu.
- hideOnUnhover: true, // Automatically hides the menu when mouse exits it
- onShow: function(){},
- onHide: function(){},
- onClick: function(item){}
- };
- })(jQuery);
- /**
- * menubutton - jQuery EasyUI
- *
- * Dependencies:
- * linkbutton
- * menu
- */
- (function($){
-
- function init(target){
- var opts = $.data(target, 'menubutton').options;
- var btn = $(target);
- btn.linkbutton(opts);
- btn.removeClass(opts.cls.btn1+' '+opts.cls.btn2).addClass('m-btn');
- btn.removeClass('m-btn-small m-btn-medium m-btn-large').addClass('m-btn-'+opts.size);
- var inner = btn.find('.l-btn-left');
- $('<span></span>').addClass(opts.cls.arrow).appendTo(inner);
- $('<span></span>').addClass('m-btn-line').appendTo(inner);
-
- if (opts.menu){
- $(opts.menu).menu({duration:opts.duration});
- var mopts = $(opts.menu).menu('options');
- var onShow = mopts.onShow;
- var onHide = mopts.onHide;
- $.extend(mopts, {
- onShow: function(){
- var mopts = $(this).menu('options');
- var btn = $(mopts.alignTo);
- var opts = btn.menubutton('options');
- btn.addClass((opts.plain==true) ? opts.cls.btn2 : opts.cls.btn1);
- onShow.call(this);
- },
- onHide: function(){
- var mopts = $(this).menu('options');
- var btn = $(mopts.alignTo);
- var opts = btn.menubutton('options');
- btn.removeClass((opts.plain==true) ? opts.cls.btn2 : opts.cls.btn1);
- onHide.call(this);
- }
- });
- }
- }
-
- function bindEvents(target){
- var opts = $.data(target, 'menubutton').options;
- var btn = $(target);
- var t = btn.find('.'+opts.cls.trigger);
- if (!t.length){t = btn}
- t.unbind('.menubutton');
- var timeout = null;
- t.bind('click.menubutton', function(){
- if (!isDisabled()){
- showMenu(target);
- return false;
- }
- }).bind('mouseenter.menubutton', function(){
- if (!isDisabled()){
- timeout = setTimeout(function(){
- showMenu(target);
- }, opts.duration);
- return false;
- }
- }).bind('mouseleave.menubutton', function(){
- if (timeout){
- clearTimeout(timeout);
- }
- $(opts.menu).triggerHandler('mouseleave');
- });
-
- function isDisabled(){
- return $(target).linkbutton('options').disabled;
- }
- }
-
- function showMenu(target){
- // var opts = $.data(target, 'menubutton').options;
- var opts = $(target).menubutton('options');
- if (opts.disabled || !opts.menu){return}
- $('body>div.menu-top').menu('hide');
- var btn = $(target);
- var mm = $(opts.menu);
- if (mm.length){
- mm.menu('options').alignTo = btn;
- mm.menu('show', {alignTo:btn,align:opts.menuAlign});
- }
- btn.blur();
- }
-
- $.fn.menubutton = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.menubutton.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.linkbutton(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'menubutton');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'menubutton', {
- options: $.extend({}, $.fn.menubutton.defaults, $.fn.menubutton.parseOptions(this), options)
- });
- $(this).removeAttr('disabled');
- }
-
- init(this);
- bindEvents(this);
- });
- };
-
- $.fn.menubutton.methods = {
- options: function(jq){
- var bopts = jq.linkbutton('options');
- return $.extend($.data(jq[0], 'menubutton').options, {
- toggle: bopts.toggle,
- selected: bopts.selected,
- disabled: bopts.disabled
- });
- },
- destroy: function(jq){
- return jq.each(function(){
- var opts = $(this).menubutton('options');
- if (opts.menu){
- $(opts.menu).menu('destroy');
- }
- $(this).remove();
- });
- }
- };
-
- $.fn.menubutton.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.linkbutton.parseOptions(target),
- $.parser.parseOptions(target, ['menu',{plain:'boolean',duration:'number'}]));
- };
-
- $.fn.menubutton.defaults = $.extend({}, $.fn.linkbutton.defaults, {
- plain: true,
- menu: null,
- menuAlign: 'left', // the top level menu alignment
- duration: 100,
- cls: {
- btn1: 'm-btn-active',
- btn2: 'm-btn-plain-active',
- arrow: 'm-btn-downarrow',
- trigger: 'm-btn'
- }
- });
- })(jQuery);
- /**
- * splitbutton - jQuery EasyUI
- *
- * Dependencies:
- * menubutton
- */
- (function($){
-
- function init(target){
- var opts = $.data(target, 'splitbutton').options;
- $(target).menubutton(opts);
- $(target).addClass('s-btn');
- }
-
- $.fn.splitbutton = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.splitbutton.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.menubutton(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'splitbutton');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'splitbutton', {
- options: $.extend({}, $.fn.splitbutton.defaults, $.fn.splitbutton.parseOptions(this), options)
- });
- $(this).removeAttr('disabled');
- }
- init(this);
- });
- };
-
- $.fn.splitbutton.methods = {
- options: function(jq){
- var mopts = jq.menubutton('options');
- var sopts = $.data(jq[0], 'splitbutton').options;
- $.extend(sopts, {
- disabled: mopts.disabled,
- toggle: mopts.toggle,
- selected: mopts.selected
- });
- return sopts;
- }
- };
-
- $.fn.splitbutton.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.linkbutton.parseOptions(target),
- $.parser.parseOptions(target, ['menu',{plain:'boolean',duration:'number'}]));
- };
-
- $.fn.splitbutton.defaults = $.extend({}, $.fn.linkbutton.defaults, {
- plain: true,
- menu: null,
- duration: 100,
- cls: {
- btn1: 'm-btn-active s-btn-active',
- btn2: 'm-btn-plain-active s-btn-plain-active',
- arrow: 'm-btn-downarrow',
- trigger: 'm-btn-line'
- }
- });
- })(jQuery);
- /**
- * validatebox - jQuery EasyUI
- *
- * Dependencies:
- * tooltip
- *
- */
- (function($){
-
- function init(target){
- $(target).addClass('validatebox-text');
- }
-
- /**
- * destroy the box, including it's tip object.
- */
- function destroyBox(target){
- var state = $.data(target, 'validatebox');
- state.validating = false;
- if (state.timer){
- clearTimeout(state.timer);
- }
- $(target).tooltip('destroy');
- $(target).unbind();
- $(target).remove();
- }
-
- function bindEvents(target){
- var opts = $.data(target, 'validatebox').options;
- var box = $(target);
- box.unbind('.validatebox');
- if (opts.novalidate || box.is(':disabled')){return;}
- for(var event in opts.events){
- $(target).bind(event+'.validatebox', {target:target}, opts.events[event]);
- }
- }
-
- function focusEventHandler(e){
- var target = e.data.target;
- var state = $.data(target, 'validatebox');
- var box = $(target);
- if ($(target).attr('readonly')){return;}
- state.validating = true;
- state.value = undefined;
- (function(){
- if (state.validating){
- if (state.value != box.val()){ // when box value changed, validate it
- state.value = box.val();
- if (state.timer){
- clearTimeout(state.timer);
- }
- state.timer = setTimeout(function(){
- $(target).validatebox('validate');
- }, state.options.delay);
- } else {
- fixTipPosition(target); // correct the tip position
- }
- setTimeout(arguments.callee, 200);
- }
- })();
- }
- function blurEventHandler(e){
- var target = e.data.target;
- var state = $.data(target, 'validatebox');
- if (state.timer){
- clearTimeout(state.timer);
- state.timer = undefined;
- }
- state.validating = false;
- hideTip(target);
- }
- function mouseenterEventHandler(e){
- var target = e.data.target;
- if ($(target).hasClass('validatebox-invalid')){
- showTip(target);
- }
- }
- function mouseleaveEventHandler(e){
- var target = e.data.target;
- var state = $.data(target, 'validatebox');
- if (!state.validating){
- hideTip(target);
- }
- }
-
- /**
- * show tip message.
- */
- function showTip(target){
- var state = $.data(target, 'validatebox');
- var opts = state.options;
- $(target).tooltip($.extend({}, opts.tipOptions, {
- content: state.message,
- position: opts.tipPosition,
- deltaX: opts.deltaX
- })).tooltip('show');
- state.tip = true;
- }
-
- function fixTipPosition(target){
- var state = $.data(target, 'validatebox');
- if (state && state.tip){
- $(target).tooltip('reposition');
- }
- }
-
- /**
- * hide tip message.
- */
- function hideTip(target){
- var state = $.data(target, 'validatebox');
- state.tip = false;
- $(target).tooltip('hide');
- }
-
- /**
- * do validate action
- */
- function validate(target){
- var state = $.data(target, 'validatebox');
- var opts = state.options;
- var box = $(target);
-
- opts.onBeforeValidate.call(target);
- var result = _validate();
- opts.onValidate.call(target, result);
- return result;
-
- function setTipMessage(msg){
- state.message = msg;
- }
- function doValidate(vtype, vparam){
- var value = box.val();
- var result = /([a-zA-Z_]+)(.*)/.exec(vtype);
- var rule = opts.rules[result[1]];
- if (rule && value){
- var param = vparam || opts.validParams || eval(result[2]);
- if (!rule['validator'].call(target, value, param)){
- box.addClass('validatebox-invalid');
-
- var message = rule['message'];
- if (param){
- for(var i=0; i<param.length; i++){
- message = message.replace(new RegExp("\\{" + i + "\\}", "g"), param[i]);
- }
- }
- setTipMessage(opts.invalidMessage || message);
- if (state.validating){
- showTip(target);
- }
- return false;
- }
- }
- return true;
- }
- function _validate(){
- box.removeClass('validatebox-invalid');
- hideTip(target);
- if (opts.novalidate || box.is(':disabled')){return true} // do not need to do validation
- if (opts.required){
- if (box.val() == ''){
- box.addClass('validatebox-invalid');
- setTipMessage(opts.missingMessage);
- if (state.validating){
- showTip(target);
- }
- return false;
- }
- }
- if (opts.validType){
- if ($.isArray(opts.validType)){
- for(var i=0; i<opts.validType.length; i++){
- if (!doValidate(opts.validType[i])){return false;}
- }
- } else if (typeof opts.validType == 'string'){
- if (!doValidate(opts.validType)){return false;};
- } else {
- for(var vtype in opts.validType){
- var vparam = opts.validType[vtype];
- if (!doValidate(vtype, vparam)){return false;}
- }
- }
- }
-
- return true;
- }
-
- }
-
- function setValidation(target, novalidate){
- var opts = $.data(target, 'validatebox').options;
- if (novalidate != undefined){opts.novalidate = novalidate}
- if (opts.novalidate){
- $(target).removeClass('validatebox-invalid');
- hideTip(target);
- }
- validate(target);
- bindEvents(target);
- }
-
- $.fn.validatebox = function(options, param){
- if (typeof options == 'string'){
- return $.fn.validatebox.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'validatebox');
- if (state){
- $.extend(state.options, options);
- } else {
- init(this);
- $.data(this, 'validatebox', {
- options: $.extend({}, $.fn.validatebox.defaults, $.fn.validatebox.parseOptions(this), options)
- });
- }
-
- setValidation(this);
- // bindEvents(this);
- validate(this);
- });
- };
-
- $.fn.validatebox.methods = {
- options: function(jq){
- return $.data(jq[0], 'validatebox').options;
- },
- destroy: function(jq){
- return jq.each(function(){
- destroyBox(this);
- });
- },
- validate: function(jq){
- return jq.each(function(){
- validate(this);
- });
- },
- isValid: function(jq){
- return validate(jq[0]);
- },
- enableValidation: function(jq){
- return jq.each(function(){
- setValidation(this, false);
- });
- },
- disableValidation: function(jq){
- return jq.each(function(){
- setValidation(this, true);
- });
- }
- };
-
- $.fn.validatebox.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [
- 'validType','missingMessage','invalidMessage','tipPosition',{delay:'number',deltaX:'number'}
- ]), {
- required: (t.attr('required') ? true : undefined),
- novalidate: (t.attr('novalidate') != undefined ? true : undefined)
- });
- };
-
- $.fn.validatebox.defaults = {
- required: false,
- validType: null,
- validParams: null, // []
- delay: 200, // delay to validate from the last inputting value.
- missingMessage: 'This field is required.',
- invalidMessage: null,
- tipPosition: 'right', // Possible values: 'left','right'.
- deltaX: 0,
- novalidate: false,
-
- events: {
- focus: focusEventHandler,
- blur: blurEventHandler,
- mouseenter: mouseenterEventHandler,
- mouseleave: mouseleaveEventHandler,
- click: function(e){
- var t = $(e.data.target);
- if (!t.is(':focus')){
- t.trigger('focus');
- }
- }
- },
-
- tipOptions: { // the options to create tooltip
- showEvent: 'none',
- hideEvent: 'none',
- showDelay: 0,
- hideDelay: 0,
- zIndex: '',
- onShow: function(){
- $(this).tooltip('tip').css({
- color: '#000',
- borderColor: '#CC9933',
- backgroundColor: '#FFFFCC'
- });
- },
- onHide: function(){
- $(this).tooltip('destroy');
- }
- },
-
- rules: {
- email:{
- validator: function(value){
- return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
- },
- message: 'Please enter a valid email address.'
- },
- url: {
- validator: function(value){
- return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
- },
- message: 'Please enter a valid URL.'
- },
- length: {
- validator: function(value, param){
- var len = $.trim(value).length;
- return len >= param[0] && len <= param[1]
- },
- message: 'Please enter a value between {0} and {1}.'
- },
- remote: {
- validator: function(value, param){
- var data = {};
- data[param[1]] = value;
- var response = $.ajax({
- url:param[0],
- dataType:'json',
- data:data,
- async:false,
- cache:false,
- type:'post'
- }).responseText;
- return response == 'true';
- },
- message: 'Please fix this field.'
- }
- },
-
- onBeforeValidate: function(){},
- onValidate: function(valid){} // fires when validation completes
- };
- })(jQuery);
- /**
- * textbox - jQuery EasyUI
- *
- * Dependencies:
- * validatebox
- * linkbutton
- *
- */
- (function($){
- function init(target){
- $(target).addClass('textbox-f').hide();
- var span = $(
- '<span class="textbox">' +
- '<input class="textbox-text" autocomplete="off">' +
- '<input type="hidden" class="textbox-value">' +
- '</span>'
- ).insertAfter(target);
-
- var name = $(target).attr('name');
- if (name){
- span.find('input.textbox-value').attr('name', name);
- $(target).removeAttr('name').attr('textboxName', name);
- }
-
- return span;
- }
-
- /**
- * build textbox component
- */
- function buildTextBox(target){
- var state = $.data(target, 'textbox');
- var opts = state.options;
- var tb = state.textbox;
-
- tb.find('.textbox-text').remove();
- if (opts.multiline){
- $('<textarea class="textbox-text" autocomplete="off"></textarea>').prependTo(tb);
- } else {
- $('<input type="'+opts.type+'" class="textbox-text" autocomplete="off">').prependTo(tb);
- }
-
- tb.find('.textbox-addon').remove();
- var bb = opts.icons ? $.extend(true, [], opts.icons) : [];
- if (opts.iconCls){
- bb.push({
- iconCls: opts.iconCls,
- disabled: true
- });
- }
- if (bb.length){
- var bc = $('<span class="textbox-addon"></span>').prependTo(tb);
- bc.addClass('textbox-addon-'+opts.iconAlign);
- for(var i=0; i<bb.length; i++){
- bc.append('<a href="javascript:void(0)" class="textbox-icon '+bb[i].iconCls+'" icon-index="'+i+'" tabindex="-1"></a>');
- }
- }
-
- tb.find('.textbox-button').remove();
- if (opts.buttonText || opts.buttonIcon){
- var btn = $('<a href="javascript:void(0)" class="textbox-button"></a>').prependTo(tb);
- btn.addClass('textbox-button-'+opts.buttonAlign).linkbutton({
- text: opts.buttonText,
- iconCls: opts.buttonIcon
- });
- }
-
- setDisabled(target, opts.disabled);
- setReadonly(target, opts.readonly);
- }
-
- function destroy(target){
- var tb = $.data(target, 'textbox').textbox;
- tb.find('.textbox-text').validatebox('destroy');
- tb.remove();
- $(target).remove();
- }
-
- function setSize(target, width){
- var state = $.data(target, 'textbox');
- var opts = state.options;
- var tb = state.textbox;
- var parent = tb.parent(); // the parent container
- if (width){opts.width = width;}
- if (isNaN(parseInt(opts.width))){
- var c = $(target).clone();
- c.css('visibility','hidden');
- c.insertAfter(target);
- opts.width = c.outerWidth();
- c.remove();
- }
-
- tb.appendTo('body');
-
- var input = tb.find('.textbox-text');
- var btn = tb.find('.textbox-button');
- var addon = tb.find('.textbox-addon');
- var icons = addon.find('.textbox-icon');
-
- tb._size(opts, parent);
-
- btn.linkbutton('resize', {height: tb.height()});
- btn.css({
- left: (opts.buttonAlign=='left'?0:''),
- right: (opts.buttonAlign=='right'?0:'')
- });
- addon.css({
- left: (opts.iconAlign=='left' ? (opts.buttonAlign=='left'?btn._outerWidth():0) : ''),
- right: (opts.iconAlign=='right' ? (opts.buttonAlign=='right'?btn._outerWidth():0) : '')
- });
- icons.css({
- width: opts.iconWidth+'px',
- height: tb.height()+'px'
- });
- input.css({
- paddingLeft: (target.style.paddingLeft || ''),
- paddingRight: (target.style.paddingRight || ''),
- marginLeft: getInputMargin('left'),
- marginRight: getInputMargin('right')
- });
- if (opts.multiline){
- input.css({
- paddingTop: (target.style.paddingTop || ''),
- paddingBottom: (target.style.paddingBottom || '')
- });
- input._outerHeight(tb.height());
- } else {
- var padding = Math.floor((tb.height() - input.height())/2);
- input.css({
- paddingTop: padding+'px',
- paddingBottom: padding+'px'
- });
- }
- input._outerWidth(tb.width() - icons.length * opts.iconWidth - btn._outerWidth());
-
- tb.insertAfter(target);
-
- opts.onResize.call(target, opts.width, opts.height);
-
- function getInputMargin(align){
- return (opts.iconAlign==align ? addon._outerWidth() : 0) + (opts.buttonAlign==align ? btn._outerWidth() : 0);
- }
- }
-
- /**
- * create validation on the textbox
- */
- function validate(target){
- var opts = $(target).textbox('options');
- var input = $(target).textbox('textbox');
- input.validatebox($.extend({}, opts, {
- deltaX: $(target).textbox('getTipX'),
- onBeforeValidate: function(){
- var box = $(this);
- if (!box.is(':focus')){
- opts.oldInputValue = box.val();
- box.val(opts.value);
- }
- },
- onValidate: function(valid){
- var box = $(this);
- if (opts.oldInputValue != undefined){
- box.val(opts.oldInputValue);
- opts.oldInputValue = undefined;
- }
- var tb = box.parent();
- if (valid){
- tb.removeClass('textbox-invalid');
- } else {
- tb.addClass('textbox-invalid');
- }
- }
- }));
- }
-
- function bindEvents(target){
- var state = $.data(target, 'textbox');
- var opts = state.options;
- var tb = state.textbox;
- var input = tb.find('.textbox-text');
- input.attr('placeholder', opts.prompt);
- input.unbind('.textbox');
- if (!opts.disabled && !opts.readonly){
- input.bind('blur.textbox', function(e){
- if (!tb.hasClass('textbox-focused')){return;}
- opts.value = $(this).val();
- if (opts.value == ''){
- $(this).val(opts.prompt).addClass('textbox-prompt');
- } else {
- $(this).removeClass('textbox-prompt');
- }
- tb.removeClass('textbox-focused');
- }).bind('focus.textbox', function(e){
- if (tb.hasClass('textbox-focused')){return;}
- if ($(this).val() != opts.value){
- $(this).val(opts.value);
- }
- $(this).removeClass('textbox-prompt');
- tb.addClass('textbox-focused');
- });
- for(var event in opts.inputEvents){
- input.bind(event+'.textbox', {target:target}, opts.inputEvents[event]);
- }
- }
-
- var addon = tb.find('.textbox-addon');
- addon.unbind().bind('click', {target:target}, function(e){
- var icon = $(e.target).closest('a.textbox-icon:not(.textbox-icon-disabled)');
- if (icon.length){
- var iconIndex = parseInt(icon.attr('icon-index'));
- var conf = opts.icons[iconIndex];
- if (conf && conf.handler){
- conf.handler.call(icon[0], e);
- opts.onClickIcon.call(target, iconIndex);
- }
- }
- });
- addon.find('.textbox-icon').each(function(index){
- var conf = opts.icons[index];
- var icon = $(this);
- if (!conf || conf.disabled || opts.disabled || opts.readonly){
- icon.addClass('textbox-icon-disabled');
- } else {
- icon.removeClass('textbox-icon-disabled');
- }
- });
-
- var btn = tb.find('.textbox-button');
- btn.unbind('.textbox').bind('click.textbox', function(){
- if (!btn.linkbutton('options').disabled){
- opts.onClickButton.call(target);
- }
- });
- btn.linkbutton((opts.disabled || opts.readonly) ? 'disable' : 'enable');
-
- tb.unbind('.textbox').bind('_resize.textbox', function(e, force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(target);
- }
- return false;
- });
- }
-
- function setDisabled(target, disabled){
- var state = $.data(target, 'textbox');
- var opts = state.options;
- var tb = state.textbox;
- if (disabled){
- opts.disabled = true;
- $(target).attr('disabled', 'disabled');
- tb.find('.textbox-text,.textbox-value').attr('disabled', 'disabled');
- } else {
- opts.disabled = false;
- $(target).removeAttr('disabled');
- tb.find('.textbox-text,.textbox-value').removeAttr('disabled');
- }
- }
-
- function setReadonly(target, mode){
- var state = $.data(target, 'textbox');
- var opts = state.options;
- opts.readonly = mode==undefined ? true : mode;
- var input = state.textbox.find('.textbox-text');
- input.removeAttr('readonly').removeClass('textbox-text-readonly');
- if (opts.readonly || !opts.editable){
- input.attr('readonly', 'readonly').addClass('textbox-text-readonly');
- }
- }
-
- // function initValue(target){
- // var opts = $(target).textbox('options');
- // var onChange = opts.onChange;
- // opts.onChange = function(){};
- // value = opts.value;
- // $(target).textbox('clear').textbox('setValue', value);
- // opts.onChange = onChange;
- // }
-
- $.fn.textbox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.textbox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.each(function(){
- var input = $(this).textbox('textbox');
- input.validatebox(options, param);
- });
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'textbox');
- if (state){
- $.extend(state.options, options);
- if (options.value != undefined){
- state.options.originalValue = options.value;
- }
- } else {
- state = $.data(this, 'textbox', {
- options: $.extend({}, $.fn.textbox.defaults, $.fn.textbox.parseOptions(this), options),
- textbox: init(this)
- });
- state.options.originalValue = state.options.value;
- }
-
- buildTextBox(this);
- bindEvents(this);
- setSize(this);
- validate(this);
- $(this).textbox('initValue', state.options.value);
- });
- }
-
- $.fn.textbox.methods = {
- options: function(jq){
- return $.data(jq[0], 'textbox').options;
- },
- cloneFrom: function(jq, from){
- return jq.each(function(){
- var t = $(this);
- if (t.data('textbox')){return}
- if (!$(from).data('textbox')){
- $(from).textbox();
- }
- var name = t.attr('name') || '';
- t.addClass('textbox-f').hide();
- t.removeAttr('name').attr('textboxName', name);
- var span = $(from).next().clone().insertAfter(t);
- span.find('input.textbox-value').attr('name', name);
- $.data(this, 'textbox', {
- options: $.extend(true, {}, $(from).textbox('options')),
- textbox: span
- });
- var srcBtn = $(from).textbox('button');
- if (srcBtn.length){
- t.textbox('button').linkbutton($.extend(true, {}, srcBtn.linkbutton('options')));
- }
- bindEvents(this);
- validate(this);
- });
- },
- textbox: function(jq){
- return $.data(jq[0], 'textbox').textbox.find('.textbox-text');
- },
- button: function(jq){
- return $.data(jq[0], 'textbox').textbox.find('.textbox-button');
- },
- destroy: function(jq){
- return jq.each(function(){
- destroy(this);
- });
- },
- resize: function(jq, width){
- return jq.each(function(){
- setSize(this, width);
- });
- },
- disable: function(jq){
- return jq.each(function(){
- setDisabled(this, true);
- bindEvents(this);
- });
- },
- enable: function(jq){
- return jq.each(function(){
- setDisabled(this, false);
- bindEvents(this);
- });
- },
- readonly: function(jq, mode){
- return jq.each(function(){
- setReadonly(this, mode);
- bindEvents(this);
- });
- },
- isValid: function(jq){
- return jq.textbox('textbox').validatebox('isValid');
- },
- clear: function(jq){
- return jq.each(function(){
- $(this).textbox('setValue', '');
- });
- },
- setText: function(jq, value){
- return jq.each(function(){
- var opts = $(this).textbox('options');
- var input = $(this).textbox('textbox');
- if ($(this).textbox('getText') != value){
- opts.value = value;
- input.val(value);
- }
- if (!input.is(':focus')){
- if (value){
- input.removeClass('textbox-prompt');
- } else {
- input.val(opts.prompt).addClass('textbox-prompt');
- }
- }
- $(this).textbox('validate');
- });
- },
- initValue: function(jq, value){
- return jq.each(function(){
- var state = $.data(this, 'textbox');
- state.options.value = '';
- $(this).textbox('setText', value);
- state.textbox.find('.textbox-value').val(value);
- $(this).val(value);
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- var opts = $.data(this, 'textbox').options;
- var oldValue = $(this).textbox('getValue');
- $(this).textbox('initValue', value);
- if (oldValue != value){
- opts.onChange.call(this, value, oldValue);
- }
- });
- },
- getText: function(jq){
- var input = jq.textbox('textbox');
- if (input.is(':focus')){
- return input.val();
- } else {
- return jq.textbox('options').value;
- }
- },
- getValue: function(jq){
- return jq.data('textbox').textbox.find('.textbox-value').val();
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).textbox('options');
- $(this).textbox('setValue', opts.originalValue);
- });
- },
- getIcon: function(jq, index){
- return jq.data('textbox').textbox.find('.textbox-icon:eq('+index+')');
- },
- getTipX: function(jq){
- var state = jq.data('textbox');
- var opts = state.options;
- var tb = state.textbox;
- var input = tb.find('.textbox-text');
- var iconWidth = tb.find('.textbox-addon')._outerWidth();
- var btnWidth = tb.find('.textbox-button')._outerWidth();
- if (opts.tipPosition == 'right'){
- return (opts.iconAlign=='right' ? iconWidth : 0) + (opts.buttonAlign=='right' ? btnWidth : 0) + 1;
- } else if (opts.tipPosition == 'left'){
- return (opts.iconAlign=='left' ? -iconWidth : 0) + (opts.buttonAlign=='left' ? -btnWidth : 0) - 1;
- } else {
- return iconWidth/2*(opts.iconAlign=='right'?1:-1);
- }
- }
- }
-
- $.fn.textbox.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.validatebox.parseOptions(target),
- $.parser.parseOptions(target, [
- 'prompt','iconCls','iconAlign','buttonText','buttonIcon','buttonAlign',
- {multiline:'boolean',editable:'boolean',iconWidth:'number'}
- ]), {
- value: (t.val() || undefined),
- type: (t.attr('type') ? t.attr('type') : undefined),
- disabled: (t.attr('disabled') ? true : undefined),
- readonly: (t.attr('readonly') ? true : undefined)
- });
- }
-
- $.fn.textbox.defaults = $.extend({}, $.fn.validatebox.defaults, {
- width:'auto',
- height:22,
- prompt:'',
- value:'',
- type:'text',
- multiline:false,
- editable:true,
- disabled:false,
- readonly:false,
- icons:[], // {iconCls:'icon-clear',disabled:true,handler:function(e){}}
- iconCls:null,
- iconAlign:'right', // 'left' or 'right'
- iconWidth:18,
- buttonText:'',
- buttonIcon:null,
- buttonAlign:'right',
- inputEvents:{
- blur: function(e){
- var t = $(e.data.target);
- var opts = t.textbox('options');
- t.textbox('setValue', opts.value);
- },
- keydown: function(e){
- if (e.keyCode == 13){
- var t = $(e.data.target);
- t.textbox('setValue', t.textbox('getText'));
- }
- }
- },
- onChange: function(newValue, oldValue){},
- onResize: function(width, height){},
- onClickButton: function(){},
- onClickIcon: function(index){}
- });
- })(jQuery);
- /**
- * filebox - jQuery EasyUI
- *
- * Dependencies:
- * textbox
- *
- */
- (function($){
- var FILE_INDEX = 0;
- function buildFileBox(target){
- var state = $.data(target, 'filebox');
- var opts = state.options;
- var id = 'filebox_file_id_' + (++FILE_INDEX);
- $(target).addClass('filebox-f').textbox($.extend({}, opts, {
- buttonText: opts.buttonText ? ('<label for="' + id + '">' + opts.buttonText + '</label>') : ''
- }));
- $(target).textbox('textbox').attr('readonly','readonly');
- state.filebox = $(target).next().addClass('filebox');
- state.filebox.find('.textbox-value').remove();
- opts.oldValue = "";
- var file = $('<input type="file" class="textbox-value">').appendTo(state.filebox);
- file.attr('id', id).attr('name', $(target).attr('textboxName')||'');
- file.change(function(){
- $(target).filebox('setText', this.value);
- opts.onChange.call(target, this.value, opts.oldValue);
- opts.oldValue = this.value;
- });
- var btn = $(target).filebox('button');
- if (btn.length){
- if (btn.linkbutton('options').disabled){
- file.attr('disabled', 'disabled');
- } else {
- file.removeAttr('disabled');
- }
- }
- }
-
- $.fn.filebox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.filebox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.textbox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'filebox');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'filebox', {
- options: $.extend({}, $.fn.filebox.defaults, $.fn.filebox.parseOptions(this), options)
- });
- }
- buildFileBox(this);
- });
- };
-
- $.fn.filebox.methods = {
- options: function(jq){
- var opts = jq.textbox('options');
- return $.extend($.data(jq[0], 'filebox').options, {
- width: opts.width,
- value: opts.value,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- }
- };
-
- $.fn.filebox.parseOptions = function(target){
- return $.extend({}, $.fn.textbox.parseOptions(target), {
-
- });
- };
-
- $.fn.filebox.defaults = $.extend({}, $.fn.textbox.defaults, {
- buttonIcon: null,
- buttonText: 'Choose File',
- buttonAlign: 'right',
- inputEvents: {}
- });
-
-
- })(jQuery);
- /**
- * searchbox - jQuery EasyUI
- *
- * Dependencies:
- * textbox
- * menubutton
- *
- */
- (function($){
-
- function buildSearchBox(target){
- var state = $.data(target, 'searchbox');
- var opts = state.options;
- var icons = $.extend(true, [], opts.icons);
- icons.push({
- iconCls:'searchbox-button',
- handler:function(e){
- var t = $(e.data.target);
- var opts = t.searchbox('options');
- opts.searcher.call(e.data.target, t.searchbox('getValue'), t.searchbox('getName'));
- }
- });
-
- buildMenu();
- var menuItem = getSelectedItem();
-
- $(target).addClass('searchbox-f').textbox($.extend({}, opts, {
- icons: icons,
- buttonText: (menuItem ? menuItem.text : '')
- }));
- $(target).attr('searchboxName', $(target).attr('textboxName'));
- state.searchbox = $(target).next();
- state.searchbox.addClass('searchbox');
-
- attachMenuItem(menuItem);
-
- function buildMenu(){
- if (opts.menu){
- state.menu = $(opts.menu).menu();
- var menuOpts = state.menu.menu('options');
- var onClick = menuOpts.onClick;
- menuOpts.onClick = function(item){
- attachMenuItem(item);
- onClick.call(this, item);
- }
- } else {
- if (state.menu){state.menu.menu('destroy');}
- state.menu = null;
- }
- }
- function getSelectedItem(){
- if (state.menu){
- var item = state.menu.children('div.menu-item:first');
- state.menu.children('div.menu-item').each(function(){
- var itemOpts = $.extend({}, $.parser.parseOptions(this), {
- selected: ($(this).attr('selected') ? true : undefined)
- });
- if (itemOpts.selected) {
- item = $(this);
- return false;
- }
- });
- return state.menu.menu('getItem', item[0]);
- } else {
- return null;
- }
- }
- function attachMenuItem(item){
- if (!item){return;}
- $(target).textbox('button').menubutton({
- text:item.text,
- iconCls:(item.iconCls||null),
- menu:state.menu,
- menuAlign:opts.buttonAlign,
- plain:false
- });
- state.searchbox.find('input.textbox-value').attr('name', item.name || item.text);
- $(target).searchbox('resize');
- }
- }
-
- $.fn.searchbox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.searchbox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.textbox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'searchbox');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'searchbox', {
- options: $.extend({}, $.fn.searchbox.defaults, $.fn.searchbox.parseOptions(this), options)
- });
- }
- buildSearchBox(this);
- });
- }
-
- $.fn.searchbox.methods = {
- options: function(jq){
- var opts = jq.textbox('options');
- return $.extend($.data(jq[0], 'searchbox').options, {
- width: opts.width,
- value: opts.value,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- },
- menu: function(jq){
- return $.data(jq[0], 'searchbox').menu;
- },
- getName: function(jq){
- return $.data(jq[0], 'searchbox').searchbox.find('input.textbox-value').attr('name');
- },
- selectName: function(jq, name){
- return jq.each(function(){
- var menu = $.data(this, 'searchbox').menu;
- if (menu){
- menu.children('div.menu-item').each(function(){
- var item = menu.menu('getItem', this);
- if (item.name == name){
- $(this).triggerHandler('click');
- return false;
- }
- });
- }
- });
- },
- destroy: function(jq){
- return jq.each(function(){
- var menu = $(this).searchbox('menu');
- if (menu){
- menu.menu('destroy');
- }
- $(this).textbox('destroy');
- });
- }
- };
-
- $.fn.searchbox.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, ['menu']), {
- searcher: (t.attr('searcher') ? eval(t.attr('searcher')) : undefined)
- });
- };
-
- $.fn.searchbox.defaults = $.extend({}, $.fn.textbox.defaults, {
- inputEvents: $.extend({}, $.fn.textbox.defaults.inputEvents, {
- keydown: function(e){
- if (e.keyCode == 13){
- e.preventDefault();
- var t = $(e.data.target);
- var opts = t.searchbox('options');
- t.searchbox('setValue', $(this).val());
- opts.searcher.call(e.data.target, t.searchbox('getValue'), t.searchbox('getName'));
- return false;
- }
- }
- }),
-
- buttonAlign:'left',
- menu:null,
- searcher:function(value,name){}
- });
- })(jQuery);
- /**
- * form - jQuery EasyUI
- *
- */
- (function($){
- /**
- * submit the form
- */
- function ajaxSubmit(target, options){
- var opts = $.data(target, 'form').options;
- $.extend(opts, options||{});
-
- var param = $.extend({}, opts.queryParams);
- if (opts.onSubmit.call(target, param) == false){return;}
- $(target).find('.textbox-text:focus').blur();
-
- var frameId = 'easyui_frame_' + (new Date().getTime());
- var frame = $('<iframe id='+frameId+' name='+frameId+'></iframe>').appendTo('body')
- frame.attr('src', window.ActiveXObject ? 'javascript:false' : 'about:blank');
- frame.css({
- position:'absolute',
- top:-1000,
- left:-1000
- });
- frame.bind('load', cb);
-
- submit(param);
-
- function submit(param){
- var form = $(target);
- if (opts.url){
- form.attr('action', opts.url);
- }
- var t = form.attr('target'), a = form.attr('action');
- form.attr('target', frameId);
- var paramFields = $();
- try {
- for(var n in param){
- var field = $('<input type="hidden" name="' + n + '">').val(param[n]).appendTo(form);
- paramFields = paramFields.add(field);
- }
- checkState();
- form[0].submit();
- } finally {
- form.attr('action', a);
- t ? form.attr('target', t) : form.removeAttr('target');
- paramFields.remove();
- }
- }
-
- function checkState(){
- var f = $('#'+frameId);
- if (!f.length){return}
- try{
- var s = f.contents()[0].readyState;
- if (s && s.toLowerCase() == 'uninitialized'){
- setTimeout(checkState, 100);
- }
- } catch(e){
- cb();
- }
- }
-
- var checkCount = 10;
- function cb(){
- var f = $('#'+frameId);
- if (!f.length){return}
- f.unbind();
- var data = '';
- try{
- var body = f.contents().find('body');
- data = body.html();
- if (data == ''){
- if (--checkCount){
- setTimeout(cb, 100);
- return;
- }
- }
- var ta = body.find('>textarea');
- if (ta.length){
- data = ta.val();
- } else {
- var pre = body.find('>pre');
- if (pre.length){
- data = pre.html();
- }
- }
- } catch(e){
- }
- opts.success(data);
- setTimeout(function(){
- f.unbind();
- f.remove();
- }, 100);
- }
- }
-
- /**
- * load form data
- * if data is a URL string type load from remote site,
- * otherwise load from local data object.
- */
- function load(target, data){
- var opts = $.data(target, 'form').options;
-
- if (typeof data == 'string'){
- var param = {};
- if (opts.onBeforeLoad.call(target, param) == false) return;
-
- $.ajax({
- url: data,
- data: param,
- dataType: 'json',
- success: function(data){
- _load(data);
- },
- error: function(){
- opts.onLoadError.apply(target, arguments);
- }
- });
- } else {
- _load(data);
- }
-
- function _load(data){
- var form = $(target);
- for(var name in data){
- var val = data[name];
- var rr = _checkField(name, val);
- if (!rr.length){
- var count = _loadOther(name, val);
- if (!count){
- $('input[name="'+name+'"]', form).val(val);
- $('textarea[name="'+name+'"]', form).val(val);
- $('select[name="'+name+'"]', form).val(val);
- }
- }
- _loadCombo(name, val);
- }
- opts.onLoadSuccess.call(target, data);
- validate(target);
- }
-
- /**
- * check the checkbox and radio fields
- */
- function _checkField(name, val){
- var rr = $(target).find('input[name="'+name+'"][type=radio], input[name="'+name+'"][type=checkbox]');
- rr._propAttr('checked', false);
- rr.each(function(){
- var f = $(this);
- if (f.val() == String(val) || $.inArray(f.val(), $.isArray(val)?val:[val]) >= 0){
- f._propAttr('checked', true);
- }
- });
- return rr;
- }
-
- function _loadOther(name, val){
- var count = 0;
- var pp = ['textbox','numberbox','slider'];
- for(var i=0; i<pp.length; i++){
- var p = pp[i];
- var f = $(target).find('input['+p+'Name="'+name+'"]');
- if (f.length){
- f[p]('setValue', val);
- count += f.length;
- }
- }
- return count;
- }
-
- function _loadCombo(name, val){
- var form = $(target);
- var cc = ['combobox','combotree','combogrid','datetimebox','datebox','combo'];
- var c = form.find('[comboName="' + name + '"]');
- if (c.length){
- for(var i=0; i<cc.length; i++){
- var type = cc[i];
- if (c.hasClass(type+'-f')){
- if (c[type]('options').multiple){
- c[type]('setValues', val);
- } else {
- c[type]('setValue', val);
- }
- return;
- }
- }
- }
- }
- }
-
- /**
- * clear the form fields
- */
- function clear(target){
- $('input,select,textarea', target).each(function(){
- var t = this.type, tag = this.tagName.toLowerCase();
- if (t == 'text' || t == 'hidden' || t == 'password' || tag == 'textarea'){
- this.value = '';
- } else if (t == 'file'){
- var file = $(this);
- if (!file.hasClass('textbox-value')){
- var newfile = file.clone().val('');
- newfile.insertAfter(file);
- if (file.data('validatebox')){
- file.validatebox('destroy');
- newfile.validatebox();
- } else {
- file.remove();
- }
- }
- } else if (t == 'checkbox' || t == 'radio'){
- this.checked = false;
- } else if (tag == 'select'){
- this.selectedIndex = -1;
- }
-
- });
-
- var t = $(target);
- var plugins = ['textbox','combo','combobox','combotree','combogrid','slider'];
- for(var i=0; i<plugins.length; i++){
- var plugin = plugins[i];
- var r = t.find('.'+plugin+'-f');
- if (r.length && r[plugin]){
- r[plugin]('clear');
- }
- }
- validate(target);
- }
-
- function reset(target){
- target.reset();
- var t = $(target);
-
- var plugins = ['textbox','combo','combobox','combotree','combogrid','datebox','datetimebox','spinner','timespinner','numberbox','numberspinner','slider'];
- for(var i=0; i<plugins.length; i++){
- var plugin = plugins[i];
- var r = t.find('.'+plugin+'-f');
- if (r.length && r[plugin]){
- r[plugin]('reset');
- }
- }
- validate(target);
- }
-
- /**
- * set the form to make it can submit with ajax.
- */
- function setForm(target){
- var options = $.data(target, 'form').options;
- $(target).unbind('.form');
- if (options.ajax){
- $(target).bind('submit.form', function(){
- setTimeout(function(){
- ajaxSubmit(target, options);
- }, 0);
- return false;
- });
- }
- setValidation(target, options.novalidate);
- }
-
- function initForm(target, options){
- options = options || {};
- var state = $.data(target, 'form');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(target, 'form', {
- options: $.extend({}, $.fn.form.defaults, $.fn.form.parseOptions(target), options)
- });
- }
- }
-
- function validate(target){
- if ($.fn.validatebox){
- var t = $(target);
- t.find('.validatebox-text:not(:disabled)').validatebox('validate');
- var invalidbox = t.find('.validatebox-invalid');
- invalidbox.filter(':not(:disabled):first').focus();
- return invalidbox.length == 0;
- }
- return true;
- }
-
- function setValidation(target, novalidate){
- var opts = $.data(target, 'form').options;
- opts.novalidate = novalidate;
- $(target).find('.validatebox-text:not(:disabled)').validatebox(novalidate ? 'disableValidation' : 'enableValidation');
- }
-
- $.fn.form = function(options, param){
- if (typeof options == 'string'){
- this.each(function(){
- initForm(this);
- });
- return $.fn.form.methods[options](this, param);
- }
-
- return this.each(function(){
- initForm(this, options);
- setForm(this);
- });
- };
-
- $.fn.form.methods = {
- options: function(jq){
- return $.data(jq[0], 'form').options;
- },
- submit: function(jq, options){
- return jq.each(function(){
- ajaxSubmit(this, options);
- });
- },
- load: function(jq, data){
- return jq.each(function(){
- load(this, data);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- clear(this);
- });
- },
- reset: function(jq){
- return jq.each(function(){
- reset(this);
- });
- },
- validate: function(jq){
- return validate(jq[0]);
- },
- disableValidation: function(jq){
- return jq.each(function(){
- setValidation(this, true);
- });
- },
- enableValidation: function(jq){
- return jq.each(function(){
- setValidation(this, false);
- });
- }
- };
-
- $.fn.form.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [{ajax:'boolean'}]), {
- url: (t.attr('action') ? t.attr('action') : undefined)
- });
- };
-
- $.fn.form.defaults = {
- novalidate: false,
- ajax: true,
- url: null,
- queryParams: {},
- onSubmit: function(param){return $(this).form('validate');},
- success: function(data){},
- onBeforeLoad: function(param){},
- onLoadSuccess: function(data){},
- onLoadError: function(){}
- };
- })(jQuery);
- /**
- * numberbox - jQuery EasyUI
- *
- * Dependencies:
- * textbox
- *
- */
- (function($){
- function buildNumberBox(target){
- var state = $.data(target, 'numberbox');
- var opts = state.options;
- $(target).addClass('numberbox-f').textbox(opts);
- $(target).textbox('textbox').css({imeMode:"disabled"});
- $(target).attr('numberboxName', $(target).attr('textboxName'));
- state.numberbox = $(target).next();
- state.numberbox.addClass('numberbox');
-
- var initValue = opts.parser.call(target, opts.value);
- var initText = opts.formatter.call(target, initValue);
- $(target).numberbox('initValue', initValue).numberbox('setText', initText);
- }
-
- function setValue(target, value){
- var state = $.data(target, 'numberbox');
- var opts = state.options;
- var value = opts.parser.call(target, value);
- var text = opts.formatter.call(target, value);
- opts.value = value;
- $(target).textbox('setValue', value).textbox('setText', text);
- }
-
- $.fn.numberbox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.numberbox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.textbox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'numberbox');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'numberbox', {
- options: $.extend({}, $.fn.numberbox.defaults, $.fn.numberbox.parseOptions(this), options)
- });
- }
- buildNumberBox(this);
- });
- };
-
- $.fn.numberbox.methods = {
- options: function(jq){
- var opts = jq.data('textbox') ? jq.textbox('options') : {};
- return $.extend($.data(jq[0], 'numberbox').options, {
- width: opts.width,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- },
- fix: function(jq){
- return jq.each(function(){
- $(this).numberbox('setValue', $(this).numberbox('getText'));
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValue(this, value);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- $(this).textbox('clear');
- $(this).numberbox('options').value = '';
- });
- },
- reset: function(jq){
- return jq.each(function(){
- $(this).textbox('reset');
- $(this).numberbox('setValue', $(this).numberbox('getValue'));
- });
- }
- };
-
- $.fn.numberbox.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, [
- 'decimalSeparator','groupSeparator','suffix',
- {min:'number',max:'number',precision:'number'}
- ]), {
- prefix: (t.attr('prefix') ? t.attr('prefix') : undefined)
- });
- };
-
- // Inherited from $.fn.textbox.defaults
- $.fn.numberbox.defaults = $.extend({}, $.fn.textbox.defaults, {
- inputEvents: {
- keypress:function(e){
- var target = e.data.target;
- var opts = $(target).numberbox('options');
- return opts.filter.call(target, e);
- },
- blur:function(e){
- var target = e.data.target;
- $(target).numberbox('setValue', $(target).numberbox('getText'));
- },
- keydown: function(e){
- if (e.keyCode == 13){
- var target = e.data.target;
- $(target).numberbox('setValue', $(target).numberbox('getText'));
- }
- }
- },
- min: null,
- max: null,
- precision: 0,
- decimalSeparator: '.',
- groupSeparator: '',
- prefix: '',
- suffix: '',
-
- filter: function(e){
- var opts = $(this).numberbox('options');
- var s = $(this).numberbox('getText');
- if (e.which == 13){ // ENTER
- return true;
- }
- if (e.which == 45){ //-
- return (s.indexOf('-') == -1 ? true : false);
- }
- var c = String.fromCharCode(e.which);
- if (c == opts.decimalSeparator){
- return (s.indexOf(c) == -1 ? true : false);
- } else if (c == opts.groupSeparator){
- return true;
- } else if ((e.which >= 48 && e.which <= 57 && e.ctrlKey == false && e.shiftKey == false) || e.which == 0 || e.which == 8) {
- return true;
- } else if (e.ctrlKey == true && (e.which == 99 || e.which == 118)) {
- return true;
- } else {
- return false;
- }
- },
- formatter: function(value){
- if (!value) return value;
-
- value = value + '';
- var opts = $(this).numberbox('options');
- var s1 = value, s2 = '';
- var dpos = value.indexOf('.');
- if (dpos >= 0){
- s1 = value.substring(0, dpos);
- s2 = value.substring(dpos+1, value.length);
- }
- if (opts.groupSeparator){
- var p = /(\d+)(\d{3})/;
- while(p.test(s1)){
- s1 = s1.replace(p, '$1' + opts.groupSeparator + '$2');
- }
- }
- if (s2){
- return opts.prefix + s1 + opts.decimalSeparator + s2 + opts.suffix;
- } else {
- return opts.prefix + s1 + opts.suffix;
- }
- },
- parser: function(s){
- s = s + '';
- var opts = $(this).numberbox('options');
- if (parseFloat(s) != s){
- if (opts.prefix) s = $.trim(s.replace(new RegExp('\\'+$.trim(opts.prefix),'g'), ''));
- if (opts.suffix) s = $.trim(s.replace(new RegExp('\\'+$.trim(opts.suffix),'g'), ''));
- if (opts.groupSeparator) s = $.trim(s.replace(new RegExp('\\'+opts.groupSeparator,'g'), ''));
- if (opts.decimalSeparator) s = $.trim(s.replace(new RegExp('\\'+opts.decimalSeparator,'g'), '.'));
- s = s.replace(/\s/g,'');
- }
- var val = parseFloat(s).toFixed(opts.precision);
- if (isNaN(val)) {
- val = '';
- } else if (typeof(opts.min) == 'number' && val < opts.min) {
- val = opts.min.toFixed(opts.precision);
- } else if (typeof(opts.max) == 'number' && val > opts.max) {
- val = opts.max.toFixed(opts.precision);
- }
- return val;
- }
- });
- })(jQuery);
- /**
- * calendar - jQuery EasyUI
- *
- */
- (function($){
-
- function setSize(target, param){
- var opts = $.data(target, 'calendar').options;
- var t = $(target);
- if (param){
- $.extend(opts, {
- width: param.width,
- height: param.height
- });
- }
- t._size(opts, t.parent());
- t.find('.calendar-body')._outerHeight(t.height() - t.find('.calendar-header')._outerHeight());
- if (t.find('.calendar-menu').is(':visible')){
- showSelectMenus(target);
- }
- }
-
- function init(target){
- $(target).addClass('calendar').html(
- '<div class="calendar-header">' +
- '<div class="calendar-nav calendar-prevmonth"></div>' +
- '<div class="calendar-nav calendar-nextmonth"></div>' +
- '<div class="calendar-nav calendar-prevyear"></div>' +
- '<div class="calendar-nav calendar-nextyear"></div>' +
- '<div class="calendar-title">' +
- '<span class="calendar-text"></span>' +
- '</div>' +
- '</div>' +
- '<div class="calendar-body">' +
- '<div class="calendar-menu">' +
- '<div class="calendar-menu-year-inner">' +
- '<span class="calendar-nav calendar-menu-prev"></span>' +
- '<span><input class="calendar-menu-year" type="text"></input></span>' +
- '<span class="calendar-nav calendar-menu-next"></span>' +
- '</div>' +
- '<div class="calendar-menu-month-inner">' +
- '</div>' +
- '</div>' +
- '</div>'
- );
-
-
- $(target).bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(target);
- }
- return false;
- });
- }
-
- function bindEvents(target){
- var opts = $.data(target, 'calendar').options;
- var menu = $(target).find('.calendar-menu');
- menu.find('.calendar-menu-year').unbind('.calendar').bind('keypress.calendar', function(e){
- if (e.keyCode == 13){
- setDate(true);
- }
- });
- $(target).unbind('.calendar').bind('mouseover.calendar', function(e){
- var t = toTarget(e.target);
- if (t.hasClass('calendar-nav') || t.hasClass('calendar-text') || (t.hasClass('calendar-day') && !t.hasClass('calendar-disabled'))){
- t.addClass('calendar-nav-hover');
- }
- }).bind('mouseout.calendar', function(e){
- var t = toTarget(e.target);
- if (t.hasClass('calendar-nav') || t.hasClass('calendar-text') || (t.hasClass('calendar-day') && !t.hasClass('calendar-disabled'))){
- t.removeClass('calendar-nav-hover');
- }
- }).bind('click.calendar', function(e){
- var t = toTarget(e.target);
- if (t.hasClass('calendar-menu-next') || t.hasClass('calendar-nextyear')){
- showYear(1);
- } else if (t.hasClass('calendar-menu-prev') || t.hasClass('calendar-prevyear')){
- showYear(-1);
- } else if (t.hasClass('calendar-menu-month')){
- menu.find('.calendar-selected').removeClass('calendar-selected');
- t.addClass('calendar-selected');
- setDate(true);
- } else if (t.hasClass('calendar-prevmonth')){
- showMonth(-1);
- } else if (t.hasClass('calendar-nextmonth')){
- showMonth(1);
- } else if (t.hasClass('calendar-text')){
- if (menu.is(':visible')){
- menu.hide();
- } else {
- showSelectMenus(target);
- }
- } else if (t.hasClass('calendar-day')){
- if (t.hasClass('calendar-disabled')){return}
- var oldValue = opts.current;
- t.closest('div.calendar-body').find('.calendar-selected').removeClass('calendar-selected');
- t.addClass('calendar-selected');
- var parts = t.attr('abbr').split(',');
- var y = parseInt(parts[0]);
- var m = parseInt(parts[1]);
- var d = parseInt(parts[2]);
- opts.current = new Date(y, m-1, d);
- opts.onSelect.call(target, opts.current);
- if (!oldValue || oldValue.getTime() != opts.current.getTime()){
- opts.onChange.call(target, opts.current, oldValue);
- }
- if (opts.year != y || opts.month != m){
- opts.year = y;
- opts.month = m;
- show(target);
- }
- }
- });
- function toTarget(t){
- var day = $(t).closest('.calendar-day');
- if (day.length){
- return day;
- } else {
- return $(t);
- }
- }
- function setDate(hideMenu){
- var menu = $(target).find('.calendar-menu');
- var year = menu.find('.calendar-menu-year').val();
- var month = menu.find('.calendar-selected').attr('abbr');
- if (!isNaN(year)){
- opts.year = parseInt(year);
- opts.month = parseInt(month);
- show(target);
- }
- if (hideMenu){menu.hide()}
- }
- function showYear(delta){
- opts.year += delta;
- show(target);
- menu.find('.calendar-menu-year').val(opts.year);
- }
- function showMonth(delta){
- opts.month += delta;
- if (opts.month > 12){
- opts.year++;
- opts.month = 1;
- } else if (opts.month < 1){
- opts.year--;
- opts.month = 12;
- }
- show(target);
-
- menu.find('td.calendar-selected').removeClass('calendar-selected');
- menu.find('td:eq(' + (opts.month-1) + ')').addClass('calendar-selected');
- }
- }
-
- /**
- * show the select menu that can change year or month, if the menu is not be created then create it.
- */
- function showSelectMenus(target){
- var opts = $.data(target, 'calendar').options;
- $(target).find('.calendar-menu').show();
-
- if ($(target).find('.calendar-menu-month-inner').is(':empty')){
- $(target).find('.calendar-menu-month-inner').empty();
- var t = $('<table class="calendar-mtable"></table>').appendTo($(target).find('.calendar-menu-month-inner'));
- var idx = 0;
- for(var i=0; i<3; i++){
- var tr = $('<tr></tr>').appendTo(t);
- for(var j=0; j<4; j++){
- $('<td class="calendar-nav calendar-menu-month"></td>').html(opts.months[idx++]).attr('abbr',idx).appendTo(tr);
- }
- }
- }
-
- var body = $(target).find('.calendar-body');
- var sele = $(target).find('.calendar-menu');
- var seleYear = sele.find('.calendar-menu-year-inner');
- var seleMonth = sele.find('.calendar-menu-month-inner');
-
- seleYear.find('input').val(opts.year).focus();
- seleMonth.find('td.calendar-selected').removeClass('calendar-selected');
- seleMonth.find('td:eq('+(opts.month-1)+')').addClass('calendar-selected');
-
- sele._outerWidth(body._outerWidth());
- sele._outerHeight(body._outerHeight());
- seleMonth._outerHeight(sele.height() - seleYear._outerHeight());
- }
-
- /**
- * get weeks data.
- */
- function getWeeks(target, year, month){
- var opts = $.data(target, 'calendar').options;
- var dates = [];
- var lastDay = new Date(year, month, 0).getDate();
- for(var i=1; i<=lastDay; i++) dates.push([year,month,i]);
-
- // group date by week
- var weeks = [], week = [];
- var memoDay = -1;
- while(dates.length > 0){
- var date = dates.shift();
- week.push(date);
- var day = new Date(date[0],date[1]-1,date[2]).getDay();
- if (memoDay == day){
- day = 0;
- } else if (day == (opts.firstDay==0 ? 7 : opts.firstDay) - 1){
- weeks.push(week);
- week = [];
- }
- memoDay = day;
- }
- if (week.length){
- weeks.push(week);
- }
-
- var firstWeek = weeks[0];
- if (firstWeek.length < 7){
- while(firstWeek.length < 7){
- var firstDate = firstWeek[0];
- var date = new Date(firstDate[0],firstDate[1]-1,firstDate[2]-1)
- firstWeek.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]);
- }
- } else {
- var firstDate = firstWeek[0];
- var week = [];
- for(var i=1; i<=7; i++){
- var date = new Date(firstDate[0], firstDate[1]-1, firstDate[2]-i);
- week.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]);
- }
- weeks.unshift(week);
- }
-
- var lastWeek = weeks[weeks.length-1];
- while(lastWeek.length < 7){
- var lastDate = lastWeek[lastWeek.length-1];
- var date = new Date(lastDate[0], lastDate[1]-1, lastDate[2]+1);
- lastWeek.push([date.getFullYear(), date.getMonth()+1, date.getDate()]);
- }
- if (weeks.length < 6){
- var lastDate = lastWeek[lastWeek.length-1];
- var week = [];
- for(var i=1; i<=7; i++){
- var date = new Date(lastDate[0], lastDate[1]-1, lastDate[2]+i);
- week.push([date.getFullYear(), date.getMonth()+1, date.getDate()]);
- }
- weeks.push(week);
- }
-
- return weeks;
- }
-
- /**
- * show the calendar day.
- */
- function show(target){
- var opts = $.data(target, 'calendar').options;
- if (opts.current && !opts.validator.call(target, opts.current)){
- opts.current = null;
- }
-
- var now = new Date();
- var todayInfo = now.getFullYear()+','+(now.getMonth()+1)+','+now.getDate();
- var currentInfo = opts.current ? (opts.current.getFullYear()+','+(opts.current.getMonth()+1)+','+opts.current.getDate()) : '';
- // calulate the saturday and sunday index
- var saIndex = 6 - opts.firstDay;
- var suIndex = saIndex + 1;
- if (saIndex >= 7) saIndex -= 7;
- if (suIndex >= 7) suIndex -= 7;
-
- $(target).find('.calendar-title span').html(opts.months[opts.month-1] + ' ' + opts.year);
-
- var body = $(target).find('div.calendar-body');
- body.children('table').remove();
-
- var data = ['<table class="calendar-dtable" cellspacing="0" cellpadding="0" border="0">'];
- data.push('<thead><tr>');
- for(var i=opts.firstDay; i<opts.weeks.length; i++){
- data.push('<th>'+opts.weeks[i]+'</th>');
- }
- for(var i=0; i<opts.firstDay; i++){
- data.push('<th>'+opts.weeks[i]+'</th>');
- }
- data.push('</tr></thead>');
-
- data.push('<tbody>');
- var weeks = getWeeks(target, opts.year, opts.month);
- for(var i=0; i<weeks.length; i++){
- var week = weeks[i];
- var cls = '';
- if (i == 0){cls = 'calendar-first';}
- else if (i == weeks.length - 1){cls = 'calendar-last';}
- data.push('<tr class="' + cls + '">');
- for(var j=0; j<week.length; j++){
- var day = week[j];
- var s = day[0]+','+day[1]+','+day[2];
- var dvalue = new Date(day[0], parseInt(day[1])-1, day[2]);
- var d = opts.formatter.call(target, dvalue);
- var css = opts.styler.call(target, dvalue);
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (css){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
-
- var cls = 'calendar-day';
- if (!(opts.year == day[0] && opts.month == day[1])){
- cls += ' calendar-other-month';
- }
- if (s == todayInfo){cls += ' calendar-today';}
- if (s == currentInfo){cls += ' calendar-selected';}
- if (j == saIndex){cls += ' calendar-saturday';}
- else if (j == suIndex){cls += ' calendar-sunday';}
- if (j == 0){cls += ' calendar-first';}
- else if (j == week.length-1){cls += ' calendar-last';}
-
- cls += ' ' + classValue;
- if (!opts.validator.call(target, dvalue)){
- cls += ' calendar-disabled';
- }
-
- data.push('<td class="' + cls + '" abbr="' + s + '" style="' + styleValue + '">' + d + '</td>');
- }
- data.push('</tr>');
- }
- data.push('</tbody>');
- data.push('</table>');
-
- body.append(data.join(''));
- body.children('table.calendar-dtable').prependTo(body);
- opts.onNavigate.call(target, opts.year, opts.month);
- }
-
- $.fn.calendar = function(options, param){
- if (typeof options == 'string'){
- return $.fn.calendar.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'calendar');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'calendar', {
- options:$.extend({}, $.fn.calendar.defaults, $.fn.calendar.parseOptions(this), options)
- });
- init(this);
- }
- if (state.options.border == false){
- $(this).addClass('calendar-noborder');
- }
- setSize(this);
- bindEvents(this);
- show(this);
- $(this).find('div.calendar-menu').hide(); // hide the calendar menu
- });
- };
-
- $.fn.calendar.methods = {
- options: function(jq){
- return $.data(jq[0], 'calendar').options;
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- moveTo: function(jq, date){
- return jq.each(function(){
- var opts = $(this).calendar('options');
- if (opts.validator.call(this, date)){
- var oldValue = opts.current;
- $(this).calendar({
- year: date.getFullYear(),
- month: date.getMonth()+1,
- current: date
- });
- if (!oldValue || oldValue.getTime() != date.getTime()){
- opts.onChange.call(this, opts.current, oldValue);
- }
- }
- });
- }
- };
-
- $.fn.calendar.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [
- {firstDay:'number',fit:'boolean',border:'boolean'}
- ]));
- };
-
- $.fn.calendar.defaults = {
- width:180,
- height:180,
- fit:false,
- border:true,
- firstDay:0,
- weeks:['S','M','T','W','T','F','S'],
- months:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- year:new Date().getFullYear(),
- month:new Date().getMonth()+1,
- current:(function(){
- var d = new Date();
- return new Date(d.getFullYear(), d.getMonth(), d.getDate());
- })(),
-
- formatter:function(date){return date.getDate()},
- styler:function(date){return ''},
- validator:function(date){return true},
-
- onSelect: function(date){},
- onChange: function(newDate, oldDate){},
- onNavigate: function(year, month){}
- };
- })(jQuery);
- /**
- * spinner - jQuery EasyUI
- *
- * Dependencies:
- * textbox
- *
- */
- (function($){
- function buildSpinner(target){
- var state = $.data(target, 'spinner');
- var opts = state.options;
- var icons = $.extend(true, [], opts.icons);
- icons.push({
- iconCls:'spinner-arrow',
- handler:function(e){
- doSpin(e);
- }
- });
- $(target).addClass('spinner-f').textbox($.extend({}, opts, {
- icons: icons
- }));
- var arrowIcon = $(target).textbox('getIcon', icons.length-1);
- arrowIcon.append('<a href="javascript:void(0)" class="spinner-arrow-up" tabindex="-1"></a>');
- arrowIcon.append('<a href="javascript:void(0)" class="spinner-arrow-down" tabindex="-1"></a>');
-
- $(target).attr('spinnerName', $(target).attr('textboxName'));
- state.spinner = $(target).next();
- state.spinner.addClass('spinner');
- }
-
- function doSpin(e){
- var target = e.data.target;
- var opts = $(target).spinner('options');
- var up = $(e.target).closest('a.spinner-arrow-up');
- if (up.length){
- opts.spin.call(target, false);
- opts.onSpinUp.call(target);
- $(target).spinner('validate');
- }
- var down = $(e.target).closest('a.spinner-arrow-down');
- if (down.length){
- opts.spin.call(target, true);
- opts.onSpinDown.call(target);
- $(target).spinner('validate');
- }
- }
-
- $.fn.spinner = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.spinner.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.textbox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'spinner');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'spinner', {
- options: $.extend({}, $.fn.spinner.defaults, $.fn.spinner.parseOptions(this), options)
- });
- }
- buildSpinner(this);
- });
- };
-
- $.fn.spinner.methods = {
- options: function(jq){
- var opts = jq.textbox('options');
- return $.extend($.data(jq[0], 'spinner').options, {
- width: opts.width,
- value: opts.value,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- }
- };
-
- $.fn.spinner.parseOptions = function(target){
- return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, [
- 'min','max',{increment:'number'}
- ]));
- };
-
- $.fn.spinner.defaults = $.extend({}, $.fn.textbox.defaults, {
- min: null,
- max: null,
- increment: 1,
- spin: function(down){}, // the function to implement the spin button clicking
- onSpinUp: function(){},
- onSpinDown: function(){}
- });
- })(jQuery);
- /**
- * numberspinner - jQuery EasyUI
- *
- * Dependencies:
- * spinner
- * numberbox
- */
- (function($){
- function create(target){
- $(target).addClass('numberspinner-f');
- var opts = $.data(target, 'numberspinner').options;
- $(target).numberbox(opts).spinner(opts);
- $(target).numberbox('setValue', opts.value);
- }
-
- function doSpin(target, down){
- var opts = $.data(target, 'numberspinner').options;
- var v = parseFloat($(target).numberbox('getValue') || opts.value) || 0;
- if (down){
- v -= opts.increment;
- } else {
- v += opts.increment;
- }
- $(target).numberbox('setValue', v);
- }
-
- $.fn.numberspinner = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.numberspinner.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.numberbox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'numberspinner');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'numberspinner', {
- options: $.extend({}, $.fn.numberspinner.defaults, $.fn.numberspinner.parseOptions(this), options)
- });
- }
- create(this);
- });
- };
-
- $.fn.numberspinner.methods = {
- options: function(jq){
- var opts = jq.numberbox('options');
- return $.extend($.data(jq[0], 'numberspinner').options, {
- width: opts.width,
- value: opts.value,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- }
- };
-
- $.fn.numberspinner.parseOptions = function(target){
- return $.extend({}, $.fn.spinner.parseOptions(target), $.fn.numberbox.parseOptions(target), {
- });
- };
-
- $.fn.numberspinner.defaults = $.extend({}, $.fn.spinner.defaults, $.fn.numberbox.defaults, {
- spin: function(down){doSpin(this, down);}
- });
- })(jQuery);
- /**
- * timespinner - jQuery EasyUI
- *
- * Dependencies:
- * spinner
- *
- */
- (function($){
- function getSelectionStart(target){
- var start = 0;
- if (target.selectionStart){
- start = target.selectionStart;
- } else if (target.createTextRange){
- var range = target.createTextRange();
- var s = document.selection.createRange();
- s.setEndPoint("StartToStart", range);
- start = s.text.length;
- }
- return start;
- }
-
- function setSelectionRange(target, start, end){
- if (target.selectionStart){
- target.setSelectionRange(start, end);
- } else if (target.createTextRange){
- var range = target.createTextRange();
- range.collapse();
- range.moveEnd('character', end);
- range.moveStart('character', start);
- range.select();
- }
- }
-
- function create(target){
- var opts = $.data(target, 'timespinner').options;
- $(target).addClass('timespinner-f').spinner(opts);
- var initValue = opts.formatter.call(target, opts.parser.call(target, opts.value));
- $(target).timespinner('initValue', initValue);
- }
-
- function clickHandler(e){
- var target = e.data.target;
- var opts = $.data(target, 'timespinner').options;
- var start = getSelectionStart(this);
- for(var i=0; i<opts.selections.length; i++){
- var range = opts.selections[i];
- if (start >= range[0] && start <= range[1]){
- highlight(target, i);
- return;
- }
- }
- }
-
- /**
- * highlight the hours or minutes or seconds.
- */
- function highlight(target, index){
- var opts = $.data(target, 'timespinner').options;
- if (index != undefined){
- opts.highlight = index;
- }
- var range = opts.selections[opts.highlight];
- if (range){
- var tb = $(target).timespinner('textbox');
- setSelectionRange(tb[0], range[0], range[1]);
- tb.focus();
- }
- }
-
- function setValue(target, value){
- var opts = $.data(target, 'timespinner').options;
- var value = opts.parser.call(target, value);
- var text = opts.formatter.call(target, value);
- $(target).spinner('setValue', text);
- }
-
- function doSpin(target, down){
- var opts = $.data(target, 'timespinner').options;
- var s = $(target).timespinner('getValue');
- var range = opts.selections[opts.highlight];
- var s1 = s.substring(0, range[0]);
- var s2 = s.substring(range[0], range[1]);
- var s3 = s.substring(range[1]);
- var v = s1 + ((parseInt(s2)||0) + opts.increment*(down?-1:1)) + s3;
- $(target).timespinner('setValue', v);
- highlight(target);
- }
-
- $.fn.timespinner = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.timespinner.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.spinner(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'timespinner');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'timespinner', {
- options: $.extend({}, $.fn.timespinner.defaults, $.fn.timespinner.parseOptions(this), options)
- });
- }
- create(this);
- });
- };
-
- $.fn.timespinner.methods = {
- options: function(jq){
- var opts = jq.data('spinner') ? jq.spinner('options') : {};
- return $.extend($.data(jq[0], 'timespinner').options, {
- width: opts.width,
- value: opts.value,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValue(this, value);
- });
- },
- getHours: function(jq){
- var opts = $.data(jq[0], 'timespinner').options;
- var vv = jq.timespinner('getValue').split(opts.separator);
- return parseInt(vv[0], 10);
- },
- getMinutes: function(jq){
- var opts = $.data(jq[0], 'timespinner').options;
- var vv = jq.timespinner('getValue').split(opts.separator);
- return parseInt(vv[1], 10);
- },
- getSeconds: function(jq){
- var opts = $.data(jq[0], 'timespinner').options;
- var vv = jq.timespinner('getValue').split(opts.separator);
- return parseInt(vv[2], 10) || 0;
- }
- };
-
- $.fn.timespinner.parseOptions = function(target){
- return $.extend({}, $.fn.spinner.parseOptions(target), $.parser.parseOptions(target,[
- 'separator',{showSeconds:'boolean',highlight:'number'}
- ]));
- };
-
- $.fn.timespinner.defaults = $.extend({}, $.fn.spinner.defaults, {
- inputEvents: $.extend({}, $.fn.spinner.defaults.inputEvents, {
- click: function(e){
- clickHandler.call(this, e);
- },
- blur: function(e){
- var t = $(e.data.target);
- t.timespinner('setValue', t.timespinner('getText'));
- },
- keydown: function(e){
- if (e.keyCode == 13){
- var t = $(e.data.target);
- t.timespinner('setValue', t.timespinner('getText'));
- }
- }
- }),
- formatter: function(date){
- if (!date){return '';}
- var opts = $(this).timespinner('options');
- var tt = [formatN(date.getHours()), formatN(date.getMinutes())];
- if (opts.showSeconds){
- tt.push(formatN(date.getSeconds()));
- }
- return tt.join(opts.separator);
-
- function formatN(value){
- return (value < 10 ? '0' : '') + value;
- }
- },
- parser: function(s){
- var opts = $(this).timespinner('options');
- var date = parseD(s);
- if (date){
- var min = parseD(opts.min);
- var max = parseD(opts.max);
- if (min && min > date){date = min;}
- if (max && max < date){date = max;}
- }
- return date;
-
- function parseD(s){
- if (!s){return null;}
- var tt = s.split(opts.separator);
- return new Date(1900, 0, 0, parseInt(tt[0],10)||0, parseInt(tt[1],10)||0, parseInt(tt[2],10)||0);
- }
- if (!s){return null;}
- var tt = s.split(opts.separator);
- return new Date(1900, 0, 0, parseInt(tt[0],10)||0, parseInt(tt[1],10)||0, parseInt(tt[2],10)||0);
- },
- selections:[[0,2],[3,5],[6,8]],
- separator: ':',
- showSeconds: false,
- highlight: 0, // The field to highlight initially, 0 = hours, 1 = minutes, ...
- spin: function(down){doSpin(this, down);}
- });
- })(jQuery);
- /**
- * datetimespinner - jQuery EasyUI
- *
- * Dependencies:
- * timespinner
- *
- */
- (function($){
- function create(target){
- var opts = $.data(target, 'datetimespinner').options;
- $(target).addClass('datetimespinner-f').timespinner(opts);
- }
-
- $.fn.datetimespinner = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.datetimespinner.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.timespinner(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'datetimespinner');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'datetimespinner', {
- options: $.extend({}, $.fn.datetimespinner.defaults, $.fn.datetimespinner.parseOptions(this), options)
- });
- }
- create(this);
- });
- };
-
- $.fn.datetimespinner.methods = {
- options: function(jq){
- var opts = jq.timespinner('options');
- return $.extend($.data(jq[0], 'datetimespinner').options, {
- width: opts.width,
- value: opts.value,
- originalValue: opts.originalValue,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- }
- };
-
- $.fn.datetimespinner.parseOptions = function(target){
- return $.extend({}, $.fn.timespinner.parseOptions(target), $.parser.parseOptions(target, [
- ]));
- };
-
- $.fn.datetimespinner.defaults = $.extend({}, $.fn.timespinner.defaults, {
- formatter:function(date){
- if (!date){return '';}
- return $.fn.datebox.defaults.formatter.call(this, date) + ' ' + $.fn.timespinner.defaults.formatter.call(this, date);
- },
- parser:function(s){
- s = $.trim(s);
- if (!s){return null;}
- var dt = s.split(' ');
- var date1 = $.fn.datebox.defaults.parser.call(this, dt[0]);
- if (dt.length < 2){
- return date1;
- }
- var date2 = $.fn.timespinner.defaults.parser.call(this, dt[1]);
- return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate(), date2.getHours(), date2.getMinutes(), date2.getSeconds());
- },
- selections:[[0,2],[3,5],[6,10],[11,13],[14,16],[17,19]]
- });
- })(jQuery);
- /**
- * datagrid - jQuery EasyUI
- *
- * Dependencies:
- * panel
- * resizable
- * linkbutton
- * pagination
- *
- */
- (function($){
- var DATAGRID_SERNO = 0;
- /**
- * Get the index of array item, return -1 when the item is not found.
- */
- function indexOfArray(a,o){
- for(var i=0,len=a.length; i<len; i++){
- if (a[i] == o) return i;
- }
- return -1;
- }
- /**
- * Remove array item, 'o' parameter can be item object or id field name.
- * When 'o' parameter is the id field name, the 'id' parameter is valid.
- */
- function removeArrayItem(a,o,id){
- if (typeof o == 'string'){
- for(var i=0,len=a.length; i<len; i++){
- if (a[i][o] == id){
- a.splice(i, 1);
- return;
- }
- }
- } else {
- var index = indexOfArray(a,o);
- if (index != -1){
- a.splice(index, 1);
- }
- }
- }
- /**
- * Add un-duplicate array item, 'o' parameter is the id field name, if the 'r' object is exists, deny the action.
- */
- function addArrayItem(a,o,r){
- for(var i=0,len=a.length; i<len; i++){
- if (a[i][o] == r[o]){return;}
- }
- a.push(r);
- }
-
- function createStyleSheet(target){
- var dgState = $.data(target, 'datagrid');
- var opts = dgState.options;
- var panel = dgState.panel;
- var dc = dgState.dc;
-
- var ss = null;
- if (opts.sharedStyleSheet){
- ss = typeof opts.sharedStyleSheet == 'boolean' ? 'head' : opts.sharedStyleSheet;
- } else {
- ss = panel.closest('div.datagrid-view');
- if (!ss.length){ss = dc.view};
- }
-
- var cc = $(ss);
- var state = $.data(cc[0], 'ss');
- if (!state){
- state = $.data(cc[0], 'ss', {
- cache: {},
- dirty: []
- });
- }
- return {
- add: function(lines){
- var ss = ['<style type="text/css" easyui="true">'];
- for(var i=0; i<lines.length; i++){
- state.cache[lines[i][0]] = {width: lines[i][1]};
- }
- var index = 0;
- for(var s in state.cache){
- var item = state.cache[s];
- item.index = index++;
- ss.push(s + '{width:' + item.width + '}');
- }
- ss.push('</style>');
- $(ss.join('\n')).appendTo(cc);
- cc.children('style[easyui]:not(:last)').remove();
- // setTimeout(function(){
- // cc.children('style[easyui]:not(:last)').remove();
- // }, 0);
- },
- getRule: function(index){
- var style = cc.children('style[easyui]:last')[0];
- var styleSheet = style.styleSheet ? style.styleSheet : (style.sheet || document.styleSheets[document.styleSheets.length-1]);
- var rules = styleSheet.cssRules || styleSheet.rules;
- return rules[index];
- },
- set: function(selector, width){
- var item = state.cache[selector];
- if (item){
- item.width = width;
- var rule = this.getRule(item.index);
- if (rule){
- rule.style['width'] = width;
- }
- }
- },
- remove: function(selector){
- var tmp = [];
- for(var s in state.cache){
- if (s.indexOf(selector) == -1){
- tmp.push([s, state.cache[s].width]);
- }
- }
- state.cache = {};
- this.add(tmp);
- },
- dirty: function(selector){
- if (selector){
- state.dirty.push(selector);
- }
- },
- clean: function(){
- for(var i=0; i<state.dirty.length; i++){
- this.remove(state.dirty[i]);
- }
- state.dirty = [];
- }
- }
- }
-
-
- function setSize(target, param) {
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var panel = state.panel;
-
- if (param){
- $.extend(opts, param);
- }
-
- if (opts.fit == true){
- var p = panel.panel('panel').parent();
- opts.width = p.width();
- opts.height = p.height();
- }
-
- panel.panel('resize', opts);
- }
-
- function setBodySize(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var wrap = state.panel;
- var innerWidth = wrap.width();
- var innerHeight = wrap.height();
-
- var view = dc.view;
- var view1 = dc.view1;
- var view2 = dc.view2;
- var header1 = view1.children('div.datagrid-header');
- var header2 = view2.children('div.datagrid-header');
- var table1 = header1.find('table');
- var table2 = header2.find('table');
-
- // set view width
- view.width(innerWidth);
- var headerInner = header1.children('div.datagrid-header-inner').show();
- view1.width(headerInner.find('table').width());
- if (!opts.showHeader) headerInner.hide();
- view2.width(innerWidth - view1._outerWidth());
- view1.children('div.datagrid-header,div.datagrid-body,div.datagrid-footer').width(view1.width());
- view2.children('div.datagrid-header,div.datagrid-body,div.datagrid-footer').width(view2.width());
-
- // set header height
- var hh;
- header1.add(header2).css('height', '');
- table1.add(table2).css('height', '');
- hh = Math.max(table1.height(), table2.height());
- hh=40;
- table1.add(table2).height(hh);
- header1.add(header2)._outerHeight(hh);
-
- // set body height
- dc.body1.add(dc.body2).children('table.datagrid-btable-frozen').css({
- position: 'absolute',
- top: dc.header2._outerHeight()
- });
- var frozenHeight = dc.body2.children('table.datagrid-btable-frozen')._outerHeight();
- var fixedHeight = frozenHeight
- + view2.children('div.datagrid-header')._outerHeight()
- + view2.children('div.datagrid-footer')._outerHeight()
- + wrap.children('div.datagrid-toolbar')._outerHeight();
- wrap.children('div.datagrid-pager').each(function(){
- fixedHeight += $(this)._outerHeight();
- });
- var distance = wrap.outerHeight() - wrap.height();
- var minHeight = wrap._size('minHeight') || '';
- var maxHeight = wrap._size('maxHeight') || '';
- view1.add(view2).children('div.datagrid-body').css({
- marginTop: frozenHeight,
- height: (isNaN(parseInt(opts.height)) ? '' : (innerHeight-fixedHeight)),
- minHeight: (minHeight ? minHeight-distance-fixedHeight : ''),
- maxHeight: (maxHeight ? maxHeight-distance-fixedHeight : '')
- });
-
- view.height(view2.height());
- }
-
- function fixRowHeight(target, index, forceFix){
- var rows = $.data(target, 'datagrid').data.rows;
- var opts = $.data(target, 'datagrid').options;
- var dc = $.data(target, 'datagrid').dc;
-
- if (!dc.body1.is(':empty') && (!opts.nowrap || opts.autoRowHeight || forceFix)){
- if (index != undefined){
- var tr1 = opts.finder.getTr(target, index, 'body', 1);
- var tr2 = opts.finder.getTr(target, index, 'body', 2);
- setHeight(tr1, tr2);
- } else {
- var tr1 = opts.finder.getTr(target, 0, 'allbody', 1);
- var tr2 = opts.finder.getTr(target, 0, 'allbody', 2);
- setHeight(tr1, tr2);
- if (opts.showFooter){
- var tr1 = opts.finder.getTr(target, 0, 'allfooter', 1);
- var tr2 = opts.finder.getTr(target, 0, 'allfooter', 2);
- setHeight(tr1, tr2);
- }
- }
- }
-
- setBodySize(target);
- if (opts.height == 'auto'){
- var body1 = dc.body1.parent();
- var body2 = dc.body2;
- var csize = getContentSize(body2);
- var height = csize.height;
- if (csize.width > body2.width()){
- height += 18;
- }
- height -= parseInt(body2.css('marginTop')) || 0;
- body1.height(height);
- body2.height(height);
- dc.view.height(dc.view2.height());
- }
- dc.body2.triggerHandler('scroll');
-
- // set body row or footer row height
- function setHeight(trs1, trs2){
- for(var i=0; i<trs2.length; i++){
- var tr1 = $(trs1[i]);
- var tr2 = $(trs2[i]);
- tr1.css('height', '');
- tr2.css('height', '');
- var height = Math.max(tr1.height(), tr2.height());
- tr1.css('height', height);
- tr2.css('height', height);
- }
- }
- // get content size of a container(div)
- function getContentSize(cc){
- var width = 0;
- var height = 0;
- $(cc).children().each(function(){
- var c = $(this);
- if (c.is(':visible')){
- height += c._outerHeight();
- if (width < c._outerWidth()){
- width = c._outerWidth();
- }
- }
- });
- return {width:width,height:height};
- }
- }
-
- function freezeRow(target, index){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- if (!dc.body2.children('table.datagrid-btable-frozen').length){
- dc.body1.add(dc.body2).prepend('<table class="datagrid-btable datagrid-btable-frozen" cellspacing="0" cellpadding="0"></table>');
- }
- moveTr(true);
- moveTr(false);
- setBodySize(target);
- function moveTr(frozen){
- var serno = frozen ? 1 : 2;
- var tr = opts.finder.getTr(target, index, 'body', serno);
- (frozen ? dc.body1 : dc.body2).children('table.datagrid-btable-frozen').append(tr);
- }
- }
-
- /**
- * wrap and return the grid object, fields and columns
- */
- function wrapGrid(target, rownumbers) {
- function getColumns(){
- var frozenColumns = [];
- var columns = [];
- $(target).children('thead').each(function(){
- var opt = $.parser.parseOptions(this, [{frozen:'boolean'}]);
- $(this).find('tr').each(function(){
- var cols = [];
- $(this).find('th').each(function(){
- var th = $(this);
- var col = $.extend({}, $.parser.parseOptions(this, [
- 'field','align','halign','order','width',
- {sortable:'boolean',checkbox:'boolean',resizable:'boolean',fixed:'boolean'},
- {rowspan:'number',colspan:'number'}
- ]), {
- title: (th.html() || undefined),
- hidden: (th.attr('hidden') ? true : undefined),
- formatter: (th.attr('formatter') ? eval(th.attr('formatter')) : undefined),
- styler: (th.attr('styler') ? eval(th.attr('styler')) : undefined),
- sorter: (th.attr('sorter') ? eval(th.attr('sorter')) : undefined)
- });
- if (col.width && String(col.width).indexOf('%')==-1){
- col.width = parseInt(col.width);
- }
- // if (!col.align) col.align = 'left';
- if (th.attr('editor')){
- var s = $.trim(th.attr('editor'));
- if (s.substr(0,1) == '{'){
- col.editor = eval('(' + s + ')');
- } else {
- col.editor = s;
- }
- }
-
- cols.push(col);
- });
-
- opt.frozen ? frozenColumns.push(cols) : columns.push(cols);
- });
- });
- return [frozenColumns, columns];
- }
-
- var panel = $(
- '<div class="datagrid-wrap">' +
- '<div class="datagrid-view">' +
- '<div class="datagrid-view1">' +
- '<div class="datagrid-header">' +
- '<div class="datagrid-header-inner"></div>' +
- '</div>' +
- '<div class="datagrid-body">' +
- '<div class="datagrid-body-inner"></div>' +
- '</div>' +
- '<div class="datagrid-footer">' +
- '<div class="datagrid-footer-inner"></div>' +
- '</div>' +
- '</div>' +
- '<div class="datagrid-view2">' +
- '<div class="datagrid-header">' +
- '<div class="datagrid-header-inner"></div>' +
- '</div>' +
- '<div class="datagrid-body"></div>' +
- '<div class="datagrid-footer">' +
- '<div class="datagrid-footer-inner"></div>' +
- '</div>' +
- '</div>' +
- // '<div class="datagrid-resize-proxy"></div>' +
- '</div>' +
- '</div>'
- ).insertAfter(target);
-
- panel.panel({
- doSize:false,
- cls:'datagrid'
- });
-
- $(target).addClass('datagrid-f').hide().appendTo(panel.children('div.datagrid-view'));
-
- var cc = getColumns();
- var view = panel.children('div.datagrid-view');
- var view1 = view.children('div.datagrid-view1');
- var view2 = view.children('div.datagrid-view2');
-
- return {
- panel: panel,
- frozenColumns: cc[0],
- columns: cc[1],
- dc: { // some data container
- view: view,
- view1: view1,
- view2: view2,
- header1: view1.children('div.datagrid-header').children('div.datagrid-header-inner'),
- header2: view2.children('div.datagrid-header').children('div.datagrid-header-inner'),
- body1: view1.children('div.datagrid-body').children('div.datagrid-body-inner'),
- body2: view2.children('div.datagrid-body'),
- footer1: view1.children('div.datagrid-footer').children('div.datagrid-footer-inner'),
- footer2: view2.children('div.datagrid-footer').children('div.datagrid-footer-inner')
- }
- };
- }
-
- function buildGrid(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var panel = state.panel;
-
- state.ss = $(target).datagrid('createStyleSheet');
-
- panel.panel($.extend({}, opts, {
- id: null,
- doSize: false,
- onResize: function(width, height){
- setTimeout(function(){
- if ($.data(target, 'datagrid')){
- setBodySize(target);
- fitColumns(target);
- opts.onResize.call(panel, width, height);
- }
- }, 0);
- },
- onExpand: function(){
- //setBodySize(target);
- fixRowHeight(target);
- opts.onExpand.call(panel);
- }
- }));
-
- state.rowIdPrefix = 'datagrid-row-r' + (++DATAGRID_SERNO);
- state.cellClassPrefix = 'datagrid-cell-c' + DATAGRID_SERNO;
- createColumnHeader(dc.header1, opts.frozenColumns, true);
- createColumnHeader(dc.header2, opts.columns, false);
- createColumnStyle();
-
- dc.header1.add(dc.header2).css('display', opts.showHeader ? 'block' : 'none');
- dc.footer1.add(dc.footer2).css('display', opts.showFooter ? 'block' : 'none');
-
- if (opts.toolbar) {
- if ($.isArray(opts.toolbar)){
- $('div.datagrid-toolbar', panel).remove();
- var tb = $('<div class="datagrid-toolbar"><table cellspacing="0" cellpadding="0"><tr></tr></table></div>').prependTo(panel);
- var tr = tb.find('tr');
- for(var i=0; i<opts.toolbar.length; i++) {
- var btn = opts.toolbar[i];
- if (btn == '-') {
- $('<td><div class="datagrid-btn-separator"></div></td>').appendTo(tr);
- } else {
- var td = $('<td></td>').appendTo(tr);
- var tool = $('<a href="javascript:void(0)"></a>').appendTo(td);
- tool[0].onclick = eval(btn.handler || function(){});
- tool.linkbutton($.extend({}, btn, {
- plain:true
- }));
- }
- }
- } else {
- $(opts.toolbar).addClass('datagrid-toolbar').prependTo(panel);
- $(opts.toolbar).show();
- }
- } else {
- $('div.datagrid-toolbar', panel).remove();
- }
-
- $('div.datagrid-pager', panel).remove();
- if (opts.pagination) {
- var pager = $('<div class="datagrid-pager"></div>');
- if (opts.pagePosition == 'bottom'){
- pager.appendTo(panel);
- } else if (opts.pagePosition == 'top'){
- pager.addClass('datagrid-pager-top').prependTo(panel);
- } else {
- var ptop = $('<div class="datagrid-pager datagrid-pager-top"></div>').prependTo(panel);
- pager.appendTo(panel);
- pager = pager.add(ptop);
- }
- pager.pagination({
- // total:0,
- total:(opts.pageNumber*opts.pageSize),
- pageNumber:opts.pageNumber,
- pageSize:opts.pageSize,
- pageList:opts.pageList,
- onSelectPage: function(pageNum, pageSize){
- // save the page state
- opts.pageNumber = pageNum || 1;
- opts.pageSize = pageSize;
- pager.pagination('refresh',{
- pageNumber:pageNum,
- pageSize:pageSize
- });
-
- request(target); // request new page data
- }
- });
- opts.pageSize = pager.pagination('options').pageSize; // repare the pageSize value
- }
-
- function createColumnHeader(container, columns, frozen){
- if (!columns) return;
- $(container).show();
- $(container).empty();
- var names = [];
- var orders = [];
- if (opts.sortName){
- names = opts.sortName.split(',');
- orders = opts.sortOrder.split(',');
- }
- var t = $('<table class="datagrid-htable" border="0" cellspacing="0" cellpadding="0"><tbody></tbody></table>').appendTo(container);
- for(var i=0; i<columns.length; i++) {
- var tr = $('<tr class="datagrid-header-row"></tr>').appendTo($('tbody', t));
- var cols = columns[i];
- for(var j=0; j<cols.length; j++){
- var col = cols[j];
-
- var attr = '';
- if (col.rowspan) attr += 'rowspan="' + col.rowspan + '" ';
- if (col.colspan) attr += 'colspan="' + col.colspan + '" ';
- var td = $('<td ' + attr + '></td>').appendTo(tr);
-
- if (col.checkbox){
- td.attr('field', col.field);
- $('<div class="datagrid-header-check"></div>').html('<input type="checkbox"/>').appendTo(td);
- } else if (col.field){
- td.attr('field', col.field);
- td.append('<div class="datagrid-cell"><span></span><span class="datagrid-sort-icon"></span></div>');
- $('span', td).html(col.title);
- $('span.datagrid-sort-icon', td).html(' ');
- var cell = td.find('div.datagrid-cell');
- // if (opts.sortName == col.field){
- // cell.addClass('datagrid-sort-'+opts.sortOrder);
- // }
- // var pos = names.indexOf(col.field);
- var pos = indexOfArray(names, col.field);
- if (pos >= 0){
- cell.addClass('datagrid-sort-' + orders[pos]);
- }
- if (col.resizable == false){
- cell.attr('resizable', 'false');
- }
- if (col.width){
- var value = $.parser.parseValue('width',col.width,dc.view,opts.scrollbarSize);
- cell._outerWidth(value-1);
- col.boxWidth = parseInt(cell[0].style.width);
- col.deltaWidth = value - col.boxWidth;
- } else {
- col.auto = true;
- }
- // cell.css('text-align', (col.align || 'left'));
- // if (col.align){cell.css('text-align', col.align)}
- cell.css('text-align', (col.halign || col.align || ''));
-
- // define the cell class
- col.cellClass = state.cellClassPrefix + '-' + col.field.replace(/[\.|\s]/g,'-');
- // col.cellSelector = '.' + col.cellClass;
- cell.addClass(col.cellClass).css('width', '');
- } else {
- $('<div class="datagrid-cell-group"></div>').html(col.title).appendTo(td);
- }
-
- if (col.hidden){
- td.hide();
- }
- }
-
- }
- if (frozen && opts.rownumbers){
- var td = $('<td rowspan="'+opts.frozenColumns.length+'"><div class="datagrid-header-rownumber"></div></td>');
- if ($('tr',t).length == 0){
- td.wrap('<tr class="datagrid-header-row"></tr>').parent().appendTo($('tbody',t));
- } else {
- td.prependTo($('tr:first', t));
- }
- }
- }
-
- function createColumnStyle(){
- var lines = [];
- var fields = getColumnFields(target,true).concat(getColumnFields(target));
- for(var i=0; i<fields.length; i++){
- var col = getColumnOption(target, fields[i]);
- if (col && !col.checkbox){
- lines.push(['.'+col.cellClass, col.boxWidth ? col.boxWidth + 'px' : 'auto']);
- }
- }
- state.ss.add(lines);
- state.ss.dirty(state.cellSelectorPrefix); // mark the old selector as dirty that will be removed
- state.cellSelectorPrefix = '.' + state.cellClassPrefix;
- }
- }
-
- /**
- * bind the datagrid events
- */
- function bindEvents(target) {
- var state = $.data(target, 'datagrid');
- var panel = state.panel;
- var opts = state.options;
- var dc = state.dc;
-
- var header = dc.header1.add(dc.header2);
- header.find('input[type=checkbox]').unbind('.datagrid').bind('click.datagrid', function(e){
- if (opts.singleSelect && opts.selectOnCheck) return false;
- if ($(this).is(':checked')){
- checkAll(target);
- } else {
- uncheckAll(target);
- }
- e.stopPropagation();
- });
-
- var cells = header.find('div.datagrid-cell');
- cells.closest('td').unbind('.datagrid').bind('mouseenter.datagrid', function(){
- if (state.resizing){return;}
- $(this).addClass('datagrid-header-over');
- }).bind('mouseleave.datagrid', function(){
- $(this).removeClass('datagrid-header-over');
- }).bind('contextmenu.datagrid', function(e){
- var field = $(this).attr('field');
- opts.onHeaderContextMenu.call(target, e, field);
- });
-
- cells.unbind('.datagrid').bind('click.datagrid', function(e){
- var p1 = $(this).offset().left + 5;
- var p2 = $(this).offset().left + $(this)._outerWidth() - 5;
- if (e.pageX < p2 && e.pageX > p1){
- sortGrid(target, $(this).parent().attr('field'));
- }
- }).bind('dblclick.datagrid', function(e){
- var p1 = $(this).offset().left + 5;
- var p2 = $(this).offset().left + $(this)._outerWidth() - 5;
- var cond = opts.resizeHandle == 'right' ? (e.pageX > p2) : (opts.resizeHandle == 'left' ? (e.pageX < p1) : (e.pageX < p1 || e.pageX > p2));
- if (cond){
- var field = $(this).parent().attr('field');
- var col = getColumnOption(target, field);
- if (col.resizable == false) return;
- $(target).datagrid('autoSizeColumn', field);
- col.auto = false;
- }
- });
-
- var resizeHandle = opts.resizeHandle == 'right' ? 'e' : (opts.resizeHandle == 'left' ? 'w' : 'e,w');
- cells.each(function(){
- $(this).resizable({
- handles:resizeHandle,
- disabled:($(this).attr('resizable') ? $(this).attr('resizable')=='false' : false),
- minWidth:25,
- onStartResize: function(e){
- state.resizing = true;
- // header.css('cursor', 'e-resize');
- header.css('cursor', $('body').css('cursor'));
- if (!state.proxy){
- state.proxy = $('<div class="datagrid-resize-proxy"></div>').appendTo(dc.view);
- }
- state.proxy.css({
- left:e.pageX - $(panel).offset().left - 1,
- display:'none'
- });
- setTimeout(function(){
- if (state.proxy) state.proxy.show();
- }, 500);
- },
- onResize: function(e){
- state.proxy.css({
- left:e.pageX - $(panel).offset().left - 1,
- display:'block'
- });
- return false;
- },
- onStopResize: function(e){
- header.css('cursor', '');
- $(this).css('height','');
- var field = $(this).parent().attr('field');
- var col = getColumnOption(target, field);
- col.width = $(this)._outerWidth();
- col.boxWidth = col.width - col.deltaWidth;
- col.auto = undefined;
- $(this).css('width', '');
- fixColumnSize(target, field);
- state.proxy.remove();
- state.proxy = null;
- if ($(this).parents('div:first.datagrid-header').parent().hasClass('datagrid-view1')){
- setBodySize(target);
- }
- fitColumns(target);
- opts.onResizeColumn.call(target, field, col.width);
- setTimeout(function(){
- state.resizing = false;
- }, 0);
- }
- });
- });
-
- var bb = dc.body1.add(dc.body2);
- bb.unbind();
- for(var event in opts.rowEvents){
- bb.bind(event, opts.rowEvents[event]);
- }
- dc.body1.bind('mousewheel DOMMouseScroll', function(e){
- var e1 = e.originalEvent || window.event;
- var delta = e1.wheelDelta || e1.detail*(-1);
- var dg = $(e.target).closest('div.datagrid-view').children('.datagrid-f');
- var dc = dg.data('datagrid').dc;
- dc.body2.scrollTop(dc.body2.scrollTop() - delta);
- });
- dc.body2.bind('scroll', function(){
- var b1 = dc.view1.children('div.datagrid-body');
- b1.scrollTop($(this).scrollTop());
- var c1 = dc.body1.children(':first');
- var c2 = dc.body2.children(':first');
- if (c1.length && c2.length){
- var top1 = c1.offset().top;
- var top2 = c2.offset().top;
- if (top1 != top2){
- b1.scrollTop(b1.scrollTop()+top1-top2);
- }
- }
-
- // dc.view1.children('div.datagrid-body').scrollTop($(this).scrollTop());
- dc.view2.children('div.datagrid-header,div.datagrid-footer')._scrollLeft($(this)._scrollLeft());
- dc.body2.children('table.datagrid-btable-frozen').css('left', -$(this)._scrollLeft());
- });
- }
-
- function hoverEventHandler(isOver){
- return function(e){
- var tr = getClosestTr(e.target);
- if (!tr){return}
- var target = getTableTarget(tr);
- if ($.data(target, 'datagrid').resizing){return}
- var index = getTrIndex(tr);
- if (isOver){
- highlightRow(target, index);
- // $(target).datagrid('highlightRow', index);
- } else {
- var opts = $.data(target, 'datagrid').options;
- opts.finder.getTr(target, index).removeClass('datagrid-row-over');
- }
- }
- }
- function clickEventHandler(e){
- var tr = getClosestTr(e.target);
- if (!tr){return}
- var target = getTableTarget(tr);
- var opts = $.data(target, 'datagrid').options;
- var index = getTrIndex(tr);
- var tt = $(e.target);
- if (tt.parent().hasClass('datagrid-cell-check')){ // click the checkbox
- if (opts.singleSelect && opts.selectOnCheck){
- // if (!opts.checkOnSelect) {
- // uncheckAll(target, true);
- // }
- tt._propAttr('checked', !tt.is(':checked'));
- checkRow(target, index);
- } else {
- if (tt.is(':checked')){
- tt._propAttr('checked', false);
- checkRow(target, index);
- } else {
- tt._propAttr('checked', true);
- uncheckRow(target, index);
- }
- }
- } else {
- var row = opts.finder.getRow(target, index);
- var td = tt.closest('td[field]',tr);
- if (td.length){
- var field = td.attr('field');
- opts.onClickCell.call(target, index, field, row[field]);
- }
-
- if (opts.singleSelect == true){
- selectRow(target, index);
- } else {
- if (opts.ctrlSelect){
- if (e.ctrlKey){
- if (tr.hasClass('datagrid-row-selected')){
- unselectRow(target, index);
- } else {
- selectRow(target, index);
- }
- } else if (e.shiftKey){
- $(target).datagrid('clearSelections');
- var fromIndex = Math.min(opts.lastSelectedIndex||0, index);
- var toIndex = Math.max(opts.lastSelectedIndex||0, index);
- for(var i=fromIndex; i<=toIndex; i++){
- selectRow(target, i);
- }
- } else {
- $(target).datagrid('clearSelections');
- selectRow(target, index);
- opts.lastSelectedIndex = index;
- }
- } else {
- if (tr.hasClass('datagrid-row-selected')){
- unselectRow(target, index);
- } else {
- selectRow(target, index);
- }
- }
- }
- opts.onClickRow.call(target, index, row);
- }
- }
- function dblclickEventHandler(e){
- var tr = getClosestTr(e.target);
- if (!tr){return}
- var target = getTableTarget(tr);
- var opts = $.data(target, 'datagrid').options;
- var index = getTrIndex(tr);
- var row = opts.finder.getRow(target, index);
- var td = $(e.target).closest('td[field]',tr);
- if (td.length){
- var field = td.attr('field');
- opts.onDblClickCell.call(target, index, field, row[field]);
- }
- opts.onDblClickRow.call(target, index, row);
- }
- function contextmenuEventHandler(e){
- var tr = getClosestTr(e.target);
- if (!tr){return;}
- var target = getTableTarget(tr);
- var opts = $.data(target, 'datagrid').options;
- var index = getTrIndex(tr);
- var row = opts.finder.getRow(target, index);
- opts.onRowContextMenu.call(target, e, index, row);
- }
- function getTableTarget(t){
- return $(t).closest('div.datagrid-view').children('.datagrid-f')[0];
- }
- function getClosestTr(t){
- var tr = $(t).closest('tr.datagrid-row');
- if (tr.length && tr.parent().length){
- return tr;
- } else {
- return undefined;
- }
- }
- function getTrIndex(tr){
- if (tr.attr('datagrid-row-index')){
- return parseInt(tr.attr('datagrid-row-index'));
- } else {
- return tr.attr('node-id');
- }
- }
-
- function sortGrid(target, param){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- param = param || {};
- var sparam = {sortName: opts.sortName, sortOrder:opts.sortOrder};
- if (typeof param == 'object'){
- $.extend(sparam, param);
- }
- var names = [];
- var orders = [];
- if (sparam.sortName){
- names = sparam.sortName.split(',');
- orders = sparam.sortOrder.split(',');
- }
- //add luoxw 排序时对应的映射 索引为0是sortName,索引1是 field
- var replaceFieldMap=[];
- //end
-
- if (typeof param == 'string'){
- var field = param;
- var col = getColumnOption(target, field);
- if (!col.sortable || state.resizing){return}
- //add luoxw 2015-12-17 增加列的排序指定名sortName
- if(col.sortName){
- replaceFieldMap.push(col.sortName);
- replaceFieldMap.push(field);
- field=col.sortName;
-
- }
- //end
-
- var originalOrder = col.order || 'asc';
- var pos = indexOfArray(names, field);
- if (pos >= 0){
- var nextOrder = orders[pos] == 'asc' ? 'desc' : 'asc';
- if (opts.multiSort && nextOrder == originalOrder){
- names.splice(pos,1);
- orders.splice(pos,1);
- } else {
- orders[pos] = nextOrder;
- }
- } else {
- if (opts.multiSort){
- names.push(field);
- orders.push(originalOrder);
- } else {
- names = [field];
- orders = [originalOrder];
- }
- }
- sparam.sortName = names.join(',');
- sparam.sortOrder = orders.join(',');
- }
-
- if (opts.onBeforeSortColumn.call(target, sparam.sortName, sparam.sortOrder) == false){return}
- $.extend(opts, sparam);
- var dc = state.dc;
- var header = dc.header1.add(dc.header2);
- header.find('div.datagrid-cell').removeClass('datagrid-sort-asc datagrid-sort-desc');
-
- for(var i=0; i<names.length; i++){
- var theField=names[i];
-
- ////add luoxw 2015-12-17 增加列的排序指定名sortName
- if(replaceFieldMap!=null&&replaceFieldMap.length>0)
- {
- if(theField==replaceFieldMap[0])
- theField=replaceFieldMap[1];//换回原来的field
- }
- //end
-
- var col = getColumnOption(target, theField);
- header.find('div.'+col.cellClass).addClass('datagrid-sort-'+orders[i]);
- }
-
- if (opts.remoteSort){
- request(target);
- } else {
- loadData(target, $(target).datagrid('getData'));
- }
-
- opts.onSortColumn.call(target, opts.sortName, opts.sortOrder);
- }
-
- /**
- * expand the columns to fit the grid width
- */
- function fitColumns(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var header = dc.view2.children('div.datagrid-header');
- dc.body2.css('overflow-x', '');
-
- setPercentWidth();
- fillWidth();
-
- if (header.width() >= header.find('table').width()){
- dc.body2.css('overflow-x', 'hidden');
- }
-
- function fillWidth(){
- if (!opts.fitColumns){return;}
- if (!state.leftWidth){state.leftWidth = 0;}
-
- var fieldWidths = 0;
- var cc = [];
- var fields = getColumnFields(target, false);
- for(var i=0; i<fields.length; i++){
- var col = getColumnOption(target, fields[i]);
- if (canResize(col)){
- fieldWidths += col.width;
- cc.push({field:col.field, col:col, addingWidth:0});
- }
- }
- if (!fieldWidths){return;}
- cc[cc.length-1].addingWidth -= state.leftWidth;
-
- var headerInner = header.children('div.datagrid-header-inner').show();
- var leftWidth = header.width() - header.find('table').width() - opts.scrollbarSize + state.leftWidth;
- var rate = leftWidth / fieldWidths;
- if (!opts.showHeader){headerInner.hide();}
- for(var i=0; i<cc.length; i++){
- var c = cc[i];
- var width = parseInt(c.col.width * rate);
- c.addingWidth += width;
- leftWidth -= width;
- }
- cc[cc.length-1].addingWidth += leftWidth;
- for(var i=0; i<cc.length; i++){
- var c = cc[i];
- if (c.col.boxWidth + c.addingWidth > 0){
- c.col.boxWidth += c.addingWidth;
- c.col.width += c.addingWidth;
- }
- }
- state.leftWidth = leftWidth;
-
- fixColumnSize(target);
- }
- function setPercentWidth(){
- var changed = false;
- var fields = getColumnFields(target, true).concat(getColumnFields(target, false));
- $.map(fields, function(field){
- var col = getColumnOption(target, field);
- if (String(col.width||'').indexOf('%') >= 0){
- var width = $.parser.parseValue('width',col.width,dc.view,opts.scrollbarSize) - col.deltaWidth;
- if (width > 0){
- col.boxWidth = width;
- changed = true;
- }
- }
- });
- if (changed){
- fixColumnSize(target);
- }
- }
- function canResize(col){
- if (String(col.width||'').indexOf('%') >= 0){return false;}
- if (!col.hidden && !col.checkbox && !col.auto && !col.fixed){return true;}
- }
- }
-
- /**
- * adjusts the column width to fit the contents.
- */
- function autoSizeColumn(target, field){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var tmp = $('<div class="datagrid-cell" style="position:absolute;left:-9999px"></div>').appendTo('body');
- if (field){
- setSize(field);
- if (opts.fitColumns){
- setBodySize(target);
- fitColumns(target);
- }
- } else {
- var canFitColumns = false;
- var fields = getColumnFields(target,true).concat(getColumnFields(target,false));
- for(var i=0; i<fields.length; i++){
- var field = fields[i];
- var col = getColumnOption(target, field);
- if (col.auto){
- setSize(field);
- canFitColumns = true;
- }
- }
- if (canFitColumns && opts.fitColumns){
- setBodySize(target);
- fitColumns(target);
- }
- }
- tmp.remove();
-
- function setSize(field){
- var headerCell = dc.view.find('div.datagrid-header td[field="' + field + '"] div.datagrid-cell');
- headerCell.css('width', '');
- var col = $(target).datagrid('getColumnOption', field);
- col.width = undefined;
- col.boxWidth = undefined;
- col.auto = true;
- $(target).datagrid('fixColumnSize', field);
- var width = Math.max(getWidth('header'), getWidth('allbody'), getWidth('allfooter'))+1;
- headerCell._outerWidth(width-1);
- col.width = width;
- col.boxWidth = parseInt(headerCell[0].style.width);
- col.deltaWidth = width-col.boxWidth;
- headerCell.css('width', '');
- $(target).datagrid('fixColumnSize', field);
- opts.onResizeColumn.call(target, field, col.width);
-
- // get cell width of specified type(body or footer)
- function getWidth(type){
- var width = 0;
- if (type == 'header'){
- width = getCellWidth(headerCell);
- } else {
- opts.finder.getTr(target,0,type).find('td[field="' + field + '"] div.datagrid-cell').each(function(){
- var w = getCellWidth($(this));
- if (width < w){
- width = w;
- }
- });
- }
- return width;
-
- function getCellWidth(cell){
- return cell.is(':visible') ? cell._outerWidth() : tmp.html(cell.html())._outerWidth();
- }
- }
- }
- }
-
-
- /**
- * fix column size for the specified field
- */
- function fixColumnSize(target, field){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var table = dc.view.find('table.datagrid-btable,table.datagrid-ftable');
- table.css('table-layout','fixed');
- if (field) {
- fix(field);
- } else {
- var ff = getColumnFields(target, true).concat(getColumnFields(target, false)); // get all fields
- for(var i=0; i<ff.length; i++){
- fix(ff[i]);
- }
- }
- table.css('table-layout','auto');
- fixMergedSize(target);
- fixRowHeight(target);
- fixEditableSize(target);
-
- function fix(field){
- var col = getColumnOption(target, field);
- if (col.cellClass){
- state.ss.set('.'+col.cellClass, col.boxWidth ? col.boxWidth + 'px' : 'auto');
- }
- }
- }
-
- function fixMergedSize(target){
- var dc = $.data(target, 'datagrid').dc;
- dc.view.find('td.datagrid-td-merged').each(function(){
- var td = $(this);
- var colspan = td.attr('colspan') || 1;
- var col = getColumnOption(target, td.attr('field'));
- var width = col.boxWidth + col.deltaWidth - 1;
- for(var i=1; i<colspan; i++){
- td = td.next();
- col = getColumnOption(target, td.attr('field'));
- width += col.boxWidth + col.deltaWidth;
- }
- $(this).children('div.datagrid-cell')._outerWidth(width);
- });
- }
-
- function fixEditableSize(target){
- var dc = $.data(target, 'datagrid').dc;
- dc.view.find('div.datagrid-editable').each(function(){
- var cell = $(this);
- var field = cell.parent().attr('field');
- var col = $(target).datagrid('getColumnOption', field);
- cell._outerWidth(col.boxWidth+col.deltaWidth-1);
- var ed = $.data(this, 'datagrid.editor');
- if (ed.actions.resize) {
- ed.actions.resize(ed.target, cell.width());
- }
- });
- }
-
- function getColumnOption(target, field){
- function find(columns){
- if (columns) {
- for(var i=0; i<columns.length; i++){
- var cc = columns[i];
- for(var j=0; j<cc.length; j++){
- var c = cc[j];
- if (c.field == field){
- return c;
- }
- }
- }
- }
- return null;
- }
-
- var opts = $.data(target, 'datagrid').options;
- var col = find(opts.columns);
- if (!col){
- col = find(opts.frozenColumns);
- }
- return col;
- }
-
- /**
- * get column fields which will be show in row
- */
- function getColumnFields(target, frozen){
- var opts = $.data(target, 'datagrid').options;
- var columns = (frozen==true) ? (opts.frozenColumns || [[]]) : opts.columns;
- if (columns.length == 0) return [];
-
- var aa = [];
- var count = getCount(); // the fields count
- for(var i=0; i<columns.length; i++){
- aa[i] = new Array(count);
- }
- for(var rowIndex=0; rowIndex<columns.length; rowIndex++){
- $.map(columns[rowIndex], function(col){
- var colIndex = getIndex(aa[rowIndex]); // get the column index
- if (colIndex >= 0){
- var value = col.field || '';
- for(var c=0; c<(col.colspan||1); c++){
- for(var r=0; r<(col.rowspan||1); r++){
- aa[rowIndex + r][colIndex] = value;
- }
- colIndex++;
- }
- }
- });
- }
- return aa[aa.length-1]
-
- function getCount(){
- var count = 0;
- $.map(columns[0], function(col){
- count += col.colspan || 1;
- });
- return count;
- }
- function getIndex(a){
- for(var i=0; i<a.length; i++){
- if (a[i] == undefined){return i;}
- }
- return -1;
- }
- }
-
- /**
- * load data to the grid
- */
- function loadData(target, data){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- data = opts.loadFilter.call(target, data);
- data.total = parseInt(data.total);
- state.data = data;
- if (data.footer){
- state.footer = data.footer;
- }
-
- if (!opts.remoteSort && opts.sortName){
- var names = opts.sortName.split(',');
- var orders = opts.sortOrder.split(',');
- data.rows.sort(function(r1,r2){
- var r = 0;
- for(var i=0; i<names.length; i++){
- var sn = names[i];
- var so = orders[i];
- var col = getColumnOption(target, sn);
- var sortFunc = col.sorter || function(a,b){
- return a==b ? 0 : (a>b?1:-1);
- };
- r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1);
- if (r != 0){
- return r;
- }
- }
- return r;
- });
- }
-
- // render datagrid view
- if (opts.view.onBeforeRender){
- opts.view.onBeforeRender.call(opts.view, target, data.rows);
- }
- opts.view.render.call(opts.view, target, dc.body2, false);
- opts.view.render.call(opts.view, target, dc.body1, true);
- if (opts.showFooter){
- opts.view.renderFooter.call(opts.view, target, dc.footer2, false);
- opts.view.renderFooter.call(opts.view, target, dc.footer1, true);
- }
- if (opts.view.onAfterRender){
- opts.view.onAfterRender.call(opts.view, target);
- }
-
- state.ss.clean();
-
- // opts.onLoadSuccess.call(target, data);
-
- var pager = $(target).datagrid('getPager');
- if (pager.length){
- var popts = pager.pagination('options');
- if (popts.total != data.total){
- pager.pagination('refresh',{total:data.total});
- if (opts.pageNumber != popts.pageNumber && popts.pageNumber > 0){
- opts.pageNumber = popts.pageNumber;
- request(target);
- }
- }
- }
-
- fixRowHeight(target);
- dc.body2.triggerHandler('scroll');
-
- $(target).datagrid('setSelectionState');
- $(target).datagrid('autoSizeColumn');
-
- opts.onLoadSuccess.call(target, data);
- }
-
- /**
- * set row selection that previously selected
- */
- function setSelectionState(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- dc.header1.add(dc.header2).find('input[type=checkbox]')._propAttr('checked', false);
- if (opts.idField){
- var isTreeGrid = $.data(target, 'treegrid') ? true : false;
- var onSelect = opts.onSelect;
- var onCheck = opts.onCheck;
- opts.onSelect = opts.onCheck = function(){};
- var rows = opts.finder.getRows(target);
- for(var i=0; i<rows.length; i++){
- var row = rows[i];
- var index = isTreeGrid ? row[opts.idField] : i;
- if (contains(state.selectedRows, row)){
- selectRow(target, index, true);
- }
- if (contains(state.checkedRows, row)){
- checkRow(target, index, true);
- }
- }
- opts.onSelect = onSelect;
- opts.onCheck = onCheck;
- }
- function contains(a,r){
- for(var i=0; i<a.length; i++){
- if (a[i][opts.idField] == r[opts.idField]){
- a[i] = r;
- return true;
- }
- }
- return false;
- }
- }
-
- /**
- * Return the index of specified row or -1 if not found.
- * row: id value or row record
- */
- function getRowIndex(target, row){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var rows = state.data.rows;
- if (typeof row == 'object'){
- return indexOfArray(rows, row);
- } else {
- for(var i=0; i<rows.length; i++){
- if (rows[i][opts.idField] == row){
- return i;
- }
- }
- return -1;
- }
- }
-
- function getSelectedRows(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var data = state.data;
-
- if (opts.idField){
- return state.selectedRows;
- } else {
- var rows = [];
- opts.finder.getTr(target, '', 'selected', 2).each(function(){
- rows.push(opts.finder.getRow(target, $(this)));
- });
- return rows;
- }
- }
-
- function getCheckedRows(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- if (opts.idField){
- return state.checkedRows;
- } else {
- var rows = [];
- opts.finder.getTr(target, '', 'checked', 2).each(function(){
- rows.push(opts.finder.getRow(target, $(this)));
- });
- return rows;
- }
- }
-
- function scrollTo(target, index){
- var state = $.data(target, 'datagrid');
- var dc = state.dc;
- var opts = state.options;
- var tr = opts.finder.getTr(target, index);
- if (tr.length){
- if (tr.closest('table').hasClass('datagrid-btable-frozen')){return;}
- var headerHeight = dc.view2.children('div.datagrid-header')._outerHeight();
- var body2 = dc.body2;
- var frozenHeight = body2.outerHeight(true) - body2.outerHeight();
- var top = tr.position().top - headerHeight - frozenHeight;
- if (top < 0){
- body2.scrollTop(body2.scrollTop() + top);
- } else if (top + tr._outerHeight() > body2.height() - 18){
- body2.scrollTop(body2.scrollTop() + top + tr._outerHeight() - body2.height() + 18);
- }
- }
- }
-
- function highlightRow(target, index){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- opts.finder.getTr(target, state.highlightIndex).removeClass('datagrid-row-over');
- opts.finder.getTr(target, index).addClass('datagrid-row-over');
- state.highlightIndex = index;
- // scrollTo(target, index);
- }
-
- /**
- * select a row, the row index start with 0
- */
- function selectRow(target, index, notCheck){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var row = opts.finder.getRow(target, index);
-
- if (opts.onBeforeSelect.call(target, index, row) == false){return}
- if (opts.singleSelect){
- unselectAll(target, true);
- state.selectedRows = [];
- }
- if (!notCheck && opts.checkOnSelect){
- checkRow(target, index, true); // don't select the row again
- }
-
- if (opts.idField){
- addArrayItem(state.selectedRows, opts.idField, row);
- }
- opts.finder.getTr(target, index).addClass('datagrid-row-selected');
- opts.onSelect.call(target, index, row);
- scrollTo(target, index);
- }
- /**
- * unselect a row
- */
- function unselectRow(target, index, notCheck){
- var state = $.data(target, 'datagrid');
- var dc = state.dc;
- var opts = state.options;
- var row = opts.finder.getRow(target, index);
-
- if (opts.onBeforeUnselect.call(target, index, row) == false){return}
- if (!notCheck && opts.checkOnSelect){
- uncheckRow(target, index, true); // don't unselect the row again
- }
- opts.finder.getTr(target, index).removeClass('datagrid-row-selected');
- if (opts.idField){
- removeArrayItem(state.selectedRows, opts.idField, row[opts.idField]);
- }
- opts.onUnselect.call(target, index, row);
- }
- /**
- * select all rows on current page
- */
- function selectAll(target, notCheck){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var rows = opts.finder.getRows(target);
- var selectedRows = $.data(target, 'datagrid').selectedRows;
-
- if (!notCheck && opts.checkOnSelect){
- checkAll(target, true); // don't select rows again
- }
- opts.finder.getTr(target, '', 'allbody').addClass('datagrid-row-selected');
- if (opts.idField){
- for(var index=0; index<rows.length; index++){
- addArrayItem(selectedRows, opts.idField, rows[index]);
- }
- }
- opts.onSelectAll.call(target, rows);
- }
- /**
- * unselect all rows on current page
- */
- function unselectAll(target, notCheck){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var rows = opts.finder.getRows(target);
- var selectedRows = $.data(target, 'datagrid').selectedRows;
-
- if (!notCheck && opts.checkOnSelect){
- uncheckAll(target, true); // don't unselect rows again
- }
- opts.finder.getTr(target, '', 'selected').removeClass('datagrid-row-selected');
- if (opts.idField){
- for(var index=0; index<rows.length; index++){
- removeArrayItem(selectedRows, opts.idField, rows[index][opts.idField]);
- }
- }
- opts.onUnselectAll.call(target, rows);
- }
-
- /**
- * check a row, the row index start with 0
- */
- function checkRow(target, index, notSelect){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var row = opts.finder.getRow(target, index);
-
- if (opts.onBeforeCheck.call(target, index, row) == false){return}
- if (opts.singleSelect && opts.selectOnCheck){
- uncheckAll(target, true);
- state.checkedRows = [];
- }
- if (!notSelect && opts.selectOnCheck){
- selectRow(target, index, true); // don't check the row again
- }
- var tr = opts.finder.getTr(target, index).addClass('datagrid-row-checked');
- tr.find('div.datagrid-cell-check input[type=checkbox]')._propAttr('checked', true);
- tr = opts.finder.getTr(target, '', 'checked', 2);
- if (tr.length == opts.finder.getRows(target).length){
- var dc = state.dc;
- dc.header1.add(dc.header2).find('input[type=checkbox]')._propAttr('checked', true);
- }
- if (opts.idField){
- addArrayItem(state.checkedRows, opts.idField, row);
- }
- opts.onCheck.call(target, index, row);
- }
- /**
- * uncheck a row
- */
- function uncheckRow(target, index, notSelect){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var row = opts.finder.getRow(target, index);
-
- if (opts.onBeforeUncheck.call(target, index, row) == false){return}
- if (!notSelect && opts.selectOnCheck){
- unselectRow(target, index, true); // don't uncheck the row again
- }
- var tr = opts.finder.getTr(target, index).removeClass('datagrid-row-checked');
- tr.find('div.datagrid-cell-check input[type=checkbox]')._propAttr('checked', false);
- var dc = state.dc;
- var header = dc.header1.add(dc.header2);
- header.find('input[type=checkbox]')._propAttr('checked', false);
- if (opts.idField){
- removeArrayItem(state.checkedRows, opts.idField, row[opts.idField]);
- }
- opts.onUncheck.call(target, index, row);
- }
- /**
- * check all checkbox on current page
- */
- function checkAll(target, notSelect){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var rows = opts.finder.getRows(target);
- if (!notSelect && opts.selectOnCheck){
- selectAll(target, true); // don't check rows again
- }
- var dc = state.dc;
- var hck = dc.header1.add(dc.header2).find('input[type=checkbox]');
- var bck = opts.finder.getTr(target, '', 'allbody').addClass('datagrid-row-checked').find('div.datagrid-cell-check input[type=checkbox]');
- hck.add(bck)._propAttr('checked', true);
- if (opts.idField){
- for(var i=0; i<rows.length; i++){
- addArrayItem(state.checkedRows, opts.idField, rows[i]);
- }
- }
- opts.onCheckAll.call(target, rows);
- }
- /**
- * uncheck all checkbox on current page
- */
- function uncheckAll(target, notSelect){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var rows = opts.finder.getRows(target);
- if (!notSelect && opts.selectOnCheck){
- unselectAll(target, true); // don't uncheck rows again
- }
- var dc = state.dc;
- var hck = dc.header1.add(dc.header2).find('input[type=checkbox]');
- var bck = opts.finder.getTr(target, '', 'checked').removeClass('datagrid-row-checked').find('div.datagrid-cell-check input[type=checkbox]');
- // var bck = opts.finder.getTr(target, '', 'allbody').find('div.datagrid-cell-check input[type=checkbox]');
- hck.add(bck)._propAttr('checked', false);
- if (opts.idField){
- for(var i=0; i<rows.length; i++){
- removeArrayItem(state.checkedRows, opts.idField, rows[i][opts.idField]);
- }
- }
- opts.onUncheckAll.call(target, rows);
- }
-
-
- /**
- * Begin edit a row
- */
- function beginEdit(target, index){
- var opts = $.data(target, 'datagrid').options;
- var tr = opts.finder.getTr(target, index);
- var row = opts.finder.getRow(target, index);
- if (tr.hasClass('datagrid-row-editing')) return;
- if (opts.onBeforeEdit.call(target, index, row) == false) return;
-
- tr.addClass('datagrid-row-editing');
- createEditor(target, index);
- fixEditableSize(target);
-
- tr.find('div.datagrid-editable').each(function(){
- var field = $(this).parent().attr('field');
- var ed = $.data(this, 'datagrid.editor');
- ed.actions.setValue(ed.target, row[field]);
- });
- validateRow(target, index); // validate the row data
- opts.onBeginEdit.call(target, index, row);
- }
-
- /**
- * Stop edit a row.
- * index: the row index.
- * cancel: if true, restore the row data.
- */
- function endEdit(target, index, cancel){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var updatedRows = state.updatedRows;
- var insertedRows = state.insertedRows;
-
- var tr = opts.finder.getTr(target, index);
- var row = opts.finder.getRow(target, index);
- if (!tr.hasClass('datagrid-row-editing')) {
- return;
- }
-
- if (!cancel){
- if (!validateRow(target, index)) return; // invalid row data
-
- var changed = false;
- var changes = {};
- tr.find('div.datagrid-editable').each(function(){
- var field = $(this).parent().attr('field');
- var ed = $.data(this, 'datagrid.editor');
- var t = $(ed.target);
- var input = t.data('textbox') ? t.textbox('textbox') : t;
- input.triggerHandler('blur');
- var value = ed.actions.getValue(ed.target);
- if (row[field] != value){
- row[field] = value;
- changed = true;
- changes[field] = value;
- }
- });
- if (changed){
- if (indexOfArray(insertedRows, row) == -1){
- if (indexOfArray(updatedRows, row) == -1){
- updatedRows.push(row);
- }
- }
- }
- opts.onEndEdit.call(target, index, row, changes);
- }
-
- tr.removeClass('datagrid-row-editing');
-
- destroyEditor(target, index);
- $(target).datagrid('refreshRow', index);
-
- if (!cancel){
- opts.onAfterEdit.call(target, index, row, changes);
- } else {
- opts.onCancelEdit.call(target, index, row);
- }
- }
-
- /**
- * get the specified row editors
- */
- function getEditors(target, index){
- var opts = $.data(target, 'datagrid').options;
- var tr = opts.finder.getTr(target, index);
- var editors = [];
- tr.children('td').each(function(){
- var cell = $(this).find('div.datagrid-editable');
- if (cell.length){
- var ed = $.data(cell[0], 'datagrid.editor');
- editors.push(ed);
- }
- });
- return editors;
- }
-
- /**
- * get the cell editor
- * param contains two parameters: index and field
- */
- function getEditor(target, param){
- var editors = getEditors(target, param.index!=undefined ? param.index : param.id);
- for(var i=0; i<editors.length; i++){
- if (editors[i].field == param.field){
- return editors[i];
- }
- }
- return null;
- }
-
- /**
- * create the row editor and adjust the row height.
- */
- function createEditor(target, index){
- var opts = $.data(target, 'datagrid').options;
- var tr = opts.finder.getTr(target, index);
- tr.children('td').each(function(){
- var cell = $(this).find('div.datagrid-cell');
- var field = $(this).attr('field');
-
- var col = getColumnOption(target, field);
- if (col && col.editor){
- // get edit type and options
- var edittype,editoptions;
- if (typeof col.editor == 'string'){
- edittype = col.editor;
- } else {
- edittype = col.editor.type;
- editoptions = col.editor.options;
- }
-
- // get the specified editor
- var editor = opts.editors[edittype];
- if (editor){
- var oldHtml = cell.html();
- var width = cell._outerWidth();
- cell.addClass('datagrid-editable');
- cell._outerWidth(width);
- cell.html('<table border="0" cellspacing="0" cellpadding="1"><tr><td></td></tr></table>');
- cell.children('table').bind('click dblclick contextmenu',function(e){
- e.stopPropagation();
- });
- $.data(cell[0], 'datagrid.editor', {
- actions: editor,
- target: editor.init(cell.find('td'), editoptions),
- field: field,
- type: edittype,
- oldHtml: oldHtml
- });
- }
- }
- });
- fixRowHeight(target, index, true);
- }
-
- /**
- * destroy the row editor and restore the row height.
- */
- function destroyEditor(target, index){
- var opts = $.data(target, 'datagrid').options;
- var tr = opts.finder.getTr(target, index);
- tr.children('td').each(function(){
- var cell = $(this).find('div.datagrid-editable');
- if (cell.length){
- var ed = $.data(cell[0], 'datagrid.editor');
- if (ed.actions.destroy) {
- ed.actions.destroy(ed.target);
- }
- cell.html(ed.oldHtml);
- $.removeData(cell[0], 'datagrid.editor');
-
- cell.removeClass('datagrid-editable');
- cell.css('width','');
- }
- });
- }
-
- /**
- * Validate while editing, if valid return true.
- */
- function validateRow(target, index){
- var tr = $.data(target, 'datagrid').options.finder.getTr(target, index);
- if (!tr.hasClass('datagrid-row-editing')){
- return true;
- }
-
- var vbox = tr.find('.validatebox-text');
- vbox.validatebox('validate');
- vbox.trigger('mouseleave');
- var invalidbox = tr.find('.validatebox-invalid');
- return invalidbox.length == 0;
- }
-
- /**
- * Get changed rows, if state parameter is not assigned, return all changed.
- * state: inserted,deleted,updated
- */
- function getChanges(target, state){
- var insertedRows = $.data(target, 'datagrid').insertedRows;
- var deletedRows = $.data(target, 'datagrid').deletedRows;
- var updatedRows = $.data(target, 'datagrid').updatedRows;
-
- if (!state){
- var rows = [];
- rows = rows.concat(insertedRows);
- rows = rows.concat(deletedRows);
- rows = rows.concat(updatedRows);
- return rows;
- } else if (state == 'inserted'){
- return insertedRows;
- } else if (state == 'deleted'){
- return deletedRows;
- } else if (state == 'updated'){
- return updatedRows;
- }
-
- return [];
- }
-
- function deleteRow(target, index){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var data = state.data;
- var insertedRows = state.insertedRows;
- var deletedRows = state.deletedRows;
-
- $(target).datagrid('cancelEdit', index);
-
- var row = opts.finder.getRow(target, index);
- if (indexOfArray(insertedRows, row) >= 0){
- removeArrayItem(insertedRows, row);
- } else {
- deletedRows.push(row);
- }
- removeArrayItem(state.selectedRows, opts.idField, row[opts.idField]);
- removeArrayItem(state.checkedRows, opts.idField, row[opts.idField]);
-
- opts.view.deleteRow.call(opts.view, target, index);
- if (opts.height == 'auto'){
- fixRowHeight(target); // adjust the row height
- }
- $(target).datagrid('getPager').pagination('refresh', {total:data.total});
- }
-
- function insertRow(target, param){
- var data = $.data(target, 'datagrid').data;
- var view = $.data(target, 'datagrid').options.view;
- var insertedRows = $.data(target, 'datagrid').insertedRows;
- view.insertRow.call(view, target, param.index, param.row);
- // bindRowEvents(target);
- insertedRows.push(param.row);
- $(target).datagrid('getPager').pagination('refresh', {total:data.total});
- }
-
- function appendRow(target, row){
- var data = $.data(target, 'datagrid').data;
- var view = $.data(target, 'datagrid').options.view;
- var insertedRows = $.data(target, 'datagrid').insertedRows;
- view.insertRow.call(view, target, null, row);
- insertedRows.push(row);
- $(target).datagrid('getPager').pagination('refresh', {total:data.total});
- }
-
- function initChanges(target){
- var state = $.data(target, 'datagrid');
- var data = state.data;
- var rows = data.rows;
- var originalRows = [];
- for(var i=0; i<rows.length; i++){
- originalRows.push($.extend({}, rows[i]));
- }
- state.originalRows = originalRows;
- state.updatedRows = [];
- state.insertedRows = [];
- state.deletedRows = [];
- }
-
- function acceptChanges(target){
- var data = $.data(target, 'datagrid').data;
- var ok = true;
- for(var i=0,len=data.rows.length; i<len; i++){
- if (validateRow(target, i)){
- // endEdit(target, i, false);
- $(target).datagrid('endEdit', i);
- } else {
- ok = false;
- }
- }
- if (ok){
- initChanges(target);
- }
- }
-
- function rejectChanges(target){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var originalRows = state.originalRows;
- var insertedRows = state.insertedRows;
- var deletedRows = state.deletedRows;
- var selectedRows = state.selectedRows;
- var checkedRows = state.checkedRows;
- var data = state.data;
-
- function getIds(a){
- var ids = [];
- for(var i=0; i<a.length; i++){
- ids.push(a[i][opts.idField]);
- }
- return ids;
- }
- function doSelect(ids, action){
- for(var i=0; i<ids.length; i++){
- var index = getRowIndex(target, ids[i]);
- if (index >= 0){
- (action=='s'?selectRow:checkRow)(target, index, true);
- }
- }
- }
-
- for(var i=0; i<data.rows.length; i++){
- // endEdit(target, i, true);
- $(target).datagrid('cancelEdit', i);
- }
-
- var selectedIds = getIds(selectedRows);
- var checkedIds = getIds(checkedRows);
- selectedRows.splice(0, selectedRows.length);
- checkedRows.splice(0, checkedRows.length);
-
- data.total += deletedRows.length - insertedRows.length;
- data.rows = originalRows;
- loadData(target, data);
-
- doSelect(selectedIds, 's');
- doSelect(checkedIds, 'c');
-
- initChanges(target);
- }
-
- /**
- * request remote data
- */
- function request(target, params){
- var opts = $.data(target, 'datagrid').options;
-
- if (params) opts.queryParams = params;
-
- var param = $.extend({}, opts.queryParams);
- if (opts.pagination){
- $.extend(param, {
- page: opts.pageNumber||1,
- rows: opts.pageSize
- });
- }
- if (opts.sortName){
- $.extend(param, {
- sort: opts.sortName,
- order: opts.sortOrder
- });
- }
-
- if (opts.onBeforeLoad.call(target, param) == false) return;
-
- $(target).datagrid('loading');
- setTimeout(function(){
- doRequest();
- }, 0);
-
- function doRequest(){
- var result = opts.loader.call(target, param, function(data){
- setTimeout(function(){
- $(target).datagrid('loaded');
- }, 0);
- loadData(target, data);
- setTimeout(function(){
- initChanges(target);
- }, 0);
- }, function(){
- setTimeout(function(){
- $(target).datagrid('loaded');
- }, 0);
- opts.onLoadError.apply(target, arguments);
- });
- if (result == false){
- $(target).datagrid('loaded');
- }
- }
- }
-
- function mergeCells(target, param){
- var opts = $.data(target, 'datagrid').options;
-
- param.type = param.type || 'body';
- param.rowspan = param.rowspan || 1;
- param.colspan = param.colspan || 1;
-
- if (param.rowspan == 1 && param.colspan == 1){return;}
-
- var tr = opts.finder.getTr(target, (param.index!=undefined ? param.index : param.id), param.type);
- if (!tr.length){return;}
- var td = tr.find('td[field="'+param.field+'"]');
- td.attr('rowspan', param.rowspan).attr('colspan', param.colspan);
- td.addClass('datagrid-td-merged');
- _hidecell(td.next(), param.colspan-1);
- for(var i=1; i<param.rowspan; i++){
- tr = tr.next();
- if (!tr.length){break;}
- td = tr.find('td[field="'+param.field+'"]');
- _hidecell(td, param.colspan);
- }
-
- fixMergedSize(target);
-
- function _hidecell(td, count){
- for(var i=0; i<count; i++){
- td.hide();
- td = td.next();
- }
- }
- }
-
- $.fn.datagrid = function(options, param){
- if (typeof options == 'string'){
- return $.fn.datagrid.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'datagrid');
- var opts;
- if (state) {
- opts = $.extend(state.options, options);
- state.options = opts;
- } else {
- opts = $.extend({}, $.extend({},$.fn.datagrid.defaults,{queryParams:{}}), $.fn.datagrid.parseOptions(this), options);
- $(this).css('width', '').css('height', '');
-
- var wrapResult = wrapGrid(this, opts.rownumbers);
- if (!opts.columns) opts.columns = wrapResult.columns;
- if (!opts.frozenColumns) opts.frozenColumns = wrapResult.frozenColumns;
- opts.columns = $.extend(true, [], opts.columns);
- opts.frozenColumns = $.extend(true, [], opts.frozenColumns);
- opts.view = $.extend({}, opts.view);
- $.data(this, 'datagrid', {
- options: opts,
- panel: wrapResult.panel,
- dc: wrapResult.dc,
- ss: null,
- selectedRows: [],
- checkedRows: [],
- data: {total:0,rows:[]},
- originalRows: [],
- updatedRows: [],
- insertedRows: [],
- deletedRows: []
- });
- }
-
- buildGrid(this);
- bindEvents(this);
- setSize(this);
-
- if (opts.data){
- loadData(this, opts.data);
- initChanges(this);
- } else {
- var data = $.fn.datagrid.parseData(this);
- if (data.total > 0){
- loadData(this, data);
- initChanges(this);
- }
- }
-
- request(this);
- });
- };
-
- function getDefaultEditors(names){
- var editors = {};
- $.map(names, function(name){
- editors[name] = getEditorConf(name);
- });
- return editors;
-
- function getEditorConf(name){
- function isA(target){
- return $.data($(target)[0], name) != undefined;
- }
- return {
- init: function(container, options){
- var input = $('<input type="text" class="datagrid-editable-input">').appendTo(container);
- if (input[name] && name != 'text'){
- return input[name](options);
- } else {
- return input;
- }
- },
- destroy: function(target){
- if (isA(target, name)){
- $(target)[name]('destroy');
- }
- },
- getValue: function(target){
- if (isA(target, name)){
- var opts = $(target)[name]('options');
- if (opts.multiple){
- return $(target)[name]('getValues').join(opts.separator);
- } else {
- return $(target)[name]('getValue');
- }
- } else {
- return $(target).val();
- }
- },
- setValue: function(target, value){
- if (isA(target, name)){
- var opts = $(target)[name]('options');
- if (opts.multiple){
- if (value){
- $(target)[name]('setValues', value.split(opts.separator));
- } else {
- $(target)[name]('clear');
- }
- } else {
- $(target)[name]('setValue', value);
- }
- } else {
- $(target).val(value);
- }
- },
- resize: function(target, width){
- if (isA(target, name)){
- $(target)[name]('resize', width);
- } else {
- $(target)._outerWidth(width)._outerHeight(22);
- }
- }
- }
- }
- }
-
- var editors = $.extend({},
- getDefaultEditors([
- 'text','textbox','numberbox','numberspinner',
- 'combobox','combotree','combogrid','datebox','datetimebox',
- 'timespinner','datetimespinner'
- ]), {
- textarea: {
- init: function(container, options){
- var input = $('<textarea class="datagrid-editable-input"></textarea>').appendTo(container);
- return input;
- },
- getValue: function(target){
- return $(target).val();
- },
- setValue: function(target, value){
- $(target).val(value);
- },
- resize: function(target, width){
- $(target)._outerWidth(width);
- }
- },
- checkbox: {
- init: function(container, options){
- var input = $('<input type="checkbox">').appendTo(container);
- input.val(options.on);
- input.attr('offval', options.off);
- return input;
- },
- getValue: function(target){
- if ($(target).is(':checked')){
- return $(target).val();
- } else {
- return $(target).attr('offval');
- }
- },
- setValue: function(target, value){
- var checked = false;
- if ($(target).val() == value){
- checked = true;
- }
- $(target)._propAttr('checked', checked);
- }
- },
- validatebox: {
- init: function(container, options){
- var input = $('<input type="text" class="datagrid-editable-input">').appendTo(container);
- input.validatebox(options);
- return input;
- },
- destroy: function(target){
- $(target).validatebox('destroy');
- },
- getValue: function(target){
- return $(target).val();
- },
- setValue: function(target, value){
- $(target).val(value);
- },
- resize: function(target, width){
- $(target)._outerWidth(width)._outerHeight(22);
- }
- }
- });
-
-
- $.fn.datagrid.methods = {
- options: function(jq){
- var gopts = $.data(jq[0], 'datagrid').options;
- var popts = $.data(jq[0], 'datagrid').panel.panel('options');
- var opts = $.extend(gopts, {
- width: popts.width,
- height: popts.height,
- closed: popts.closed,
- collapsed: popts.collapsed,
- minimized: popts.minimized,
- maximized: popts.maximized
- });
- // var pager = jq.datagrid('getPager');
- // if (pager.length){
- // var pagerOpts = pager.pagination('options');
- // $.extend(opts, {
- // pageNumber: pagerOpts.pageNumber,
- // pageSize: pagerOpts.pageSize
- // });
- // }
- return opts;
- },
- setSelectionState: function(jq){
- return jq.each(function(){
- setSelectionState(this);
- });
- },
- createStyleSheet: function(jq){
- return createStyleSheet(jq[0]);
- },
- getPanel: function(jq){
- return $.data(jq[0], 'datagrid').panel;
- },
- getPager: function(jq){
- return $.data(jq[0], 'datagrid').panel.children('div.datagrid-pager');
- },
- getColumnFields: function(jq, frozen){
- return getColumnFields(jq[0], frozen);
- },
- getColumnOption: function(jq, field){
- return getColumnOption(jq[0], field);
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- load: function(jq, params){
- return jq.each(function(){
- var opts = $(this).datagrid('options');
- if (typeof params == 'string'){
- opts.url = params;
- params = null;
- }
- opts.pageNumber = 1;
- var pager = $(this).datagrid('getPager');
- // pager.pagination({pageNumber:1});
- pager.pagination('refresh', {pageNumber:1});
- request(this, params);
- });
- },
- reload: function(jq, params){
- return jq.each(function(){
- var opts = $(this).datagrid('options');
- if (typeof params == 'string'){
- opts.url = params;
- params = null;
- }
- request(this, params);
- });
- },
- reloadFooter: function(jq, footer){
- return jq.each(function(){
- var opts = $.data(this, 'datagrid').options;
- var dc = $.data(this, 'datagrid').dc;
- if (footer){
- $.data(this, 'datagrid').footer = footer;
- }
- if (opts.showFooter){
- opts.view.renderFooter.call(opts.view, this, dc.footer2, false);
- opts.view.renderFooter.call(opts.view, this, dc.footer1, true);
- if (opts.view.onAfterRender){
- opts.view.onAfterRender.call(opts.view, this);
- }
- $(this).datagrid('fixRowHeight');
- }
- });
- },
- loading: function(jq){
- return jq.each(function(){
- var opts = $.data(this, 'datagrid').options;
- $(this).datagrid('getPager').pagination('loading');
- if (opts.loadMsg){
- var panel = $(this).datagrid('getPanel');
- if (!panel.children('div.datagrid-mask').length){
- $('<div class="datagrid-mask" style="display:block"></div>').appendTo(panel);
- var msg = $('<div class="datagrid-mask-msg" style="display:block;left:50%"></div>').html(opts.loadMsg).appendTo(panel);
- // msg.css('marginLeft', -msg.outerWidth()/2);
- msg._outerHeight(40);
- msg.css({
- marginLeft: (-msg.outerWidth()/2),
- lineHeight: (msg.height()+'px')
- });
- }
- }
- });
- },
- loaded: function(jq){
- return jq.each(function(){
- $(this).datagrid('getPager').pagination('loaded');
- var panel = $(this).datagrid('getPanel');
- panel.children('div.datagrid-mask-msg').remove();
- panel.children('div.datagrid-mask').remove();
- });
- },
- fitColumns: function(jq){
- return jq.each(function(){
- fitColumns(this);
- });
- },
- fixColumnSize: function(jq, field){
- return jq.each(function(){
- fixColumnSize(this, field);
- });
- },
- fixRowHeight: function(jq, index){
- return jq.each(function(){
- fixRowHeight(this, index);
- });
- },
- freezeRow: function(jq, index){
- return jq.each(function(){
- freezeRow(this, index);
- });
- },
- autoSizeColumn: function(jq, field){ // adjusts the column width to fit the contents.
- return jq.each(function(){
- autoSizeColumn(this, field);
- });
- },
- loadData: function(jq, data){
- return jq.each(function(){
- loadData(this, data);
- initChanges(this);
- });
- },
- getData: function(jq){
- return $.data(jq[0], 'datagrid').data;
- },
- getRows: function(jq){
- return $.data(jq[0], 'datagrid').data.rows;
- },
- getFooterRows: function(jq){
- return $.data(jq[0], 'datagrid').footer;
- },
- getRowIndex: function(jq, id){ // id or row record
- return getRowIndex(jq[0], id);
- },
- getChecked: function(jq){
- return getCheckedRows(jq[0]);
- },
- getSelected: function(jq){
- var rows = getSelectedRows(jq[0]);
- return rows.length>0 ? rows[0] : null;
- },
- getSelections: function(jq){
- return getSelectedRows(jq[0]);
- },
- clearSelections: function(jq){
- return jq.each(function(){
- var state = $.data(this, 'datagrid');
- var selectedRows = state.selectedRows;
- var checkedRows = state.checkedRows;
- selectedRows.splice(0, selectedRows.length);
- unselectAll(this);
- if (state.options.checkOnSelect){
- checkedRows.splice(0, checkedRows.length);
- }
- });
- },
- clearChecked: function(jq){
- return jq.each(function(){
- var state = $.data(this, 'datagrid');
- var selectedRows = state.selectedRows;
- var checkedRows = state.checkedRows;
- checkedRows.splice(0, checkedRows.length);
- uncheckAll(this);
- if (state.options.selectOnCheck){
- selectedRows.splice(0, selectedRows.length);
- }
- });
- },
- scrollTo: function(jq, index){
- return jq.each(function(){
- scrollTo(this, index);
- });
- },
- highlightRow: function(jq, index){
- return jq.each(function(){
- highlightRow(this, index);
- scrollTo(this, index);
- });
- },
- selectAll: function(jq){
- return jq.each(function(){
- selectAll(this);
- });
- },
- unselectAll: function(jq){
- return jq.each(function(){
- unselectAll(this);
- });
- },
- selectRow: function(jq, index){
- return jq.each(function(){
- selectRow(this, index);
- });
- },
- selectRecord: function(jq, id){
- return jq.each(function(){
- var opts = $.data(this, 'datagrid').options;
- if (opts.idField){
- var index = getRowIndex(this, id);
- if (index >= 0){
- $(this).datagrid('selectRow', index);
- }
- }
- });
- },
- unselectRow: function(jq, index){
- return jq.each(function(){
- unselectRow(this, index);
- });
- },
- checkRow: function(jq, index){
- return jq.each(function(){
- checkRow(this, index);
- });
- },
- uncheckRow: function(jq, index){
- return jq.each(function(){
- uncheckRow(this, index);
- });
- },
- checkAll: function(jq){
- return jq.each(function(){
- checkAll(this);
- });
- },
- uncheckAll: function(jq){
- return jq.each(function(){
- uncheckAll(this);
- });
- },
- beginEdit: function(jq, index){
- return jq.each(function(){
- beginEdit(this, index);
- });
- },
- endEdit: function(jq, index){
- return jq.each(function(){
- endEdit(this, index, false);
- });
- },
- cancelEdit: function(jq, index){
- return jq.each(function(){
- endEdit(this, index, true);
- });
- },
- getEditors: function(jq, index){
- return getEditors(jq[0], index);
- },
- getEditor: function(jq, param){ // param: {index:0, field:'name'}
- return getEditor(jq[0], param);
- },
- refreshRow: function(jq, index){
- return jq.each(function(){
- var opts = $.data(this, 'datagrid').options;
- opts.view.refreshRow.call(opts.view, this, index);
- });
- },
- validateRow: function(jq, index){
- return validateRow(jq[0], index);
- },
- updateRow: function(jq, param){ // param: {index:1,row:{code:'code1',name:'name1'}}
- return jq.each(function(){
- var opts = $.data(this, 'datagrid').options;
- opts.view.updateRow.call(opts.view, this, param.index, param.row);
- });
- },
- appendRow: function(jq, row){
- return jq.each(function(){
- appendRow(this, row);
- });
- },
- insertRow: function(jq, param){
- return jq.each(function(){
- insertRow(this, param);
- });
- },
- deleteRow: function(jq, index){
- return jq.each(function(){
- deleteRow(this, index);
- });
- },
- getChanges: function(jq, state){
- return getChanges(jq[0], state); // state: inserted,deleted,updated
- },
- acceptChanges: function(jq){
- return jq.each(function(){
- acceptChanges(this);
- });
- },
- rejectChanges: function(jq){
- return jq.each(function(){
- rejectChanges(this);
- });
- },
- mergeCells: function(jq, param){
- return jq.each(function(){
- mergeCells(this, param);
- });
- },
- showColumn: function(jq, field){
- return jq.each(function(){
- var panel = $(this).datagrid('getPanel');
- panel.find('td[field="' + field + '"]').show();
- $(this).datagrid('getColumnOption', field).hidden = false;
- $(this).datagrid('fitColumns');
- });
- },
- hideColumn: function(jq, field){
- return jq.each(function(){
- var panel = $(this).datagrid('getPanel');
- panel.find('td[field="' + field + '"]').hide();
- $(this).datagrid('getColumnOption', field).hidden = true;
- $(this).datagrid('fitColumns');
- });
- },
- sort: function(jq, param){
- return jq.each(function(){
- sortGrid(this, param);
- });
- }
- };
-
- $.fn.datagrid.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [
- 'url','toolbar','idField','sortName','sortOrder','pagePosition','resizeHandle',
- {sharedStyleSheet:'boolean',fitColumns:'boolean',autoRowHeight:'boolean',striped:'boolean',nowrap:'boolean'},
- {rownumbers:'boolean',singleSelect:'boolean',ctrlSelect:'boolean',checkOnSelect:'boolean',selectOnCheck:'boolean'},
- {pagination:'boolean',pageSize:'number',pageNumber:'number'},
- {multiSort:'boolean',remoteSort:'boolean',showHeader:'boolean',showFooter:'boolean'},
- {scrollbarSize:'number'}
- ]), {
- pageList: (t.attr('pageList') ? eval(t.attr('pageList')) : undefined),
- loadMsg: (t.attr('loadMsg')!=undefined ? t.attr('loadMsg') : undefined),
- rowStyler: (t.attr('rowStyler') ? eval(t.attr('rowStyler')) : undefined)
- });
- };
-
- $.fn.datagrid.parseData = function(target){
- var t = $(target);
- var data = {
- total:0,
- rows:[]
- };
- var fields = t.datagrid('getColumnFields',true).concat(t.datagrid('getColumnFields',false));
- t.find('tbody tr').each(function(){
- data.total++;
- var row = {};
- $.extend(row, $.parser.parseOptions(this,['iconCls','state']));
- for(var i=0; i<fields.length; i++){
- row[fields[i]] = $(this).find('td:eq('+i+')').html();
- }
- data.rows.push(row);
- });
- return data;
- };
-
- var defaultView = {
- render: function(target, container, frozen){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var rows = state.data.rows;
- var fields = $(target).datagrid('getColumnFields', frozen);
-
- if (frozen){
- if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))){
- return;
- }
- }
-
- var table = ['<table class="datagrid-btable" cellspacing="0" cellpadding="0" border="0"><tbody>'];
- for(var i=0; i<rows.length; i++) {
- // get the class and style attributes for this row
- var css = opts.rowStyler ? opts.rowStyler.call(target, i, rows[i]) : '';
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (css){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
-
- var cls = 'class="datagrid-row ' + (i % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '"';
- var style = styleValue ? 'style="' + styleValue + '"' : '';
- var rowId = state.rowIdPrefix + '-' + (frozen?1:2) + '-' + i;
- table.push('<tr id="' + rowId + '" datagrid-row-index="' + i + '" ' + cls + ' ' + style + '>');
- table.push(this.renderRow.call(this, target, fields, frozen, i, rows[i]));
- table.push('</tr>');
- }
- table.push('</tbody></table>');
-
- $(container).html(table.join(''));
- },
-
- renderFooter: function(target, container, frozen){
- var opts = $.data(target, 'datagrid').options;
- var rows = $.data(target, 'datagrid').footer || [];
- var fields = $(target).datagrid('getColumnFields', frozen);
- var table = ['<table class="datagrid-ftable" cellspacing="0" cellpadding="0" border="0"><tbody>'];
-
- for(var i=0; i<rows.length; i++){
- table.push('<tr class="datagrid-row" datagrid-row-index="' + i + '">');
- table.push(this.renderRow.call(this, target, fields, frozen, i, rows[i]));
- table.push('</tr>');
- }
-
- table.push('</tbody></table>');
- $(container).html(table.join(''));
- },
-
- renderRow: function(target, fields, frozen, rowIndex, rowData){
- var opts = $.data(target, 'datagrid').options;
-
- var cc = [];
- if (frozen && opts.rownumbers){
- var rownumber = rowIndex + 1;
- if (opts.pagination){
- rownumber += (opts.pageNumber-1)*opts.pageSize;
- }
- cc.push('<td class="datagrid-td-rownumber"><div class="datagrid-cell-rownumber">'+rownumber+'</div></td>');
- }
- for(var i=0; i<fields.length; i++){
- var field = fields[i];
- var col = $(target).datagrid('getColumnOption', field);
- if (col){
- var value = rowData[field]; // the field value
- var css = col.styler ? (col.styler(value, rowData, rowIndex)||'') : '';
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (css){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
- var cls = classValue ? 'class="' + classValue + '"' : '';
- var style = col.hidden ? 'style="display:none;' + styleValue + '"' : (styleValue ? 'style="' + styleValue + '"' : '');
-
- cc.push('<td field="' + field + '" ' + cls + ' ' + style + '>');
-
- var style = '';
- if (!col.checkbox){
- if (col.align){style += 'text-align:' + col.align + ';'}
- if (!opts.nowrap){
- style += 'white-space:normal;height:auto;';
- } else if (opts.autoRowHeight){
- style += 'height:auto;';
- }
- }
-
- cc.push('<div style="' + style + '" ');
- cc.push(col.checkbox ? 'class="datagrid-cell-check"' : 'class="datagrid-cell ' + col.cellClass + '"');
- cc.push('>');
-
- if (col.checkbox){
- cc.push('<input type="checkbox" ' + (rowData.checked ? 'checked="checked"' : ''));
- cc.push(' name="' + field + '" value="' + (value!=undefined ? value : '') + '">');
- } else if (col.formatter){
- cc.push(col.formatter(value, rowData, rowIndex));
- } else {
- cc.push(value);
- }
-
- cc.push('</div>');
- cc.push('</td>');
- }
- }
- return cc.join('');
- },
-
- refreshRow: function(target, rowIndex){
- this.updateRow.call(this, target, rowIndex, {});
- },
-
- updateRow: function(target, rowIndex, row){
- var opts = $.data(target, 'datagrid').options;
- var rows = $(target).datagrid('getRows');
-
- var oldStyle = _getRowStyle(rowIndex);
- $.extend(rows[rowIndex], row);
- var newStyle = _getRowStyle(rowIndex);
- var oldClassValue = oldStyle.c;
- var styleValue = newStyle.s;
- var classValue = 'datagrid-row ' + (rowIndex % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + newStyle.c;
-
- function _getRowStyle(rowIndex){
- var css = opts.rowStyler ? opts.rowStyler.call(target, rowIndex, rows[rowIndex]) : '';
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (css){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
- return {c:classValue, s:styleValue};
- }
- function _update(frozen){
- var fields = $(target).datagrid('getColumnFields', frozen);
- var tr = opts.finder.getTr(target, rowIndex, 'body', (frozen?1:2));
- var checked = tr.find('div.datagrid-cell-check input[type=checkbox]').is(':checked');
- tr.html(this.renderRow.call(this, target, fields, frozen, rowIndex, rows[rowIndex]));
- tr.attr('style', styleValue).removeClass(oldClassValue).addClass(classValue);
- if (checked){
- tr.find('div.datagrid-cell-check input[type=checkbox]')._propAttr('checked', true);
- }
- }
-
- _update.call(this, true);
- _update.call(this, false);
- $(target).datagrid('fixRowHeight', rowIndex);
- },
-
- insertRow: function(target, index, row){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var data = state.data;
-
- if (index == undefined || index == null) index = data.rows.length;
- if (index > data.rows.length) index = data.rows.length;
-
- function _incIndex(frozen){
- var serno = frozen?1:2;
- for(var i=data.rows.length-1; i>=index; i--){
- var tr = opts.finder.getTr(target, i, 'body', serno);
- tr.attr('datagrid-row-index', i+1);
- tr.attr('id', state.rowIdPrefix + '-' + serno + '-' + (i+1));
- if (frozen && opts.rownumbers){
- var rownumber = i+2;
- if (opts.pagination){
- rownumber += (opts.pageNumber-1)*opts.pageSize;
- }
- tr.find('div.datagrid-cell-rownumber').html(rownumber);
- }
- if (opts.striped){
- tr.removeClass('datagrid-row-alt').addClass((i+1)%2 ? 'datagrid-row-alt' : '');
- }
- }
- }
-
- function _insert(frozen){
- var serno = frozen?1:2;
- var fields = $(target).datagrid('getColumnFields', frozen);
- var rowId = state.rowIdPrefix + '-' + serno + '-' + index;
- var tr = '<tr id="' + rowId + '" class="datagrid-row" datagrid-row-index="' + index + '"></tr>';
- // var tr = '<tr id="' + rowId + '" class="datagrid-row" datagrid-row-index="' + index + '">' + this.renderRow.call(this, target, fields, frozen, index, row) + '</tr>';
- if (index >= data.rows.length){ // append new row
- if (data.rows.length){ // not empty
- opts.finder.getTr(target, '', 'last', serno).after(tr);
- } else {
- var cc = frozen ? dc.body1 : dc.body2;
- cc.html('<table cellspacing="0" cellpadding="0" border="0"><tbody>' + tr + '</tbody></table>');
- }
- } else { // insert new row
- opts.finder.getTr(target, index+1, 'body', serno).before(tr);
- }
- }
-
- _incIndex.call(this, true);
- _incIndex.call(this, false);
- _insert.call(this, true);
- _insert.call(this, false);
-
- data.total += 1;
- data.rows.splice(index, 0, row);
-
- this.refreshRow.call(this, target, index);
- },
-
- deleteRow: function(target, index){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var data = state.data;
-
- function _decIndex(frozen){
- var serno = frozen?1:2;
- for(var i=index+1; i<data.rows.length; i++){
- var tr = opts.finder.getTr(target, i, 'body', serno);
- tr.attr('datagrid-row-index', i-1);
- tr.attr('id', state.rowIdPrefix + '-' + serno + '-' + (i-1));
- if (frozen && opts.rownumbers){
- var rownumber = i;
- if (opts.pagination){
- rownumber += (opts.pageNumber-1)*opts.pageSize;
- }
- tr.find('div.datagrid-cell-rownumber').html(rownumber);
- }
- if (opts.striped){
- tr.removeClass('datagrid-row-alt').addClass((i-1)%2 ? 'datagrid-row-alt' : '');
- }
- }
- }
-
- opts.finder.getTr(target, index).remove();
- _decIndex.call(this, true);
- _decIndex.call(this, false);
-
- data.total -= 1;
- data.rows.splice(index,1);
- },
-
- onBeforeRender: function(target, rows){},
- onAfterRender: function(target){
- var opts = $.data(target, 'datagrid').options;
- if (opts.showFooter){
- var footer = $(target).datagrid('getPanel').find('div.datagrid-footer');
- footer.find('div.datagrid-cell-rownumber,div.datagrid-cell-check').css('visibility', 'hidden');
- }
- }
- };
-
- $.fn.datagrid.defaults = $.extend({}, $.fn.panel.defaults, {
- sharedStyleSheet: false,
- frozenColumns: undefined,
- columns: undefined,
- fitColumns: false,
- resizeHandle: 'right', // left,right,both
- autoRowHeight: true,
- toolbar: null,
- striped: false,
- method: 'post',
- nowrap: true,
- idField: null,
- url: null,
- data: null,
- loadMsg: 'Processing, please wait ...',
- rownumbers: false,
- singleSelect: false,
- ctrlSelect: false, // only allows multi-selection when ctrl+click is used
- selectOnCheck: true,
- checkOnSelect: true,
- pagination: false,
- pagePosition: 'bottom', // top,bottom,both
- pageNumber: 1,
- pageSize: 10,
- pageList: [10,20,30,40,50],
- queryParams: {},
- sortName: null,
- sortOrder: 'asc',
- multiSort: false,
- remoteSort: true,
- showHeader: true,
- showFooter: false,
- scrollbarSize: 18,
- rowEvents: {
- mouseover: hoverEventHandler(true),
- mouseout: hoverEventHandler(false),
- click: clickEventHandler,
- dblclick: dblclickEventHandler,
- contextmenu: contextmenuEventHandler
- },
- rowStyler: function(rowIndex, rowData){}, // return style such as 'background:red'
- loader: function(param, success, error){
- var opts = $(this).datagrid('options');
- if (!opts.url) return false;
- $.ajax({
- type: opts.method,
- url: opts.url,
- data: param,
- dataType: 'json',
- success: function(data){
- success(data);
- },
- error: function(){
- error.apply(this, arguments);
- }
- });
- },
- loadFilter: function(data){
- if (typeof data.length == 'number' && typeof data.splice == 'function'){ // is array
- return {
- total: data.length,
- rows: data
- };
- } else {
- return data;
- }
- },
-
- editors: editors,
- finder:{
- getTr:function(target, index, type, serno){
- type = type || 'body';
- serno = serno || 0;
- var state = $.data(target, 'datagrid');
- var dc = state.dc; // data container
- var opts = state.options;
- if (serno == 0){
- var tr1 = opts.finder.getTr(target, index, type, 1);
- var tr2 = opts.finder.getTr(target, index, type, 2);
- return tr1.add(tr2);
- } else {
- if (type == 'body'){
- var tr = $('#' + state.rowIdPrefix + '-' + serno + '-' + index);
- if (!tr.length){
- tr = (serno==1?dc.body1:dc.body2).find('>table>tbody>tr[datagrid-row-index='+index+']');
- }
- return tr;
- } else if (type == 'footer'){
- return (serno==1?dc.footer1:dc.footer2).find('>table>tbody>tr[datagrid-row-index='+index+']');
- } else if (type == 'selected'){
- return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-selected');
- } else if (type == 'highlight'){
- return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-over');
- } else if (type == 'checked'){
- return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-checked');
- // return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row:has(div.datagrid-cell-check input:checked)');
- } else if (type == 'editing'){
- return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr.datagrid-row-editing');
- } else if (type == 'last'){
- return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr[datagrid-row-index]:last');
- } else if (type == 'allbody'){
- return (serno==1?dc.body1:dc.body2).find('>table>tbody>tr[datagrid-row-index]');
- } else if (type == 'allfooter'){
- return (serno==1?dc.footer1:dc.footer2).find('>table>tbody>tr[datagrid-row-index]');
- }
- }
- },
- getRow:function(target, p){ // p can be row index or tr object
- var index = (typeof p == 'object') ? p.attr('datagrid-row-index') : p;
- return $.data(target, 'datagrid').data.rows[parseInt(index)];
- },
- getRows:function(target){
- return $(target).datagrid('getRows');
- }
- },
- view: defaultView,
-
- onBeforeLoad: function(param){},
- onLoadSuccess: function(){},
- onLoadError: function(){},
- onClickRow: function(rowIndex, rowData){},
- onDblClickRow: function(rowIndex, rowData){},
- onClickCell: function(rowIndex, field, value){},
- onDblClickCell: function(rowIndex, field, value){},
- onBeforeSortColumn: function(sort, order){},
- onSortColumn: function(sort, order){},
- onResizeColumn: function(field, width){},
- onBeforeSelect: function(rowIndex, rowData){},
- onSelect: function(rowIndex, rowData){},
- onBeforeUnselect: function(rowIndex, rowData){},
- onUnselect: function(rowIndex, rowData){},
- onSelectAll: function(rows){},
- onUnselectAll: function(rows){},
- onBeforeCheck: function(rowIndex, rowData){},
- onCheck: function(rowIndex, rowData){},
- onBeforeUncheck: function(rowIndex, rowData){},
- onUncheck: function(rowIndex, rowData){},
- onCheckAll: function(rows){},
- onUncheckAll: function(rows){},
- onBeforeEdit: function(rowIndex, rowData){},
- onBeginEdit: function(rowIndex, rowData){},
- onEndEdit: function(rowIndex, rowData, changes){},
- onAfterEdit: function(rowIndex, rowData, changes){},
- onCancelEdit: function(rowIndex, rowData){},
- onHeaderContextMenu: function(e, field){},
- onRowContextMenu: function(e, rowIndex, rowData){}
- });
- })(jQuery);
- /**
- * propertygrid - jQuery EasyUI
- *
- * Dependencies:
- * datagrid
- *
- */
- (function($){
- var currTarget;
- $(document).unbind('.propertygrid').bind('mousedown.propertygrid', function(e){
- var p = $(e.target).closest('div.datagrid-view,div.combo-panel');
- if (p.length){return;}
- stopEditing(currTarget);
- currTarget = undefined;
- });
-
- function buildGrid(target){
- var state = $.data(target, 'propertygrid');
- var opts = $.data(target, 'propertygrid').options;
- $(target).datagrid($.extend({}, opts, {
- cls:'propertygrid',
- view:(opts.showGroup ? opts.groupView : opts.view),
- onBeforeEdit:function(index, row){
- if (opts.onBeforeEdit.call(target, index, row) == false){return false;}
- var dg = $(this);
- var row = dg.datagrid('getRows')[index];
- var col = dg.datagrid('getColumnOption', 'value');
- col.editor = row.editor;
- },
- onClickCell:function(index, field, value){
- if (currTarget != this){
- stopEditing(currTarget);
- currTarget = this;
- }
- if (opts.editIndex != index){
- stopEditing(currTarget);
- $(this).datagrid('beginEdit', index);
- var ed = $(this).datagrid('getEditor', {index:index,field:field});
- if (!ed){
- ed = $(this).datagrid('getEditor', {index:index,field:'value'});
- }
- if (ed){
- var t = $(ed.target);
- var input = t.data('textbox') ? t.textbox('textbox') : t;
- input.focus();
- opts.editIndex = index;
- }
- }
- opts.onClickCell.call(target, index, field, value);
- },
- loadFilter:function(data){
- stopEditing(this);
- return opts.loadFilter.call(this, data);
- }
- }));
- }
-
- function stopEditing(target){
- var t = $(target);
- if (!t.length){return}
- var opts = $.data(target, 'propertygrid').options;
- opts.finder.getTr(target, null, 'editing').each(function(){
- var index = parseInt($(this).attr('datagrid-row-index'));
- if (t.datagrid('validateRow', index)){
- t.datagrid('endEdit', index);
- } else {
- t.datagrid('cancelEdit', index);
- }
- });
- }
-
- $.fn.propertygrid = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.propertygrid.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.datagrid(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'propertygrid');
- if (state){
- $.extend(state.options, options);
- } else {
- var opts = $.extend({}, $.fn.propertygrid.defaults, $.fn.propertygrid.parseOptions(this), options);
- opts.frozenColumns = $.extend(true, [], opts.frozenColumns);
- opts.columns = $.extend(true, [], opts.columns);
- $.data(this, 'propertygrid', {
- options: opts
- });
- }
- buildGrid(this);
- });
- }
-
- $.fn.propertygrid.methods = {
- options: function(jq){
- return $.data(jq[0], 'propertygrid').options;
- }
- };
-
- $.fn.propertygrid.parseOptions = function(target){
- return $.extend({}, $.fn.datagrid.parseOptions(target), $.parser.parseOptions(target,[{showGroup:'boolean'}]));
- };
-
- // the group view definition
- var groupview = $.extend({}, $.fn.datagrid.defaults.view, {
- render: function(target, container, frozen){
- var table = [];
- var groups = this.groups;
- for(var i=0; i<groups.length; i++){
- table.push(this.renderGroup.call(this, target, i, groups[i], frozen));
- }
- $(container).html(table.join(''));
- },
-
- renderGroup: function(target, groupIndex, group, frozen){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var fields = $(target).datagrid('getColumnFields', frozen);
-
- var table = [];
- table.push('<div class="datagrid-group" group-index=' + groupIndex + '>');
- table.push('<table cellspacing="0" cellpadding="0" border="0" style="height:100%"><tbody>');
- table.push('<tr>');
- if ((frozen && (opts.rownumbers || opts.frozenColumns.length)) ||
- (!frozen && !(opts.rownumbers || opts.frozenColumns.length))){
- table.push('<td style="border:0;text-align:center;width:25px"><span class="datagrid-row-expander datagrid-row-collapse" style="display:inline-block;width:16px;height:16px;cursor:pointer"> </span></td>');
- }
- table.push('<td style="border:0;">');
- if (!frozen){
- table.push('<span class="datagrid-group-title">');
- table.push(opts.groupFormatter.call(target, group.value, group.rows));
- table.push('</span>');
- }
- table.push('</td>');
- table.push('</tr>');
- table.push('</tbody></table>');
- table.push('</div>');
-
- table.push('<table class="datagrid-btable" cellspacing="0" cellpadding="0" border="0"><tbody>');
- var index = group.startIndex;
- for(var j=0; j<group.rows.length; j++) {
- var css = opts.rowStyler ? opts.rowStyler.call(target, index, group.rows[j]) : '';
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (css){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
-
- var cls = 'class="datagrid-row ' + (index % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '"';
- var style = styleValue ? 'style="' + styleValue + '"' : '';
- var rowId = state.rowIdPrefix + '-' + (frozen?1:2) + '-' + index;
- table.push('<tr id="' + rowId + '" datagrid-row-index="' + index + '" ' + cls + ' ' + style + '>');
- table.push(this.renderRow.call(this, target, fields, frozen, index, group.rows[j]));
- table.push('</tr>');
- index++;
- }
- table.push('</tbody></table>');
- return table.join('');
- },
-
- bindEvents: function(target){
- var state = $.data(target, 'datagrid');
- var dc = state.dc;
- var body = dc.body1.add(dc.body2);
- var clickHandler = ($.data(body[0],'events')||$._data(body[0],'events')).click[0].handler;
- body.unbind('click').bind('click', function(e){
- var tt = $(e.target);
- var expander = tt.closest('span.datagrid-row-expander');
- if (expander.length){
- var gindex = expander.closest('div.datagrid-group').attr('group-index');
- if (expander.hasClass('datagrid-row-collapse')){
- $(target).datagrid('collapseGroup', gindex);
- } else {
- $(target).datagrid('expandGroup', gindex);
- }
- } else {
- clickHandler(e);
- }
- e.stopPropagation();
- });
- },
-
- onBeforeRender: function(target, rows){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
-
- initCss();
-
- var groups = [];
- for(var i=0; i<rows.length; i++){
- var row = rows[i];
- var group = getGroup(row[opts.groupField]);
- if (!group){
- group = {
- value: row[opts.groupField],
- rows: [row]
- };
- groups.push(group);
- } else {
- group.rows.push(row);
- }
- }
-
- var index = 0;
- var newRows = [];
- for(var i=0; i<groups.length; i++){
- var group = groups[i];
- group.startIndex = index;
- index += group.rows.length;
- newRows = newRows.concat(group.rows);
- }
-
- state.data.rows = newRows;
- this.groups = groups;
-
- var that = this;
- setTimeout(function(){
- that.bindEvents(target);
- },0);
-
- function getGroup(value){
- for(var i=0; i<groups.length; i++){
- var group = groups[i];
- if (group.value == value){
- return group;
- }
- }
- return null;
- }
- function initCss(){
- if (!$('#datagrid-group-style').length){
- $('head').append(
- '<style id="datagrid-group-style">' +
- '.datagrid-group{height:25px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}' +
- '</style>'
- );
- }
- }
- }
- });
- $.extend($.fn.datagrid.methods, {
- expandGroup:function(jq, groupIndex){
- return jq.each(function(){
- var view = $.data(this, 'datagrid').dc.view;
- var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index="'+groupIndex+'"]' : 'div.datagrid-group');
- var expander = group.find('span.datagrid-row-expander');
- if (expander.hasClass('datagrid-row-expand')){
- expander.removeClass('datagrid-row-expand').addClass('datagrid-row-collapse');
- group.next('table').show();
- }
- $(this).datagrid('fixRowHeight');
- });
- },
- collapseGroup:function(jq, groupIndex){
- return jq.each(function(){
- var view = $.data(this, 'datagrid').dc.view;
- var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index="'+groupIndex+'"]' : 'div.datagrid-group');
- var expander = group.find('span.datagrid-row-expander');
- if (expander.hasClass('datagrid-row-collapse')){
- expander.removeClass('datagrid-row-collapse').addClass('datagrid-row-expand');
- group.next('table').hide();
- }
- $(this).datagrid('fixRowHeight');
- });
- }
- });
- $.extend(groupview, {
- refreshGroupTitle: function(target, groupIndex){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var group = this.groups[groupIndex];
- var span = dc.body2.children('div.datagrid-group[group-index=' + groupIndex + ']').find('span.datagrid-group-title');
- span.html(opts.groupFormatter.call(target, group.value, group.rows));
- },
-
- insertRow: function(target, index, row){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var group = null;
- var groupIndex;
-
- for(var i=0; i<this.groups.length; i++){
- if (this.groups[i].value == row[opts.groupField]){
- group = this.groups[i];
- groupIndex = i;
- break;
- }
- }
- if (group){
- if (index == undefined || index == null){
- index = state.data.rows.length;
- }
- if (index < group.startIndex){
- index = group.startIndex;
- } else if (index > group.startIndex + group.rows.length){
- index = group.startIndex + group.rows.length;
- }
- $.fn.datagrid.defaults.view.insertRow.call(this, target, index, row);
-
- if (index >= group.startIndex + group.rows.length){
- _moveTr(index, true);
- _moveTr(index, false);
- }
- group.rows.splice(index - group.startIndex, 0, row);
- } else {
- group = {
- value: row[opts.groupField],
- rows: [row],
- startIndex: state.data.rows.length
- }
- groupIndex = this.groups.length;
- dc.body1.append(this.renderGroup.call(this, target, groupIndex, group, true));
- dc.body2.append(this.renderGroup.call(this, target, groupIndex, group, false));
- this.groups.push(group);
- state.data.rows.push(row);
- }
-
- this.refreshGroupTitle(target, groupIndex);
-
- function _moveTr(index,frozen){
- var serno = frozen?1:2;
- var prevTr = opts.finder.getTr(target, index-1, 'body', serno);
- var tr = opts.finder.getTr(target, index, 'body', serno);
- tr.insertAfter(prevTr);
- }
- },
-
- updateRow: function(target, index, row){
- var opts = $.data(target, 'datagrid').options;
- $.fn.datagrid.defaults.view.updateRow.call(this, target, index, row);
- var tb = opts.finder.getTr(target, index, 'body', 2).closest('table.datagrid-btable');
- var groupIndex = parseInt(tb.prev().attr('group-index'));
- this.refreshGroupTitle(target, groupIndex);
- },
-
- deleteRow: function(target, index){
- var state = $.data(target, 'datagrid');
- var opts = state.options;
- var dc = state.dc;
- var body = dc.body1.add(dc.body2);
-
- var tb = opts.finder.getTr(target, index, 'body', 2).closest('table.datagrid-btable');
- var groupIndex = parseInt(tb.prev().attr('group-index'));
-
- $.fn.datagrid.defaults.view.deleteRow.call(this, target, index);
-
- var group = this.groups[groupIndex];
- if (group.rows.length > 1){
- group.rows.splice(index-group.startIndex, 1);
- this.refreshGroupTitle(target, groupIndex);
- } else {
- body.children('div.datagrid-group[group-index='+groupIndex+']').remove();
- for(var i=groupIndex+1; i<this.groups.length; i++){
- body.children('div.datagrid-group[group-index='+i+']').attr('group-index', i-1);
- }
- this.groups.splice(groupIndex, 1);
- }
-
- var index = 0;
- for(var i=0; i<this.groups.length; i++){
- var group = this.groups[i];
- group.startIndex = index;
- index += group.rows.length;
- }
- }
- });
- // end of group view definition
-
- $.fn.propertygrid.defaults = $.extend({}, $.fn.datagrid.defaults, {
- singleSelect:true,
- remoteSort:false,
- fitColumns:true,
- loadMsg:'',
- frozenColumns:[[
- {field:'f',width:16,resizable:false}
- ]],
- columns:[[
- {field:'name',title:'Name',width:100,sortable:true},
- {field:'value',title:'Value',width:100,resizable:false}
- ]],
-
- showGroup:false,
- groupView:groupview,
- groupField:'group',
- groupFormatter:function(fvalue,rows){return fvalue}
- });
- })(jQuery);
- /**
- * treegrid - jQuery EasyUI
- *
- * Dependencies:
- * datagrid
- *
- */
- (function($){
- /**
- * Get the index of array item, return -1 when the item is not found.
- */
- // function indexOfArray(a,o){
- // for(var i=0,len=a.length; i<len; i++){
- // if (a[i] == o) return i;
- // }
- // return -1;
- // }
- /**
- * Remove array item, 'o' parameter can be item object or id field name.
- * When 'o' parameter is the id field name, the 'id' parameter is valid.
- */
- // function removeArrayItem(a,o){
- // var index = indexOfArray(a,o);
- // if (index != -1){
- // a.splice(index, 1);
- // }
- // }
-
- function buildGrid(target){
- var state = $.data(target, 'treegrid')
- var opts = state.options;
- $(target).datagrid($.extend({}, opts, {
- url: null,
- data: null,
- loader: function(){
- return false;
- },
- onBeforeLoad: function(){return false},
- onLoadSuccess: function(){},
- onResizeColumn: function(field, width){
- setRowHeight(target);
- opts.onResizeColumn.call(target, field, width);
- },
- onBeforeSortColumn: function(sort,order){
- if (opts.onBeforeSortColumn.call(target,sort,order) == false){return false}
- },
- onSortColumn: function(sort,order){
- opts.sortName = sort;
- opts.sortOrder = order;
- if (opts.remoteSort){
- request(target);
- } else {
- var data = $(target).treegrid('getData');
- loadData(target, 0, data);
- }
- opts.onSortColumn.call(target, sort, order);
- },
- onBeforeEdit: function(index, row){
- if (opts.onBeforeEdit.call(target, row) == false) return false;
- },
- onAfterEdit:function(index,row,changes){
- opts.onAfterEdit.call(target, row, changes);
- },
- onCancelEdit:function(index,row){
- opts.onCancelEdit.call(target, row);
- },
- onBeforeSelect:function(index){
- if (opts.onBeforeSelect.call(target, find(target, index)) == false){return false}
- },
- onSelect:function(index){
- opts.onSelect.call(target, find(target, index));
- },
- onBeforeUnselect:function(index){
- if (opts.onBeforeUnselect.call(target, find(target, index)) == false){return false}
- },
- onUnselect:function(index){
- opts.onUnselect.call(target, find(target, index));
- },
- // onSelectAll:function(){
- // opts.onSelectAll.call(target, $.data(target, 'treegrid').data);
- // },
- // onUnselectAll:function(){
- // opts.onUnselectAll.call(target, $.data(target, 'treegrid').data);
- // },
- onBeforeCheck:function(index){
- if (opts.onBeforeCheck.call(target, find(target, index)) == false){return false}
- },
- onCheck:function(index){
- opts.onCheck.call(target, find(target, index));
- },
- onBeforeUncheck:function(index){
- if (opts.onBeforeUncheck.call(target, find(target, index)) == false){return false}
- },
- onUncheck:function(index){
- opts.onUncheck.call(target, find(target, index));
- },
- // onCheckAll:function(){
- // opts.onCheckAll.call(target, $.data(target, 'treegrid').data);
- // },
- // onUncheckAll:function(){
- // opts.onUncheckAll.call(target, $.data(target, 'treegrid').data);
- // },
- onClickRow:function(index){
- opts.onClickRow.call(target, find(target, index));
- },
- onDblClickRow:function(index){
- opts.onDblClickRow.call(target, find(target, index));
- },
- onClickCell:function(index,field){
- opts.onClickCell.call(target, field, find(target, index));
- },
- onDblClickCell:function(index,field){
- opts.onDblClickCell.call(target, field, find(target, index));
- },
- onRowContextMenu:function(e,index){
- opts.onContextMenu.call(target, e, find(target, index));
- }
- }));
- if (!opts.columns){
- var dgOpts = $.data(target, 'datagrid').options;
- opts.columns = dgOpts.columns;
- opts.frozenColumns = dgOpts.frozenColumns;
- }
- state.dc = $.data(target, 'datagrid').dc;
- if (opts.pagination){
- var pager = $(target).datagrid('getPager');
- pager.pagination({
- pageNumber:opts.pageNumber,
- pageSize:opts.pageSize,
- pageList:opts.pageList,
- onSelectPage: function(pageNum, pageSize){
- // save the page state
- opts.pageNumber = pageNum;
- opts.pageSize = pageSize;
-
- request(target); // request new page data
- }
- });
- opts.pageSize = pager.pagination('options').pageSize; // repare the pageSize value
- }
- }
-
- function setRowHeight(target, idValue){
- var opts = $.data(target, 'datagrid').options;
- var dc = $.data(target, 'datagrid').dc;
- if (!dc.body1.is(':empty') && (!opts.nowrap || opts.autoRowHeight)){
- if (idValue != undefined){
- var children = getChildren(target, idValue);
- for(var i=0; i<children.length; i++){
- setHeight(children[i][opts.idField]);
- }
- }
- }
- $(target).datagrid('fixRowHeight', idValue);
-
- function setHeight(idValue){
- var tr1 = opts.finder.getTr(target, idValue, 'body', 1);
- var tr2 = opts.finder.getTr(target, idValue, 'body', 2);
- tr1.css('height', '');
- tr2.css('height', '');
- var height = Math.max(tr1.height(), tr2.height());
- tr1.css('height', height);
- tr2.css('height', height);
- }
- }
-
- function setRowNumbers(target){
- var dc = $.data(target, 'datagrid').dc;
- var opts = $.data(target, 'treegrid').options;
- if (!opts.rownumbers) return;
- dc.body1.find('div.datagrid-cell-rownumber').each(function(i){
- $(this).html(i+1);
- });
- }
-
- function hoverEventHandler(isOver){
- return function(e){
- $.fn.datagrid.defaults.rowEvents[isOver ? 'mouseover' : 'mouseout'](e);
- var tt = $(e.target);
- var fn = isOver ? 'addClass' : 'removeClass';
- if (tt.hasClass('tree-hit')){
- tt.hasClass('tree-expanded') ? tt[fn]('tree-expanded-hover') : tt[fn]('tree-collapsed-hover');
- }
- }
- }
- function clickEventHandler(e){
- var tt = $(e.target);
- if (tt.hasClass('tree-hit')){
- var tr = tt.closest('tr.datagrid-row');
- var target = tr.closest('div.datagrid-view').children('.datagrid-f')[0];
- toggle(target, tr.attr('node-id'));
- } else {
- $.fn.datagrid.defaults.rowEvents.click(e);
- }
- }
-
- /**
- * create sub tree
- * parentId: the node id value
- */
- function createSubTree(target, parentId){
- var opts = $.data(target, 'treegrid').options;
- var tr1 = opts.finder.getTr(target, parentId, 'body', 1);
- var tr2 = opts.finder.getTr(target, parentId, 'body', 2);
- var colspan1 = $(target).datagrid('getColumnFields', true).length + (opts.rownumbers?1:0);
- var colspan2 = $(target).datagrid('getColumnFields', false).length;
- _create(tr1, colspan1);
- _create(tr2, colspan2);
-
- function _create(tr, colspan){
- $('<tr class="treegrid-tr-tree">' +
- '<td style="border:0px" colspan="' + colspan + '">' +
- '<div></div>' +
- '</td>' +
- '</tr>').insertAfter(tr);
- }
- }
-
- /**
- * load data to specified node.
- */
- function loadData(target, parentId, data, append){
- var state = $.data(target, 'treegrid');
- var opts = state.options;
- var dc = state.dc;
- data = opts.loadFilter.call(target, data, parentId);
-
- var node = find(target, parentId);
- if (node){
- var node1 = opts.finder.getTr(target, parentId, 'body', 1);
- var node2 = opts.finder.getTr(target, parentId, 'body', 2);
- var cc1 = node1.next('tr.treegrid-tr-tree').children('td').children('div');
- var cc2 = node2.next('tr.treegrid-tr-tree').children('td').children('div');
- if (!append){node.children = [];}
- } else {
- var cc1 = dc.body1;
- var cc2 = dc.body2;
- if (!append){state.data = [];}
- }
- if (!append){
- // state.data = [];
- cc1.empty();
- cc2.empty();
- }
-
- if (opts.view.onBeforeRender){
- opts.view.onBeforeRender.call(opts.view, target, parentId, data);
- }
- opts.view.render.call(opts.view, target, cc1, true);
- opts.view.render.call(opts.view, target, cc2, false);
- if (opts.showFooter){
- opts.view.renderFooter.call(opts.view, target, dc.footer1, true);
- opts.view.renderFooter.call(opts.view, target, dc.footer2, false);
- }
- if (opts.view.onAfterRender){
- opts.view.onAfterRender.call(opts.view, target);
- }
-
- // opts.onLoadSuccess.call(target, node, data);
-
- // reset the pagination
- if (!parentId && opts.pagination){
- var total = $.data(target, 'treegrid').total;
- var pager = $(target).datagrid('getPager');
- if (pager.pagination('options').total != total){
- pager.pagination({total:total});
- }
- }
-
- setRowHeight(target);
- setRowNumbers(target);
- $(target).treegrid('showLines');
- $(target).treegrid('setSelectionState');
- $(target).treegrid('autoSizeColumn');
-
- opts.onLoadSuccess.call(target, node, data);
- }
-
- function request(target, parentId, params, append, callback){
- var opts = $.data(target, 'treegrid').options;
- var body = $(target).datagrid('getPanel').find('div.datagrid-body');
-
- if (params) opts.queryParams = params;
- var param = $.extend({}, opts.queryParams);
- if (opts.pagination){
- $.extend(param, {
- page: opts.pageNumber,
- rows: opts.pageSize
- });
- }
- if (opts.sortName){
- $.extend(param, {
- sort: opts.sortName,
- order: opts.sortOrder
- });
- }
-
- var row = find(target, parentId);
-
- if (opts.onBeforeLoad.call(target, row, param) == false) return;
- // if (!opts.url) return;
-
- var folder = body.find('tr[node-id="' + parentId + '"] span.tree-folder');
- folder.addClass('tree-loading');
- $(target).treegrid('loading');
- var result = opts.loader.call(target, param, function(data){
- folder.removeClass('tree-loading');
- $(target).treegrid('loaded');
- loadData(target, parentId, data, append);
- if (callback) {
- callback();
- }
- }, function(){
- folder.removeClass('tree-loading');
- $(target).treegrid('loaded');
- opts.onLoadError.apply(target, arguments);
- if (callback){
- callback();
- }
- });
- if (result == false){
- folder.removeClass('tree-loading');
- $(target).treegrid('loaded');
- }
- }
-
- function getRoot(target){
- var rows = getRoots(target);
- if (rows.length){
- return rows[0];
- } else {
- return null;
- }
- }
-
- function getRoots(target){
- return $.data(target, 'treegrid').data;
- }
-
- function getParent(target, idValue){
- var row = find(target, idValue);
- if (row._parentId){
- return find(target, row._parentId);
- } else {
- return null;
- }
- }
-
- function getChildren(target, parentId){
- var opts = $.data(target, 'treegrid').options;
- var body = $(target).datagrid('getPanel').find('div.datagrid-view2 div.datagrid-body');
- var nodes = [];
- if (parentId){
- getNodes(parentId);
- } else {
- var roots = getRoots(target);
- for(var i=0; i<roots.length; i++){
- nodes.push(roots[i]);
- getNodes(roots[i][opts.idField]);
- }
- }
-
- function getNodes(parentId){
- var pnode = find(target, parentId);
- if (pnode && pnode.children){
- for(var i=0,len=pnode.children.length; i<len; i++){
- var cnode = pnode.children[i];
- nodes.push(cnode);
- getNodes(cnode[opts.idField]);
- }
- }
- }
-
- return nodes;
- }
-
- // function getSelected(target){
- // var rows = getSelections(target);
- // if (rows.length){
- // return rows[0];
- // } else {
- // return null;
- // }
- // }
- //
- // function getSelections(target){
- // var rows = [];
- // var panel = $(target).datagrid('getPanel');
- // panel.find('div.datagrid-view2 div.datagrid-body tr.datagrid-row-selected').each(function(){
- // var id = $(this).attr('node-id');
- // rows.push(find(target, id));
- // });
- // return rows;
- // }
-
- function getLevel(target, idValue){
- if (!idValue) return 0;
- var opts = $.data(target, 'treegrid').options;
- var view = $(target).datagrid('getPanel').children('div.datagrid-view');
- var node = view.find('div.datagrid-body tr[node-id="' + idValue + '"]').children('td[field="' + opts.treeField + '"]');
- return node.find('span.tree-indent,span.tree-hit').length;
- }
-
- function find(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var data = $.data(target, 'treegrid').data;
- var cc = [data];
- while(cc.length){
- var c = cc.shift();
- for(var i=0; i<c.length; i++){
- var node = c[i];
- if (node[opts.idField] == idValue){
- return node;
- } else if (node['children']){
- cc.push(node['children']);
- }
- }
- }
- return null;
- }
-
- function collapse(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var row = find(target, idValue);
- var tr = opts.finder.getTr(target, idValue);
- var hit = tr.find('span.tree-hit');
-
- if (hit.length == 0) return; // is leaf
- if (hit.hasClass('tree-collapsed')) return; // has collapsed
- if (opts.onBeforeCollapse.call(target, row) == false) return;
-
- hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed');
- hit.next().removeClass('tree-folder-open');
- row.state = 'closed';
- tr = tr.next('tr.treegrid-tr-tree');
- var cc = tr.children('td').children('div');
- if (opts.animate){
- cc.slideUp('normal', function(){
- $(target).treegrid('autoSizeColumn');
- setRowHeight(target, idValue);
- opts.onCollapse.call(target, row);
- });
- } else {
- cc.hide();
- $(target).treegrid('autoSizeColumn');
- setRowHeight(target, idValue);
- opts.onCollapse.call(target, row);
- }
- }
-
- function expand(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var tr = opts.finder.getTr(target, idValue);
- var hit = tr.find('span.tree-hit');
- var row = find(target, idValue);
-
- if (hit.length == 0) return; // is leaf
- if (hit.hasClass('tree-expanded')) return; // has expanded
- if (opts.onBeforeExpand.call(target, row) == false) return;
-
- hit.removeClass('tree-collapsed tree-collapsed-hover').addClass('tree-expanded');
- hit.next().addClass('tree-folder-open');
- var subtree = tr.next('tr.treegrid-tr-tree');
- if (subtree.length){
- var cc = subtree.children('td').children('div');
- _expand(cc);
- } else {
- createSubTree(target, row[opts.idField]);
- var subtree = tr.next('tr.treegrid-tr-tree');
- var cc = subtree.children('td').children('div');
- cc.hide();
-
- // var params = opts.queryParams || {};
- var params = $.extend({}, opts.queryParams || {});
- params.id = row[opts.idField];
- request(target, row[opts.idField], params, true, function(){
- if (cc.is(':empty')){
- subtree.remove();
- } else {
- _expand(cc);
- }
- });
- }
-
- function _expand(cc){
- row.state = 'open';
- if (opts.animate){
- cc.slideDown('normal', function(){
- $(target).treegrid('autoSizeColumn');
- setRowHeight(target, idValue);
- opts.onExpand.call(target, row);
- });
- } else {
- cc.show();
- $(target).treegrid('autoSizeColumn');
- setRowHeight(target, idValue);
- opts.onExpand.call(target, row);
- }
- }
- }
-
- function toggle(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var tr = opts.finder.getTr(target, idValue);
- var hit = tr.find('span.tree-hit');
- if (hit.hasClass('tree-expanded')){
- collapse(target, idValue);
- } else {
- expand(target, idValue);
- }
- }
-
- function collapseAll(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var nodes = getChildren(target, idValue);
- if (idValue){
- nodes.unshift(find(target, idValue));
- }
- for(var i=0; i<nodes.length; i++){
- collapse(target, nodes[i][opts.idField]);
- }
- }
-
- function expandAll(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var nodes = getChildren(target, idValue);
- if (idValue){
- nodes.unshift(find(target, idValue));
- }
- for(var i=0; i<nodes.length; i++){
- expand(target, nodes[i][opts.idField]);
- }
- }
-
- function expandTo(target, idValue){
- var opts = $.data(target, 'treegrid').options;
- var ids = [];
- var p = getParent(target, idValue);
- while(p){
- var id = p[opts.idField];
- ids.unshift(id);
- p = getParent(target, id);
- }
- for(var i=0; i<ids.length; i++){
- expand(target, ids[i]);
- }
- }
-
- function append(target, param){
- var opts = $.data(target, 'treegrid').options;
- if (param.parent){
- var tr = opts.finder.getTr(target, param.parent);
- if (tr.next('tr.treegrid-tr-tree').length == 0){
- createSubTree(target, param.parent);
- }
- var cell = tr.children('td[field="' + opts.treeField + '"]').children('div.datagrid-cell');
- var nodeIcon = cell.children('span.tree-icon');
- if (nodeIcon.hasClass('tree-file')){
- nodeIcon.removeClass('tree-file').addClass('tree-folder tree-folder-open');
- // nodeIcon.removeClass('tree-file').addClass('tree-folder');
- var hit = $('<span class="tree-hit tree-expanded"></span>').insertBefore(nodeIcon);
- if (hit.prev().length){
- hit.prev().remove();
- }
- }
- }
- loadData(target, param.parent, param.data, true);
- }
-
- function insert(target, param){
- var ref = param.before || param.after;
- var opts = $.data(target, 'treegrid').options;
- var pnode = getParent(target, ref);
- append(target, {
- parent: (pnode?pnode[opts.idField]:null),
- data: [param.data]
- });
-
- // adjust the sequence of nodes
- var pdata = pnode ? pnode.children : $(target).treegrid('getRoots');
- for(var i=0; i<pdata.length; i++){
- if (pdata[i][opts.idField] == ref){
- var lastNode = pdata[pdata.length-1];
- pdata.splice(param.before ? i : (i+1), 0, lastNode);
- pdata.splice(pdata.length-1, 1);
- break;
- }
- }
-
- _move(true);
- _move(false);
- setRowNumbers(target);
- $(target).treegrid('showLines');
-
- function _move(frozen){
- var serno = frozen?1:2;
- var tr = opts.finder.getTr(target, param.data[opts.idField], 'body', serno);
- var table = tr.closest('table.datagrid-btable');
- tr = tr.parent().children();
- var dest = opts.finder.getTr(target, ref, 'body', serno);
- if (param.before){
- tr.insertBefore(dest);
- } else {
- var sub = dest.next('tr.treegrid-tr-tree');
- tr.insertAfter(sub.length?sub:dest);
- }
- table.remove();
- }
- }
-
- /**
- * remove the specified node
- */
- function remove(target, idValue){
- var state = $.data(target, 'treegrid');
- $(target).datagrid('deleteRow', idValue);
- setRowNumbers(target);
- state.total -= 1;
- $(target).datagrid('getPager').pagination('refresh', {total:state.total});
- $(target).treegrid('showLines');
- }
-
- function showLines(target){
- var t = $(target);
- var opts = t.treegrid('options');
- if (opts.lines){
- t.treegrid('getPanel').addClass('tree-lines');
- } else {
- t.treegrid('getPanel').removeClass('tree-lines');
- return;
- }
-
- t.treegrid('getPanel').find('span.tree-indent').removeClass('tree-line tree-join tree-joinbottom');
- t.treegrid('getPanel').find('div.datagrid-cell').removeClass('tree-node-last tree-root-first tree-root-one');
-
- var roots = t.treegrid('getRoots');
- if (roots.length > 1){
- _getCell(roots[0]).addClass('tree-root-first');
- } else if (roots.length == 1){
- _getCell(roots[0]).addClass('tree-root-one');
- }
- _join(roots);
- _line(roots);
-
- function _join(nodes){
- $.map(nodes, function(node){
- if (node.children && node.children.length){
- _join(node.children);
- } else {
- var cell = _getCell(node);
- cell.find('.tree-icon').prev().addClass('tree-join');
- }
- });
- if (nodes.length){
- var cell = _getCell(nodes[nodes.length-1]);
- cell.addClass('tree-node-last');
- cell.find('.tree-join').removeClass('tree-join').addClass('tree-joinbottom');
- }
- }
- function _line(nodes){
- $.map(nodes, function(node){
- if (node.children && node.children.length){
- _line(node.children);
- }
- });
- for(var i=0; i<nodes.length-1; i++){
- var node = nodes[i];
- var level = t.treegrid('getLevel', node[opts.idField]);
- var tr = opts.finder.getTr(target, node[opts.idField]);
- var cc = tr.next().find('tr.datagrid-row td[field="' + opts.treeField + '"] div.datagrid-cell');
- cc.find('span:eq('+(level-1)+')').addClass('tree-line');
- }
- }
- function _getCell(node){
- var tr = opts.finder.getTr(target, node[opts.idField]);
- var cell = tr.find('td[field="'+opts.treeField+'"] div.datagrid-cell');
- return cell;
- }
- }
-
-
- $.fn.treegrid = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.treegrid.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.datagrid(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'treegrid');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'treegrid', {
- options: $.extend({}, $.fn.treegrid.defaults, $.fn.treegrid.parseOptions(this), options),
- data:[]
- });
- }
-
- buildGrid(this);
-
- if (state.options.data){
- $(this).treegrid('loadData', state.options.data);
- }
-
- request(this);
- });
- };
-
- $.fn.treegrid.methods = {
- options: function(jq){
- return $.data(jq[0], 'treegrid').options;
- },
- resize: function(jq, param){
- return jq.each(function(){
- $(this).datagrid('resize', param);
- });
- },
- fixRowHeight: function(jq, idValue){
- return jq.each(function(){
- setRowHeight(this, idValue);
- });
- },
- loadData: function(jq, data){
- return jq.each(function(){
- loadData(this, data.parent, data);
- // loadData(this, null, data);
- });
- },
- load: function(jq, params){
- return jq.each(function(){
- $(this).treegrid('options').pageNumber = 1;
- $(this).treegrid('getPager').pagination({pageNumber:1});
- $(this).treegrid('reload', params);
- });
- },
- reload: function(jq, id){
- return jq.each(function(){
- var opts = $(this).treegrid('options');
- // var params = typeof id == 'object' ? id : $.extend({},opts.queryParams,{id:id});
- var params = {};
- if (typeof id == 'object'){
- params = id;
- } else {
- params = $.extend({}, opts.queryParams);
- params.id = id;
- }
-
- // var params = typeof id == 'object' ? id : {id:id};
- if (params.id){
- var node = $(this).treegrid('find', params.id);
- if (node.children){
- node.children.splice(0, node.children.length);
- }
- // var opts = $(this).treegrid('options');
- opts.queryParams = params;
- var tr = opts.finder.getTr(this, params.id);
- tr.next('tr.treegrid-tr-tree').remove();
- tr.find('span.tree-hit').removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed');
- expand(this, params.id);
- } else {
- request(this, null, params);
- }
- // if (id){
- // var node = $(this).treegrid('find', id);
- // if (node.children){
- // node.children.splice(0, node.children.length);
- // }
- // var body = $(this).datagrid('getPanel').find('div.datagrid-body');
- // var tr = body.find('tr[node-id=' + id + ']');
- // tr.next('tr.treegrid-tr-tree').remove();
- // var hit = tr.find('span.tree-hit');
- // hit.removeClass('tree-expanded tree-expanded-hover').addClass('tree-collapsed');
- // expand(this, id);
- // } else {
- // request(this, null, {});
- // }
- });
- },
- reloadFooter: function(jq, footer){
- return jq.each(function(){
- var opts = $.data(this, 'treegrid').options;
- var dc = $.data(this, 'datagrid').dc;
- if (footer){
- $.data(this, 'treegrid').footer = footer;
- }
- if (opts.showFooter){
- opts.view.renderFooter.call(opts.view, this, dc.footer1, true);
- opts.view.renderFooter.call(opts.view, this, dc.footer2, false);
- if (opts.view.onAfterRender){
- opts.view.onAfterRender.call(opts.view, this);
- }
- $(this).treegrid('fixRowHeight');
- }
- });
- },
- getData: function(jq){
- return $.data(jq[0], 'treegrid').data;
- },
- getFooterRows: function(jq){
- return $.data(jq[0], 'treegrid').footer;
- },
- getRoot: function(jq){
- return getRoot(jq[0]);
- },
- getRoots: function(jq){
- return getRoots(jq[0]);
- },
- getParent: function(jq, id){
- return getParent(jq[0], id);
- },
- getChildren: function(jq, id){
- return getChildren(jq[0], id);
- },
- // getSelected: function(jq){
- // return getSelected(jq[0]);
- // },
- // getSelections: function(jq){
- // return getSelections(jq[0]);
- // },
- getLevel: function(jq, id){
- return getLevel(jq[0], id);
- },
- find: function(jq, id){
- return find(jq[0], id);
- },
- isLeaf: function(jq, id){
- var opts = $.data(jq[0], 'treegrid').options;
- var tr = opts.finder.getTr(jq[0], id);
- var hit = tr.find('span.tree-hit');
- return hit.length == 0;
- },
- select: function(jq, id){
- return jq.each(function(){
- $(this).datagrid('selectRow', id);
- });
- },
- unselect: function(jq, id){
- return jq.each(function(){
- $(this).datagrid('unselectRow', id);
- });
- },
- collapse: function(jq, id){
- return jq.each(function(){
- collapse(this, id);
- });
- },
- expand: function(jq, id){
- return jq.each(function(){
- expand(this, id);
- });
- },
- toggle: function(jq, id){
- return jq.each(function(){
- toggle(this, id);
- });
- },
- collapseAll: function(jq, id){
- return jq.each(function(){
- collapseAll(this, id);
- });
- },
- expandAll: function(jq, id){
- return jq.each(function(){
- expandAll(this, id);
- });
- },
- expandTo: function(jq, id){
- return jq.each(function(){
- expandTo(this, id);
- });
- },
- append: function(jq, param){
- return jq.each(function(){
- append(this, param);
- });
- },
- insert: function(jq, param){
- return jq.each(function(){
- insert(this, param);
- });
- },
- remove: function(jq, id){
- return jq.each(function(){
- remove(this, id);
- });
- },
- pop: function(jq, id){
- var row = jq.treegrid('find', id);
- jq.treegrid('remove', id);
- return row;
- },
- refresh: function(jq, id){
- return jq.each(function(){
- var opts = $.data(this, 'treegrid').options;
- opts.view.refreshRow.call(opts.view, this, id);
- });
- },
- update: function(jq, param){
- return jq.each(function(){
- var opts = $.data(this, 'treegrid').options;
- opts.view.updateRow.call(opts.view, this, param.id, param.row);
- });
- },
- beginEdit: function(jq, id){
- return jq.each(function(){
- $(this).datagrid('beginEdit', id);
- $(this).treegrid('fixRowHeight', id);
- });
- },
- endEdit: function(jq, id){
- return jq.each(function(){
- $(this).datagrid('endEdit', id);
- });
- },
- cancelEdit: function(jq, id){
- return jq.each(function(){
- $(this).datagrid('cancelEdit', id);
- });
- },
- showLines: function(jq){
- return jq.each(function(){
- showLines(this);
- });
- }
- };
-
- $.fn.treegrid.parseOptions = function(target){
- return $.extend({}, $.fn.datagrid.parseOptions(target), $.parser.parseOptions(target,['treeField',{animate:'boolean'}]));
- };
-
- var defaultView = $.extend({}, $.fn.datagrid.defaults.view, {
- render: function(target, container, frozen){
- var opts = $.data(target, 'treegrid').options;
- var fields = $(target).datagrid('getColumnFields', frozen);
- var rowIdPrefix = $.data(target, 'datagrid').rowIdPrefix;
-
- if (frozen){
- if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))){
- return;
- }
- }
-
- var view = this;
- if (this.treeNodes && this.treeNodes.length){
- var table = getTreeData(frozen, this.treeLevel, this.treeNodes);
- $(container).append(table.join(''));
- }
-
- function getTreeData(frozen, depth, children){
- var pnode = $(target).treegrid('getParent', children[0][opts.idField]);
- var index = (pnode ? pnode.children.length : $(target).treegrid('getRoots').length) - children.length;
-
- var table = ['<table class="datagrid-btable" cellspacing="0" cellpadding="0" border="0"><tbody>'];
- for(var i=0; i<children.length; i++){
- var row = children[i];
- if (row.state != 'open' && row.state != 'closed'){
- row.state = 'open';
- }
- var css = opts.rowStyler ? opts.rowStyler.call(target, row) : '';
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (css){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
- var cls = 'class="datagrid-row ' + (index++ % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '"';
- var style = styleValue ? 'style="' + styleValue + '"' : '';
-
- // var cls = (index++ % 2 && opts.striped) ? 'class="datagrid-row datagrid-row-alt"' : 'class="datagrid-row"';
- // var styleValue = opts.rowStyler ? opts.rowStyler.call(target, row) : '';
- // var style = styleValue ? 'style="' + styleValue + '"' : '';
- var rowId = rowIdPrefix + '-' + (frozen?1:2) + '-' + row[opts.idField];
- table.push('<tr id="' + rowId + '" node-id="' + row[opts.idField] + '" ' + cls + ' ' + style + '>');
- table = table.concat(view.renderRow.call(view, target, fields, frozen, depth, row));
- table.push('</tr>');
-
- if (row.children && row.children.length){
- var tt = getTreeData(frozen, depth+1, row.children);
- var v = row.state == 'closed' ? 'none' : 'block';
-
- table.push('<tr class="treegrid-tr-tree"><td style="border:0px" colspan=' + (fields.length + (opts.rownumbers?1:0)) + '><div style="display:' + v + '">');
- table = table.concat(tt);
- table.push('</div></td></tr>');
- }
- }
- table.push('</tbody></table>');
- return table;
- }
- },
-
- renderFooter: function(target, container, frozen){
- var opts = $.data(target, 'treegrid').options;
- var rows = $.data(target, 'treegrid').footer || [];
- var fields = $(target).datagrid('getColumnFields', frozen);
-
- var table = ['<table class="datagrid-ftable" cellspacing="0" cellpadding="0" border="0"><tbody>'];
-
- for(var i=0; i<rows.length; i++){
- var row = rows[i];
- row[opts.idField] = row[opts.idField] || ('foot-row-id'+i);
-
- table.push('<tr class="datagrid-row" node-id="' + row[opts.idField] + '">');
- table.push(this.renderRow.call(this, target, fields, frozen, 0, row));
- table.push('</tr>');
- }
-
- table.push('</tbody></table>');
- $(container).html(table.join(''));
- },
-
- renderRow: function(target, fields, frozen, depth, row){
- var opts = $.data(target, 'treegrid').options;
-
- var cc = [];
- if (frozen && opts.rownumbers){
- cc.push('<td class="datagrid-td-rownumber"><div class="datagrid-cell-rownumber">0</div></td>');
- }
- for(var i=0; i<fields.length; i++){
- var field = fields[i];
- var col = $(target).datagrid('getColumnOption', field);
- if (col){
- var css = col.styler ? (col.styler(row[field], row)||'') : '';
- var classValue = '';
- var styleValue = '';
- if (typeof css == 'string'){
- styleValue = css;
- } else if (cc){
- classValue = css['class'] || '';
- styleValue = css['style'] || '';
- }
- var cls = classValue ? 'class="' + classValue + '"' : '';
- var style = col.hidden ? 'style="display:none;' + styleValue + '"' : (styleValue ? 'style="' + styleValue + '"' : '');
-
- cc.push('<td field="' + field + '" ' + cls + ' ' + style + '>');
-
- var style = '';
- if (!col.checkbox){
- if (col.align){style += 'text-align:' + col.align + ';'}
- if (!opts.nowrap){
- style += 'white-space:normal;height:auto;';
- } else if (opts.autoRowHeight){
- style += 'height:auto;';
- }
- }
-
- cc.push('<div style="' + style + '" ');
- if (col.checkbox){
- cc.push('class="datagrid-cell-check ');
- } else {
- cc.push('class="datagrid-cell ' + col.cellClass);
- }
- cc.push('">');
-
- if (col.checkbox){
- if (row.checked){
- cc.push('<input type="checkbox" checked="checked"');
- } else {
- cc.push('<input type="checkbox"');
- }
- cc.push(' name="' + field + '" value="' + (row[field]!=undefined ? row[field] : '') + '">');
- } else {
- var val = null;
- if (col.formatter){
- val = col.formatter(row[field], row);
- } else {
- val = row[field];
- // val = row[field] || ' ';
- }
- if (field == opts.treeField){
- for(var j=0; j<depth; j++){
- cc.push('<span class="tree-indent"></span>');
- }
- if (row.state == 'closed'){
- cc.push('<span class="tree-hit tree-collapsed"></span>');
- cc.push('<span class="tree-icon tree-folder ' + (row.iconCls?row.iconCls:'') + '"></span>');
- } else {
- if (row.children && row.children.length){
- cc.push('<span class="tree-hit tree-expanded"></span>');
- cc.push('<span class="tree-icon tree-folder tree-folder-open ' + (row.iconCls?row.iconCls:'') + '"></span>');
- } else {
- cc.push('<span class="tree-indent"></span>');
- cc.push('<span class="tree-icon tree-file ' + (row.iconCls?row.iconCls:'') + '"></span>');
- }
- }
- cc.push('<span class="tree-title">' + val + '</span>');
- } else {
- cc.push(val);
- }
- }
-
- cc.push('</div>');
- cc.push('</td>');
- }
- }
- return cc.join('');
- },
-
- refreshRow: function(target, id){
- this.updateRow.call(this, target, id, {});
- },
-
- updateRow: function(target, id, row){
- var opts = $.data(target, 'treegrid').options;
- var rowData = $(target).treegrid('find', id);
- $.extend(rowData, row);
- var depth = $(target).treegrid('getLevel', id) - 1;
- var styleValue = opts.rowStyler ? opts.rowStyler.call(target, rowData) : '';
- var rowIdPrefix = $.data(target, 'datagrid').rowIdPrefix;
- var newId = rowData[opts.idField];
-
- function _update(frozen){
- var fields = $(target).treegrid('getColumnFields', frozen);
- var tr = opts.finder.getTr(target, id, 'body', (frozen?1:2));
- var rownumber = tr.find('div.datagrid-cell-rownumber').html();
- var checked = tr.find('div.datagrid-cell-check input[type=checkbox]').is(':checked');
- tr.html(this.renderRow(target, fields, frozen, depth, rowData));
- tr.attr('style', styleValue || '');
- tr.find('div.datagrid-cell-rownumber').html(rownumber);
- if (checked){
- tr.find('div.datagrid-cell-check input[type=checkbox]')._propAttr('checked', true);
- }
- if (newId != id){
- tr.attr('id', rowIdPrefix + '-' + (frozen?1:2) + '-' + newId);
- tr.attr('node-id', newId);
- }
- }
-
- _update.call(this, true);
- _update.call(this, false);
- $(target).treegrid('fixRowHeight', id);
- },
-
- deleteRow: function(target, id){
- var opts = $.data(target, 'treegrid').options;
- var tr = opts.finder.getTr(target, id);
- tr.next('tr.treegrid-tr-tree').remove();
- tr.remove();
-
- var pnode = del(id);
- if (pnode){
- if (pnode.children.length == 0){
- tr = opts.finder.getTr(target, pnode[opts.idField]);
- tr.next('tr.treegrid-tr-tree').remove();
- var cell = tr.children('td[field="' + opts.treeField + '"]').children('div.datagrid-cell');
- cell.find('.tree-icon').removeClass('tree-folder').addClass('tree-file');
- cell.find('.tree-hit').remove();
- $('<span class="tree-indent"></span>').prependTo(cell);
- }
- }
-
- function del(id){
- var cc;
- var pnode = $(target).treegrid('getParent', id);
- if (pnode){
- cc = pnode.children;
- } else {
- cc = $(target).treegrid('getData');
- }
- for(var i=0; i<cc.length; i++){
- if (cc[i][opts.idField] == id){
- cc.splice(i, 1);
- break;
- }
- }
- return pnode;
- }
- },
-
- onBeforeRender: function(target, parentId, data){
- if ($.isArray(parentId)){
- data = {total:parentId.length, rows:parentId};
- parentId = null;
- }
- if (!data) return false;
-
- var state = $.data(target, 'treegrid');
- var opts = state.options;
- if (data.length == undefined){
- if (data.footer){
- state.footer = data.footer;
- }
- if (data.total){
- state.total = data.total;
- }
- data = this.transfer(target, parentId, data.rows);
- } else {
- function setParent(children, parentId){
- for(var i=0; i<children.length; i++){
- var row = children[i];
- row._parentId = parentId;
- if (row.children && row.children.length){
- setParent(row.children, row[opts.idField]);
- }
- }
- }
- setParent(data, parentId);
- }
-
- var node = find(target, parentId);
- if (node){
- if (node.children){
- node.children = node.children.concat(data);
- } else {
- node.children = data;
- }
- } else {
- state.data = state.data.concat(data);
- }
-
- this.sort(target, data);
- this.treeNodes = data;
- this.treeLevel = $(target).treegrid('getLevel', parentId);
- },
-
- sort: function(target, data){
- var opts = $.data(target, 'treegrid').options;
- if (!opts.remoteSort && opts.sortName){
- var names = opts.sortName.split(',');
- var orders = opts.sortOrder.split(',');
- _sort(data);
- }
- function _sort(rows){
- rows.sort(function(r1,r2){
- var r = 0;
- for(var i=0; i<names.length; i++){
- var sn = names[i];
- var so = orders[i];
- var col = $(target).treegrid('getColumnOption', sn);
- var sortFunc = col.sorter || function(a,b){
- return a==b ? 0 : (a>b?1:-1);
- };
- r = sortFunc(r1[sn], r2[sn]) * (so=='asc'?1:-1);
- if (r != 0){
- return r;
- }
- }
- return r;
- });
- for(var i=0; i<rows.length; i++){
- var children = rows[i].children;
- if (children && children.length){
- _sort(children);
- }
- }
- }
- },
-
- transfer: function(target, parentId, data){
- var opts = $.data(target, 'treegrid').options;
-
- // clone the original data rows
- var rows = [];
- for(var i=0; i<data.length; i++){
- rows.push(data[i]);
- }
-
- var nodes = [];
- // get the top level nodes
- for(var i=0; i<rows.length; i++){
- var row = rows[i];
- if (!parentId){
- if (!row._parentId){
- nodes.push(row);
- // removeArrayItem(rows,row);
- rows.splice(i, 1);
- i--;
- }
- } else {
- if (row._parentId == parentId){
- nodes.push(row);
- // removeArrayItem(rows,row);
- rows.splice(i, 1);
- i--;
- }
- }
- }
-
- var toDo = [];
- for(var i=0; i<nodes.length; i++){
- toDo.push(nodes[i]);
- }
- while(toDo.length){
- var node = toDo.shift(); // the parent node
- // get the children nodes
- for(var i=0; i<rows.length; i++){
- var row = rows[i];
- if (row._parentId == node[opts.idField]){
- if (node.children){
- node.children.push(row);
- } else {
- node.children = [row];
- }
- toDo.push(row);
- // removeArrayItem(rows,row);
- rows.splice(i, 1);
- i--;
- }
- }
- }
- return nodes;
- }
- });
-
- $.fn.treegrid.defaults = $.extend({}, $.fn.datagrid.defaults, {
- treeField:null,
- lines: false,
- animate: false,
- singleSelect: true,
- view: defaultView,
- rowEvents: $.extend({}, $.fn.datagrid.defaults.rowEvents, {
- mouseover: hoverEventHandler(true),
- mouseout: hoverEventHandler(false),
- click: clickEventHandler
- }),
- loader: function(param, success, error){
- var opts = $(this).treegrid('options');
- if (!opts.url) return false;
- $.ajax({
- type: opts.method,
- url: opts.url,
- data: param,
- dataType: 'json',
- success: function(data){
- success(data);
- },
- error: function(){
- error.apply(this, arguments);
- }
- });
- },
- loadFilter: function(data, parentId){
- return data;
- },
- finder:{
- getTr:function(target, id, type, serno){
- type = type || 'body';
- serno = serno || 0;
- var dc = $.data(target, 'datagrid').dc; // data container
- if (serno == 0){
- var opts = $.data(target, 'treegrid').options;
- var tr1 = opts.finder.getTr(target, id, type, 1);
- var tr2 = opts.finder.getTr(target, id, type, 2);
- return tr1.add(tr2);
- } else {
- if (type == 'body'){
- var tr = $('#' + $.data(target, 'datagrid').rowIdPrefix + '-' + serno + '-' + id);
- if (!tr.length){
- tr = (serno==1?dc.body1:dc.body2).find('tr[node-id="'+id+'"]');
- }
- return tr;
- } else if (type == 'footer'){
- return (serno==1?dc.footer1:dc.footer2).find('tr[node-id="'+id+'"]');
- } else if (type == 'selected'){
- return (serno==1?dc.body1:dc.body2).find('tr.datagrid-row-selected');
- } else if (type == 'highlight'){
- return (serno==1?dc.body1:dc.body2).find('tr.datagrid-row-over');
- } else if (type == 'checked'){
- return (serno==1?dc.body1:dc.body2).find('tr.datagrid-row-checked');
- // return (serno==1?dc.body1:dc.body2).find('tr.datagrid-row:has(div.datagrid-cell-check input:checked)');
- } else if (type == 'last'){
- return (serno==1?dc.body1:dc.body2).find('tr:last[node-id]');
- } else if (type == 'allbody'){
- return (serno==1?dc.body1:dc.body2).find('tr[node-id]');
- } else if (type == 'allfooter'){
- return (serno==1?dc.footer1:dc.footer2).find('tr[node-id]');
- }
- }
- },
- getRow:function(target, p){ // p can be the row id or tr object
- var id = (typeof p == 'object') ? p.attr('node-id') : p;
- return $(target).treegrid('find', id);
- },
- getRows:function(target){
- return $(target).treegrid('getChildren');
- }
- },
-
- onBeforeLoad: function(row, param){},
- onLoadSuccess: function(row, data){},
- onLoadError: function(){},
- onBeforeCollapse: function(row){},
- onCollapse: function(row){},
- onBeforeExpand: function(row){},
- onExpand: function(row){},
- onClickRow: function(row){},
- onDblClickRow: function(row){},
- onClickCell: function(field, row){},
- onDblClickCell: function(field, row){},
- onContextMenu: function(e, row){},
- onBeforeEdit: function(row){},
- onAfterEdit: function(row, changes){},
- onCancelEdit: function(row){}
- });
- })(jQuery);
- /**
- * combo - jQuery EasyUI
- *
- * Dependencies:
- * panel
- * textbox
- *
- */
- (function($){
- $(function(){
- $(document).unbind('.combo').bind('mousedown.combo mousewheel.combo', function(e){
- var p = $(e.target).closest('span.combo,div.combo-p');
- if (p.length){
- hideInnerPanel(p);
- return;
- }
- $('body>div.combo-p>div.combo-panel:visible').panel('close');
- });
- });
-
- /**
- * create the combo component.
- */
- function buildCombo(target){
- var state = $.data(target, 'combo');
- var opts = state.options;
- if (!state.panel){
- state.panel = $('<div class="combo-panel"></div>').appendTo('body');
- state.panel.panel({
- minWidth: opts.panelMinWidth,
- maxWidth: opts.panelMaxWidth,
- minHeight: opts.panelMinHeight,
- maxHeight: opts.panelMaxHeight,
- doSize:false,
- closed:true,
- cls:'combo-p',
- style:{
- position:'absolute',
- zIndex:10
- },
- onOpen:function(){
- var target = $(this).panel('options').comboTarget;
- var state = $.data(target, 'combo');
- if (state){
- state.options.onShowPanel.call(target);
- }
- },
- onBeforeClose:function(){
- hideInnerPanel(this);
- },
- onClose:function(){
- var target = $(this).panel('options').comboTarget;
- var state = $.data(target, 'combo');
- if (state){
- state.options.onHidePanel.call(target);
- }
- }
- });
- }
-
- var icons = $.extend(true, [], opts.icons);
- if (opts.hasDownArrow){
- icons.push({
- iconCls: 'combo-arrow',
- handler: function(e){
- togglePanel(e.data.target);
- }
- });
- }
- $(target).addClass('combo-f').textbox($.extend({}, opts, {
- icons: icons,
- onChange: function(){}
- }));
- $(target).attr('comboName', $(target).attr('textboxName'));
- state.combo = $(target).next();
- state.combo.addClass('combo');
- }
-
- function destroy(target){
- var state = $.data(target, 'combo');
- var opts = state.options;
- var p = state.panel;
- if (p.is(':visible')){p.panel('close')}
- if (!opts.cloned){p.panel('destroy')}
- $(target).textbox('destroy');
- }
-
- function togglePanel(target){
- var panel = $.data(target, 'combo').panel;
- if (panel.is(':visible')){
- hidePanel(target);
- } else {
- var p = $(target).closest('div.combo-panel'); // the parent combo panel
- $('div.combo-panel:visible').not(panel).not(p).panel('close');
- $(target).combo('showPanel');
- }
- $(target).combo('textbox').focus();
- }
-
- /**
- * hide inner drop-down panels of a specified container
- */
- function hideInnerPanel(container){
- $(container).find('.combo-f').each(function(){
- var p = $(this).combo('panel');
- if (p.is(':visible')){
- p.panel('close');
- }
- });
- }
- /**
- * The click event handler on input box
- */
- function inputClickHandler(e){
- var target = e.data.target;
- var state = $.data(target, 'combo');
- var opts = state.options;
- var panel = state.panel;
- if (!opts.editable){
- togglePanel(target);
- } else {
- var p = $(target).closest('div.combo-panel'); // the parent combo panel
- $('div.combo-panel:visible').not(panel).not(p).panel('close');
- }
- }
-
- /**
- * The key event handler on input box
- */
- function inputEventHandler(e){
- var target = e.data.target;
- var t = $(target);
- var state = t.data('combo');
- var opts = t.combo('options');
-
- switch(e.keyCode){
- case 38: // up
- opts.keyHandler.up.call(target, e);
- break;
- case 40: // down
- opts.keyHandler.down.call(target, e);
- break;
- case 37: // left
- opts.keyHandler.left.call(target, e);
- break;
- case 39: // right
- opts.keyHandler.right.call(target, e);
- break;
- case 13: // enter
- e.preventDefault();
- opts.keyHandler.enter.call(target, e);
- return false;
- case 9: // tab
- case 27: // esc
- hidePanel(target);
- break;
- default:
- if (opts.editable){
- if (state.timer){
- clearTimeout(state.timer);
- }
- state.timer = setTimeout(function(){
- var q = t.combo('getText');
- if (state.previousText != q){
- state.previousText = q;
- t.combo('showPanel');
- opts.keyHandler.query.call(target, q, e);
- t.combo('validate');
- }
- }, opts.delay);
- }
- }
- }
-
- /**
- * show the drop down panel.
- */
- function showPanel(target){
- var state = $.data(target, 'combo');
- var combo = state.combo;
- var panel = state.panel;
- var opts = $(target).combo('options');
- var palOpts = panel.panel('options');
-
- palOpts.comboTarget = target; // store the target combo element
- if (palOpts.closed){
- panel.panel('panel').show().css({
- zIndex: ($.fn.menu ? $.fn.menu.defaults.zIndex++ : $.fn.window.defaults.zIndex++),
- left: -999999
- });
- panel.panel('resize', {
- width: (opts.panelWidth ? opts.panelWidth : combo._outerWidth()),
- height: opts.panelHeight
- });
- panel.panel('panel').hide();
- panel.panel('open');
- }
-
- (function(){
- if (panel.is(':visible')){
- panel.panel('move', {
- left:getLeft(),
- top:getTop()
- });
- setTimeout(arguments.callee, 200);
- }
- })();
-
- function getLeft(){
- var left = combo.offset().left;
- if (opts.panelAlign == 'right'){
- left += combo._outerWidth() - panel._outerWidth();
- }
- if (left + panel._outerWidth() > $(window)._outerWidth() + $(document).scrollLeft()){
- left = $(window)._outerWidth() + $(document).scrollLeft() - panel._outerWidth();
- }
- if (left < 0){
- left = 0;
- }
- return left;
- }
- function getTop(){
- var top = combo.offset().top + combo._outerHeight();
- if (top + panel._outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){
- top = combo.offset().top - panel._outerHeight();
- }
- if (top < $(document).scrollTop()){
- top = combo.offset().top + combo._outerHeight();
- }
- return top;
- }
- }
-
- /**
- * hide the drop down panel.
- */
- function hidePanel(target){
- var panel = $.data(target, 'combo').panel;
- panel.panel('close');
- }
-
- function clear(target){
- var state = $.data(target, 'combo');
- var opts = state.options;
- var combo = state.combo;
- $(target).textbox('clear');
- if (opts.multiple){
- combo.find('.textbox-value').remove();
- } else {
- combo.find('.textbox-value').val('');
- }
- }
-
- function setText(target, text){
- var state = $.data(target, 'combo');
- var oldText = $(target).textbox('getText');
- if (oldText != text){
- $(target).textbox('setText', text);
- state.previousText = text;
- }
- }
-
- function getValues(target){
- var values = [];
- var combo = $.data(target, 'combo').combo;
- combo.find('.textbox-value').each(function(){
- values.push($(this).val());
- });
- return values;
- }
-
- function setValues(target, values){
- var state = $.data(target, 'combo');
- var opts = state.options;
- var combo = state.combo;
- if (!$.isArray(values)){values = values.split(opts.separator)}
-
- var oldValues = getValues(target);
- combo.find('.textbox-value').remove();
- var name = $(target).attr('textboxName') || '';
- for(var i=0; i<values.length; i++){
- var input = $('<input type="hidden" class="textbox-value">').appendTo(combo);
- input.attr('name', name);
- if (opts.disabled){
- input.attr('disabled', 'disabled');
- }
- input.val(values[i]);
- }
-
- var changed = (function(){
- if (oldValues.length != values.length){return true;}
- var a1 = $.extend(true, [], oldValues);
- var a2 = $.extend(true, [], values);
- a1.sort();
- a2.sort();
- for(var i=0; i<a1.length; i++){
- if (a1[i] != a2[i]){return true;}
- }
- return false;
- })();
-
- if (changed){
- if (opts.multiple){
- opts.onChange.call(target, values, oldValues);
- } else {
- opts.onChange.call(target, values[0], oldValues[0]);
- }
- }
- }
-
- function getValue(target){
- var values = getValues(target);
- return values[0];
- }
-
- function setValue(target, value){
- setValues(target, [value]);
- }
-
- /**
- * set the initialized value
- */
- function initValue(target){
- var opts = $.data(target, 'combo').options;
- var onChange = opts.onChange;
- opts.onChange = function(){};
- if (opts.multiple){
- setValues(target, opts.value ? opts.value : []);
- } else {
- setValue(target, opts.value); // set initialize value
- }
- opts.onChange = onChange;
- }
-
- $.fn.combo = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.combo.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.textbox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'combo');
- if (state){
- $.extend(state.options, options);
- if (options.value != undefined){
- state.options.originalValue = options.value;
- }
- } else {
- state = $.data(this, 'combo', {
- options: $.extend({}, $.fn.combo.defaults, $.fn.combo.parseOptions(this), options),
- previousText: ''
- });
- state.options.originalValue = state.options.value;
- }
-
- buildCombo(this);
- initValue(this);
- });
- };
-
- $.fn.combo.methods = {
- options: function(jq){
- var opts = jq.textbox('options');
- return $.extend($.data(jq[0], 'combo').options, {
- width: opts.width,
- height: opts.height,
- disabled: opts.disabled,
- readonly: opts.readonly
- });
- },
- cloneFrom: function(jq, from){
- return jq.each(function(){
- $(this).textbox('cloneFrom', from);
- $.data(this, 'combo', {
- options: $.extend(true, {cloned:true}, $(from).combo('options')),
- combo: $(this).next(),
- panel: $(from).combo('panel')
- });
- $(this).addClass('combo-f').attr('comboName', $(this).attr('textboxName'));
- });
- },
- panel: function(jq){
- return $.data(jq[0], 'combo').panel;
- },
- destroy: function(jq){
- return jq.each(function(){
- destroy(this);
- });
- },
- showPanel: function(jq){
- return jq.each(function(){
- showPanel(this);
- });
- },
- hidePanel: function(jq){
- return jq.each(function(){
- hidePanel(this);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- clear(this);
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $.data(this, 'combo').options;
- if (opts.multiple){
- $(this).combo('setValues', opts.originalValue);
- } else {
- $(this).combo('setValue', opts.originalValue);
- }
- });
- },
- setText: function(jq, text){
- return jq.each(function(){
- setText(this, text);
- });
- },
- getValues: function(jq){
- return getValues(jq[0]);
- },
- setValues: function(jq, values){
- return jq.each(function(){
- setValues(this, values);
- });
- },
- getValue: function(jq){
- return getValue(jq[0]);
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValue(this, value);
- });
- }
- };
-
- $.fn.combo.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.textbox.parseOptions(target), $.parser.parseOptions(target, [
- 'separator','panelAlign',
- {panelWidth:'number',hasDownArrow:'boolean',delay:'number',selectOnNavigation:'boolean'},
- {panelMinWidth:'number',panelMaxWidth:'number',panelMinHeight:'number',panelMaxHeight:'number'}
- ]), {
- panelHeight: (t.attr('panelHeight')=='auto' ? 'auto' : parseInt(t.attr('panelHeight')) || undefined),
- multiple: (t.attr('multiple') ? true : undefined)
- });
- };
-
- // Inherited from $.fn.textbox.defaults
- $.fn.combo.defaults = $.extend({}, $.fn.textbox.defaults, {
- inputEvents: {
- click: inputClickHandler,
- keydown: inputEventHandler,
- paste: inputEventHandler,
- drop: inputEventHandler
- },
-
- panelWidth: null,
- panelHeight: 200,
- panelMinWidth: null,
- panelMaxWidth: null,
- panelMinHeight: null,
- panelMaxHeight: null,
- panelAlign: 'left',
- multiple: false,
- selectOnNavigation: true,
- separator: ',',
- hasDownArrow: true,
- delay: 200, // delay to do searching from the last key input event.
-
- keyHandler: {
- up: function(e){},
- down: function(e){},
- left: function(e){},
- right: function(e){},
- enter: function(e){},
- query: function(q,e){}
- },
-
- onShowPanel: function(){},
- onHidePanel: function(){},
- onChange: function(newValue, oldValue){}
- });
- })(jQuery);
- /**
- * combobox - jQuery EasyUI
- *
- * Dependencies:
- * combo
- *
- */
- (function($){
- var COMBOBOX_SERNO = 0;
-
- function getRowIndex(target, value){
- var state = $.data(target, 'combobox');
- var opts = state.options;
- var data = state.data;
- for(var i=0; i<data.length; i++){
- if (data[i][opts.valueField] == value){
- return i;
- }
- }
- return -1;
- }
-
- /**
- * scroll panel to display the specified item
- */
- function scrollTo(target, value){
- var opts = $.data(target, 'combobox').options;
- var panel = $(target).combo('panel');
- var item = opts.finder.getEl(target, value);
- if (item.length){
- if (item.position().top <= 0){
- var h = panel.scrollTop() + item.position().top;
- panel.scrollTop(h);
- } else if (item.position().top + item.outerHeight() > panel.height()){
- var h = panel.scrollTop() + item.position().top + item.outerHeight() - panel.height();
- panel.scrollTop(h);
- }
- }
- }
-
- function nav(target, dir){
- var opts = $.data(target, 'combobox').options;
- var panel = $(target).combobox('panel');
- var item = panel.children('div.combobox-item-hover');
- if (!item.length){
- item = panel.children('div.combobox-item-selected');
- }
- item.removeClass('combobox-item-hover');
- var firstSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):first';
- var lastSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):last';
- if (!item.length){
- item = panel.children(dir=='next' ? firstSelector : lastSelector);
- // item = panel.children('div.combobox-item:visible:' + (dir=='next'?'first':'last'));
- } else {
- if (dir == 'next'){
- item = item.nextAll(firstSelector);
- // item = item.nextAll('div.combobox-item:visible:first');
- if (!item.length){
- item = panel.children(firstSelector);
- // item = panel.children('div.combobox-item:visible:first');
- }
- } else {
- item = item.prevAll(firstSelector);
- // item = item.prevAll('div.combobox-item:visible:first');
- if (!item.length){
- item = panel.children(lastSelector);
- // item = panel.children('div.combobox-item:visible:last');
- }
- }
- }
- if (item.length){
- item.addClass('combobox-item-hover');
- var row = opts.finder.getRow(target, item);
- if (row){
- scrollTo(target, row[opts.valueField]);
- if (opts.selectOnNavigation){
- select(target, row[opts.valueField]);
- }
- }
- }
- }
-
- /**
- * select the specified value
- */
- function select(target, value){
- var opts = $.data(target, 'combobox').options;
- var values = $(target).combo('getValues');
- if ($.inArray(value+'', values) == -1){
- if (opts.multiple){
- values.push(value);
- } else {
- values = [value];
- }
- setValues(target, values);
- opts.onSelect.call(target, opts.finder.getRow(target, value));
- }
- }
-
- /**
- * unselect the specified value
- */
- function unselect(target, value){
- var opts = $.data(target, 'combobox').options;
- var values = $(target).combo('getValues');
- var index = $.inArray(value+'', values);
- if (index >= 0){
- values.splice(index, 1);
- setValues(target, values);
- opts.onUnselect.call(target, opts.finder.getRow(target, value));
- }
- }
-
- /**
- * set values
- */
- function setValues(target, values, remainText){
- var opts = $.data(target, 'combobox').options;
- var panel = $(target).combo('panel');
-
- if (!$.isArray(values)){values = values.split(opts.separator)}
- panel.find('div.combobox-item-selected').removeClass('combobox-item-selected');
- var vv = [], ss = [];
- for(var i=0; i<values.length; i++){
- var v = values[i];
- var s = v;
- opts.finder.getEl(target, v).addClass('combobox-item-selected');
- var row = opts.finder.getRow(target, v);
- if (row){
- s = row[opts.textField];
- }
- vv.push(v);
- ss.push(s);
- }
-
- $(target).combo('setValues', vv);
- if (!remainText){
- $(target).combo('setText', ss.join(opts.separator));
- }
- }
-
- /**
- * load data, the old list items will be removed.
- */
- function loadData(target, data, remainText){
- var state = $.data(target, 'combobox');
- var opts = state.options;
- state.data = opts.loadFilter.call(target, data);
- state.groups = [];
- data = state.data;
-
- var selected = $(target).combobox('getValues');
- var dd = [];
- var group = undefined;
- for(var i=0; i<data.length; i++){
- var row = data[i];
- var v = row[opts.valueField]+'';
- var s = row[opts.textField];
- var g = row[opts.groupField];
-
- if (g){
- if (group != g){
- group = g;
- state.groups.push(g);
- dd.push('<div id="' + (state.groupIdPrefix+'_'+(state.groups.length-1)) + '" class="combobox-group">');
- dd.push(opts.groupFormatter ? opts.groupFormatter.call(target, g) : g);
- dd.push('</div>');
- }
- } else {
- group = undefined;
- }
-
- var cls = 'combobox-item' + (row.disabled ? ' combobox-item-disabled' : '') + (g ? ' combobox-gitem' : '');
- dd.push('<div id="' + (state.itemIdPrefix+'_'+i) + '" class="' + cls + '">');
- dd.push(opts.formatter ? opts.formatter.call(target, row) : s);
- dd.push('</div>');
-
- // if (item['selected']){
- // (function(){
- // for(var i=0; i<selected.length; i++){
- // if (v == selected[i]) return;
- // }
- // selected.push(v);
- // })();
- // }
- if (row['selected'] && $.inArray(v, selected) == -1){
- selected.push(v);
- }
- }
- $(target).combo('panel').html(dd.join(''));
-
- if (opts.multiple){
- setValues(target, selected, remainText);
- } else {
- setValues(target, selected.length ? [selected[selected.length-1]] : [], remainText);
- }
-
- opts.onLoadSuccess.call(target, data);
- }
-
- /**
- * request remote data if the url property is setted.
- */
- function request(target, url, param, remainText){
- var opts = $.data(target, 'combobox').options;
- if (url){
- opts.url = url;
- }
- // if (!opts.url) return;
- param = param || {};
-
- if (opts.onBeforeLoad.call(target, param) == false) return;
- opts.loader.call(target, param, function(data){
- loadData(target, data, remainText);
- }, function(){
- opts.onLoadError.apply(this, arguments);
- });
- }
-
- /**
- * do the query action
- */
- function doQuery(target, q){
- var state = $.data(target, 'combobox');
- var opts = state.options;
-
- if (opts.multiple && !q){
- setValues(target, [], true);
- } else {
- setValues(target, [q], true);
- }
-
- if (opts.mode == 'remote'){
- request(target, null, {q:q}, true);
- } else {
- var panel = $(target).combo('panel');
- panel.find('div.combobox-item-selected,div.combobox-item-hover').removeClass('combobox-item-selected combobox-item-hover');
- panel.find('div.combobox-item,div.combobox-group').hide();
- var data = state.data;
- var vv = [];
- var qq = opts.multiple ? q.split(opts.separator) : [q];
- $.map(qq, function(q){
- q = $.trim(q);
- var group = undefined;
- for(var i=0; i<data.length; i++){
- var row = data[i];
- if (opts.filter.call(target, q, row)){
- var v = row[opts.valueField];
- var s = row[opts.textField];
- var g = row[opts.groupField];
- var item = opts.finder.getEl(target, v).show();
- if (s.toLowerCase() == q.toLowerCase()){
- vv.push(v);
- item.addClass('combobox-item-selected');
- }
- if (opts.groupField && group != g){
- $('#'+state.groupIdPrefix+'_'+$.inArray(g, state.groups)).show();
- group = g;
- }
- }
- }
- });
- setValues(target, vv, true);
- }
- }
-
- function doEnter(target){
- var t = $(target);
- var opts = t.combobox('options');
- var panel = t.combobox('panel');
- var item = panel.children('div.combobox-item-hover');
- if (item.length){
- var row = opts.finder.getRow(target, item);
- var value = row[opts.valueField];
- if (opts.multiple){
- if (item.hasClass('combobox-item-selected')){
- t.combobox('unselect', value);
- } else {
- t.combobox('select', value);
- }
- } else {
- t.combobox('select', value);
- }
- }
- var vv = [];
- $.map(t.combobox('getValues'), function(v){
- if (getRowIndex(target, v) >= 0){
- vv.push(v);
- }
- });
- t.combobox('setValues', vv);
- if (!opts.multiple){
- t.combobox('hidePanel');
- }
- }
-
- /**
- * create the component
- */
- function create(target){
- var state = $.data(target, 'combobox');
- var opts = state.options;
-
- COMBOBOX_SERNO++;
- state.itemIdPrefix = '_easyui_combobox_i' + COMBOBOX_SERNO;
- state.groupIdPrefix = '_easyui_combobox_g' + COMBOBOX_SERNO;
-
- $(target).addClass('combobox-f');
- $(target).combo($.extend({}, opts, {
- onShowPanel: function(){
- $(target).combo('panel').find('div.combobox-item,div.combobox-group').show();
- scrollTo(target, $(target).combobox('getValue'));
- opts.onShowPanel.call(target);
- }
- }));
-
- $(target).combo('panel').unbind().bind('mouseover', function(e){
- $(this).children('div.combobox-item-hover').removeClass('combobox-item-hover');
- var item = $(e.target).closest('div.combobox-item');
- if (!item.hasClass('combobox-item-disabled')){
- item.addClass('combobox-item-hover');
- }
- e.stopPropagation();
- }).bind('mouseout', function(e){
- $(e.target).closest('div.combobox-item').removeClass('combobox-item-hover');
- e.stopPropagation();
- }).bind('click', function(e){
- var item = $(e.target).closest('div.combobox-item');
- if (!item.length || item.hasClass('combobox-item-disabled')){return}
- var row = opts.finder.getRow(target, item);
- if (!row){return}
- var value = row[opts.valueField];
- if (opts.multiple){
- if (item.hasClass('combobox-item-selected')){
- unselect(target, value);
- } else {
- select(target, value);
- }
- } else {
- select(target, value);
- $(target).combo('hidePanel');
- }
- e.stopPropagation();
- });
- }
-
- $.fn.combobox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.combobox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.combo(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'combobox');
- if (state){
- $.extend(state.options, options);
- create(this);
- } else {
- state = $.data(this, 'combobox', {
- options: $.extend({}, $.fn.combobox.defaults, $.fn.combobox.parseOptions(this), options),
- data: []
- });
- create(this);
- var data = $.fn.combobox.parseData(this);
- if (data.length){
- loadData(this, data);
- }
- }
- if (state.options.data){
- loadData(this, state.options.data);
- }
- request(this);
- });
- };
-
-
- $.fn.combobox.methods = {
- options: function(jq){
- var copts = jq.combo('options');
- return $.extend($.data(jq[0], 'combobox').options, {
- width: copts.width,
- height: copts.height,
- originalValue: copts.originalValue,
- disabled: copts.disabled,
- readonly: copts.readonly
- });
- },
- getData: function(jq){
- return $.data(jq[0], 'combobox').data;
- },
- setValues: function(jq, values){
- return jq.each(function(){
- setValues(this, values);
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValues(this, [value]);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- $(this).combo('clear');
- var panel = $(this).combo('panel');
- panel.find('div.combobox-item-selected').removeClass('combobox-item-selected');
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).combobox('options');
- if (opts.multiple){
- $(this).combobox('setValues', opts.originalValue);
- } else {
- $(this).combobox('setValue', opts.originalValue);
- }
- });
- },
- loadData: function(jq, data){
- return jq.each(function(){
- loadData(this, data);
- });
- },
- reload: function(jq, url){
- return jq.each(function(){
- request(this, url);
- });
- },
- select: function(jq, value){
- return jq.each(function(){
- select(this, value);
- });
- },
- unselect: function(jq, value){
- return jq.each(function(){
- unselect(this, value);
- });
- }
- };
-
- $.fn.combobox.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target,[
- 'valueField','textField','groupField','mode','method','url'
- ]));
- };
-
- $.fn.combobox.parseData = function(target){
- var data = [];
- var opts = $(target).combobox('options');
- $(target).children().each(function(){
- if (this.tagName.toLowerCase() == 'optgroup'){
- var group = $(this).attr('label');
- $(this).children().each(function(){
- _parseItem(this, group);
- });
- } else {
- _parseItem(this);
- }
- });
- return data;
-
- function _parseItem(el, group){
- var t = $(el);
- var row = {};
- row[opts.valueField] = t.attr('value')!=undefined ? t.attr('value') : t.text();
- row[opts.textField] = t.text();
- row['selected'] = t.is(':selected');
- row['disabled'] = t.is(':disabled');
- if (group){
- opts.groupField = opts.groupField || 'group';
- row[opts.groupField] = group;
- }
- data.push(row);
- }
- };
-
- $.fn.combobox.defaults = $.extend({}, $.fn.combo.defaults, {
- valueField: 'value',
- textField: 'text',
- groupField: null,
- groupFormatter: function(group){return group;},
- mode: 'local', // or 'remote'
- method: 'post',
- url: null,
- data: null,
-
- keyHandler: {
- up: function(e){nav(this,'prev');e.preventDefault()},
- down: function(e){nav(this,'next');e.preventDefault()},
- left: function(e){},
- right: function(e){},
- enter: function(e){doEnter(this)},
- query: function(q,e){doQuery(this, q)}
- },
- filter: function(q, row){
- var opts = $(this).combobox('options');
- return row[opts.textField].toLowerCase().indexOf(q.toLowerCase()) == 0;
- },
- formatter: function(row){
- var opts = $(this).combobox('options');
- return row[opts.textField];
- },
- loader: function(param, success, error){
- var opts = $(this).combobox('options');
- if (!opts.url) return false;
- $.ajax({
- type: opts.method,
- url: opts.url,
- data: param,
- dataType: 'json',
- success: function(data){
- success(data);
- },
- error: function(){
- error.apply(this, arguments);
- }
- });
- },
- loadFilter: function(data){
- return data;
- },
- finder:{
- getEl:function(target, value){
- var index = getRowIndex(target, value);
- var id = $.data(target, 'combobox').itemIdPrefix + '_' + index;
- return $('#'+id);
- },
- getRow:function(target, p){
- var state = $.data(target, 'combobox');
- var index = (p instanceof jQuery) ? p.attr('id').substr(state.itemIdPrefix.length+1) : getRowIndex(target, p);
- return state.data[parseInt(index)];
- }
- },
-
- onBeforeLoad: function(param){},
- onLoadSuccess: function(){},
- onLoadError: function(){},
- onSelect: function(record){},
- onUnselect: function(record){}
- });
- })(jQuery);
- /**
- * combotree - jQuery EasyUI
- *
- * Dependencies:
- * combo
- * tree
- *
- */
- (function($){
- /**
- * create the combotree component.
- */
- function create(target){
- var state = $.data(target, 'combotree');
- var opts = state.options;
- var tree = state.tree;
-
- $(target).addClass('combotree-f');
- $(target).combo(opts);
- var panel = $(target).combo('panel');
- if (!tree){
- tree = $('<ul></ul>').appendTo(panel);
- $.data(target, 'combotree').tree = tree;
- }
-
- tree.tree($.extend({}, opts, {
- checkbox: opts.multiple,
- onLoadSuccess: function(node, data){
- var values = $(target).combotree('getValues');
- if (opts.multiple){
- var nodes = tree.tree('getChecked');
- for(var i=0; i<nodes.length; i++){
- var id = nodes[i].id;
- (function(){
- for(var i=0; i<values.length; i++){
- if (id == values[i]) return;
- }
- values.push(id);
- })();
- }
- }
- $(target).combotree('setValues', values);
- opts.onLoadSuccess.call(this, node, data);
- },
- onClick: function(node){
- if (opts.multiple){
- $(this).tree(node.checked ? 'uncheck' : 'check', node.target);
- } else {
- $(target).combo('hidePanel');
- }
- retrieveValues(target);
- opts.onClick.call(this, node);
- },
- onCheck: function(node, checked){
- retrieveValues(target);
- opts.onCheck.call(this, node, checked);
- }
- }));
- }
-
- /**
- * retrieve values from tree panel.
- */
- function retrieveValues(target){
- var state = $.data(target, 'combotree');
- var opts = state.options;
- var tree = state.tree;
- var vv = [], ss = [];
- if (opts.multiple){
- var nodes = tree.tree('getChecked');
- for(var i=0; i<nodes.length; i++){
- vv.push(nodes[i].id);
- ss.push(nodes[i].text);
- }
- } else {
- var node = tree.tree('getSelected');
- if (node){
- vv.push(node.id);
- ss.push(node.text);
- }
- }
- $(target).combo('setValues', vv).combo('setText', ss.join(opts.separator));
- }
-
- function setValues(target, values){
- var state = $.data(target, 'combotree');
- var opts = state.options;
- var tree = state.tree;
- var topts = tree.tree('options');
- var onCheck = topts.onCheck;
- var onSelect = topts.onSelect;
- topts.onCheck = topts.onSelect = function(){};
- tree.find('span.tree-checkbox').addClass('tree-checkbox0').removeClass('tree-checkbox1 tree-checkbox2');
- if (!$.isArray(values)){values = values.split(opts.separator)}
- for(var i=0; i<values.length; i++){
- var node = tree.tree('find', values[i]);
- if (node){
- tree.tree('check', node.target);
- tree.tree('select', node.target);
- }
- }
- topts.onCheck = onCheck;
- topts.onSelect = onSelect;
- retrieveValues(target);
- }
-
- $.fn.combotree = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.combotree.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.combo(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'combotree');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'combotree', {
- options: $.extend({}, $.fn.combotree.defaults, $.fn.combotree.parseOptions(this), options)
- });
- }
- create(this);
- });
- };
-
-
- $.fn.combotree.methods = {
- options: function(jq){
- var copts = jq.combo('options');
- return $.extend($.data(jq[0], 'combotree').options, {
- width: copts.width,
- height: copts.height,
- originalValue: copts.originalValue,
- disabled: copts.disabled,
- readonly: copts.readonly
- });
- },
- clone: function(jq, container){
- var t = jq.combo('clone', container);
- t.data('combotree', {
- options: $.extend(true, {}, jq.combotree('options')),
- tree: jq.combotree('tree')
- });
- return t;
- },
- tree: function(jq){
- return $.data(jq[0], 'combotree').tree;
- },
- loadData: function(jq, data){
- return jq.each(function(){
- var opts = $.data(this, 'combotree').options;
- opts.data = data;
- var tree = $.data(this, 'combotree').tree;
- tree.tree('loadData', data);
- });
- },
- reload: function(jq, url){
- return jq.each(function(){
- var opts = $.data(this, 'combotree').options;
- var tree = $.data(this, 'combotree').tree;
- if (url) opts.url = url;
- tree.tree({url:opts.url});
- });
- },
- setValues: function(jq, values){
- return jq.each(function(){
- setValues(this, values);
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValues(this, [value]);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- var tree = $.data(this, 'combotree').tree;
- tree.find('div.tree-node-selected').removeClass('tree-node-selected');
- var cc = tree.tree('getChecked');
- for(var i=0; i<cc.length; i++){
- tree.tree('uncheck', cc[i].target);
- }
- $(this).combo('clear');
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).combotree('options');
- if (opts.multiple){
- $(this).combotree('setValues', opts.originalValue);
- } else {
- $(this).combotree('setValue', opts.originalValue);
- }
- });
- }
- };
-
- $.fn.combotree.parseOptions = function(target){
- return $.extend({}, $.fn.combo.parseOptions(target), $.fn.tree.parseOptions(target));
- };
-
- $.fn.combotree.defaults = $.extend({}, $.fn.combo.defaults, $.fn.tree.defaults, {
- editable: false
- });
- })(jQuery);
- /**
- * combogrid - jQuery EasyUI
- *
- * Dependencies:
- * combo
- * datagrid
- *
- */
- (function($){
- /**
- * create this component.
- */
- function create(target){
- var state = $.data(target, 'combogrid');
- var opts = state.options;
- var grid = state.grid;
-
- $(target).addClass('combogrid-f').combo($.extend({}, opts, {
- onShowPanel: function(){
- var p = $(this).combogrid('panel');
- var distance = p.outerHeight() - p.height();
- var minHeight = p._size('minHeight');
- var maxHeight = p._size('maxHeight');
- $(this).combogrid('grid').datagrid('resize', {
- width: '100%',
- height: (isNaN(parseInt(opts.panelHeight)) ? 'auto' : '100%'),
- minHeight: (minHeight ? minHeight-distance : ''),
- maxHeight: (maxHeight ? maxHeight-distance : '')
- });
- opts.onShowPanel.call(this);
- }
- }));
- var panel = $(target).combo('panel');
- if (!grid){
- grid = $('<table></table>').appendTo(panel);
- state.grid = grid;
- }
- grid.datagrid($.extend({}, opts, {
- border: false,
- singleSelect: (!opts.multiple),
- onLoadSuccess: function(data){
- var values = $(target).combo('getValues');
- // prevent from firing onSelect event.
- var oldOnSelect = opts.onSelect;
- opts.onSelect = function(){};
- setValues(target, values, state.remainText);
- opts.onSelect = oldOnSelect;
-
- opts.onLoadSuccess.apply(target, arguments);
- },
- onClickRow: onClickRow,
- onSelect: function(index, row){retrieveValues(); opts.onSelect.call(this, index, row);},
- onUnselect: function(index, row){retrieveValues(); opts.onUnselect.call(this, index, row);},
- onSelectAll: function(rows){retrieveValues(); opts.onSelectAll.call(this, rows);},
- onUnselectAll: function(rows){
- if (opts.multiple) retrieveValues();
- opts.onUnselectAll.call(this, rows);
- }
- }));
-
- function onClickRow(index, row){
- state.remainText = false;
- retrieveValues();
- if (!opts.multiple){
- $(target).combo('hidePanel');
- }
- opts.onClickRow.call(this, index, row);
- }
-
- /**
- * retrieve values from datagrid panel.
- */
- function retrieveValues(){
- var rows = grid.datagrid('getSelections');
- var vv = [],ss = [];
- for(var i=0; i<rows.length; i++){
- vv.push(rows[i][opts.idField]);
- ss.push(rows[i][opts.textField]);
- }
- if (!opts.multiple){
- $(target).combo('setValues', (vv.length ? vv : ['']));
- } else {
- $(target).combo('setValues', vv);
- }
- // $(target).combo('setValues', vv);
- // if (!vv.length && !opts.multiple){
- // $(target).combo('setValues', ['']);
- // }
- if (!state.remainText){
- $(target).combo('setText', ss.join(opts.separator));
- }
- }
- }
-
- function nav(target, dir){
- var state = $.data(target, 'combogrid');
- var opts = state.options;
- var grid = state.grid;
- var rowCount = grid.datagrid('getRows').length;
- if (!rowCount){return}
-
- var tr = opts.finder.getTr(grid[0], null, 'highlight');
- if (!tr.length){
- tr = opts.finder.getTr(grid[0], null, 'selected');;
- }
- var index;
- if (!tr.length){
- index = (dir == 'next' ? 0 : rowCount-1);
- } else {
- var index = parseInt(tr.attr('datagrid-row-index'));
- index += (dir == 'next' ? 1 : -1);
- if (index < 0) {index = rowCount - 1}
- if (index >= rowCount) {index = 0}
- }
-
- grid.datagrid('highlightRow', index);
- if (opts.selectOnNavigation){
- state.remainText = false;
- grid.datagrid('selectRow', index);
- }
- }
-
- /**
- * set combogrid values
- */
- function setValues(target, values, remainText){
- var state = $.data(target, 'combogrid');
- var opts = state.options;
- var grid = state.grid;
- var rows = grid.datagrid('getRows');
- var ss = [];
-
- var oldValues = $(target).combo('getValues');
- var cOpts = $(target).combo('options');
- var oldOnChange = cOpts.onChange;
- cOpts.onChange = function(){}; // prevent from triggering onChange event
-
- grid.datagrid('clearSelections');
- if (!$.isArray(values)){values = values.split(opts.separator)}
- for(var i=0; i<values.length; i++){
- var index = grid.datagrid('getRowIndex', values[i]);
- if (index >= 0){
- grid.datagrid('selectRow', index);
- ss.push(rows[index][opts.textField]);
- } else {
- ss.push(values[i]);
- }
- }
- $(target).combo('setValues', oldValues);
- cOpts.onChange = oldOnChange; // restore to trigger onChange event
-
- $(target).combo('setValues', values);
- if (!remainText){
- var s = ss.join(opts.separator);
- if ($(target).combo('getText') != s){
- $(target).combo('setText', s);
- }
- }
-
- // if ($(target).combo('getValues').join(',') == values.join(',')){
- // return;
- // }
- // $(target).combo('setValues', values);
- // if (!remainText){
- // $(target).combo('setText', ss.join(opts.separator));
- // }
- }
-
- /**
- * do the query action
- */
- function doQuery(target, q){
- var state = $.data(target, 'combogrid');
- var opts = state.options;
- var grid = state.grid;
- state.remainText = true;
-
- if (opts.multiple && !q){
- setValues(target, [], true);
- } else {
- setValues(target, [q], true);
- }
-
- if (opts.mode == 'remote'){
- grid.datagrid('clearSelections');
- grid.datagrid('load', $.extend({}, opts.queryParams, {q:q}));
- } else {
- if (!q) return;
- grid.datagrid('clearSelections').datagrid('highlightRow', -1);
- var rows = grid.datagrid('getRows');
- var qq = opts.multiple ? q.split(opts.separator) : [q];
- $.map(qq, function(q){
- q = $.trim(q);
- if (q){
- $.map(rows, function(row, i){
- if (q == row[opts.textField]){
- grid.datagrid('selectRow', i);
- } else if (opts.filter.call(target, q, row)){
- grid.datagrid('highlightRow', i);
- }
- });
- }
- });
- }
- }
-
- function doEnter(target){
- var state = $.data(target, 'combogrid');
- var opts = state.options;
- var grid = state.grid;
- var tr = opts.finder.getTr(grid[0], null, 'highlight');
- state.remainText = false;
- if (tr.length){
- var index = parseInt(tr.attr('datagrid-row-index'));
- if (opts.multiple){
- if (tr.hasClass('datagrid-row-selected')){
- grid.datagrid('unselectRow', index);
- } else {
- grid.datagrid('selectRow', index);
- }
- } else {
- grid.datagrid('selectRow', index);
- }
- }
- var vv = [];
- $.map(grid.datagrid('getSelections'), function(row){
- vv.push(row[opts.idField]);
- });
- $(target).combogrid('setValues', vv);
- if (!opts.multiple){
- $(target).combogrid('hidePanel');
- }
- }
-
- $.fn.combogrid = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.combogrid.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.combo(options, param);
- // return $.fn.combo.methods[options](this, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'combogrid');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'combogrid', {
- options: $.extend({}, $.fn.combogrid.defaults, $.fn.combogrid.parseOptions(this), options)
- });
- }
-
- create(this);
- });
- };
-
- $.fn.combogrid.methods = {
- options: function(jq){
- var copts = jq.combo('options');
- return $.extend($.data(jq[0], 'combogrid').options, {
- width: copts.width,
- height: copts.height,
- originalValue: copts.originalValue,
- disabled: copts.disabled,
- readonly: copts.readonly
- });
- },
- // get the datagrid object.
- grid: function(jq){
- return $.data(jq[0], 'combogrid').grid;
- },
- setValues: function(jq, values){
- return jq.each(function(){
- setValues(this, values);
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValues(this, [value]);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- $(this).combogrid('grid').datagrid('clearSelections');
- $(this).combo('clear');
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).combogrid('options');
- if (opts.multiple){
- $(this).combogrid('setValues', opts.originalValue);
- } else {
- $(this).combogrid('setValue', opts.originalValue);
- }
- });
- }
- };
-
- $.fn.combogrid.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.combo.parseOptions(target), $.fn.datagrid.parseOptions(target),
- $.parser.parseOptions(target, ['idField','textField','mode']));
- };
-
- $.fn.combogrid.defaults = $.extend({}, $.fn.combo.defaults, $.fn.datagrid.defaults, {
- height:22,
- loadMsg: null,
- idField: null,
- textField: null, // the text field to display.
- mode: 'local', // or 'remote'
-
- keyHandler: {
- up: function(e){nav(this, 'prev');e.preventDefault()},
- down: function(e){nav(this, 'next');e.preventDefault()},
- left: function(e){},
- right: function(e){},
- enter: function(e){doEnter(this)},
- query: function(q,e){doQuery(this, q)}
- },
- filter: function(q, row){
- var opts = $(this).combogrid('options');
- return row[opts.textField].toLowerCase().indexOf(q.toLowerCase()) == 0;
- }
- });
- })(jQuery);
- /**
- * datebox - jQuery EasyUI
- *
- * Dependencies:
- * calendar
- * combo
- *
- */
- (function($){
- /**
- * create date box
- */
- function createBox(target){
- var state = $.data(target, 'datebox');
- var opts = state.options;
-
- $(target).addClass('datebox-f').combo($.extend({}, opts, {
- onShowPanel:function(){
- bindEvents(this);
- setButtons(this);
- setCalendar(this);
- setValue(this, $(this).datebox('getText'), true);
- opts.onShowPanel.call(this);
- }
- }));
-
- /**
- * if the calendar isn't created, create it.
- */
- if (!state.calendar){
- var panel = $(target).combo('panel').css('overflow','hidden');
- panel.panel('options').onBeforeDestroy = function(){
- var c = $(this).find('.calendar-shared');
- if (c.length){
- c.insertBefore(c[0].pholder);
- }
- };
- var cc = $('<div class="datebox-calendar-inner"></div>').prependTo(panel);
- if (opts.sharedCalendar){
- var c = $(opts.sharedCalendar);
- if (!c[0].pholder){
- c[0].pholder = $('<div class="calendar-pholder" style="display:none"></div>').insertAfter(c);
- }
- c.addClass('calendar-shared').appendTo(cc);
- if (!c.hasClass('calendar')){
- c.calendar();
- }
- state.calendar = c;
- } else {
- state.calendar = $('<div></div>').appendTo(cc).calendar();
- }
- $.extend(state.calendar.calendar('options'), {
- fit:true,
- border:false,
- onSelect:function(date){
- var target = this.target;
- var opts = $(target).datebox('options');
- setValue(target, opts.formatter.call(target, date));
- $(target).combo('hidePanel');
- opts.onSelect.call(target, date);
- }
- });
- }
- $(target).combo('textbox').parent().addClass('datebox');
- $(target).datebox('initValue', opts.value);
-
- function bindEvents(target){
- var opts = $(target).datebox('options');
- var panel = $(target).combo('panel');
- panel.unbind('.datebox').bind('click.datebox', function(e){
- if ($(e.target).hasClass('datebox-button-a')){
- var index = parseInt($(e.target).attr('datebox-button-index'));
- opts.buttons[index].handler.call(e.target, target);
- }
- });
- }
- function setButtons(target){
- var panel = $(target).combo('panel');
- if (panel.children('div.datebox-button').length){return}
- var button = $('<div class="datebox-button"><table cellspacing="0" cellpadding="0" style="width:100%"><tr></tr></table></div>').appendTo(panel);
- var tr = button.find('tr');
- for(var i=0; i<opts.buttons.length; i++){
- var td = $('<td></td>').appendTo(tr);
- var btn = opts.buttons[i];
- var t = $('<a class="datebox-button-a" href="javascript:void(0)"></a>').html($.isFunction(btn.text) ? btn.text(target) : btn.text).appendTo(td);
- t.attr('datebox-button-index', i);
- }
- tr.find('td').css('width', (100/opts.buttons.length)+'%');
- }
- function setCalendar(target){
- var panel = $(target).combo('panel');
- var cc = panel.children('div.datebox-calendar-inner');
- panel.children()._outerWidth(panel.width());
- state.calendar.appendTo(cc);
- state.calendar[0].target = target;
- if (opts.panelHeight != 'auto'){
- var height = panel.height();
- panel.children().not(cc).each(function(){
- height -= $(this).outerHeight();
- });
- cc._outerHeight(height);
- }
- state.calendar.calendar('resize');
- }
- }
-
- /**
- * called when user inputs some value in text box
- */
- function doQuery(target, q){
- setValue(target, q, true);
- }
-
- /**
- * called when user press enter key
- */
- function doEnter(target){
- var state = $.data(target, 'datebox');
- var opts = state.options;
- var current = state.calendar.calendar('options').current;
- if (current){
- setValue(target, opts.formatter.call(target, current));
- $(target).combo('hidePanel');
- }
- }
-
- function setValue(target, value, remainText){
- var state = $.data(target, 'datebox');
- var opts = state.options;
- var calendar = state.calendar;
- $(target).combo('setValue', value);
- calendar.calendar('moveTo', opts.parser.call(target, value));
- if (!remainText){
- if (value){
- value = opts.formatter.call(target, calendar.calendar('options').current);
- $(target).combo('setValue', value).combo('setText', value);
- } else {
- $(target).combo('setText', value);
- }
- }
- }
-
- $.fn.datebox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.datebox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.combo(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'datebox');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'datebox', {
- options: $.extend({}, $.fn.datebox.defaults, $.fn.datebox.parseOptions(this), options)
- });
- }
- createBox(this);
- });
- };
-
- $.fn.datebox.methods = {
- options: function(jq){
- var copts = jq.combo('options');
- return $.extend($.data(jq[0], 'datebox').options, {
- width: copts.width,
- height: copts.height,
- originalValue: copts.originalValue,
- disabled: copts.disabled,
- readonly: copts.readonly
- });
- },
- cloneFrom: function(jq, from){
- return jq.each(function(){
- $(this).combo('cloneFrom', from);
- $.data(this, 'datebox', {
- options: $.extend(true, {}, $(from).datebox('options')),
- calendar: $(from).datebox('calendar')
- });
- $(this).addClass('datebox-f');
- });
- },
- calendar: function(jq){ // get the calendar object
- return $.data(jq[0], 'datebox').calendar;
- },
- initValue: function(jq, value){
- return jq.each(function(){
- var opts = $(this).datebox('options');
- var value = opts.value;
- if (value){
- value = opts.formatter.call(this, opts.parser.call(this, value));
- }
- $(this).combo('initValue', value).combo('setText', value);
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValue(this, value);
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).datebox('options');
- $(this).datebox('setValue', opts.originalValue);
- });
- }
- };
-
- $.fn.datebox.parseOptions = function(target){
- return $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target, ['sharedCalendar']));
- };
-
- $.fn.datebox.defaults = $.extend({}, $.fn.combo.defaults, {
- panelWidth:180,
- panelHeight:'auto',
- sharedCalendar:null,
-
- keyHandler: {
- up:function(e){},
- down:function(e){},
- left: function(e){},
- right: function(e){},
- enter:function(e){doEnter(this)},
- query:function(q,e){doQuery(this, q)}
- },
-
- currentText:'Today',
- closeText:'Close',
- okText:'Ok',
-
- buttons:[{
- text: function(target){return $(target).datebox('options').currentText;},
- handler: function(target){
- $(target).datebox('calendar').calendar({
- year:new Date().getFullYear(),
- month:new Date().getMonth()+1,
- current:new Date()
- });
- doEnter(target);
- }
- },{
- text: function(target){return $(target).datebox('options').closeText;},
- handler: function(target){
- $(this).closest('div.combo-panel').panel('close');
- }
- }],
-
- formatter:function(date){
- var y = date.getFullYear();
- var m = date.getMonth()+1;
- var d = date.getDate();
- return (m<10?('0'+m):m)+'/'+(d<10?('0'+d):d)+'/'+y;
- },
- parser:function(s){
- if (!s) return new Date();
- var ss = s.split('/');
- var m = parseInt(ss[0],10);
- var d = parseInt(ss[1],10);
- var y = parseInt(ss[2],10);
- if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
- return new Date(y,m-1,d);
- } else {
- return new Date();
- }
- },
-
- onSelect:function(date){}
- });
- })(jQuery);
- /**
- * datetimebox - jQuery EasyUI
- *
- * Dependencies:
- * datebox
- * timespinner
- *
- */
- (function($){
- function createBox(target){
- var state = $.data(target, 'datetimebox');
- var opts = state.options;
-
- $(target).datebox($.extend({}, opts, {
- onShowPanel:function(){
- var value = $(this).datetimebox('getValue');
- setValue(this, value, true);
- opts.onShowPanel.call(this);
- },
- formatter: $.fn.datebox.defaults.formatter,
- parser: $.fn.datebox.defaults.parser
- }));
- $(target).removeClass('datebox-f').addClass('datetimebox-f');
-
- // override the calendar onSelect event, don't close panel when selected
- $(target).datebox('calendar').calendar({
- onSelect:function(date){
- opts.onSelect.call(this.target, date);
- }
- });
-
- if (!state.spinner){
- var panel = $(target).datebox('panel');
- var p = $('<div style="padding:2px"><input></div>').insertAfter(panel.children('div.datebox-calendar-inner'));
- state.spinner = p.children('input');
- }
- state.spinner.timespinner({
- width: opts.spinnerWidth,
- showSeconds: opts.showSeconds,
- separator: opts.timeSeparator
- });
- $(target).datetimebox('initValue', opts.value);
- }
-
- /**
- * get current date, including time
- */
- function getCurrentDate(target){
- var c = $(target).datetimebox('calendar');
- var t = $(target).datetimebox('spinner');
- var date = c.calendar('options').current;
- return new Date(date.getFullYear(), date.getMonth(), date.getDate(), t.timespinner('getHours'), t.timespinner('getMinutes'), t.timespinner('getSeconds'));
- }
-
-
- /**
- * called when user inputs some value in text box
- */
- function doQuery(target, q){
- setValue(target, q, true);
- }
-
- /**
- * called when user press enter key
- */
- function doEnter(target){
- var opts = $.data(target, 'datetimebox').options;
- var date = getCurrentDate(target);
- setValue(target, opts.formatter.call(target, date));
- $(target).combo('hidePanel');
- }
-
- /**
- * set value, if remainText is assigned, don't change the text value
- */
- function setValue(target, value, remainText){
- var opts = $.data(target, 'datetimebox').options;
-
- $(target).combo('setValue', value);
- if (!remainText){
- if (value){
- var date = opts.parser.call(target, value);
- $(target).combo('setValue', opts.formatter.call(target, date));
- $(target).combo('setText', opts.formatter.call(target, date));
- } else {
- $(target).combo('setText', value);
- }
- }
- var date = opts.parser.call(target, value);
- $(target).datetimebox('calendar').calendar('moveTo', date);
- $(target).datetimebox('spinner').timespinner('setValue', getTimeS(date));
-
- /**
- * get the time formatted string such as '03:48:02'
- */
- function getTimeS(date){
- function formatNumber(value){
- return (value < 10 ? '0' : '') + value;
- }
-
- var tt = [formatNumber(date.getHours()), formatNumber(date.getMinutes())];
- if (opts.showSeconds){
- tt.push(formatNumber(date.getSeconds()));
- }
- return tt.join($(target).datetimebox('spinner').timespinner('options').separator);
- }
- }
-
- $.fn.datetimebox = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.datetimebox.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.datebox(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'datetimebox');
- if (state){
- $.extend(state.options, options);
- } else {
- $.data(this, 'datetimebox', {
- options: $.extend({}, $.fn.datetimebox.defaults, $.fn.datetimebox.parseOptions(this), options)
- });
- }
- createBox(this);
- });
- }
-
- $.fn.datetimebox.methods = {
- options: function(jq){
- var copts = jq.datebox('options');
- return $.extend($.data(jq[0], 'datetimebox').options, {
- originalValue: copts.originalValue,
- disabled: copts.disabled,
- readonly: copts.readonly
- });
- },
- cloneFrom: function(jq, from){
- return jq.each(function(){
- $(this).datebox('cloneFrom', from);
- $.data(this, 'datetimebox', {
- options: $.extend(true, {}, $(from).datetimebox('options')),
- spinner: $(from).datetimebox('spinner')
- });
- $(this).removeClass('datebox-f').addClass('datetimebox-f');
- });
- },
- spinner: function(jq){
- return $.data(jq[0], 'datetimebox').spinner;
- },
- initValue: function(jq, value){
- return jq.each(function(){
- var opts = $(this).datetimebox('options');
- var value = opts.value;
- if (value){
- value = opts.formatter.call(this, opts.parser.call(this, value));
- }
- $(this).combo('initValue', value).combo('setText', value);
- });
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValue(this, value);
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).datetimebox('options');
- $(this).datetimebox('setValue', opts.originalValue);
- });
- }
- };
-
- $.fn.datetimebox.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.fn.datebox.parseOptions(target), $.parser.parseOptions(target, [
- 'timeSeparator','spinnerWidth',{showSeconds:'boolean'}
- ]));
- };
-
- $.fn.datetimebox.defaults = $.extend({}, $.fn.datebox.defaults, {
- spinnerWidth:'100%',
- showSeconds:true,
- timeSeparator:':',
-
- keyHandler: {
- up:function(e){},
- down:function(e){},
- left: function(e){},
- right: function(e){},
- enter:function(e){doEnter(this)},
- query:function(q,e){doQuery(this, q);}
- },
- buttons:[{
- text: function(target){return $(target).datetimebox('options').currentText;},
- handler: function(target){
- var opts = $(target).datetimebox('options');
- setValue(target, opts.formatter.call(target, new Date()));
- $(target).datetimebox('hidePanel');
- }
- },{
- text: function(target){return $(target).datetimebox('options').okText;},
- handler: function(target){
- doEnter(target);
- }
- },{
- text: function(target){return $(target).datetimebox('options').closeText;},
- handler: function(target){
- $(target).datetimebox('hidePanel');
- }
- }],
-
- formatter:function(date){
- var h = date.getHours();
- var M = date.getMinutes();
- var s = date.getSeconds();
- function formatNumber(value){
- return (value < 10 ? '0' : '') + value;
- }
- var separator = $(this).datetimebox('spinner').timespinner('options').separator;
- var r = $.fn.datebox.defaults.formatter(date) + ' ' + formatNumber(h)+separator+formatNumber(M);
- if ($(this).datetimebox('options').showSeconds){
- r += separator+formatNumber(s);
- }
- return r;
- },
- parser:function(s){
- if ($.trim(s) == ''){
- return new Date();
- }
- var dt = s.split(' ');
- var d = $.fn.datebox.defaults.parser(dt[0]);
- if (dt.length < 2){
- return d;
- }
- var separator = $(this).datetimebox('spinner').timespinner('options').separator;
- var tt = dt[1].split(separator);
- var hour = parseInt(tt[0], 10) || 0;
- var minute = parseInt(tt[1], 10) || 0;
- var second = parseInt(tt[2], 10) || 0;
- return new Date(d.getFullYear(), d.getMonth(), d.getDate(), hour, minute, second);
- }
- });
- })(jQuery);
- /**
- * slider - jQuery EasyUI
- *
- * Dependencies:
- * draggable
- *
- */
- (function($){
- function init(target){
- var slider = $('<div class="slider">' +
- '<div class="slider-inner">' +
- '<a href="javascript:void(0)" class="slider-handle"></a>' +
- '<span class="slider-tip"></span>' +
- '</div>' +
- '<div class="slider-rule"></div>' +
- '<div class="slider-rulelabel"></div>' +
- '<div style="clear:both"></div>' +
- '<input type="hidden" class="slider-value">' +
- '</div>').insertAfter(target);
- var t = $(target);
- t.addClass('slider-f').hide();
- var name = t.attr('name');
- if (name){
- slider.find('input.slider-value').attr('name', name);
- t.removeAttr('name').attr('sliderName', name);
- }
- slider.bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(target);
- }
- return false;
- });
- return slider;
- }
-
- /**
- * set the slider size, for vertical slider, the height property is required
- */
- function setSize(target, param){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
-
- if (param){
- if (param.width) opts.width = param.width;
- if (param.height) opts.height = param.height;
- }
- slider._size(opts);
- if (opts.mode == 'h'){
- slider.css('height', '');
- slider.children('div').css('height', '');
- } else {
- slider.css('width', '');
- slider.children('div').css('width', '');
- slider.children('div.slider-rule,div.slider-rulelabel,div.slider-inner')._outerHeight(slider._outerHeight());
- }
- initValue(target);
- }
-
- /**
- * show slider rule if needed
- */
- function showRule(target){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
-
- var aa = opts.mode == 'h' ? opts.rule : opts.rule.slice(0).reverse();
- if (opts.reversed){
- aa = aa.slice(0).reverse();
- }
- _build(aa);
-
- function _build(aa){
- var rule = slider.find('div.slider-rule');
- var label = slider.find('div.slider-rulelabel');
- rule.empty();
- label.empty();
- for(var i=0; i<aa.length; i++){
- var distance = i*100/(aa.length-1)+'%';
- var span = $('<span></span>').appendTo(rule);
- span.css((opts.mode=='h'?'left':'top'), distance);
-
- // show the labels
- if (aa[i] != '|'){
- span = $('<span></span>').appendTo(label);
- span.html(aa[i]);
- if (opts.mode == 'h'){
- span.css({
- left: distance,
- marginLeft: -Math.round(span.outerWidth()/2)
- });
- } else {
- span.css({
- top: distance,
- marginTop: -Math.round(span.outerHeight()/2)
- });
- }
- }
- }
- }
- }
-
- /**
- * build the slider and set some properties
- */
- function buildSlider(target){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
-
- slider.removeClass('slider-h slider-v slider-disabled');
- slider.addClass(opts.mode == 'h' ? 'slider-h' : 'slider-v');
- slider.addClass(opts.disabled ? 'slider-disabled' : '');
-
- slider.find('a.slider-handle').draggable({
- axis:opts.mode,
- cursor:'pointer',
- disabled: opts.disabled,
- onDrag:function(e){
- var left = e.data.left;
- var width = slider.width();
- if (opts.mode!='h'){
- left = e.data.top;
- width = slider.height();
- }
- if (left < 0 || left > width) {
- return false;
- } else {
- var value = pos2value(target, left);
- adjustValue(value);
- return false;
- }
- },
- onBeforeDrag:function(){
- state.isDragging = true;
- },
- onStartDrag:function(){
- opts.onSlideStart.call(target, opts.value);
- },
- onStopDrag:function(e){
- var value = pos2value(target, (opts.mode=='h'?e.data.left:e.data.top));
- adjustValue(value);
- opts.onSlideEnd.call(target, opts.value);
- opts.onComplete.call(target, opts.value);
- state.isDragging = false;
- }
- });
- slider.find('div.slider-inner').unbind('.slider').bind('mousedown.slider', function(e){
- if (state.isDragging || opts.disabled){return}
- var pos = $(this).offset();
- var value = pos2value(target, (opts.mode=='h'?(e.pageX-pos.left):(e.pageY-pos.top)));
- adjustValue(value);
- opts.onComplete.call(target, opts.value);
- });
-
- function adjustValue(value){
- var s = Math.abs(value % opts.step);
- if (s < opts.step/2){
- value -= s;
- } else {
- value = value - s + opts.step;
- }
- setValue(target, value);
- }
- }
-
- /**
- * set a specified value to slider
- */
- function setValue(target, value){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
- var oldValue = opts.value;
- if (value < opts.min) value = opts.min;
- if (value > opts.max) value = opts.max;
-
- opts.value = value;
- $(target).val(value);
- slider.find('input.slider-value').val(value);
-
- var pos = value2pos(target, value);
- var tip = slider.find('.slider-tip');
- if (opts.showTip){
- tip.show();
- tip.html(opts.tipFormatter.call(target, opts.value));
- } else {
- tip.hide();
- }
-
- if (opts.mode == 'h'){
- var style = 'left:'+pos+'px;';
- slider.find('.slider-handle').attr('style', style);
- tip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth()/2)) + 'px');
- } else {
- var style = 'top:' + pos + 'px;';
- slider.find('.slider-handle').attr('style', style);
- tip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth())) + 'px');
- }
-
- if (oldValue != value){
- opts.onChange.call(target, value, oldValue);
- }
- }
-
- function initValue(target){
- var opts = $.data(target, 'slider').options;
- var fn = opts.onChange;
- opts.onChange = function(){};
- setValue(target, opts.value);
- opts.onChange = fn;
- }
-
- /**
- * translate value to slider position
- */
- // function value2pos(target, value){
- // var state = $.data(target, 'slider');
- // var opts = state.options;
- // var slider = state.slider;
- // if (opts.mode == 'h'){
- // var pos = (value-opts.min)/(opts.max-opts.min)*slider.width();
- // if (opts.reversed){
- // pos = slider.width() - pos;
- // }
- // } else {
- // var pos = slider.height() - (value-opts.min)/(opts.max-opts.min)*slider.height();
- // if (opts.reversed){
- // pos = slider.height() - pos;
- // }
- // }
- // return pos.toFixed(0);
- // }
- function value2pos(target, value){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
- var size = opts.mode == 'h' ? slider.width() : slider.height();
- var pos = opts.converter.toPosition.call(target, value, size);
- if (opts.mode == 'v'){
- pos = slider.height() - pos;
- }
- if (opts.reversed){
- pos = size - pos;
- }
- return pos.toFixed(0);
- }
-
- /**
- * translate slider position to value
- */
- // function pos2value(target, pos){
- // var state = $.data(target, 'slider');
- // var opts = state.options;
- // var slider = state.slider;
- // if (opts.mode == 'h'){
- // var value = opts.min + (opts.max-opts.min)*(pos/slider.width());
- // } else {
- // var value = opts.min + (opts.max-opts.min)*((slider.height()-pos)/slider.height());
- // }
- // return opts.reversed ? opts.max - value.toFixed(0) : value.toFixed(0);
- // }
- function pos2value(target, pos){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
- var size = opts.mode == 'h' ? slider.width() : slider.height();
- var value = opts.converter.toValue.call(target, opts.mode=='h'?(opts.reversed?(size-pos):pos):(size-pos), size);
- return value.toFixed(0);
- // var value = opts.converter.toValue.call(target, opts.mode=='h'?pos:(size-pos), size);
- // return opts.reversed ? opts.max - value.toFixed(0) : value.toFixed(0);
- }
-
- $.fn.slider = function(options, param){
- if (typeof options == 'string'){
- return $.fn.slider.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'slider');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'slider', {
- options: $.extend({}, $.fn.slider.defaults, $.fn.slider.parseOptions(this), options),
- slider: init(this)
- });
- $(this).removeAttr('disabled');
- }
-
- var opts = state.options;
- opts.min = parseFloat(opts.min);
- opts.max = parseFloat(opts.max);
- opts.value = parseFloat(opts.value);
- opts.step = parseFloat(opts.step);
- opts.originalValue = opts.value;
-
- buildSlider(this);
- showRule(this);
- setSize(this);
- });
- };
-
- $.fn.slider.methods = {
- options: function(jq){
- return $.data(jq[0], 'slider').options;
- },
- destroy: function(jq){
- return jq.each(function(){
- $.data(this, 'slider').slider.remove();
- $(this).remove();
- });
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- getValue: function(jq){
- return jq.slider('options').value;
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValue(this, value);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- var opts = $(this).slider('options');
- setValue(this, opts.min);
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).slider('options');
- setValue(this, opts.originalValue);
- });
- },
- enable: function(jq){
- return jq.each(function(){
- $.data(this, 'slider').options.disabled = false;
- buildSlider(this);
- });
- },
- disable: function(jq){
- return jq.each(function(){
- $.data(this, 'slider').options.disabled = true;
- buildSlider(this);
- });
- }
- };
-
- $.fn.slider.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [
- 'width','height','mode',{reversed:'boolean',showTip:'boolean',min:'number',max:'number',step:'number'}
- ]), {
- value: (t.val() || undefined),
- disabled: (t.attr('disabled') ? true : undefined),
- rule: (t.attr('rule') ? eval(t.attr('rule')) : undefined)
- });
- };
-
- $.fn.slider.defaults = {
- width: 'auto',
- height: 'auto',
- mode: 'h', // 'h'(horizontal) or 'v'(vertical)
- reversed: false,
- showTip: false,
- disabled: false,
- value: 0,
- min: 0,
- max: 100,
- step: 1,
- rule: [], // [0,'|',100]
- tipFormatter: function(value){return value},
- converter:{
- toPosition:function(value, size){
- var opts = $(this).slider('options');
- return (value-opts.min)/(opts.max-opts.min)*size;
- },
- toValue:function(pos, size){
- var opts = $(this).slider('options');
- return opts.min + (opts.max-opts.min)*(pos/size);
- }
- },
- onChange: function(value, oldValue){},
- onSlideStart: function(value){},
- onSlideEnd: function(value){},
- onComplete: function(value){}
- };
- })(jQuery);
|