ligerui.all.js 536 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516
  1. /**
  2. * jQuery ligerUI 1.1.9
  3. *
  4. * http://ligerui.com
  5. *
  6. * Author daomi 2012 [ gd_star@163.com ]
  7. *
  8. */
  9. (function ($)
  10. {
  11. //ligerui 继承方法
  12. Function.prototype.ligerExtend = function (parent, overrides)
  13. {
  14. if (typeof parent != 'function') return this;
  15. //保存对父类的引用
  16. this.base = parent.prototype;
  17. this.base.constructor = parent;
  18. //继承
  19. var f = function () { };
  20. f.prototype = parent.prototype;
  21. this.prototype = new f();
  22. this.prototype.constructor = this;
  23. //附加属性方法
  24. if (overrides) $.extend(this.prototype, overrides);
  25. };
  26. //延时加载
  27. Function.prototype.ligerDefer = function (o, defer, args)
  28. {
  29. var fn = this;
  30. return setTimeout(function () { fn.apply(o, args || []); }, defer);
  31. };
  32. // 核心对象
  33. window.liger = $.ligerui = {
  34. version: 'V1.1.9',
  35. managerCount: 0,
  36. //组件管理器池
  37. managers: {},
  38. managerIdPrev: 'ligerui',
  39. //错误提示
  40. error: {
  41. managerIsExist: '管理器id已经存在'
  42. },
  43. getId: function (prev)
  44. {
  45. prev = prev || this.managerIdPrev;
  46. var id = prev + (1000 + this.managerCount);
  47. this.managerCount++;
  48. return id;
  49. },
  50. add: function (manager)
  51. {
  52. if (arguments.length == 2)
  53. {
  54. var m = arguments[1];
  55. m.id = m.id || m.options.id || arguments[0].id;
  56. this.addManager(m);
  57. return;
  58. }
  59. if (!manager.id) manager.id = this.getId(manager.__idPrev());
  60. if (this.managers[manager.id])
  61. throw new Error(this.error.managerIsExist);
  62. this.managers[manager.id] = manager;
  63. },
  64. remove: function (arg)
  65. {
  66. if (typeof arg == "string" || typeof arg == "number")
  67. {
  68. delete $.ligerui.managers[arg];
  69. }
  70. else if (typeof arg == "object" && arg instanceof $.ligerui.core.Component)
  71. {
  72. delete $.ligerui.managers[arg.id];
  73. }
  74. },
  75. //获取ligerui对象
  76. //1,传入ligerui ID
  77. //2,传入Dom Object Array(jQuery)
  78. get: function (arg, idAttrName)
  79. {
  80. idAttrName = idAttrName || "ligeruiid";
  81. if (typeof arg == "string" || typeof arg == "number")
  82. {
  83. return $.ligerui.managers[arg];
  84. }
  85. else if (typeof arg == "object" && arg.length)
  86. {
  87. if (!arg[0][idAttrName] && !$(arg[0]).attr(idAttrName)) return null;
  88. return $.ligerui.managers[arg[0][idAttrName] || $(arg[0]).attr(idAttrName)];
  89. }
  90. return null;
  91. },
  92. //根据类型查找某一个对象
  93. find: function (type)
  94. {
  95. var arr = [];
  96. for (var id in this.managers)
  97. {
  98. var manager = this.managers[id];
  99. if (type instanceof Function)
  100. {
  101. if (manager instanceof type)
  102. {
  103. arr.push(manager);
  104. }
  105. }
  106. else if (type instanceof Array)
  107. {
  108. if ($.inArray(manager.__getType(), type) != -1)
  109. {
  110. arr.push(manager);
  111. }
  112. }
  113. else
  114. {
  115. if (manager.__getType() == type)
  116. {
  117. arr.push(manager);
  118. }
  119. }
  120. }
  121. return arr;
  122. },
  123. //$.fn.liger{Plugin} 和 $.fn.ligerGet{Plugin}Manager
  124. //会调用这个方法,并传入作用域(this)
  125. //@parm [plugin] 插件名
  126. //@parm [args] 参数(数组)
  127. //@parm [ext] 扩展参数,定义命名空间或者id属性名
  128. run: function (plugin, args, ext)
  129. {
  130. if (!plugin) return;
  131. ext = $.extend({
  132. defaultsNamespace: 'ligerDefaults',
  133. methodsNamespace: 'ligerMethods',
  134. controlNamespace: 'controls',
  135. idAttrName: 'ligeruiid',
  136. isStatic: false,
  137. hasElement: true, //是否拥有element主体(比如drag、resizable等辅助性插件就不拥有)
  138. propertyToElemnt: null //链接到element的属性名
  139. }, ext || {});
  140. plugin = plugin.replace(/^ligerGet/, '');
  141. plugin = plugin.replace(/^liger/, '');
  142. if (this == null || this == window || ext.isStatic)
  143. {
  144. if (!$.ligerui.plugins[plugin])
  145. {
  146. $.ligerui.plugins[plugin] = {
  147. fn: $['liger' + plugin],
  148. isStatic: true
  149. };
  150. }
  151. return new $.ligerui[ext.controlNamespace][plugin]($.extend({}, $[ext.defaultsNamespace][plugin] || {}, $[ext.defaultsNamespace][plugin + 'String'] || {}, args.length > 0 ? args[0] : {}));
  152. }
  153. if (!$.ligerui.plugins[plugin])
  154. {
  155. $.ligerui.plugins[plugin] = {
  156. fn: $.fn['liger' + plugin],
  157. isStatic: false
  158. };
  159. }
  160. if (/Manager$/.test(plugin)) return $.ligerui.get(this, ext.idAttrName);
  161. this.each(function ()
  162. {
  163. if (this[ext.idAttrName] || $(this).attr(ext.idAttrName))
  164. {
  165. var manager = $.ligerui.get(this[ext.idAttrName] || $(this).attr(ext.idAttrName));
  166. if (manager && args.length > 0) manager.set(args[0]);
  167. //已经执行过
  168. return;
  169. }
  170. if (args.length >= 1 && typeof args[0] == 'string') return;
  171. //只要第一个参数不是string类型,都执行组件的实例化工作
  172. var options = args.length > 0 ? args[0] : null;
  173. var p = $.extend({}, $[ext.defaultsNamespace][plugin] || {}
  174. , $[ext.defaultsNamespace][plugin + 'String'] || {}, options || {});
  175. if (ext.propertyToElemnt) p[ext.propertyToElemnt] = this;
  176. if (ext.hasElement)
  177. {
  178. new $.ligerui[ext.controlNamespace][plugin](this, p);
  179. }
  180. else
  181. {
  182. new $.ligerui[ext.controlNamespace][plugin](p);
  183. }
  184. });
  185. if (this.length == 0) return null;
  186. if (args.length == 0) return $.ligerui.get(this, ext.idAttrName);
  187. if (typeof args[0] == 'object') return $.ligerui.get(this, ext.idAttrName);
  188. if (typeof args[0] == 'string')
  189. {
  190. var manager = $.ligerui.get(this, ext.idAttrName);
  191. if (manager == null) return;
  192. if (args[0] == "option")
  193. {
  194. if (args.length == 2)
  195. return manager.get(args[1]); //manager get
  196. else if (args.length >= 3)
  197. return manager.set(args[1], args[2]); //manager set
  198. }
  199. else
  200. {
  201. var method = args[0];
  202. if (!manager[method]) return; //不存在这个方法
  203. var parms = Array.apply(null, args);
  204. parms.shift();
  205. return manager[method].apply(manager, parms); //manager method
  206. }
  207. }
  208. return null;
  209. },
  210. //扩展
  211. //1,默认参数
  212. //2,本地化扩展
  213. defaults: {},
  214. //3,方法接口扩展
  215. methods: {},
  216. //命名空间
  217. //核心控件,封装了一些常用方法
  218. core: {},
  219. //命名空间
  220. //组件的集合
  221. controls: {},
  222. //plugin 插件的集合
  223. plugins: {}
  224. };
  225. //扩展对象
  226. $.ligerDefaults = {};
  227. //扩展对象
  228. $.ligerMethos = {};
  229. //关联起来
  230. $.ligerui.defaults = $.ligerDefaults;
  231. $.ligerui.methods = $.ligerMethos;
  232. //获取ligerui对象
  233. //@parm [plugin] 插件名,可为空
  234. $.fn.liger = function (plugin)
  235. {
  236. if (plugin)
  237. {
  238. return $.ligerui.run.call(this, plugin, arguments);
  239. }
  240. else
  241. {
  242. return $.ligerui.get(this);
  243. }
  244. };
  245. //组件基类
  246. //1,完成定义参数处理方法和参数属性初始化的工作
  247. //2,完成定义事件处理方法和事件属性初始化的工作
  248. $.ligerui.core.Component = function (options)
  249. {
  250. //事件容器
  251. this.events = this.events || {};
  252. //配置参数
  253. this.options = options || {};
  254. //子组件集合索引
  255. this.children = {};
  256. };
  257. $.extend($.ligerui.core.Component.prototype, {
  258. __getType: function ()
  259. {
  260. return '$.ligerui.core.Component';
  261. },
  262. __idPrev: function ()
  263. {
  264. return 'ligerui';
  265. },
  266. //设置属性
  267. // arg 属性名 value 属性值
  268. // arg 属性/值 value 是否只设置事件
  269. set: function (arg, value)
  270. {
  271. if (!arg) return;
  272. if (typeof arg == 'object')
  273. {
  274. var tmp;
  275. if (this.options != arg)
  276. {
  277. $.extend(this.options, arg);
  278. tmp = arg;
  279. }
  280. else
  281. {
  282. tmp = $.extend({}, arg);
  283. }
  284. if (value == undefined || value == true)
  285. {
  286. for (var p in tmp)
  287. {
  288. if (p.indexOf('on') == 0)
  289. this.set(p, tmp[p]);
  290. }
  291. }
  292. if (value == undefined || value == false)
  293. {
  294. for (var p in tmp)
  295. {
  296. if (p.indexOf('on') != 0)
  297. this.set(p, tmp[p]);
  298. }
  299. }
  300. return;
  301. }
  302. var name = arg;
  303. //事件参数
  304. if (name.indexOf('on') == 0)
  305. {
  306. if (typeof value == 'function')
  307. this.bind(name.substr(2), value);
  308. return;
  309. }
  310. this.trigger('propertychange', arg, value);
  311. if (!this.options) this.options = {};
  312. this.options[name] = value;
  313. var pn = '_set' + name.substr(0, 1).toUpperCase() + name.substr(1);
  314. if (this[pn])
  315. {
  316. this[pn].call(this, value);
  317. }
  318. this.trigger('propertychanged', arg, value);
  319. },
  320. //获取属性
  321. get: function (name)
  322. {
  323. var pn = '_get' + name.substr(0, 1).toUpperCase() + name.substr(1);
  324. if (this[pn])
  325. {
  326. return this[pn].call(this, name);
  327. }
  328. return this.options[name];
  329. },
  330. hasBind: function (arg)
  331. {
  332. var name = arg.toLowerCase();
  333. var event = this.events[name];
  334. if (event && event.length) return true;
  335. return false;
  336. },
  337. //触发事件
  338. //data (可选) Array(可选)传递给事件处理函数的附加参数
  339. trigger: function (arg, data)
  340. {
  341. var name = arg.toLowerCase();
  342. var event = this.events[name];
  343. if (!event) return;
  344. data = data || [];
  345. if ((data instanceof Array) == false)
  346. {
  347. data = [data];
  348. }
  349. for (var i = 0; i < event.length; i++)
  350. {
  351. var ev = event[i];
  352. if (ev.handler.apply(ev.context, data) == false)
  353. return false;
  354. }
  355. },
  356. //绑定事件
  357. bind: function (arg, handler, context)
  358. {
  359. if (typeof arg == 'object')
  360. {
  361. for (var p in arg)
  362. {
  363. this.bind(p, arg[p]);
  364. }
  365. return;
  366. }
  367. if (typeof handler != 'function') return false;
  368. var name = arg.toLowerCase();
  369. var event = this.events[name] || [];
  370. context = context || this;
  371. event.push({ handler: handler, context: context });
  372. this.events[name] = event;
  373. },
  374. //取消绑定
  375. unbind: function (arg, handler)
  376. {
  377. if (!arg)
  378. {
  379. this.events = {};
  380. return;
  381. }
  382. var name = arg.toLowerCase();
  383. var event = this.events[name];
  384. if (!event || !event.length) return;
  385. if (!handler)
  386. {
  387. delete this.events[name];
  388. }
  389. else
  390. {
  391. for (var i = 0, l = event.length; i < l; i++)
  392. {
  393. if (event[i].handler == handler)
  394. {
  395. event.splice(i, 1);
  396. break;
  397. }
  398. }
  399. }
  400. },
  401. destroy: function ()
  402. {
  403. $.ligerui.remove(this);
  404. }
  405. });
  406. //界面组件基类,
  407. //1,完成界面初始化:设置组件id并存入组件管理器池,初始化参数
  408. //2,渲染的工作,细节交给子类实现
  409. //@parm [element] 组件对应的dom element对象
  410. //@parm [options] 组件的参数
  411. $.ligerui.core.UIComponent = function (element, options)
  412. {
  413. $.ligerui.core.UIComponent.base.constructor.call(this, options);
  414. var extendMethods = this._extendMethods();
  415. if (extendMethods) $.extend(this, extendMethods);
  416. this.element = element;
  417. this._init();
  418. this._preRender();
  419. this.trigger('render');
  420. this._render();
  421. this.trigger('rendered');
  422. this._rendered();
  423. };
  424. $.ligerui.core.UIComponent.ligerExtend($.ligerui.core.Component, {
  425. __getType: function ()
  426. {
  427. return '$.ligerui.core.UIComponent';
  428. },
  429. //扩展方法
  430. _extendMethods: function ()
  431. {
  432. },
  433. _init: function ()
  434. {
  435. this.type = this.__getType();
  436. if (!this.element)
  437. {
  438. this.id = this.options.id || $.ligerui.getId(this.__idPrev());
  439. }
  440. else
  441. {
  442. this.id = this.options.id || this.element.id || $.ligerui.getId(this.__idPrev());
  443. }
  444. //存入管理器池
  445. $.ligerui.add(this);
  446. if (!this.element) return;
  447. //读取attr方法,并加载到参数,比如['url']
  448. var attributes = this.attr();
  449. if (attributes && attributes instanceof Array)
  450. {
  451. for (var i = 0; i < attributes.length; i++)
  452. {
  453. var name = attributes[i];
  454. this.options[name] = $(this.element).attr(name);
  455. }
  456. }
  457. //读取ligerui这个属性,并加载到参数,比如 ligerui = "width:120,heigth:100"
  458. var p = this.options;
  459. if ($(this.element).attr("ligerui"))
  460. {
  461. try
  462. {
  463. var attroptions = $(this.element).attr("ligerui");
  464. if (attroptions.indexOf('{') != 0) attroptions = "{" + attroptions + "}";
  465. eval("attroptions = " + attroptions + ";");
  466. if (attroptions) $.extend(p, attroptions);
  467. }
  468. catch (e) { }
  469. }
  470. },
  471. //预渲染,可以用于继承扩展
  472. _preRender: function ()
  473. {
  474. },
  475. _render: function ()
  476. {
  477. },
  478. _rendered: function ()
  479. {
  480. if (this.element)
  481. {
  482. $(this.element).attr("ligeruiid", this.id);
  483. }
  484. },
  485. //返回要转换成ligerui参数的属性,比如['url']
  486. attr: function ()
  487. {
  488. return [];
  489. },
  490. destroy: function ()
  491. {
  492. if (this.element) $(this.element).remove();
  493. this.options = null;
  494. $.ligerui.remove(this);
  495. }
  496. });
  497. //表单控件基类
  498. $.ligerui.controls.Input = function (element, options)
  499. {
  500. $.ligerui.controls.Input.base.constructor.call(this, element, options);
  501. };
  502. $.ligerui.controls.Input.ligerExtend($.ligerui.core.UIComponent, {
  503. __getType: function ()
  504. {
  505. return '$.ligerui.controls.Input';
  506. },
  507. attr: function ()
  508. {
  509. return ['nullText'];
  510. },
  511. setValue: function (value)
  512. {
  513. return this.set('value', value);
  514. },
  515. getValue: function ()
  516. {
  517. return this.get('value');
  518. },
  519. setEnabled: function ()
  520. {
  521. return this.set('disabled', false);
  522. },
  523. setDisabled: function ()
  524. {
  525. return this.set('disabled', true);
  526. },
  527. updateStyle: function ()
  528. {
  529. }
  530. });
  531. //全局窗口对象
  532. $.ligerui.win = {
  533. //顶端显示
  534. top: false,
  535. //遮罩
  536. mask: function (win)
  537. {
  538. function setHeight()
  539. {
  540. if (!$.ligerui.win.windowMask) return;
  541. var h = $(window).height() + $(window).scrollTop();
  542. $.ligerui.win.windowMask.height(h);
  543. }
  544. if (!this.windowMask)
  545. {
  546. this.windowMask = $("<div class='l-window-mask' style='display: block;'></div>").appendTo('body');
  547. $(window).bind('resize.ligeruiwin', setHeight);
  548. $(window).bind('scroll', setHeight);
  549. }
  550. this.windowMask.show();
  551. setHeight();
  552. this.masking = true;
  553. },
  554. //取消遮罩
  555. unmask: function (win)
  556. {
  557. var jwins = $("body > .l-dialog:visible,body > .l-window:visible");
  558. for (var i = 0, l = jwins.length; i < l; i++)
  559. {
  560. var winid = jwins.eq(i).attr("ligeruiid");
  561. if (win && win.id == winid) continue;
  562. //获取ligerui对象
  563. var winmanager = $.ligerui.get(winid);
  564. if (!winmanager) continue;
  565. //是否模态窗口
  566. var modal = winmanager.get('modal');
  567. //如果存在其他模态窗口,那么不会取消遮罩
  568. if (modal) return;
  569. }
  570. if (this.windowMask)
  571. this.windowMask.hide();
  572. this.masking = false;
  573. },
  574. //显示任务栏
  575. createTaskbar: function ()
  576. {
  577. if (!this.taskbar)
  578. {
  579. this.taskbar = $('<div class="l-taskbar"><div class="l-taskbar-tasks"></div><div class="l-clear"></div></div>').appendTo('body');
  580. if (this.top) this.taskbar.addClass("l-taskbar-top");
  581. this.taskbar.tasks = $(".l-taskbar-tasks:first", this.taskbar);
  582. this.tasks = {};
  583. }
  584. this.taskbar.show();
  585. this.taskbar.animate({ bottom: 0 });
  586. return this.taskbar;
  587. },
  588. //关闭任务栏
  589. removeTaskbar: function ()
  590. {
  591. var self = this;
  592. self.taskbar.animate({ bottom: -32 }, function ()
  593. {
  594. self.taskbar.remove();
  595. self.taskbar = null;
  596. });
  597. },
  598. activeTask: function (win)
  599. {
  600. for (var winid in this.tasks)
  601. {
  602. var t = this.tasks[winid];
  603. if (winid == win.id)
  604. {
  605. t.addClass("l-taskbar-task-active");
  606. }
  607. else
  608. {
  609. t.removeClass("l-taskbar-task-active");
  610. }
  611. }
  612. },
  613. //获取任务
  614. getTask: function (win)
  615. {
  616. var self = this;
  617. if (!self.taskbar) return;
  618. if (self.tasks[win.id]) return self.tasks[win.id];
  619. return null;
  620. },
  621. //增加任务
  622. addTask: function (win)
  623. {
  624. var self = this;
  625. if (!self.taskbar) self.createTaskbar();
  626. if (self.tasks[win.id]) return self.tasks[win.id];
  627. var title = win.get('title');
  628. var task = self.tasks[win.id] = $('<div class="l-taskbar-task"><div class="l-taskbar-task-icon"></div><div class="l-taskbar-task-content">' + title + '</div></div>');
  629. self.taskbar.tasks.append(task);
  630. self.activeTask(win);
  631. task.bind('click', function ()
  632. {
  633. self.activeTask(win);
  634. if (win.actived)
  635. win.min();
  636. else
  637. win.active();
  638. }).hover(function ()
  639. {
  640. $(this).addClass("l-taskbar-task-over");
  641. }, function ()
  642. {
  643. $(this).removeClass("l-taskbar-task-over");
  644. });
  645. return task;
  646. },
  647. hasTask: function ()
  648. {
  649. for (var p in this.tasks)
  650. {
  651. if (this.tasks[p])
  652. return true;
  653. }
  654. return false;
  655. },
  656. //移除任务
  657. removeTask: function (win)
  658. {
  659. var self = this;
  660. if (!self.taskbar) return;
  661. if (self.tasks[win.id])
  662. {
  663. self.tasks[win.id].unbind();
  664. self.tasks[win.id].remove();
  665. delete self.tasks[win.id];
  666. }
  667. if (!self.hasTask())
  668. {
  669. self.removeTaskbar();
  670. }
  671. },
  672. //前端显示
  673. setFront: function (win)
  674. {
  675. var wins = $.ligerui.find($.ligerui.core.Win);
  676. for (var i in wins)
  677. {
  678. var w = wins[i];
  679. if (w == win)
  680. {
  681. $(w.element).css("z-index", "9200");
  682. this.activeTask(w);
  683. }
  684. else
  685. {
  686. $(w.element).css("z-index", "9100");
  687. }
  688. }
  689. }
  690. };
  691. //窗口基类 window、dialog
  692. $.ligerui.core.Win = function (element, options)
  693. {
  694. $.ligerui.core.Win.base.constructor.call(this, element, options);
  695. };
  696. $.ligerui.core.Win.ligerExtend($.ligerui.core.UIComponent, {
  697. __getType: function ()
  698. {
  699. return '$.ligerui.controls.Win';
  700. },
  701. mask: function ()
  702. {
  703. if (this.options.modal)
  704. $.ligerui.win.mask(this);
  705. },
  706. unmask: function ()
  707. {
  708. if (this.options.modal)
  709. $.ligerui.win.unmask(this);
  710. },
  711. min: function ()
  712. {
  713. },
  714. max: function ()
  715. {
  716. },
  717. active: function ()
  718. {
  719. }
  720. });
  721. $.ligerui.draggable = {
  722. dragging: false
  723. };
  724. $.ligerui.resizable = {
  725. reszing: false
  726. };
  727. $.ligerui.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o)
  728. {
  729. var f = function (n)
  730. {
  731. return n < 10 ? '0' + n : n;
  732. },
  733. escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  734. quote = function (value)
  735. {
  736. escapable.lastIndex = 0;
  737. return escapable.test(value) ?
  738. '"' + value.replace(escapable, function (a)
  739. {
  740. var c = meta[a];
  741. return typeof c === 'string' ? c :
  742. '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
  743. }) + '"' :
  744. '"' + value + '"';
  745. };
  746. if (o === null) return 'null';
  747. var type = typeof o;
  748. if (type === 'undefined') return undefined;
  749. if (type === 'string') return quote(o);
  750. if (type === 'number' || type === 'boolean') return '' + o;
  751. if (type === 'object')
  752. {
  753. if (typeof o.toJSON === 'function')
  754. {
  755. return $.ligerui.toJSON(o.toJSON());
  756. }
  757. if (o.constructor === Date)
  758. {
  759. return isFinite(this.valueOf()) ?
  760. this.getUTCFullYear() + '-' +
  761. f(this.getUTCMonth() + 1) + '-' +
  762. f(this.getUTCDate()) + 'T' +
  763. f(this.getUTCHours()) + ':' +
  764. f(this.getUTCMinutes()) + ':' +
  765. f(this.getUTCSeconds()) + 'Z' : null;
  766. }
  767. var pairs = [];
  768. if (o.constructor === Array)
  769. {
  770. for (var i = 0, l = o.length; i < l; i++)
  771. {
  772. pairs.push($.ligerui.toJSON(o[i]) || 'null');
  773. }
  774. return '[' + pairs.join(',') + ']';
  775. }
  776. var name, val;
  777. for (var k in o)
  778. {
  779. type = typeof k;
  780. if (type === 'number')
  781. {
  782. name = '"' + k + '"';
  783. } else if (type === 'string')
  784. {
  785. name = quote(k);
  786. } else
  787. {
  788. continue;
  789. }
  790. type = typeof o[k];
  791. if (type === 'function' || type === 'undefined')
  792. {
  793. continue;
  794. }
  795. val = $.ligerui.toJSON(o[k]);
  796. pairs.push(name + ':' + val);
  797. }
  798. return '{' + pairs.join(',') + '}';
  799. }
  800. };
  801. })(jQuery);/**
  802. * jQuery ligerUI 1.1.9
  803. *
  804. * http://ligerui.com
  805. *
  806. * Author daomi 2012 [ gd_star@163.com ]
  807. *
  808. */
  809. (function ($)
  810. {
  811. $.fn.ligerAccordion = function (options)
  812. {
  813. return $.ligerui.run.call(this, "ligerAccordion", arguments);
  814. };
  815. $.fn.ligerGetAccordionManager = function ()
  816. {
  817. return $.ligerui.get(this);
  818. };
  819. $.ligerDefaults.Accordion = {
  820. height: null,
  821. speed: "normal",
  822. changeHeightOnResize: false,
  823. heightDiff: 0 // 高度补差
  824. };
  825. $.ligerMethos.Accordion = {};
  826. $.ligerui.controls.Accordion = function (element, options)
  827. {
  828. $.ligerui.controls.Accordion.base.constructor.call(this, element, options);
  829. };
  830. $.ligerui.controls.Accordion.ligerExtend($.ligerui.core.UIComponent, {
  831. __getType: function ()
  832. {
  833. return 'Accordion';
  834. },
  835. __idPrev: function ()
  836. {
  837. return 'Accordion';
  838. },
  839. _extendMethods: function ()
  840. {
  841. return $.ligerMethos.Accordion;
  842. },
  843. _render: function ()
  844. {
  845. var g = this, p = this.options;
  846. g.accordion = $(g.element);
  847. if (!g.accordion.hasClass("l-accordion-panel")) g.accordion.addClass("l-accordion-panel");
  848. var selectedIndex = 0;
  849. if ($("> div[lselected=true]", g.accordion).length > 0)
  850. selectedIndex = $("> div", g.accordion).index($("> div[lselected=true]", g.accordion));
  851. $("> div", g.accordion).each(function (i, box)
  852. {
  853. var header = $('<div class="l-accordion-header"><div class="l-accordion-toggle"></div><div class="l-accordion-header-inner"></div></div>');
  854. if (i == selectedIndex)
  855. $(".l-accordion-toggle", header).addClass("l-accordion-toggle-open");
  856. if ($(box).attr("title"))
  857. {
  858. $(".l-accordion-header-inner", header).html($(box).attr("title"));
  859. $(box).attr("title", "");
  860. }
  861. $(box).before(header);
  862. if (!$(box).hasClass("l-accordion-content")) $(box).addClass("l-accordion-content");
  863. });
  864. //add Even
  865. $(".l-accordion-toggle", g.accordion).each(function ()
  866. {
  867. if (!$(this).hasClass("l-accordion-toggle-open") && !$(this).hasClass("l-accordion-toggle-close"))
  868. {
  869. $(this).addClass("l-accordion-toggle-close");
  870. }
  871. if ($(this).hasClass("l-accordion-toggle-close"))
  872. {
  873. $(this).parent().next(".l-accordion-content:visible").hide();
  874. }
  875. });
  876. $(".l-accordion-header", g.accordion).hover(function ()
  877. {
  878. $(this).addClass("l-accordion-header-over");
  879. }, function ()
  880. {
  881. $(this).removeClass("l-accordion-header-over");
  882. });
  883. $(".l-accordion-toggle", g.accordion).hover(function ()
  884. {
  885. if ($(this).hasClass("l-accordion-toggle-open"))
  886. $(this).addClass("l-accordion-toggle-open-over");
  887. else if ($(this).hasClass("l-accordion-toggle-close"))
  888. $(this).addClass("l-accordion-toggle-close-over");
  889. }, function ()
  890. {
  891. if ($(this).hasClass("l-accordion-toggle-open"))
  892. $(this).removeClass("l-accordion-toggle-open-over");
  893. else if ($(this).hasClass("l-accordion-toggle-close"))
  894. $(this).removeClass("l-accordion-toggle-close-over");
  895. });
  896. $(">.l-accordion-header", g.accordion).click(function ()
  897. {
  898. var togglebtn = $(".l-accordion-toggle:first", this);
  899. if (togglebtn.hasClass("l-accordion-toggle-close"))
  900. {
  901. togglebtn.removeClass("l-accordion-toggle-close")
  902. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  903. togglebtn.addClass("l-accordion-toggle-open");
  904. $(this).next(".l-accordion-content")
  905. .show(p.speed)
  906. .siblings(".l-accordion-content:visible").hide(p.speed);
  907. $(this).siblings(".l-accordion-header").find(".l-accordion-toggle").removeClass("l-accordion-toggle-open").addClass("l-accordion-toggle-close");
  908. }
  909. else
  910. {
  911. togglebtn.removeClass("l-accordion-toggle-open")
  912. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  913. .addClass("l-accordion-toggle-close");
  914. $(this).next(".l-accordion-content").hide(p.speed);
  915. }
  916. });
  917. //init
  918. g.headerHoldHeight = 0;
  919. $("> .l-accordion-header", g.accordion).each(function ()
  920. {
  921. g.headerHoldHeight += $(this).height();
  922. });
  923. if (p.height && typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  924. {
  925. g.onResize();
  926. if (p.changeHeightOnResize)
  927. {
  928. $(window).resize(function ()
  929. {
  930. g.onResize();
  931. });
  932. }
  933. }
  934. else
  935. {
  936. if (p.height)
  937. {
  938. g.height = p.heightDiff + p.height;
  939. g.accordion.height(g.height);
  940. g.setHeight(p.height);
  941. }
  942. else
  943. {
  944. g.header = g.accordion.height();
  945. }
  946. }
  947. g.set(p);
  948. },
  949. onResize: function ()
  950. {
  951. var g = this, p = this.options;
  952. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  953. //set accordion height
  954. if (g.accordion.parent()[0].tagName.toLowerCase() == "body")
  955. {
  956. var windowHeight = $(window).height();
  957. windowHeight -= parseInt(g.layout.parent().css('paddingTop'));
  958. windowHeight -= parseInt(g.layout.parent().css('paddingBottom'));
  959. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  960. }
  961. else
  962. {
  963. g.height = p.heightDiff + (g.accordion.parent().height() * parseFloat(p.height) * 0.01);
  964. }
  965. g.accordion.height(g.height);
  966. g.setContentHeight(g.height - g.headerHoldHeight);
  967. },
  968. setHeight: function (height)
  969. {
  970. var g = this, p = this.options;
  971. g.accordion.height(height);
  972. height -= g.headerHoldHeight;
  973. $("> .l-accordion-content", g.accordion).height(height);
  974. }
  975. });
  976. })(jQuery);/**
  977. * jQuery ligerUI 1.1.9
  978. *
  979. * http://ligerui.com
  980. *
  981. * Author daomi 2012 [ gd_star@163.com ]
  982. *
  983. */
  984. (function ($)
  985. {
  986. $.fn.ligerButton = function (options)
  987. {
  988. return $.ligerui.run.call(this, "ligerButton", arguments);
  989. };
  990. $.fn.ligerGetButtonManager = function ()
  991. {
  992. return $.ligerui.run.call(this, "ligerGetButtonManager", arguments);
  993. };
  994. $.ligerDefaults.Button = { width: 100, text: 'Button', disabled: false };
  995. $.ligerMethos.Button = {};
  996. $.ligerui.controls.Button = function (element, options)
  997. {
  998. $.ligerui.controls.Button.base.constructor.call(this, element, options);
  999. };
  1000. $.ligerui.controls.Button.ligerExtend($.ligerui.controls.Input, {
  1001. __getType: function ()
  1002. {
  1003. return 'Button';
  1004. },
  1005. __idPrev: function ()
  1006. {
  1007. return 'Button';
  1008. },
  1009. _extendMethods: function ()
  1010. {
  1011. return $.ligerMethos.Button;
  1012. },
  1013. _render: function ()
  1014. {
  1015. var g = this, p = this.options;
  1016. g.button = $(g.element);
  1017. g.button.addClass("l-btn");
  1018. g.button.append('<div class="l-btn-l"></div><div class="l-btn-r"></div><span></span>');
  1019. p.click && g.button.click(function ()
  1020. {
  1021. if (!p.disabled)
  1022. p.click();
  1023. });
  1024. g.set(p);
  1025. },
  1026. _setEnabled: function (value)
  1027. {
  1028. if (value)
  1029. this.button.removeClass("l-btn-disabled");
  1030. },
  1031. _setDisabled: function (value)
  1032. {
  1033. if (value)
  1034. {
  1035. this.button.addClass("l-btn-disabled");
  1036. this.options.disabled = true;
  1037. }
  1038. },
  1039. _setWidth: function (value)
  1040. {
  1041. this.button.width(value);
  1042. },
  1043. _setText: function (value)
  1044. {
  1045. $("span", this.button).html(value);
  1046. },
  1047. setValue: function (value)
  1048. {
  1049. this.set('text', value);
  1050. },
  1051. getValue: function ()
  1052. {
  1053. return this.options.text;
  1054. },
  1055. setEnabled: function ()
  1056. {
  1057. this.set('disabled', false);
  1058. },
  1059. setDisabled: function ()
  1060. {
  1061. this.set('disabled', true);
  1062. }
  1063. });
  1064. })(jQuery);/**
  1065. * jQuery ligerUI 1.1.9
  1066. *
  1067. * http://ligerui.com
  1068. *
  1069. * Author daomi 2012 [ gd_star@163.com ]
  1070. *
  1071. */
  1072. (function ($)
  1073. {
  1074. $.fn.ligerCheckBox = function (options)
  1075. {
  1076. return $.ligerui.run.call(this, "ligerCheckBox", arguments);
  1077. };
  1078. $.fn.ligerGetCheckBoxManager = function ()
  1079. {
  1080. return $.ligerui.run.call(this, "ligerGetCheckBoxManager", arguments);
  1081. };
  1082. $.ligerDefaults.CheckBox = { disabled: false };
  1083. $.ligerMethos.CheckBox = {};
  1084. $.ligerui.controls.CheckBox = function (element, options)
  1085. {
  1086. $.ligerui.controls.CheckBox.base.constructor.call(this, element, options);
  1087. };
  1088. $.ligerui.controls.CheckBox.ligerExtend($.ligerui.controls.Input, {
  1089. __getType: function ()
  1090. {
  1091. return 'CheckBox';
  1092. },
  1093. __idPrev: function ()
  1094. {
  1095. return 'CheckBox';
  1096. },
  1097. _extendMethods: function ()
  1098. {
  1099. return $.ligerMethos.CheckBox;
  1100. },
  1101. _render: function ()
  1102. {
  1103. var g = this, p = this.options;
  1104. g.input = $(g.element);
  1105. g.link = $('<a class="l-checkbox"></a>');
  1106. g.wrapper = g.input.addClass('l-hidden').wrap('<div class="l-checkbox-wrapper"></div>').parent();
  1107. g.wrapper.prepend(g.link);
  1108. g.link.click(function ()
  1109. {
  1110. if (g.input.attr('disabled')) { return false; }
  1111. if (p.disabled) return false;
  1112. if (g.trigger('beforeClick', [g.element]) == false) return false;
  1113. if ($(this).hasClass("l-checkbox-checked"))
  1114. {
  1115. g._setValue(false);
  1116. }
  1117. else
  1118. {
  1119. g._setValue(true);
  1120. }
  1121. g.input.trigger("change");
  1122. });
  1123. g.wrapper.hover(function ()
  1124. {
  1125. if (!p.disabled)
  1126. $(this).addClass("l-over");
  1127. }, function ()
  1128. {
  1129. $(this).removeClass("l-over");
  1130. });
  1131. this.set(p);
  1132. this.updateStyle();
  1133. },
  1134. _setCss: function (value)
  1135. {
  1136. this.wrapper.css(value);
  1137. },
  1138. _setValue: function (value)
  1139. {
  1140. var g = this, p = this.options;
  1141. if (!value)
  1142. {
  1143. g.input[0].checked = false;
  1144. g.link.removeClass('l-checkbox-checked');
  1145. }
  1146. else
  1147. {
  1148. g.input[0].checked = true;
  1149. g.link.addClass('l-checkbox-checked');
  1150. }
  1151. },
  1152. _setDisabled: function (value)
  1153. {
  1154. if (value)
  1155. {
  1156. this.input.attr('disabled', true);
  1157. this.wrapper.addClass("l-disabled");
  1158. }
  1159. else
  1160. {
  1161. this.input.attr('disabled', false);
  1162. this.wrapper.removeClass("l-disabled");
  1163. }
  1164. },
  1165. _getValue: function ()
  1166. {
  1167. return this.element.checked;
  1168. },
  1169. updateStyle: function ()
  1170. {
  1171. if (this.input.attr('disabled'))
  1172. {
  1173. this.wrapper.addClass("l-disabled");
  1174. this.options.disabled = true;
  1175. }
  1176. if (this.input[0].checked)
  1177. {
  1178. this.link.addClass('l-checkbox-checked');
  1179. }
  1180. else
  1181. {
  1182. this.link.removeClass('l-checkbox-checked');
  1183. }
  1184. }
  1185. });
  1186. })(jQuery);/**
  1187. * jQuery ligerUI 1.1.9
  1188. *
  1189. * http://ligerui.com
  1190. *
  1191. * Author daomi 2012 [ gd_star@163.com ]
  1192. *
  1193. */
  1194. (function ($)
  1195. {
  1196. $.fn.ligerComboBox = function (options)
  1197. {
  1198. return $.ligerui.run.call(this, "ligerComboBox", arguments);
  1199. };
  1200. $.fn.ligerGetComboBoxManager = function ()
  1201. {
  1202. return $.ligerui.run.call(this, "ligerGetComboBoxManager", arguments);
  1203. };
  1204. $.ligerDefaults.ComboBox = {
  1205. resize: true, //是否调整大小
  1206. isMultiSelect: false, //是否多选
  1207. isShowCheckBox: false, //是否选择复选框
  1208. columns: false, //表格状态
  1209. selectBoxWidth: false, //宽度
  1210. selectBoxHeight: false, //高度
  1211. onBeforeSelect: false, //选择前事件
  1212. onSelected: null, //选择值事件
  1213. initValue: null,
  1214. initText: null,
  1215. valueField: 'id',
  1216. textField: 'text',
  1217. valueFieldID: null,
  1218. slide: true, //是否以动画的形式显示
  1219. split: ";",
  1220. data: null,
  1221. tree: null, //下拉框以树的形式显示,tree的参数跟LigerTree的参数一致
  1222. treeLeafOnly: true, //是否只选择叶子
  1223. grid: null, //表格
  1224. onStartResize: null,
  1225. onEndResize: null,
  1226. hideOnLoseFocus: true,
  1227. url: null, //数据源URL(需返回JSON)
  1228. onSuccess: null,
  1229. onError: null,
  1230. onBeforeOpen: null, //打开下拉框前事件,可以通过return false来阻止继续操作,利用这个参数可以用来调用其他函数,比如打开一个新窗口来选择值
  1231. render: null, //文本框显示html函数
  1232. absolute: true //选择框是否在附加到body,并绝对定位
  1233. };
  1234. //扩展方法
  1235. $.ligerMethos.ComboBox = $.ligerMethos.ComboBox || {};
  1236. $.ligerui.controls.ComboBox = function (element, options)
  1237. {
  1238. $.ligerui.controls.ComboBox.base.constructor.call(this, element, options);
  1239. };
  1240. $.ligerui.controls.ComboBox.ligerExtend($.ligerui.controls.Input, {
  1241. __getType: function ()
  1242. {
  1243. return 'ComboBox';
  1244. },
  1245. _extendMethods: function ()
  1246. {
  1247. return $.ligerMethos.ComboBox;
  1248. },
  1249. _init: function ()
  1250. {
  1251. $.ligerui.controls.ComboBox.base._init.call(this);
  1252. var p = this.options;
  1253. if (p.columns)
  1254. {
  1255. p.isShowCheckBox = true;
  1256. }
  1257. if (p.isMultiSelect)
  1258. {
  1259. p.isShowCheckBox = true;
  1260. }
  1261. },
  1262. _render: function ()
  1263. {
  1264. var g = this, p = this.options;
  1265. g.data = p.data;
  1266. g.inputText = null;
  1267. g.select = null;
  1268. g.textFieldID = "";
  1269. g.valueFieldID = "";
  1270. g.valueField = null; //隐藏域(保存值)
  1271. //文本框初始化
  1272. if (this.element.tagName.toLowerCase() == "input")
  1273. {
  1274. this.element.readOnly = true;
  1275. g.inputText = $(this.element);
  1276. g.textFieldID = this.element.id;
  1277. }
  1278. else if (this.element.tagName.toLowerCase() == "select")
  1279. {
  1280. $(this.element).hide();
  1281. g.select = $(this.element);
  1282. p.isMultiSelect = false;
  1283. p.isShowCheckBox = false;
  1284. g.textFieldID = this.element.id + "_txt";
  1285. g.inputText = $('<input type="text" readonly="true"/>');
  1286. g.inputText.attr("id", g.textFieldID).insertAfter($(this.element));
  1287. } else
  1288. {
  1289. //不支持其他类型
  1290. return;
  1291. }
  1292. if (g.inputText[0].name == undefined) g.inputText[0].name = g.textFieldID;
  1293. //隐藏域初始化
  1294. g.valueField = null;
  1295. if (p.valueFieldID)
  1296. {
  1297. g.valueField = $("#" + p.valueFieldID + ":input");
  1298. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  1299. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  1300. }
  1301. else
  1302. {
  1303. g.valueField = $('<input type="hidden"/>');
  1304. g.valueField[0].id = g.valueField[0].name = g.textFieldID + "_val";
  1305. }
  1306. if (g.valueField[0].name == undefined) g.valueField[0].name = g.valueField[0].id;
  1307. //开关
  1308. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  1309. //下拉框
  1310. g.selectBox = $('<div class="l-box-select"><div class="l-box-select-inner"><table cellpadding="0" cellspacing="0" border="0" class="l-box-select-table"></table></div></div>');
  1311. g.selectBox.table = $("table:first", g.selectBox);
  1312. //外层
  1313. g.wrapper = g.inputText.wrap('<div class="l-text l-text-combobox"></div>').parent();
  1314. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  1315. g.wrapper.append(g.link);
  1316. //添加个包裹,
  1317. g.textwrapper = g.wrapper.wrap('<div class="l-text-wrapper"></div>').parent();
  1318. if (p.absolute)
  1319. g.selectBox.appendTo('body').addClass("l-box-select-absolute");
  1320. else
  1321. g.textwrapper.append(g.selectBox);
  1322. g.textwrapper.append(g.valueField);
  1323. g.inputText.addClass("l-text-field");
  1324. if (p.isShowCheckBox && !g.select)
  1325. {
  1326. $("table", g.selectBox).addClass("l-table-checkbox");
  1327. } else
  1328. {
  1329. p.isShowCheckBox = false;
  1330. $("table", g.selectBox).addClass("l-table-nocheckbox");
  1331. }
  1332. //开关 事件
  1333. g.link.hover(function ()
  1334. {
  1335. if (p.disabled) return;
  1336. this.className = "l-trigger-hover";
  1337. }, function ()
  1338. {
  1339. if (p.disabled) return;
  1340. this.className = "l-trigger";
  1341. }).mousedown(function ()
  1342. {
  1343. if (p.disabled) return;
  1344. this.className = "l-trigger-pressed";
  1345. }).mouseup(function ()
  1346. {
  1347. if (p.disabled) return;
  1348. this.className = "l-trigger-hover";
  1349. }).click(function ()
  1350. {
  1351. if (p.disabled) return;
  1352. if (g.trigger('beforeOpen') == false) return false;
  1353. g._toggleSelectBox(g.selectBox.is(":visible"));
  1354. });
  1355. g.inputText.click(function ()
  1356. {
  1357. if (p.disabled) return;
  1358. if (g.trigger('beforeOpen') == false) return false;
  1359. g._toggleSelectBox(g.selectBox.is(":visible"));
  1360. }).blur(function ()
  1361. {
  1362. if (p.disabled) return;
  1363. g.wrapper.removeClass("l-text-focus");
  1364. }).focus(function ()
  1365. {
  1366. if (p.disabled) return;
  1367. g.wrapper.addClass("l-text-focus");
  1368. });
  1369. g.wrapper.hover(function ()
  1370. {
  1371. if (p.disabled) return;
  1372. g.wrapper.addClass("l-text-over");
  1373. }, function ()
  1374. {
  1375. if (p.disabled) return;
  1376. g.wrapper.removeClass("l-text-over");
  1377. });
  1378. g.resizing = false;
  1379. g.selectBox.hover(null, function (e)
  1380. {
  1381. if (p.hideOnLoseFocus && g.selectBox.is(":visible") && !g.boxToggling && !g.resizing)
  1382. {
  1383. g._toggleSelectBox(true);
  1384. }
  1385. });
  1386. var itemsleng = $("tr", g.selectBox.table).length;
  1387. if (!p.selectBoxHeight && itemsleng < 8) p.selectBoxHeight = itemsleng * 30;
  1388. if (p.selectBoxHeight)
  1389. {
  1390. g.selectBox.height(p.selectBoxHeight);
  1391. }
  1392. //下拉框内容初始化
  1393. g.bulidContent();
  1394. g.set(p);
  1395. //下拉框宽度、高度初始化
  1396. if (p.selectBoxWidth)
  1397. {
  1398. g.selectBox.width(p.selectBoxWidth);
  1399. }
  1400. else
  1401. {
  1402. g.selectBox.css('width', g.wrapper.css('width'));
  1403. }
  1404. },
  1405. destroy: function ()
  1406. {
  1407. if (this.wrapper) this.wrapper.remove();
  1408. if (this.selectBox) this.selectBox.remove();
  1409. this.options = null;
  1410. $.ligerui.remove(this);
  1411. },
  1412. _setDisabled: function (value)
  1413. {
  1414. //禁用样式
  1415. if (value)
  1416. {
  1417. this.wrapper.addClass('l-text-disabled');
  1418. } else
  1419. {
  1420. this.wrapper.removeClass('l-text-disabled');
  1421. }
  1422. },
  1423. _setLable: function (label)
  1424. {
  1425. var g = this, p = this.options;
  1426. if (label)
  1427. {
  1428. if (g.labelwrapper)
  1429. {
  1430. g.labelwrapper.find(".l-text-label:first").html(label + ':&nbsp');
  1431. }
  1432. else
  1433. {
  1434. g.labelwrapper = g.textwrapper.wrap('<div class="l-labeltext"></div>').parent();
  1435. g.labelwrapper.prepend('<div class="l-text-label" style="float:left;display:inline;">' + label + ':&nbsp</div>');
  1436. g.textwrapper.css('float', 'left');
  1437. }
  1438. if (!p.labelWidth)
  1439. {
  1440. p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth();
  1441. }
  1442. else
  1443. {
  1444. $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth);
  1445. }
  1446. $('.l-text-label', g.labelwrapper).width(p.labelWidth);
  1447. $('.l-text-label', g.labelwrapper).height(g.wrapper.height());
  1448. g.labelwrapper.append('<br style="clear:both;" />');
  1449. if (p.labelAlign)
  1450. {
  1451. $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign);
  1452. }
  1453. g.textwrapper.css({ display: 'inline' });
  1454. g.labelwrapper.width(g.wrapper.outerWidth() + p.labelWidth + 2);
  1455. }
  1456. },
  1457. _setWidth: function (value)
  1458. {
  1459. var g = this;
  1460. if (value > 20)
  1461. {
  1462. g.wrapper.css({ width: value });
  1463. g.inputText.css({ width: value });
  1464. g.textwrapper.css({ width: value });
  1465. }
  1466. },
  1467. _setHeight: function (value)
  1468. {
  1469. var g = this;
  1470. if (value > 10)
  1471. {
  1472. g.wrapper.height(value);
  1473. g.inputText.height(value - 2);
  1474. g.link.height(value - 4);
  1475. g.textwrapper.css({ width: value });
  1476. }
  1477. },
  1478. _setResize: function (resize)
  1479. {
  1480. //调整大小支持
  1481. if (resize && $.fn.ligerResizable)
  1482. {
  1483. var g = this;
  1484. g.selectBox.ligerResizable({ handles: 'se,s,e', onStartResize: function ()
  1485. {
  1486. g.resizing = true;
  1487. g.trigger('startResize');
  1488. }
  1489. , onEndResize: function ()
  1490. {
  1491. g.resizing = false;
  1492. if (g.trigger('endResize') == false)
  1493. return false;
  1494. }
  1495. });
  1496. g.selectBox.append("<div class='l-btn-nw-drop'></div>");
  1497. }
  1498. },
  1499. //查找Text,适用多选和单选
  1500. findTextByValue: function (value)
  1501. {
  1502. var g = this, p = this.options;
  1503. if (value == undefined) return "";
  1504. var texts = "";
  1505. var contain = function (checkvalue)
  1506. {
  1507. var targetdata = value.toString().split(p.split);
  1508. for (var i = 0; i < targetdata.length; i++)
  1509. {
  1510. if (targetdata[i] == checkvalue) return true;
  1511. }
  1512. return false;
  1513. };
  1514. $(g.data).each(function (i, item)
  1515. {
  1516. var val = item[p.valueField];
  1517. var txt = item[p.textField];
  1518. if (contain(val))
  1519. {
  1520. texts += txt + p.split;
  1521. }
  1522. });
  1523. if (texts.length > 0) texts = texts.substr(0, texts.length - 1);
  1524. return texts;
  1525. },
  1526. //查找Value,适用多选和单选
  1527. findValueByText: function (text)
  1528. {
  1529. var g = this, p = this.options;
  1530. if (!text && text == "") return "";
  1531. var contain = function (checkvalue)
  1532. {
  1533. var targetdata = text.toString().split(p.split);
  1534. for (var i = 0; i < targetdata.length; i++)
  1535. {
  1536. if (targetdata[i] == checkvalue) return true;
  1537. }
  1538. return false;
  1539. };
  1540. var values = "";
  1541. $(g.data).each(function (i, item)
  1542. {
  1543. var val = item[p.valueField];
  1544. var txt = item[p.textField];
  1545. if (contain(txt))
  1546. {
  1547. values += val + p.split;
  1548. }
  1549. });
  1550. if (values.length > 0) values = values.substr(0, values.length - 1);
  1551. return values;
  1552. },
  1553. removeItem: function ()
  1554. {
  1555. },
  1556. insertItem: function ()
  1557. {
  1558. },
  1559. addItem: function ()
  1560. {
  1561. },
  1562. _setValue: function (value)
  1563. {
  1564. var g = this, p = this.options;
  1565. var text = g.findTextByValue(value);
  1566. if (p.tree)
  1567. {
  1568. g.selectValueByTree(value);
  1569. }
  1570. else if (!p.isMultiSelect)
  1571. {
  1572. g._changeValue(value, text);
  1573. $("tr[value=" + value + "] td", g.selectBox).addClass("l-selected");
  1574. $("tr[value!=" + value + "] td", g.selectBox).removeClass("l-selected");
  1575. }
  1576. else
  1577. {
  1578. g._changeValue(value, text);
  1579. var targetdata = value.toString().split(p.split);
  1580. $("table.l-table-checkbox :checkbox", g.selectBox).each(function () { this.checked = false; });
  1581. for (var i = 0; i < targetdata.length; i++)
  1582. {
  1583. $("table.l-table-checkbox tr[value=" + targetdata[i] + "] :checkbox", g.selectBox).each(function () { this.checked = true; });
  1584. }
  1585. }
  1586. },
  1587. selectValue: function (value)
  1588. {
  1589. this._setValue(value);
  1590. },
  1591. bulidContent: function ()
  1592. {
  1593. var g = this, p = this.options;
  1594. this.clearContent();
  1595. if (g.select)
  1596. {
  1597. g.setSelect();
  1598. }
  1599. else if (g.data)
  1600. {
  1601. g.setData(g.data);
  1602. }
  1603. else if (p.tree)
  1604. {
  1605. g.setTree(p.tree);
  1606. }
  1607. else if (p.grid)
  1608. {
  1609. g.setGrid(p.grid);
  1610. }
  1611. else if (p.url)
  1612. {
  1613. $.ajax({
  1614. type: 'post',
  1615. url: p.url,
  1616. cache: false,
  1617. dataType: 'json',
  1618. success: function (data)
  1619. {
  1620. g.data = data;
  1621. g.setData(g.data);
  1622. g.trigger('success', [g.data]);
  1623. },
  1624. error: function (XMLHttpRequest, textStatus)
  1625. {
  1626. g.trigger('error', [XMLHttpRequest, textStatus]);
  1627. }
  1628. });
  1629. }
  1630. },
  1631. clearContent: function ()
  1632. {
  1633. var g = this, p = this.options;
  1634. $("table", g.selectBox).html("");
  1635. //g.inputText.val("");
  1636. //g.valueField.val("");
  1637. },
  1638. setSelect: function ()
  1639. {
  1640. var g = this, p = this.options;
  1641. this.clearContent();
  1642. $('option', g.select).each(function (i)
  1643. {
  1644. var val = $(this).val();
  1645. var txt = $(this).html();
  1646. var tr = $("<tr><td index='" + i + "' value='" + val + "'>" + txt + "</td>");
  1647. $("table.l-table-nocheckbox", g.selectBox).append(tr);
  1648. $("td", tr).hover(function ()
  1649. {
  1650. $(this).addClass("l-over");
  1651. }, function ()
  1652. {
  1653. $(this).removeClass("l-over");
  1654. });
  1655. });
  1656. $('td:eq(' + g.select[0].selectedIndex + ')', g.selectBox).each(function ()
  1657. {
  1658. if ($(this).hasClass("l-selected"))
  1659. {
  1660. g.selectBox.hide();
  1661. return;
  1662. }
  1663. $(".l-selected", g.selectBox).removeClass("l-selected");
  1664. $(this).addClass("l-selected");
  1665. if (g.select[0].selectedIndex != $(this).attr('index') && g.select[0].onchange)
  1666. {
  1667. g.select[0].selectedIndex = $(this).attr('index'); g.select[0].onchange();
  1668. }
  1669. var newIndex = parseInt($(this).attr('index'));
  1670. g.select[0].selectedIndex = newIndex;
  1671. g.select.trigger("change");
  1672. g.selectBox.hide();
  1673. var value = $(this).attr("value");
  1674. var text = $(this).html();
  1675. if (p.render)
  1676. {
  1677. g.inputText.val(p.render(value, text));
  1678. }
  1679. else
  1680. {
  1681. g.inputText.val(text);
  1682. }
  1683. });
  1684. g._addClickEven();
  1685. },
  1686. setData: function (data)
  1687. {
  1688. var g = this, p = this.options;
  1689. this.clearContent();
  1690. if (!data || !data.length) return;
  1691. if (g.data != data) g.data = data;
  1692. if (p.columns)
  1693. {
  1694. g.selectBox.table.headrow = $("<tr class='l-table-headerow'><td width='18px'></td></tr>");
  1695. g.selectBox.table.append(g.selectBox.table.headrow);
  1696. g.selectBox.table.addClass("l-box-select-grid");
  1697. for (var j = 0; j < p.columns.length; j++)
  1698. {
  1699. var headrow = $("<td columnindex='" + j + "' columnname='" + p.columns[j].name + "'>" + p.columns[j].header + "</td>");
  1700. if (p.columns[j].width)
  1701. {
  1702. headrow.width(p.columns[j].width);
  1703. }
  1704. g.selectBox.table.headrow.append(headrow);
  1705. }
  1706. }
  1707. for (var i = 0; i < data.length; i++)
  1708. {
  1709. var val = data[i][p.valueField];
  1710. var txt = data[i][p.textField];
  1711. if (!p.columns)
  1712. {
  1713. $("table.l-table-checkbox", g.selectBox).append("<tr value='" + val + "'><td style='width:18px;' index='" + i + "' value='" + val + "' text='" + txt + "' ><input type='checkbox' /></td><td index='" + i + "' value='" + val + "' align='left'>" + txt + "</td>");
  1714. $("table.l-table-nocheckbox", g.selectBox).append("<tr value='" + val + "'><td index='" + i + "' value='" + val + "' align='left'>" + txt + "</td>");
  1715. } else
  1716. {
  1717. var tr = $("<tr value='" + val + "'><td style='width:18px;' index='" + i + "' value='" + val + "' text='" + txt + "' ><input type='checkbox' /></td></tr>");
  1718. $("td", g.selectBox.table.headrow).each(function ()
  1719. {
  1720. var columnname = $(this).attr("columnname");
  1721. if (columnname)
  1722. {
  1723. var td = $("<td>" + data[i][columnname] + "</td>");
  1724. tr.append(td);
  1725. }
  1726. });
  1727. g.selectBox.table.append(tr);
  1728. }
  1729. }
  1730. //自定义复选框支持
  1731. if (p.isShowCheckBox && $.fn.ligerCheckBox)
  1732. {
  1733. $("table input:checkbox", g.selectBox).ligerCheckBox();
  1734. }
  1735. $(".l-table-checkbox input:checkbox", g.selectBox).change(function ()
  1736. {
  1737. if (this.checked && g.hasBind('beforeSelect'))
  1738. {
  1739. var parentTD = null;
  1740. if ($(this).parent().get(0).tagName.toLowerCase() == "div")
  1741. {
  1742. parentTD = $(this).parent().parent();
  1743. } else
  1744. {
  1745. parentTD = $(this).parent();
  1746. }
  1747. if (parentTD != null && g.trigger('beforeSelect', [parentTD.attr("value"), parentTD.attr("text")]) == false)
  1748. {
  1749. g.selectBox.slideToggle("fast");
  1750. return false;
  1751. }
  1752. }
  1753. if (!p.isMultiSelect)
  1754. {
  1755. if (this.checked)
  1756. {
  1757. $("input:checked", g.selectBox).not(this).each(function ()
  1758. {
  1759. this.checked = false;
  1760. $(".l-checkbox-checked", $(this).parent()).removeClass("l-checkbox-checked");
  1761. });
  1762. g.selectBox.slideToggle("fast");
  1763. }
  1764. }
  1765. g._checkboxUpdateValue();
  1766. });
  1767. $("table.l-table-nocheckbox td", g.selectBox).hover(function ()
  1768. {
  1769. $(this).addClass("l-over");
  1770. }, function ()
  1771. {
  1772. $(this).removeClass("l-over");
  1773. });
  1774. g._addClickEven();
  1775. //选择项初始化
  1776. g._dataInit();
  1777. },
  1778. //树
  1779. setTree: function (tree)
  1780. {
  1781. var g = this, p = this.options;
  1782. this.clearContent();
  1783. g.selectBox.table.remove();
  1784. if (tree.checkbox != false)
  1785. {
  1786. tree.onCheck = function ()
  1787. {
  1788. var nodes = g.treeManager.getChecked();
  1789. var value = [];
  1790. var text = [];
  1791. $(nodes).each(function (i, node)
  1792. {
  1793. if (p.treeLeafOnly && node.data.children) return;
  1794. value.push(node.data[p.valueField]);
  1795. text.push(node.data[p.textField]);
  1796. });
  1797. g._changeValue(value.join(p.split), text.join(p.split));
  1798. };
  1799. }
  1800. else
  1801. {
  1802. tree.onSelect = function (node)
  1803. {
  1804. if (p.treeLeafOnly && node.data.children) return;
  1805. var value = node.data[p.valueField];
  1806. var text = node.data[p.textField];
  1807. g._changeValue(value, text);
  1808. };
  1809. tree.onCancelSelect = function (node)
  1810. {
  1811. g._changeValue("", "");
  1812. };
  1813. }
  1814. tree.onAfterAppend = function (domnode, nodedata)
  1815. {
  1816. if (!g.treeManager) return;
  1817. var value = null;
  1818. if (p.initValue) value = p.initValue;
  1819. else if (g.valueField.val() != "") value = g.valueField.val();
  1820. g.selectValueByTree(value);
  1821. };
  1822. g.tree = $("<ul></ul>");
  1823. $("div:first", g.selectBox).append(g.tree);
  1824. g.tree.ligerTree(tree);
  1825. g.treeManager = g.tree.ligerGetTreeManager();
  1826. },
  1827. selectValueByTree: function (value)
  1828. {
  1829. var g = this, p = this.options;
  1830. if (value != null)
  1831. {
  1832. var text = "";
  1833. var valuelist = value.toString().split(p.split);
  1834. $(valuelist).each(function (i, item)
  1835. {
  1836. g.treeManager.selectNode(item.toString());
  1837. text += g.treeManager.getTextByID(item);
  1838. if (i < valuelist.length - 1) text += p.split;
  1839. });
  1840. g._changeValue(value, text);
  1841. }
  1842. },
  1843. //表格
  1844. setGrid: function (grid)
  1845. {
  1846. var g = this, p = this.options;
  1847. this.clearContent();
  1848. g.selectBox.table.remove();
  1849. g.grid = $("div:first", g.selectBox);
  1850. grid.columnWidth = grid.columnWidth || 120;
  1851. grid.width = "100%";
  1852. grid.height = "100%";
  1853. grid.heightDiff = -2;
  1854. grid.InWindow = false;
  1855. g.gridManager = g.grid.ligerGrid(grid);
  1856. p.hideOnLoseFocus = false;
  1857. if (grid.checkbox != false)
  1858. {
  1859. var onCheckRow = function ()
  1860. {
  1861. var rowsdata = g.gridManager.getCheckedRows();
  1862. var value = [];
  1863. var text = [];
  1864. $(rowsdata).each(function (i, rowdata)
  1865. {
  1866. value.push(rowdata[p.valueField]);
  1867. text.push(rowdata[p.textField]);
  1868. });
  1869. g._changeValue(value.join(p.split), text.join(p.split));
  1870. };
  1871. g.gridManager.bind('CheckAllRow', onCheckRow);
  1872. g.gridManager.bind('CheckRow', onCheckRow);
  1873. }
  1874. else
  1875. {
  1876. g.gridManager.bind('SelectRow', function (rowdata, rowobj, index)
  1877. {
  1878. var value = rowdata[p.valueField];
  1879. var text = rowdata[p.textField];
  1880. g._changeValue(value, text);
  1881. });
  1882. g.gridManager.bind('UnSelectRow', function (rowdata, rowobj, index)
  1883. {
  1884. g._changeValue("", "");
  1885. });
  1886. }
  1887. g.bind('show', function ()
  1888. {
  1889. if (g.gridManager)
  1890. {
  1891. g.gridManager._updateFrozenWidth();
  1892. }
  1893. });
  1894. g.bind('endResize', function ()
  1895. {
  1896. if (g.gridManager)
  1897. {
  1898. g.gridManager._updateFrozenWidth();
  1899. g.gridManager.setHeight(g.selectBox.height() - 2);
  1900. }
  1901. });
  1902. },
  1903. _getValue: function ()
  1904. {
  1905. return $(this.valueField).val();
  1906. },
  1907. getValue: function ()
  1908. {
  1909. //获取值
  1910. return this._getValue();
  1911. },
  1912. updateStyle: function ()
  1913. {
  1914. var g = this, p = this.options;
  1915. g._dataInit();
  1916. },
  1917. _dataInit: function ()
  1918. {
  1919. var g = this, p = this.options;
  1920. var value = null;
  1921. if (p.initValue != null && p.initText != null)
  1922. {
  1923. g._changeValue(p.initValue, p.initText);
  1924. }
  1925. //根据值来初始化
  1926. if (p.initValue != null)
  1927. {
  1928. value = p.initValue;
  1929. if (p.tree)
  1930. {
  1931. if(value)
  1932. g.selectValueByTree(value);
  1933. }
  1934. else
  1935. {
  1936. var text = g.findTextByValue(value);
  1937. g._changeValue(value, text);
  1938. }
  1939. }
  1940. //根据文本来初始化
  1941. else if (p.initText != null)
  1942. {
  1943. value = g.findValueByText(p.initText);
  1944. g._changeValue(value, p.initText);
  1945. }
  1946. else if (g.valueField.val() != "")
  1947. {
  1948. value = g.valueField.val();
  1949. if (p.tree)
  1950. {
  1951. if(value)
  1952. g.selectValueByTree(value);
  1953. }
  1954. else
  1955. {
  1956. var text = g.findTextByValue(value);
  1957. g._changeValue(value, text);
  1958. }
  1959. }
  1960. if (!p.isShowCheckBox && value != null)
  1961. {
  1962. $("table tr", g.selectBox).find("td:first").each(function ()
  1963. {
  1964. if (value == $(this).attr("value"))
  1965. {
  1966. $(this).addClass("l-selected");
  1967. }
  1968. });
  1969. }
  1970. if (p.isShowCheckBox && value != null)
  1971. {
  1972. $(":checkbox", g.selectBox).each(function ()
  1973. {
  1974. var parentTD = null;
  1975. var checkbox = $(this);
  1976. if (checkbox.parent().get(0).tagName.toLowerCase() == "div")
  1977. {
  1978. parentTD = checkbox.parent().parent();
  1979. } else
  1980. {
  1981. parentTD = checkbox.parent();
  1982. }
  1983. if (parentTD == null) return;
  1984. var valuearr = value.toString().split(p.split);
  1985. $(valuearr).each(function (i, item)
  1986. {
  1987. if (item == parentTD.attr("value"))
  1988. {
  1989. $(".l-checkbox", parentTD).addClass("l-checkbox-checked");
  1990. checkbox[0].checked = true;
  1991. }
  1992. });
  1993. });
  1994. }
  1995. },
  1996. //设置值到 文本框和隐藏域
  1997. _changeValue: function (newValue, newText)
  1998. {
  1999. var g = this, p = this.options;
  2000. g.valueField.val(newValue);
  2001. if (p.render)
  2002. {
  2003. g.inputText.val(p.render(newValue, newText));
  2004. }
  2005. else
  2006. {
  2007. g.inputText.val(newText);
  2008. }
  2009. g.selectedValue = newValue;
  2010. g.selectedText = newText;
  2011. g.inputText.trigger("change").focus();
  2012. g.trigger('selected', [newValue, newText]);
  2013. },
  2014. //更新选中的值(复选框)
  2015. _checkboxUpdateValue: function ()
  2016. {
  2017. var g = this, p = this.options;
  2018. var valueStr = "";
  2019. var textStr = "";
  2020. $("input:checked", g.selectBox).each(function ()
  2021. {
  2022. var parentTD = null;
  2023. if ($(this).parent().get(0).tagName.toLowerCase() == "div")
  2024. {
  2025. parentTD = $(this).parent().parent();
  2026. } else
  2027. {
  2028. parentTD = $(this).parent();
  2029. }
  2030. if (!parentTD) return;
  2031. valueStr += parentTD.attr("value") + p.split;
  2032. textStr += parentTD.attr("text") + p.split;
  2033. });
  2034. if (valueStr.length > 0) valueStr = valueStr.substr(0, valueStr.length - 1);
  2035. if (textStr.length > 0) textStr = textStr.substr(0, textStr.length - 1);
  2036. g._changeValue(valueStr, textStr);
  2037. },
  2038. _addClickEven: function ()
  2039. {
  2040. var g = this, p = this.options;
  2041. //选项点击
  2042. $(".l-table-nocheckbox td", g.selectBox).click(function ()
  2043. {
  2044. var value = $(this).attr("value");
  2045. var index = parseInt($(this).attr('index'));
  2046. var text = $(this).html();
  2047. if (g.hasBind('beforeSelect') && g.trigger('beforeSelect', [value, text]) == false)
  2048. {
  2049. if (p.slide) g.selectBox.slideToggle("fast");
  2050. else g.selectBox.hide();
  2051. return false;
  2052. }
  2053. if ($(this).hasClass("l-selected"))
  2054. {
  2055. if (p.slide) g.selectBox.slideToggle("fast");
  2056. else g.selectBox.hide();
  2057. return;
  2058. }
  2059. $(".l-selected", g.selectBox).removeClass("l-selected");
  2060. $(this).addClass("l-selected");
  2061. if (g.select)
  2062. {
  2063. if (g.select[0].selectedIndex != index)
  2064. {
  2065. g.select[0].selectedIndex = index;
  2066. g.select.trigger("change");
  2067. }
  2068. }
  2069. if (p.slide)
  2070. {
  2071. g.boxToggling = true;
  2072. g.selectBox.hide("fast", function ()
  2073. {
  2074. g.boxToggling = false;
  2075. })
  2076. } else g.selectBox.hide();
  2077. g._changeValue(value, text);
  2078. });
  2079. },
  2080. updateSelectBoxPosition: function ()
  2081. {
  2082. var g = this, p = this.options;
  2083. if (p.absolute)
  2084. {
  2085. g.selectBox.css({ left: g.wrapper.offset().left, top: g.wrapper.offset().top + 1 + g.wrapper.outerHeight() });
  2086. }
  2087. else
  2088. {
  2089. var topheight = g.wrapper.offset().top - $(window).scrollTop();
  2090. var selfheight = g.selectBox.height() + textHeight + 4;
  2091. if (topheight + selfheight > $(window).height() && topheight > selfheight)
  2092. {
  2093. g.selectBox.css("marginTop", -1 * (g.selectBox.height() + textHeight + 5));
  2094. }
  2095. }
  2096. },
  2097. _toggleSelectBox: function (isHide)
  2098. {
  2099. var g = this, p = this.options;
  2100. var textHeight = g.wrapper.height();
  2101. g.boxToggling = true;
  2102. if (isHide)
  2103. {
  2104. if (p.slide)
  2105. {
  2106. g.selectBox.slideToggle('fast', function ()
  2107. {
  2108. g.boxToggling = false;
  2109. });
  2110. }
  2111. else
  2112. {
  2113. g.selectBox.hide();
  2114. g.boxToggling = false;
  2115. }
  2116. }
  2117. else
  2118. {
  2119. g.updateSelectBoxPosition();
  2120. if (p.slide)
  2121. {
  2122. g.selectBox.slideToggle('fast', function ()
  2123. {
  2124. g.boxToggling = false;
  2125. if (!p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0)
  2126. {
  2127. var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top);
  2128. $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet });
  2129. }
  2130. });
  2131. }
  2132. else
  2133. {
  2134. g.selectBox.show();
  2135. g.boxToggling = false;
  2136. if (!g.tree && !g.grid && !p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0)
  2137. {
  2138. var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top);
  2139. $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet });
  2140. }
  2141. }
  2142. }
  2143. g.isShowed = g.selectBox.is(":visible");
  2144. g.trigger('toggle', [isHide]);
  2145. g.trigger(isHide ? 'hide' : 'show');
  2146. }
  2147. });
  2148. $.ligerui.controls.ComboBox.prototype.setValue = $.ligerui.controls.ComboBox.prototype.selectValue;
  2149. //设置文本框和隐藏控件的值
  2150. $.ligerui.controls.ComboBox.prototype.setInputValue = $.ligerui.controls.ComboBox.prototype._changeValue;
  2151. })(jQuery);/**
  2152. * jQuery ligerUI 1.1.9
  2153. *
  2154. * http://ligerui.com
  2155. *
  2156. * Author daomi 2012 [ gd_star@163.com ]
  2157. *
  2158. */
  2159. (function ($)
  2160. {
  2161. $.fn.ligerDateEditor = function ()
  2162. {
  2163. return $.ligerui.run.call(this, "ligerDateEditor", arguments);
  2164. };
  2165. $.fn.ligerGetDateEditorManager = function ()
  2166. {
  2167. return $.ligerui.run.call(this, "ligerGetDateEditorManager", arguments);
  2168. };
  2169. $.ligerDefaults.DateEditor = {
  2170. format: "yyyy-MM-dd hh:mm",
  2171. showTime: false,
  2172. onChangeDate: false,
  2173. absolute: true //选择框是否在附加到body,并绝对定位
  2174. };
  2175. $.ligerDefaults.DateEditorString = {
  2176. dayMessage: ["日", "一", "二", "三", "四", "五", "六"],
  2177. monthMessage: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
  2178. todayMessage: "今天",
  2179. closeMessage: "关闭"
  2180. };
  2181. $.ligerMethos.DateEditor = {};
  2182. $.ligerui.controls.DateEditor = function (element, options)
  2183. {
  2184. $.ligerui.controls.DateEditor.base.constructor.call(this, element, options);
  2185. };
  2186. $.ligerui.controls.DateEditor.ligerExtend($.ligerui.controls.Input, {
  2187. __getType: function ()
  2188. {
  2189. return 'DateEditor';
  2190. },
  2191. __idPrev: function ()
  2192. {
  2193. return 'DateEditor';
  2194. },
  2195. _extendMethods: function ()
  2196. {
  2197. return $.ligerMethos.DateEditor;
  2198. },
  2199. _render: function ()
  2200. {
  2201. var g = this, p = this.options;
  2202. if (!p.showTime && p.format.indexOf(" hh:mm") > -1)
  2203. p.format = p.format.replace(" hh:mm", "");
  2204. if (this.element.tagName.toLowerCase() != "input" || this.element.type != "text")
  2205. return;
  2206. g.inputText = $(this.element);
  2207. if (!g.inputText.hasClass("l-text-field"))
  2208. g.inputText.addClass("l-text-field");
  2209. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  2210. g.text = g.inputText.wrap('<div class="l-text l-text-date"></div>').parent();
  2211. g.text.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  2212. g.text.append(g.link);
  2213. //添加个包裹,
  2214. g.textwrapper = g.text.wrap('<div class="l-text-wrapper"></div>').parent();
  2215. var dateeditorHTML = "";
  2216. dateeditorHTML += "<div class='l-box-dateeditor' style='display:none'>";
  2217. dateeditorHTML += " <div class='l-box-dateeditor-header'>";
  2218. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-prevyear'><span></span></div>";
  2219. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-prevmonth'><span></span></div>";
  2220. dateeditorHTML += " <div class='l-box-dateeditor-header-text'><a class='l-box-dateeditor-header-month'></a> , <a class='l-box-dateeditor-header-year'></a></div>";
  2221. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-nextmonth'><span></span></div>";
  2222. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-nextyear'><span></span></div>";
  2223. dateeditorHTML += " </div>";
  2224. dateeditorHTML += " <div class='l-box-dateeditor-body'>";
  2225. dateeditorHTML += " <table cellpadding='0' cellspacing='0' border='0' class='l-box-dateeditor-calendar'>";
  2226. dateeditorHTML += " <thead>";
  2227. dateeditorHTML += " <tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr>";
  2228. dateeditorHTML += " </thead>";
  2229. dateeditorHTML += " <tbody>";
  2230. dateeditorHTML += " <tr class='l-first'><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr><tr><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td><td align='center'></td></tr>";
  2231. dateeditorHTML += " </tbody>";
  2232. dateeditorHTML += " </table>";
  2233. dateeditorHTML += " <ul class='l-box-dateeditor-monthselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  2234. dateeditorHTML += " <ul class='l-box-dateeditor-yearselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  2235. dateeditorHTML += " <ul class='l-box-dateeditor-hourselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  2236. dateeditorHTML += " <ul class='l-box-dateeditor-minuteselector'><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul>";
  2237. dateeditorHTML += " </div>";
  2238. dateeditorHTML += " <div class='l-box-dateeditor-toolbar'>";
  2239. dateeditorHTML += " <div class='l-box-dateeditor-time'></div>";
  2240. dateeditorHTML += " <div class='l-button l-button-today'></div>";
  2241. dateeditorHTML += " <div class='l-button l-button-close'></div>";
  2242. dateeditorHTML += " <div class='l-clear'></div>";
  2243. dateeditorHTML += " </div>";
  2244. dateeditorHTML += "</div>";
  2245. g.dateeditor = $(dateeditorHTML);
  2246. if (p.absolute)
  2247. g.dateeditor.appendTo('body').addClass("l-box-dateeditor-absolute");
  2248. else
  2249. g.textwrapper.append(g.dateeditor);
  2250. g.header = $(".l-box-dateeditor-header", g.dateeditor);
  2251. g.body = $(".l-box-dateeditor-body", g.dateeditor);
  2252. g.toolbar = $(".l-box-dateeditor-toolbar", g.dateeditor);
  2253. g.body.thead = $("thead", g.body);
  2254. g.body.tbody = $("tbody", g.body);
  2255. g.body.monthselector = $(".l-box-dateeditor-monthselector", g.body);
  2256. g.body.yearselector = $(".l-box-dateeditor-yearselector", g.body);
  2257. g.body.hourselector = $(".l-box-dateeditor-hourselector", g.body);
  2258. g.body.minuteselector = $(".l-box-dateeditor-minuteselector", g.body);
  2259. g.toolbar.time = $(".l-box-dateeditor-time", g.toolbar);
  2260. g.toolbar.time.hour = $("<a></a>");
  2261. g.toolbar.time.minute = $("<a></a>");
  2262. g.buttons = {
  2263. btnPrevYear: $(".l-box-dateeditor-header-prevyear", g.header),
  2264. btnNextYear: $(".l-box-dateeditor-header-nextyear", g.header),
  2265. btnPrevMonth: $(".l-box-dateeditor-header-prevmonth", g.header),
  2266. btnNextMonth: $(".l-box-dateeditor-header-nextmonth", g.header),
  2267. btnYear: $(".l-box-dateeditor-header-year", g.header),
  2268. btnMonth: $(".l-box-dateeditor-header-month", g.header),
  2269. btnToday: $(".l-button-today", g.toolbar),
  2270. btnClose: $(".l-button-close", g.toolbar)
  2271. };
  2272. var nowDate = new Date();
  2273. g.now = {
  2274. year: nowDate.getFullYear(),
  2275. month: nowDate.getMonth() + 1, //注意这里
  2276. day: nowDate.getDay(),
  2277. date: nowDate.getDate(),
  2278. hour: nowDate.getHours(),
  2279. minute: nowDate.getMinutes()
  2280. };
  2281. //当前的时间
  2282. g.currentDate = {
  2283. year: nowDate.getFullYear(),
  2284. month: nowDate.getMonth() + 1,
  2285. day: nowDate.getDay(),
  2286. date: nowDate.getDate(),
  2287. hour: nowDate.getHours(),
  2288. minute: nowDate.getMinutes()
  2289. };
  2290. //选择的时间
  2291. g.selectedDate = null;
  2292. //使用的时间
  2293. g.usedDate = null;
  2294. //初始化数据
  2295. //设置周日至周六
  2296. $("td", g.body.thead).each(function (i, td)
  2297. {
  2298. $(td).html(p.dayMessage[i]);
  2299. });
  2300. //设置一月到十一二月
  2301. $("li", g.body.monthselector).each(function (i, li)
  2302. {
  2303. $(li).html(p.monthMessage[i]);
  2304. });
  2305. //设置按钮
  2306. g.buttons.btnToday.html(p.todayMessage);
  2307. g.buttons.btnClose.html(p.closeMessage);
  2308. //设置时间
  2309. if (p.showTime)
  2310. {
  2311. g.toolbar.time.show();
  2312. g.toolbar.time.append(g.toolbar.time.hour).append(":").append(g.toolbar.time.minute);
  2313. $("li", g.body.hourselector).each(function (i, item)
  2314. {
  2315. var str = i;
  2316. if (i < 10) str = "0" + i.toString();
  2317. $(this).html(str);
  2318. });
  2319. $("li", g.body.minuteselector).each(function (i, item)
  2320. {
  2321. var str = i;
  2322. if (i < 10) str = "0" + i.toString();
  2323. $(this).html(str);
  2324. });
  2325. }
  2326. //设置主体
  2327. g.bulidContent();
  2328. //初始化
  2329. if (g.inputText.val() != "")
  2330. g.onTextChange();
  2331. /**************
  2332. **bulid evens**
  2333. *************/
  2334. g.dateeditor.hover(null, function (e)
  2335. {
  2336. if (g.dateeditor.is(":visible") && !g.editorToggling)
  2337. {
  2338. g.toggleDateEditor(true);
  2339. }
  2340. });
  2341. //toggle even
  2342. g.link.hover(function ()
  2343. {
  2344. if (p.disabled) return;
  2345. this.className = "l-trigger-hover";
  2346. }, function ()
  2347. {
  2348. if (p.disabled) return;
  2349. this.className = "l-trigger";
  2350. }).mousedown(function ()
  2351. {
  2352. if (p.disabled) return;
  2353. this.className = "l-trigger-pressed";
  2354. }).mouseup(function ()
  2355. {
  2356. if (p.disabled) return;
  2357. this.className = "l-trigger-hover";
  2358. }).click(function ()
  2359. {
  2360. if (p.disabled) return;
  2361. g.bulidContent();
  2362. g.toggleDateEditor(g.dateeditor.is(":visible"));
  2363. });
  2364. //不可用属性时处理
  2365. if (p.disabled)
  2366. {
  2367. g.inputText.attr("readonly", "readonly");
  2368. g.text.addClass('l-text-disabled');
  2369. }
  2370. //初始值
  2371. if (p.initValue)
  2372. {
  2373. g.inputText.val(p.initValue);
  2374. }
  2375. g.buttons.btnClose.click(function ()
  2376. {
  2377. g.toggleDateEditor(true);
  2378. });
  2379. //日期 点击
  2380. $("td", g.body.tbody).hover(function ()
  2381. {
  2382. if ($(this).hasClass("l-box-dateeditor-today")) return;
  2383. $(this).addClass("l-box-dateeditor-over");
  2384. }, function ()
  2385. {
  2386. $(this).removeClass("l-box-dateeditor-over");
  2387. }).click(function ()
  2388. {
  2389. $(".l-box-dateeditor-selected", g.body.tbody).removeClass("l-box-dateeditor-selected");
  2390. if (!$(this).hasClass("l-box-dateeditor-today"))
  2391. $(this).addClass("l-box-dateeditor-selected");
  2392. g.currentDate.date = parseInt($(this).html());
  2393. g.currentDate.day = new Date(g.currentDate.year, g.currentDate.month - 1, 1).getDay();
  2394. if ($(this).hasClass("l-box-dateeditor-out"))
  2395. {
  2396. if ($("tr", g.body.tbody).index($(this).parent()) == 0)
  2397. {
  2398. if (--g.currentDate.month == 0)
  2399. {
  2400. g.currentDate.month = 12;
  2401. g.currentDate.year--;
  2402. }
  2403. } else
  2404. {
  2405. if (++g.currentDate.month == 13)
  2406. {
  2407. g.currentDate.month = 1;
  2408. g.currentDate.year++;
  2409. }
  2410. }
  2411. }
  2412. g.selectedDate = {
  2413. year: g.currentDate.year,
  2414. month: g.currentDate.month,
  2415. date: g.currentDate.date
  2416. };
  2417. g.showDate();
  2418. g.editorToggling = true;
  2419. g.dateeditor.slideToggle('fast', function ()
  2420. {
  2421. g.editorToggling = false;
  2422. });
  2423. });
  2424. $(".l-box-dateeditor-header-btn", g.header).hover(function ()
  2425. {
  2426. $(this).addClass("l-box-dateeditor-header-btn-over");
  2427. }, function ()
  2428. {
  2429. $(this).removeClass("l-box-dateeditor-header-btn-over");
  2430. });
  2431. //选择年份
  2432. g.buttons.btnYear.click(function ()
  2433. {
  2434. //build year list
  2435. if (!g.body.yearselector.is(":visible"))
  2436. {
  2437. $("li", g.body.yearselector).each(function (i, item)
  2438. {
  2439. var currentYear = g.currentDate.year + (i - 4);
  2440. if (currentYear == g.currentDate.year)
  2441. $(this).addClass("l-selected");
  2442. else
  2443. $(this).removeClass("l-selected");
  2444. $(this).html(currentYear);
  2445. });
  2446. }
  2447. g.body.yearselector.slideToggle();
  2448. });
  2449. g.body.yearselector.hover(function () { }, function ()
  2450. {
  2451. $(this).slideUp();
  2452. });
  2453. $("li", g.body.yearselector).click(function ()
  2454. {
  2455. g.currentDate.year = parseInt($(this).html());
  2456. g.body.yearselector.slideToggle();
  2457. g.bulidContent();
  2458. });
  2459. //select month
  2460. g.buttons.btnMonth.click(function ()
  2461. {
  2462. $("li", g.body.monthselector).each(function (i, item)
  2463. {
  2464. //add selected style
  2465. if (g.currentDate.month == i + 1)
  2466. $(this).addClass("l-selected");
  2467. else
  2468. $(this).removeClass("l-selected");
  2469. });
  2470. g.body.monthselector.slideToggle();
  2471. });
  2472. g.body.monthselector.hover(function () { }, function ()
  2473. {
  2474. $(this).slideUp("fast");
  2475. });
  2476. $("li", g.body.monthselector).click(function ()
  2477. {
  2478. var index = $("li", g.body.monthselector).index(this);
  2479. g.currentDate.month = index + 1;
  2480. g.body.monthselector.slideToggle();
  2481. g.bulidContent();
  2482. });
  2483. //选择小时
  2484. g.toolbar.time.hour.click(function ()
  2485. {
  2486. $("li", g.body.hourselector).each(function (i, item)
  2487. {
  2488. //add selected style
  2489. if (g.currentDate.hour == i)
  2490. $(this).addClass("l-selected");
  2491. else
  2492. $(this).removeClass("l-selected");
  2493. });
  2494. g.body.hourselector.slideToggle();
  2495. });
  2496. g.body.hourselector.hover(function () { }, function ()
  2497. {
  2498. $(this).slideUp("fast");
  2499. });
  2500. $("li", g.body.hourselector).click(function ()
  2501. {
  2502. var index = $("li", g.body.hourselector).index(this);
  2503. g.currentDate.hour = index;
  2504. g.body.hourselector.slideToggle();
  2505. g.bulidContent();
  2506. });
  2507. //选择分钟
  2508. g.toolbar.time.minute.click(function ()
  2509. {
  2510. $("li", g.body.minuteselector).each(function (i, item)
  2511. {
  2512. //add selected style
  2513. if (g.currentDate.minute == i)
  2514. $(this).addClass("l-selected");
  2515. else
  2516. $(this).removeClass("l-selected");
  2517. });
  2518. g.body.minuteselector.slideToggle("fast", function ()
  2519. {
  2520. var index = $("li", this).index($('li.l-selected', this));
  2521. if (index > 29)
  2522. {
  2523. var offSet = ($('li.l-selected', this).offset().top - $(this).offset().top);
  2524. $(this).animate({ scrollTop: offSet });
  2525. }
  2526. });
  2527. });
  2528. g.body.minuteselector.hover(function () { }, function ()
  2529. {
  2530. $(this).slideUp("fast");
  2531. });
  2532. $("li", g.body.minuteselector).click(function ()
  2533. {
  2534. var index = $("li", g.body.minuteselector).index(this);
  2535. g.currentDate.minute = index;
  2536. g.body.minuteselector.slideToggle("fast");
  2537. g.bulidContent();
  2538. });
  2539. //上个月
  2540. g.buttons.btnPrevMonth.click(function ()
  2541. {
  2542. if (--g.currentDate.month == 0)
  2543. {
  2544. g.currentDate.month = 12;
  2545. g.currentDate.year--;
  2546. }
  2547. g.bulidContent();
  2548. });
  2549. //下个月
  2550. g.buttons.btnNextMonth.click(function ()
  2551. {
  2552. if (++g.currentDate.month == 13)
  2553. {
  2554. g.currentDate.month = 1;
  2555. g.currentDate.year++;
  2556. }
  2557. g.bulidContent();
  2558. });
  2559. //上一年
  2560. g.buttons.btnPrevYear.click(function ()
  2561. {
  2562. g.currentDate.year--;
  2563. g.bulidContent();
  2564. });
  2565. //下一年
  2566. g.buttons.btnNextYear.click(function ()
  2567. {
  2568. g.currentDate.year++;
  2569. g.bulidContent();
  2570. });
  2571. //今天
  2572. g.buttons.btnToday.click(function ()
  2573. {
  2574. g.currentDate = {
  2575. year: g.now.year,
  2576. month: g.now.month,
  2577. day: g.now.day,
  2578. date: g.now.date
  2579. };
  2580. g.selectedDate = {
  2581. year: g.now.year,
  2582. month: g.now.month,
  2583. day: g.now.day,
  2584. date: g.now.date
  2585. };
  2586. g.showDate();
  2587. g.dateeditor.slideToggle("fast");
  2588. });
  2589. //文本框
  2590. g.inputText.change(function ()
  2591. {
  2592. g.onTextChange();
  2593. }).blur(function ()
  2594. {
  2595. g.text.removeClass("l-text-focus");
  2596. }).focus(function ()
  2597. {
  2598. g.text.addClass("l-text-focus");
  2599. });
  2600. g.text.hover(function ()
  2601. {
  2602. g.text.addClass("l-text-over");
  2603. }, function ()
  2604. {
  2605. g.text.removeClass("l-text-over");
  2606. });
  2607. //LEABEL 支持
  2608. if (p.label)
  2609. {
  2610. g.labelwrapper = g.textwrapper.wrap('<div class="l-labeltext"></div>').parent();
  2611. g.labelwrapper.prepend('<div class="l-text-label" style="float:left;display:inline;">' + p.label + ':&nbsp</div>');
  2612. g.textwrapper.css('float', 'left');
  2613. if (!p.labelWidth)
  2614. {
  2615. p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth();
  2616. } else
  2617. {
  2618. $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth);
  2619. }
  2620. $('.l-text-label', g.labelwrapper).width(p.labelWidth);
  2621. $('.l-text-label', g.labelwrapper).height(g.text.height());
  2622. g.labelwrapper.append('<br style="clear:both;" />');
  2623. if (p.labelAlign)
  2624. {
  2625. $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign);
  2626. }
  2627. g.textwrapper.css({ display: 'inline' });
  2628. g.labelwrapper.width(g.text.outerWidth() + p.labelWidth + 2);
  2629. }
  2630. g.set(p);
  2631. },
  2632. destroy: function ()
  2633. {
  2634. if (this.textwrapper) this.textwrapper.remove();
  2635. if (this.dateeditor) this.dateeditor.remove();
  2636. this.options = null;
  2637. $.ligerui.remove(this);
  2638. },
  2639. bulidContent: function ()
  2640. {
  2641. var g = this, p = this.options;
  2642. //当前月第一天星期
  2643. var thismonthFirstDay = new Date(g.currentDate.year, g.currentDate.month - 1, 1).getDay();
  2644. //当前月天数
  2645. var nextMonth = g.currentDate.month;
  2646. var nextYear = g.currentDate.year;
  2647. if (++nextMonth == 13)
  2648. {
  2649. nextMonth = 1;
  2650. nextYear++;
  2651. }
  2652. var monthDayNum = new Date(nextYear, nextMonth - 1, 0).getDate();
  2653. //当前上个月天数
  2654. var prevMonthDayNum = new Date(g.currentDate.year, g.currentDate.month - 1, 0).getDate();
  2655. g.buttons.btnMonth.html(p.monthMessage[g.currentDate.month - 1]);
  2656. g.buttons.btnYear.html(g.currentDate.year);
  2657. g.toolbar.time.hour.html(g.currentDate.hour);
  2658. g.toolbar.time.minute.html(g.currentDate.minute);
  2659. if (g.toolbar.time.hour.html().length == 1)
  2660. g.toolbar.time.hour.html("0" + g.toolbar.time.hour.html());
  2661. if (g.toolbar.time.minute.html().length == 1)
  2662. g.toolbar.time.minute.html("0" + g.toolbar.time.minute.html());
  2663. $("td", this.body.tbody).each(function () { this.className = "" });
  2664. $("tr", this.body.tbody).each(function (i, tr)
  2665. {
  2666. $("td", tr).each(function (j, td)
  2667. {
  2668. var id = i * 7 + (j - thismonthFirstDay);
  2669. var showDay = id + 1;
  2670. if (g.selectedDate && g.currentDate.year == g.selectedDate.year &&
  2671. g.currentDate.month == g.selectedDate.month &&
  2672. id + 1 == g.selectedDate.date)
  2673. {
  2674. if (j == 0 || j == 6)
  2675. {
  2676. $(td).addClass("l-box-dateeditor-holiday")
  2677. }
  2678. $(td).addClass("l-box-dateeditor-selected");
  2679. $(td).siblings().removeClass("l-box-dateeditor-selected");
  2680. }
  2681. else if (g.currentDate.year == g.now.year &&
  2682. g.currentDate.month == g.now.month &&
  2683. id + 1 == g.now.date)
  2684. {
  2685. if (j == 0 || j == 6)
  2686. {
  2687. $(td).addClass("l-box-dateeditor-holiday")
  2688. }
  2689. $(td).addClass("l-box-dateeditor-today");
  2690. }
  2691. else if (id < 0)
  2692. {
  2693. showDay = prevMonthDayNum + showDay;
  2694. $(td).addClass("l-box-dateeditor-out")
  2695. .removeClass("l-box-dateeditor-selected");
  2696. }
  2697. else if (id > monthDayNum - 1)
  2698. {
  2699. showDay = showDay - monthDayNum;
  2700. $(td).addClass("l-box-dateeditor-out")
  2701. .removeClass("l-box-dateeditor-selected");
  2702. }
  2703. else if (j == 0 || j == 6)
  2704. {
  2705. $(td).addClass("l-box-dateeditor-holiday")
  2706. .removeClass("l-box-dateeditor-selected");
  2707. }
  2708. else
  2709. {
  2710. td.className = "";
  2711. }
  2712. $(td).html(showDay);
  2713. });
  2714. });
  2715. },
  2716. updateSelectBoxPosition: function ()
  2717. {
  2718. var g = this, p = this.options;
  2719. if (p.absolute)
  2720. {
  2721. g.dateeditor.css({ left: g.text.offset().left, top: g.text.offset().top + 1 + g.text.outerHeight() });
  2722. }
  2723. else
  2724. {
  2725. if (g.text.offset().top + 4 > g.dateeditor.height() && g.text.offset().top + g.dateeditor.height() + textHeight + 4 - $(window).scrollTop() > $(window).height())
  2726. {
  2727. g.dateeditor.css("marginTop", -1 * (g.dateeditor.height() + textHeight + 5));
  2728. g.showOnTop = true;
  2729. }
  2730. else
  2731. {
  2732. g.showOnTop = false;
  2733. }
  2734. }
  2735. },
  2736. toggleDateEditor: function (isHide)
  2737. {
  2738. var g = this, p = this.options;
  2739. var textHeight = g.text.height();
  2740. g.editorToggling = true;
  2741. if (isHide)
  2742. {
  2743. g.dateeditor.hide('fast', function ()
  2744. {
  2745. g.editorToggling = false;
  2746. });
  2747. }
  2748. else
  2749. {
  2750. g.updateSelectBoxPosition();
  2751. g.dateeditor.slideDown('fast', function ()
  2752. {
  2753. g.editorToggling = false;
  2754. });
  2755. }
  2756. },
  2757. showDate: function ()
  2758. {
  2759. var g = this, p = this.options;
  2760. if (!this.selectedDate) return;
  2761. var dateStr = g.selectedDate.year + "/" + g.selectedDate.month + "/" + g.selectedDate.date;
  2762. this.currentDate.hour = parseInt(g.toolbar.time.hour.html(), 10);
  2763. this.currentDate.minute = parseInt(g.toolbar.time.minute.html(), 10);
  2764. if (p.showTime)
  2765. {
  2766. dateStr += " " + this.currentDate.hour + ":" + this.currentDate.minute;
  2767. }
  2768. this.inputText.val(dateStr);
  2769. this.inputText.trigger("change").focus();
  2770. },
  2771. isDateTime: function (dateStr)
  2772. {
  2773. var g = this, p = this.options;
  2774. var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  2775. if (r == null) return false;
  2776. var d = new Date(r[1], r[3] - 1, r[4]);
  2777. if (d == "NaN") return false;
  2778. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
  2779. },
  2780. isLongDateTime: function (dateStr)
  2781. {
  2782. var g = this, p = this.options;
  2783. var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
  2784. var r = dateStr.match(reg);
  2785. if (r == null) return false;
  2786. var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
  2787. if (d == "NaN") return false;
  2788. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
  2789. },
  2790. getFormatDate: function (date)
  2791. {
  2792. var g = this, p = this.options;
  2793. if (date == "NaN") return null;
  2794. var format = p.format;
  2795. var o = {
  2796. "M+": date.getMonth() + 1,
  2797. "d+": date.getDate(),
  2798. "h+": date.getHours(),
  2799. "m+": date.getMinutes(),
  2800. "s+": date.getSeconds(),
  2801. "q+": Math.floor((date.getMonth() + 3) / 3),
  2802. "S": date.getMilliseconds()
  2803. }
  2804. if (/(y+)/.test(format))
  2805. {
  2806. format = format.replace(RegExp.$1, (date.getFullYear() + "")
  2807. .substr(4 - RegExp.$1.length));
  2808. }
  2809. for (var k in o)
  2810. {
  2811. if (new RegExp("(" + k + ")").test(format))
  2812. {
  2813. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
  2814. : ("00" + o[k]).substr(("" + o[k]).length));
  2815. }
  2816. }
  2817. return format;
  2818. },
  2819. onTextChange: function ()
  2820. {
  2821. var g = this, p = this.options;
  2822. var val = g.inputText.val();
  2823. if (val == "")
  2824. {
  2825. g.selectedDate = null;
  2826. return true;
  2827. }
  2828. if (!p.showTime && !g.isDateTime(val))
  2829. {
  2830. //恢复
  2831. if (!g.usedDate)
  2832. {
  2833. g.inputText.val("");
  2834. } else
  2835. {
  2836. g.inputText.val(g.getFormatDate(g.usedDate));
  2837. }
  2838. }
  2839. else if (p.showTime && !g.isLongDateTime(val))
  2840. {
  2841. //恢复
  2842. if (!g.usedDate)
  2843. {
  2844. g.inputText.val("");
  2845. } else
  2846. {
  2847. g.inputText.val(g.getFormatDate(g.usedDate));
  2848. }
  2849. }
  2850. else
  2851. {
  2852. val = val.replace(/-/g, "/");
  2853. var formatVal = g.getFormatDate(new Date(val));
  2854. if (formatVal == null)
  2855. {
  2856. //恢复
  2857. if (!g.usedDate)
  2858. {
  2859. g.inputText.val("");
  2860. } else
  2861. {
  2862. g.inputText.val(g.getFormatDate(g.usedDate));
  2863. }
  2864. }
  2865. g.usedDate = new Date(val); //记录
  2866. g.selectedDate = {
  2867. year: g.usedDate.getFullYear(),
  2868. month: g.usedDate.getMonth() + 1, //注意这里
  2869. day: g.usedDate.getDay(),
  2870. date: g.usedDate.getDate(),
  2871. hour: g.usedDate.getHours(),
  2872. minute: g.usedDate.getMinutes()
  2873. };
  2874. g.currentDate = {
  2875. year: g.usedDate.getFullYear(),
  2876. month: g.usedDate.getMonth() + 1, //注意这里
  2877. day: g.usedDate.getDay(),
  2878. date: g.usedDate.getDate(),
  2879. hour: g.usedDate.getHours(),
  2880. minute: g.usedDate.getMinutes()
  2881. };
  2882. g.inputText.val(formatVal);
  2883. g.trigger('changeDate', [formatVal]);
  2884. if ($(g.dateeditor).is(":visible"))
  2885. g.bulidContent();
  2886. }
  2887. },
  2888. _setHeight: function (value)
  2889. {
  2890. var g = this;
  2891. if (value > 4)
  2892. {
  2893. g.text.css({ height: value });
  2894. g.inputText.css({ height: value });
  2895. g.textwrapper.css({ height: value });
  2896. }
  2897. },
  2898. _setWidth: function (value)
  2899. {
  2900. var g = this;
  2901. if (value > 20)
  2902. {
  2903. g.text.css({ width: value });
  2904. // g.inputText.css({ width: value - 20 });
  2905. g.inputText.css({ width: value - 2 });
  2906. g.textwrapper.css({ width: value });
  2907. }
  2908. },
  2909. _setValue: function (value)
  2910. {
  2911. var g = this;
  2912. if (!value) g.inputText.val('');
  2913. if (typeof value == "string")
  2914. {
  2915. g.inputText.val(value);
  2916. }
  2917. else if (typeof value == "object")
  2918. {
  2919. if (value instanceof Date)
  2920. {
  2921. g.inputText.val(g.getFormatDate(value));
  2922. g.onTextChange();
  2923. }
  2924. }
  2925. },
  2926. _getValue: function ()
  2927. {
  2928. return this.usedDate;
  2929. },
  2930. setEnabled: function ()
  2931. {
  2932. var g = this, p = this.options;
  2933. this.inputText.removeAttr("readonly");
  2934. this.text.removeClass('l-text-disabled');
  2935. p.disabled = false;
  2936. },
  2937. setDisabled: function ()
  2938. {
  2939. var g = this, p = this.options;
  2940. this.inputText.attr("readonly", "readonly");
  2941. this.text.addClass('l-text-disabled');
  2942. p.disabled = true;
  2943. }
  2944. });
  2945. })(jQuery);/**
  2946. * jQuery ligerUI 1.1.9
  2947. *
  2948. * http://ligerui.com
  2949. *
  2950. * Author daomi 2012 [ gd_star@163.com ]
  2951. *
  2952. */
  2953. (function ($)
  2954. {
  2955. var l = $.ligerui;
  2956. //全局事件
  2957. $(".l-dialog-btn").live('mouseover', function ()
  2958. {
  2959. $(this).addClass("l-dialog-btn-over");
  2960. }).live('mouseout', function ()
  2961. {
  2962. $(this).removeClass("l-dialog-btn-over");
  2963. });
  2964. $(".l-dialog-tc .l-dialog-close").live('mouseover', function ()
  2965. {
  2966. $(this).addClass("l-dialog-close-over");
  2967. }).live('mouseout', function ()
  2968. {
  2969. $(this).removeClass("l-dialog-close-over");
  2970. });
  2971. $.ligerDialog = function ()
  2972. {
  2973. return l.run.call(null, "ligerDialog", arguments, { isStatic: true });
  2974. };
  2975. //dialog 图片文件夹的路径 预加载
  2976. $.ligerui.DialogImagePath = "../../lib/ligerUI/skins/Aqua/images/win/";
  2977. function prevImage(paths)
  2978. {
  2979. for (var i in paths)
  2980. {
  2981. $('<img />').attr('src', l.DialogImagePath + paths[i]);
  2982. }
  2983. }
  2984. //prevImage(['dialog.gif', 'dialog-winbtns.gif', 'dialog-bc.gif', 'dialog-tc.gif']);
  2985. $.ligerDefaults.Dialog = {
  2986. cls: null, //给dialog附加css class
  2987. id: null, //给dialog附加id
  2988. buttons: null, //按钮集合
  2989. isDrag: true, //是否拖动
  2990. width: 280, //宽度
  2991. height: null, //高度,默认自适应
  2992. content: '', //内容
  2993. target: null, //目标对象,指定它将以appendTo()的方式载入
  2994. url: null, //目标页url,默认以iframe的方式载入
  2995. load: false, //是否以load()的方式加载目标页的内容
  2996. onLoaded: null,
  2997. type: 'none', //类型 warn、success、error、question
  2998. left: null, //位置left
  2999. top: null, //位置top
  3000. modal: true, //是否模态对话框
  3001. name: null, //创建iframe时 作为iframe的name和id
  3002. isResize: false, // 是否调整大小
  3003. allowClose: true, //允许关闭
  3004. opener: null,
  3005. timeParmName: null, //是否给URL后面加上值为new Date().getTime()的参数,如果需要指定一个参数名即可
  3006. closeWhenEnter: null, //回车时是否关闭dialog
  3007. isHidden: true, //关闭对话框时是否只是隐藏,还是销毁对话框
  3008. show: true, //初始化时是否马上显示
  3009. title: '提示', //头部
  3010. showMax: false, //是否显示最大化按钮
  3011. showToggle: false, //是否显示收缩窗口按钮
  3012. showMin: false, //是否显示最小化按钮
  3013. slide: $.browser.msie ? false : true, //是否以动画的形式显示
  3014. fixedType: null, //在固定的位置显示, 可以设置的值有n, e, s, w, ne, se, sw, nw
  3015. showType: null //显示类型,可以设置为slide(固定显示时有效)
  3016. };
  3017. $.ligerDefaults.DialogString = {
  3018. titleMessage: '提示', //提示文本标题
  3019. ok: '确定',
  3020. yes: '是',
  3021. no: '否',
  3022. cancel: '取消',
  3023. waittingMessage: '正在等待中,请稍候...'
  3024. };
  3025. $.ligerMethos.Dialog = $.ligerMethos.Dialog || {};
  3026. l.controls.Dialog = function (options)
  3027. {
  3028. l.controls.Dialog.base.constructor.call(this, null, options);
  3029. };
  3030. l.controls.Dialog.ligerExtend(l.core.Win, {
  3031. __getType: function ()
  3032. {
  3033. return 'Dialog';
  3034. },
  3035. __idPrev: function ()
  3036. {
  3037. return 'Dialog';
  3038. },
  3039. _extendMethods: function ()
  3040. {
  3041. return $.ligerMethos.Dialog;
  3042. },
  3043. _render: function ()
  3044. {
  3045. var g = this, p = this.options;
  3046. g.set(p, true);
  3047. var dialog = $('<div class="l-dialog"><table class="l-dialog-table" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="l-dialog-tl"></td><td class="l-dialog-tc"><div class="l-dialog-tc-inner"><div class="l-dialog-icon"></div><div class="l-dialog-title"></div><div class="l-dialog-winbtns"><div class="l-dialog-winbtn l-dialog-close"></div></div></div></td><td class="l-dialog-tr"></td></tr><tr><td class="l-dialog-cl"></td><td class="l-dialog-cc"><div class="l-dialog-body"><div class="l-dialog-image"></div> <div class="l-dialog-content"></div><div class="l-dialog-buttons"><div class="l-dialog-buttons-inner"></div></td><td class="l-dialog-cr"></td></tr><tr><td class="l-dialog-bl"></td><td class="l-dialog-bc"></td><td class="l-dialog-br"></td></tr></tbody></table></div>');
  3048. $('body').append(dialog);
  3049. g.dialog = dialog;
  3050. g.element = dialog[0];
  3051. g.dialog.body = $(".l-dialog-body:first", g.dialog);
  3052. g.dialog.header = $(".l-dialog-tc-inner:first", g.dialog);
  3053. g.dialog.winbtns = $(".l-dialog-winbtns:first", g.dialog.header);
  3054. g.dialog.buttons = $(".l-dialog-buttons:first", g.dialog);
  3055. g.dialog.content = $(".l-dialog-content:first", g.dialog);
  3056. g.set(p, false);
  3057. if (p.allowClose == false) $(".l-dialog-close", g.dialog).remove();
  3058. if (p.target || p.url || p.type == "none")
  3059. {
  3060. p.type = null;
  3061. g.dialog.addClass("l-dialog-win");
  3062. }
  3063. if (p.cls) g.dialog.addClass(p.cls);
  3064. if (p.id) g.dialog.attr("id", p.id);
  3065. //设置锁定屏幕、拖动支持 和设置图片
  3066. g.mask();
  3067. if (p.isDrag)
  3068. g._applyDrag();
  3069. if (p.isResize)
  3070. g._applyResize();
  3071. if (p.type)
  3072. g._setImage();
  3073. else
  3074. {
  3075. $(".l-dialog-image", g.dialog).remove();
  3076. g.dialog.content.addClass("l-dialog-content-noimage");
  3077. }
  3078. if (!p.show)
  3079. {
  3080. g.unmask();
  3081. g.dialog.hide();
  3082. }
  3083. //设置主体内容
  3084. if (p.target)
  3085. {
  3086. g.dialog.content.prepend(p.target);
  3087. $(p.target).show();
  3088. }
  3089. else if (p.url)
  3090. {
  3091. if (p.timeParmName)
  3092. {
  3093. p.url += p.url.indexOf('?') == -1 ? "?" : "&";
  3094. p.url += p.timeParmName + "=" + new Date().getTime();
  3095. }
  3096. if (p.load)
  3097. {
  3098. g.dialog.body.load(p.url, function ()
  3099. {
  3100. g._saveStatus();
  3101. g.trigger('loaded');
  3102. });
  3103. }
  3104. else
  3105. {
  3106. g.jiframe = $("<iframe frameborder='0'></iframe>");
  3107. var framename = p.name ? p.name : "ligerwindow" + new Date().getTime();
  3108. g.jiframe.attr("name", framename);
  3109. g.jiframe.attr("id", framename);
  3110. g.dialog.content.prepend(g.jiframe);
  3111. g.dialog.content.addClass("l-dialog-content-nopadding");
  3112. setTimeout(function ()
  3113. {
  3114. g.jiframe.attr("src", p.url);
  3115. g.frame = window.frames[g.jiframe.attr("name")];
  3116. }, 0);
  3117. }
  3118. }
  3119. if (p.opener) g.dialog.opener = p.opener;
  3120. //设置按钮
  3121. if (p.buttons)
  3122. {
  3123. $(p.buttons).each(function (i, item)
  3124. {
  3125. var btn = $('<div class="l-dialog-btn"><div class="l-dialog-btn-l"></div><div class="l-dialog-btn-r"></div><div class="l-dialog-btn-inner"></div></div>');
  3126. $(".l-dialog-btn-inner", btn).html(item.text);
  3127. $(".l-dialog-buttons-inner", g.dialog.buttons).prepend(btn);
  3128. item.width && btn.width(item.width);
  3129. item.onclick && btn.click(function () { item.onclick(item, g, i) });
  3130. });
  3131. } else
  3132. {
  3133. g.dialog.buttons.remove();
  3134. }
  3135. $(".l-dialog-buttons-inner", g.dialog.buttons).append("<div class='l-clear'></div>");
  3136. $(".l-dialog-title", g.dialog)
  3137. .bind("selectstart", function () { return false; });
  3138. g.dialog.click(function ()
  3139. {
  3140. l.win.setFront(g);
  3141. });
  3142. //设置事件
  3143. $(".l-dialog-tc .l-dialog-close", g.dialog).click(function ()
  3144. {
  3145. if (p.isHidden)
  3146. g.hide();
  3147. else
  3148. g.close();
  3149. });
  3150. if (!p.fixedType)
  3151. {
  3152. //位置初始化
  3153. var left = 0;
  3154. var top = 0;
  3155. var width = p.width || g.dialog.width();
  3156. if (p.slide == true) p.slide = 'fast';
  3157. if (p.left != null) left = p.left;
  3158. else p.left = left = 0.5 * ($(window).width() - width);
  3159. if (p.top != null) top = p.top;
  3160. else p.top = top = 0.5 * ($(window).height() - g.dialog.height()) + $(window).scrollTop() - 10;
  3161. if (left < 0) p.left = left = 0;
  3162. if (top < 0) p.top = top = 0;
  3163. g.dialog.css({ left: left, top: top });
  3164. }
  3165. g.show();
  3166. $('body').bind('keydown.dialog', function (e)
  3167. {
  3168. var key = e.which;
  3169. if (key == 13)
  3170. {
  3171. g.enter();
  3172. }
  3173. else if (key == 27)
  3174. {
  3175. g.esc();
  3176. }
  3177. });
  3178. g._updateBtnsWidth();
  3179. g._saveStatus();
  3180. g._onReisze();
  3181. },
  3182. _borderX: 12,
  3183. _borderY: 32,
  3184. doMax: function (slide)
  3185. {
  3186. var g = this, p = this.options;
  3187. var width = $(window).width(), height = $(window).height(), left = 0, top = 0;
  3188. if (l.win.taskbar)
  3189. {
  3190. height -= l.win.taskbar.outerHeight();
  3191. if (l.win.top) top += l.win.taskbar.outerHeight();
  3192. }
  3193. if (slide)
  3194. {
  3195. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  3196. g.dialog.animate({ left: left, top: top }, p.slide);
  3197. g.dialog.content.animate({ height: height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  3198. {
  3199. g._onReisze();
  3200. });
  3201. }
  3202. else
  3203. {
  3204. g.set({ width: width, height: height, left: left, top: top });
  3205. g._onReisze();
  3206. }
  3207. },
  3208. //最大化
  3209. max: function ()
  3210. {
  3211. var g = this, p = this.options;
  3212. if (g.winmax)
  3213. {
  3214. g.winmax.addClass("l-dialog-recover");
  3215. g.doMax(p.slide);
  3216. if (g.wintoggle)
  3217. {
  3218. if (g.wintoggle.hasClass("l-dialog-extend"))
  3219. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-extend-disabled");
  3220. else
  3221. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-collapse-disabled");
  3222. }
  3223. if (g.resizable) g.resizable.set({ disabled: true });
  3224. if (g.draggable) g.draggable.set({ disabled: true });
  3225. g.maximum = true;
  3226. $(window).bind('resize.dialogmax', function ()
  3227. {
  3228. g.doMax(false);
  3229. });
  3230. }
  3231. },
  3232. //恢复
  3233. recover: function ()
  3234. {
  3235. var g = this, p = this.options;
  3236. if (g.winmax)
  3237. {
  3238. g.winmax.removeClass("l-dialog-recover");
  3239. if (p.slide)
  3240. {
  3241. g.dialog.body.animate({ width: g._width - g._borderX }, p.slide);
  3242. g.dialog.animate({ left: g._left, top: g._top }, p.slide);
  3243. g.dialog.content.animate({ height: g._height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  3244. {
  3245. g._onReisze();
  3246. });
  3247. }
  3248. else
  3249. {
  3250. g.set({ width: g._width, height: g._height, left: g._left, top: g._top });
  3251. g._onReisze();
  3252. }
  3253. if (g.wintoggle)
  3254. {
  3255. g.wintoggle.removeClass("l-dialog-toggle-disabled l-dialog-extend-disabled l-dialog-collapse-disabled");
  3256. }
  3257. $(window).unbind('resize.dialogmax');
  3258. }
  3259. if (this.resizable) this.resizable.set({ disabled: false });
  3260. if (g.draggable) g.draggable.set({ disabled: false });
  3261. g.maximum = false;
  3262. },
  3263. //最小化
  3264. min: function ()
  3265. {
  3266. var g = this, p = this.options;
  3267. var task = l.win.getTask(this);
  3268. if (p.slide)
  3269. {
  3270. g.dialog.body.animate({ width: 1 }, p.slide);
  3271. task.y = task.offset().top + task.height();
  3272. task.x = task.offset().left + task.width() / 2;
  3273. g.dialog.animate({ left: task.x, top: task.y }, p.slide, function ()
  3274. {
  3275. g.dialog.hide();
  3276. });
  3277. }
  3278. else
  3279. {
  3280. g.dialog.hide();
  3281. }
  3282. g.unmask();
  3283. g.minimize = true;
  3284. g.actived = false;
  3285. },
  3286. active: function ()
  3287. {
  3288. var g = this, p = this.options;
  3289. if (g.minimize)
  3290. {
  3291. var width = g._width, height = g._height, left = g._left, top = g._top;
  3292. if (g.maximum)
  3293. {
  3294. width = $(window).width();
  3295. height = $(window).height();
  3296. left = top = 0;
  3297. if (l.win.taskbar)
  3298. {
  3299. height -= l.win.taskbar.outerHeight();
  3300. if (l.win.top) top += l.win.taskbar.outerHeight();
  3301. }
  3302. }
  3303. if (p.slide)
  3304. {
  3305. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  3306. g.dialog.animate({ left: left, top: top }, p.slide);
  3307. }
  3308. else
  3309. {
  3310. g.set({ width: width, height: height, left: left, top: top });
  3311. }
  3312. }
  3313. g.actived = true;
  3314. g.minimize = false;
  3315. l.win.setFront(g);
  3316. g.show();
  3317. },
  3318. //展开 收缩
  3319. toggle: function ()
  3320. {
  3321. var g = this, p = this.options;
  3322. if (!g.wintoggle) return;
  3323. if (g.wintoggle.hasClass("l-dialog-extend"))
  3324. g.extend();
  3325. else
  3326. g.collapse();
  3327. },
  3328. //收缩
  3329. collapse: function ()
  3330. {
  3331. var g = this, p = this.options;
  3332. if (!g.wintoggle) return;
  3333. if (p.slide)
  3334. g.dialog.content.animate({ height: 1 }, p.slide);
  3335. else
  3336. g.dialog.content.height(1);
  3337. if (this.resizable) this.resizable.set({ disabled: true });
  3338. },
  3339. //展开
  3340. extend: function ()
  3341. {
  3342. var g = this, p = this.options;
  3343. if (!g.wintoggle) return;
  3344. var contentHeight = g._height - g._borderY - g.dialog.buttons.outerHeight();
  3345. if (p.slide)
  3346. g.dialog.content.animate({ height: contentHeight }, p.slide);
  3347. else
  3348. g.dialog.content.height(contentHeight);
  3349. if (this.resizable) this.resizable.set({ disabled: false });
  3350. },
  3351. _updateBtnsWidth: function ()
  3352. {
  3353. var g = this;
  3354. var btnscount = $(">div", g.dialog.winbtns).length;
  3355. g.dialog.winbtns.width(22 * btnscount);
  3356. },
  3357. _setLeft: function (value)
  3358. {
  3359. if (!this.dialog) return;
  3360. if (value != null)
  3361. this.dialog.css({ left: value });
  3362. },
  3363. _setTop: function (value)
  3364. {
  3365. if (!this.dialog) return;
  3366. if (value != null)
  3367. this.dialog.css({ top: value });
  3368. },
  3369. _setWidth: function (value)
  3370. {
  3371. if (!this.dialog) return;
  3372. if (value >= this._borderX)
  3373. {
  3374. this.dialog.body.width(value - this._borderX);
  3375. }
  3376. },
  3377. _setHeight: function (value)
  3378. {
  3379. var g = this, p = this.options;
  3380. if (!this.dialog) return;
  3381. if (value >= this._borderY)
  3382. {
  3383. var height = value - this._borderY - g.dialog.buttons.outerHeight();
  3384. g.dialog.content.height(height);
  3385. }
  3386. },
  3387. _setShowMax: function (value)
  3388. {
  3389. var g = this, p = this.options;
  3390. if (value)
  3391. {
  3392. if (!g.winmax)
  3393. {
  3394. g.winmax = $('<div class="l-dialog-winbtn l-dialog-max"></div>').appendTo(g.dialog.winbtns)
  3395. .hover(function ()
  3396. {
  3397. if ($(this).hasClass("l-dialog-recover"))
  3398. $(this).addClass("l-dialog-recover-over");
  3399. else
  3400. $(this).addClass("l-dialog-max-over");
  3401. }, function ()
  3402. {
  3403. $(this).removeClass("l-dialog-max-over l-dialog-recover-over");
  3404. }).click(function ()
  3405. {
  3406. if ($(this).hasClass("l-dialog-recover"))
  3407. g.recover();
  3408. else
  3409. g.max();
  3410. });
  3411. }
  3412. }
  3413. else if (g.winmax)
  3414. {
  3415. g.winmax.remove();
  3416. g.winmax = null;
  3417. }
  3418. g._updateBtnsWidth();
  3419. },
  3420. _setShowMin: function (value)
  3421. {
  3422. var g = this, p = this.options;
  3423. if (value)
  3424. {
  3425. if (!g.winmin)
  3426. {
  3427. g.winmin = $('<div class="l-dialog-winbtn l-dialog-min"></div>').appendTo(g.dialog.winbtns)
  3428. .hover(function ()
  3429. {
  3430. $(this).addClass("l-dialog-min-over");
  3431. }, function ()
  3432. {
  3433. $(this).removeClass("l-dialog-min-over");
  3434. }).click(function ()
  3435. {
  3436. g.min();
  3437. });
  3438. l.win.addTask(g);
  3439. }
  3440. }
  3441. else if (g.winmin)
  3442. {
  3443. g.winmin.remove();
  3444. g.winmin = null;
  3445. }
  3446. g._updateBtnsWidth();
  3447. },
  3448. _setShowToggle: function (value)
  3449. {
  3450. var g = this, p = this.options;
  3451. if (value)
  3452. {
  3453. if (!g.wintoggle)
  3454. {
  3455. g.wintoggle = $('<div class="l-dialog-winbtn l-dialog-collapse"></div>').appendTo(g.dialog.winbtns)
  3456. .hover(function ()
  3457. {
  3458. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  3459. if ($(this).hasClass("l-dialog-extend"))
  3460. $(this).addClass("l-dialog-extend-over");
  3461. else
  3462. $(this).addClass("l-dialog-collapse-over");
  3463. }, function ()
  3464. {
  3465. $(this).removeClass("l-dialog-extend-over l-dialog-collapse-over");
  3466. }).click(function ()
  3467. {
  3468. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  3469. if (g.wintoggle.hasClass("l-dialog-extend"))
  3470. {
  3471. if (g.trigger('extend') == false) return;
  3472. g.wintoggle.removeClass("l-dialog-extend");
  3473. g.extend();
  3474. g.trigger('extended');
  3475. }
  3476. else
  3477. {
  3478. if (g.trigger('collapse') == false) return;
  3479. g.wintoggle.addClass("l-dialog-extend");
  3480. g.collapse();
  3481. g.trigger('collapseed')
  3482. }
  3483. });
  3484. }
  3485. }
  3486. else if (g.wintoggle)
  3487. {
  3488. g.wintoggle.remove();
  3489. g.wintoggle = null;
  3490. }
  3491. },
  3492. //按下回车
  3493. enter: function ()
  3494. {
  3495. var g = this, p = this.options;
  3496. var isClose;
  3497. if (p.closeWhenEnter != undefined)
  3498. {
  3499. isClose = p.closeWhenEnter;
  3500. }
  3501. else if (p.type == "warn" || p.type == "error" || p.type == "success" || p.type == "question")
  3502. {
  3503. isClose = true;
  3504. }
  3505. if (isClose)
  3506. {
  3507. g.close();
  3508. }
  3509. },
  3510. esc: function ()
  3511. {
  3512. },
  3513. _removeDialog: function ()
  3514. {
  3515. var g = this, p = this.options;
  3516. if (p.showType && p.fixedType)
  3517. {
  3518. g.dialog.animate({ bottom: -1 * p.height }, function ()
  3519. {
  3520. g.dialog.remove();
  3521. });
  3522. } else
  3523. {
  3524. g.dialog.remove();
  3525. }
  3526. },
  3527. close: function ()
  3528. {
  3529. var g = this, p = this.options;
  3530. l.win.removeTask(this);
  3531. g.unmask();
  3532. g._removeDialog();
  3533. $('body').unbind('keydown.dialog');
  3534. },
  3535. _getVisible: function ()
  3536. {
  3537. return this.dialog.is(":visible");
  3538. },
  3539. _setUrl: function (url)
  3540. {
  3541. var g = this, p = this.options;
  3542. p.url = url;
  3543. if (p.load)
  3544. {
  3545. g.dialog.body.html("").load(p.url, function ()
  3546. {
  3547. g.trigger('loaded');
  3548. });
  3549. }
  3550. else if (g.jiframe)
  3551. {
  3552. g.jiframe.attr("src", p.url);
  3553. }
  3554. },
  3555. _setContent: function (content)
  3556. {
  3557. this.dialog.content.html(content);
  3558. },
  3559. _setTitle: function (value)
  3560. {
  3561. var g = this; var p = this.options;
  3562. if (value)
  3563. {
  3564. $(".l-dialog-title", g.dialog).html(value);
  3565. }
  3566. },
  3567. _hideDialog: function ()
  3568. {
  3569. var g = this, p = this.options;
  3570. if (p.showType && p.fixedType)
  3571. {
  3572. g.dialog.animate({ bottom: -1 * p.height }, function ()
  3573. {
  3574. g.dialog.hide();
  3575. });
  3576. } else
  3577. {
  3578. g.dialog.hide();
  3579. }
  3580. },
  3581. hidden: function ()
  3582. {
  3583. var g = this;
  3584. l.win.removeTask(g);
  3585. g.dialog.hide();
  3586. g.unmask();
  3587. },
  3588. show: function ()
  3589. {
  3590. var g = this, p = this.options;
  3591. g.mask();
  3592. if (p.fixedType)
  3593. {
  3594. if (p.showType)
  3595. {
  3596. g.dialog.css({ bottom: -1 * p.height }).addClass("l-dialog-fixed");
  3597. g.dialog.show().animate({ bottom: 0 });
  3598. }
  3599. else
  3600. {
  3601. g.dialog.show().css({ bottom: 0 });
  3602. }
  3603. }
  3604. else
  3605. {
  3606. g.dialog.show();
  3607. }
  3608. //前端显示
  3609. $.ligerui.win.setFront.ligerDefer($.ligerui.win, 100, [g]);
  3610. },
  3611. setUrl: function (url)
  3612. {
  3613. this._setUrl(url);
  3614. },
  3615. _saveStatus: function ()
  3616. {
  3617. var g = this;
  3618. g._width = g.dialog.body.width();
  3619. g._height = g.dialog.body.height();
  3620. var top = 0;
  3621. var left = 0;
  3622. if (!isNaN(parseInt(g.dialog.css('top'))))
  3623. top = parseInt(g.dialog.css('top'));
  3624. if (!isNaN(parseInt(g.dialog.css('left'))))
  3625. left = parseInt(g.dialog.css('left'));
  3626. g._top = top;
  3627. g._left = left;
  3628. },
  3629. _applyDrag: function ()
  3630. {
  3631. var g = this, p = this.options;
  3632. if ($.fn.ligerDrag)
  3633. g.draggable = g.dialog.ligerDrag({ handler: '.l-dialog-title', animate: false,
  3634. onStartDrag: function ()
  3635. {
  3636. l.win.setFront(g);
  3637. },
  3638. onStopDrag: function ()
  3639. {
  3640. if (p.target)
  3641. {
  3642. var triggers1 = l.find($.ligerui.controls.DateEditor);
  3643. var triggers2 = l.find($.ligerui.controls.ComboBox);
  3644. //更新所有下拉选择框的位置
  3645. $($.merge(triggers1, triggers2)).each(function ()
  3646. {
  3647. if (this.updateSelectBoxPosition)
  3648. this.updateSelectBoxPosition();
  3649. });
  3650. }
  3651. g._saveStatus();
  3652. }
  3653. });
  3654. },
  3655. _onReisze: function ()
  3656. {
  3657. var g = this, p = this.options;
  3658. if (p.target)
  3659. {
  3660. var manager = $(p.target).liger();
  3661. if (!manager) manager = $(p.target).find(":first").liger();
  3662. if (!manager) return;
  3663. var contentHeight = g.dialog.content.height();
  3664. var contentWidth = g.dialog.content.width();
  3665. manager.trigger('resize', [{ width: contentWidth, height: contentHeight}]);
  3666. }
  3667. },
  3668. _applyResize: function ()
  3669. {
  3670. var g = this, p = this.options;
  3671. if ($.fn.ligerResizable)
  3672. {
  3673. g.resizable = g.dialog.ligerResizable({
  3674. onStopResize: function (current, e)
  3675. {
  3676. var top = 0;
  3677. var left = 0;
  3678. if (!isNaN(parseInt(g.dialog.css('top'))))
  3679. top = parseInt(g.dialog.css('top'));
  3680. if (!isNaN(parseInt(g.dialog.css('left'))))
  3681. left = parseInt(g.dialog.css('left'));
  3682. if (current.diffLeft)
  3683. {
  3684. g.set({ left: left + current.diffLeft });
  3685. }
  3686. if (current.diffTop)
  3687. {
  3688. g.set({ top: top + current.diffTop });
  3689. }
  3690. if (current.newWidth)
  3691. {
  3692. g.set({ width: current.newWidth });
  3693. g.dialog.body.css({ width: current.newWidth - g._borderX });
  3694. }
  3695. if (current.newHeight)
  3696. {
  3697. g.set({ height: current.newHeight });
  3698. }
  3699. g._onReisze();
  3700. g._saveStatus();
  3701. return false;
  3702. }, animate: false
  3703. });
  3704. }
  3705. },
  3706. _setImage: function ()
  3707. {
  3708. var g = this, p = this.options;
  3709. if (p.type)
  3710. {
  3711. if (p.type == 'success' || p.type == 'donne' || p.type == 'ok')
  3712. {
  3713. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-donne").show();
  3714. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  3715. }
  3716. else if (p.type == 'error')
  3717. {
  3718. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-error").show();
  3719. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  3720. }
  3721. else if (p.type == 'warn')
  3722. {
  3723. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-warn").show();
  3724. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  3725. }
  3726. else if (p.type == 'question')
  3727. {
  3728. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-question").show();
  3729. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 40 });
  3730. }
  3731. }
  3732. }
  3733. });
  3734. l.controls.Dialog.prototype.hide = l.controls.Dialog.prototype.hidden;
  3735. $.ligerDialog.open = function (p)
  3736. {
  3737. return $.ligerDialog(p);
  3738. };
  3739. $.ligerDialog.close = function ()
  3740. {
  3741. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  3742. for (var i in dialogs)
  3743. {
  3744. var d = dialogs[i];
  3745. d.destroy.ligerDefer(d, 5);
  3746. }
  3747. l.win.unmask();
  3748. };
  3749. $.ligerDialog.show = function (p)
  3750. {
  3751. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  3752. if (dialogs.length)
  3753. {
  3754. for (var i in dialogs)
  3755. {
  3756. dialogs[i].show();
  3757. return;
  3758. }
  3759. }
  3760. return $.ligerDialog(p);
  3761. };
  3762. $.ligerDialog.hide = function ()
  3763. {
  3764. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  3765. for (var i in dialogs)
  3766. {
  3767. var d = dialogs[i];
  3768. d.hide();
  3769. }
  3770. };
  3771. $.ligerDialog.tip = function (options)
  3772. {
  3773. options = $.extend({
  3774. showType: 'slide',
  3775. width: 240,
  3776. modal: false,
  3777. height: 100
  3778. }, options || {});
  3779. $.extend(options, {
  3780. fixedType: 'se',
  3781. type: 'none',
  3782. isDrag: false,
  3783. isResize: false,
  3784. showMax: false,
  3785. showToggle: false,
  3786. showMin: false
  3787. });
  3788. return $.ligerDialog.open(options);
  3789. };
  3790. $.ligerDialog.alert = function (content, title, type, callback)
  3791. {
  3792. content = content || "";
  3793. if (typeof (title) == "function")
  3794. {
  3795. callback = title;
  3796. type = null;
  3797. }
  3798. else if (typeof (type) == "function")
  3799. {
  3800. callback = type;
  3801. }
  3802. var btnclick = function (item, Dialog, index)
  3803. {
  3804. Dialog.close();
  3805. if (callback)
  3806. callback(item, Dialog, index);
  3807. };
  3808. p = {
  3809. content: content,
  3810. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick}]
  3811. };
  3812. if (typeof (title) == "string" && title != "") p.title = title;
  3813. if (typeof (type) == "string" && type != "") p.type = type;
  3814. $.extend(p, {
  3815. showMax: false,
  3816. showToggle: false,
  3817. showMin: false
  3818. });
  3819. return $.ligerDialog(p);
  3820. };
  3821. $.ligerDialog.confirm = function (content, title, callback)
  3822. {
  3823. if (typeof (title) == "function")
  3824. {
  3825. callback = title;
  3826. type = null;
  3827. }
  3828. var btnclick = function (item, Dialog)
  3829. {
  3830. Dialog.close();
  3831. if (callback)
  3832. {
  3833. callback(item.type == 'ok');
  3834. }
  3835. };
  3836. p = {
  3837. type: 'question',
  3838. content: content,
  3839. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'ok' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no'}]
  3840. };
  3841. if (typeof (title) == "string" && title != "") p.title = title;
  3842. $.extend(p, {
  3843. showMax: false,
  3844. showToggle: false,
  3845. showMin: false
  3846. });
  3847. return $.ligerDialog(p);
  3848. };
  3849. $.ligerDialog.warning = function (content, title, callback)
  3850. {
  3851. if (typeof (title) == "function")
  3852. {
  3853. callback = title;
  3854. type = null;
  3855. }
  3856. var btnclick = function (item, Dialog)
  3857. {
  3858. Dialog.close();
  3859. if (callback)
  3860. {
  3861. callback(item.type);
  3862. }
  3863. };
  3864. p = {
  3865. type: 'question',
  3866. content: content,
  3867. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel'}]
  3868. };
  3869. if (typeof (title) == "string" && title != "") p.title = title;
  3870. $.extend(p, {
  3871. showMax: false,
  3872. showToggle: false,
  3873. showMin: false
  3874. });
  3875. return $.ligerDialog(p);
  3876. };
  3877. $.ligerDialog.waitting = function (title)
  3878. {
  3879. title = title || $.ligerDefaults.Dialog.waittingMessage;
  3880. return $.ligerDialog.open({ cls: 'l-dialog-waittingdialog', type: 'none', content: '<div style="padding:4px">' + title + '</div>', allowClose: false });
  3881. };
  3882. $.ligerDialog.closeWaitting = function ()
  3883. {
  3884. var dialogs = l.find(l.controls.Dialog);
  3885. for (var i in dialogs)
  3886. {
  3887. var d = dialogs[i];
  3888. if (d.dialog.hasClass("l-dialog-waittingdialog"))
  3889. d.close();
  3890. }
  3891. };
  3892. $.ligerDialog.success = function (content, title, onBtnClick)
  3893. {
  3894. return $.ligerDialog.alert(content, title, 'success', onBtnClick);
  3895. };
  3896. $.ligerDialog.error = function (content, title, onBtnClick)
  3897. {
  3898. return $.ligerDialog.alert(content, title, 'error', onBtnClick);
  3899. };
  3900. $.ligerDialog.warn = function (content, title, onBtnClick)
  3901. {
  3902. return $.ligerDialog.alert(content, title, 'warn', onBtnClick);
  3903. };
  3904. $.ligerDialog.question = function (content, title)
  3905. {
  3906. return $.ligerDialog.alert(content, title, 'question');
  3907. };
  3908. $.ligerDialog.prompt = function (title, value, multi, callback)
  3909. {
  3910. var target = $('<input type="text" class="l-dialog-inputtext"/>');
  3911. if (typeof (multi) == "function")
  3912. {
  3913. callback = multi;
  3914. }
  3915. if (typeof (value) == "function")
  3916. {
  3917. callback = value;
  3918. }
  3919. else if (typeof (value) == "boolean")
  3920. {
  3921. multi = value;
  3922. }
  3923. if (typeof (multi) == "boolean" && multi)
  3924. {
  3925. target = $('<textarea class="l-dialog-textarea"></textarea>');
  3926. }
  3927. if (typeof (value) == "string" || typeof (value) == "int")
  3928. {
  3929. target.val(value);
  3930. }
  3931. var btnclick = function (item, Dialog, index)
  3932. {
  3933. Dialog.close();
  3934. if (callback)
  3935. {
  3936. callback(item.type == 'yes', target.val());
  3937. }
  3938. }
  3939. p = {
  3940. title: title,
  3941. target: target,
  3942. width: 320,
  3943. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel'}]
  3944. };
  3945. return $.ligerDialog(p);
  3946. };
  3947. })(jQuery);/**
  3948. * jQuery ligerUI 1.1.9
  3949. *
  3950. * http://ligerui.com
  3951. *
  3952. * Author daomi 2012 [ gd_star@163.com ]
  3953. *
  3954. */
  3955. (function ($)
  3956. {
  3957. var l = $.ligerui;
  3958. $.fn.ligerDrag = function (options)
  3959. {
  3960. return l.run.call(this, "ligerDrag", arguments,
  3961. {
  3962. idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
  3963. }
  3964. );
  3965. };
  3966. $.fn.ligerGetDragManager = function ()
  3967. {
  3968. return l.run.call(this, "ligerGetDragManager", arguments,
  3969. {
  3970. idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
  3971. });
  3972. };
  3973. $.ligerDefaults.Drag = {
  3974. onStartDrag: false,
  3975. onDrag: false,
  3976. onStopDrag: false,
  3977. handler: null,
  3978. //代理 拖动时的主体,可以是'clone'或者是函数,放回jQuery 对象
  3979. proxy: true,
  3980. revert: false,
  3981. animate: true,
  3982. onRevert: null,
  3983. onEndRevert: null,
  3984. //接收区域 jQuery对象或者jQuery选择字符
  3985. receive: null,
  3986. //进入区域
  3987. onDragEnter: null,
  3988. //在区域移动
  3989. onDragOver: null,
  3990. //离开区域
  3991. onDragLeave: null,
  3992. //在区域释放
  3993. onDrop: null,
  3994. disabled: false,
  3995. proxyX: null, //代理相对鼠标指针的位置,如果不设置则对应target的left
  3996. proxyY: null
  3997. };
  3998. l.controls.Drag = function (options)
  3999. {
  4000. l.controls.Drag.base.constructor.call(this, null, options);
  4001. };
  4002. l.controls.Drag.ligerExtend(l.core.UIComponent, {
  4003. __getType: function ()
  4004. {
  4005. return 'Drag';
  4006. },
  4007. __idPrev: function ()
  4008. {
  4009. return 'Drag';
  4010. },
  4011. _render: function ()
  4012. {
  4013. var g = this, p = this.options;
  4014. this.set(p);
  4015. g.cursor = "move";
  4016. g.handler.css('cursor', g.cursor);
  4017. g.handler.bind('mousedown.drag', function (e)
  4018. {
  4019. if (p.disabled) return;
  4020. if (e.button == 2) return;
  4021. g._start.call(g, e);
  4022. }).bind('mousemove.drag', function ()
  4023. {
  4024. if (p.disabled) return;
  4025. g.handler.css('cursor', g.cursor);
  4026. });
  4027. },
  4028. _rendered: function ()
  4029. {
  4030. this.options.target.ligeruidragid = this.id;
  4031. },
  4032. _start: function (e)
  4033. {
  4034. var g = this, p = this.options;
  4035. if (g.reverting) return;
  4036. if (p.disabled) return;
  4037. g.current = {
  4038. target: g.target,
  4039. left: g.target.offset().left,
  4040. top: g.target.offset().top,
  4041. startX: e.pageX || e.screenX,
  4042. startY: e.pageY || e.clientY
  4043. };
  4044. if (g.trigger('startDrag', [g.current, e]) == false) return false;
  4045. g.cursor = "move";
  4046. g._createProxy(p.proxy, e);
  4047. //代理没有创建成功
  4048. if (p.proxy && !g.proxy) return false;
  4049. (g.proxy || g.handler).css('cursor', g.cursor);
  4050. $(document).bind("selectstart.drag", function () { return false; });
  4051. $(document).bind('mousemove.drag', function ()
  4052. {
  4053. g._drag.apply(g, arguments);
  4054. });
  4055. l.draggable.dragging = true;
  4056. $(document).bind('mouseup.drag', function ()
  4057. {
  4058. l.draggable.dragging = false;
  4059. g._stop.apply(g, arguments);
  4060. });
  4061. },
  4062. _drag: function (e)
  4063. {
  4064. var g = this, p = this.options;
  4065. if (!g.current) return;
  4066. var pageX = e.pageX || e.screenX;
  4067. var pageY = e.pageY || e.screenY;
  4068. g.current.diffX = pageX - g.current.startX;
  4069. g.current.diffY = pageY - g.current.startY;
  4070. (g.proxy || g.handler).css('cursor', g.cursor);
  4071. if (g.receive)
  4072. {
  4073. g.receive.each(function (i, obj)
  4074. {
  4075. var receive = $(obj);
  4076. var xy = receive.offset();
  4077. if (pageX > xy.left && pageX < xy.left + receive.width()
  4078. && pageY > xy.top && pageY < xy.top + receive.height())
  4079. {
  4080. if (!g.receiveEntered[i])
  4081. {
  4082. g.receiveEntered[i] = true;
  4083. g.trigger('dragEnter', [obj, g.proxy || g.target, e]);
  4084. }
  4085. else
  4086. {
  4087. g.trigger('dragOver', [obj, g.proxy || g.target, e]);
  4088. }
  4089. }
  4090. else if (g.receiveEntered[i])
  4091. {
  4092. g.receiveEntered[i] = false;
  4093. g.trigger('dragLeave', [obj, g.proxy || g.target, e]);
  4094. }
  4095. });
  4096. }
  4097. if (g.hasBind('drag'))
  4098. {
  4099. if (g.trigger('drag', [g.current, e]) != false)
  4100. {
  4101. g._applyDrag();
  4102. }
  4103. else
  4104. {
  4105. g._removeProxy();
  4106. }
  4107. }
  4108. else
  4109. {
  4110. g._applyDrag();
  4111. }
  4112. },
  4113. _stop: function (e)
  4114. {
  4115. var g = this, p = this.options;
  4116. $(document).unbind('mousemove.drag');
  4117. $(document).unbind('mouseup.drag');
  4118. $(document).unbind("selectstart.drag");
  4119. if (g.receive)
  4120. {
  4121. g.receive.each(function (i, obj)
  4122. {
  4123. if (g.receiveEntered[i])
  4124. {
  4125. g.trigger('drop', [obj, g.proxy || g.target, e]);
  4126. }
  4127. });
  4128. }
  4129. if (g.proxy)
  4130. {
  4131. if (p.revert)
  4132. {
  4133. if (g.hasBind('revert'))
  4134. {
  4135. if (g.trigger('revert', [g.current, e]) != false)
  4136. g._revert(e);
  4137. else
  4138. g._removeProxy();
  4139. }
  4140. else
  4141. {
  4142. g._revert(e);
  4143. }
  4144. }
  4145. else
  4146. {
  4147. g._applyDrag(g.target);
  4148. g._removeProxy();
  4149. }
  4150. }
  4151. g.cursor = 'move';
  4152. g.trigger('stopDrag', [g.current, e]);
  4153. g.current = null;
  4154. g.handler.css('cursor', g.cursor);
  4155. },
  4156. _revert: function (e)
  4157. {
  4158. var g = this;
  4159. g.reverting = true;
  4160. g.proxy.animate({
  4161. left: g.current.left,
  4162. top: g.current.top
  4163. }, function ()
  4164. {
  4165. g.reverting = false;
  4166. g._removeProxy();
  4167. g.trigger('endRevert', [g.current, e]);
  4168. g.current = null;
  4169. });
  4170. },
  4171. _applyDrag: function (applyResultBody)
  4172. {
  4173. var g = this, p = this.options;
  4174. applyResultBody = applyResultBody || g.proxy || g.target;
  4175. var cur = {}, changed = false;
  4176. var noproxy = applyResultBody == g.target;
  4177. if (g.current.diffX)
  4178. {
  4179. if (noproxy || p.proxyX == null)
  4180. cur.left = g.current.left + g.current.diffX;
  4181. else
  4182. cur.left = g.current.startX + p.proxyX + g.current.diffX;
  4183. changed = true;
  4184. }
  4185. if (g.current.diffY)
  4186. {
  4187. if (noproxy || p.proxyY == null)
  4188. cur.top = g.current.top + g.current.diffY;
  4189. else
  4190. cur.top = g.current.startY + p.proxyY + g.current.diffY;
  4191. changed = true;
  4192. }
  4193. if (applyResultBody == g.target && g.proxy && p.animate)
  4194. {
  4195. g.reverting = true;
  4196. applyResultBody.animate(cur, function ()
  4197. {
  4198. g.reverting = false;
  4199. });
  4200. }
  4201. else
  4202. {
  4203. applyResultBody.css(cur);
  4204. }
  4205. },
  4206. _setReceive: function (receive)
  4207. {
  4208. this.receiveEntered = {};
  4209. if (!receive) return;
  4210. if (typeof receive == 'string')
  4211. this.receive = $(receive);
  4212. else
  4213. this.receive = receive;
  4214. },
  4215. _setHandler: function (handler)
  4216. {
  4217. var g = this, p = this.options;
  4218. if (!handler)
  4219. g.handler = $(p.target);
  4220. else
  4221. g.handler = (typeof handler == 'string' ? $(handler, p.target) : handler);
  4222. },
  4223. _setTarget: function (target)
  4224. {
  4225. this.target = $(target);
  4226. },
  4227. _setCursor: function (cursor)
  4228. {
  4229. this.cursor = cursor;
  4230. (this.proxy || this.handler).css('cursor', cursor);
  4231. },
  4232. _createProxy: function (proxy, e)
  4233. {
  4234. if (!proxy) return;
  4235. var g = this, p = this.options;
  4236. if (typeof proxy == 'function')
  4237. {
  4238. g.proxy = proxy.call(this.options.target, g, e);
  4239. }
  4240. else if (proxy == 'clone')
  4241. {
  4242. g.proxy = g.target.clone().css('position', 'absolute');
  4243. g.proxy.appendTo('body');
  4244. }
  4245. else
  4246. {
  4247. g.proxy = $("<div class='l-draggable'></div>");
  4248. g.proxy.width(g.target.width()).height(g.target.height())
  4249. g.proxy.attr("dragid", g.id).appendTo('body');
  4250. }
  4251. g.proxy.css({
  4252. left: p.proxyX == null ? g.current.left : g.current.startX + p.proxyX,
  4253. top: p.proxyY == null ? g.current.top : g.current.startY + p.proxyY
  4254. }).show();
  4255. },
  4256. _removeProxy: function ()
  4257. {
  4258. var g = this;
  4259. if (g.proxy)
  4260. {
  4261. g.proxy.remove();
  4262. g.proxy = null;
  4263. }
  4264. }
  4265. });
  4266. })(jQuery);/**
  4267. * jQuery ligerUI 1.1.9
  4268. *
  4269. * http://ligerui.com
  4270. *
  4271. * Author daomi 2012 [ gd_star@163.com ]
  4272. *
  4273. */
  4274. (function ($)
  4275. {
  4276. $.fn.ligerEasyTab = function ()
  4277. {
  4278. return $.ligerui.run.call(this, "ligerEasyTab", arguments);
  4279. };
  4280. $.fn.ligerGetEasyTabManager = function ()
  4281. {
  4282. return $.ligerui.run.call(this, "ligerGetEasyTabManager", arguments);
  4283. };
  4284. $.ligerDefaults.EasyTab = {};
  4285. $.ligerMethos.EasyTab = {};
  4286. $.ligerui.controls.EasyTab = function (element, options)
  4287. {
  4288. $.ligerui.controls.EasyTab.base.constructor.call(this, element, options);
  4289. };
  4290. $.ligerui.controls.EasyTab.ligerExtend($.ligerui.core.UIComponent, {
  4291. __getType: function ()
  4292. {
  4293. return 'EasyTab';
  4294. },
  4295. __idPrev: function ()
  4296. {
  4297. return 'EasyTab';
  4298. },
  4299. _extendMethods: function ()
  4300. {
  4301. return $.ligerMethos.EasyTab;
  4302. },
  4303. _render: function ()
  4304. {
  4305. var g = this, p = this.options;
  4306. g.tabs = $(this.element);
  4307. g.tabs.addClass("l-easytab");
  4308. var selectedIndex = 0;
  4309. if ($("> div[lselected=true]", g.tabs).length > 0)
  4310. selectedIndex = $("> div", g.tabs).index($("> div[lselected=true]", g.tabs));
  4311. g.tabs.ul = $('<ul class="l-easytab-header"></ul>');
  4312. $("> div", g.tabs).each(function (i, box)
  4313. {
  4314. var li = $('<li><span></span></li>');
  4315. if (i == selectedIndex)
  4316. $("span", li).addClass("l-selected");
  4317. if ($(box).attr("title"))
  4318. $("span", li).html($(box).attr("title"));
  4319. g.tabs.ul.append(li);
  4320. if (!$(box).hasClass("l-easytab-panelbox")) $(box).addClass("l-easytab-panelbox");
  4321. });
  4322. g.tabs.ul.prependTo(g.tabs);
  4323. //init
  4324. $(".l-easytab-panelbox:eq(" + selectedIndex + ")", g.tabs).show().siblings(".l-easytab-panelbox").hide();
  4325. //add even
  4326. $("> ul:first span", g.tabs).click(function ()
  4327. {
  4328. if ($(this).hasClass("l-selected")) return;
  4329. var i = $("> ul:first span", g.tabs).index(this);
  4330. $(this).addClass("l-selected").parent().siblings().find("span.l-selected").removeClass("l-selected");
  4331. $(".l-easytab-panelbox:eq(" + i + ")", g.tabs).show().siblings(".l-easytab-panelbox").hide();
  4332. }).not("l-selected").hover(function ()
  4333. {
  4334. $(this).addClass("l-over");
  4335. }, function ()
  4336. {
  4337. $(this).removeClass("l-over");
  4338. });
  4339. g.set(p);
  4340. }
  4341. });
  4342. })(jQuery);/**
  4343. * jQuery ligerUI 1.1.9
  4344. *
  4345. * http://ligerui.com
  4346. *
  4347. * Author daomi 2012 [ gd_star@163.com ]
  4348. *
  4349. */
  4350. (function ($)
  4351. {
  4352. $.fn.ligerFilter = function ()
  4353. {
  4354. return $.ligerui.run.call(this, "ligerFilter", arguments);
  4355. };
  4356. $.fn.ligerGetFilterManager = function ()
  4357. {
  4358. return $.ligerui.run.call(this, "ligerGetFilterManager", arguments);
  4359. };
  4360. $.ligerDefaults.Filter = {
  4361. //字段列表
  4362. fields: [],
  4363. //字段类型 - 运算符 的对应关系
  4364. operators: {},
  4365. //自定义输入框(如下拉框、日期)
  4366. editors: {}
  4367. };
  4368. $.ligerDefaults.FilterString = {
  4369. strings: {
  4370. "and": "并且",
  4371. "or": "或者",
  4372. "equal": "相等",
  4373. "notequal": "不相等",
  4374. "startwith": "以..开始",
  4375. "endwith": "以..结束",
  4376. "like": "相似",
  4377. "greater": "大于",
  4378. "greaterorequal": "大于或等于",
  4379. "less": "小于",
  4380. "lessorequal": "小于或等于",
  4381. "in": "包括在...",
  4382. "notin": "不包括...",
  4383. "addgroup": "增加分组",
  4384. "addrule": "增加条件",
  4385. "deletegroup": "删除分组"
  4386. }
  4387. };
  4388. $.ligerDefaults.Filter.operators['string'] =
  4389. $.ligerDefaults.Filter.operators['text'] =
  4390. ["equal", "notequal", "startwith", "endwith", "like", "greater", "greaterorequal", "less", "lessorequal", "in", "notin"];
  4391. $.ligerDefaults.Filter.operators['number'] =
  4392. $.ligerDefaults.Filter.operators['int'] =
  4393. $.ligerDefaults.Filter.operators['float'] =
  4394. $.ligerDefaults.Filter.operators['date'] =
  4395. ["equal", "notequal", "greater", "greaterorequal", "less", "lessorequal", "in", "notin"];
  4396. $.ligerDefaults.Filter.editors['string'] =
  4397. {
  4398. create: function (container, field)
  4399. {
  4400. var input = $("<input type='text'/>");
  4401. container.append(input);
  4402. input.ligerTextBox(field.editor.options || {});
  4403. return input;
  4404. },
  4405. setValue: function (input, value)
  4406. {
  4407. input.val(value);
  4408. },
  4409. getValue: function (input)
  4410. {
  4411. return input.liger('option', 'value');
  4412. },
  4413. destroy: function (input)
  4414. {
  4415. input.liger('destroy');
  4416. }
  4417. };
  4418. $.ligerDefaults.Filter.editors['date'] =
  4419. {
  4420. create: function (container, field)
  4421. {
  4422. var input = $("<input type='text'/>");
  4423. container.append(input);
  4424. input.ligerDateEditor(field.editor.options || {});
  4425. return input;
  4426. },
  4427. setValue: function (input, value)
  4428. {
  4429. input.liger('option', 'value', value);
  4430. },
  4431. getValue: function (input, field)
  4432. {
  4433. return input.liger('option', 'value');
  4434. },
  4435. destroy: function (input)
  4436. {
  4437. input.liger('destroy');
  4438. }
  4439. };
  4440. $.ligerDefaults.Filter.editors['number'] =
  4441. {
  4442. create: function (container, field)
  4443. {
  4444. var input = $("<input type='text'/>");
  4445. container.append(input);
  4446. var options = {
  4447. minValue: field.editor.minValue,
  4448. maxValue: field.editor.maxValue
  4449. };
  4450. input.ligerSpinner($.extend(options, field.editor.options || {}));
  4451. return input;
  4452. },
  4453. setValue: function (input, value)
  4454. {
  4455. input.val(value);
  4456. },
  4457. getValue: function (input, field)
  4458. {
  4459. var isInt = field.editor.type == "int";
  4460. if (isInt)
  4461. return parseInt(input.val(), 10);
  4462. else
  4463. return parseFloat(input.val());
  4464. },
  4465. destroy: function (input)
  4466. {
  4467. input.liger('destroy');
  4468. }
  4469. };
  4470. $.ligerDefaults.Filter.editors['combobox'] =
  4471. {
  4472. create: function (container, field)
  4473. {
  4474. var input = $("<input type='text'/>");
  4475. container.append(input);
  4476. var options = {
  4477. data: field.data,
  4478. slide: false,
  4479. valueField: field.editor.valueField || field.editor.valueColumnName,
  4480. textField: field.editor.textField || field.editor.displayColumnName
  4481. };
  4482. $.extend(options, field.editor.options || {});
  4483. input.ligerComboBox(options);
  4484. return input;
  4485. },
  4486. setValue: function (input, value)
  4487. {
  4488. input.liger('option', 'value', value);
  4489. },
  4490. getValue: function (input)
  4491. {
  4492. return input.liger('option', 'value');
  4493. },
  4494. destroy: function (input)
  4495. {
  4496. input.liger('destroy');
  4497. }
  4498. };
  4499. //过滤器组件
  4500. $.ligerui.controls.Filter = function (element, options)
  4501. {
  4502. $.ligerui.controls.Filter.base.constructor.call(this, element, options);
  4503. };
  4504. $.ligerui.controls.Filter.ligerExtend($.ligerui.core.UIComponent, {
  4505. __getType: function ()
  4506. {
  4507. return 'Filter'
  4508. },
  4509. __idPrev: function ()
  4510. {
  4511. return 'Filter';
  4512. },
  4513. _init: function ()
  4514. {
  4515. $.ligerui.controls.Filter.base._init.call(this);
  4516. },
  4517. _render: function ()
  4518. {
  4519. var g = this, p = this.options;
  4520. g.set(p);
  4521. //事件:增加分组
  4522. $("#" + g.id + " .addgroup").live('click', function ()
  4523. {
  4524. var jtable = $(this).parent().parent().parent().parent();
  4525. g.addGroup(jtable);
  4526. });
  4527. //事件:删除分组
  4528. $("#" + g.id + " .deletegroup").live('click', function ()
  4529. {
  4530. var jtable = $(this).parent().parent().parent().parent();
  4531. g.deleteGroup(jtable);
  4532. });
  4533. //事件:增加条件
  4534. $("#" + g.id + " .addrule").live('click', function ()
  4535. {
  4536. var jtable = $(this).parent().parent().parent().parent();
  4537. g.addRule(jtable);
  4538. });
  4539. //事件:删除条件
  4540. $("#" + g.id + " .deleterole").live('click', function ()
  4541. {
  4542. var rulerow = $(this).parent().parent();
  4543. g.deleteRule(rulerow);
  4544. });
  4545. },
  4546. //设置字段列表
  4547. _setFields: function (fields)
  4548. {
  4549. var g = this, p = this.options;
  4550. if (g.group) g.group.remove();
  4551. g.group = $(g._bulidGroupTableHtml()).appendTo(g.element);
  4552. },
  4553. //输入框列表
  4554. editors: {},
  4555. //输入框计算器
  4556. editorCounter: 0,
  4557. //增加分组
  4558. //@parm [jgroup] jQuery对象(主分组的table dom元素)
  4559. addGroup: function (jgroup)
  4560. {
  4561. var g = this, p = this.options;
  4562. jgroup = $(jgroup || g.group);
  4563. var lastrow = $(">tbody:first > tr:last", jgroup);
  4564. var groupHtmlArr = [];
  4565. groupHtmlArr.push('<tr class="l-filter-rowgroup"><td class="l-filter-cellgroup" colSpan="4">');
  4566. var altering = !jgroup.hasClass("l-filter-group-alt");
  4567. groupHtmlArr.push(g._bulidGroupTableHtml(altering, true));
  4568. groupHtmlArr.push('</td></tr>');
  4569. var row = $(groupHtmlArr.join(''));
  4570. lastrow.before(row);
  4571. return row.find("table:first");
  4572. },
  4573. //删除分组
  4574. deleteGroup: function (group)
  4575. {
  4576. var g = this, p = this.options;
  4577. $("td.l-filter-value", group).each(function ()
  4578. {
  4579. var rulerow = $(this).parent();
  4580. $("select.fieldsel", rulerow).unbind();
  4581. g.removeEditor(rulerow);
  4582. });
  4583. $(group).parent().parent().remove();
  4584. },
  4585. //删除编辑器
  4586. removeEditor: function (rulerow)
  4587. {
  4588. var g = this, p = this.options;
  4589. var type = $(rulerow).attr("editortype");
  4590. var id = $(rulerow).attr("editorid");
  4591. var editor = g.editors[id];
  4592. if (editor) p.editors[type].destroy(editor);
  4593. $("td.l-filter-value:first", rulerow).html("");
  4594. },
  4595. //设置规则
  4596. //@parm [group] 分组数据
  4597. //@parm [jgruop] 分组table dom jQuery对象
  4598. setData: function (group, jgroup)
  4599. {
  4600. var g = this, p = this.options;
  4601. jgroup = jgroup || g.group;
  4602. var lastrow = $(">tbody:first > tr:last", jgroup);
  4603. jgroup.find(">tbody:first > tr").not(lastrow).remove();
  4604. $("select:first", lastrow).val(group.op);
  4605. if (group.rules)
  4606. {
  4607. $(group.rules).each(function ()
  4608. {
  4609. var rulerow = g.addRule(jgroup);
  4610. rulerow.attr("fieldtype", this.type || "string");
  4611. $("select.opsel", rulerow).val(this.op);
  4612. $("select.fieldsel", rulerow).val(this.field).trigger('change');
  4613. var editorid = rulerow.attr("editorid");
  4614. if (editorid && g.editors[editorid])
  4615. {
  4616. var field = g.getField(this.field);
  4617. p.editors[field.editor.type].setValue(g.editors[editorid], this.value, field);
  4618. }
  4619. else
  4620. {
  4621. $(":text", rulerow).val(this.value);
  4622. }
  4623. });
  4624. }
  4625. if (group.groups)
  4626. {
  4627. $(group.groups).each(function ()
  4628. {
  4629. var subjgroup = g.addGroup(jgroup);
  4630. g.setData(this, subjgroup);
  4631. });
  4632. }
  4633. },
  4634. //增加一个条件
  4635. //@parm [jgroup] 分组的jQuery对象
  4636. addRule: function (jgroup)
  4637. {
  4638. var g = this, p = this.options;
  4639. jgroup = jgroup || g.group;
  4640. var lastrow = $(">tbody:first > tr:last", jgroup);
  4641. var rulerow = $(g._bulidRuleRowHtml());
  4642. lastrow.before(rulerow);
  4643. if (p.fields.length)
  4644. {
  4645. //如果第一个字段启用了自定义输入框
  4646. g.appendEditor(rulerow, p.fields[0]);
  4647. }
  4648. //事件:字段列表改变时
  4649. $("select.fieldsel", rulerow).bind('change', function ()
  4650. {
  4651. var jopsel = $(this).parent().next().find("select:first");
  4652. var fieldName = $(this).val();
  4653. var field = g.getField(fieldName);
  4654. //字段类型处理
  4655. var fieldType = field.type || "string";
  4656. var oldFieldtype = rulerow.attr("fieldtype");
  4657. if (fieldType != oldFieldtype)
  4658. {
  4659. jopsel.html(g._bulidOpSelectOptionsHtml(fieldType));
  4660. rulerow.attr("fieldtype", fieldType);
  4661. }
  4662. //当前的编辑器
  4663. var editorType = null;
  4664. //上一次的编辑器
  4665. var oldEditorType = rulerow.attr("editortype");
  4666. if (g.enabledEditor(field)) editorType = field.editor.type;
  4667. if (oldEditorType)
  4668. {
  4669. //如果存在旧的输入框
  4670. g.removeEditor(rulerow);
  4671. }
  4672. if (editorType)
  4673. {
  4674. //如果当前选择的字段定义了输入框
  4675. g.appendEditor(rulerow, field);
  4676. } else
  4677. {
  4678. rulerow.removeAttr("editortype").removeAttr("editorid");
  4679. $("td.l-filter-value:first", rulerow).html('<input type="text" class="valtxt" />');
  4680. }
  4681. });
  4682. return rulerow;
  4683. },
  4684. //删除一个条件
  4685. deleteRule: function (rulerow)
  4686. {
  4687. $("select.fieldsel", rulerow).unbind();
  4688. this.removeEditor(rulerow);
  4689. $(rulerow).remove();
  4690. },
  4691. //附加一个输入框
  4692. appendEditor: function (rulerow, field)
  4693. {
  4694. var g = this, p = this.options;
  4695. if (g.enabledEditor(field))
  4696. {
  4697. var cell = $("td.l-filter-value:first", rulerow).html("");
  4698. var editor = p.editors[field.editor.type];
  4699. g.editors[++g.editorCounter] = editor.create(cell, field);
  4700. rulerow.attr("editortype", field.editor.type).attr("editorid", g.editorCounter);
  4701. }
  4702. },
  4703. //获取分组数据
  4704. getData: function (group)
  4705. {
  4706. var g = this, p = this.options;
  4707. group = group || g.group;
  4708. var groupData = {};
  4709. $("> tbody > tr", group).each(function (i, row)
  4710. {
  4711. var rowlast = $(row).hasClass("l-filter-rowlast");
  4712. var rowgroup = $(row).hasClass("l-filter-rowgroup");
  4713. if (rowgroup)
  4714. {
  4715. var groupTable = $("> td:first > table:first", row);
  4716. if (groupTable.length)
  4717. {
  4718. if (!groupData.groups) groupData.groups = [];
  4719. groupData.groups.push(g.getData(groupTable));
  4720. }
  4721. }
  4722. else if (rowlast)
  4723. {
  4724. groupData.op = $(".groupopsel:first", row).val();
  4725. }
  4726. else
  4727. {
  4728. var fieldName = $("select.fieldsel:first", row).val();
  4729. var field = g.getField(fieldName);
  4730. var op = $(".opsel:first", row).val();
  4731. var value = g._getRuleValue(row, field);
  4732. var type = $(row).attr("fieldtype") || "string";
  4733. if (!groupData.rules) groupData.rules = [];
  4734. groupData.rules.push({
  4735. field: fieldName, op: op, value: value, type: type
  4736. });
  4737. }
  4738. });
  4739. return groupData;
  4740. },
  4741. _getRuleValue: function (rulerow, field)
  4742. {
  4743. var g = this, p = this.options;
  4744. var editorid = $(rulerow).attr("editorid");
  4745. var editortype = $(rulerow).attr("editortype");
  4746. var editor = g.editors[editorid];
  4747. if (editor)
  4748. return p.editors[editortype].getValue(editor, field);
  4749. return $(".valtxt:first", rulerow).val();
  4750. },
  4751. //判断某字段是否启用自定义的输入框
  4752. enabledEditor: function (field)
  4753. {
  4754. var g = this, p = this.options;
  4755. if (!field.editor || !field.editor.type) return false;
  4756. return (field.editor.type in p.editors);
  4757. },
  4758. //根据fieldName 获取 字段
  4759. getField: function (fieldname)
  4760. {
  4761. var g = this, p = this.options;
  4762. for (var i = 0, l = p.fields.length; i < l; i++)
  4763. {
  4764. var field = p.fields[i];
  4765. if (field.name == fieldname) return field;
  4766. }
  4767. return null;
  4768. },
  4769. //获取一个分组的html
  4770. _bulidGroupTableHtml: function (altering, allowDelete)
  4771. {
  4772. var g = this, p = this.options;
  4773. var tableHtmlArr = [];
  4774. tableHtmlArr.push('<table cellpadding="0" cellspacing="0" border="0" class="l-filter-group');
  4775. if (altering)
  4776. tableHtmlArr.push(' l-filter-group-alt');
  4777. tableHtmlArr.push('"><tbody>');
  4778. tableHtmlArr.push('<tr class="l-filter-rowlast"><td class="l-filter-rowlastcell" align="right" colSpan="4">');
  4779. //and or
  4780. tableHtmlArr.push('<select class="groupopsel">');
  4781. tableHtmlArr.push('<option value="and">' + p.strings['and'] + '</option>');
  4782. tableHtmlArr.push('<option value="or">' + p.strings['or'] + '</option>');
  4783. tableHtmlArr.push('</select>');
  4784. //add group
  4785. tableHtmlArr.push('<input type="button" value="' + p.strings['addgroup'] + '" class="addgroup">');
  4786. //add rule
  4787. tableHtmlArr.push('<input type="button" value="' + p.strings['addrule'] + '" class="addrule">');
  4788. if (allowDelete)
  4789. tableHtmlArr.push('<input type="button" value="' + p.strings['deletegroup'] + '" class="deletegroup">');
  4790. tableHtmlArr.push('</td></tr>');
  4791. tableHtmlArr.push('</tbody></table>');
  4792. return tableHtmlArr.join('');
  4793. },
  4794. //获取字段值规则的html
  4795. _bulidRuleRowHtml: function (fields)
  4796. {
  4797. var g = this, p = this.options;
  4798. fields = fields || p.fields;
  4799. var rowHtmlArr = [];
  4800. var fieldType = fields[0].type || "string";
  4801. rowHtmlArr.push('<tr fieldtype="' + fieldType + '"><td class="l-filter-column">');
  4802. rowHtmlArr.push('<select class="fieldsel">');
  4803. for (var i = 0, l = fields.length; i < l; i++)
  4804. {
  4805. var field = fields[i];
  4806. rowHtmlArr.push('<option value="' + field.name + '"');
  4807. if (i == 0) rowHtmlArr.push(" selected ");
  4808. rowHtmlArr.push('>');
  4809. rowHtmlArr.push(field.display);
  4810. rowHtmlArr.push('</option>');
  4811. }
  4812. rowHtmlArr.push("</select>");
  4813. rowHtmlArr.push('</td>');
  4814. rowHtmlArr.push('<td class="l-filter-op">');
  4815. rowHtmlArr.push('<select class="opsel">');
  4816. rowHtmlArr.push(g._bulidOpSelectOptionsHtml(fieldType));
  4817. rowHtmlArr.push('</select>');
  4818. rowHtmlArr.push('</td>');
  4819. rowHtmlArr.push('<td class="l-filter-value">');
  4820. rowHtmlArr.push('<input type="text" class="valtxt" />');
  4821. rowHtmlArr.push('</td>');
  4822. rowHtmlArr.push('<td>');
  4823. rowHtmlArr.push('<div class="l-icon-cross deleterole"></div>');
  4824. rowHtmlArr.push('</td>');
  4825. rowHtmlArr.push('</tr>');
  4826. return rowHtmlArr.join('');
  4827. },
  4828. //获取一个运算符选择框的html
  4829. _bulidOpSelectOptionsHtml: function (fieldType)
  4830. {
  4831. var g = this, p = this.options;
  4832. var ops = p.operators[fieldType];
  4833. var opHtmlArr = [];
  4834. for (var i = 0, l = ops.length; i < l; i++)
  4835. {
  4836. var op = ops[i];
  4837. opHtmlArr[opHtmlArr.length] = '<option value="' + op + '">';
  4838. opHtmlArr[opHtmlArr.length] = p.strings[op];
  4839. opHtmlArr[opHtmlArr.length] = '</option>';
  4840. }
  4841. return opHtmlArr.join('');
  4842. }
  4843. });
  4844. })(jQuery);/**
  4845. * jQuery ligerUI 1.1.9
  4846. *
  4847. * http://ligerui.com
  4848. *
  4849. * Author daomi 2012 [ gd_star@163.com ]
  4850. *
  4851. */
  4852. (function ($)
  4853. {
  4854. $.fn.ligerForm = function ()
  4855. {
  4856. return $.ligerui.run.call(this, "ligerForm", arguments);
  4857. };
  4858. $.ligerDefaults = $.ligerDefaults || {};
  4859. $.ligerDefaults.Form = {
  4860. //控件宽度
  4861. inputWidth: 180,
  4862. //标签宽度
  4863. labelWidth: 90,
  4864. //间隔宽度
  4865. space: 40,
  4866. rightToken: ':',
  4867. //标签对齐方式
  4868. labelAlign: 'left',
  4869. //控件对齐方式
  4870. align: 'left',
  4871. //字段
  4872. fields: [],
  4873. //创建的表单元素是否附加ID
  4874. appendID: true,
  4875. //生成表单元素ID的前缀
  4876. prefixID: "",
  4877. //json解析函数
  4878. toJSON: $.ligerui.toJSON
  4879. };
  4880. //@description 默认表单编辑器构造器扩展(如果创建的表单效果不满意 建议重载)
  4881. //@param {jinput} 表单元素jQuery对象 比如input、select、textarea
  4882. $.ligerDefaults.Form.editorBulider = function (jinput)
  4883. {
  4884. //这里this就是form的ligerui对象
  4885. var g = this, p = this.options;
  4886. var inputOptions = {};
  4887. if (p.inputWidth) inputOptions.width = p.inputWidth;
  4888. if (jinput.is("select"))
  4889. {
  4890. jinput.ligerComboBox(inputOptions);
  4891. }
  4892. else if (jinput.is(":text") || jinput.is(":password"))
  4893. {
  4894. var ltype = jinput.attr("ltype");
  4895. switch (ltype)
  4896. {
  4897. case "select":
  4898. case "combobox":
  4899. jinput.ligerComboBox(inputOptions);
  4900. break;
  4901. case "spinner":
  4902. jinput.ligerSpinner(inputOptions);
  4903. break;
  4904. case "date":
  4905. jinput.ligerDateEditor(inputOptions);
  4906. break;
  4907. case "float":
  4908. case "number":
  4909. inputOptions.number = true;
  4910. jinput.ligerTextBox(inputOptions);
  4911. break;
  4912. case "int":
  4913. case "digits":
  4914. inputOptions.digits = true;
  4915. default:
  4916. jinput.ligerTextBox(inputOptions);
  4917. break;
  4918. }
  4919. }
  4920. else if (jinput.is(":radio"))
  4921. {
  4922. jinput.ligerRadio(inputOptions);
  4923. }
  4924. else if (jinput.is(":checkbox"))
  4925. {
  4926. jinput.ligerCheckBox(inputOptions);
  4927. }
  4928. else if (jinput.is("textarea"))
  4929. {
  4930. jinput.addClass("l-textarea");
  4931. }
  4932. }
  4933. //表单组件
  4934. $.ligerui.controls.Form = function (element, options)
  4935. {
  4936. $.ligerui.controls.Form.base.constructor.call(this, element, options);
  4937. };
  4938. $.ligerui.controls.Form.ligerExtend($.ligerui.core.UIComponent, {
  4939. __getType: function ()
  4940. {
  4941. return 'Form'
  4942. },
  4943. __idPrev: function ()
  4944. {
  4945. return 'Form';
  4946. },
  4947. _init: function ()
  4948. {
  4949. $.ligerui.controls.Form.base._init.call(this);
  4950. },
  4951. _render: function ()
  4952. {
  4953. var g = this, p = this.options;
  4954. var jform = $(this.element);
  4955. //自动创建表单
  4956. if (p.fields && p.fields.length)
  4957. {
  4958. if (!jform.hasClass("l-form"))
  4959. jform.addClass("l-form");
  4960. var out = [];
  4961. var appendULStartTag = false;
  4962. $(p.fields).each(function (index, field)
  4963. {
  4964. var name = field.name || field.id;
  4965. if (!name) return;
  4966. if (field.type == "hidden")
  4967. {
  4968. out.push('<input type="hidden" id="' + name + '" name="' + name + '" />');
  4969. return;
  4970. }
  4971. var newLine = field.renderToNewLine || field.newline;
  4972. if (newLine == null) newLine = true;
  4973. if (field.merge) newLine = false;
  4974. if (field.group) newLine = true;
  4975. if (newLine)
  4976. {
  4977. if (appendULStartTag)
  4978. {
  4979. out.push('</ul>');
  4980. appendULStartTag = false;
  4981. }
  4982. if (field.group)
  4983. {
  4984. out.push('<div class="l-group');
  4985. if (field.groupicon)
  4986. out.push(' l-group-hasicon');
  4987. out.push('">');
  4988. if (field.groupicon)
  4989. out.push('<img src="' + field.groupicon + '" />');
  4990. out.push('<span>' + field.group + '</span></div>');
  4991. }
  4992. out.push('<ul>');
  4993. appendULStartTag = true;
  4994. }
  4995. //append label
  4996. out.push(g._buliderLabelContainer(field));
  4997. //append input
  4998. out.push(g._buliderControlContainer(field));
  4999. //append space
  5000. out.push(g._buliderSpaceContainer(field));
  5001. });
  5002. if (appendULStartTag)
  5003. {
  5004. out.push('</ul>');
  5005. appendULStartTag = false;
  5006. }
  5007. jform.append(out.join(''));
  5008. }
  5009. //生成ligerui表单样式
  5010. $("input,select,textarea", jform).each(function ()
  5011. {
  5012. p.editorBulider.call(g, $(this));
  5013. });
  5014. },
  5015. //标签部分
  5016. _buliderLabelContainer: function (field)
  5017. {
  5018. var g = this, p = this.options;
  5019. var label = field.label || field.display;
  5020. var labelWidth = field.labelWidth || field.labelwidth || p.labelWidth;
  5021. var labelAlign = field.labelAlign || p.labelAlign;
  5022. if (label) label += p.rightToken;
  5023. var out = [];
  5024. out.push('<li style="');
  5025. if (labelWidth)
  5026. {
  5027. out.push('width:' + labelWidth + 'px;');
  5028. }
  5029. if (labelAlign)
  5030. {
  5031. out.push('text-align:' + labelAlign + ';');
  5032. }
  5033. out.push('">');
  5034. if (label)
  5035. {
  5036. out.push(label);
  5037. }
  5038. out.push('</li>');
  5039. return out.join('');
  5040. },
  5041. //控件部分
  5042. _buliderControlContainer: function (field)
  5043. {
  5044. var g = this, p = this.options;
  5045. var width = field.width || p.inputWidth;
  5046. var align = field.align || field.textAlign || field.textalign || p.align;
  5047. var out = [];
  5048. out.push('<li style="');
  5049. if (width)
  5050. {
  5051. out.push('width:' + width + 'px;');
  5052. }
  5053. if (align)
  5054. {
  5055. out.push('text-align:' + align + ';');
  5056. }
  5057. out.push('">');
  5058. out.push(g._buliderControl(field));
  5059. out.push('</li>');
  5060. return out.join('');
  5061. },
  5062. //间隔部分
  5063. _buliderSpaceContainer: function (field)
  5064. {
  5065. var g = this, p = this.options;
  5066. var spaceWidth = field.space || field.spaceWidth || p.space;
  5067. var out = [];
  5068. out.push('<li style="');
  5069. if (spaceWidth)
  5070. {
  5071. out.push('width:' + spaceWidth + 'px;');
  5072. }
  5073. out.push('">');
  5074. out.push('</li>');
  5075. return out.join('');
  5076. },
  5077. _buliderControl: function (field)
  5078. {
  5079. var g = this, p = this.options;
  5080. var width = field.width || p.inputWidth;
  5081. var name = field.name || field.id;
  5082. var out = [];
  5083. if (field.comboboxName && field.type == "select")
  5084. {
  5085. out.push('<input type="hidden" id="' + p.prefixID + name + '" name="' + name + '" />');
  5086. }
  5087. if (field.textarea || field.type == "textarea")
  5088. {
  5089. out.push('<textarea ');
  5090. }
  5091. else if (field.type == "checkbox")
  5092. {
  5093. out.push('<input type="checkbox" ');
  5094. }
  5095. else if (field.type == "radio")
  5096. {
  5097. out.push('<input type="radio" ');
  5098. }
  5099. else if (field.type == "password")
  5100. {
  5101. out.push('<input type="password" ');
  5102. }
  5103. else
  5104. {
  5105. out.push('<input type="text" ');
  5106. }
  5107. if (field.cssClass)
  5108. {
  5109. out.push('class="' + field.cssClass + '" ');
  5110. }
  5111. if (field.type)
  5112. {
  5113. out.push('ltype="' + field.type + '" ');
  5114. }
  5115. if (field.attr)
  5116. {
  5117. for (var attrp in field.attr)
  5118. {
  5119. out.push(attrp + '="' + field.attr[attrp] + '" ');
  5120. }
  5121. }
  5122. if (field.comboboxName && field.type == "select")
  5123. {
  5124. out.push('name="' + field.comboboxName + '"');
  5125. if (p.appendID)
  5126. {
  5127. out.push(' id="' + p.prefixID + field.comboboxName + '" ');
  5128. }
  5129. }
  5130. else
  5131. {
  5132. out.push('name="' + name + '"');
  5133. if (p.appendID)
  5134. {
  5135. out.push(' id="' + name + '" ');
  5136. }
  5137. }
  5138. //参数
  5139. var fieldOptions = $.extend({
  5140. width: width - 2
  5141. }, field.options || {});
  5142. out.push(" ligerui='" + p.toJSON(fieldOptions) + "' ");
  5143. //验证参数
  5144. if (field.validate)
  5145. {
  5146. out.push(" validate='" + p.toJSON(field.validate) + "' ");
  5147. }
  5148. out.push(' />');
  5149. return out.join('');
  5150. }
  5151. });
  5152. })(jQuery);/**
  5153. * jQuery ligerUI 1.1.9
  5154. *
  5155. * http://ligerui.com
  5156. *
  5157. * Author daomi 2012 [ gd_star@163.com ]
  5158. *
  5159. */
  5160. (function ($)
  5161. {
  5162. var l = $.ligerui;
  5163. $.fn.ligerGrid = function (options)
  5164. {
  5165. return $.ligerui.run.call(this, "ligerGrid", arguments);
  5166. };
  5167. $.fn.ligerGetGridManager = function ()
  5168. {
  5169. return $.ligerui.run.call(this, "ligerGetGridManager", arguments);
  5170. };
  5171. $.ligerDefaults.Grid = {
  5172. title: null,
  5173. width: 'auto', //宽度值
  5174. height: 'auto', //宽度值
  5175. columnWidth: null, //默认列宽度
  5176. resizable: true, //table是否可伸缩
  5177. url: false, //ajax url
  5178. usePager: true, //是否分页
  5179. page: 1, //默认当前页
  5180. pageSize: 10, //每页默认的结果数
  5181. pageSizeOptions: [10, 20, 30, 40, 50], //可选择设定的每页结果数
  5182. parms: [], //提交到服务器的参数
  5183. columns: [], //数据源
  5184. minColToggle: 1, //最小显示的列
  5185. dataType: 'server', //数据源:本地(local)或(server),本地是将读取p.data。不需要配置,取决于设置了data或是url
  5186. dataAction: 'server', //提交数据的方式:本地(local)或(server),选择本地方式时将在客服端分页、排序。
  5187. showTableToggleBtn: false, //是否显示'显示隐藏Grid'按钮
  5188. switchPageSizeApplyComboBox: false, //切换每页记录数是否应用ligerComboBox
  5189. allowAdjustColWidth: true, //是否允许调整列宽
  5190. checkbox: false, //是否显示复选框
  5191. allowHideColumn: true, //是否显示'切换列层'按钮
  5192. enabledEdit: false, //是否允许编辑
  5193. isScroll: true, //是否滚动
  5194. onDragCol: null, //拖动列事件
  5195. onToggleCol: null, //切换列事件
  5196. onChangeSort: null, //改变排序事件
  5197. onSuccess: null, //成功获取服务器数据的事件
  5198. onDblClickRow: null, //双击行事件
  5199. onSelectRow: null, //选择行事件
  5200. onUnSelectRow: null, //取消选择行事件
  5201. onBeforeCheckRow: null, //选择前事件,可以通过return false阻止操作(复选框)
  5202. onCheckRow: null, //选择事件(复选框)
  5203. onBeforeCheckAllRow: null, //选择前事件,可以通过return false阻止操作(复选框 全选/全不选)
  5204. onCheckAllRow: null, //选择事件(复选框 全选/全不选)
  5205. onBeforeShowData: null, //显示数据前事件,可以通过reutrn false阻止操作
  5206. onAfterShowData: null, //显示完数据事件
  5207. onError: null, //错误事件
  5208. onSubmit: null, //提交前事件
  5209. dateFormat: 'yyyy-MM-dd', //默认时间显示格式
  5210. InWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
  5211. statusName: '__status', //状态名
  5212. method: 'post', //提交方式
  5213. async: true,
  5214. fixedCellHeight: true, //是否固定单元格的高度
  5215. heightDiff: 0, //高度补差,当设置height:100%时,可能会有高度的误差,可以通过这个属性调整
  5216. cssClass: null, //类名
  5217. root: 'Rows', //数据源字段名
  5218. record: 'Total', //数据源记录数字段名
  5219. pageParmName: 'page', //页索引参数名,(提交给服务器)
  5220. pagesizeParmName: 'pagesize', //页记录数参数名,(提交给服务器)
  5221. sortnameParmName: 'sortname', //页排序列名(提交给服务器)
  5222. sortorderParmName: 'sortorder', //页排序方向(提交给服务器)
  5223. onReload: null, //刷新事件,可以通过return false来阻止操作
  5224. onToFirst: null, //第一页,可以通过return false来阻止操作
  5225. onToPrev: null, //上一页,可以通过return false来阻止操作
  5226. onToNext: null, //下一页,可以通过return false来阻止操作
  5227. onToLast: null, //最后一页,可以通过return false来阻止操作
  5228. allowUnSelectRow: false, //是否允许反选行
  5229. alternatingRow: true, //奇偶行效果
  5230. mouseoverRowCssClass: 'l-grid-row-over',
  5231. enabledSort: true, //是否允许排序
  5232. rowAttrRender: null, //行自定义属性渲染器(包括style,也可以定义)
  5233. groupColumnName: null, //分组 - 列名
  5234. groupColumnDisplay: '分组', //分组 - 列显示名字
  5235. groupRender: null, //分组 - 渲染器
  5236. totalRender: null, //统计行(全部数据)
  5237. delayLoad: false, //初始化时是否不加载
  5238. where: null, //数据过滤查询函数,(参数一 data item,参数二 data item index)
  5239. selectRowButtonOnly: false, //复选框模式时,是否只允许点击复选框才能选择行
  5240. onAfterAddRow: null, //增加行后事件
  5241. onBeforeEdit: null, //编辑前事件
  5242. onBeforeSubmitEdit: null, //验证编辑器结果是否通过
  5243. onAfterEdit: null, //结束编辑后事件
  5244. onLoading: null, //加载时函数
  5245. onLoaded: null, //加载完函数
  5246. onContextmenu: null, //右击事件
  5247. whenRClickToSelect: false, //右击行时是否选中
  5248. contentType: null, //Ajax contentType参数
  5249. checkboxColWidth: 27, //复选框列宽度
  5250. detailColWidth: 29, //明细列宽度
  5251. clickToEdit: true, //是否点击单元格的时候就编辑
  5252. detailToEdit: false, //是否点击明细的时候进入编辑
  5253. onEndEdit: null,
  5254. minColumnWidth: 80,
  5255. tree: null, //treeGrid模式
  5256. isChecked: null, //复选框 初始化函数
  5257. frozen: true, //是否固定列
  5258. frozenDetail: false, //明细按钮是否在固定列中
  5259. frozenCheckbox: true, //复选框按钮是否在固定列中
  5260. detailHeight: 260,
  5261. rownumbers: false, //是否显示行序号
  5262. frozenRownumbers: true, //行序号是否在固定列中
  5263. rownumbersColWidth: 26,
  5264. colDraggable: false, //是否允许表头拖拽
  5265. rowDraggable: false, //是否允许行拖拽
  5266. rowDraggingRender: null,
  5267. autoCheckChildren: true, //是否自动选中子节点
  5268. onRowDragDrop: null, //行拖拽事件
  5269. rowHeight: 22, //行默认的高度
  5270. headerRowHeight: 23, //表头行的高度
  5271. toolbar: null, //工具条,参数同 ligerToolbar的
  5272. headerImg: null //表格头部图标
  5273. };
  5274. $.ligerDefaults.GridString = {
  5275. errorMessage: '发生错误',
  5276. pageStatMessage: '显示从{from}到{to},总 {total} 条 。每页显示:{pagesize}',
  5277. pageTextMessage: 'Page',
  5278. loadingMessage: '加载中...',
  5279. findTextMessage: '查找',
  5280. noRecordMessage: '没有符合条件的记录存在',
  5281. isContinueByDataChanged: '数据已经改变,如果继续将丢失数据,是否继续?',
  5282. cancelMessage: '取消',
  5283. saveMessage: '保存',
  5284. applyMessage: '应用',
  5285. draggingMessage: '{count}行'
  5286. };
  5287. //接口方法扩展
  5288. $.ligerMethos.Grid = $.ligerMethos.Grid || {};
  5289. //排序器扩展
  5290. $.ligerDefaults.Grid.sorters = $.ligerDefaults.Grid.sorters || {};
  5291. //格式化器扩展
  5292. $.ligerDefaults.Grid.formatters = $.ligerDefaults.Grid.formatters || {};
  5293. //编辑器扩展
  5294. $.ligerDefaults.Grid.editors = $.ligerDefaults.Grid.editors || {};
  5295. $.ligerDefaults.Grid.sorters['date'] = function (val1, val2)
  5296. {
  5297. return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
  5298. };
  5299. $.ligerDefaults.Grid.sorters['int'] = function (val1, val2)
  5300. {
  5301. return parseInt(val1) < parseInt(val2) ? -1 : parseInt(val1) > parseInt(val2) ? 1 : 0;
  5302. };
  5303. $.ligerDefaults.Grid.sorters['float'] = function (val1, val2)
  5304. {
  5305. return parseFloat(val1) < parseFloat(val2) ? -1 : parseFloat(val1) > parseFloat(val2) ? 1 : 0;
  5306. };
  5307. $.ligerDefaults.Grid.sorters['string'] = function (val1, val2)
  5308. {
  5309. return val1.localeCompare(val2);
  5310. };
  5311. $.ligerDefaults.Grid.formatters['date'] = function (value, column)
  5312. {
  5313. function getFormatDate(date, dateformat)
  5314. {
  5315. var g = this, p = this.options;
  5316. if (isNaN(date)) return null;
  5317. var format = dateformat;
  5318. var o = {
  5319. "M+": date.getMonth() + 1,
  5320. "d+": date.getDate(),
  5321. "h+": date.getHours(),
  5322. "m+": date.getMinutes(),
  5323. "s+": date.getSeconds(),
  5324. "q+": Math.floor((date.getMonth() + 3) / 3),
  5325. "S": date.getMilliseconds()
  5326. }
  5327. if (/(y+)/.test(format))
  5328. {
  5329. format = format.replace(RegExp.$1, (date.getFullYear() + "")
  5330. .substr(4 - RegExp.$1.length));
  5331. }
  5332. for (var k in o)
  5333. {
  5334. if (new RegExp("(" + k + ")").test(format))
  5335. {
  5336. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
  5337. : ("00" + o[k]).substr(("" + o[k]).length));
  5338. }
  5339. }
  5340. return format;
  5341. }
  5342. if (!value) return "";
  5343. // /Date(1328423451489)/
  5344. if (typeof (value) == "string" && /^\/Date/.test(value))
  5345. {
  5346. value = value.replace(/^\//, "new ").replace(/\/$/, "");
  5347. eval("value = " + value);
  5348. }
  5349. if (value instanceof Date)
  5350. {
  5351. var format = column.format || this.options.dateFormat || "yyyy-MM-dd";
  5352. return getFormatDate(value, format);
  5353. }
  5354. else
  5355. {
  5356. return value.toString();
  5357. }
  5358. }
  5359. $.ligerDefaults.Grid.editors['date'] =
  5360. {
  5361. create: function (container, editParm)
  5362. {
  5363. var column = editParm.column;
  5364. var input = $("<input type='text'/>");
  5365. container.append(input);
  5366. var options = {};
  5367. var ext = column.editor.p || column.editor.ext;
  5368. if (ext)
  5369. {
  5370. var tmp = typeof (ext) == 'function' ?
  5371. ext(editParm.record, editParm.rowindex, editParm.value, column) : ext;
  5372. $.extend(options, tmp);
  5373. }
  5374. input.ligerDateEditor(options);
  5375. //将ligerUI的时间选择插件换成WdatePicker
  5376. $('.l-trigger',container).hide();
  5377. input.addClass("inputText date");
  5378. WdatePicker({el:input,alwaysUseStartDate:true});
  5379. input.blur();
  5380. return input;
  5381. },
  5382. getValue: function (input, editParm)
  5383. {
  5384. return input.liger('option', 'value');
  5385. },
  5386. setValue: function (input, value, editParm)
  5387. {
  5388. input.liger('option', 'value', value);
  5389. },
  5390. resize: function (input, width, height, editParm)
  5391. {
  5392. input.liger('option', 'width', width);
  5393. input.liger('option', 'height', height);
  5394. },
  5395. destroy: function (input, editParm)
  5396. {
  5397. input.liger('destroy');
  5398. }
  5399. };
  5400. $.ligerDefaults.Grid.editors['select'] =
  5401. $.ligerDefaults.Grid.editors['combobox'] =
  5402. {
  5403. create: function (container, editParm)
  5404. {
  5405. var column = editParm.column;
  5406. var input = $("<input type='text'/>");
  5407. container.append(input);
  5408. var options = {
  5409. data: column.editor.data,
  5410. slide: false,
  5411. valueField: column.editor.valueField || column.editor.valueColumnName,
  5412. textField: column.editor.textField || column.editor.displayColumnName
  5413. };
  5414. var ext = column.editor.p || column.editor.ext;
  5415. if (ext)
  5416. {
  5417. var tmp = typeof (ext) == 'function' ?
  5418. ext(editParm.record, editParm.rowindex, editParm.value, column) : ext;
  5419. $.extend(options, tmp);
  5420. }
  5421. input.ligerComboBox(options);
  5422. return input;
  5423. },
  5424. getValue: function (input, editParm)
  5425. {
  5426. return input.liger('option', 'value');
  5427. },
  5428. setValue: function (input, value, editParm)
  5429. {
  5430. input.liger('option', 'value', value);
  5431. },
  5432. resize: function (input, width, height, editParm)
  5433. {
  5434. input.liger('option', 'width', width);
  5435. input.liger('option', 'height', height);
  5436. },
  5437. destroy: function (input, editParm)
  5438. {
  5439. input.liger('destroy');
  5440. }
  5441. };
  5442. $.ligerDefaults.Grid.editors['int'] =
  5443. $.ligerDefaults.Grid.editors['float'] =
  5444. $.ligerDefaults.Grid.editors['spinner'] =
  5445. {
  5446. create: function (container, editParm)
  5447. {
  5448. var column = editParm.column;
  5449. var input = $("<input type='text'/>");
  5450. container.append(input);
  5451. input.css({ border: '#6E90BE' })
  5452. var options = {
  5453. type: column.editor.type == 'float' ? 'float' : 'int'
  5454. };
  5455. if (column.editor.minValue != undefined) options.minValue = column.editor.minValue;
  5456. if (column.editor.maxValue != undefined) options.maxValue = column.editor.maxValue;
  5457. input.ligerSpinner(options);
  5458. return input;
  5459. },
  5460. getValue: function (input, editParm)
  5461. {
  5462. var column = editParm.column;
  5463. var isInt = column.editor.type == "int";
  5464. if (isInt)
  5465. return parseInt(input.val(), 10);
  5466. else
  5467. return parseFloat(input.val());
  5468. },
  5469. setValue: function (input, value, editParm)
  5470. {
  5471. input.val(value);
  5472. },
  5473. resize: function (input, width, height, editParm)
  5474. {
  5475. input.liger('option', 'width', width);
  5476. input.liger('option', 'height', height);
  5477. },
  5478. destroy: function (input, editParm)
  5479. {
  5480. input.liger('destroy');
  5481. }
  5482. };
  5483. $.ligerDefaults.Grid.editors['string'] =
  5484. $.ligerDefaults.Grid.editors['text'] = {
  5485. create: function (container, editParm)
  5486. {
  5487. var input = $("<input type='text' class='l-text-editing'/>");
  5488. container.append(input);
  5489. input.ligerTextBox();
  5490. return input;
  5491. },
  5492. getValue: function (input, editParm)
  5493. {
  5494. return input.val();
  5495. },
  5496. setValue: function (input, value, editParm)
  5497. {
  5498. input.val(value);
  5499. },
  5500. resize: function (input, width, height, editParm)
  5501. {
  5502. input.liger('option', 'width', width);
  5503. input.liger('option', 'height', height);
  5504. },
  5505. destroy: function (input, editParm)
  5506. {
  5507. input.liger('destroy');
  5508. }
  5509. };
  5510. $.ligerDefaults.Grid.editors['chk'] = $.ligerDefaults.Grid.editors['checkbox'] = {
  5511. create: function (container, editParm)
  5512. {
  5513. var input = $("<input type='checkbox' />");
  5514. container.append(input);
  5515. input.ligerCheckBox();
  5516. return input;
  5517. },
  5518. getValue: function (input, editParm)
  5519. {
  5520. return input[0].checked ? 1 : 0;
  5521. },
  5522. setValue: function (input, value, editParm)
  5523. {
  5524. input.val(value ? true : false);
  5525. },
  5526. resize: function (input, width, height, editParm)
  5527. {
  5528. input.liger('option', 'width', width);
  5529. input.liger('option', 'height', height);
  5530. },
  5531. destroy: function (input, editParm)
  5532. {
  5533. input.liger('destroy');
  5534. }
  5535. };
  5536. $.ligerui.controls.Grid = function (element, options)
  5537. {
  5538. $.ligerui.controls.Grid.base.constructor.call(this, element, options);
  5539. };
  5540. $.ligerui.controls.Grid.ligerExtend($.ligerui.core.UIComponent, {
  5541. __getType: function ()
  5542. {
  5543. return '$.ligerui.controls.Grid';
  5544. },
  5545. __idPrev: function ()
  5546. {
  5547. return 'grid';
  5548. },
  5549. _extendMethods: function ()
  5550. {
  5551. return $.ligerMethos.Grid;
  5552. },
  5553. _init: function ()
  5554. {
  5555. $.ligerui.controls.Grid.base._init.call(this);
  5556. var g = this, p = this.options;
  5557. p.dataType = p.url ? "server" : "local";
  5558. if (p.dataType == "local")
  5559. {
  5560. p.data = p.data || [];
  5561. p.dataAction = "local";
  5562. }
  5563. if (p.isScroll == false)
  5564. {
  5565. p.height = 'auto';
  5566. }
  5567. if (!p.frozen)
  5568. {
  5569. p.frozenCheckbox = false;
  5570. p.frozenDetail = false;
  5571. p.frozenRownumbers = false;
  5572. }
  5573. if (p.detailToEdit)
  5574. {
  5575. p.enabledEdit = true;
  5576. p.clickToEdit = false;
  5577. p.detail = {
  5578. height: 'auto',
  5579. onShowDetail: function (record, container, callback)
  5580. {
  5581. $(container).addClass("l-grid-detailpanel-edit");
  5582. g.beginEdit(record, function (rowdata, column)
  5583. {
  5584. var editContainer = $("<div class='l-editbox'></div>");
  5585. editContainer.width(120).height(p.rowHeight + 1);
  5586. editContainer.appendTo(container);
  5587. return editContainer;
  5588. });
  5589. function removeRow()
  5590. {
  5591. $(container).parent().parent().remove();
  5592. g.collapseDetail(record);
  5593. }
  5594. $("<div class='l-clear'></div>").appendTo(container);
  5595. $("<div class='l-button'>" + p.saveMessage + "</div>").appendTo(container).click(function ()
  5596. {
  5597. g.endEdit(record);
  5598. removeRow();
  5599. });
  5600. $("<div class='l-button'>" + p.applyMessage + "</div>").appendTo(container).click(function ()
  5601. {
  5602. g.submitEdit(record);
  5603. });
  5604. $("<div class='l-button'>" + p.cancelMessage + "</div>").appendTo(container).click(function ()
  5605. {
  5606. g.cancelEdit(record);
  5607. removeRow();
  5608. });
  5609. }
  5610. };
  5611. }
  5612. if (p.tree)//启用分页模式
  5613. {
  5614. p.tree.childrenName = p.tree.childrenName || "children";
  5615. p.tree.isParent = p.tree.isParent || function (rowData)
  5616. {
  5617. var exist = p.tree.childrenName in rowData;
  5618. return exist;
  5619. };
  5620. p.tree.isExtend = p.tree.isExtend || function (rowData)
  5621. {
  5622. if ('isextend' in rowData && rowData['isextend'] == false)
  5623. return false;
  5624. return true;
  5625. };
  5626. }
  5627. },
  5628. _render: function ()
  5629. {
  5630. var g = this, p = this.options;
  5631. g.grid = $(g.element);
  5632. g.grid.addClass("l-panel");
  5633. var gridhtmlarr = [];
  5634. gridhtmlarr.push(" <div class='l-panel-header'><span class='l-panel-header-text'></span></div>");
  5635. gridhtmlarr.push(" <div class='l-grid-loading'></div>");
  5636. gridhtmlarr.push(" <div class='l-panel-topbar'></div>");
  5637. gridhtmlarr.push(" <div class='l-panel-bwarp'>");
  5638. gridhtmlarr.push(" <div class='l-panel-body'>");
  5639. gridhtmlarr.push(" <div class='l-grid'>");
  5640. gridhtmlarr.push(" <div class='l-grid-dragging-line'></div>");
  5641. gridhtmlarr.push(" <div class='l-grid-popup'><table cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  5642. gridhtmlarr.push(" <div class='l-grid1'>");
  5643. gridhtmlarr.push(" <div class='l-grid-header l-grid-header1'>");
  5644. gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  5645. gridhtmlarr.push(" </div>");
  5646. gridhtmlarr.push(" <div class='l-grid-body l-grid-body1'>");
  5647. gridhtmlarr.push(" </div>");
  5648. gridhtmlarr.push(" </div>");
  5649. gridhtmlarr.push(" <div class='l-grid2'>");
  5650. gridhtmlarr.push(" <div class='l-grid-header l-grid-header2'>");
  5651. gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  5652. gridhtmlarr.push(" </div>");
  5653. gridhtmlarr.push(" <div class='l-grid-body l-grid-body2 l-scroll'>");
  5654. gridhtmlarr.push(" </div>");
  5655. gridhtmlarr.push(" </div>");
  5656. gridhtmlarr.push(" </div>");
  5657. gridhtmlarr.push(" </div>");
  5658. gridhtmlarr.push(" </div>");
  5659. gridhtmlarr.push(" <div class='l-panel-bar'>");
  5660. gridhtmlarr.push(" <div class='l-panel-bbar-inner'>");
  5661. gridhtmlarr.push(" <div class='l-bar-group l-bar-message'><span class='l-bar-text'></span></div>");
  5662. gridhtmlarr.push(" <div class='l-bar-group l-bar-selectpagesize'></div>");
  5663. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5664. gridhtmlarr.push(" <div class='l-bar-group'>");
  5665. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnfirst'><span></span></div>");
  5666. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnprev'><span></span></div>");
  5667. gridhtmlarr.push(" </div>");
  5668. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5669. gridhtmlarr.push(" <div class='l-bar-group'><span class='pcontrol'> <input type='text' size='4' value='1' style='width:20px' maxlength='3' /> / <span></span></span></div>");
  5670. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5671. gridhtmlarr.push(" <div class='l-bar-group'>");
  5672. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnnext'><span></span></div>");
  5673. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnlast'><span></span></div>");
  5674. gridhtmlarr.push(" </div>");
  5675. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5676. gridhtmlarr.push(" <div class='l-bar-group'>");
  5677. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnload'><span></span></div>");
  5678. gridhtmlarr.push(" </div>");
  5679. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5680. gridhtmlarr.push(" <div class='l-clear'></div>");
  5681. gridhtmlarr.push(" </div>");
  5682. gridhtmlarr.push(" </div>");
  5683. g.grid.html(gridhtmlarr.join(''));
  5684. //头部
  5685. g.header = $(".l-panel-header:first", g.grid);
  5686. //主体
  5687. g.body = $(".l-panel-body:first", g.grid);
  5688. //底部工具条
  5689. g.toolbar = $(".l-panel-bar:first", g.grid);
  5690. //显示/隐藏列
  5691. g.popup = $(".l-grid-popup:first", g.grid);
  5692. //加载中
  5693. g.gridloading = $(".l-grid-loading:first", g.grid);
  5694. //调整列宽层
  5695. g.draggingline = $(".l-grid-dragging-line", g.grid);
  5696. //顶部工具栏
  5697. g.topbar = $(".l-panel-topbar:first", g.grid);
  5698. g.gridview = $(".l-grid:first", g.grid);
  5699. g.gridview.attr("id", g.id + "grid");
  5700. g.gridview1 = $(".l-grid1:first", g.gridview);
  5701. g.gridview2 = $(".l-grid2:first", g.gridview);
  5702. //表头
  5703. g.gridheader = $(".l-grid-header:first", g.gridview2);
  5704. //表主体
  5705. g.gridbody = $(".l-grid-body:first", g.gridview2);
  5706. //frozen
  5707. g.f = {};
  5708. //表头
  5709. g.f.gridheader = $(".l-grid-header:first", g.gridview1);
  5710. //表主体
  5711. g.f.gridbody = $(".l-grid-body:first", g.gridview1);
  5712. g.currentData = null;
  5713. g.changedCells = {};
  5714. g.editors = {}; //多编辑器同时存在
  5715. g.editor = { editing: false }; //单编辑器,配置clickToEdit
  5716. if (p.height == "auto")
  5717. {
  5718. g.bind("SysGridHeightChanged", function ()
  5719. {
  5720. if (g.enabledFrozen())
  5721. g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height()));
  5722. });
  5723. }
  5724. var pc = $.extend({}, p);
  5725. this._bulid();
  5726. this._setColumns(p.columns);
  5727. delete pc['columns'];
  5728. delete pc['data'];
  5729. delete pc['url'];
  5730. g.set(pc);
  5731. if (!p.delayLoad)
  5732. {
  5733. if (p.url)
  5734. g.set({ url: p.url });
  5735. else if (p.data)
  5736. g.set({ data: p.data });
  5737. }
  5738. },
  5739. _setFrozen: function (frozen)
  5740. {
  5741. if (frozen)
  5742. this.grid.addClass("l-frozen");
  5743. else
  5744. this.grid.removeClass("l-frozen");
  5745. },
  5746. _setCssClass: function (value)
  5747. {
  5748. this.grid.addClass(value);
  5749. },
  5750. _setLoadingMessage: function (value)
  5751. {
  5752. this.gridloading.html(value);
  5753. },
  5754. _setHeight: function (h)
  5755. {
  5756. var g = this, p = this.options;
  5757. g.unbind("SysGridHeightChanged");
  5758. if (h == "auto")
  5759. {
  5760. g.bind("SysGridHeightChanged", function ()
  5761. {
  5762. if (g.enabledFrozen())
  5763. g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height()));
  5764. });
  5765. return;
  5766. }
  5767. if (typeof h == "string" && h.indexOf('%') > 0)
  5768. {
  5769. if (p.inWindow)
  5770. h = $(window).height() * parseFloat(h) * 0.01;
  5771. else
  5772. h = g.grid.parent().height() * parseFloat(h) * 0.01;
  5773. }
  5774. if (p.title) h -= 24;
  5775. if (p.usePager) h -= 32;
  5776. if (p.totalRender) h -= 25;
  5777. if (p.toolbar) h -= g.topbar.outerHeight();
  5778. var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1;
  5779. h -= gridHeaderHeight;
  5780. if (h > 0)
  5781. {
  5782. g.gridbody.height(h);
  5783. if (h > 18) g.f.gridbody.height(h - 18);
  5784. g.gridview.height(h + gridHeaderHeight);
  5785. }
  5786. },
  5787. _updateFrozenWidth: function ()
  5788. {
  5789. var g = this, p = this.options;
  5790. if (g.enabledFrozen())
  5791. {
  5792. g.gridview1.width(g.f.gridtablewidth);
  5793. var view2width = g.gridview.width() - g.f.gridtablewidth;
  5794. g.gridview2.css({ left: g.f.gridtablewidth });
  5795. if (view2width > 0) g.gridview2.css({ width: view2width });
  5796. }
  5797. },
  5798. _setWidth: function (value)
  5799. {
  5800. var g = this, p = this.options;
  5801. if (g.enabledFrozen()) g._onResize();
  5802. },
  5803. _setUrl: function (value)
  5804. {
  5805. this.options.url = value;
  5806. if (value)
  5807. {
  5808. this.options.dataType = "server";
  5809. this.loadData(true);
  5810. }
  5811. else
  5812. {
  5813. this.options.dataType = "local";
  5814. }
  5815. },
  5816. _setData: function (value)
  5817. {
  5818. this.loadData(this.options.data);
  5819. },
  5820. //刷新数据
  5821. loadData: function (loadDataParm)
  5822. {
  5823. var g = this, p = this.options;
  5824. g.loading = true;
  5825. var clause = null;
  5826. var loadServer = true;
  5827. if (typeof (loadDataParm) == "function")
  5828. {
  5829. clause = loadDataParm;
  5830. loadServer = false;
  5831. }
  5832. else if (typeof (loadDataParm) == "boolean")
  5833. {
  5834. loadServer = loadDataParm;
  5835. }
  5836. else if (typeof (loadDataParm) == "object" && loadDataParm)
  5837. {
  5838. loadServer = false;
  5839. p.dataType = "local";
  5840. p.data = loadDataParm;
  5841. }
  5842. //参数初始化
  5843. if (!p.newPage) p.newPage = 1;
  5844. if (p.dataAction == "server")
  5845. {
  5846. if (!p.sortOrder) p.sortOrder = "asc";
  5847. }
  5848. var param = [];
  5849. if (p.parms)
  5850. {
  5851. if (p.parms.length)
  5852. {
  5853. $(p.parms).each(function ()
  5854. {
  5855. param.push({ name: this.name, value: this.value });
  5856. });
  5857. }
  5858. else if (typeof p.parms == "object")
  5859. {
  5860. for (var name in p.parms)
  5861. {
  5862. param.push({ name: name, value: p.parms[name] });
  5863. }
  5864. }
  5865. }
  5866. if (p.dataAction == "server")
  5867. {
  5868. if (p.usePager)
  5869. {
  5870. param.push({ name: p.pageParmName, value: p.newPage });
  5871. param.push({ name: p.pagesizeParmName, value: p.pageSize });
  5872. }
  5873. if (p.sortName)
  5874. {
  5875. param.push({ name: p.sortnameParmName, value: p.sortName });
  5876. param.push({ name: p.sortorderParmName, value: p.sortOrder });
  5877. }
  5878. };
  5879. $(".l-bar-btnload span", g.toolbar).addClass("l-disabled");
  5880. if (p.dataType == "local")
  5881. {
  5882. g.filteredData = g.data = p.data;
  5883. if (clause)
  5884. g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  5885. if (p.usePager)
  5886. g.currentData = g._getCurrentPageData(g.filteredData);
  5887. else
  5888. {
  5889. g.currentData = g.filteredData;
  5890. }
  5891. g._showData();
  5892. }
  5893. else if (p.dataAction == "local" && !loadServer)
  5894. {
  5895. if (g.data && g.data[p.root])
  5896. {
  5897. g.filteredData = g.data;
  5898. if (clause)
  5899. g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  5900. g.currentData = g._getCurrentPageData(g.filteredData);
  5901. g._showData();
  5902. }
  5903. }
  5904. else
  5905. {
  5906. g.loadServerData(param, clause);
  5907. //g.loadServerData.ligerDefer(g, 10, [param, clause]);
  5908. }
  5909. g.loading = false;
  5910. },
  5911. loadServerData: function (param, clause)
  5912. {
  5913. var g = this, p = this.options;
  5914. var ajaxOptions = {
  5915. type: p.method,
  5916. url: p.url,
  5917. data: param,
  5918. async: p.async,
  5919. dataType: 'json',
  5920. beforeSend: function ()
  5921. {
  5922. if (g.hasBind('loading'))
  5923. {
  5924. g.trigger('loading');
  5925. }
  5926. else
  5927. {
  5928. g.toggleLoading(true);
  5929. }
  5930. },
  5931. success: function (data)
  5932. {
  5933. g.trigger('success', [data, g]);
  5934. if (!data || !data[p.root] || !data[p.root].length)
  5935. {
  5936. g.currentData = g.data = {};
  5937. g.currentData[p.root] = g.data[p.root] = [];
  5938. g.currentData[p.record] = g.data[p.record] = 0;
  5939. g._showData();
  5940. return;
  5941. }
  5942. g.data = data;
  5943. if (p.dataAction == "server")
  5944. {
  5945. g.currentData = g.data;
  5946. }
  5947. else
  5948. {
  5949. g.filteredData = g.data;
  5950. if (clause) g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  5951. if (p.usePager)
  5952. g.currentData = g._getCurrentPageData(g.filteredData);
  5953. else
  5954. g.currentData = g.filteredData;
  5955. }
  5956. g._showData.ligerDefer(g, 10, [g.currentData]);
  5957. },
  5958. complete: function ()
  5959. {
  5960. g.trigger('complete', [g]);
  5961. if (g.hasBind('loaded'))
  5962. {
  5963. g.trigger('loaded', [g]);
  5964. }
  5965. else
  5966. {
  5967. g.toggleLoading.ligerDefer(g, 10, [false]);
  5968. }
  5969. },
  5970. error: function (XMLHttpRequest, textStatus, errorThrown)
  5971. {
  5972. g.currentData = g.data = {};
  5973. g.currentData[p.root] = g.data[p.root] = [];
  5974. g.currentData[p.record] = g.data[p.record] = 0;
  5975. g.toggleLoading.ligerDefer(g, 10, [false]);
  5976. $(".l-bar-btnload span", g.toolbar).removeClass("l-disabled");
  5977. g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]);
  5978. }
  5979. };
  5980. if (p.contentType) ajaxOptions.contentType = p.contentType;
  5981. $.ajax(ajaxOptions);
  5982. },
  5983. toggleLoading: function (show)
  5984. {
  5985. this.gridloading[show ? 'show' : 'hide']();
  5986. },
  5987. _createEditor: function (editor, container, editParm, width, height)
  5988. {
  5989. var editorInput = editor.create(container, editParm);
  5990. if (editor.setValue) editor.setValue(editorInput, editParm.value, editParm);
  5991. if (editor.resize) editor.resize(editorInput, width, height, editParm);
  5992. return editorInput;
  5993. },
  5994. /*
  5995. @description 使一行进入编辑状态
  5996. @param {rowParm} rowindex或者rowdata
  5997. @param {containerBulider} 编辑器填充层构造器
  5998. */
  5999. beginEdit: function (rowParm, containerBulider)
  6000. {
  6001. var g = this, p = this.options;
  6002. if (!p.enabledEdit || p.clickToEdit) return;
  6003. var rowdata = g.getRow(rowParm);
  6004. if (rowdata._editing) return;
  6005. if (g.trigger('beginEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return;
  6006. g.editors[rowdata['__id']] = {};
  6007. rowdata._editing = true;
  6008. g.reRender({ rowdata: rowdata });
  6009. containerBulider = containerBulider || function (rowdata, column)
  6010. {
  6011. var cellobj = g.getCellObj(rowdata, column);
  6012. var container = $(cellobj).html("");
  6013. g.setCellEditing(rowdata, column, true);
  6014. return container;
  6015. };
  6016. for (var i = 0, l = g.columns.length; i < l; i++)
  6017. {
  6018. var column = g.columns[i];
  6019. if (!column.name || !column.editor || !column.editor.type || !p.editors[column.editor.type]) continue;
  6020. var editor = p.editors[column.editor.type];
  6021. var editParm = { record: rowdata, value: rowdata[column.name], column: column, rowindex: rowdata['__index'], grid: g };
  6022. var container = containerBulider(rowdata, column);
  6023. var width = container.width(), height = container.height();
  6024. var editorInput = g._createEditor(editor, container, editParm, width, height);
  6025. g.editors[rowdata['__id']][column['__id']] = { editor: editor, input: editorInput, editParm: editParm, container: container };
  6026. }
  6027. g.trigger('afterBeginEdit', { record: rowdata, rowindex: rowdata['__index'] });
  6028. },
  6029. cancelEdit: function (rowParm)
  6030. {
  6031. var g = this;
  6032. if (rowParm == undefined)
  6033. {
  6034. for (var rowid in g.editors)
  6035. {
  6036. g.cancelEdit(rowid);
  6037. }
  6038. }
  6039. else
  6040. {
  6041. var rowdata = g.getRow(rowParm);
  6042. if (!g.editors[rowdata['__id']]) return;
  6043. if (g.trigger('cancelEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return;
  6044. for (var columnid in g.editors[rowdata['__id']])
  6045. {
  6046. var o = g.editors[rowdata['__id']][columnid];
  6047. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  6048. }
  6049. delete g.editors[rowdata['__id']];
  6050. delete rowdata['_editing'];
  6051. g.reRender({ rowdata: rowdata });
  6052. }
  6053. },
  6054. addEditRow: function (rowdata)
  6055. {
  6056. this.submitEdit();
  6057. rowdata = this.add(rowdata);
  6058. this.beginEdit(rowdata);
  6059. },
  6060. submitEdit: function (rowParm)
  6061. {
  6062. var g = this, p = this.options;
  6063. if (rowParm == undefined)
  6064. {
  6065. for (var rowid in g.editors)
  6066. {
  6067. g.submitEdit(rowid);
  6068. }
  6069. }
  6070. else
  6071. {
  6072. var rowdata = g.getRow(rowParm);
  6073. var newdata = {};
  6074. if (!g.editors[rowdata['__id']]) return;
  6075. for (var columnid in g.editors[rowdata['__id']])
  6076. {
  6077. var o = g.editors[rowdata['__id']][columnid];
  6078. var column = o.editParm.column;
  6079. if (column.name)
  6080. newdata[column.name] = o.editor.getValue(o.input, o.editParm);
  6081. }
  6082. if (g.trigger('beforeSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata }) == false)
  6083. return false;
  6084. g.updateRow(rowdata, newdata);
  6085. g.trigger('afterSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata });
  6086. }
  6087. },
  6088. endEdit: function (rowParm)
  6089. {
  6090. var g = this, p = this.options;
  6091. if (g.editor.editing)
  6092. {
  6093. var o = g.editor;
  6094. g.trigger('sysEndEdit', [g.editor.editParm]);
  6095. g.trigger('endEdit', [g.editor.editParm]);
  6096. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  6097. g.editor.container.remove();
  6098. g.reRender({ rowdata: g.editor.editParm.record, column: g.editor.editParm.column });
  6099. g.trigger('afterEdit', [g.editor.editParm]);
  6100. g.editor = { editing: false };
  6101. }
  6102. else if (rowParm != undefined)
  6103. {
  6104. var rowdata = g.getRow(rowParm);
  6105. if (!g.editors[rowdata['__id']]) return;
  6106. if (g.submitEdit(rowParm) == false) return false;
  6107. for (var columnid in g.editors[rowdata['__id']])
  6108. {
  6109. var o = g.editors[rowdata['__id']][columnid];
  6110. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  6111. }
  6112. delete g.editors[rowdata['__id']];
  6113. delete rowdata['_editing'];
  6114. g.trigger('afterEdit', { record: rowdata, rowindex: rowdata['__index'] });
  6115. }
  6116. else
  6117. {
  6118. for (var rowid in g.editors)
  6119. {
  6120. g.endEdit(rowid);
  6121. }
  6122. }
  6123. },
  6124. setWidth: function (w)
  6125. {
  6126. return this._setWidth(w);
  6127. },
  6128. setHeight: function (h)
  6129. {
  6130. return this._setHeight(h);
  6131. },
  6132. //是否启用复选框列
  6133. enabledCheckbox: function ()
  6134. {
  6135. return this.options.checkbox ? true : false;
  6136. },
  6137. //是否固定列
  6138. enabledFrozen: function ()
  6139. {
  6140. var g = this, p = this.options;
  6141. if (!p.frozen) return false;
  6142. var cols = g.columns || [];
  6143. if (g.enabledDetail() && p.frozenDetail || g.enabledCheckbox() && p.frozenCheckbox
  6144. || p.frozenRownumbers && p.rownumbers) return true;
  6145. for (var i = 0, l = cols.length; i < l; i++)
  6146. {
  6147. if (cols[i].frozen)
  6148. {
  6149. return true;
  6150. }
  6151. }
  6152. this._setFrozen(false);
  6153. return false;
  6154. },
  6155. //是否启用明细编辑
  6156. enabledDetailEdit: function ()
  6157. {
  6158. if (!this.enabledDetail()) return false;
  6159. return this.options.detailToEdit ? true : false;
  6160. },
  6161. //是否启用明细列
  6162. enabledDetail: function ()
  6163. {
  6164. if (this.options.detail && this.options.detail.onShowDetail) return true;
  6165. return false;
  6166. },
  6167. //是否启用分组
  6168. enabledGroup: function ()
  6169. {
  6170. return this.options.groupColumnName ? true : false;
  6171. },
  6172. deleteSelectedRow: function ()
  6173. {
  6174. if (!this.selected) return;
  6175. for (var i in this.selected)
  6176. {
  6177. var o = this.selected[i];
  6178. if (o['__id'] in this.records)
  6179. this._deleteData.ligerDefer(this, 10, [o]);
  6180. }
  6181. this.reRender.ligerDefer(this, 20);
  6182. },
  6183. removeRange: function (rowArr)
  6184. {
  6185. var g = this, p = this.options;
  6186. $.each(rowArr, function ()
  6187. {
  6188. g._removeData(this);
  6189. });
  6190. g.reRender();
  6191. },
  6192. remove: function (rowParm)
  6193. {
  6194. var g = this, p = this.options;
  6195. var rowdata = g.getRow(rowParm);
  6196. g._removeData(rowParm);
  6197. g.reRender();
  6198. },
  6199. deleteRange: function (rowArr)
  6200. {
  6201. var g = this, p = this.options;
  6202. $.each(rowArr, function ()
  6203. {
  6204. g._deleteData(this);
  6205. });
  6206. g.reRender();
  6207. },
  6208. deleteRow: function (rowParm)
  6209. {
  6210. var g = this, p = this.options;
  6211. var rowdata = g.getRow(rowParm);
  6212. if (!rowdata) return;
  6213. g._deleteData(rowdata);
  6214. g.reRender();
  6215. g.isDataChanged = true;
  6216. },
  6217. _deleteData: function (rowParm)
  6218. {
  6219. var g = this, p = this.options;
  6220. var rowdata = g.getRow(rowParm);
  6221. rowdata[p.statusName] = 'delete';
  6222. if (p.tree)
  6223. {
  6224. var children = g.getChildren(rowdata, true);
  6225. if (children)
  6226. {
  6227. for (var i = 0, l = children.length; i < l; i++)
  6228. {
  6229. children[i][p.statusName] = 'delete';
  6230. }
  6231. }
  6232. }
  6233. g.deletedRows = g.deletedRows || [];
  6234. g.deletedRows.push(rowdata);
  6235. g._removeSelected(rowdata);
  6236. },
  6237. /*
  6238. @param {arg} column index、column name、column、单元格
  6239. @param {value} 值
  6240. @param {rowParm} rowindex或者rowdata
  6241. */
  6242. updateCell: function (arg, value, rowParm)
  6243. {
  6244. var g = this, p = this.options;
  6245. var column, cellObj, rowdata;
  6246. if (typeof (arg) == "string") //column name
  6247. {
  6248. for (var i = 0, l = g.columns.length; i < l; i++)
  6249. {
  6250. if (g.columns[i].name == arg)
  6251. {
  6252. g.updateCell(i, value, rowParm);
  6253. }
  6254. }
  6255. return;
  6256. }
  6257. if (typeof (arg) == "number")
  6258. {
  6259. column = g.columns[arg];
  6260. rowdata = g.getRow(rowParm);
  6261. cellObj = g.getCellObj(rowdata, column);
  6262. }
  6263. else if (typeof (arg) == "object" && arg['__id'])
  6264. {
  6265. column = arg;
  6266. rowdata = g.getRow(rowParm);
  6267. cellObj = g.getCellObj(rowdata, column);
  6268. }
  6269. else
  6270. {
  6271. cellObj = arg;
  6272. var ids = cellObj.id.split('|');
  6273. var columnid = ids[ids.length - 1];
  6274. column = g._columns[columnid];
  6275. var row = $(cellObj).parent();
  6276. rowdata = rowdata || g.getRow(row[0]);
  6277. }
  6278. if (value != null && column.name)
  6279. {
  6280. rowdata[column.name] = value;
  6281. if (rowdata[p.statusName] != 'add')
  6282. rowdata[p.statusName] = 'update';
  6283. g.isDataChanged = true;
  6284. }
  6285. g.reRender({ rowdata: rowdata, column: column });
  6286. },
  6287. addRows: function (rowdataArr, neardata, isBefore, parentRowData)
  6288. {
  6289. var g = this, p = this.options;
  6290. $(rowdataArr).each(function ()
  6291. {
  6292. g.addRow(this, neardata, isBefore, parentRowData);
  6293. });
  6294. },
  6295. _createRowid: function ()
  6296. {
  6297. return "r" + (1000 + this.recordNumber);
  6298. },
  6299. _isRowId: function (str)
  6300. {
  6301. return (str in this.records);
  6302. },
  6303. _addNewRecord: function (o, previd, pid)
  6304. {
  6305. var g = this, p = this.options;
  6306. g.recordNumber++;
  6307. o['__id'] = g._createRowid();
  6308. o['__previd'] = previd;
  6309. if (previd && previd != -1)
  6310. {
  6311. var prev = g.records[previd];
  6312. if (prev['__nextid'] && prev['__nextid'] != -1)
  6313. {
  6314. var prevOldNext = g.records[prev['__nextid']];
  6315. if (prevOldNext)
  6316. prevOldNext['__previd'] = o['__id'];
  6317. }
  6318. prev['__nextid'] = o['__id'];
  6319. o['__index'] = prev['__index'] + 1;
  6320. }
  6321. else
  6322. {
  6323. o['__index'] = 0;
  6324. }
  6325. if (p.tree)
  6326. {
  6327. if (pid && pid != -1)
  6328. {
  6329. var parent = g.records[pid];
  6330. o['__pid'] = pid;
  6331. o['__level'] = parent['__level'] + 1;
  6332. }
  6333. else
  6334. {
  6335. o['__pid'] = -1;
  6336. o['__level'] = 1;
  6337. }
  6338. o['__hasChildren'] = o[p.tree.childrenName] ? true : false;
  6339. }
  6340. if (o[p.statusName] != "add")
  6341. o[p.statusName] = "nochanged";
  6342. g.rows[o['__index']] = o;
  6343. g.records[o['__id']] = o;
  6344. return o;
  6345. },
  6346. //将原始的数据转换成适合 grid的行数据
  6347. _getRows: function (data)
  6348. {
  6349. var g = this, p = this.options;
  6350. var targetData = [];
  6351. function load(data)
  6352. {
  6353. if (!data || !data.length) return;
  6354. for (var i = 0, l = data.length; i < l; i++)
  6355. {
  6356. var o = data[i];
  6357. targetData.push(o);
  6358. if (o[p.tree.childrenName])
  6359. {
  6360. load(o[p.tree.childrenName]);
  6361. }
  6362. }
  6363. }
  6364. load(data);
  6365. return targetData;
  6366. },
  6367. _updateGridData: function ()
  6368. {
  6369. var g = this, p = this.options;
  6370. g.recordNumber = 0;
  6371. g.rows = [];
  6372. g.records = {};
  6373. var previd = -1;
  6374. function load(data, pid)
  6375. {
  6376. if (!data || !data.length) return;
  6377. for (var i = 0, l = data.length; i < l; i++)
  6378. {
  6379. var o = data[i];
  6380. g.formatRecord(o);
  6381. if (o[p.statusName] == "delete") continue;
  6382. g._addNewRecord(o, previd, pid);
  6383. previd = o['__id'];
  6384. if (o['__hasChildren'])
  6385. {
  6386. load(o[p.tree.childrenName], o['__id']);
  6387. }
  6388. }
  6389. }
  6390. load(g.currentData[p.root], -1);
  6391. return g.rows;
  6392. },
  6393. _moveData: function (from, to, isAfter)
  6394. {
  6395. var g = this, p = this.options;
  6396. var fromRow = g.getRow(from);
  6397. var toRow = g.getRow(to);
  6398. var fromIndex, toIndex;
  6399. var listdata = g._getParentChildren(fromRow);
  6400. fromIndex = $.inArray(fromRow, listdata);
  6401. listdata.splice(fromIndex, 1);
  6402. listdata = g._getParentChildren(toRow);
  6403. toIndex = $.inArray(toRow, listdata);
  6404. listdata.splice(toIndex + (isAfter ? 1 : 0), 0, fromRow);
  6405. },
  6406. move: function (from, to, isAfter)
  6407. {
  6408. this._moveData(from, to, isAfter);
  6409. this.reRender();
  6410. },
  6411. moveRange: function (rows, to, isAfter)
  6412. {
  6413. for (var i in rows)
  6414. {
  6415. this._moveData(rows[i], to, isAfter);
  6416. }
  6417. this.reRender();
  6418. },
  6419. up: function (rowParm)
  6420. {
  6421. var g = this, p = this.options;
  6422. var rowdata = g.getRow(rowParm);
  6423. var listdata = g._getParentChildren(rowdata);
  6424. var index = $.inArray(rowdata, listdata);
  6425. if (index == -1 || index == 0) return;
  6426. var selected = g.getSelected();
  6427. g.move(rowdata, listdata[index - 1], false);
  6428. g.select(selected);
  6429. },
  6430. down: function (rowParm)
  6431. {
  6432. var g = this, p = this.options;
  6433. var rowdata = g.getRow(rowParm);
  6434. var listdata = g._getParentChildren(rowdata);
  6435. var index = $.inArray(rowdata, listdata);
  6436. if (index == -1 || index == listdata.length - 1) return;
  6437. var selected = g.getSelected();
  6438. g.move(rowdata, listdata[index + 1], true);
  6439. g.select(selected);
  6440. },
  6441. addRow: function (rowdata, neardata, isBefore, parentRowData)
  6442. {
  6443. var g = this, p = this.options;
  6444. rowdata = rowdata || {};
  6445. g._addData(rowdata, parentRowData, neardata, isBefore);
  6446. g.reRender();
  6447. //标识状态
  6448. rowdata[p.statusName] = 'add';
  6449. if (p.tree)
  6450. {
  6451. var children = g.getChildren(rowdata, true);
  6452. if (children)
  6453. {
  6454. for (var i = 0, l = children.length; i < l; i++)
  6455. {
  6456. children[i][p.statusName] = 'add';
  6457. }
  6458. }
  6459. }
  6460. g.isDataChanged = true;
  6461. p.total = p.total ? (p.total + 1) : 1;
  6462. p.pageCount = Math.ceil(p.total / p.pageSize);
  6463. g._buildPager();
  6464. g.trigger('SysGridHeightChanged');
  6465. g.trigger('afterAddRow', [rowdata]);
  6466. return rowdata;
  6467. },
  6468. updateRow: function (rowDom, newRowData)
  6469. {
  6470. var g = this, p = this.options;
  6471. var rowdata = g.getRow(rowDom);
  6472. //标识状态
  6473. g.isDataChanged = true;
  6474. $.extend(rowdata, newRowData || {});
  6475. if (rowdata[p.statusName] != 'add')
  6476. rowdata[p.statusName] = 'update';
  6477. g.reRender.ligerDefer(g, 10, [{ rowdata: rowdata}]);
  6478. return rowdata;
  6479. },
  6480. setCellEditing: function (rowdata, column, editing)
  6481. {
  6482. var g = this, p = this.options;
  6483. var cell = g.getCellObj(rowdata, column);
  6484. var methodName = editing ? 'addClass' : 'removeClass';
  6485. $(cell)[methodName]("l-grid-row-cell-editing");
  6486. if (rowdata['__id'] != 0)
  6487. {
  6488. var prevrowobj = $(g.getRowObj(rowdata['__id'])).prev();
  6489. if (!prevrowobj.length) return;
  6490. var prevrow = g.getRow(prevrowobj[0]);
  6491. var cellprev = g.getCellObj(prevrow, column);
  6492. if (!cellprev) return;
  6493. $(cellprev)[methodName]("l-grid-row-cell-editing-topcell");
  6494. }
  6495. if (column['__previd'] != -1 && column['__previd'] != null)
  6496. {
  6497. var cellprev = $(g.getCellObj(rowdata, column)).prev();
  6498. $(cellprev)[methodName]("l-grid-row-cell-editing-leftcell");
  6499. }
  6500. },
  6501. reRender: function (e)
  6502. {
  6503. var g = this, p = this.options;
  6504. e = e || {};
  6505. var rowdata = e.rowdata, column = e.column;
  6506. if (column && (column.isdetail || column.ischeckbox)) return;
  6507. if (rowdata && rowdata[p.statusName] == "delete") return;
  6508. if (rowdata && column)
  6509. {
  6510. var cell = g.getCellObj(rowdata, column);
  6511. $(cell).html(g._getCellHtml(rowdata, column));
  6512. if (!column.issystem)
  6513. g.setCellEditing(rowdata, column, false);
  6514. }
  6515. else if (rowdata)
  6516. {
  6517. $(g.columns).each(function () { g.reRender({ rowdata: rowdata, column: this }); });
  6518. }
  6519. else if (column)
  6520. {
  6521. for (var rowid in g.records) { g.reRender({ rowdata: g.records[rowid], column: column }); }
  6522. for (var i = 0; i < g.totalNumber; i++)
  6523. {
  6524. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  6525. $("div:first", tobj).html(g._getTotalCellContent(column, g.groups && g.groups[i] ? g.groups[i] : g.currentData[p.root]));
  6526. }
  6527. }
  6528. else
  6529. {
  6530. g._showData();
  6531. }
  6532. },
  6533. getData: function (status, removeStatus)
  6534. {
  6535. var g = this, p = this.options;
  6536. var data = [];
  6537. for (var rowid in g.records)
  6538. {
  6539. var o = $.extend(true, {}, g.records[rowid]);
  6540. if (o[p.statusName] == status || status == undefined)
  6541. {
  6542. data.push(g.formatRecord(o, removeStatus));
  6543. }
  6544. }
  6545. return data;
  6546. },
  6547. //格式化数据
  6548. formatRecord: function (o, removeStatus)
  6549. {
  6550. delete o['__id'];
  6551. delete o['__previd'];
  6552. delete o['__nextid'];
  6553. delete o['__index'];
  6554. if (this.options.tree)
  6555. {
  6556. delete o['__pid'];
  6557. delete o['__level'];
  6558. delete o['__hasChildren'];
  6559. }
  6560. if (removeStatus) delete o[this.options.statusName];
  6561. return o;
  6562. },
  6563. getUpdated: function ()
  6564. {
  6565. return this.getData('update', true);
  6566. },
  6567. getDeleted: function ()
  6568. {
  6569. return this.deletedRows;
  6570. },
  6571. getAdded: function ()
  6572. {
  6573. return this.getData('add', true);
  6574. },
  6575. getColumn: function (columnParm)
  6576. {
  6577. var g = this, p = this.options;
  6578. if (typeof columnParm == "string") // column id
  6579. {
  6580. if (g._isColumnId(columnParm))
  6581. return g._columns[columnParm];
  6582. else
  6583. return g.columns[parseInt(columnParm)];
  6584. }
  6585. else if (typeof (columnParm) == "number") //column index
  6586. {
  6587. return g.columns[columnParm];
  6588. }
  6589. else if (typeof columnParm == "object" && columnParm.nodeType == 1) //column header cell
  6590. {
  6591. var ids = columnParm.id.split('|');
  6592. var columnid = ids[ids.length - 1];
  6593. return g._columns[columnid];
  6594. }
  6595. return columnParm;
  6596. },
  6597. getColumnType: function (columnname)
  6598. {
  6599. var g = this, p = this.options;
  6600. for (i = 0; i < g.columns.length; i++)
  6601. {
  6602. if (g.columns[i].name == columnname)
  6603. {
  6604. if (g.columns[i].type) return g.columns[i].type;
  6605. return "string";
  6606. }
  6607. }
  6608. return null;
  6609. },
  6610. //是否包含汇总
  6611. isTotalSummary: function ()
  6612. {
  6613. var g = this, p = this.options;
  6614. for (var i = 0; i < g.columns.length; i++)
  6615. {
  6616. if (g.columns[i].totalSummary) return true;
  6617. }
  6618. return false;
  6619. },
  6620. //根据层次获取列集合
  6621. //如果columnLevel为空,获取叶节点集合
  6622. getColumns: function (columnLevel)
  6623. {
  6624. var g = this, p = this.options;
  6625. var columns = [];
  6626. for (var id in g._columns)
  6627. {
  6628. var col = g._columns[id];
  6629. if (columnLevel != undefined)
  6630. {
  6631. if (col['__level'] == columnLevel) columns.push(col);
  6632. }
  6633. else
  6634. {
  6635. if (col['__leaf']) columns.push(col);
  6636. }
  6637. }
  6638. return columns;
  6639. },
  6640. //改变排序
  6641. changeSort: function (columnName, sortOrder)
  6642. {
  6643. var g = this, p = this.options;
  6644. if (g.loading) return true;
  6645. if (p.dataAction == "local")
  6646. {
  6647. var columnType = g.getColumnType(columnName);
  6648. if (!g.sortedData)
  6649. g.sortedData = g.filteredData;
  6650. if (p.sortName == columnName)
  6651. {
  6652. g.sortedData[p.root].reverse();
  6653. } else
  6654. {
  6655. g.sortedData[p.root].sort(function (data1, data2)
  6656. {
  6657. return g._compareData(data1, data2, columnName, columnType);
  6658. });
  6659. }
  6660. if (p.usePager)
  6661. g.currentData = g._getCurrentPageData(g.sortedData);
  6662. else
  6663. g.currentData = g.sortedData;
  6664. g._showData();
  6665. }
  6666. p.sortName = columnName;
  6667. p.sortOrder = sortOrder;
  6668. if (p.dataAction == "server")
  6669. {
  6670. g.loadData(p.where);
  6671. }
  6672. },
  6673. //改变分页
  6674. changePage: function (ctype)
  6675. {
  6676. var g = this, p = this.options;
  6677. if (g.loading) return true;
  6678. if (p.dataAction != "local" && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  6679. return false;
  6680. p.pageCount = parseInt($(".pcontrol span", g.toolbar).html());
  6681. switch (ctype)
  6682. {
  6683. case 'first': if (p.page == 1) return; p.newPage = 1; break;
  6684. case 'prev': if (p.page == 1) return; if (p.page > 1) p.newPage = parseInt(p.page) - 1; break;
  6685. case 'next': if (p.page >= p.pageCount) return; p.newPage = parseInt(p.page) + 1; break;
  6686. case 'last': if (p.page >= p.pageCount) return; p.newPage = p.pageCount; break;
  6687. case 'input':
  6688. var nv = parseInt($('.pcontrol input', g.toolbar).val());
  6689. if (isNaN(nv)) nv = 1;
  6690. if (nv < 1) nv = 1;
  6691. else if (nv > p.pageCount) nv = p.pageCount;
  6692. $('.pcontrol input', g.toolbar).val(nv);
  6693. p.newPage = nv;
  6694. break;
  6695. }
  6696. if (p.newPage == p.page) return false;
  6697. if (p.newPage == 1)
  6698. {
  6699. $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
  6700. $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
  6701. }
  6702. else
  6703. {
  6704. $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
  6705. $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
  6706. }
  6707. if (p.newPage == p.pageCount)
  6708. {
  6709. $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
  6710. $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
  6711. }
  6712. else
  6713. {
  6714. $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
  6715. $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
  6716. }
  6717. g.trigger('changePage', [p.newPage]);
  6718. if (p.dataAction == "server")
  6719. {
  6720. g.loadData(p.where);
  6721. }
  6722. else
  6723. {
  6724. g.currentData = g._getCurrentPageData(g.filteredData);
  6725. g._showData();
  6726. }
  6727. },
  6728. getSelectedRow: function ()
  6729. {
  6730. for (var i in this.selected)
  6731. {
  6732. var o = this.selected[i];
  6733. if (o['__id'] in this.records)
  6734. return o;
  6735. }
  6736. return null;
  6737. },
  6738. getSelectedRows: function ()
  6739. {
  6740. var arr = [];
  6741. for (var i in this.selected)
  6742. {
  6743. var o = this.selected[i];
  6744. if (o['__id'] in this.records)
  6745. arr.push(o);
  6746. }
  6747. return arr;
  6748. },
  6749. getSelectedRowObj: function ()
  6750. {
  6751. for (var i in this.selected)
  6752. {
  6753. var o = this.selected[i];
  6754. if (o['__id'] in this.records)
  6755. return this.getRowObj(o);
  6756. }
  6757. return null;
  6758. },
  6759. getSelectedRowObjs: function ()
  6760. {
  6761. var arr = [];
  6762. for (var i in this.selected)
  6763. {
  6764. var o = this.selected[i];
  6765. if (o['__id'] in this.records)
  6766. arr.push(this.getRowObj(o));
  6767. }
  6768. return arr;
  6769. },
  6770. getCellObj: function (rowParm, column)
  6771. {
  6772. var rowdata = this.getRow(rowParm);
  6773. column = this.getColumn(column);
  6774. return document.getElementById(this._getCellDomId(rowdata, column));
  6775. },
  6776. getRowObj: function (rowParm, frozen)
  6777. {
  6778. var g = this, p = this.options;
  6779. if (rowParm == null) return null;
  6780. if (typeof (rowParm) == "string")
  6781. {
  6782. if (g._isRowId(rowParm))
  6783. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + rowParm);
  6784. else
  6785. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[parseInt(rowParm)]['__id']);
  6786. }
  6787. else if (typeof (rowParm) == "number")
  6788. {
  6789. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[rowParm]['__id']);
  6790. }
  6791. else if (typeof (rowParm) == "object" && rowParm['__id']) //rowdata
  6792. {
  6793. return g.getRowObj(rowParm['__id'], frozen);
  6794. }
  6795. return rowParm;
  6796. },
  6797. getRow: function (rowParm)
  6798. {
  6799. var g = this, p = this.options;
  6800. if (rowParm == null) return null;
  6801. if (typeof (rowParm) == "string")
  6802. {
  6803. if (g._isRowId(rowParm))
  6804. return g.records[rowParm];
  6805. else
  6806. return g.rows[parseInt(rowParm)];
  6807. }
  6808. else if (typeof (rowParm) == "number")
  6809. {
  6810. return g.rows[parseInt(rowParm)];
  6811. }
  6812. else if (typeof (rowParm) == "object" && rowParm.nodeType == 1 && !rowParm['__id']) //dom对象
  6813. {
  6814. return g._getRowByDomId(rowParm.id);
  6815. }
  6816. return rowParm;
  6817. },
  6818. _setColumnVisible: function (column, hide)
  6819. {
  6820. var g = this, p = this.options;
  6821. if (!hide) //显示
  6822. {
  6823. column._hide = false;
  6824. document.getElementById(column['__domid']).style.display = "";
  6825. //判断分组列是否隐藏,如果隐藏了则显示出来
  6826. if (column['__pid'] != -1)
  6827. {
  6828. var pcol = g._columns[column['__pid']];
  6829. if (pcol._hide)
  6830. {
  6831. document.getElementById(pcol['__domid']).style.display = "";
  6832. this._setColumnVisible(pcol, hide);
  6833. }
  6834. }
  6835. }
  6836. else //隐藏
  6837. {
  6838. column._hide = true;
  6839. document.getElementById(column['__domid']).style.display = "none";
  6840. //判断同分组的列是否都隐藏,如果是则隐藏分组列
  6841. if (column['__pid'] != -1)
  6842. {
  6843. var hideall = true;
  6844. var pcol = this._columns[column['__pid']];
  6845. for (var i = 0; pcol && i < pcol.columns.length; i++)
  6846. {
  6847. if (!pcol.columns[i]._hide)
  6848. {
  6849. hideall = false;
  6850. break;
  6851. }
  6852. }
  6853. if (hideall)
  6854. {
  6855. pcol._hide = true;
  6856. document.getElementById(pcol['__domid']).style.display = "none";
  6857. this._setColumnVisible(pcol, hide);
  6858. }
  6859. }
  6860. }
  6861. },
  6862. //显示隐藏列
  6863. toggleCol: function (columnparm, visible, toggleByPopup)
  6864. {
  6865. var g = this, p = this.options;
  6866. var column;
  6867. if (typeof (columnparm) == "number")
  6868. {
  6869. column = g.columns[columnparm];
  6870. }
  6871. else if (typeof (columnparm) == "object" && columnparm['__id'])
  6872. {
  6873. column = columnparm;
  6874. }
  6875. else if (typeof (columnparm) == "string")
  6876. {
  6877. if (g._isColumnId(columnparm)) // column id
  6878. {
  6879. column = g._columns[columnparm];
  6880. }
  6881. else // column name
  6882. {
  6883. $(g.columns).each(function ()
  6884. {
  6885. if (this.name == columnparm)
  6886. g.toggleCol(this, visible, toggleByPopup);
  6887. });
  6888. return;
  6889. }
  6890. }
  6891. if (!column) return;
  6892. var columnindex = column['__leafindex'];
  6893. var headercell = document.getElementById(column['__domid']);
  6894. if (!headercell) return;
  6895. headercell = $(headercell);
  6896. var cells = [];
  6897. for (var i in g.rows)
  6898. {
  6899. var obj = g.getCellObj(g.rows[i], column);
  6900. if (obj) cells.push(obj);
  6901. }
  6902. for (var i = 0; i < g.totalNumber; i++)
  6903. {
  6904. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  6905. if (tobj) cells.push(tobj);
  6906. }
  6907. var colwidth = column._width;
  6908. //显示列
  6909. if (visible && column._hide)
  6910. {
  6911. if (column.frozen)
  6912. g.f.gridtablewidth += (parseInt(colwidth) + 1);
  6913. else
  6914. g.gridtablewidth += (parseInt(colwidth) + 1);
  6915. g._setColumnVisible(column, false);
  6916. $(cells).show();
  6917. }
  6918. //隐藏列
  6919. else if (!visible && !column._hide)
  6920. {
  6921. if (column.frozen)
  6922. g.f.gridtablewidth -= (parseInt(colwidth) + 1);
  6923. else
  6924. g.gridtablewidth -= (parseInt(colwidth) + 1);
  6925. g._setColumnVisible(column, true);
  6926. $(cells).hide();
  6927. }
  6928. if (column.frozen)
  6929. {
  6930. $("div:first", g.f.gridheader).width(g.f.gridtablewidth);
  6931. $("div:first", g.f.gridbody).width(g.f.gridtablewidth);
  6932. }
  6933. else
  6934. {
  6935. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  6936. $("div:first", g.gridbody).width(g.gridtablewidth);
  6937. }
  6938. g._updateFrozenWidth();
  6939. if (!toggleByPopup)
  6940. {
  6941. $(':checkbox[columnindex=' + columnindex + "]", g.popup).each(function ()
  6942. {
  6943. this.checked = visible;
  6944. if ($.fn.ligerCheckBox)
  6945. {
  6946. var checkboxmanager = $(this).ligerGetCheckBoxManager();
  6947. if (checkboxmanager) checkboxmanager.updateStyle();
  6948. }
  6949. });
  6950. }
  6951. },
  6952. //设置列宽
  6953. setColumnWidth: function (columnparm, newwidth)
  6954. {
  6955. var g = this, p = this.options;
  6956. if (!newwidth) return;
  6957. newwidth = parseInt(newwidth, 10);
  6958. var column;
  6959. if (typeof (columnparm) == "number")
  6960. {
  6961. column = g.columns[columnparm];
  6962. }
  6963. else if (typeof (columnparm) == "object" && columnparm['__id'])
  6964. {
  6965. column = columnparm;
  6966. }
  6967. else if (typeof (columnparm) == "string")
  6968. {
  6969. if (g._isColumnId(columnparm)) // column id
  6970. {
  6971. column = g._columns[columnparm];
  6972. }
  6973. else // column name
  6974. {
  6975. $(g.columns).each(function ()
  6976. {
  6977. if (this.name == columnparm)
  6978. g.setColumnWidth(this, newwidth);
  6979. });
  6980. return;
  6981. }
  6982. }
  6983. if (!column) return;
  6984. var mincolumnwidth = p.minColumnWidth;
  6985. if (column.minWidth) mincolumnwidth = column.minWidth;
  6986. newwidth = newwidth < mincolumnwidth ? mincolumnwidth : newwidth;
  6987. var diff = newwidth - column._width;
  6988. if (g.trigger('beforeChangeColumnWidth', [column, newwidth]) == false) return;
  6989. column._width = newwidth;
  6990. if (column.frozen)
  6991. {
  6992. g.f.gridtablewidth += diff;
  6993. $("div:first", g.f.gridheader).width(g.f.gridtablewidth);
  6994. $("div:first", g.f.gridbody).width(g.f.gridtablewidth);
  6995. }
  6996. else
  6997. {
  6998. g.gridtablewidth += diff;
  6999. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  7000. $("div:first", g.gridbody).width(g.gridtablewidth);
  7001. }
  7002. $(document.getElementById(column['__domid'])).css('width', newwidth);
  7003. var cells = [];
  7004. for (var rowid in g.records)
  7005. {
  7006. var obj = g.getCellObj(g.records[rowid], column);
  7007. if (obj) cells.push(obj);
  7008. if (!g.enabledDetailEdit() && g.editors[rowid] && g.editors[rowid][column['__id']])
  7009. {
  7010. var o = g.editors[rowid][column['__id']];
  7011. if (o.editor.resize) o.editor.resize(o.input, newwidth, o.container.height(), o.editParm);
  7012. }
  7013. }
  7014. for (var i = 0; i < g.totalNumber; i++)
  7015. {
  7016. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  7017. if (tobj) cells.push(tobj);
  7018. }
  7019. $(cells).css('width', newwidth).find("> div.l-grid-row-cell-inner:first").css('width', newwidth - 8);
  7020. g._updateFrozenWidth();
  7021. g.trigger('afterChangeColumnWidth', [column, newwidth]);
  7022. },
  7023. //改变列表头内容
  7024. changeHeaderText: function (columnparm, headerText)
  7025. {
  7026. var g = this, p = this.options;
  7027. var column;
  7028. if (typeof (columnparm) == "number")
  7029. {
  7030. column = g.columns[columnparm];
  7031. }
  7032. else if (typeof (columnparm) == "object" && columnparm['__id'])
  7033. {
  7034. column = columnparm;
  7035. }
  7036. else if (typeof (columnparm) == "string")
  7037. {
  7038. if (g._isColumnId(columnparm)) // column id
  7039. {
  7040. column = g._columns[columnparm];
  7041. }
  7042. else // column name
  7043. {
  7044. $(g.columns).each(function ()
  7045. {
  7046. if (this.name == columnparm)
  7047. g.changeHeaderText(this, headerText);
  7048. });
  7049. return;
  7050. }
  7051. }
  7052. if (!column) return;
  7053. var columnindex = column['__leafindex'];
  7054. var headercell = document.getElementById(column['__domid']);
  7055. $(".l-grid-hd-cell-text", headercell).html(headerText);
  7056. if (p.allowHideColumn)
  7057. {
  7058. $(':checkbox[columnindex=' + columnindex + "]", g.popup).parent().next().html(headerText);
  7059. }
  7060. },
  7061. //改变列的位置
  7062. changeCol: function (from, to, isAfter)
  7063. {
  7064. var g = this, p = this.options;
  7065. if (!from || !to) return;
  7066. var fromCol = g.getColumn(from);
  7067. var toCol = g.getColumn(to);
  7068. fromCol.frozen = toCol.frozen;
  7069. var fromColIndex, toColIndex;
  7070. var fromColumns = fromCol['__pid'] == -1 ? p.columns : g._columns[fromCol['__pid']].columns;
  7071. var toColumns = toCol['__pid'] == -1 ? p.columns : g._columns[toCol['__pid']].columns;
  7072. fromColIndex = $.inArray(fromCol, fromColumns);
  7073. toColIndex = $.inArray(toCol, toColumns);
  7074. var sameParent = fromColumns == toColumns;
  7075. var sameLevel = fromCol['__level'] == toCol['__level'];
  7076. toColumns.splice(toColIndex + (isAfter ? 1 : 0), 0, fromCol);
  7077. if (!sameParent)
  7078. {
  7079. fromColumns.splice(fromColIndex, 1);
  7080. }
  7081. else
  7082. {
  7083. if (isAfter) fromColumns.splice(fromColIndex, 1);
  7084. else fromColumns.splice(fromColIndex + 1, 1);
  7085. }
  7086. g._setColumns(p.columns);
  7087. g.reRender();
  7088. },
  7089. collapseDetail: function (rowParm)
  7090. {
  7091. var g = this, p = this.options;
  7092. var rowdata = g.getRow(rowParm);
  7093. if (!rowdata) return;
  7094. for (var i = 0, l = g.columns.length; i < l; i++)
  7095. {
  7096. if (g.columns[i].isdetail)
  7097. {
  7098. var row = g.getRowObj(rowdata);
  7099. var cell = g.getCellObj(rowdata, g.columns[i]);
  7100. $(row).next("tr.l-grid-detailpanel").hide();
  7101. $(".l-grid-row-cell-detailbtn:first", cell).removeClass("l-open");
  7102. g.trigger('SysGridHeightChanged');
  7103. return;
  7104. }
  7105. }
  7106. },
  7107. extendDetail: function (rowParm)
  7108. {
  7109. var g = this, p = this.options;
  7110. var rowdata = g.getRow(rowParm);
  7111. if (!rowdata) return;
  7112. for (var i = 0, l = g.columns; i < l; i++)
  7113. {
  7114. if (g.columns[i].isdetail)
  7115. {
  7116. var row = g.getRowObj(rowdata);
  7117. var cell = g.getCellObj(rowdata, g.columns[i]);
  7118. $(row).next("tr.l-grid-detailpanel").show();
  7119. $(".l-grid-row-cell-detailbtn:first", cell).addClass("l-open");
  7120. g.trigger('SysGridHeightChanged');
  7121. return;
  7122. }
  7123. }
  7124. },
  7125. getParent: function (rowParm)
  7126. {
  7127. var g = this, p = this.options;
  7128. if (!p.tree) return null;
  7129. var rowdata = g.getRow(rowParm);
  7130. if (!rowdata) return null;
  7131. if (rowdata['__pid'] in g.records) return g.records[rowdata['__pid']];
  7132. else return null;
  7133. },
  7134. getChildren: function (rowParm, deep)
  7135. {
  7136. var g = this, p = this.options;
  7137. if (!p.tree) return null;
  7138. var rowData = g.getRow(rowParm);
  7139. if (!rowData) return null;
  7140. var arr = [];
  7141. function loadChildren(data)
  7142. {
  7143. if (data[p.tree.childrenName])
  7144. {
  7145. for (var i = 0, l = data[p.tree.childrenName].length; i < l; i++)
  7146. {
  7147. var o = data[p.tree.childrenName][i];
  7148. if (o['__status'] == 'delete') continue;
  7149. arr.push(o);
  7150. if (deep)
  7151. loadChildren(o);
  7152. }
  7153. }
  7154. }
  7155. loadChildren(rowData);
  7156. return arr;
  7157. },
  7158. isLeaf: function (rowParm)
  7159. {
  7160. var g = this, p = this.options;
  7161. var rowdata = g.getRow(rowParm);
  7162. if (!rowdata) return;
  7163. return rowdata['__hasChildren'] ? false : true;
  7164. },
  7165. hasChildren: function (rowParm)
  7166. {
  7167. var g = this, p = this.options;
  7168. var rowdata = this.getRow(rowParm);
  7169. if (!rowdata) return;
  7170. return (rowdata[p.tree.childrenName] && rowdata[p.tree.childrenName].length) ? true : false;
  7171. },
  7172. existRecord: function (record)
  7173. {
  7174. for (var rowid in this.records)
  7175. {
  7176. if (this.records[rowid] == record) return true;
  7177. }
  7178. return false;
  7179. },
  7180. _removeSelected: function (rowdata)
  7181. {
  7182. var g = this, p = this.options;
  7183. if (p.tree)
  7184. {
  7185. var children = g.getChildren(rowdata, true);
  7186. if (children)
  7187. {
  7188. for (var i = 0, l = children.length; i < l; i++)
  7189. {
  7190. var index2 = $.inArray(children[i], g.selected);
  7191. if (index2 != -1) g.selected.splice(index2, 1);
  7192. }
  7193. }
  7194. }
  7195. var index = $.inArray(rowdata, g.selected);
  7196. if (index != -1) g.selected.splice(index, 1);
  7197. },
  7198. _getParentChildren: function (rowParm)
  7199. {
  7200. var g = this, p = this.options;
  7201. var rowdata = g.getRow(rowParm);
  7202. var listdata;
  7203. if (p.tree && g.existRecord(rowdata) && rowdata['__pid'] in g.records)
  7204. {
  7205. listdata = g.records[rowdata['__pid']][p.tree.childrenName];
  7206. }
  7207. else
  7208. {
  7209. listdata = g.currentData[p.root];
  7210. }
  7211. return listdata;
  7212. },
  7213. _removeData: function (rowdata)
  7214. {
  7215. var g = this, p = this.options;
  7216. var listdata = g._getParentChildren(rowdata);
  7217. var index = $.inArray(rowdata, listdata);
  7218. if (index != -1)
  7219. {
  7220. listdata.splice(index, 1);
  7221. }
  7222. g._removeSelected(rowdata);
  7223. },
  7224. _addData: function (rowdata, parentdata, neardata, isBefore)
  7225. {
  7226. var g = this, p = this.options;
  7227. var listdata = g.currentData[p.root];
  7228. if (neardata)
  7229. {
  7230. if (p.tree)
  7231. {
  7232. if (parentdata)
  7233. listdata = parentdata[p.tree.childrenName];
  7234. else if (neardata['__pid'] in g.records)
  7235. listdata = g.records[neardata['__pid']][p.tree.childrenName];
  7236. }
  7237. var index = $.inArray(neardata, listdata);
  7238. listdata.splice(index == -1 ? -1 : index + (isBefore ? 0 : 1), 0, rowdata);
  7239. }
  7240. else
  7241. {
  7242. if (p.tree && parentdata)
  7243. {
  7244. listdata = parentdata[p.tree.childrenName];
  7245. }
  7246. listdata.push(rowdata);
  7247. }
  7248. },
  7249. //移动数据(树)
  7250. //@parm [parentdata] 附加到哪一个节点下级
  7251. //@parm [neardata] 附加到哪一个节点的上方/下方
  7252. //@parm [isBefore] 是否附加到上方
  7253. _appendData: function (rowdata, parentdata, neardata, isBefore)
  7254. {
  7255. var g = this, p = this.options;
  7256. rowdata[p.statusName] = "update";
  7257. g._removeData(rowdata);
  7258. g._addData(rowdata, parentdata, neardata, isBefore);
  7259. },
  7260. appendRange: function (rows, parentdata, neardata, isBefore)
  7261. {
  7262. var g = this, p = this.options;
  7263. var toRender = false;
  7264. $.each(rows, function (i, item)
  7265. {
  7266. if (item['__id'] && g.existRecord(item))
  7267. {
  7268. if (g.isLeaf(parentdata)) g.upgrade(parentdata);
  7269. g._appendData(item, parentdata, neardata, isBefore);
  7270. toRender = true;
  7271. }
  7272. else
  7273. {
  7274. g.appendRow(item, parentdata, neardata, isBefore);
  7275. }
  7276. });
  7277. if (toRender) g.reRender();
  7278. },
  7279. appendRow: function (rowdata, parentdata, neardata, isBefore)
  7280. {
  7281. var g = this, p = this.options;
  7282. if ($.isArray(rowdata))
  7283. {
  7284. g.appendRange(rowdata, parentdata, neardata, isBefore);
  7285. return;
  7286. }
  7287. if (rowdata['__id'] && g.existRecord(rowdata))
  7288. {
  7289. g._appendData(rowdata, parentdata, neardata, isBefore);
  7290. g.reRender();
  7291. return;
  7292. }
  7293. if (parentdata && g.isLeaf(parentdata)) g.upgrade(parentdata);
  7294. g.addRow(rowdata, neardata, isBefore ? true : false, parentdata);
  7295. },
  7296. upgrade: function (rowParm)
  7297. {
  7298. var g = this, p = this.options;
  7299. var rowdata = g.getRow(rowParm);
  7300. if (!rowdata || !p.tree) return;
  7301. rowdata[p.tree.childrenName] = rowdata[p.tree.childrenName] || [];
  7302. rowdata['__hasChildren'] = true;
  7303. var rowobjs = [g.getRowObj(rowdata)];
  7304. if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true));
  7305. $("> td > div > .l-grid-tree-space:last", rowobjs).addClass("l-grid-tree-link l-grid-tree-link-open");
  7306. },
  7307. demotion: function (rowParm)
  7308. {
  7309. var g = this, p = this.options;
  7310. var rowdata = g.getRow(rowParm);
  7311. if (!rowdata || !p.tree) return;
  7312. var rowobjs = [g.getRowObj(rowdata)];
  7313. if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true));
  7314. $("> td > div > .l-grid-tree-space:last", rowobjs).removeClass("l-grid-tree-link l-grid-tree-link-open l-grid-tree-link-close");
  7315. if (g.hasChildren(rowdata))
  7316. {
  7317. var children = g.getChildren(rowdata);
  7318. for (var i = 0, l = children.length; i < l; i++)
  7319. {
  7320. g.deleteRow(children[i]);
  7321. }
  7322. }
  7323. rowdata['__hasChildren'] = false;
  7324. },
  7325. collapse: function (rowParm)
  7326. {
  7327. var g = this, p = this.options;
  7328. var targetRowObj = g.getRowObj(rowParm);
  7329. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  7330. if (linkbtn.hasClass("l-grid-tree-link-close")) return;
  7331. g.toggle(rowParm);
  7332. },
  7333. expand: function (rowParm)
  7334. {
  7335. var g = this, p = this.options;
  7336. var targetRowObj = g.getRowObj(rowParm);
  7337. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  7338. if (linkbtn.hasClass("l-grid-tree-link-open")) return;
  7339. g.toggle(rowParm);
  7340. },
  7341. toggle: function (rowParm)
  7342. {
  7343. if (!rowParm) return;
  7344. var g = this, p = this.options;
  7345. var rowdata = g.getRow(rowParm);
  7346. var targetRowObj = [g.getRowObj(rowdata)];
  7347. if (g.enabledFrozen()) targetRowObj.push(g.getRowObj(rowdata, true));
  7348. var level = rowdata['__level'], indexInCollapsedRows;
  7349. var linkbtn = $(".l-grid-tree-link:first", targetRowObj);
  7350. var opening = true;
  7351. g.collapsedRows = g.collapsedRows || [];
  7352. if (linkbtn.hasClass("l-grid-tree-link-close")) //收缩
  7353. {
  7354. linkbtn.removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
  7355. indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows);
  7356. if (indexInCollapsedRows != -1) g.collapsedRows.splice(indexInCollapsedRows, 1);
  7357. }
  7358. else //折叠
  7359. {
  7360. opening = false;
  7361. linkbtn.addClass("l-grid-tree-link-close").removeClass("l-grid-tree-link-open");
  7362. indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows);
  7363. if (indexInCollapsedRows == -1) g.collapsedRows.push(rowdata);
  7364. }
  7365. var children = g.getChildren(rowdata, true);
  7366. for (var i = 0, l = children.length; i < l; i++)
  7367. {
  7368. var o = children[i];
  7369. var currentRow = $([g.getRowObj(o['__id'])]);
  7370. if (g.enabledFrozen()) currentRow = currentRow.add(g.getRowObj(o['__id'], true));
  7371. if (opening)
  7372. {
  7373. $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
  7374. currentRow.show();
  7375. }
  7376. else
  7377. {
  7378. $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-open").addClass("l-grid-tree-link-close");
  7379. currentRow.hide();
  7380. }
  7381. }
  7382. },
  7383. _bulid: function ()
  7384. {
  7385. var g = this;
  7386. g._clearGrid();
  7387. //创建头部
  7388. g._initBuildHeader();
  7389. //宽度高度初始化
  7390. g._initHeight();
  7391. //创建底部工具条
  7392. g._initFootbar();
  7393. //创建分页
  7394. g._buildPager();
  7395. //创建事件
  7396. g._setEvent();
  7397. },
  7398. _setColumns: function (columns)
  7399. {
  7400. var g = this;
  7401. //初始化列
  7402. g._initColumns();
  7403. //创建表头
  7404. g._initBuildGridHeader();
  7405. //创建 显示/隐藏 列 列表
  7406. g._initBuildPopup();
  7407. },
  7408. _initBuildHeader: function ()
  7409. {
  7410. var g = this, p = this.options;
  7411. if (p.title)
  7412. {
  7413. $(".l-panel-header-text", g.header).html(p.title);
  7414. if (p.headerImg)
  7415. g.header.append("<img src='" + p.headerImg + "' />").addClass("l-panel-header-hasicon");
  7416. }
  7417. else
  7418. {
  7419. g.header.hide();
  7420. }
  7421. if (p.toolbar)
  7422. {
  7423. if ($.fn.ligerToolBar)
  7424. g.toolbarManager = g.topbar.ligerToolBar(p.toolbar);
  7425. }
  7426. else
  7427. {
  7428. g.topbar.remove();
  7429. }
  7430. },
  7431. _createColumnId: function (column)
  7432. {
  7433. if (column.id != null) return column.id.toString();
  7434. return "c" + (100 + this._columnCount);
  7435. },
  7436. _isColumnId: function (str)
  7437. {
  7438. return (str in this._columns);
  7439. },
  7440. _initColumns: function ()
  7441. {
  7442. var g = this, p = this.options;
  7443. g._columns = {}; //全部列的信息
  7444. g._columnCount = 0;
  7445. g._columnLeafCount = 0;
  7446. g._columnMaxLevel = 1;
  7447. if (!p.columns) return;
  7448. function removeProp(column, props)
  7449. {
  7450. for (var i in props)
  7451. {
  7452. if (props[i] in column)
  7453. delete column[props[i]];
  7454. }
  7455. }
  7456. //设置id、pid、level、leaf,返回叶节点数,如果是叶节点,返回1
  7457. function setColumn(column, level, pid, previd)
  7458. {
  7459. removeProp(column, ['__id', '__pid', '__previd', '__nextid', '__domid', '__leaf', '__leafindex', '__level', '__colSpan', '__rowSpan']);
  7460. if (level > g._columnMaxLevel) g._columnMaxLevel = level;
  7461. g._columnCount++;
  7462. column['__id'] = g._createColumnId(column);
  7463. column['__domid'] = g.id + "|hcell|" + column['__id'];
  7464. g._columns[column['__id']] = column;
  7465. if (!column.columns || !column.columns.length)
  7466. column['__leafindex'] = g._columnLeafCount++;
  7467. column['__level'] = level;
  7468. column['__pid'] = pid;
  7469. column['__previd'] = previd;
  7470. if (!column.columns || !column.columns.length)
  7471. {
  7472. column['__leaf'] = true;
  7473. return 1;
  7474. }
  7475. var leafcount = 0;
  7476. var newid = -1;
  7477. for (var i = 0, l = column.columns.length; i < l; i++)
  7478. {
  7479. var col = column.columns[i];
  7480. leafcount += setColumn(col, level + 1, column['__id'], newid);
  7481. newid = col['__id'];
  7482. }
  7483. column['__leafcount'] = leafcount;
  7484. return leafcount;
  7485. }
  7486. var lastid = -1;
  7487. //行序号
  7488. if (p.rownumbers)
  7489. {
  7490. var frozenRownumbers = g.enabledGroup() ? false : p.frozen && p.frozenRownumbers;
  7491. var col = { isrownumber: true, issystem: true, width: p.rownumbersColWidth, frozen: frozenRownumbers };
  7492. setColumn(col, 1, -1, lastid);
  7493. lastid = col['__id'];
  7494. }
  7495. //明细列
  7496. if (g.enabledDetail())
  7497. {
  7498. var frozenDetail = g.enabledGroup() ? false : p.frozen && p.frozenDetail;
  7499. var col = { isdetail: true, issystem: true, width: p.detailColWidth, frozen: frozenDetail };
  7500. setColumn(col, 1, -1, lastid);
  7501. lastid = col['__id'];
  7502. }
  7503. //复选框列
  7504. if (g.enabledCheckbox())
  7505. {
  7506. var frozenCheckbox = g.enabledGroup() ? false : p.frozen && p.frozenCheckbox;
  7507. var col = { ischeckbox: true, issystem: true, width: p.detailColWidth, frozen: frozenCheckbox };
  7508. setColumn(col, 1, -1, lastid);
  7509. lastid = col['__id'];
  7510. }
  7511. for (var i = 0, l = p.columns.length; i < l; i++)
  7512. {
  7513. var col = p.columns[i];
  7514. setColumn(col, 1, -1, lastid);
  7515. lastid = col['__id'];
  7516. }
  7517. //设置colSpan和rowSpan
  7518. for (var id in g._columns)
  7519. {
  7520. var col = g._columns[id];
  7521. if (col['__leafcount'] > 1)
  7522. {
  7523. col['__colSpan'] = col['__leafcount'];
  7524. }
  7525. if (col['__leaf'] && col['__level'] != g._columnMaxLevel)
  7526. {
  7527. col['__rowSpan'] = g._columnMaxLevel - col['__level'] + 1;
  7528. }
  7529. }
  7530. //叶级别列的信息
  7531. g.columns = g.getColumns();
  7532. $(g.columns).each(function (i, column)
  7533. {
  7534. column.columnname = column.name;
  7535. column.columnindex = i;
  7536. column.type = column.type || "string";
  7537. column.islast = i == g.columns.length - 1;
  7538. column.isSort = column.isSort == false ? false : true;
  7539. column.frozen = column.frozen ? true : false;
  7540. column._width = g._getColumnWidth(column);
  7541. column._hide = column.hide ? true : false;
  7542. });
  7543. },
  7544. _getColumnWidth: function (column)
  7545. {
  7546. var g = this, p = this.options;
  7547. if (column._width) return column._width;
  7548. var colwidth;
  7549. if (column.width)
  7550. {
  7551. colwidth = column.width;
  7552. }
  7553. else if (p.columnWidth)
  7554. {
  7555. colwidth = p.columnWidth;
  7556. }
  7557. if (!colwidth)
  7558. {
  7559. var lwidth = 4;
  7560. if (g.enabledCheckbox()) lwidth += p.checkboxColWidth;
  7561. if (g.enabledDetail()) lwidth += p.detailColWidth;
  7562. colwidth = parseInt((g.grid.width() - lwidth) / g.columns.length);
  7563. }
  7564. if (typeof (colwidth) == "string" && colwidth.indexOf('%') > 0)
  7565. {
  7566. column._width = colwidth = parseInt(parseInt(colwidth) * 0.01 * (g.grid.width() - g.columns.length));
  7567. }
  7568. if (column.minWidth && colwidth < column.minWidth) colwidth = column.minWidth;
  7569. if (column.maxWidth && colwidth > column.maxWidth) colwidth = column.maxWidth;
  7570. column._width = colwidth;
  7571. return colwidth;
  7572. },
  7573. _createHeaderCell: function (column)
  7574. {
  7575. var g = this, p = this.options;
  7576. var jcell = $("<td class='l-grid-hd-cell'><div class='l-grid-hd-cell-inner'><span class='l-grid-hd-cell-text'></span></div></td>");
  7577. jcell.attr("id", column['__domid']);
  7578. if (!column['__leaf'])
  7579. jcell.addClass("l-grid-hd-cell-mul");
  7580. if (column.columnindex == g.columns.length - 1)
  7581. {
  7582. jcell.addClass("l-grid-hd-cell-last");
  7583. }
  7584. if (column.isrownumber)
  7585. {
  7586. jcell.addClass("l-grid-hd-cell-rownumbers");
  7587. jcell.html("<div class='l-grid-hd-cell-inner'></div>");
  7588. }
  7589. if (column.ischeckbox)
  7590. {
  7591. jcell.addClass("l-grid-hd-cell-checkbox");
  7592. jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-checkbox'></div></div>");
  7593. }
  7594. if (column.isdetail)
  7595. {
  7596. jcell.addClass("l-grid-hd-cell-detail");
  7597. jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-detail'></div></div>");
  7598. }
  7599. if (column.heightAlign)
  7600. {
  7601. $(".l-grid-hd-cell-inner:first", jcell).css("textAlign", column.heightAlign);
  7602. }
  7603. if (column['__colSpan']) jcell.attr("colSpan", column['__colSpan']);
  7604. if (column['__rowSpan'])
  7605. {
  7606. jcell.attr("rowSpan", column['__rowSpan']);
  7607. jcell.height(p.headerRowHeight * column['__rowSpan']);
  7608. } else
  7609. {
  7610. jcell.height(p.headerRowHeight);
  7611. }
  7612. if (column['__leaf'])
  7613. {
  7614. jcell.width(column['_width']);
  7615. jcell.attr("columnindex", column['__leafindex']);
  7616. }
  7617. if (column._hide) jcell.hide();
  7618. if (column.name) jcell.attr({ columnname: column.name });
  7619. var headerText = "";
  7620. if (column.display && column.display != "")
  7621. headerText = column.display;
  7622. else if (column.headerRender)
  7623. headerText = column.headerRender(column);
  7624. else
  7625. headerText = "&nbsp;";
  7626. $(".l-grid-hd-cell-text:first", jcell).html(headerText);
  7627. if (!column.issystem && column['__leaf'] && column.resizable !== false && $.fn.ligerResizable)
  7628. {
  7629. g.colResizable[column['__id']] = jcell.ligerResizable({ handles: 'e',
  7630. onStartResize: function (e, ev)
  7631. {
  7632. this.proxy.hide();
  7633. g.draggingline.css({ height: g.body.height(), top: 0, left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) }).show();
  7634. },
  7635. onResize: function (e, ev)
  7636. {
  7637. g.colresizing = true;
  7638. g.draggingline.css({ left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) });
  7639. $('body').add(jcell).css('cursor', 'e-resize');
  7640. },
  7641. onStopResize: function (e)
  7642. {
  7643. g.colresizing = false;
  7644. $('body').add(jcell).css('cursor', 'default');
  7645. g.draggingline.hide();
  7646. g.setColumnWidth(column, column._width + e.diffX);
  7647. return false;
  7648. }
  7649. });
  7650. }
  7651. return jcell;
  7652. },
  7653. _initBuildGridHeader: function ()
  7654. {
  7655. var g = this, p = this.options;
  7656. g.gridtablewidth = 0;
  7657. g.f.gridtablewidth = 0;
  7658. if (g.colResizable)
  7659. {
  7660. for (var i in g.colResizable)
  7661. {
  7662. g.colResizable[i].destroy();
  7663. }
  7664. g.colResizable = null;
  7665. }
  7666. g.colResizable = {};
  7667. $("tbody:first", g.gridheader).html("");
  7668. $("tbody:first", g.f.gridheader).html("");
  7669. for (var level = 1; level <= g._columnMaxLevel; level++)
  7670. {
  7671. var columns = g.getColumns(level); //获取level层次的列集合
  7672. var islast = level == g._columnMaxLevel; //是否最末级
  7673. var tr = $("<tr class='l-grid-hd-row'></tr>");
  7674. var trf = $("<tr class='l-grid-hd-row'></tr>");
  7675. if (!islast) tr.add(trf).addClass("l-grid-hd-mul");
  7676. $("tbody:first", g.gridheader).append(tr);
  7677. $("tbody:first", g.f.gridheader).append(trf);
  7678. $(columns).each(function (i, column)
  7679. {
  7680. (column.frozen ? trf : tr).append(g._createHeaderCell(column));
  7681. if (column['__leaf'])
  7682. {
  7683. var colwidth = column['_width'];
  7684. if (!column.frozen)
  7685. g.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1;
  7686. else
  7687. g.f.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1;
  7688. }
  7689. });
  7690. }
  7691. if (g._columnMaxLevel > 0)
  7692. {
  7693. var h = p.headerRowHeight * g._columnMaxLevel;
  7694. g.gridheader.add(g.f.gridheader).height(h);
  7695. if (p.rownumbers && p.frozenRownumbers) g.f.gridheader.find("td:first").height(h);
  7696. }
  7697. g._updateFrozenWidth();
  7698. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  7699. },
  7700. _initBuildPopup: function ()
  7701. {
  7702. var g = this, p = this.options;
  7703. $(':checkbox', g.popup).unbind();
  7704. $('tbody tr', g.popup).remove();
  7705. $(g.columns).each(function (i, column)
  7706. {
  7707. if (column.issystem) return;
  7708. if (column.isAllowHide == false) return;
  7709. var chk = 'checked="checked"';
  7710. if (column._hide) chk = '';
  7711. var header = column.display;
  7712. $('tbody', g.popup).append('<tr><td class="l-column-left"><input type="checkbox" ' + chk + ' class="l-checkbox" columnindex="' + i + '"/></td><td class="l-column-right">' + header + '</td></tr>');
  7713. });
  7714. if ($.fn.ligerCheckBox)
  7715. {
  7716. $('input:checkbox', g.popup).ligerCheckBox(
  7717. {
  7718. onBeforeClick: function (obj)
  7719. {
  7720. if (!obj.checked) return true;
  7721. if ($('input:checked', g.popup).length <= p.minColToggle)
  7722. return false;
  7723. return true;
  7724. }
  7725. });
  7726. }
  7727. //表头 - 显示/隐藏'列控制'按钮事件
  7728. if (p.allowHideColumn)
  7729. {
  7730. $('tr', g.popup).hover(function ()
  7731. {
  7732. $(this).addClass('l-popup-row-over');
  7733. },
  7734. function ()
  7735. {
  7736. $(this).removeClass('l-popup-row-over');
  7737. });
  7738. var onPopupCheckboxChange = function ()
  7739. {
  7740. if ($('input:checked', g.popup).length + 1 <= p.minColToggle)
  7741. {
  7742. return false;
  7743. }
  7744. g.toggleCol(parseInt($(this).attr("columnindex")), this.checked, true);
  7745. };
  7746. if ($.fn.ligerCheckBox)
  7747. $(':checkbox', g.popup).bind('change', onPopupCheckboxChange);
  7748. else
  7749. $(':checkbox', g.popup).bind('click', onPopupCheckboxChange);
  7750. }
  7751. },
  7752. _initHeight: function ()
  7753. {
  7754. var g = this, p = this.options;
  7755. if (p.height == 'auto')
  7756. {
  7757. g.gridbody.height('auto');
  7758. g.f.gridbody.height('auto');
  7759. }
  7760. if (p.width)
  7761. {
  7762. g.grid.width(p.width);
  7763. }
  7764. g._onResize.call(g);
  7765. },
  7766. _initFootbar: function ()
  7767. {
  7768. var g = this, p = this.options;
  7769. if (p.usePager)
  7770. {
  7771. //创建底部工具条 - 选择每页显示记录数
  7772. var optStr = "";
  7773. var selectedIndex = -1;
  7774. $(p.pageSizeOptions).each(function (i, item)
  7775. {
  7776. var selectedStr = "";
  7777. if (p.pageSize == item) selectedIndex = i;
  7778. optStr += "<option value='" + item + "' " + selectedStr + " >" + item + "</option>";
  7779. });
  7780. $('.l-bar-selectpagesize', g.toolbar).append("<select name='rp'>" + optStr + "</select>");
  7781. if (selectedIndex != -1) $('.l-bar-selectpagesize select', g.toolbar)[0].selectedIndex = selectedIndex;
  7782. if (p.switchPageSizeApplyComboBox && $.fn.ligerComboBox)
  7783. {
  7784. $(".l-bar-selectpagesize select", g.toolbar).ligerComboBox(
  7785. {
  7786. onBeforeSelect: function ()
  7787. {
  7788. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  7789. return false;
  7790. return true;
  7791. },
  7792. width: 45
  7793. });
  7794. }
  7795. }
  7796. else
  7797. {
  7798. g.toolbar.hide();
  7799. }
  7800. },
  7801. _searchData: function (data, clause)
  7802. {
  7803. var g = this, p = this.options;
  7804. var newData = new Array();
  7805. for (var i = 0; i < data.length; i++)
  7806. {
  7807. if (clause(data[i], i))
  7808. {
  7809. newData[newData.length] = data[i];
  7810. }
  7811. }
  7812. return newData;
  7813. },
  7814. _clearGrid: function ()
  7815. {
  7816. var g = this, p = this.options;
  7817. for (var i in g.rows)
  7818. {
  7819. var rowobj = $(g.getRowObj(g.rows[i]));
  7820. if (g.enabledFrozen())
  7821. rowobj = rowobj.add(g.getRowObj(g.rows[i], true));
  7822. rowobj.unbind();
  7823. }
  7824. //清空数据
  7825. g.gridbody.html("");
  7826. g.f.gridbody.html("");
  7827. g.recordNumber = 0;
  7828. g.records = {};
  7829. g.rows = [];
  7830. //清空选择的行
  7831. g.selected = [];
  7832. g.totalNumber = 0;
  7833. //编辑器计算器
  7834. g.editorcounter = 0;
  7835. },
  7836. _fillGridBody: function (data, frozen)
  7837. {
  7838. var g = this, p = this.options;
  7839. //加载数据
  7840. var gridhtmlarr = ['<div class="l-grid-body-inner"><table class="l-grid-body-table" cellpadding=0 cellspacing=0><tbody>'];
  7841. if (g.enabledGroup()) //启用分组模式
  7842. {
  7843. var groups = []; //分组列名数组
  7844. var groupsdata = []; //切成几块后的数据
  7845. g.groups = groupsdata;
  7846. for (var rowparm in data)
  7847. {
  7848. var item = data[rowparm];
  7849. var groupColumnValue = item[p.groupColumnName];
  7850. var valueIndex = $.inArray(groupColumnValue, groups);
  7851. if (valueIndex == -1)
  7852. {
  7853. groups.push(groupColumnValue);
  7854. valueIndex = groups.length - 1;
  7855. groupsdata.push([]);
  7856. }
  7857. groupsdata[valueIndex].push(item);
  7858. }
  7859. $(groupsdata).each(function (i, item)
  7860. {
  7861. if (groupsdata.length == 1)
  7862. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last l-grid-grouprow-first"');
  7863. if (i == groupsdata.length - 1)
  7864. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last"');
  7865. else if (i == 0)
  7866. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-first"');
  7867. else
  7868. gridhtmlarr.push('<tr class="l-grid-grouprow"');
  7869. gridhtmlarr.push(' groupindex"=' + i + '" >');
  7870. gridhtmlarr.push('<td colSpan="' + g.columns.length + '" class="l-grid-grouprow-cell">');
  7871. gridhtmlarr.push('<span class="l-grid-group-togglebtn">&nbsp;&nbsp;&nbsp;&nbsp;</span>');
  7872. if (p.groupRender)
  7873. gridhtmlarr.push(p.groupRender(groups[i], item, p.groupColumnDisplay));
  7874. else
  7875. gridhtmlarr.push(p.groupColumnDisplay + ':' + groups[i]);
  7876. gridhtmlarr.push('</td>');
  7877. gridhtmlarr.push('</tr>');
  7878. gridhtmlarr.push(g._getHtmlFromData(item, frozen));
  7879. //汇总
  7880. if (g.isTotalSummary())
  7881. gridhtmlarr.push(g._getTotalSummaryHtml(item, "l-grid-totalsummary-group", frozen));
  7882. });
  7883. }
  7884. else
  7885. {
  7886. gridhtmlarr.push(g._getHtmlFromData(data, frozen));
  7887. }
  7888. gridhtmlarr.push('</tbody></table></div>');
  7889. (frozen ? g.f.gridbody : g.gridbody).html(gridhtmlarr.join(''));
  7890. //分组时不需要
  7891. if (!g.enabledGroup())
  7892. {
  7893. //创建汇总行
  7894. g._bulidTotalSummary(frozen);
  7895. }
  7896. $("> div:first", g.gridbody).width(g.gridtablewidth);
  7897. g._onResize();
  7898. },
  7899. _showData: function (id)
  7900. {
  7901. var g = this, p = this.options;
  7902. var data = g.currentData[p.root];
  7903. if (p.usePager)
  7904. {
  7905. //更新总记录数
  7906. if (p.dataAction == "server" && g.data && g.data[p.record])
  7907. p.total = g.data[p.record];
  7908. else if (g.filteredData && g.filteredData[p.root])
  7909. p.total = g.filteredData[p.root].length;
  7910. else if (g.data && g.data[p.root])
  7911. p.total = g.data[p.root].length;
  7912. else if (data)
  7913. p.total = data.length;
  7914. p.page = p.newPage;
  7915. if (!p.total) p.total = 0;
  7916. if (!p.page) p.page = 1;
  7917. p.pageCount = Math.ceil(p.total / p.pageSize);
  7918. if (!p.pageCount) p.pageCount = 1;
  7919. //更新分页
  7920. g._buildPager();
  7921. }
  7922. //加载中
  7923. $('.l-bar-btnloading:first', g.toolbar).removeClass('l-bar-btnloading');
  7924. if (g.trigger('beforeShowData', [g.currentData]) == false) return;
  7925. g._clearGrid();
  7926. g.isDataChanged = false;
  7927. if (!data) return;
  7928. $(".l-bar-btnload:first span", g.toolbar).removeClass("l-disabled");
  7929. g._updateGridData();
  7930. if (g.enabledFrozen())
  7931. g._fillGridBody(g.rows, true);
  7932. g._fillGridBody(g.rows, false);
  7933. g.trigger('SysGridHeightChanged');
  7934. if (p.totalRender)
  7935. {
  7936. $(".l-panel-bar-total", g.element).remove();
  7937. $(".l-panel-bar", g.element).before('<div class="l-panel-bar-total">' + p.totalRender(g.data, g.filteredData) + '</div>');
  7938. }
  7939. if (p.mouseoverRowCssClass)
  7940. {
  7941. for (var i in g.rows)
  7942. {
  7943. var rowobj = $(g.getRowObj(g.rows[i]));
  7944. if (g.enabledFrozen())
  7945. rowobj = rowobj.add(g.getRowObj(g.rows[i], true));
  7946. rowobj.bind('mouseover.gridrow', function ()
  7947. {
  7948. g._onRowOver(this, true);
  7949. }).bind('mouseout.gridrow', function ()
  7950. {
  7951. g._onRowOver(this, false);
  7952. });
  7953. }
  7954. }
  7955. g.gridbody.trigger('scroll.grid');
  7956. g.trigger('afterShowData', [g.currentData]);
  7957. },
  7958. _getRowDomId: function (rowdata, frozen)
  7959. {
  7960. return this.id + "|" + (frozen ? "1" : "2") + "|" + rowdata['__id'];
  7961. },
  7962. _getCellDomId: function (rowdata, column)
  7963. {
  7964. return this._getRowDomId(rowdata, column.frozen) + "|" + column['__id'];
  7965. },
  7966. _getHtmlFromData: function (data, frozen)
  7967. {
  7968. if (!data) return "";
  7969. var g = this, p = this.options;
  7970. var gridhtmlarr = [];
  7971. for (var rowparm in data)
  7972. {
  7973. var item = data[rowparm];
  7974. var rowid = item['__id'];
  7975. if (!item) continue;
  7976. gridhtmlarr.push('<tr');
  7977. gridhtmlarr.push(' id="' + g._getRowDomId(item, frozen) + '"');
  7978. gridhtmlarr.push(' class="l-grid-row'); //class start
  7979. if (!frozen && g.enabledCheckbox() && p.isChecked && p.isChecked(item))
  7980. {
  7981. g.select(item);
  7982. gridhtmlarr.push(' l-selected');
  7983. }
  7984. else if (g.isSelected(item))
  7985. {
  7986. gridhtmlarr.push(' l-selected');
  7987. }
  7988. if (item['__index'] % 2 == 1 && p.alternatingRow)
  7989. gridhtmlarr.push(' l-grid-row-alt');
  7990. gridhtmlarr.push('" '); //class end
  7991. if (p.rowAttrRender) gridhtmlarr.push(p.rowAttrRender(item, rowid));
  7992. if (p.tree && g.collapsedRows && g.collapsedRows.length)
  7993. {
  7994. var isHide = function ()
  7995. {
  7996. var pitem = g.getParent(item);
  7997. while (pitem)
  7998. {
  7999. if ($.inArray(pitem, g.collapsedRows) != -1) return true;
  8000. pitem = g.getParent(pitem);
  8001. }
  8002. return false;
  8003. };
  8004. if (isHide()) gridhtmlarr.push(' style="display:none;" ');
  8005. }
  8006. gridhtmlarr.push('>');
  8007. $(g.columns).each(function (columnindex, column)
  8008. {
  8009. if (frozen != column.frozen) return;
  8010. gridhtmlarr.push('<td');
  8011. gridhtmlarr.push(' id="' + g._getCellDomId(item, this) + '"');
  8012. //如果是行序号(系统列)
  8013. if (this.isrownumber)
  8014. {
  8015. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-rownumbers" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  8016. if (p.fixedCellHeight)
  8017. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  8018. gridhtmlarr.push('>' + (parseInt(item['__index']) + 1) + '</div></td>');
  8019. return;
  8020. }
  8021. //如果是复选框(系统列)
  8022. if (this.ischeckbox)
  8023. {
  8024. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-checkbox" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  8025. if (p.fixedCellHeight)
  8026. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  8027. gridhtmlarr.push('><span class="l-grid-row-cell-btn-checkbox"></span></div></td>');
  8028. return;
  8029. }
  8030. //如果是明细列(系统列)
  8031. else if (this.isdetail)
  8032. {
  8033. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-detail" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  8034. if (p.fixedCellHeight)
  8035. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  8036. gridhtmlarr.push('><span class="l-grid-row-cell-detailbtn"></span></div></td>');
  8037. return;
  8038. }
  8039. var colwidth = this._width;
  8040. gridhtmlarr.push(' class="l-grid-row-cell ');
  8041. if (g.changedCells[rowid + "_" + this['__id']]) gridhtmlarr.push("l-grid-row-cell-edited ");
  8042. if (this.islast)
  8043. gridhtmlarr.push('l-grid-row-cell-last ');
  8044. gridhtmlarr.push('"');
  8045. //if (this.columnname) gridhtmlarr.push('columnname="' + this.columnname + '"');
  8046. gridhtmlarr.push(' style = "');
  8047. gridhtmlarr.push('width:' + colwidth + 'px; ');
  8048. if (column._hide)
  8049. {
  8050. gridhtmlarr.push('display:none;');
  8051. }
  8052. gridhtmlarr.push(' ">');
  8053. gridhtmlarr.push(g._getCellHtml(item, column));
  8054. gridhtmlarr.push('</td>');
  8055. });
  8056. gridhtmlarr.push('</tr>');
  8057. }
  8058. return gridhtmlarr.join('');
  8059. },
  8060. _getCellHtml: function (rowdata, column)
  8061. {
  8062. var g = this, p = this.options;
  8063. if (column.isrownumber)
  8064. return '<div class="l-grid-row-cell-inner">' + (parseInt(rowdata['__index']) + 1) + '</div>';
  8065. var htmlarr = [];
  8066. htmlarr.push('<div class="l-grid-row-cell-inner"');
  8067. //htmlarr.push('<div');
  8068. htmlarr.push(' style = "width:' + parseInt(column._width - 8) + 'px;');
  8069. if (p.fixedCellHeight) htmlarr.push('height:' + p.rowHeight + 'px;min-height:' + p.rowHeight + 'px; ');
  8070. if (column.align) htmlarr.push('text-align:' + column.align + ';');
  8071. var content = g._getCellContent(rowdata, column);
  8072. htmlarr.push('">' + content + '</div>');
  8073. return htmlarr.join('');
  8074. },
  8075. _getCellContent: function (rowdata, column)
  8076. {
  8077. if (!rowdata || !column) return "";
  8078. if (column.isrownumber) return parseInt(rowdata['__index']) + 1;
  8079. var rowid = rowdata['__id'];
  8080. var rowindex = rowdata['__index'];
  8081. var value = column.name ? rowdata[column.name] : null;
  8082. var g = this, p = this.options;
  8083. var content = "";
  8084. if (column.render)
  8085. {
  8086. content = column.render.call(g, rowdata, rowindex, value, column);
  8087. }
  8088. else if (p.formatters[column.type])
  8089. {
  8090. content = p.formatters[column.type].call(g, value, column);
  8091. }
  8092. else if (value != null)
  8093. {
  8094. content = value.toString();
  8095. }
  8096. if (p.tree && (p.tree.columnName != null && p.tree.columnName == column.name || p.tree.columnId != null && p.tree.columnId == column.id))
  8097. {
  8098. content = g._getTreeCellHtml(content, rowdata);
  8099. }
  8100. return content || "";
  8101. },
  8102. _getTreeCellHtml: function (oldContent, rowdata)
  8103. {
  8104. var level = rowdata['__level'];
  8105. var g = this, p = this.options;
  8106. //var isExtend = p.tree.isExtend(rowdata);
  8107. var isExtend = $.inArray(rowdata, g.collapsedRows || []) == -1;
  8108. var isParent = p.tree.isParent(rowdata);
  8109. var content = "";
  8110. level = parseInt(level) || 1;
  8111. for (var i = 1; i < level; i++)
  8112. {
  8113. content += "<div class='l-grid-tree-space'></div>";
  8114. }
  8115. if (isExtend && isParent)
  8116. content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-open'></div>";
  8117. else if (isParent)
  8118. content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-close'></div>";
  8119. else
  8120. content += "<div class='l-grid-tree-space'></div>";
  8121. content += "<span class='l-grid-tree-content'>" + oldContent + "</span>";
  8122. return content;
  8123. },
  8124. _applyEditor: function (obj)
  8125. {
  8126. var g = this, p = this.options;
  8127. var rowcell = obj;
  8128. var ids = rowcell.id.split('|');
  8129. var columnid = ids[ids.length - 1];
  8130. var column = g._columns[columnid];
  8131. var row = $(rowcell).parent();
  8132. var rowdata = g.getRow(row[0]);
  8133. var rowid = rowdata['__id'];
  8134. var rowindex = rowdata['__index'];
  8135. if (!column || !column.editor) return;
  8136. var columnname = column.name;
  8137. var columnindex = column.columnindex;
  8138. if (column.editor.type && p.editors[column.editor.type])
  8139. {
  8140. var currentdata = rowdata[columnname];
  8141. var editParm = { record: rowdata, value: currentdata, column: column, rowindex: rowindex };
  8142. if (g.trigger('beforeEdit', [editParm]) == false) return false;
  8143. var editor = p.editors[column.editor.type];
  8144. var jcell = $(rowcell), offset = $(rowcell).offset();
  8145. jcell.html("");
  8146. g.setCellEditing(rowdata, column, true);
  8147. var width = $(rowcell).width(), height = $(rowcell).height();
  8148. var container = $("<div class='l-grid-editor'></div>").appendTo('body');
  8149. if ($.browser.mozilla)
  8150. container.css({ left: offset.left, top: offset.top }).show();
  8151. else
  8152. container.css({ left: offset.left + 1, top: offset.top + 1 }).show();
  8153. var editorInput = g._createEditor(editor, container, editParm, width, height);
  8154. g.editor = { editing: true, editor: editor, input: editorInput, editParm: editParm, container: container };
  8155. g.unbind('sysEndEdit');
  8156. g.bind('sysEndEdit', function ()
  8157. {
  8158. var newValue = editor.getValue(editorInput, editParm);
  8159. if (newValue != currentdata)
  8160. {
  8161. $(rowcell).addClass("l-grid-row-cell-edited");
  8162. g.changedCells[rowid + "_" + column['__id']] = true;
  8163. if (column.editor.onChange) column.editor.onChange(rowcell, newValue);
  8164. editParm.value = newValue;
  8165. if (g._checkEditAndUpdateCell(editParm))
  8166. {
  8167. if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue);
  8168. }
  8169. }
  8170. });
  8171. }
  8172. },
  8173. _checkEditAndUpdateCell: function (editParm)
  8174. {
  8175. var g = this, p = this.options;
  8176. if (g.trigger('beforeSubmitEdit', [editParm]) == false) return false;
  8177. g.updateCell(editParm.column, editParm.value, editParm.record);
  8178. if (editParm.column.render || g.enabledTotal()) g.reRender({ column: editParm.column });
  8179. g.reRender({ rowdata: editParm.record });
  8180. return true;
  8181. },
  8182. _getCurrentPageData: function (source)
  8183. {
  8184. var g = this, p = this.options;
  8185. var data = {};
  8186. data[p.root] = [];
  8187. if (!source || !source[p.root] || !source[p.root].length)
  8188. {
  8189. data[p.record] = 0;
  8190. return data;
  8191. }
  8192. data[p.record] = source[p.root].length;
  8193. if (!p.newPage) p.newPage = 1;
  8194. for (i = (p.newPage - 1) * p.pageSize; i < source[p.root].length && i < p.newPage * p.pageSize; i++)
  8195. {
  8196. data[p.root].push(source[p.root][i]);
  8197. }
  8198. return data;
  8199. },
  8200. //比较某一列两个数据
  8201. _compareData: function (data1, data2, columnName, columnType)
  8202. {
  8203. var g = this, p = this.options;
  8204. var val1 = data1[columnName], val2 = data2[columnName];
  8205. if (val1 == null && val2 != null) return 1;
  8206. else if (val1 == null && val2 == null) return 0;
  8207. else if (val1 != null && val2 == null) return -1;
  8208. if (p.sorters[columnType])
  8209. return p.sorters[columnType].call(g, val1, val2);
  8210. else
  8211. return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
  8212. },
  8213. _getTotalCellContent: function (column, data)
  8214. {
  8215. var g = this, p = this.options;
  8216. var totalsummaryArr = [];
  8217. if (column.totalSummary)
  8218. {
  8219. var isExist = function (type)
  8220. {
  8221. for (var i = 0; i < types.length; i++)
  8222. if (types[i].toLowerCase() == type.toLowerCase()) return true;
  8223. return false;
  8224. };
  8225. var sum = 0, count = 0, avg = 0;
  8226. var max = parseFloat(data[0][column.name]);
  8227. var min = parseFloat(data[0][column.name]);
  8228. for (var i = 0; i < data.length; i++)
  8229. {
  8230. count += 1;
  8231. var value = parseFloat(data[i][column.name]);
  8232. if (!value) continue;
  8233. sum += value;
  8234. if (value > max) max = value;
  8235. if (value < min) min = value;
  8236. }
  8237. avg = sum * 1.0 / data.length;
  8238. if (column.totalSummary.render)
  8239. {
  8240. var renderhtml = column.totalSummary.render({
  8241. sum: sum,
  8242. count: count,
  8243. avg: avg,
  8244. min: min,
  8245. max: max
  8246. }, column, g.data);
  8247. totalsummaryArr.push(renderhtml);
  8248. }
  8249. else if (column.totalSummary.type)
  8250. {
  8251. var types = column.totalSummary.type.split(',');
  8252. if (isExist('sum'))
  8253. totalsummaryArr.push("<div>Sum=" + sum.toFixed(2) + "</div>");
  8254. if (isExist('count'))
  8255. totalsummaryArr.push("<div>Count=" + count + "</div>");
  8256. if (isExist('max'))
  8257. totalsummaryArr.push("<div>Max=" + max.toFixed(2) + "</div>");
  8258. if (isExist('min'))
  8259. totalsummaryArr.push("<div>Min=" + min.toFixed(2) + "</div>");
  8260. if (isExist('avg'))
  8261. totalsummaryArr.push("<div>Avg=" + avg.toFixed(2) + "</div>");
  8262. }
  8263. }
  8264. return totalsummaryArr.join('');
  8265. },
  8266. _getTotalSummaryHtml: function (data, classCssName, frozen)
  8267. {
  8268. var g = this, p = this.options;
  8269. var totalsummaryArr = [];
  8270. if (classCssName)
  8271. totalsummaryArr.push('<tr class="l-grid-totalsummary ' + classCssName + '">');
  8272. else
  8273. totalsummaryArr.push('<tr class="l-grid-totalsummary">');
  8274. $(g.columns).each(function (columnindex, column)
  8275. {
  8276. if (this.frozen != frozen) return;
  8277. //如果是行序号(系统列)
  8278. if (this.isrownumber)
  8279. {
  8280. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-rownumbers" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  8281. return;
  8282. }
  8283. //如果是复选框(系统列)
  8284. if (this.ischeckbox)
  8285. {
  8286. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-checkbox" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  8287. return;
  8288. }
  8289. //如果是明细列(系统列)
  8290. else if (this.isdetail)
  8291. {
  8292. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-detail" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  8293. return;
  8294. }
  8295. totalsummaryArr.push('<td class="l-grid-totalsummary-cell');
  8296. if (this.islast)
  8297. totalsummaryArr.push(" l-grid-totalsummary-cell-last");
  8298. totalsummaryArr.push('" ');
  8299. totalsummaryArr.push('id="' + g.id + "|total" + g.totalNumber + "|" + column.__id + '" ');
  8300. totalsummaryArr.push('width="' + this._width + '" ');
  8301. columnname = this.columnname;
  8302. if (columnname)
  8303. {
  8304. totalsummaryArr.push('columnname="' + columnname + '" ');
  8305. }
  8306. totalsummaryArr.push('columnindex="' + columnindex + '" ');
  8307. totalsummaryArr.push('><div class="l-grid-totalsummary-cell-inner"');
  8308. if (column.align)
  8309. totalsummaryArr.push(' style="text-Align:' + column.align + ';"');
  8310. totalsummaryArr.push('>');
  8311. totalsummaryArr.push(g._getTotalCellContent(column, data));
  8312. totalsummaryArr.push('</div></td>');
  8313. });
  8314. totalsummaryArr.push('</tr>');
  8315. if (!frozen) g.totalNumber++;
  8316. return totalsummaryArr.join('');
  8317. },
  8318. _bulidTotalSummary: function (frozen)
  8319. {
  8320. var g = this, p = this.options;
  8321. if (!g.isTotalSummary()) return false;
  8322. if (!g.currentData || g.currentData[p.root].length == 0) return false;
  8323. var totalRow = $(g._getTotalSummaryHtml(g.currentData[p.root], null, frozen));
  8324. $("tbody:first", frozen ? g.f.gridbody : g.gridbody).append(totalRow);
  8325. },
  8326. _buildPager: function ()
  8327. {
  8328. var g = this, p = this.options;
  8329. $('.pcontrol input', g.toolbar).val(p.page);
  8330. if (!p.pageCount) p.pageCount = 1;
  8331. $('.pcontrol span', g.toolbar).html(p.pageCount);
  8332. var r1 = parseInt((p.page - 1) * p.pageSize) + 1.0;
  8333. var r2 = parseInt(r1) + parseInt(p.pageSize) - 1;
  8334. if (!p.total) p.total = 0;
  8335. if (p.total < r2) r2 = p.total;
  8336. if (!p.total) r1 = r2 = 0;
  8337. if (r1 < 0) r1 = 0;
  8338. if (r2 < 0) r2 = 0;
  8339. var stat = p.pageStatMessage;
  8340. stat = stat.replace(/{from}/, r1);
  8341. stat = stat.replace(/{to}/, r2);
  8342. stat = stat.replace(/{total}/, p.total);
  8343. stat = stat.replace(/{pagesize}/, p.pageSize);
  8344. $('.l-bar-text', g.toolbar).html(stat);
  8345. if (!p.total)
  8346. {
  8347. $(".l-bar-btnfirst span,.l-bar-btnprev span,.l-bar-btnnext span,.l-bar-btnlast span", g.toolbar)
  8348. .addClass("l-disabled");
  8349. }
  8350. if (p.page == 1)
  8351. {
  8352. $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
  8353. $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
  8354. }
  8355. else if (p.page > p.pageCount && p.pageCount > 0)
  8356. {
  8357. $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
  8358. $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
  8359. }
  8360. if (p.page == p.pageCount)
  8361. {
  8362. $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
  8363. $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
  8364. }
  8365. else if (p.page < p.pageCount && p.pageCount > 0)
  8366. {
  8367. $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
  8368. $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
  8369. }
  8370. },
  8371. _getRowIdByDomId: function (domid)
  8372. {
  8373. var ids = domid.split('|');
  8374. var rowid = ids[2];
  8375. return rowid;
  8376. },
  8377. _getRowByDomId: function (domid)
  8378. {
  8379. return this.records[this._getRowIdByDomId(domid)];
  8380. },
  8381. _getSrcElementByEvent: function (e)
  8382. {
  8383. var g = this;
  8384. var obj = (e.target || e.srcElement);
  8385. var jobjs = $(obj).parents().add(obj);
  8386. var fn = function (parm)
  8387. {
  8388. for (var i = 0, l = jobjs.length; i < l; i++)
  8389. {
  8390. if (typeof parm == "string")
  8391. {
  8392. if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
  8393. }
  8394. else if (typeof parm == "object")
  8395. {
  8396. if (jobjs[i] == parm) return jobjs[i];
  8397. }
  8398. }
  8399. return null;
  8400. };
  8401. if (fn("l-grid-editor")) return { editing: true, editor: fn("l-grid-editor") };
  8402. if (jobjs.index(this.element) == -1) return { out: true };
  8403. var indetail = false;
  8404. if (jobjs.hasClass("l-grid-detailpanel") && g.detailrows)
  8405. {
  8406. for (var i = 0, l = g.detailrows.length; i < l; i++)
  8407. {
  8408. if (jobjs.index(g.detailrows[i]) != -1)
  8409. {
  8410. indetail = true;
  8411. break;
  8412. }
  8413. }
  8414. }
  8415. var r = {
  8416. grid: fn("l-panel"),
  8417. indetail: indetail,
  8418. frozen: fn(g.gridview1[0]) ? true : false,
  8419. header: fn("l-panel-header"), //标题
  8420. gridheader: fn("l-grid-header"), //表格头
  8421. gridbody: fn("l-grid-body"),
  8422. total: fn("l-panel-bar-total"), //总汇总
  8423. popup: fn("l-grid-popup"),
  8424. toolbar: fn("l-panel-bar")
  8425. };
  8426. if (r.gridheader)
  8427. {
  8428. r.hrow = fn("l-grid-hd-row");
  8429. r.hcell = fn("l-grid-hd-cell");
  8430. r.hcelltext = fn("l-grid-hd-cell-text");
  8431. r.checkboxall = fn("l-grid-hd-cell-checkbox");
  8432. if (r.hcell)
  8433. {
  8434. var columnid = r.hcell.id.split('|')[2];
  8435. r.column = g._columns[columnid];
  8436. }
  8437. }
  8438. if (r.gridbody)
  8439. {
  8440. r.row = fn("l-grid-row");
  8441. r.cell = fn("l-grid-row-cell");
  8442. r.checkbox = fn("l-grid-row-cell-btn-checkbox");
  8443. r.groupbtn = fn("l-grid-group-togglebtn");
  8444. r.grouprow = fn("l-grid-grouprow");
  8445. r.detailbtn = fn("l-grid-row-cell-detailbtn");
  8446. r.detailrow = fn("l-grid-detailpanel");
  8447. r.totalrow = fn("l-grid-totalsummary");
  8448. r.totalcell = fn("l-grid-totalsummary-cell");
  8449. r.rownumberscell = $(r.cell).hasClass("l-grid-row-cell-rownumbers") ? r.cell : null;
  8450. r.detailcell = $(r.cell).hasClass("l-grid-row-cell-detail") ? r.cell : null;
  8451. r.checkboxcell = $(r.cell).hasClass("l-grid-row-cell-checkbox") ? r.cell : null;
  8452. r.treelink = fn("l-grid-tree-link");
  8453. r.editor = fn("l-grid-editor");
  8454. if (r.row) r.data = this._getRowByDomId(r.row.id);
  8455. if (r.cell) r.editing = $(r.cell).hasClass("l-grid-row-cell-editing");
  8456. if (r.editor) r.editing = true;
  8457. if (r.editing) r.out = false;
  8458. }
  8459. if (r.toolbar)
  8460. {
  8461. r.first = fn("l-bar-btnfirst");
  8462. r.last = fn("l-bar-btnlast");
  8463. r.next = fn("l-bar-btnnext");
  8464. r.prev = fn("l-bar-btnprev");
  8465. r.load = fn("l-bar-btnload");
  8466. r.button = fn("l-bar-button");
  8467. }
  8468. return r;
  8469. },
  8470. _setEvent: function ()
  8471. {
  8472. var g = this, p = this.options;
  8473. g.grid.bind("mousedown.grid", function (e)
  8474. {
  8475. g._onMouseDown.call(g, e);
  8476. });
  8477. g.grid.bind("dblclick.grid", function (e)
  8478. {
  8479. g._onDblClick.call(g, e);
  8480. });
  8481. g.grid.bind("contextmenu.grid", function (e)
  8482. {
  8483. return g._onContextmenu.call(g, e);
  8484. });
  8485. $(document).bind("mouseup.grid", function (e)
  8486. {
  8487. g._onMouseUp.call(g, e);
  8488. });
  8489. $(document).bind("click.grid", function (e)
  8490. {
  8491. g._onClick.call(g, e);
  8492. });
  8493. $(window).bind("resize.grid", function (e)
  8494. {
  8495. g._onResize.call(g);
  8496. });
  8497. $(document).bind("keydown.grid", function (e)
  8498. {
  8499. if (e.ctrlKey) g.ctrlKey = true;
  8500. });
  8501. $(document).bind("keyup.grid", function (e)
  8502. {
  8503. delete g.ctrlKey;
  8504. });
  8505. //表体 - 滚动联动事件
  8506. g.gridbody.bind('scroll.grid', function ()
  8507. {
  8508. var scrollLeft = g.gridbody.scrollLeft();
  8509. var scrollTop = g.gridbody.scrollTop();
  8510. if (scrollLeft != null)
  8511. g.gridheader[0].scrollLeft = scrollLeft;
  8512. if (scrollTop != null)
  8513. g.f.gridbody[0].scrollTop = scrollTop;
  8514. g.endEdit();
  8515. g.trigger('SysGridHeightChanged');
  8516. });
  8517. //工具条 - 切换每页记录数事件
  8518. $('select', g.toolbar).change(function ()
  8519. {
  8520. if (g.isDataChanged && !confirm(p.isContinueByDataChanged))
  8521. return false;
  8522. p.newPage = 1;
  8523. p.pageSize = this.value;
  8524. g.loadData(p.where);
  8525. });
  8526. //工具条 - 切换当前页事件
  8527. $('span.pcontrol :text', g.toolbar).blur(function (e)
  8528. {
  8529. g.changePage('input');
  8530. });
  8531. $("div.l-bar-button", g.toolbar).hover(function ()
  8532. {
  8533. $(this).addClass("l-bar-button-over");
  8534. }, function ()
  8535. {
  8536. $(this).removeClass("l-bar-button-over");
  8537. });
  8538. //列拖拽支持
  8539. if ($.fn.ligerDrag && p.colDraggable)
  8540. {
  8541. g.colDroptip = $("<div class='l-drag-coldroptip' style='display:none'><div class='l-drop-move-up'></div><div class='l-drop-move-down'></div></div>").appendTo('body');
  8542. g.gridheader.add(g.f.gridheader).ligerDrag({ revert: true, animate: false,
  8543. proxyX: 0, proxyY: 0,
  8544. proxy: function (draggable, e)
  8545. {
  8546. var src = g._getSrcElementByEvent(e);
  8547. if (src.hcell && src.column)
  8548. {
  8549. var content = $(".l-grid-hd-cell-text:first", src.hcell).html();
  8550. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
  8551. proxy.append(content);
  8552. return proxy;
  8553. }
  8554. },
  8555. onRevert: function () { return false; },
  8556. onRendered: function ()
  8557. {
  8558. this.set('cursor', 'default');
  8559. g.children[this.id] = this;
  8560. },
  8561. onStartDrag: function (current, e)
  8562. {
  8563. if (e.button == 2) return false;
  8564. if (g.colresizing) return false;
  8565. this.set('cursor', 'default');
  8566. var src = g._getSrcElementByEvent(e);
  8567. if (!src.hcell || !src.column || src.column.issystem || src.hcelltext) return false;
  8568. if ($(src.hcell).css('cursor').indexOf('resize') != -1) return false;
  8569. this.draggingColumn = src.column;
  8570. g.coldragging = true;
  8571. var gridOffset = g.grid.offset();
  8572. this.validRange = {
  8573. top: gridOffset.top,
  8574. bottom: gridOffset.top + g.gridheader.height(),
  8575. left: gridOffset.left - 10,
  8576. right: gridOffset.left + g.grid.width() + 10
  8577. };
  8578. },
  8579. onDrag: function (current, e)
  8580. {
  8581. this.set('cursor', 'default');
  8582. var column = this.draggingColumn;
  8583. if (!column) return false;
  8584. if (g.colresizing) return false;
  8585. if (g.colDropIn == null)
  8586. g.colDropIn = -1;
  8587. var pageX = e.pageX;
  8588. var pageY = e.pageY;
  8589. var visit = false;
  8590. var gridOffset = g.grid.offset();
  8591. var validRange = this.validRange;
  8592. if (pageX < validRange.left || pageX > validRange.right
  8593. || pageY > validRange.bottom || pageY < validRange.top)
  8594. {
  8595. g.colDropIn = -1;
  8596. g.colDroptip.hide();
  8597. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
  8598. return;
  8599. }
  8600. for (var colid in g._columns)
  8601. {
  8602. var col = g._columns[colid];
  8603. if (column == col)
  8604. {
  8605. visit = true;
  8606. continue;
  8607. }
  8608. if (col.issystem) continue;
  8609. var sameLevel = col['__level'] == column['__level'];
  8610. var isAfter = !sameLevel ? false : visit ? true : false;
  8611. if (column.frozen != col.frozen) isAfter = col.frozen ? false : true;
  8612. if (g.colDropIn != -1 && g.colDropIn != colid) continue;
  8613. var cell = document.getElementById(col['__domid']);
  8614. var offset = $(cell).offset();
  8615. var range = {
  8616. top: offset.top,
  8617. bottom: offset.top + $(cell).height(),
  8618. left: offset.left - 10,
  8619. right: offset.left + 10
  8620. };
  8621. if (isAfter)
  8622. {
  8623. var cellwidth = $(cell).width();
  8624. range.left += cellwidth;
  8625. range.right += cellwidth;
  8626. }
  8627. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  8628. {
  8629. var height = p.headerRowHeight;
  8630. if (col['__rowSpan']) height *= col['__rowSpan'];
  8631. g.colDroptip.css({
  8632. left: range.left + 5,
  8633. top: range.top - 9,
  8634. height: height + 9 * 2
  8635. }).show();
  8636. g.colDropIn = colid;
  8637. g.colDropDir = isAfter ? "right" : "left";
  8638. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no").addClass("l-drop-yes");
  8639. break;
  8640. }
  8641. else if (g.colDropIn != -1)
  8642. {
  8643. g.colDropIn = -1;
  8644. g.colDroptip.hide();
  8645. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
  8646. }
  8647. }
  8648. },
  8649. onStopDrag: function (current, e)
  8650. {
  8651. var column = this.draggingColumn;
  8652. g.coldragging = false;
  8653. if (g.colDropIn != -1)
  8654. {
  8655. g.changeCol.ligerDefer(g, 0, [column, g.colDropIn, g.colDropDir == "right"]);
  8656. g.colDropIn = -1;
  8657. }
  8658. g.colDroptip.hide();
  8659. this.set('cursor', 'default');
  8660. }
  8661. });
  8662. }
  8663. //行拖拽支持
  8664. if ($.fn.ligerDrag && p.rowDraggable)
  8665. {
  8666. g.rowDroptip = $("<div class='l-drag-rowdroptip' style='display:none'></div>").appendTo('body');
  8667. g.gridbody.add(g.f.gridbody).ligerDrag({ revert: true, animate: false,
  8668. proxyX: 0, proxyY: 0,
  8669. proxy: function (draggable, e)
  8670. {
  8671. var src = g._getSrcElementByEvent(e);
  8672. if (src.row)
  8673. {
  8674. var content = p.draggingMessage.replace(/{count}/, draggable.draggingRows ? draggable.draggingRows.length : 1);
  8675. if (p.rowDraggingRender)
  8676. {
  8677. content = p.rowDraggingRender(draggable.draggingRows, draggable, g);
  8678. }
  8679. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
  8680. return proxy;
  8681. }
  8682. },
  8683. onRevert: function () { return false; },
  8684. onRendered: function ()
  8685. {
  8686. this.set('cursor', 'default');
  8687. g.children[this.id] = this;
  8688. },
  8689. onStartDrag: function (current, e)
  8690. {
  8691. if (e.button == 2) return false;
  8692. if (g.colresizing) return false;
  8693. if (!g.columns.length) return false;
  8694. this.set('cursor', 'default');
  8695. var src = g._getSrcElementByEvent(e);
  8696. if (!src.cell || !src.data || src.checkbox) return false;
  8697. var ids = src.cell.id.split('|');
  8698. var column = g._columns[ids[ids.length - 1]];
  8699. if (src.rownumberscell || src.detailcell || src.checkboxcell || column == g.columns[0])
  8700. {
  8701. if (g.enabledCheckbox())
  8702. {
  8703. this.draggingRows = g.getSelecteds();
  8704. if (!this.draggingRows || !this.draggingRows.length) return false;
  8705. }
  8706. else
  8707. {
  8708. this.draggingRows = [src.data];
  8709. }
  8710. this.draggingRow = src.data;
  8711. this.set('cursor', 'move');
  8712. g.rowdragging = true;
  8713. this.validRange = {
  8714. top: g.gridbody.offset().top,
  8715. bottom: g.gridbody.offset().top + g.gridbody.height(),
  8716. left: g.grid.offset().left - 10,
  8717. right: g.grid.offset().left + g.grid.width() + 10
  8718. };
  8719. }
  8720. else
  8721. {
  8722. return false;
  8723. }
  8724. },
  8725. onDrag: function (current, e)
  8726. {
  8727. var rowdata = this.draggingRow;
  8728. if (!rowdata) return false;
  8729. var rows = this.draggingRows ? this.draggingRows : [rowdata];
  8730. if (g.colresizing) return false;
  8731. if (g.rowDropIn == null) g.rowDropIn = -1;
  8732. var pageX = e.pageX;
  8733. var pageY = e.pageY;
  8734. var visit = false;
  8735. var validRange = this.validRange;
  8736. if (pageX < validRange.left || pageX > validRange.right
  8737. || pageY > validRange.bottom || pageY < validRange.top)
  8738. {
  8739. g.rowDropIn = -1;
  8740. g.rowDroptip.hide();
  8741. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  8742. return;
  8743. }
  8744. for (var i in g.rows)
  8745. {
  8746. var rd = g.rows[i];
  8747. var rowid = rd['__id'];
  8748. if (rowdata == rd) visit = true;
  8749. if ($.inArray(rd, rows) != -1) continue;
  8750. var isAfter = visit ? true : false;
  8751. if (g.rowDropIn != -1 && g.rowDropIn != rowid) continue;
  8752. var rowobj = g.getRowObj(rowid);
  8753. var offset = $(rowobj).offset();
  8754. var range = {
  8755. top: offset.top - 4,
  8756. bottom: offset.top + $(rowobj).height() + 4,
  8757. left: g.grid.offset().left,
  8758. right: g.grid.offset().left + g.grid.width()
  8759. };
  8760. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  8761. {
  8762. var lineTop = offset.top;
  8763. if (isAfter) lineTop += $(rowobj).height();
  8764. g.rowDroptip.css({
  8765. left: range.left,
  8766. top: lineTop,
  8767. width: range.right - range.left
  8768. }).show();
  8769. g.rowDropIn = rowid;
  8770. g.rowDropDir = isAfter ? "bottom" : "top";
  8771. if (p.tree && pageY > range.top + 5 && pageY < range.bottom - 5)
  8772. {
  8773. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
  8774. g.rowDroptip.hide();
  8775. g.rowDropInParent = true;
  8776. }
  8777. else
  8778. {
  8779. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
  8780. g.rowDroptip.show();
  8781. g.rowDropInParent = false;
  8782. }
  8783. break;
  8784. }
  8785. else if (g.rowDropIn != -1)
  8786. {
  8787. g.rowDropIn = -1;
  8788. g.rowDropInParent = false;
  8789. g.rowDroptip.hide();
  8790. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  8791. }
  8792. }
  8793. },
  8794. onStopDrag: function (current, e)
  8795. {
  8796. var rows = this.draggingRows;
  8797. g.rowdragging = false;
  8798. for (var i = 0; i < rows.length; i++)
  8799. {
  8800. var children = rows[i].children;
  8801. if (children)
  8802. {
  8803. rows = $.grep(rows, function (node, i)
  8804. {
  8805. var isIn = $.inArray(node, children) == -1;
  8806. return isIn;
  8807. });
  8808. }
  8809. }
  8810. if (g.rowDropIn != -1)
  8811. {
  8812. if (p.tree)
  8813. {
  8814. var neardata, prow;
  8815. if (g.rowDropInParent)
  8816. {
  8817. prow = g.getRow(g.rowDropIn);
  8818. }
  8819. else
  8820. {
  8821. neardata = g.getRow(g.rowDropIn);
  8822. prow = g.getParent(neardata);
  8823. }
  8824. g.appendRange(rows, prow, neardata, g.rowDropDir != "bottom");
  8825. g.trigger('rowDragDrop', {
  8826. rows: rows,
  8827. parent: prow,
  8828. near: neardata,
  8829. after: g.rowDropDir == "bottom"
  8830. });
  8831. }
  8832. else
  8833. {
  8834. g.moveRange(rows, g.rowDropIn, g.rowDropDir == "bottom");
  8835. g.trigger('rowDragDrop', {
  8836. rows: rows,
  8837. parent: prow,
  8838. near: g.getRow(g.rowDropIn),
  8839. after: g.rowDropDir == "bottom"
  8840. });
  8841. }
  8842. g.rowDropIn = -1;
  8843. }
  8844. g.rowDroptip.hide();
  8845. this.set('cursor', 'default');
  8846. }
  8847. });
  8848. }
  8849. },
  8850. _onRowOver: function (rowParm, over)
  8851. {
  8852. if (l.draggable.dragging) return;
  8853. var g = this, p = this.options;
  8854. var rowdata = g.getRow(rowParm);
  8855. var methodName = over ? "addClass" : "removeClass";
  8856. if (g.enabledFrozen())
  8857. $(g.getRowObj(rowdata, true))[methodName](p.mouseoverRowCssClass);
  8858. $(g.getRowObj(rowdata, false))[methodName](p.mouseoverRowCssClass);
  8859. },
  8860. _onMouseUp: function (e)
  8861. {
  8862. var g = this, p = this.options;
  8863. if (l.draggable.dragging)
  8864. {
  8865. var src = g._getSrcElementByEvent(e);
  8866. //drop in header cell
  8867. if (src.hcell && src.column)
  8868. {
  8869. g.trigger('dragdrop', [{ type: 'header', column: src.column, cell: src.hcell }, e]);
  8870. }
  8871. else if (src.row)
  8872. {
  8873. g.trigger('dragdrop', [{ type: 'row', record: src.data, row: src.row }, e]);
  8874. }
  8875. }
  8876. },
  8877. _onMouseDown: function (e)
  8878. {
  8879. var g = this, p = this.options;
  8880. },
  8881. _onContextmenu: function (e)
  8882. {
  8883. var g = this, p = this.options;
  8884. var src = g._getSrcElementByEvent(e);
  8885. if (src.row)
  8886. {
  8887. if (p.whenRClickToSelect)
  8888. g.select(src.data);
  8889. if (g.hasBind('contextmenu'))
  8890. {
  8891. return g.trigger('contextmenu', [{ data: src.data, rowindex: src.data['__index'], row: src.row }, e]);
  8892. }
  8893. }
  8894. else if (src.hcell)
  8895. {
  8896. if (!p.allowHideColumn) return true;
  8897. var columnindex = $(src.hcell).attr("columnindex");
  8898. if (columnindex == undefined) return true;
  8899. var left = (e.pageX - g.body.offset().left + parseInt(g.body[0].scrollLeft));
  8900. if (columnindex == g.columns.length - 1) left -= 50;
  8901. g.popup.css({ left: left, top: g.gridheader.height() + 1 });
  8902. g.popup.toggle();
  8903. return false;
  8904. }
  8905. },
  8906. _onDblClick: function (e)
  8907. {
  8908. var g = this, p = this.options;
  8909. var src = g._getSrcElementByEvent(e);
  8910. if (src.row)
  8911. {
  8912. g.trigger('dblClickRow', [src.data, src.data['__id'], src.row]);
  8913. }
  8914. },
  8915. _onClick: function (e)
  8916. {
  8917. var obj = (e.target || e.srcElement);
  8918. var g = this, p = this.options;
  8919. var src = g._getSrcElementByEvent(e);
  8920. if (src.out)
  8921. {
  8922. if (g.editor.editing && !$.ligerui.win.masking) g.endEdit();
  8923. if (p.allowHideColumn) g.popup.hide();
  8924. return;
  8925. }
  8926. if (src.indetail || src.editing)
  8927. {
  8928. return;
  8929. }
  8930. if (g.editor.editing)
  8931. {
  8932. g.endEdit();
  8933. }
  8934. if (p.allowHideColumn)
  8935. {
  8936. if (!src.popup)
  8937. {
  8938. g.popup.hide();
  8939. }
  8940. }
  8941. if (src.checkboxall) //复选框全选
  8942. {
  8943. var row = $(src.hrow);
  8944. var uncheck = row.hasClass("l-checked");
  8945. if (g.trigger('beforeCheckAllRow', [!uncheck, g.element]) == false) return false;
  8946. if (uncheck)
  8947. {
  8948. row.removeClass("l-checked");
  8949. }
  8950. else
  8951. {
  8952. row.addClass("l-checked");
  8953. }
  8954. g.selected = [];
  8955. for (var rowid in g.records)
  8956. {
  8957. if (uncheck)
  8958. g.unselect(g.records[rowid]);
  8959. else
  8960. g.select(g.records[rowid]);
  8961. }
  8962. g.trigger('checkAllRow', [!uncheck, g.element]);
  8963. }
  8964. else if (src.hcelltext) //排序
  8965. {
  8966. var hcell = $(src.hcelltext).parent().parent();
  8967. if (!p.enabledSort || !src.column) return;
  8968. if (src.column.isSort == false) return;
  8969. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged)) return;
  8970. var sort = $(".l-grid-hd-cell-sort:first", hcell);
  8971. var columnName = src.column.name;
  8972. if (!columnName) return;
  8973. if (sort.length > 0)
  8974. {
  8975. if (sort.hasClass("l-grid-hd-cell-sort-asc"))
  8976. {
  8977. sort.removeClass("l-grid-hd-cell-sort-asc").addClass("l-grid-hd-cell-sort-desc");
  8978. hcell.removeClass("l-grid-hd-cell-asc").addClass("l-grid-hd-cell-desc");
  8979. g.changeSort(columnName, 'desc');
  8980. }
  8981. else if (sort.hasClass("l-grid-hd-cell-sort-desc"))
  8982. {
  8983. sort.removeClass("l-grid-hd-cell-sort-desc").addClass("l-grid-hd-cell-sort-asc");
  8984. hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
  8985. g.changeSort(columnName, 'asc');
  8986. }
  8987. }
  8988. else
  8989. {
  8990. hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
  8991. $(src.hcelltext).after("<span class='l-grid-hd-cell-sort l-grid-hd-cell-sort-asc'>&nbsp;&nbsp;</span>");
  8992. g.changeSort(columnName, 'asc');
  8993. }
  8994. $(".l-grid-hd-cell-sort", g.gridheader).add($(".l-grid-hd-cell-sort", g.f.gridheader)).not($(".l-grid-hd-cell-sort:first", hcell)).remove();
  8995. }
  8996. //明细
  8997. else if (src.detailbtn && p.detail)
  8998. {
  8999. var item = src.data;
  9000. var row = $([g.getRowObj(item, false)]);
  9001. if (g.enabledFrozen()) row = row.add(g.getRowObj(item, true));
  9002. var rowid = item['__id'];
  9003. if ($(src.detailbtn).hasClass("l-open"))
  9004. {
  9005. if (p.detail.onCollapse)
  9006. p.detail.onCollapse(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
  9007. row.next("tr.l-grid-detailpanel").hide();
  9008. $(src.detailbtn).removeClass("l-open");
  9009. }
  9010. else
  9011. {
  9012. var nextrow = row.next("tr.l-grid-detailpanel");
  9013. if (nextrow.length > 0)
  9014. {
  9015. nextrow.show();
  9016. if (p.detail.onExtend)
  9017. p.detail.onExtend(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
  9018. $(src.detailbtn).addClass("l-open");
  9019. g.trigger('SysGridHeightChanged');
  9020. return;
  9021. }
  9022. $(src.detailbtn).addClass("l-open");
  9023. var frozenColNum = 0;
  9024. for (var i = 0; i < g.columns.length; i++)
  9025. if (g.columns[i].frozen) frozenColNum++;
  9026. var detailRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
  9027. var detailFrozenRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
  9028. detailRow.attr("id", g.id + "|detail|" + rowid);
  9029. g.detailrows = g.detailrows || [];
  9030. g.detailrows.push(detailRow[0]);
  9031. g.detailrows.push(detailFrozenRow[0]);
  9032. var detailRowInner = $("div:first", detailRow);
  9033. detailRowInner.parent().attr("colSpan", g.columns.length - frozenColNum);
  9034. row.eq(0).after(detailRow);
  9035. if (frozenColNum > 0)
  9036. {
  9037. detailFrozenRow.find("td:first").attr("colSpan", frozenColNum);
  9038. row.eq(1).after(detailFrozenRow);
  9039. }
  9040. if (p.detail.onShowDetail)
  9041. {
  9042. p.detail.onShowDetail(item, detailRowInner[0], function ()
  9043. {
  9044. g.trigger('SysGridHeightChanged');
  9045. });
  9046. $("div:first", detailFrozenRow).add(detailRowInner).show().height(p.detail.height || p.detailHeight);
  9047. }
  9048. else if (p.detail.render)
  9049. {
  9050. detailRowInner.append(p.detail.render());
  9051. detailRowInner.show();
  9052. }
  9053. g.trigger('SysGridHeightChanged');
  9054. }
  9055. }
  9056. else if (src.groupbtn)
  9057. {
  9058. var grouprow = $(src.grouprow);
  9059. var opening = true;
  9060. if ($(src.groupbtn).hasClass("l-grid-group-togglebtn-close"))
  9061. {
  9062. $(src.groupbtn).removeClass("l-grid-group-togglebtn-close");
  9063. if (grouprow.hasClass("l-grid-grouprow-last"))
  9064. {
  9065. $("td:first", grouprow).width('auto');
  9066. }
  9067. }
  9068. else
  9069. {
  9070. opening = false;
  9071. $(src.groupbtn).addClass("l-grid-group-togglebtn-close");
  9072. if (grouprow.hasClass("l-grid-grouprow-last"))
  9073. {
  9074. $("td:first", grouprow).width(g.gridtablewidth);
  9075. }
  9076. }
  9077. var currentRow = grouprow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
  9078. while (true)
  9079. {
  9080. if (currentRow.length == 0) break;
  9081. if (opening)
  9082. {
  9083. currentRow.show();
  9084. //如果是明细展开的行,并且之前的状态已经是关闭的,隐藏之
  9085. if (currentRow.hasClass("l-grid-detailpanel") && !currentRow.prev().find("td.l-grid-row-cell-detail:first span.l-grid-row-cell-detailbtn:first").hasClass("l-open"))
  9086. {
  9087. currentRow.hide();
  9088. }
  9089. }
  9090. else
  9091. {
  9092. currentRow.hide();
  9093. }
  9094. currentRow = currentRow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
  9095. }
  9096. g.trigger('SysGridHeightChanged');
  9097. }
  9098. //树 - 伸展/收缩节点
  9099. else if (src.treelink)
  9100. {
  9101. g.toggle(src.data);
  9102. }
  9103. else if (src.row && g.enabledCheckbox()) //复选框选择行
  9104. {
  9105. //复选框
  9106. var selectRowButtonOnly = p.selectRowButtonOnly ? true : false;
  9107. if (p.enabledEdit) selectRowButtonOnly = true;
  9108. if (src.checkbox || !selectRowButtonOnly)
  9109. {
  9110. var row = $(src.row);
  9111. var uncheck = row.hasClass("l-selected");
  9112. if (g.trigger('beforeCheckRow', [!uncheck, src.data, src.data['__id'], src.row]) == false)
  9113. return false;
  9114. var met = uncheck ? 'unselect' : 'select';
  9115. g[met](src.data);
  9116. if (p.tree && p.autoCheckChildren)
  9117. {
  9118. var children = g.getChildren(src.data, true);
  9119. for (var i = 0, l = children.length; i < l; i++)
  9120. {
  9121. g[met](children[i]);
  9122. }
  9123. }
  9124. g.trigger('checkRow', [!uncheck, src.data, src.data['__id'], src.row]);
  9125. }
  9126. if (!src.checkbox && src.cell && p.enabledEdit && p.clickToEdit)
  9127. {
  9128. g._applyEditor(src.cell);
  9129. }
  9130. }
  9131. else if (src.row && !g.enabledCheckbox())
  9132. {
  9133. if (src.cell && p.enabledEdit && p.clickToEdit)
  9134. {
  9135. g._applyEditor(src.cell);
  9136. }
  9137. //选择行
  9138. if ($(src.row).hasClass("l-selected"))
  9139. {
  9140. if (!p.allowUnSelectRow)
  9141. {
  9142. $(src.row).addClass("l-selected-again");
  9143. return;
  9144. }
  9145. g.unselect(src.data);
  9146. }
  9147. else
  9148. {
  9149. g.select(src.data);
  9150. }
  9151. }
  9152. else if (src.toolbar)
  9153. {
  9154. if (src.first)
  9155. {
  9156. if (g.trigger('toFirst', [g.element]) == false) return false;
  9157. g.changePage('first');
  9158. }
  9159. else if (src.prev)
  9160. {
  9161. if (g.trigger('toPrev', [g.element]) == false) return false;
  9162. g.changePage('prev');
  9163. }
  9164. else if (src.next)
  9165. {
  9166. if (g.trigger('toNext', [g.element]) == false) return false;
  9167. g.changePage('next');
  9168. }
  9169. else if (src.last)
  9170. {
  9171. if (g.trigger('toLast', [g.element]) == false) return false;
  9172. g.changePage('last');
  9173. }
  9174. else if (src.load)
  9175. {
  9176. if ($("span", src.load).hasClass("l-disabled")) return false;
  9177. if (g.trigger('reload', [g.element]) == false) return false;
  9178. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  9179. return false;
  9180. g.loadData(p.where);
  9181. }
  9182. }
  9183. },
  9184. select: function (rowParm)
  9185. {
  9186. var g = this, p = this.options;
  9187. var rowdata = g.getRow(rowParm);
  9188. var rowid = rowdata['__id'];
  9189. var rowobj = g.getRowObj(rowid);
  9190. var rowobj1 = g.getRowObj(rowid, true);
  9191. if (!g.enabledCheckbox() && !g.ctrlKey) //单选
  9192. {
  9193. for (var i in g.selected)
  9194. {
  9195. var o = g.selected[i];
  9196. if (o['__id'] in g.records)
  9197. {
  9198. $(g.getRowObj(o)).removeClass("l-selected l-selected-again");
  9199. if (g.enabledFrozen())
  9200. $(g.getRowObj(o, true)).removeClass("l-selected l-selected-again");
  9201. }
  9202. }
  9203. g.selected = [];
  9204. }
  9205. if (rowobj) $(rowobj).addClass("l-selected");
  9206. if (rowobj1) $(rowobj1).addClass("l-selected");
  9207. g.selected[g.selected.length] = rowdata;
  9208. g.trigger('selectRow', [rowdata, rowid, rowobj]);
  9209. },
  9210. unselect: function (rowParm)
  9211. {
  9212. var g = this, p = this.options;
  9213. var rowdata = g.getRow(rowParm);
  9214. var rowid = rowdata['__id'];
  9215. var rowobj = g.getRowObj(rowid);
  9216. var rowobj1 = g.getRowObj(rowid, true);
  9217. $(rowobj).removeClass("l-selected l-selected-again");
  9218. if (g.enabledFrozen())
  9219. $(rowobj1).removeClass("l-selected l-selected-again");
  9220. g._removeSelected(rowdata);
  9221. g.trigger('unSelectRow', [rowdata, rowid, rowobj]);
  9222. },
  9223. isSelected: function (rowParm)
  9224. {
  9225. var g = this, p = this.options;
  9226. var rowdata = g.getRow(rowParm);
  9227. for (var i in g.selected)
  9228. {
  9229. if (g.selected[i] == rowdata) return true;
  9230. }
  9231. return false;
  9232. },
  9233. _onResize: function ()
  9234. {
  9235. var g = this, p = this.options;
  9236. if (p.height && p.height != 'auto')
  9237. {
  9238. var windowHeight = $(window).height();
  9239. //if(g.windowHeight != undefined && g.windowHeight == windowHeight) return;
  9240. var h = 0;
  9241. var parentHeight = null;
  9242. if (typeof (p.height) == "string" && p.height.indexOf('%') > 0)
  9243. {
  9244. var gridparent = g.grid.parent();
  9245. if (p.InWindow)
  9246. {
  9247. parentHeight = windowHeight;
  9248. parentHeight -= parseInt($('body').css('paddingTop'));
  9249. parentHeight -= parseInt($('body').css('paddingBottom'));
  9250. }
  9251. else
  9252. {
  9253. parentHeight = gridparent.height();
  9254. }
  9255. h = parentHeight * parseFloat(p.height) * 0.01;
  9256. if (p.InWindow || gridparent[0].tagName.toLowerCase() == "body")
  9257. h -= (g.grid.offset().top - parseInt($('body').css('paddingTop')));
  9258. }
  9259. else
  9260. {
  9261. h = parseInt(p.height);
  9262. }
  9263. h += p.heightDiff;
  9264. g.windowHeight = windowHeight;
  9265. g._setHeight(h);
  9266. }
  9267. if (g.enabledFrozen())
  9268. {
  9269. var gridView1Width = g.gridview1.width();
  9270. var gridViewWidth = g.gridview.width()
  9271. g.gridview2.css({
  9272. width: gridViewWidth - gridView1Width
  9273. });
  9274. }
  9275. g.trigger('SysGridHeightChanged');
  9276. }
  9277. });
  9278. $.ligerui.controls.Grid.prototype.enabledTotal = $.ligerui.controls.Grid.prototype.isTotalSummary;
  9279. $.ligerui.controls.Grid.prototype.add = $.ligerui.controls.Grid.prototype.addRow;
  9280. $.ligerui.controls.Grid.prototype.update = $.ligerui.controls.Grid.prototype.updateRow;
  9281. $.ligerui.controls.Grid.prototype.append = $.ligerui.controls.Grid.prototype.appendRow;
  9282. $.ligerui.controls.Grid.prototype.getSelected = $.ligerui.controls.Grid.prototype.getSelectedRow;
  9283. $.ligerui.controls.Grid.prototype.getSelecteds = $.ligerui.controls.Grid.prototype.getSelectedRows;
  9284. $.ligerui.controls.Grid.prototype.getCheckedRows = $.ligerui.controls.Grid.prototype.getSelectedRows;
  9285. $.ligerui.controls.Grid.prototype.getCheckedRowObjs = $.ligerui.controls.Grid.prototype.getSelectedRowObjs;
  9286. $.ligerui.controls.Grid.prototype.setOptions = $.ligerui.controls.Grid.prototype.set;
  9287. })(jQuery);/**
  9288. * jQuery ligerUI 1.1.9
  9289. *
  9290. * http://ligerui.com
  9291. *
  9292. * Author daomi 2012 [ gd_star@163.com ]
  9293. *
  9294. */
  9295. (function ($)
  9296. {
  9297. $.fn.ligerLayout = function (options)
  9298. {
  9299. return $.ligerui.run.call(this, "ligerLayout", arguments);
  9300. };
  9301. $.fn.ligerGetLayoutManager = function ()
  9302. {
  9303. return $.ligerui.run.call(this, "ligerGetLayoutManager", arguments);
  9304. };
  9305. $.ligerDefaults.Layout = {
  9306. topHeight: 50,
  9307. bottomHeight: 50,
  9308. leftWidth: 110,
  9309. centerWidth: 300,
  9310. rightWidth: 170,
  9311. InWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
  9312. heightDiff: 0, //高度补差
  9313. height: '100%', //高度
  9314. onHeightChanged: null,
  9315. isLeftCollapse: false, //初始化时 左边是否隐藏
  9316. isRightCollapse: false, //初始化时 右边是否隐藏
  9317. allowLeftCollapse: true, //是否允许 左边可以隐藏
  9318. allowRightCollapse: true, //是否允许 右边可以隐藏
  9319. allowLeftResize: true, //是否允许 左边可以调整大小
  9320. allowRightResize: true, //是否允许 右边可以调整大小
  9321. allowTopResize: true, //是否允许 头部可以调整大小
  9322. allowBottomResize: true, //是否允许 底部可以调整大小
  9323. space: 3, //间隔
  9324. onEndResize: null, //调整大小结束事件
  9325. minLeftWidth: 80, //调整左侧宽度时的最小允许宽度
  9326. minRightWidth: 80 //调整右侧宽度时的最小允许宽度
  9327. };
  9328. $.ligerMethos.Layout = {};
  9329. $.ligerui.controls.Layout = function (element, options)
  9330. {
  9331. $.ligerui.controls.Layout.base.constructor.call(this, element, options);
  9332. };
  9333. $.ligerui.controls.Layout.ligerExtend($.ligerui.core.UIComponent, {
  9334. __getType: function ()
  9335. {
  9336. return 'Layout';
  9337. },
  9338. __idPrev: function ()
  9339. {
  9340. return 'Layout';
  9341. },
  9342. _extendMethods: function ()
  9343. {
  9344. return $.ligerMethos.Layout;
  9345. },
  9346. _render: function ()
  9347. {
  9348. var g = this, p = this.options;
  9349. g.layout = $(this.element);
  9350. g.layout.addClass("l-layout");
  9351. g.width = g.layout.width();
  9352. //top
  9353. if ($("> div[position=top]", g.layout).length > 0)
  9354. {
  9355. g.top = $("> div[position=top]", g.layout).wrap('<div class="l-layout-top" style="top:0px;"></div>').parent();
  9356. g.top.content = $("> div[position=top]", g.top);
  9357. if (!g.top.content.hasClass("l-layout-content"))
  9358. g.top.content.addClass("l-layout-content");
  9359. g.topHeight = p.topHeight;
  9360. if (g.topHeight)
  9361. {
  9362. g.top.height(g.topHeight);
  9363. }
  9364. }
  9365. //bottom
  9366. if ($("> div[position=bottom]", g.layout).length > 0)
  9367. {
  9368. g.bottom = $("> div[position=bottom]", g.layout).wrap('<div class="l-layout-bottom"></div>').parent();
  9369. g.bottom.content = $("> div[position=bottom]", g.bottom);
  9370. if (!g.bottom.content.hasClass("l-layout-content"))
  9371. g.bottom.content.addClass("l-layout-content");
  9372. g.bottomHeight = p.bottomHeight;
  9373. if (g.bottomHeight)
  9374. {
  9375. g.bottom.height(g.bottomHeight);
  9376. }
  9377. //set title
  9378. var bottomtitle = g.bottom.content.attr("title");
  9379. if (bottomtitle)
  9380. {
  9381. g.bottom.header = $('<div class="l-layout-header"></div>');
  9382. g.bottom.prepend(g.bottom.header);
  9383. g.bottom.header.html(bottomtitle);
  9384. g.bottom.content.attr("title", "");
  9385. }
  9386. }
  9387. //left
  9388. if ($("> div[position=left]", g.layout).length > 0)
  9389. {
  9390. g.left = $("> div[position=left]", g.layout).wrap('<div class="l-layout-left" style="left:0px;"></div>').parent();
  9391. g.left.header = $('<div class="l-layout-header"><div class="l-layout-header-toggle"></div><div class="l-layout-header-inner"></div></div>');
  9392. g.left.prepend(g.left.header);
  9393. g.left.header.toggle = $(".l-layout-header-toggle", g.left.header);
  9394. g.left.content = $("> div[position=left]", g.left);
  9395. if (!g.left.content.hasClass("l-layout-content"))
  9396. g.left.content.addClass("l-layout-content");
  9397. if (!p.allowLeftCollapse) $(".l-layout-header-toggle", g.left.header).remove();
  9398. //set title
  9399. var lefttitle = g.left.content.attr("title");
  9400. if (lefttitle)
  9401. {
  9402. g.left.content.attr("title", "");
  9403. $(".l-layout-header-inner", g.left.header).html(lefttitle);
  9404. }
  9405. //set width
  9406. g.leftWidth = p.leftWidth;
  9407. if (g.leftWidth)
  9408. g.left.width(g.leftWidth);
  9409. }
  9410. //center
  9411. if ($("> div[position=center]", g.layout).length > 0)
  9412. {
  9413. g.center = $("> div[position=center]", g.layout).wrap('<div class="l-layout-center" ></div>').parent();
  9414. g.center.content = $("> div[position=center]", g.center);
  9415. g.center.content.addClass("l-layout-content");
  9416. //set title
  9417. var centertitle = g.center.content.attr("title");
  9418. if (centertitle)
  9419. {
  9420. g.center.content.attr("title", "");
  9421. g.center.header = $('<div class="l-layout-header"></div>');
  9422. g.center.prepend(g.center.header);
  9423. g.center.header.html(centertitle);
  9424. }
  9425. //set width
  9426. g.centerWidth = p.centerWidth;
  9427. if (g.centerWidth)
  9428. g.center.width(g.centerWidth);
  9429. }
  9430. //right
  9431. if ($("> div[position=right]", g.layout).length > 0)
  9432. {
  9433. g.right = $("> div[position=right]", g.layout).wrap('<div class="l-layout-right"></div>').parent();
  9434. g.right.header = $('<div class="l-layout-header"><div class="l-layout-header-toggle"></div><div class="l-layout-header-inner"></div></div>');
  9435. g.right.prepend(g.right.header);
  9436. g.right.header.toggle = $(".l-layout-header-toggle", g.right.header);
  9437. if (!p.allowRightCollapse) $(".l-layout-header-toggle", g.right.header).remove();
  9438. g.right.content = $("> div[position=right]", g.right);
  9439. if (!g.right.content.hasClass("l-layout-content"))
  9440. g.right.content.addClass("l-layout-content");
  9441. //set title
  9442. var righttitle = g.right.content.attr("title");
  9443. if (righttitle)
  9444. {
  9445. g.right.content.attr("title", "");
  9446. $(".l-layout-header-inner", g.right.header).html(righttitle);
  9447. }
  9448. //set width
  9449. g.rightWidth = p.rightWidth;
  9450. if (g.rightWidth)
  9451. g.right.width(g.rightWidth);
  9452. }
  9453. //lock
  9454. g.layout.lock = $("<div class='l-layout-lock'></div>");
  9455. g.layout.append(g.layout.lock);
  9456. //DropHandle
  9457. g._addDropHandle();
  9458. //Collapse
  9459. g.isLeftCollapse = p.isLeftCollapse;
  9460. g.isRightCollapse = p.isRightCollapse;
  9461. g.leftCollapse = $('<div class="l-layout-collapse-left" style="display: none; "><div class="l-layout-collapse-left-toggle"></div></div>');
  9462. g.rightCollapse = $('<div class="l-layout-collapse-right" style="display: none; "><div class="l-layout-collapse-right-toggle"></div></div>');
  9463. g.layout.append(g.leftCollapse).append(g.rightCollapse);
  9464. g.leftCollapse.toggle = $("> .l-layout-collapse-left-toggle", g.leftCollapse);
  9465. g.rightCollapse.toggle = $("> .l-layout-collapse-right-toggle", g.rightCollapse);
  9466. g._setCollapse();
  9467. //init
  9468. g._bulid();
  9469. $(window).resize(function ()
  9470. {
  9471. g._onResize();
  9472. });
  9473. g.set(p);
  9474. },
  9475. setLeftCollapse: function (isCollapse)
  9476. {
  9477. var g = this, p = this.options;
  9478. if (!g.left) return false;
  9479. g.isLeftCollapse = isCollapse;
  9480. if (g.isLeftCollapse)
  9481. {
  9482. g.leftCollapse.show();
  9483. g.leftDropHandle && g.leftDropHandle.hide();
  9484. g.left.hide();
  9485. }
  9486. else
  9487. {
  9488. g.leftCollapse.hide();
  9489. g.leftDropHandle && g.leftDropHandle.show();
  9490. g.left.show();
  9491. }
  9492. g._onResize();
  9493. },
  9494. setRightCollapse: function (isCollapse)
  9495. {
  9496. var g = this, p = this.options;
  9497. if (!g.right) return false;
  9498. g.isRightCollapse = isCollapse;
  9499. g._onResize();
  9500. if (g.isRightCollapse)
  9501. {
  9502. g.rightCollapse.show();
  9503. g.rightDropHandle && g.rightDropHandle.hide();
  9504. g.right.hide();
  9505. }
  9506. else
  9507. {
  9508. g.rightCollapse.hide();
  9509. g.rightDropHandle && g.rightDropHandle.show();
  9510. g.right.show();
  9511. }
  9512. g._onResize();
  9513. },
  9514. _bulid: function ()
  9515. {
  9516. var g = this, p = this.options;
  9517. $("> .l-layout-left .l-layout-header,> .l-layout-right .l-layout-header", g.layout).hover(function ()
  9518. {
  9519. $(this).addClass("l-layout-header-over");
  9520. }, function ()
  9521. {
  9522. $(this).removeClass("l-layout-header-over");
  9523. });
  9524. $(".l-layout-header-toggle", g.layout).hover(function ()
  9525. {
  9526. $(this).addClass("l-layout-header-toggle-over");
  9527. }, function ()
  9528. {
  9529. $(this).removeClass("l-layout-header-toggle-over");
  9530. });
  9531. $(".l-layout-header-toggle", g.left).click(function ()
  9532. {
  9533. g.setLeftCollapse(true);
  9534. });
  9535. $(".l-layout-header-toggle", g.right).click(function ()
  9536. {
  9537. g.setRightCollapse(true);
  9538. });
  9539. //set top
  9540. g.middleTop = 0;
  9541. if (g.top)
  9542. {
  9543. g.middleTop += g.top.height();
  9544. g.middleTop += parseInt(g.top.css('borderTopWidth'));
  9545. g.middleTop += parseInt(g.top.css('borderBottomWidth'));
  9546. g.middleTop += p.space;
  9547. }
  9548. if (g.left)
  9549. {
  9550. g.left.css({ top: g.middleTop });
  9551. g.leftCollapse.css({ top: g.middleTop });
  9552. }
  9553. if (g.center) g.center.css({ top: g.middleTop });
  9554. if (g.right)
  9555. {
  9556. g.right.css({ top: g.middleTop });
  9557. g.rightCollapse.css({ top: g.middleTop });
  9558. }
  9559. //set left
  9560. if (g.left) g.left.css({ left: 0 });
  9561. g._onResize();
  9562. g._onResize();
  9563. },
  9564. _setCollapse: function ()
  9565. {
  9566. var g = this, p = this.options;
  9567. g.leftCollapse.hover(function ()
  9568. {
  9569. $(this).addClass("l-layout-collapse-left-over");
  9570. }, function ()
  9571. {
  9572. $(this).removeClass("l-layout-collapse-left-over");
  9573. });
  9574. g.leftCollapse.toggle.hover(function ()
  9575. {
  9576. $(this).addClass("l-layout-collapse-left-toggle-over");
  9577. }, function ()
  9578. {
  9579. $(this).removeClass("l-layout-collapse-left-toggle-over");
  9580. });
  9581. g.rightCollapse.hover(function ()
  9582. {
  9583. $(this).addClass("l-layout-collapse-right-over");
  9584. }, function ()
  9585. {
  9586. $(this).removeClass("l-layout-collapse-right-over");
  9587. });
  9588. g.rightCollapse.toggle.hover(function ()
  9589. {
  9590. $(this).addClass("l-layout-collapse-right-toggle-over");
  9591. }, function ()
  9592. {
  9593. $(this).removeClass("l-layout-collapse-right-toggle-over");
  9594. });
  9595. g.leftCollapse.toggle.click(function ()
  9596. {
  9597. g.setLeftCollapse(false);
  9598. });
  9599. g.rightCollapse.toggle.click(function ()
  9600. {
  9601. g.setRightCollapse(false);
  9602. });
  9603. if (g.left && g.isLeftCollapse)
  9604. {
  9605. g.leftCollapse.show();
  9606. g.leftDropHandle && g.leftDropHandle.hide();
  9607. g.left.hide();
  9608. }
  9609. if (g.right && g.isRightCollapse)
  9610. {
  9611. g.rightCollapse.show();
  9612. g.rightDropHandle && g.rightDropHandle.hide();
  9613. g.right.hide();
  9614. }
  9615. },
  9616. _addDropHandle: function ()
  9617. {
  9618. var g = this, p = this.options;
  9619. if (g.left && p.allowLeftResize)
  9620. {
  9621. g.leftDropHandle = $("<div class='l-layout-drophandle-left'></div>");
  9622. g.layout.append(g.leftDropHandle);
  9623. g.leftDropHandle && g.leftDropHandle.show();
  9624. g.leftDropHandle.mousedown(function (e)
  9625. {
  9626. g._start('leftresize', e);
  9627. });
  9628. }
  9629. if (g.right && p.allowRightResize)
  9630. {
  9631. g.rightDropHandle = $("<div class='l-layout-drophandle-right'></div>");
  9632. g.layout.append(g.rightDropHandle);
  9633. g.rightDropHandle && g.rightDropHandle.show();
  9634. g.rightDropHandle.mousedown(function (e)
  9635. {
  9636. g._start('rightresize', e);
  9637. });
  9638. }
  9639. if (g.top && p.allowTopResize)
  9640. {
  9641. g.topDropHandle = $("<div class='l-layout-drophandle-top'></div>");
  9642. g.layout.append(g.topDropHandle);
  9643. g.topDropHandle.show();
  9644. g.topDropHandle.mousedown(function (e)
  9645. {
  9646. g._start('topresize', e);
  9647. });
  9648. }
  9649. if (g.bottom && p.allowBottomResize)
  9650. {
  9651. g.bottomDropHandle = $("<div class='l-layout-drophandle-bottom'></div>");
  9652. g.layout.append(g.bottomDropHandle);
  9653. g.bottomDropHandle.show();
  9654. g.bottomDropHandle.mousedown(function (e)
  9655. {
  9656. g._start('bottomresize', e);
  9657. });
  9658. }
  9659. g.draggingxline = $("<div class='l-layout-dragging-xline'></div>");
  9660. g.draggingyline = $("<div class='l-layout-dragging-yline'></div>");
  9661. g.layout.append(g.draggingxline).append(g.draggingyline);
  9662. },
  9663. _setDropHandlePosition: function ()
  9664. {
  9665. var g = this, p = this.options;
  9666. if (g.leftDropHandle)
  9667. {
  9668. g.leftDropHandle.css({ left: g.left.width() + parseInt(g.left.css('left')), height: g.middleHeight, top: g.middleTop });
  9669. }
  9670. if (g.rightDropHandle)
  9671. {
  9672. g.rightDropHandle.css({ left: parseInt(g.right.css('left')) - p.space, height: g.middleHeight, top: g.middleTop });
  9673. }
  9674. if (g.topDropHandle)
  9675. {
  9676. g.topDropHandle.css({ top: g.top.height() + parseInt(g.top.css('top')), width: g.top.width() });
  9677. }
  9678. if (g.bottomDropHandle)
  9679. {
  9680. g.bottomDropHandle.css({ top: parseInt(g.bottom.css('top')) - p.space, width: g.bottom.width() });
  9681. }
  9682. },
  9683. _onResize: function ()
  9684. {
  9685. var g = this, p = this.options;
  9686. var oldheight = g.layout.height();
  9687. //set layout height
  9688. var h = 0;
  9689. var windowHeight = $(window).height();
  9690. var parentHeight = null;
  9691. if (typeof (p.height) == "string" && p.height.indexOf('%') > 0)
  9692. {
  9693. var layoutparent = g.layout.parent();
  9694. if (p.InWindow || layoutparent[0].tagName.toLowerCase() == "body")
  9695. {
  9696. parentHeight = windowHeight;
  9697. parentHeight -= parseInt($('body').css('paddingTop'));
  9698. parentHeight -= parseInt($('body').css('paddingBottom'));
  9699. }
  9700. else
  9701. {
  9702. parentHeight = layoutparent.height();
  9703. }
  9704. h = parentHeight * parseFloat(p.height) * 0.01;
  9705. if (p.InWindow || layoutparent[0].tagName.toLowerCase() == "body")
  9706. h -= (g.layout.offset().top - parseInt($('body').css('paddingTop')));
  9707. }
  9708. else
  9709. {
  9710. h = parseInt(p.height);
  9711. }
  9712. h += p.heightDiff;
  9713. g.layout.height(h);
  9714. g.layoutHeight = g.layout.height();
  9715. g.middleWidth = g.layout.width();
  9716. g.middleHeight = g.layout.height();
  9717. if (g.top)
  9718. {
  9719. g.middleHeight -= g.top.height();
  9720. g.middleHeight -= parseInt(g.top.css('borderTopWidth'));
  9721. g.middleHeight -= parseInt(g.top.css('borderBottomWidth'));
  9722. g.middleHeight -= p.space;
  9723. }
  9724. if (g.bottom)
  9725. {
  9726. g.middleHeight -= g.bottom.height();
  9727. g.middleHeight -= parseInt(g.bottom.css('borderTopWidth'));
  9728. g.middleHeight -= parseInt(g.bottom.css('borderBottomWidth'));
  9729. g.middleHeight -= p.space;
  9730. }
  9731. //specific
  9732. g.middleHeight -= 2;
  9733. if (g.hasBind('heightChanged') && g.layoutHeight != oldheight)
  9734. {
  9735. g.trigger('heightChanged', [{ layoutHeight: g.layoutHeight, diff: g.layoutHeight - oldheight, middleHeight: g.middleHeight}]);
  9736. }
  9737. if (g.center)
  9738. {
  9739. g.centerWidth = g.middleWidth;
  9740. if (g.left)
  9741. {
  9742. if (g.isLeftCollapse)
  9743. {
  9744. g.centerWidth -= g.leftCollapse.width();
  9745. g.centerWidth -= parseInt(g.leftCollapse.css('borderLeftWidth'));
  9746. g.centerWidth -= parseInt(g.leftCollapse.css('borderRightWidth'));
  9747. g.centerWidth -= parseInt(g.leftCollapse.css('left'));
  9748. g.centerWidth -= p.space;
  9749. }
  9750. else
  9751. {
  9752. g.centerWidth -= g.leftWidth;
  9753. g.centerWidth -= parseInt(g.left.css('borderLeftWidth'));
  9754. g.centerWidth -= parseInt(g.left.css('borderRightWidth'));
  9755. g.centerWidth -= parseInt(g.left.css('left'));
  9756. g.centerWidth -= p.space;
  9757. }
  9758. }
  9759. if (g.right)
  9760. {
  9761. if (g.isRightCollapse)
  9762. {
  9763. g.centerWidth -= g.rightCollapse.width();
  9764. g.centerWidth -= parseInt(g.rightCollapse.css('borderLeftWidth'));
  9765. g.centerWidth -= parseInt(g.rightCollapse.css('borderRightWidth'));
  9766. g.centerWidth -= parseInt(g.rightCollapse.css('right'));
  9767. g.centerWidth -= p.space;
  9768. }
  9769. else
  9770. {
  9771. g.centerWidth -= g.rightWidth;
  9772. g.centerWidth -= parseInt(g.right.css('borderLeftWidth'));
  9773. g.centerWidth -= parseInt(g.right.css('borderRightWidth'));
  9774. g.centerWidth -= p.space;
  9775. }
  9776. }
  9777. g.centerLeft = 0;
  9778. if (g.left)
  9779. {
  9780. if (g.isLeftCollapse)
  9781. {
  9782. g.centerLeft += g.leftCollapse.width();
  9783. g.centerLeft += parseInt(g.leftCollapse.css('borderLeftWidth'));
  9784. g.centerLeft += parseInt(g.leftCollapse.css('borderRightWidth'));
  9785. g.centerLeft += parseInt(g.leftCollapse.css('left'));
  9786. g.centerLeft += p.space;
  9787. }
  9788. else
  9789. {
  9790. g.centerLeft += g.left.width();
  9791. g.centerLeft += parseInt(g.left.css('borderLeftWidth'));
  9792. g.centerLeft += parseInt(g.left.css('borderRightWidth'));
  9793. g.centerLeft += p.space;
  9794. }
  9795. }
  9796. g.center.css({ left: g.centerLeft });
  9797. g.center.width(g.centerWidth);
  9798. g.center.height(g.middleHeight);
  9799. var contentHeight = g.middleHeight;
  9800. if (g.center.header) contentHeight -= g.center.header.height();
  9801. g.center.content.height(contentHeight);
  9802. }
  9803. if (g.left)
  9804. {
  9805. g.leftCollapse.height(g.middleHeight);
  9806. g.left.height(g.middleHeight);
  9807. }
  9808. if (g.right)
  9809. {
  9810. g.rightCollapse.height(g.middleHeight);
  9811. g.right.height(g.middleHeight);
  9812. //set left
  9813. g.rightLeft = 0;
  9814. if (g.left)
  9815. {
  9816. if (g.isLeftCollapse)
  9817. {
  9818. g.rightLeft += g.leftCollapse.width();
  9819. g.rightLeft += parseInt(g.leftCollapse.css('borderLeftWidth'));
  9820. g.rightLeft += parseInt(g.leftCollapse.css('borderRightWidth'));
  9821. g.rightLeft += p.space;
  9822. }
  9823. else
  9824. {
  9825. g.rightLeft += g.left.width();
  9826. g.rightLeft += parseInt(g.left.css('borderLeftWidth'));
  9827. g.rightLeft += parseInt(g.left.css('borderRightWidth'));
  9828. g.rightLeft += parseInt(g.left.css('left'));
  9829. g.rightLeft += p.space;
  9830. }
  9831. }
  9832. if (g.center)
  9833. {
  9834. g.rightLeft += g.center.width();
  9835. g.rightLeft += parseInt(g.center.css('borderLeftWidth'));
  9836. g.rightLeft += parseInt(g.center.css('borderRightWidth'));
  9837. g.rightLeft += p.space;
  9838. }
  9839. g.right.css({ left: g.rightLeft });
  9840. }
  9841. if (g.bottom)
  9842. {
  9843. g.bottomTop = g.layoutHeight - g.bottom.height() - 2;
  9844. g.bottom.css({ top: g.bottomTop });
  9845. }
  9846. g._setDropHandlePosition();
  9847. },
  9848. _start: function (dragtype, e)
  9849. {
  9850. var g = this, p = this.options;
  9851. g.dragtype = dragtype;
  9852. if (dragtype == 'leftresize' || dragtype == 'rightresize')
  9853. {
  9854. g.xresize = { startX: e.pageX };
  9855. g.draggingyline.css({ left: e.pageX - g.layout.offset().left, height: g.middleHeight, top: g.middleTop }).show();
  9856. $('body').css('cursor', 'col-resize');
  9857. }
  9858. else if (dragtype == 'topresize' || dragtype == 'bottomresize')
  9859. {
  9860. g.yresize = { startY: e.pageY };
  9861. g.draggingxline.css({ top: e.pageY - g.layout.offset().top, width: g.layout.width() }).show();
  9862. $('body').css('cursor', 'row-resize');
  9863. }
  9864. else
  9865. {
  9866. return;
  9867. }
  9868. g.layout.lock.width(g.layout.width());
  9869. g.layout.lock.height(g.layout.height());
  9870. g.layout.lock.show();
  9871. if ($.browser.msie || $.browser.safari) $('body').bind('selectstart', function () { return false; }); // 不能选择
  9872. $(document).bind('mouseup', function ()
  9873. {
  9874. g._stop.apply(g, arguments);
  9875. });
  9876. $(document).bind('mousemove', function ()
  9877. {
  9878. g._drag.apply(g, arguments);
  9879. });
  9880. },
  9881. _drag: function (e)
  9882. {
  9883. var g = this, p = this.options;
  9884. if (g.xresize)
  9885. {
  9886. g.xresize.diff = e.pageX - g.xresize.startX;
  9887. g.draggingyline.css({ left: e.pageX - g.layout.offset().left });
  9888. $('body').css('cursor', 'col-resize');
  9889. }
  9890. else if (g.yresize)
  9891. {
  9892. g.yresize.diff = e.pageY - g.yresize.startY;
  9893. g.draggingxline.css({ top: e.pageY - g.layout.offset().top });
  9894. $('body').css('cursor', 'row-resize');
  9895. }
  9896. },
  9897. _stop: function (e)
  9898. {
  9899. var g = this, p = this.options;
  9900. var diff;
  9901. if (g.xresize && g.xresize.diff != undefined)
  9902. {
  9903. diff = g.xresize.diff;
  9904. if (g.dragtype == 'leftresize')
  9905. {
  9906. if (p.minLeftWidth)
  9907. {
  9908. if (g.leftWidth + g.xresize.diff < p.minLeftWidth)
  9909. return;
  9910. }
  9911. g.leftWidth += g.xresize.diff;
  9912. g.left.width(g.leftWidth);
  9913. if (g.center)
  9914. g.center.width(g.center.width() - g.xresize.diff).css({ left: parseInt(g.center.css('left')) + g.xresize.diff });
  9915. else if (g.right)
  9916. g.right.width(g.left.width() - g.xresize.diff).css({ left: parseInt(g.right.css('left')) + g.xresize.diff });
  9917. }
  9918. else if (g.dragtype == 'rightresize')
  9919. {
  9920. if (p.minRightWidth)
  9921. {
  9922. if (g.rightWidth - g.xresize.diff < p.minRightWidth)
  9923. return;
  9924. }
  9925. g.rightWidth -= g.xresize.diff;
  9926. g.right.width(g.rightWidth).css({ left: parseInt(g.right.css('left')) + g.xresize.diff });
  9927. if (g.center)
  9928. g.center.width(g.center.width() + g.xresize.diff);
  9929. else if (g.left)
  9930. g.left.width(g.left.width() + g.xresize.diff);
  9931. }
  9932. }
  9933. else if (g.yresize && g.yresize.diff != undefined)
  9934. {
  9935. diff = g.yresize.diff;
  9936. if (g.dragtype == 'topresize')
  9937. {
  9938. g.top.height(g.top.height() + g.yresize.diff);
  9939. g.middleTop += g.yresize.diff;
  9940. g.middleHeight -= g.yresize.diff;
  9941. if (g.left)
  9942. {
  9943. g.left.css({ top: g.middleTop }).height(g.middleHeight);
  9944. g.leftCollapse.css({ top: g.middleTop }).height(g.middleHeight);
  9945. }
  9946. if (g.center) g.center.css({ top: g.middleTop }).height(g.middleHeight);
  9947. if (g.right)
  9948. {
  9949. g.right.css({ top: g.middleTop }).height(g.middleHeight);
  9950. g.rightCollapse.css({ top: g.middleTop }).height(g.middleHeight);
  9951. }
  9952. }
  9953. else if (g.dragtype == 'bottomresize')
  9954. {
  9955. g.bottom.height(g.bottom.height() - g.yresize.diff);
  9956. g.middleHeight += g.yresize.diff;
  9957. g.bottomTop += g.yresize.diff;
  9958. g.bottom.css({ top: g.bottomTop });
  9959. if (g.left)
  9960. {
  9961. g.left.height(g.middleHeight);
  9962. g.leftCollapse.height(g.middleHeight);
  9963. }
  9964. if (g.center) g.center.height(g.middleHeight);
  9965. if (g.right)
  9966. {
  9967. g.right.height(g.middleHeight);
  9968. g.rightCollapse.height(g.middleHeight);
  9969. }
  9970. }
  9971. }
  9972. g.trigger('endResize', [{
  9973. direction: g.dragtype ? g.dragtype.replace(/resize/, '') : '',
  9974. diff: diff
  9975. }, e]);
  9976. g._setDropHandlePosition();
  9977. g.draggingxline.hide();
  9978. g.draggingyline.hide();
  9979. g.xresize = g.yresize = g.dragtype = false;
  9980. g.layout.lock.hide();
  9981. if ($.browser.msie || $.browser.safari)
  9982. $('body').unbind('selectstart');
  9983. $(document).unbind('mousemove', g._drag);
  9984. $(document).unbind('mouseup', g._stop);
  9985. $('body').css('cursor', '');
  9986. }
  9987. });
  9988. })(jQuery);/**
  9989. * jQuery ligerUI 1.1.9
  9990. *
  9991. * http://ligerui.com
  9992. *
  9993. * Author daomi 2012 [ gd_star@163.com ]
  9994. *
  9995. */
  9996. (function ($)
  9997. {
  9998. $.ligerMenu = function (options)
  9999. {
  10000. return $.ligerui.run.call(null, "ligerMenu", arguments);
  10001. };
  10002. $.ligerDefaults.Menu = {
  10003. width: 120,
  10004. top: 0,
  10005. left: 0,
  10006. items: null,
  10007. shadow: true
  10008. };
  10009. $.ligerMethos.Menu = {};
  10010. $.ligerui.controls.Menu = function (options)
  10011. {
  10012. $.ligerui.controls.Menu.base.constructor.call(this, null, options);
  10013. };
  10014. $.ligerui.controls.Menu.ligerExtend($.ligerui.core.UIComponent, {
  10015. __getType: function ()
  10016. {
  10017. return 'Menu';
  10018. },
  10019. __idPrev: function ()
  10020. {
  10021. return 'Menu';
  10022. },
  10023. _extendMethods: function ()
  10024. {
  10025. return $.ligerMethos.Menu;
  10026. },
  10027. _render: function ()
  10028. {
  10029. var g = this, p = this.options;
  10030. g.menuItemCount = 0;
  10031. //全部菜单
  10032. g.menus = {};
  10033. //顶级菜单
  10034. g.menu = g.createMenu();
  10035. g.element = g.menu[0];
  10036. g.menu.css({ top: p.top, left: p.left, width: p.width });
  10037. p.items && $(p.items).each(function (i, item)
  10038. {
  10039. g.addItem(item);
  10040. });
  10041. $(document).bind('click.menu', function ()
  10042. {
  10043. for (var menuid in g.menus)
  10044. {
  10045. var menu = g.menus[menuid];
  10046. if (!menu) return;
  10047. menu.hide();
  10048. if (menu.shadow) menu.shadow.hide();
  10049. }
  10050. });
  10051. g.set(p);
  10052. },
  10053. show: function (options, menu)
  10054. {
  10055. var g = this, p = this.options;
  10056. if (menu == undefined) menu = g.menu;
  10057. if (options && options.left != undefined)
  10058. {
  10059. menu.css({ left: options.left });
  10060. }
  10061. if (options && options.top != undefined)
  10062. {
  10063. menu.css({ top: options.top });
  10064. }
  10065. menu.show();
  10066. g.updateShadow(menu);
  10067. },
  10068. updateShadow: function (menu)
  10069. {
  10070. var g = this, p = this.options;
  10071. if (!p.shadow) return;
  10072. menu.shadow.css({
  10073. left: menu.css('left'),
  10074. top: menu.css('top'),
  10075. width: menu.outerWidth(),
  10076. height: menu.outerHeight()
  10077. });
  10078. if (menu.is(":visible"))
  10079. menu.shadow.show();
  10080. else
  10081. menu.shadow.hide();
  10082. },
  10083. hide: function (menu)
  10084. {
  10085. var g = this, p = this.options;
  10086. if (menu == undefined) menu = g.menu;
  10087. g.hideAllSubMenu(menu);
  10088. menu.hide();
  10089. g.updateShadow(menu);
  10090. },
  10091. toggle: function ()
  10092. {
  10093. var g = this, p = this.options;
  10094. g.menu.toggle();
  10095. g.updateShadow(g.menu);
  10096. },
  10097. removeItem: function (itemid)
  10098. {
  10099. var g = this, p = this.options;
  10100. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).remove();
  10101. },
  10102. setEnabled: function (itemid)
  10103. {
  10104. var g = this, p = this.options;
  10105. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).removeClass("l-menu-item-disable");
  10106. },
  10107. setDisabled: function (itemid)
  10108. {
  10109. var g = this, p = this.options;
  10110. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).addClass("l-menu-item-disable");
  10111. },
  10112. isEnable: function (itemid)
  10113. {
  10114. var g = this, p = this.options;
  10115. return !$("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).hasClass("l-menu-item-disable");
  10116. },
  10117. getItemCount: function ()
  10118. {
  10119. var g = this, p = this.options;
  10120. return $("> .l-menu-item", g.menu.items).length;
  10121. },
  10122. addItem: function (item, menu)
  10123. {
  10124. var g = this, p = this.options;
  10125. if (!item) return;
  10126. if (menu == undefined) menu = g.menu;
  10127. if (item.line)
  10128. {
  10129. menu.items.append('<div class="l-menu-item-line"></div>');
  10130. return;
  10131. }
  10132. var ditem = $('<div class="l-menu-item"><div class="l-menu-item-text"></div> </div>');
  10133. var itemcount = $("> .l-menu-item", menu.items).length;
  10134. menu.items.append(ditem);
  10135. ditem.attr("ligeruimenutemid", ++g.menuItemCount);
  10136. item.id && ditem.attr("menuitemid", item.id);
  10137. item.text && $(">.l-menu-item-text:first", ditem).html(item.text);
  10138. item.icon && ditem.prepend('<div class="l-menu-item-icon l-icon-' + item.icon + '"></div>');
  10139. if (item.disable || item.disabled)
  10140. ditem.addClass("l-menu-item-disable");
  10141. if (item.children)
  10142. {
  10143. ditem.append('<div class="l-menu-item-arrow"></div>');
  10144. var newmenu = g.createMenu(ditem.attr("ligeruimenutemid"));
  10145. g.menus[ditem.attr("ligeruimenutemid")] = newmenu;
  10146. newmenu.width(p.width);
  10147. newmenu.hover(null, function ()
  10148. {
  10149. if (!newmenu.showedSubMenu)
  10150. g.hide(newmenu);
  10151. });
  10152. $(item.children).each(function ()
  10153. {
  10154. g.addItem(this, newmenu);
  10155. });
  10156. }
  10157. item.click && ditem.click(function ()
  10158. {
  10159. if ($(this).hasClass("l-menu-item-disable")) return;
  10160. item.click(item, itemcount);
  10161. });
  10162. item.dblclick && ditem.dblclick(function ()
  10163. {
  10164. if ($(this).hasClass("l-menu-item-disable")) return;
  10165. item.dblclick(item, itemcount);
  10166. });
  10167. var menuover = $("> .l-menu-over:first", menu);
  10168. ditem.hover(function ()
  10169. {
  10170. if ($(this).hasClass("l-menu-item-disable")) return;
  10171. var itemtop = $(this).offset().top;
  10172. var top = itemtop - menu.offset().top;
  10173. menuover.css({ top: top });
  10174. g.hideAllSubMenu(menu);
  10175. if (item.children)
  10176. {
  10177. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10178. if (!ligeruimenutemid) return;
  10179. if (g.menus[ligeruimenutemid])
  10180. {
  10181. g.show({ top: itemtop, left: $(this).offset().left + $(this).width() - 5 }, g.menus[ligeruimenutemid]);
  10182. menu.showedSubMenu = true;
  10183. }
  10184. }
  10185. }, function ()
  10186. {
  10187. if ($(this).hasClass("l-menu-item-disable")) return;
  10188. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10189. if (item.children)
  10190. {
  10191. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10192. if (!ligeruimenutemid) return;
  10193. };
  10194. });
  10195. },
  10196. hideAllSubMenu: function (menu)
  10197. {
  10198. var g = this, p = this.options;
  10199. if (menu == undefined) menu = g.menu;
  10200. $("> .l-menu-item", menu.items).each(function ()
  10201. {
  10202. if ($("> .l-menu-item-arrow", this).length > 0)
  10203. {
  10204. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10205. if (!ligeruimenutemid) return;
  10206. g.menus[ligeruimenutemid] && g.hide(g.menus[ligeruimenutemid]);
  10207. }
  10208. });
  10209. menu.showedSubMenu = false;
  10210. },
  10211. createMenu: function (parentMenuItemID)
  10212. {
  10213. var g = this, p = this.options;
  10214. var menu = $('<div class="l-menu" style="display:none"><div class="l-menu-yline"></div><div class="l-menu-over"><div class="l-menu-over-l"></div> <div class="l-menu-over-r"></div></div><div class="l-menu-inner"></div></div>');
  10215. parentMenuItemID && menu.attr("ligeruiparentmenuitemid", parentMenuItemID);
  10216. menu.items = $("> .l-menu-inner:first", menu);
  10217. menu.appendTo('body');
  10218. if (p.shadow)
  10219. {
  10220. menu.shadow = $('<div class="l-menu-shadow"></div>').insertAfter(menu);
  10221. g.updateShadow(menu);
  10222. }
  10223. menu.hover(null, function ()
  10224. {
  10225. if (!menu.showedSubMenu)
  10226. $("> .l-menu-over:first", menu).css({ top: -24 });
  10227. });
  10228. if (parentMenuItemID)
  10229. g.menus[parentMenuItemID] = menu;
  10230. else
  10231. g.menus[0] = menu;
  10232. return menu;
  10233. }
  10234. });
  10235. //旧写法保留
  10236. $.ligerui.controls.Menu.prototype.setEnable = $.ligerui.controls.Menu.prototype.setEnabled;
  10237. $.ligerui.controls.Menu.prototype.setDisable = $.ligerui.controls.Menu.prototype.setDisabled;
  10238. })(jQuery);/**
  10239. * jQuery ligerUI 1.1.9
  10240. *
  10241. * http://ligerui.com
  10242. *
  10243. * Author daomi 2012 [ gd_star@163.com ]
  10244. *
  10245. */
  10246. (function ($)
  10247. {
  10248. $.fn.ligerMenuBar = function (options)
  10249. {
  10250. return $.ligerui.run.call(this, "ligerMenuBar", arguments);
  10251. };
  10252. $.fn.ligerGetMenuBarManager = function ()
  10253. {
  10254. return $.ligerui.run.call(this, "ligerGetMenuBarManager", arguments);
  10255. };
  10256. $.ligerDefaults.MenuBar = {};
  10257. $.ligerMethos.MenuBar = {};
  10258. $.ligerui.controls.MenuBar = function (element, options)
  10259. {
  10260. $.ligerui.controls.MenuBar.base.constructor.call(this, element, options);
  10261. };
  10262. $.ligerui.controls.MenuBar.ligerExtend($.ligerui.core.UIComponent, {
  10263. __getType: function ()
  10264. {
  10265. return 'MenuBar';
  10266. },
  10267. __idPrev: function ()
  10268. {
  10269. return 'MenuBar';
  10270. },
  10271. _extendMethods: function ()
  10272. {
  10273. return $.ligerMethos.MenuBar;
  10274. },
  10275. _render: function ()
  10276. {
  10277. var g = this, p = this.options;
  10278. g.menubar = $(this.element);
  10279. if (!g.menubar.hasClass("l-menubar")) g.menubar.addClass("l-menubar");
  10280. if (p && p.items)
  10281. {
  10282. $(p.items).each(function (i, item)
  10283. {
  10284. g.addItem(item);
  10285. });
  10286. }
  10287. $(document).click(function ()
  10288. {
  10289. $(".l-panel-btn-selected", g.menubar).removeClass("l-panel-btn-selected");
  10290. });
  10291. g.set(p);
  10292. },
  10293. addItem: function (item)
  10294. {
  10295. var g = this, p = this.options;
  10296. var ditem = $('<div class="l-menubar-item l-panel-btn"><span></span><div class="l-panel-btn-l"></div><div class="l-panel-btn-r"></div><div class="l-menubar-item-down"></div></div>');
  10297. g.menubar.append(ditem);
  10298. item.id && ditem.attr("menubarid", item.id);
  10299. item.text && $("span:first", ditem).html(item.text);
  10300. item.disable && ditem.addClass("l-menubar-item-disable");
  10301. item.click && ditem.click(function () { item.click(item); });
  10302. if (item.menu)
  10303. {
  10304. var menu = $.ligerMenu(item.menu);
  10305. ditem.hover(function ()
  10306. {
  10307. g.actionMenu && g.actionMenu.hide();
  10308. var left = $(this).offset().left;
  10309. var top = $(this).offset().top + $(this).height();
  10310. menu.show({ top: top, left: left });
  10311. g.actionMenu = menu;
  10312. $(this).addClass("l-panel-btn-over l-panel-btn-selected").siblings(".l-menubar-item").removeClass("l-panel-btn-selected");
  10313. }, function ()
  10314. {
  10315. $(this).removeClass("l-panel-btn-over");
  10316. });
  10317. }
  10318. else
  10319. {
  10320. ditem.hover(function ()
  10321. {
  10322. $(this).addClass("l-panel-btn-over");
  10323. }, function ()
  10324. {
  10325. $(this).removeClass("l-panel-btn-over");
  10326. });
  10327. $(".l-menubar-item-down", ditem).remove();
  10328. }
  10329. }
  10330. });
  10331. })(jQuery);/**
  10332. * jQuery ligerUI 1.1.9
  10333. *
  10334. * http://ligerui.com
  10335. *
  10336. * Author daomi 2012 [ gd_star@163.com ]
  10337. *
  10338. */
  10339. (function ($)
  10340. {
  10341. $.ligerMessageBox = function (options)
  10342. {
  10343. return $.ligerui.run.call(null, "ligerMessageBox", arguments, { isStatic: true });
  10344. };
  10345. $.ligerDefaults.MessageBox = {
  10346. isDrag: true
  10347. };
  10348. $.ligerMethos.MessageBox = {};
  10349. $.ligerui.controls.MessageBox = function (options)
  10350. {
  10351. $.ligerui.controls.MessageBox.base.constructor.call(this, null, options);
  10352. };
  10353. $.ligerui.controls.MessageBox.ligerExtend($.ligerui.core.UIComponent, {
  10354. __getType: function ()
  10355. {
  10356. return 'MessageBox';
  10357. },
  10358. __idPrev: function ()
  10359. {
  10360. return 'MessageBox';
  10361. },
  10362. _extendMethods: function ()
  10363. {
  10364. return $.ligerMethos.MessageBox;
  10365. },
  10366. _render: function ()
  10367. {
  10368. var g = this, p = this.options;
  10369. var messageBoxHTML = "";
  10370. messageBoxHTML += '<div class="l-messagebox">';
  10371. messageBoxHTML += ' <div class="l-messagebox-lt"></div><div class="l-messagebox-rt"></div>';
  10372. messageBoxHTML += ' <div class="l-messagebox-l"></div><div class="l-messagebox-r"></div> ';
  10373. messageBoxHTML += ' <div class="l-messagebox-image"></div>';
  10374. messageBoxHTML += ' <div class="l-messagebox-title">';
  10375. messageBoxHTML += ' <div class="l-messagebox-title-inner"></div>';
  10376. messageBoxHTML += ' <div class="l-messagebox-close"></div>';
  10377. messageBoxHTML += ' </div>';
  10378. messageBoxHTML += ' <div class="l-messagebox-content">';
  10379. messageBoxHTML += ' </div>';
  10380. messageBoxHTML += ' <div class="l-messagebox-buttons"><div class="l-messagebox-buttons-inner">';
  10381. messageBoxHTML += ' </div></div>';
  10382. messageBoxHTML += ' </div>';
  10383. g.messageBox = $(messageBoxHTML);
  10384. $('body').append(g.messageBox);
  10385. g.messageBox.close = function ()
  10386. {
  10387. g._removeWindowMask();
  10388. g.messageBox.remove();
  10389. };
  10390. //设置参数属性
  10391. p.width && g.messageBox.width(p.width);
  10392. p.title && $(".l-messagebox-title-inner", g.messageBox).html(p.title);
  10393. p.content && $(".l-messagebox-content", g.messageBox).html(p.content);
  10394. if (p.buttons)
  10395. {
  10396. $(p.buttons).each(function (i, item)
  10397. {
  10398. var btn = $('<div class="l-messagebox-btn"><div class="l-messagebox-btn-l"></div><div class="l-messagebox-btn-r"></div><div class="l-messagebox-btn-inner"></div></div>');
  10399. $(".l-messagebox-btn-inner", btn).html(item.text);
  10400. $(".l-messagebox-buttons-inner", g.messageBox).append(btn);
  10401. item.width && btn.width(item.width);
  10402. item.onclick && btn.click(function () { item.onclick(item, i, g.messageBox) });
  10403. });
  10404. $(".l-messagebox-buttons-inner", g.messageBox).append("<div class='l-clear'></div>");
  10405. }
  10406. var boxWidth = g.messageBox.width();
  10407. var sumBtnWidth = 0;
  10408. $(".l-messagebox-buttons-inner .l-messagebox-btn", g.messageBox).each(function ()
  10409. {
  10410. sumBtnWidth += $(this).width();
  10411. });
  10412. $(".l-messagebox-buttons-inner", g.messageBox).css({ marginLeft: parseInt((boxWidth - sumBtnWidth) * 0.5) });
  10413. //设置背景、拖动支持 和设置图片
  10414. g._applyWindowMask();
  10415. g._applyDrag();
  10416. g._setImage();
  10417. //位置初始化
  10418. var left = 0;
  10419. var top = 0;
  10420. var width = p.width || g.messageBox.width();
  10421. if (p.left != null) left = p.left;
  10422. else p.left = left = 0.5 * ($(window).width() - width);
  10423. if (p.top != null) top = p.top;
  10424. else p.top = top = 0.5 * ($(window).height() - g.messageBox.height()) + $(window).scrollTop() - 10;
  10425. if (left < 0) p.left = left = 0;
  10426. if (top < 0) p.top = top = 0;
  10427. g.messageBox.css({ left: left, top: top });
  10428. //设置事件
  10429. $(".l-messagebox-btn", g.messageBox).hover(function ()
  10430. {
  10431. $(this).addClass("l-messagebox-btn-over");
  10432. }, function ()
  10433. {
  10434. $(this).removeClass("l-messagebox-btn-over");
  10435. });
  10436. $(".l-messagebox-close", g.messageBox).hover(function ()
  10437. {
  10438. $(this).addClass("l-messagebox-close-over");
  10439. }, function ()
  10440. {
  10441. $(this).removeClass("l-messagebox-close-over");
  10442. }).click(function ()
  10443. {
  10444. g.messageBox.close();
  10445. });
  10446. g.set(p);
  10447. },
  10448. close: function ()
  10449. {
  10450. var g = this, p = this.options;
  10451. this.g._removeWindowMask();
  10452. this.messageBox.remove();
  10453. },
  10454. _applyWindowMask: function ()
  10455. {
  10456. var g = this, p = this.options;
  10457. $(".l-window-mask").remove();
  10458. $("<div class='l-window-mask' style='display: block;'></div>").appendTo($("body"));
  10459. },
  10460. _removeWindowMask: function ()
  10461. {
  10462. var g = this, p = this.options;
  10463. $(".l-window-mask").remove();
  10464. },
  10465. _applyDrag: function ()
  10466. {
  10467. var g = this, p = this.options;
  10468. if (p.isDrag && $.fn.ligerDrag)
  10469. g.messageBox.ligerDrag({ handler: '.l-messagebox-title-inner', animate: false });
  10470. },
  10471. _setImage: function ()
  10472. {
  10473. var g = this, p = this.options;
  10474. if (p.type)
  10475. {
  10476. if (p.type == 'success' || p.type == 'donne')
  10477. {
  10478. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-donne").show();
  10479. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  10480. }
  10481. else if (p.type == 'error')
  10482. {
  10483. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-error").show();
  10484. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  10485. }
  10486. else if (p.type == 'warn')
  10487. {
  10488. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-warn").show();
  10489. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  10490. }
  10491. else if (p.type == 'question')
  10492. {
  10493. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-question").show();
  10494. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 40 });
  10495. }
  10496. }
  10497. }
  10498. });
  10499. $.ligerMessageBox.show = function (p)
  10500. {
  10501. return $.ligerMessageBox(p);
  10502. };
  10503. $.ligerMessageBox.alert = function (title, content, type, onBtnClick)
  10504. {
  10505. title = title || "";
  10506. content = content || title;
  10507. var onclick = function (item, index, messageBox)
  10508. {
  10509. messageBox.close();
  10510. if (onBtnClick)
  10511. onBtnClick(item, index, messageBox);
  10512. };
  10513. p = {
  10514. title: title,
  10515. content: content,
  10516. buttons: [{ text: '确定', onclick: onclick}]
  10517. };
  10518. if (type) p.type = type;
  10519. return $.ligerMessageBox(p);
  10520. };
  10521. $.ligerMessageBox.confirm = function (title, content, callback)
  10522. {
  10523. var onclick = function (item, index, messageBox)
  10524. {
  10525. messageBox.close();
  10526. if (callback)
  10527. {
  10528. callback(index == 0);
  10529. }
  10530. };
  10531. p = {
  10532. type: 'question',
  10533. title: title,
  10534. content: content,
  10535. buttons: [{ text: '是', onclick: onclick }, { text: '否', onclick: onclick}]
  10536. };
  10537. return $.ligerMessageBox(p);
  10538. };
  10539. $.ligerMessageBox.success = function (title, content, onBtnClick)
  10540. {
  10541. return $.ligerMessageBox.alert(title, content, 'success', onBtnClick);
  10542. };
  10543. $.ligerMessageBox.error = function (title, content, onBtnClick)
  10544. {
  10545. return $.ligerMessageBox.alert(title, content, 'error', onBtnClick);
  10546. };
  10547. $.ligerMessageBox.warn = function (title, content, onBtnClick)
  10548. {
  10549. return $.ligerMessageBox.alert(title, content, 'warn', onBtnClick);
  10550. };
  10551. $.ligerMessageBox.question = function (title, content)
  10552. {
  10553. return $.ligerMessageBox.alert(title, content, 'question');
  10554. };
  10555. })(jQuery);/**
  10556. * jQuery ligerUI 1.1.9
  10557. *
  10558. * http://ligerui.com
  10559. *
  10560. * Author daomi 2012 [ gd_star@163.com ]
  10561. *
  10562. */
  10563. (function ($)
  10564. {
  10565. $.fn.ligerRadio = function ()
  10566. {
  10567. return $.ligerui.run.call(this, "ligerRadio", arguments);
  10568. };
  10569. $.fn.ligerGetRadioManager = function ()
  10570. {
  10571. return $.ligerui.run.call(this, "ligerGetRadioManager", arguments);
  10572. };
  10573. $.ligerDefaults.Radio = { disabled: false };
  10574. $.ligerMethos.Radio = {};
  10575. $.ligerui.controls.Radio = function (element, options)
  10576. {
  10577. $.ligerui.controls.Radio.base.constructor.call(this, element, options);
  10578. };
  10579. $.ligerui.controls.Radio.ligerExtend($.ligerui.controls.Input, {
  10580. __getType: function ()
  10581. {
  10582. return 'Radio';
  10583. },
  10584. __idPrev: function ()
  10585. {
  10586. return 'Radio';
  10587. },
  10588. _extendMethods: function ()
  10589. {
  10590. return $.ligerMethos.Radio;
  10591. },
  10592. _render: function ()
  10593. {
  10594. var g = this, p = this.options;
  10595. g.input = $(this.element);
  10596. g.link = $('<a href="javascript:void(0)" class="l-radio"></a>');
  10597. g.wrapper = g.input.addClass('l-hidden').wrap('<div class="l-radio-wrapper"></div>').parent();
  10598. g.wrapper.prepend(g.link);
  10599. g.input.change(function ()
  10600. {
  10601. if (this.checked)
  10602. {
  10603. g.link.addClass('l-radio-checked');
  10604. }
  10605. else
  10606. {
  10607. g.link.removeClass('l-radio-checked');
  10608. }
  10609. return true;
  10610. });
  10611. g.link.click(function ()
  10612. {
  10613. g._doclick();
  10614. });
  10615. g.wrapper.hover(function ()
  10616. {
  10617. if (!p.disabled)
  10618. $(this).addClass("l-over");
  10619. }, function ()
  10620. {
  10621. $(this).removeClass("l-over");
  10622. });
  10623. this.element.checked && g.link.addClass('l-radio-checked');
  10624. if (this.element.id)
  10625. {
  10626. $("label[for=" + this.element.id + "]").click(function ()
  10627. {
  10628. g._doclick();
  10629. });
  10630. }
  10631. g.set(p);
  10632. },
  10633. setValue: function (value)
  10634. {
  10635. var g = this, p = this.options;
  10636. if (!value)
  10637. {
  10638. g.input[0].checked = false;
  10639. g.link.removeClass('l-radio-checked');
  10640. }
  10641. else
  10642. {
  10643. g.input[0].checked = true;
  10644. g.link.addClass('l-radio-checked');
  10645. }
  10646. },
  10647. getValue: function ()
  10648. {
  10649. return this.input[0].checked;
  10650. },
  10651. setEnabled: function ()
  10652. {
  10653. this.input.attr('disabled', false);
  10654. this.wrapper.removeClass("l-disabled");
  10655. this.options.disabled = false;
  10656. },
  10657. setDisabled: function ()
  10658. {
  10659. this.input.attr('disabled', true);
  10660. this.wrapper.addClass("l-disabled");
  10661. this.options.disabled = true;
  10662. },
  10663. updateStyle: function ()
  10664. {
  10665. if (this.input.attr('disabled'))
  10666. {
  10667. this.wrapper.addClass("l-disabled");
  10668. this.options.disabled = true;
  10669. }
  10670. if (this.input[0].checked)
  10671. {
  10672. this.link.addClass('l-checkbox-checked');
  10673. }
  10674. else
  10675. {
  10676. this.link.removeClass('l-checkbox-checked');
  10677. }
  10678. },
  10679. _doclick: function ()
  10680. {
  10681. var g = this, p = this.options;
  10682. if (g.input.attr('disabled')) { return false; }
  10683. g.input.trigger('click').trigger('change');
  10684. var formEle;
  10685. if (g.input[0].form) formEle = g.input[0].form;
  10686. else formEle = document;
  10687. $("input:radio[name=" + g.input[0].name + "]", formEle).not(g.input).trigger("change");
  10688. return false;
  10689. }
  10690. });
  10691. })(jQuery);/**
  10692. * jQuery ligerUI 1.1.9
  10693. *
  10694. * http://ligerui.com
  10695. *
  10696. * Author daomi 2012 [ gd_star@163.com ]
  10697. *
  10698. */
  10699. (function ($)
  10700. {
  10701. $.fn.ligerResizable = function (options)
  10702. {
  10703. return $.ligerui.run.call(this, "ligerResizable", arguments,
  10704. {
  10705. idAttrName: 'ligeruiresizableid', hasElement: false, propertyToElemnt: 'target'
  10706. });
  10707. };
  10708. $.fn.ligerGetResizableManager = function ()
  10709. {
  10710. return $.ligerui.run.call(this, "ligerGetResizableManager", arguments,
  10711. {
  10712. idAttrName: 'ligeruiresizableid', hasElement: false, propertyToElemnt: 'target'
  10713. });
  10714. };
  10715. $.ligerDefaults.Resizable = {
  10716. handles: 'n, e, s, w, ne, se, sw, nw',
  10717. maxWidth: 2000,
  10718. maxHeight: 2000,
  10719. minWidth: 20,
  10720. minHeight: 20,
  10721. scope: 3,
  10722. animate: false,
  10723. onStartResize: function (e) { },
  10724. onResize: function (e) { },
  10725. onStopResize: function (e) { },
  10726. onEndResize: null
  10727. };
  10728. $.ligerui.controls.Resizable = function (options)
  10729. {
  10730. $.ligerui.controls.Resizable.base.constructor.call(this, null, options);
  10731. };
  10732. $.ligerui.controls.Resizable.ligerExtend($.ligerui.core.UIComponent, {
  10733. __getType: function ()
  10734. {
  10735. return 'Resizable';
  10736. },
  10737. __idPrev: function ()
  10738. {
  10739. return 'Resizable';
  10740. },
  10741. _render: function ()
  10742. {
  10743. var g = this, p = this.options;
  10744. g.target = $(p.target);
  10745. g.set(p);
  10746. g.target.mousemove(function (e)
  10747. {
  10748. if (p.disabled) return;
  10749. g.dir = g._getDir(e);
  10750. if (g.dir)
  10751. g.target.css('cursor', g.dir + '-resize');
  10752. else if (g.target.css('cursor').indexOf('-resize') > 0)
  10753. g.target.css('cursor', 'default');
  10754. if (p.target.ligeruidragid)
  10755. {
  10756. var drag = $.ligerui.get(p.target.ligeruidragid);
  10757. if (drag && g.dir)
  10758. {
  10759. drag.set('disabled', true);
  10760. } else if (drag)
  10761. {
  10762. drag.set('disabled', false);
  10763. }
  10764. }
  10765. }).mousedown(function (e)
  10766. {
  10767. if (p.disabled) return;
  10768. if (g.dir)
  10769. {
  10770. g._start(e);
  10771. }
  10772. });
  10773. },
  10774. _rendered: function ()
  10775. {
  10776. this.options.target.ligeruiresizableid = this.id;
  10777. },
  10778. _getDir: function (e)
  10779. {
  10780. var g = this, p = this.options;
  10781. var dir = '';
  10782. var xy = g.target.offset();
  10783. var width = g.target.width();
  10784. var height = g.target.height();
  10785. var scope = p.scope;
  10786. var pageX = e.pageX || e.screenX;
  10787. var pageY = e.pageY || e.screenY;
  10788. if (pageY >= xy.top && pageY < xy.top + scope)
  10789. {
  10790. dir += 'n';
  10791. }
  10792. else if (pageY <= xy.top + height && pageY > xy.top + height - scope)
  10793. {
  10794. dir += 's';
  10795. }
  10796. if (pageX >= xy.left && pageX < xy.left + scope)
  10797. {
  10798. dir += 'w';
  10799. }
  10800. else if (pageX <= xy.left + width && pageX > xy.left + width - scope)
  10801. {
  10802. dir += 'e';
  10803. }
  10804. if (p.handles == "all" || dir == "") return dir;
  10805. if ($.inArray(dir, g.handles) != -1) return dir;
  10806. return '';
  10807. },
  10808. _setHandles: function (handles)
  10809. {
  10810. if (!handles) return;
  10811. this.handles = handles.replace(/(\s*)/g, '').split(',');
  10812. },
  10813. _createProxy: function ()
  10814. {
  10815. var g = this;
  10816. g.proxy = $('<div class="l-resizable"></div>');
  10817. g.proxy.width(g.target.width()).height(g.target.height())
  10818. g.proxy.attr("resizableid", g.id).appendTo('body');
  10819. },
  10820. _removeProxy: function ()
  10821. {
  10822. var g = this;
  10823. if (g.proxy)
  10824. {
  10825. g.proxy.remove();
  10826. g.proxy = null;
  10827. }
  10828. },
  10829. _start: function (e)
  10830. {
  10831. var g = this, p = this.options;
  10832. g._createProxy();
  10833. g.proxy.css({
  10834. left: g.target.offset().left,
  10835. top: g.target.offset().top,
  10836. position: 'absolute'
  10837. });
  10838. g.current = {
  10839. dir: g.dir,
  10840. left: g.target.offset().left,
  10841. top: g.target.offset().top,
  10842. startX: e.pageX || e.screenX,
  10843. startY: e.pageY || e.clientY,
  10844. width: g.target.width(),
  10845. height: g.target.height()
  10846. };
  10847. $(document).bind("selectstart.resizable", function () { return false; });
  10848. $(document).bind('mouseup.resizable', function ()
  10849. {
  10850. g._stop.apply(g, arguments);
  10851. });
  10852. $(document).bind('mousemove.resizable', function ()
  10853. {
  10854. g._drag.apply(g, arguments);
  10855. });
  10856. g.proxy.show();
  10857. g.trigger('startResize', [g.current, e]);
  10858. },
  10859. changeBy: {
  10860. t: ['n', 'ne', 'nw'],
  10861. l: ['w', 'sw', 'nw'],
  10862. w: ['w', 'sw', 'nw', 'e', 'ne', 'se'],
  10863. h: ['n', 'ne', 'nw', 's', 'se', 'sw']
  10864. },
  10865. _drag: function (e)
  10866. {
  10867. var g = this, p = this.options;
  10868. if (!g.current) return;
  10869. if (!g.proxy) return;
  10870. g.proxy.css('cursor', g.current.dir == '' ? 'default' : g.current.dir + '-resize');
  10871. var pageX = e.pageX || e.screenX;
  10872. var pageY = e.pageY || e.screenY;
  10873. g.current.diffX = pageX - g.current.startX;
  10874. g.current.diffY = pageY - g.current.startY;
  10875. g._applyResize(g.proxy);
  10876. g.trigger('resize', [g.current, e]);
  10877. },
  10878. _stop: function (e)
  10879. {
  10880. var g = this, p = this.options;
  10881. if (g.hasBind('stopResize'))
  10882. {
  10883. if (g.trigger('stopResize', [g.current, e]) != false)
  10884. g._applyResize();
  10885. }
  10886. else
  10887. {
  10888. g._applyResize();
  10889. }
  10890. g._removeProxy();
  10891. g.trigger('endResize', [g.current, e]);
  10892. $(document).unbind("selectstart.resizable");
  10893. $(document).unbind('mousemove.resizable');
  10894. $(document).unbind('mouseup.resizable');
  10895. },
  10896. _applyResize: function (applyResultBody)
  10897. {
  10898. var g = this, p = this.options;
  10899. var cur = {
  10900. left: g.current.left,
  10901. top: g.current.top,
  10902. width: g.current.width,
  10903. height: g.current.height
  10904. };
  10905. var applyToTarget = false;
  10906. if (!applyResultBody)
  10907. {
  10908. applyResultBody = g.target;
  10909. applyToTarget = true;
  10910. if (!isNaN(parseInt(g.target.css('top'))))
  10911. cur.top = parseInt(g.target.css('top'));
  10912. else
  10913. cur.top = 0;
  10914. if (!isNaN(parseInt(g.target.css('left'))))
  10915. cur.left = parseInt(g.target.css('left'));
  10916. else
  10917. cur.left = 0;
  10918. }
  10919. if ($.inArray(g.current.dir, g.changeBy.l) > -1)
  10920. {
  10921. cur.left += g.current.diffX;
  10922. g.current.diffLeft = g.current.diffX;
  10923. }
  10924. else if (applyToTarget)
  10925. {
  10926. delete cur.left;
  10927. }
  10928. if ($.inArray(g.current.dir, g.changeBy.t) > -1)
  10929. {
  10930. cur.top += g.current.diffY;
  10931. g.current.diffTop = g.current.diffY;
  10932. }
  10933. else if (applyToTarget)
  10934. {
  10935. delete cur.top;
  10936. }
  10937. if ($.inArray(g.current.dir, g.changeBy.w) > -1)
  10938. {
  10939. cur.width += (g.current.dir.indexOf('w') == -1 ? 1 : -1) * g.current.diffX;
  10940. g.current.newWidth = cur.width;
  10941. }
  10942. else if (applyToTarget)
  10943. {
  10944. delete cur.width;
  10945. }
  10946. if ($.inArray(g.current.dir, g.changeBy.h) > -1)
  10947. {
  10948. cur.height += (g.current.dir.indexOf('n') == -1 ? 1 : -1) * g.current.diffY;
  10949. g.current.newHeight = cur.height;
  10950. }
  10951. else if (applyToTarget)
  10952. {
  10953. delete cur.height;
  10954. }
  10955. if (applyToTarget && p.animate)
  10956. applyResultBody.animate(cur);
  10957. else
  10958. applyResultBody.css(cur);
  10959. }
  10960. });
  10961. })(jQuery);/**
  10962. * jQuery ligerUI 1.1.9
  10963. *
  10964. * http://ligerui.com
  10965. *
  10966. * Author daomi 2012 [ gd_star@163.com ]
  10967. *
  10968. */
  10969. (function ($)
  10970. {
  10971. $.fn.ligerSpinner = function ()
  10972. {
  10973. return $.ligerui.run.call(this, "ligerSpinner", arguments);
  10974. };
  10975. $.fn.ligerGetSpinnerManager = function ()
  10976. {
  10977. return $.ligerui.run.call(this, "ligerGetSpinnerManager", arguments);
  10978. };
  10979. $.ligerDefaults.Spinner = {
  10980. type: 'float', //类型 float:浮点数 int:整数 time:时间
  10981. isNegative: true, //是否负数
  10982. decimalplace: 2, //小数位 type=float时起作用
  10983. step: 0.1, //每次增加的值
  10984. interval: 50, //间隔,毫秒
  10985. onChangeValue: false, //改变值事件
  10986. minValue: null, //最小值
  10987. maxValue: null, //最大值
  10988. disabled: false
  10989. };
  10990. $.ligerMethos.Spinner = {};
  10991. $.ligerui.controls.Spinner = function (element, options)
  10992. {
  10993. $.ligerui.controls.Spinner.base.constructor.call(this, element, options);
  10994. };
  10995. $.ligerui.controls.Spinner.ligerExtend($.ligerui.controls.Input, {
  10996. __getType: function ()
  10997. {
  10998. return 'Spinner';
  10999. },
  11000. __idPrev: function ()
  11001. {
  11002. return 'Spinner';
  11003. },
  11004. _extendMethods: function ()
  11005. {
  11006. return $.ligerMethos.Spinner;
  11007. },
  11008. _init: function ()
  11009. {
  11010. $.ligerui.controls.Spinner.base._init.call(this);
  11011. var p = this.options;
  11012. if (p.type == 'float')
  11013. {
  11014. p.step = 0.1;
  11015. p.interval = 50;
  11016. } else if (p.type == 'int')
  11017. {
  11018. p.step = 1;
  11019. p.interval = 100;
  11020. } else if (p.type == 'time')
  11021. {
  11022. p.step = 1;
  11023. p.interval = 100;
  11024. }
  11025. },
  11026. _render: function ()
  11027. {
  11028. var g = this, p = this.options;
  11029. g.interval = null;
  11030. g.inputText = null;
  11031. g.value = null;
  11032. g.textFieldID = "";
  11033. if (this.element.tagName.toLowerCase() == "input" && this.element.type && this.element.type == "text")
  11034. {
  11035. g.inputText = $(this.element);
  11036. if (this.element.id)
  11037. g.textFieldID = this.element.id;
  11038. }
  11039. else
  11040. {
  11041. g.inputText = $('<input type="text"/>');
  11042. g.inputText.appendTo($(this.element));
  11043. }
  11044. if (g.textFieldID == "" && p.textFieldID)
  11045. g.textFieldID = p.textFieldID;
  11046. g.link = $('<div class="l-trigger"><div class="l-spinner-up"><div class="l-spinner-icon"></div></div><div class="l-spinner-split"></div><div class="l-spinner-down"><div class="l-spinner-icon"></div></div></div>');
  11047. g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
  11048. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  11049. g.wrapper.append(g.link).after(g.selectBox).after(g.valueField);
  11050. g.link.up = $(".l-spinner-up", g.link);
  11051. g.link.down = $(".l-spinner-down", g.link);
  11052. g.inputText.addClass("l-text-field");
  11053. if (p.disabled)
  11054. {
  11055. g.wrapper.addClass("l-text-disabled");
  11056. }
  11057. //初始化
  11058. if (!g._isVerify(g.inputText.val()))
  11059. {
  11060. g.value = g._getDefaultValue();
  11061. g.inputText.val(g.value);
  11062. }
  11063. //事件
  11064. g.link.up.hover(function ()
  11065. {
  11066. if (!p.disabled)
  11067. $(this).addClass("l-spinner-up-over");
  11068. }, function ()
  11069. {
  11070. clearInterval(g.interval);
  11071. $(document).unbind("selectstart.spinner");
  11072. $(this).removeClass("l-spinner-up-over");
  11073. }).mousedown(function ()
  11074. {
  11075. if (!p.disabled)
  11076. {
  11077. g._uping.call(g);
  11078. g.interval = setInterval(function ()
  11079. {
  11080. g._uping.call(g);
  11081. }, p.interval);
  11082. $(document).bind("selectstart.spinner", function () { return false; });
  11083. }
  11084. }).mouseup(function ()
  11085. {
  11086. clearInterval(g.interval);
  11087. g.inputText.trigger("change").focus();
  11088. $(document).unbind("selectstart.spinner");
  11089. });
  11090. g.link.down.hover(function ()
  11091. {
  11092. if (!p.disabled)
  11093. $(this).addClass("l-spinner-down-over");
  11094. }, function ()
  11095. {
  11096. clearInterval(g.interval);
  11097. $(document).unbind("selectstart.spinner");
  11098. $(this).removeClass("l-spinner-down-over");
  11099. }).mousedown(function ()
  11100. {
  11101. if (!p.disabled)
  11102. {
  11103. g.interval = setInterval(function ()
  11104. {
  11105. g._downing.call(g);
  11106. }, p.interval);
  11107. $(document).bind("selectstart.spinner", function () { return false; });
  11108. }
  11109. }).mouseup(function ()
  11110. {
  11111. clearInterval(g.interval);
  11112. g.inputText.trigger("change").focus();
  11113. $(document).unbind("selectstart.spinner");
  11114. });
  11115. g.inputText.change(function ()
  11116. {
  11117. var value = g.inputText.val();
  11118. g.value = g._getVerifyValue(value);
  11119. g.trigger('changeValue', [g.value]);
  11120. g.inputText.val(g.value);
  11121. }).blur(function ()
  11122. {
  11123. g.wrapper.removeClass("l-text-focus");
  11124. }).focus(function ()
  11125. {
  11126. g.wrapper.addClass("l-text-focus");
  11127. });
  11128. g.wrapper.hover(function ()
  11129. {
  11130. if (!p.disabled)
  11131. g.wrapper.addClass("l-text-over");
  11132. }, function ()
  11133. {
  11134. g.wrapper.removeClass("l-text-over");
  11135. });
  11136. g.set(p);
  11137. },
  11138. _setWidth: function (value)
  11139. {
  11140. var g = this;
  11141. if (value > 20)
  11142. {
  11143. g.wrapper.css({ width: value });
  11144. g.inputText.css({ width: value - 20 });
  11145. g.inputText.css({ width: value });
  11146. }
  11147. },
  11148. _setHeight: function (value)
  11149. {
  11150. var g = this;
  11151. if (value > 10)
  11152. {
  11153. g.wrapper.height(value);
  11154. g.inputText.height(value - 2);
  11155. g.link.height(value - 4);
  11156. }
  11157. },
  11158. _setDisabled: function (value)
  11159. {
  11160. if (value)
  11161. {
  11162. this.wrapper.addClass("l-text-disabled");
  11163. }
  11164. else
  11165. {
  11166. this.wrapper.removeClass("l-text-disabled");
  11167. }
  11168. },
  11169. setValue: function (value)
  11170. {
  11171. this.inputText.val(value);
  11172. },
  11173. getValue: function ()
  11174. {
  11175. return this.inputText.val();
  11176. },
  11177. _round: function (v, e)
  11178. {
  11179. var g = this, p = this.options;
  11180. var t = 1;
  11181. for (; e > 0; t *= 10, e--);
  11182. for (; e < 0; t /= 10, e++);
  11183. return Math.round(v * t) / t;
  11184. },
  11185. _isInt: function (str)
  11186. {
  11187. var g = this, p = this.options;
  11188. var strP = p.isNegative ? /^-?\d+$/ : /^\d+$/;
  11189. if (!strP.test(str)) return false;
  11190. if (parseFloat(str) != str) return false;
  11191. return true;
  11192. },
  11193. _isFloat: function (str)
  11194. {
  11195. var g = this, p = this.options;
  11196. var strP = p.isNegative ? /^-?\d+(\.\d+)?$/ : /^\d+(\.\d+)?$/;
  11197. if (!strP.test(str)) return false;
  11198. if (parseFloat(str) != str) return false;
  11199. return true;
  11200. },
  11201. _isTime: function (str)
  11202. {
  11203. var g = this, p = this.options;
  11204. var a = str.match(/^(\d{1,2}):(\d{1,2})$/);
  11205. if (a == null) return false;
  11206. if (a[1] > 24 || a[2] > 60) return false;
  11207. return true;
  11208. },
  11209. _isVerify: function (str)
  11210. {
  11211. var g = this, p = this.options;
  11212. if (p.type == 'float')
  11213. {
  11214. if (!g._isFloat(str)) return false;
  11215. var value = parseFloat(str);
  11216. if (p.minValue != undefined && p.minValue > value) return false;
  11217. if (p.maxValue != undefined && p.maxValue < value) return false;
  11218. return true;
  11219. } else if (p.type == 'int')
  11220. {
  11221. if (!g._isInt(str)) return false;
  11222. var value = parseInt(str);
  11223. if (p.minValue != undefined && p.minValue > value) return false;
  11224. if (p.maxValue != undefined && p.maxValue < value) return false;
  11225. return true;
  11226. } else if (p.type == 'time')
  11227. {
  11228. return g._isTime(str);
  11229. }
  11230. return false;
  11231. },
  11232. _getVerifyValue: function (value)
  11233. {
  11234. var g = this, p = this.options;
  11235. var newvalue = null;
  11236. if (p.type == 'float')
  11237. {
  11238. newvalue = g._round(value, p.decimalplace);
  11239. } else if (p.type == 'int')
  11240. {
  11241. newvalue = parseInt(value);
  11242. } else if (p.type == 'time')
  11243. {
  11244. newvalue = value;
  11245. }
  11246. if (!g._isVerify(newvalue))
  11247. {
  11248. return g.value;
  11249. } else
  11250. {
  11251. return newvalue;
  11252. }
  11253. },
  11254. _isOverValue: function (value)
  11255. {
  11256. var g = this, p = this.options;
  11257. if (p.minValue != null && p.minValue > value) return true;
  11258. if (p.maxValue != null && p.maxValue < value) return true;
  11259. return false;
  11260. },
  11261. _getDefaultValue: function ()
  11262. {
  11263. var g = this, p = this.options;
  11264. if (p.type == 'float' || p.type == 'int') { return 0; }
  11265. else if (p.type == 'time') { return "00:00"; }
  11266. },
  11267. _addValue: function (num)
  11268. {
  11269. var g = this, p = this.options;
  11270. var value = g.inputText.val();
  11271. value = parseFloat(value) + num;
  11272. if (g._isOverValue(value)) return;
  11273. g.inputText.val(value);
  11274. g.inputText.trigger("change");
  11275. },
  11276. _addTime: function (minute)
  11277. {
  11278. var g = this, p = this.options;
  11279. var value = g.inputText.val();
  11280. var a = value.match(/^(\d{1,2}):(\d{1,2})$/);
  11281. newminute = parseInt(a[2]) + minute;
  11282. if (newminute < 10) newminute = "0" + newminute;
  11283. value = a[1] + ":" + newminute;
  11284. if (g._isOverValue(value)) return;
  11285. g.inputText.val(value);
  11286. g.inputText.trigger("change");
  11287. },
  11288. _uping: function ()
  11289. {
  11290. var g = this, p = this.options;
  11291. if (p.type == 'float' || p.type == 'int')
  11292. {
  11293. g._addValue(p.step);
  11294. } else if (p.type == 'time')
  11295. {
  11296. g._addTime(p.step);
  11297. }
  11298. },
  11299. _downing: function ()
  11300. {
  11301. var g = this, p = this.options;
  11302. if (p.type == 'float' || p.type == 'int')
  11303. {
  11304. g._addValue(-1 * p.step);
  11305. } else if (p.type == 'time')
  11306. {
  11307. g._addTime(-1 * p.step);
  11308. }
  11309. },
  11310. _isDateTime: function (dateStr)
  11311. {
  11312. var g = this, p = this.options;
  11313. var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  11314. if (r == null) return false;
  11315. var d = new Date(r[1], r[3] - 1, r[4]);
  11316. if (d == "NaN") return false;
  11317. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
  11318. },
  11319. _isLongDateTime: function (dateStr)
  11320. {
  11321. var g = this, p = this.options;
  11322. var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
  11323. var r = dateStr.match(reg);
  11324. if (r == null) return false;
  11325. var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
  11326. if (d == "NaN") return false;
  11327. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
  11328. }
  11329. });
  11330. })(jQuery);/**
  11331. * jQuery ligerUI 1.1.9
  11332. *
  11333. * http://ligerui.com
  11334. *
  11335. * Author daomi 2012 [ gd_star@163.com ]
  11336. *
  11337. */
  11338. (function ($)
  11339. {
  11340. $.fn.ligerTab = function (options)
  11341. {
  11342. return $.ligerui.run.call(this, "ligerTab", arguments);
  11343. };
  11344. $.fn.ligerGetTabManager = function ()
  11345. {
  11346. return $.ligerui.run.call(this, "ligerGetTabManager", arguments);
  11347. };
  11348. $.ligerDefaults.Tab = {
  11349. height: null,
  11350. heightDiff: 0, // 高度补差
  11351. changeHeightOnResize: false,
  11352. contextmenu: true,
  11353. dblClickToClose: false, //是否双击时关闭
  11354. dragToMove: false, //是否允许拖动时改变tab项的位置
  11355. onBeforeOverrideTabItem: null,
  11356. onAfterOverrideTabItem: null,
  11357. onBeforeRemoveTabItem: null,
  11358. onAfterRemoveTabItem: null,
  11359. onBeforeAddTabItem: null,
  11360. onAfterAddTabItem: null,
  11361. onBeforeSelectTabItem: null,
  11362. onAfterSelectTabItem: null
  11363. };
  11364. $.ligerDefaults.TabString = {
  11365. closeMessage: "关闭当前页",
  11366. closeOtherMessage: "关闭其他",
  11367. closeAllMessage: "关闭所有",
  11368. reloadMessage: "刷新"
  11369. };
  11370. $.ligerMethos.Tab = {};
  11371. $.ligerui.controls.Tab = function (element, options)
  11372. {
  11373. $.ligerui.controls.Tab.base.constructor.call(this, element, options);
  11374. };
  11375. $.ligerui.controls.Tab.ligerExtend($.ligerui.core.UIComponent, {
  11376. __getType: function ()
  11377. {
  11378. return 'Tab';
  11379. },
  11380. __idPrev: function ()
  11381. {
  11382. return 'Tab';
  11383. },
  11384. _extendMethods: function ()
  11385. {
  11386. return $.ligerMethos.Tab;
  11387. },
  11388. _render: function ()
  11389. {
  11390. var g = this, p = this.options;
  11391. if (p.height) g.makeFullHeight = true;
  11392. g.tab = $(this.element);
  11393. g.tab.addClass("l-tab");
  11394. if (p.contextmenu && $.ligerMenu)
  11395. {
  11396. g.tab.menu = $.ligerMenu({ width: 100, items: [
  11397. { text: p.closeMessage, id: 'close', click: function ()
  11398. {
  11399. g._menuItemClick.apply(g, arguments);
  11400. }
  11401. },
  11402. { text: p.closeOtherMessage, id: 'closeother', click: function ()
  11403. {
  11404. g._menuItemClick.apply(g, arguments);
  11405. }
  11406. },
  11407. { text: p.closeAllMessage, id: 'closeall', click: function ()
  11408. {
  11409. g._menuItemClick.apply(g, arguments);
  11410. }
  11411. },
  11412. { text: p.reloadMessage, id: 'reload', click: function ()
  11413. {
  11414. g._menuItemClick.apply(g, arguments);
  11415. }
  11416. }
  11417. ]
  11418. });
  11419. }
  11420. g.tab.content = $('<div class="l-tab-content"></div>');
  11421. $("> div", g.tab).appendTo(g.tab.content);
  11422. g.tab.content.appendTo(g.tab);
  11423. g.tab.links = $('<div class="l-tab-links"><ul style="left: 0px; "></ul></div>');
  11424. g.tab.links.prependTo(g.tab);
  11425. g.tab.links.ul = $("ul", g.tab.links);
  11426. var lselecteds = $("> div[lselected=true]", g.tab.content);
  11427. var haslselected = lselecteds.length > 0;
  11428. g.selectedTabId = lselecteds.attr("tabid");
  11429. $("> div", g.tab.content).each(function (i, box)
  11430. {
  11431. var li = $('<li class=""><a></a><div class="l-tab-links-item-left"></div><div class="l-tab-links-item-right"></div></li>');
  11432. var contentitem = $(this);
  11433. if (contentitem.attr("title"))
  11434. {
  11435. $("> a", li).html(contentitem.attr("title"));
  11436. contentitem.attr("title", "");
  11437. }
  11438. var tabid = contentitem.attr("tabid");
  11439. if (tabid == undefined)
  11440. {
  11441. tabid = g.getNewTabid();
  11442. contentitem.attr("tabid", tabid);
  11443. if (contentitem.attr("lselected"))
  11444. {
  11445. g.selectedTabId = tabid;
  11446. }
  11447. }
  11448. li.attr("tabid", tabid);
  11449. if (!haslselected && i == 0) g.selectedTabId = tabid;
  11450. var showClose = contentitem.attr("showClose");
  11451. if (showClose)
  11452. {
  11453. li.append("<div class='l-tab-links-item-close'></div>");
  11454. }
  11455. $("> ul", g.tab.links).append(li);
  11456. if (!contentitem.hasClass("l-tab-content-item")) contentitem.addClass("l-tab-content-item");
  11457. if (contentitem.find("iframe").length > 0)
  11458. {
  11459. var iframe = $("iframe:first", contentitem);
  11460. if (iframe[0].readyState != "complete")
  11461. {
  11462. if (contentitem.find(".l-tab-loading:first").length == 0)
  11463. contentitem.prepend("<div class='l-tab-loading' style='display:block;'></div>");
  11464. var iframeloading = $(".l-tab-loading:first", contentitem);
  11465. iframe.bind('load.tab', function ()
  11466. {
  11467. iframeloading.hide();
  11468. });
  11469. }
  11470. }
  11471. });
  11472. //init
  11473. g.selectTabItem(g.selectedTabId);
  11474. //set content height
  11475. if (p.height)
  11476. {
  11477. if (typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  11478. {
  11479. g.onResize();
  11480. if (p.changeHeightOnResize)
  11481. {
  11482. $(window).resize(function ()
  11483. {
  11484. g.onResize.call(g);
  11485. });
  11486. }
  11487. } else
  11488. {
  11489. g.setHeight(p.height);
  11490. }
  11491. }
  11492. if (g.makeFullHeight)
  11493. g.setContentHeight();
  11494. //add even
  11495. $("li", g.tab.links).each(function ()
  11496. {
  11497. g._addTabItemEvent($(this));
  11498. });
  11499. g.tab.bind('dblclick.tab', function (e)
  11500. {
  11501. if (!p.dblClickToClose) return;
  11502. g.dblclicking = true;
  11503. var obj = (e.target || e.srcElement);
  11504. var tagName = obj.tagName.toLowerCase();
  11505. if (tagName == "a")
  11506. {
  11507. var tabid = $(obj).parent().attr("tabid");
  11508. var allowClose = $(obj).parent().find("div.l-tab-links-item-close").length ? true : false;
  11509. if (allowClose)
  11510. {
  11511. g.removeTabItem(tabid);
  11512. }
  11513. }
  11514. g.dblclicking = false;
  11515. });
  11516. g.set(p);
  11517. },
  11518. _applyDrag: function (tabItemDom)
  11519. {
  11520. var g = this, p = this.options;
  11521. g.droptip = g.droptip || $("<div class='l-tab-drag-droptip' style='display:none'><div class='l-drop-move-up'></div><div class='l-drop-move-down'></div></div>").appendTo('body');
  11522. var drag = $(tabItemDom).ligerDrag(
  11523. {
  11524. revert: true, animate: false,
  11525. proxy: function ()
  11526. {
  11527. var name = $(this).find("a").html();
  11528. g.dragproxy = $("<div class='l-tab-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
  11529. g.dragproxy.append(name);
  11530. return g.dragproxy;
  11531. },
  11532. onRendered: function ()
  11533. {
  11534. this.set('cursor', 'pointer');
  11535. },
  11536. onStartDrag: function (current, e)
  11537. {
  11538. if (!$(tabItemDom).hasClass("l-selected")) return false;
  11539. if (e.button == 2) return false;
  11540. var obj = e.srcElement || e.target;
  11541. if ($(obj).hasClass("l-tab-links-item-close")) return false;
  11542. },
  11543. onDrag: function (current, e)
  11544. {
  11545. if (g.dropIn == null)
  11546. g.dropIn = -1;
  11547. var tabItems = g.tab.links.ul.find('>li');
  11548. var targetIndex = tabItems.index(current.target);
  11549. tabItems.each(function (i, item)
  11550. {
  11551. if (targetIndex == i)
  11552. {
  11553. return;
  11554. }
  11555. var isAfter = i > targetIndex;
  11556. if (g.dropIn != -1 && g.dropIn != i) return;
  11557. var offset = $(this).offset();
  11558. var range = {
  11559. top: offset.top,
  11560. bottom: offset.top + $(this).height(),
  11561. left: offset.left - 10,
  11562. right: offset.left + 10
  11563. };
  11564. if (isAfter)
  11565. {
  11566. range.left += $(this).width();
  11567. range.right += $(this).width();
  11568. }
  11569. var pageX = e.pageX || e.screenX;
  11570. var pageY = e.pageY || e.screenY;
  11571. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  11572. {
  11573. g.droptip.css({
  11574. left: range.left + 5,
  11575. top: range.top - 9
  11576. }).show();
  11577. g.dropIn = i;
  11578. g.dragproxy.find(".l-drop-icon").removeClass("l-drop-no").addClass("l-drop-yes");
  11579. }
  11580. else
  11581. {
  11582. g.dropIn = -1;
  11583. g.droptip.hide();
  11584. g.dragproxy.find(".l-drop-icon").removeClass("l-drop-yes").addClass("l-drop-no");
  11585. }
  11586. });
  11587. },
  11588. onStopDrag: function (current, e)
  11589. {
  11590. if (g.dropIn > -1)
  11591. {
  11592. var to = g.tab.links.ul.find('>li:eq(' + g.dropIn + ')').attr("tabid");
  11593. var from = $(current.target).attr("tabid");
  11594. setTimeout(function ()
  11595. {
  11596. g.moveTabItem(from, to);
  11597. }, 0);
  11598. g.dropIn = -1;
  11599. g.dragproxy.remove();
  11600. }
  11601. g.droptip.hide();
  11602. this.set('cursor', 'default');
  11603. }
  11604. });
  11605. return drag;
  11606. },
  11607. _setDragToMove: function (value)
  11608. {
  11609. if (!$.fn.ligerDrag) return; //需要ligerDrag的支持
  11610. var g = this, p = this.options;
  11611. if (value)
  11612. {
  11613. if (g.drags) return;
  11614. g.drags = g.drags || [];
  11615. g.tab.links.ul.find('>li').each(function ()
  11616. {
  11617. g.drags.push(g._applyDrag(this));
  11618. });
  11619. }
  11620. },
  11621. moveTabItem: function (fromTabItemID, toTabItemID)
  11622. {
  11623. var g = this;
  11624. var from = g.tab.links.ul.find(">li[tabid=" + fromTabItemID + "]");
  11625. var to = g.tab.links.ul.find(">li[tabid=" + toTabItemID + "]");
  11626. var index1 = g.tab.links.ul.find(">li").index(from);
  11627. var index2 = g.tab.links.ul.find(">li").index(to);
  11628. if (index1 < index2)
  11629. {
  11630. to.after(from);
  11631. }
  11632. else
  11633. {
  11634. to.before(from);
  11635. }
  11636. },
  11637. //设置tab按钮(左和右),显示返回true,隐藏返回false
  11638. setTabButton: function ()
  11639. {
  11640. var g = this, p = this.options;
  11641. var sumwidth = 0;
  11642. $("li", g.tab.links.ul).each(function ()
  11643. {
  11644. sumwidth += $(this).width() + 2;
  11645. });
  11646. var mainwidth = g.tab.width();
  11647. if (sumwidth > mainwidth)
  11648. {
  11649. g.tab.links.append('<div class="l-tab-links-left"></div><div class="l-tab-links-right"></div>');
  11650. g.setTabButtonEven();
  11651. return true;
  11652. } else
  11653. {
  11654. g.tab.links.ul.animate({ left: 0 });
  11655. $(".l-tab-links-left,.l-tab-links-right", g.tab.links).remove();
  11656. return false;
  11657. }
  11658. },
  11659. //设置左右按钮的事件 标签超出最大宽度时,可左右拖动
  11660. setTabButtonEven: function ()
  11661. {
  11662. var g = this, p = this.options;
  11663. $(".l-tab-links-left", g.tab.links).hover(function ()
  11664. {
  11665. $(this).addClass("l-tab-links-left-over");
  11666. }, function ()
  11667. {
  11668. $(this).removeClass("l-tab-links-left-over");
  11669. }).click(function ()
  11670. {
  11671. g.moveToPrevTabItem();
  11672. });
  11673. $(".l-tab-links-right", g.tab.links).hover(function ()
  11674. {
  11675. $(this).addClass("l-tab-links-right-over");
  11676. }, function ()
  11677. {
  11678. $(this).removeClass("l-tab-links-right-over");
  11679. }).click(function ()
  11680. {
  11681. g.moveToNextTabItem();
  11682. });
  11683. },
  11684. //切换到上一个tab
  11685. moveToPrevTabItem: function ()
  11686. {
  11687. var g = this, p = this.options;
  11688. var btnWitdth = $(".l-tab-links-left", g.tab.links).width();
  11689. var leftList = new Array(); //记录每个tab的left,由左到右
  11690. $("li", g.tab.links).each(function (i, item)
  11691. {
  11692. var currentItemLeft = -1 * btnWitdth;
  11693. if (i > 0)
  11694. {
  11695. currentItemLeft = parseInt(leftList[i - 1]) + $(this).prev().width() + 2;
  11696. }
  11697. leftList.push(currentItemLeft);
  11698. });
  11699. var currentLeft = -1 * parseInt(g.tab.links.ul.css("left"));
  11700. for (var i = 0; i < leftList.length - 1; i++)
  11701. {
  11702. if (leftList[i] < currentLeft && leftList[i + 1] >= currentLeft)
  11703. {
  11704. g.tab.links.ul.animate({ left: -1 * parseInt(leftList[i]) });
  11705. return;
  11706. }
  11707. }
  11708. },
  11709. //切换到下一个tab
  11710. moveToNextTabItem: function ()
  11711. {
  11712. var g = this, p = this.options;
  11713. var btnWitdth = $(".l-tab-links-right", g.tab).width();
  11714. var sumwidth = 0;
  11715. var tabItems = $("li", g.tab.links.ul);
  11716. tabItems.each(function ()
  11717. {
  11718. sumwidth += $(this).width() + 2;
  11719. });
  11720. var mainwidth = g.tab.width();
  11721. var leftList = new Array(); //记录每个tab的left,由右到左
  11722. for (var i = tabItems.length - 1; i >= 0; i--)
  11723. {
  11724. var currentItemLeft = sumwidth - mainwidth + btnWitdth + 2;
  11725. if (i != tabItems.length - 1)
  11726. {
  11727. currentItemLeft = parseInt(leftList[tabItems.length - 2 - i]) - $(tabItems[i + 1]).width() - 2;
  11728. }
  11729. leftList.push(currentItemLeft);
  11730. }
  11731. var currentLeft = -1 * parseInt(g.tab.links.ul.css("left"));
  11732. for (var j = 1; j < leftList.length; j++)
  11733. {
  11734. if (leftList[j] <= currentLeft && leftList[j - 1] > currentLeft)
  11735. {
  11736. g.tab.links.ul.animate({ left: -1 * parseInt(leftList[j - 1]) });
  11737. return;
  11738. }
  11739. }
  11740. },
  11741. getTabItemCount: function ()
  11742. {
  11743. var g = this, p = this.options;
  11744. return $("li", g.tab.links.ul).length;
  11745. },
  11746. getSelectedTabItemID: function ()
  11747. {
  11748. var g = this, p = this.options;
  11749. return $("li.l-selected", g.tab.links.ul).attr("tabid");
  11750. },
  11751. removeSelectedTabItem: function ()
  11752. {
  11753. var g = this, p = this.options;
  11754. g.removeTabItem(g.getSelectedTabItemID());
  11755. },
  11756. //覆盖选择的tabitem
  11757. overrideSelectedTabItem: function (options)
  11758. {
  11759. var g = this, p = this.options;
  11760. g.overrideTabItem(g.getSelectedTabItemID(), options);
  11761. },
  11762. //覆盖
  11763. overrideTabItem: function (targettabid, options)
  11764. {
  11765. var g = this, p = this.options;
  11766. if (g.trigger('beforeOverrideTabItem', [targettabid]) == false)
  11767. return false;
  11768. var tabid = options.tabid;
  11769. if (tabid == undefined) tabid = g.getNewTabid();
  11770. var url = options.url;
  11771. var content = options.content;
  11772. var target = options.target;
  11773. var text = options.text;
  11774. var showClose = options.showClose;
  11775. var height = options.height;
  11776. //如果已经存在
  11777. if (g.isTabItemExist(tabid))
  11778. {
  11779. return;
  11780. }
  11781. var tabitem = $("li[tabid=" + targettabid + "]", g.tab.links.ul);
  11782. var contentitem = $(".l-tab-content-item[tabid=" + targettabid + "]", g.tab.content);
  11783. if (!tabitem || !contentitem) return;
  11784. tabitem.attr("tabid", tabid);
  11785. contentitem.attr("tabid", tabid);
  11786. if ($("iframe", contentitem).length == 0 && url)
  11787. {
  11788. contentitem.html("<iframe frameborder='0'></iframe>");
  11789. }
  11790. else if (content)
  11791. {
  11792. contentitem.html(content);
  11793. }
  11794. $("iframe", contentitem).attr("name", tabid);
  11795. if (showClose == undefined) showClose = true;
  11796. if (showClose == false) $(".l-tab-links-item-close", tabitem).remove();
  11797. else
  11798. {
  11799. if ($(".l-tab-links-item-close", tabitem).length == 0)
  11800. tabitem.append("<div class='l-tab-links-item-close'></div>");
  11801. }
  11802. if (text == undefined) text = tabid;
  11803. if (height) contentitem.height(height);
  11804. $("a", tabitem).text(text);
  11805. $("iframe", contentitem).attr("src", url);
  11806. g.trigger('afterOverrideTabItem', [targettabid]);
  11807. },
  11808. //选中tab项
  11809. selectTabItem: function (tabid)
  11810. {
  11811. var g = this, p = this.options;
  11812. if (g.trigger('beforeSelectTabItem', [tabid]) == false)
  11813. return false;
  11814. g.selectedTabId = tabid;
  11815. $("> .l-tab-content-item[tabid=" + tabid + "]", g.tab.content).show().siblings().hide();
  11816. $("li[tabid=" + tabid + "]", g.tab.links.ul).addClass("l-selected").siblings().removeClass("l-selected");
  11817. g.trigger('afterSelectTabItem', [tabid]);
  11818. },
  11819. //移动到最后一个tab
  11820. moveToLastTabItem: function ()
  11821. {
  11822. var g = this, p = this.options;
  11823. var sumwidth = 0;
  11824. $("li", g.tab.links.ul).each(function ()
  11825. {
  11826. sumwidth += $(this).width() + 2;
  11827. });
  11828. var mainwidth = g.tab.width();
  11829. if (sumwidth > mainwidth)
  11830. {
  11831. var btnWitdth = $(".l-tab-links-right", g.tab.links).width();
  11832. g.tab.links.ul.animate({ left: -1 * (sumwidth - mainwidth + btnWitdth + 2) });
  11833. }
  11834. },
  11835. //判断tab是否存在
  11836. isTabItemExist: function (tabid)
  11837. {
  11838. var g = this, p = this.options;
  11839. return $("li[tabid=" + tabid + "]", g.tab.links.ul).length > 0;
  11840. },
  11841. //增加一个tab
  11842. addTabItem: function (options)
  11843. {
  11844. var g = this, p = this.options;
  11845. if (g.trigger('beforeAddTabItem', [tabid]) == false)
  11846. return false;
  11847. var tabid = options.tabid;
  11848. if (tabid == undefined) tabid = g.getNewTabid();
  11849. var url = options.url;
  11850. var content = options.content;
  11851. var text = options.text;
  11852. var showClose = options.showClose;
  11853. var height = options.height;
  11854. //如果已经存在
  11855. if (g.isTabItemExist(tabid))
  11856. {
  11857. g.selectTabItem(tabid);
  11858. return;
  11859. }
  11860. var tabitem = $("<li><a></a><div class='l-tab-links-item-left'></div><div class='l-tab-links-item-right'></div><div class='l-tab-links-item-close'></div></li>");
  11861. var contentitem = $("<div class='l-tab-content-item'><div class='l-tab-loading' style='display:block;'></div><iframe frameborder='0'></iframe></div>");
  11862. var iframeloading = $("div:first", contentitem);
  11863. var iframe = $("iframe:first", contentitem);
  11864. if (g.makeFullHeight)
  11865. {
  11866. var newheight = g.tab.height() - g.tab.links.height();
  11867. contentitem.height(newheight);
  11868. }
  11869. tabitem.attr("tabid", tabid);
  11870. contentitem.attr("tabid", tabid);
  11871. if (url)
  11872. {
  11873. iframe.attr("name", tabid)
  11874. .attr("id", tabid)
  11875. .attr("src", url)
  11876. .bind('load.tab', function ()
  11877. {
  11878. iframeloading.hide();
  11879. if (options.callback)
  11880. options.callback();
  11881. });
  11882. }
  11883. else
  11884. {
  11885. iframe.remove();
  11886. iframeloading.remove();
  11887. }
  11888. if (content)
  11889. {
  11890. contentitem.html(content);
  11891. }
  11892. else if (options.target)
  11893. {
  11894. contentitem.append(options.target);
  11895. }
  11896. if (showClose == undefined) showClose = true;
  11897. if (showClose == false) $(".l-tab-links-item-close", tabitem).remove();
  11898. if (text == undefined) text = tabid;
  11899. if (height) contentitem.height(height);
  11900. $("a", tabitem).text(text);
  11901. g.tab.links.ul.append(tabitem);
  11902. g.tab.content.append(contentitem);
  11903. g.selectTabItem(tabid);
  11904. if (g.setTabButton())
  11905. {
  11906. g.moveToLastTabItem();
  11907. }
  11908. //增加事件
  11909. g._addTabItemEvent(tabitem);
  11910. if (p.dragToMove && $.fn.ligerDrag)
  11911. {
  11912. g.drags = g.drags || [];
  11913. tabitem.each(function ()
  11914. {
  11915. g.drags.push(g._applyDrag(this));
  11916. });
  11917. }
  11918. g.trigger('afterAddTabItem', [tabid]);
  11919. },
  11920. _addTabItemEvent: function (tabitem)
  11921. {
  11922. var g = this, p = this.options;
  11923. tabitem.click(function ()
  11924. {
  11925. var tabid = $(this).attr("tabid");
  11926. g.selectTabItem(tabid);
  11927. });
  11928. //右键事件支持
  11929. g.tab.menu && g._addTabItemContextMenuEven(tabitem);
  11930. $(".l-tab-links-item-close", tabitem).hover(function ()
  11931. {
  11932. $(this).addClass("l-tab-links-item-close-over");
  11933. }, function ()
  11934. {
  11935. $(this).removeClass("l-tab-links-item-close-over");
  11936. }).click(function ()
  11937. {
  11938. var tabid = $(this).parent().attr("tabid");
  11939. g.removeTabItem(tabid);
  11940. });
  11941. },
  11942. //移除tab项
  11943. removeTabItem: function (tabid)
  11944. {
  11945. var g = this, p = this.options;
  11946. if (g.trigger('beforeRemoveTabItem', [tabid]) == false)
  11947. return false;
  11948. var currentIsSelected = $("li[tabid=" + tabid + "]", g.tab.links.ul).hasClass("l-selected");
  11949. if (currentIsSelected)
  11950. {
  11951. $(".l-tab-content-item[tabid=" + tabid + "]", g.tab.content).prev().show();
  11952. $("li[tabid=" + tabid + "]", g.tab.links.ul).prev().addClass("l-selected").siblings().removeClass("l-selected");
  11953. }
  11954. $(".l-tab-content-item[tabid=" + tabid + "]", g.tab.content).remove();
  11955. $("li[tabid=" + tabid + "]", g.tab.links.ul).remove();
  11956. g.setTabButton();
  11957. g.trigger('afterRemoveTabItem', [tabid]);
  11958. },
  11959. addHeight: function (heightDiff)
  11960. {
  11961. var g = this, p = this.options;
  11962. var newHeight = g.tab.height() + heightDiff;
  11963. g.setHeight(newHeight);
  11964. },
  11965. setHeight: function (height)
  11966. {
  11967. var g = this, p = this.options;
  11968. g.tab.height(height);
  11969. g.setContentHeight();
  11970. },
  11971. setContentHeight: function ()
  11972. {
  11973. var g = this, p = this.options;
  11974. var newheight = g.tab.height() - g.tab.links.height();
  11975. g.tab.content.height(newheight);
  11976. $("> .l-tab-content-item", g.tab.content).height(newheight);
  11977. },
  11978. getNewTabid: function ()
  11979. {
  11980. var g = this, p = this.options;
  11981. g.getnewidcount = g.getnewidcount || 0;
  11982. return 'tabitem' + (++g.getnewidcount);
  11983. },
  11984. //notabid 过滤掉tabid的
  11985. //noclose 过滤掉没有关闭按钮的
  11986. getTabidList: function (notabid, noclose)
  11987. {
  11988. var g = this, p = this.options;
  11989. var tabidlist = [];
  11990. $("> li", g.tab.links.ul).each(function ()
  11991. {
  11992. if ($(this).attr("tabid")
  11993. && $(this).attr("tabid") != notabid
  11994. && (!noclose || $(".l-tab-links-item-close", this).length > 0))
  11995. {
  11996. tabidlist.push($(this).attr("tabid"));
  11997. }
  11998. });
  11999. return tabidlist;
  12000. },
  12001. removeOther: function (tabid, compel)
  12002. {
  12003. var g = this, p = this.options;
  12004. var tabidlist = g.getTabidList(tabid, true);
  12005. $(tabidlist).each(function ()
  12006. {
  12007. g.removeTabItem(this);
  12008. });
  12009. },
  12010. reload: function (tabid)
  12011. {
  12012. var g = this, p = this.options;
  12013. var contentitem = $(".l-tab-content-item[tabid=" + tabid + "]");
  12014. var iframeloading = $(".l-tab-loading:first", contentitem);
  12015. var iframe = $("iframe:first", contentitem);
  12016. var url = $(iframe).attr("src");
  12017. iframeloading.show();
  12018. iframe.attr("src", url).unbind('load.tab').bind('load.tab', function ()
  12019. {
  12020. iframeloading.hide();
  12021. });
  12022. },
  12023. removeAll: function (compel)
  12024. {
  12025. var g = this, p = this.options;
  12026. var tabidlist = g.getTabidList(null, true);
  12027. $(tabidlist).each(function ()
  12028. {
  12029. g.removeTabItem(this);
  12030. });
  12031. },
  12032. onResize: function ()
  12033. {
  12034. var g = this, p = this.options;
  12035. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  12036. //set tab height
  12037. if (g.tab.parent()[0].tagName.toLowerCase() == "body")
  12038. {
  12039. var windowHeight = $(window).height();
  12040. windowHeight -= parseInt(g.tab.parent().css('paddingTop'));
  12041. windowHeight -= parseInt(g.tab.parent().css('paddingBottom'));
  12042. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  12043. }
  12044. else
  12045. {
  12046. g.height = p.heightDiff + (g.tab.parent().height() * parseFloat(p.height) * 0.01);
  12047. }
  12048. g.tab.height(g.height);
  12049. g.setContentHeight();
  12050. },
  12051. _menuItemClick: function (item)
  12052. {
  12053. var g = this, p = this.options;
  12054. if (!item.id || !g.actionTabid) return;
  12055. switch (item.id)
  12056. {
  12057. case "close":
  12058. g.removeTabItem(g.actionTabid);
  12059. g.actionTabid = null;
  12060. break;
  12061. case "closeother":
  12062. g.removeOther(g.actionTabid);
  12063. break;
  12064. case "closeall":
  12065. g.removeAll();
  12066. g.actionTabid = null;
  12067. break;
  12068. case "reload":
  12069. g.selectTabItem(g.actionTabid);
  12070. g.reload(g.actionTabid);
  12071. break;
  12072. }
  12073. },
  12074. _addTabItemContextMenuEven: function (tabitem)
  12075. {
  12076. var g = this, p = this.options;
  12077. tabitem.bind("contextmenu", function (e)
  12078. {
  12079. if (!g.tab.menu) return;
  12080. g.actionTabid = tabitem.attr("tabid");
  12081. g.tab.menu.show({ top: e.pageY, left: e.pageX });
  12082. if ($(".l-tab-links-item-close", this).length == 0)
  12083. {
  12084. g.tab.menu.setDisabled('close');
  12085. }
  12086. else
  12087. {
  12088. g.tab.menu.setEnabled('close');
  12089. }
  12090. return false;
  12091. });
  12092. }
  12093. });
  12094. })(jQuery);/**
  12095. * jQuery ligerUI 1.1.9
  12096. *
  12097. * http://ligerui.com
  12098. *
  12099. * Author daomi 2012 [ gd_star@163.com ]
  12100. *
  12101. */
  12102. (function ($)
  12103. {
  12104. $.fn.ligerTextBox = function ()
  12105. {
  12106. return $.ligerui.run.call(this, "ligerTextBox", arguments);
  12107. };
  12108. $.fn.ligerGetTextBoxManager = function ()
  12109. {
  12110. return $.ligerui.run.call(this, "ligerGetTextBoxManager", arguments);
  12111. };
  12112. $.ligerDefaults.TextBox = {
  12113. onChangeValue: null,
  12114. width: null,
  12115. disabled: false,
  12116. value: null, //初始化值
  12117. nullText: null, //不能为空时的提示
  12118. digits: false, //是否限定为数字输入框
  12119. number: false //是否限定为浮点数格式输入框
  12120. };
  12121. $.ligerui.controls.TextBox = function (element, options)
  12122. {
  12123. $.ligerui.controls.TextBox.base.constructor.call(this, element, options);
  12124. };
  12125. $.ligerui.controls.TextBox.ligerExtend($.ligerui.controls.Input, {
  12126. __getType: function ()
  12127. {
  12128. return 'TextBox'
  12129. },
  12130. __idPrev: function ()
  12131. {
  12132. return 'TextBox';
  12133. },
  12134. _init: function ()
  12135. {
  12136. $.ligerui.controls.TextBox.base._init.call(this);
  12137. var g = this, p = this.options;
  12138. if (!p.width)
  12139. {
  12140. p.width = $(g.element).width();
  12141. }
  12142. if ($(this.element).attr("readonly"))
  12143. {
  12144. p.disabled = true;
  12145. }
  12146. },
  12147. _render: function ()
  12148. {
  12149. var g = this, p = this.options;
  12150. g.inputText = $(this.element);
  12151. //外层
  12152. g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
  12153. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  12154. if (!g.inputText.hasClass("l-text-field"))
  12155. g.inputText.addClass("l-text-field");
  12156. this._setEvent();
  12157. g.set(p);
  12158. g.checkValue();
  12159. },
  12160. _getValue: function ()
  12161. {
  12162. return this.inputText.val();
  12163. },
  12164. _setNullText: function ()
  12165. {
  12166. this.checkNotNull();
  12167. },
  12168. checkValue: function ()
  12169. {
  12170. var g = this, p = this.options;
  12171. var v = g.inputText.val();
  12172. if (p.number && !/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(v) || p.digits && !/^\d+$/.test(v))
  12173. {
  12174. g.inputText.val(g.value || 0);
  12175. return;
  12176. }
  12177. g.value = v;
  12178. },
  12179. checkNotNull: function ()
  12180. {
  12181. var g = this, p = this.options;
  12182. if (p.nullText && !p.disabled)
  12183. {
  12184. if (!g.inputText.val())
  12185. {
  12186. g.inputText.addClass("l-text-field-null").val(p.nullText);
  12187. }
  12188. }
  12189. },
  12190. _setEvent: function ()
  12191. {
  12192. var g = this, p = this.options;
  12193. g.inputText.bind('blur.textBox', function ()
  12194. {
  12195. g.trigger('blur');
  12196. g.checkNotNull();
  12197. g.checkValue();
  12198. g.wrapper.removeClass("l-text-focus");
  12199. }).bind('focus.textBox', function ()
  12200. {
  12201. g.trigger('focus');
  12202. if (p.nullText)
  12203. {
  12204. if ($(this).hasClass("l-text-field-null"))
  12205. {
  12206. $(this).removeClass("l-text-field-null").val("");
  12207. }
  12208. }
  12209. g.wrapper.addClass("l-text-focus");
  12210. })
  12211. .change(function ()
  12212. {
  12213. g.trigger('changeValue', [this.value]);
  12214. });
  12215. g.wrapper.hover(function ()
  12216. {
  12217. g.trigger('mouseOver');
  12218. g.wrapper.addClass("l-text-over");
  12219. }, function ()
  12220. {
  12221. g.trigger('mouseOut');
  12222. g.wrapper.removeClass("l-text-over");
  12223. });
  12224. },
  12225. _setDisabled: function (value)
  12226. {
  12227. if (value)
  12228. {
  12229. this.inputText.attr("readonly", "readonly");
  12230. this.wrapper.addClass("l-text-disabled");
  12231. }
  12232. else
  12233. {
  12234. this.inputText.removeAttr("readonly");
  12235. this.wrapper.removeClass('l-text-disabled');
  12236. }
  12237. },
  12238. _setWidth: function (value)
  12239. {
  12240. if (value > 20)
  12241. {
  12242. this.wrapper.css({ width: value });
  12243. this.inputText.css({ width: value - 4 });
  12244. }
  12245. },
  12246. _setHeight: function (value)
  12247. {
  12248. if (value > 10)
  12249. {
  12250. this.wrapper.height(value);
  12251. this.inputText.height(value - 2);
  12252. }
  12253. },
  12254. _setValue: function (value)
  12255. {
  12256. if (value != null)
  12257. this.inputText.val(value);
  12258. },
  12259. _setLabel: function (value)
  12260. {
  12261. var g = this, p = this.options;
  12262. if (!g.labelwrapper)
  12263. {
  12264. g.labelwrapper = g.wrapper.wrap('<div class="l-labeltext"></div>').parent();
  12265. var lable = $('<div class="l-text-label" style="float:left;">' + value + ':&nbsp</div>');
  12266. g.labelwrapper.prepend(lable);
  12267. g.wrapper.css('float', 'left');
  12268. if (!p.labelWidth)
  12269. {
  12270. p.labelWidth = lable.width();
  12271. }
  12272. else
  12273. {
  12274. g._setLabelWidth(p.labelWidth);
  12275. }
  12276. lable.height(g.wrapper.height());
  12277. if (p.labelAlign)
  12278. {
  12279. g._setLabelAlign(p.labelAlign);
  12280. }
  12281. g.labelwrapper.append('<br style="clear:both;" />');
  12282. g.labelwrapper.width(p.labelWidth + p.width + 2);
  12283. }
  12284. else
  12285. {
  12286. g.labelwrapper.find(".l-text-label").html(value + ':&nbsp');
  12287. }
  12288. },
  12289. _setLabelWidth: function (value)
  12290. {
  12291. var g = this, p = this.options;
  12292. if (!g.labelwrapper) return;
  12293. g.labelwrapper.find(".l-text-label").width(value);
  12294. },
  12295. _setLabelAlign: function (value)
  12296. {
  12297. var g = this, p = this.options;
  12298. if (!g.labelwrapper) return;
  12299. g.labelwrapper.find(".l-text-label").css('text-align', value);
  12300. },
  12301. updateStyle: function ()
  12302. {
  12303. var g = this, p = this.options;
  12304. if (g.inputText.attr('disabled') || g.inputText.attr('readonly'))
  12305. {
  12306. g.wrapper.addClass("l-text-disabled");
  12307. g.options.disabled = true;
  12308. }
  12309. else
  12310. {
  12311. g.wrapper.removeClass("l-text-disabled");
  12312. g.options.disabled = false;
  12313. }
  12314. if (g.inputText.hasClass("l-text-field-null") && g.inputText.val() != p.nullText)
  12315. {
  12316. g.inputText.removeClass("l-text-field-null");
  12317. }
  12318. g.checkValue();
  12319. }
  12320. });
  12321. })(jQuery);/**
  12322. * jQuery ligerUI 1.1.9
  12323. *
  12324. * http://ligerui.com
  12325. *
  12326. * Author daomi 2012 [ gd_star@163.com ]
  12327. *
  12328. */
  12329. (function ($)
  12330. {
  12331. //气泡,可以在制定位置显示
  12332. $.ligerTip = function (p)
  12333. {
  12334. return $.ligerui.run.call(null, "ligerTip", arguments);
  12335. };
  12336. //在指定Dom Element右侧显示气泡
  12337. //target:将ligerui对象ID附加上
  12338. $.fn.ligerTip = function (options)
  12339. {
  12340. this.each(function ()
  12341. {
  12342. var p = $.extend({}, $.ligerDefaults.ElementTip, options || {});
  12343. p.target = p.target || this;
  12344. //如果是自动模式:鼠标经过时显示,移开时关闭
  12345. if (p.auto || options == undefined)
  12346. {
  12347. if (!p.content)
  12348. {
  12349. p.content = this.title;
  12350. if (p.removeTitle)
  12351. $(this).removeAttr("title");
  12352. }
  12353. p.content = p.content || this.title;
  12354. $(this).bind('mouseover.tip', function ()
  12355. {
  12356. p.x = $(this).offset().left + $(this).width() + (p.distanceX || 0);
  12357. p.y = $(this).offset().top + (p.distanceY || 0);
  12358. $.ligerTip(p);
  12359. }).bind('mouseout.tip', function ()
  12360. {
  12361. var tipmanager = $.ligerui.managers[this.ligeruitipid];
  12362. if (tipmanager)
  12363. {
  12364. tipmanager.remove();
  12365. }
  12366. });
  12367. }
  12368. else
  12369. {
  12370. if (p.target.ligeruitipid) return;
  12371. p.x = $(this).offset().left + $(this).width() + (p.distanceX || 0);
  12372. p.y = $(this).offset().top + (p.distanceY || 0);
  12373. p.x = p.x || 0;
  12374. p.y = p.y || 0;
  12375. $.ligerTip(p);
  12376. }
  12377. });
  12378. return $.ligerui.get(this, 'ligeruitipid');
  12379. };
  12380. //关闭指定在Dom Element(附加了ligerui对象ID,属性名"ligeruitipid")显示的气泡
  12381. $.fn.ligerHideTip = function (options)
  12382. {
  12383. return this.each(function ()
  12384. {
  12385. var p = options || {};
  12386. if (p.isLabel == undefined)
  12387. {
  12388. //如果是lable,将查找指定的input,并找到ligerui对象ID
  12389. p.isLabel = this.tagName.toLowerCase() == "label" && $(this).attr("for") != null;
  12390. }
  12391. var target = this;
  12392. if (p.isLabel)
  12393. {
  12394. var forele = $("#" + $(this).attr("for"));
  12395. if (forele.length == 0) return;
  12396. target = forele[0];
  12397. }
  12398. var tipmanager = $.ligerui.managers[target.ligeruitipid];
  12399. if (tipmanager)
  12400. {
  12401. tipmanager.remove();
  12402. }
  12403. }).unbind('mouseover.tip').unbind('mouseout.tip');
  12404. };
  12405. $.fn.ligerGetTipManager = function ()
  12406. {
  12407. return $.ligerui.get(this);
  12408. };
  12409. $.ligerDefaults = $.ligerDefaults || {};
  12410. //隐藏气泡
  12411. $.ligerDefaults.HideTip = {};
  12412. //气泡
  12413. $.ligerDefaults.Tip = {
  12414. content: null,
  12415. callback: null,
  12416. width: 150,
  12417. height: null,
  12418. x: 0,
  12419. y: 0,
  12420. appendIdTo: null, //保存ID到那一个对象(jQuery)(待移除)
  12421. target: null,
  12422. auto: null, //是否自动模式,如果是,那么:鼠标经过时显示,移开时关闭,并且当content为空时自动读取attr[title]
  12423. removeTitle: true //自动模式时,默认是否移除掉title
  12424. };
  12425. //在指定Dom Element右侧显示气泡,通过$.fn.ligerTip调用
  12426. $.ligerDefaults.ElementTip = {
  12427. distanceX: 1,
  12428. distanceY: -3,
  12429. auto: null,
  12430. removeTitle: true
  12431. };
  12432. $.ligerMethos.Tip = {};
  12433. $.ligerui.controls.Tip = function (options)
  12434. {
  12435. $.ligerui.controls.Tip.base.constructor.call(this, null, options);
  12436. };
  12437. $.ligerui.controls.Tip.ligerExtend($.ligerui.core.UIComponent, {
  12438. __getType: function ()
  12439. {
  12440. return 'Tip';
  12441. },
  12442. __idPrev: function ()
  12443. {
  12444. return 'Tip';
  12445. },
  12446. _extendMethods: function ()
  12447. {
  12448. return $.ligerMethos.Tip;
  12449. },
  12450. _render: function ()
  12451. {
  12452. var g = this, p = this.options;
  12453. var tip = $('<div class="l-verify-tip"><div class="l-verify-tip-corner"></div><div class="l-verify-tip-content"></div></div>');
  12454. g.tip = tip;
  12455. g.tip.attr("id", g.id);
  12456. if (p.content)
  12457. {
  12458. $("> .l-verify-tip-content:first", tip).html(p.content);
  12459. tip.appendTo('body');
  12460. }
  12461. else
  12462. {
  12463. return;
  12464. }
  12465. tip.css({ left: p.x, top: p.y }).show();
  12466. p.width && $("> .l-verify-tip-content:first", tip).width(p.width - 8);
  12467. p.height && $("> .l-verify-tip-content:first", tip).width(p.height);
  12468. eee = p.appendIdTo;
  12469. if (p.appendIdTo)
  12470. {
  12471. p.appendIdTo.attr("ligerTipId", g.id);
  12472. }
  12473. if (p.target)
  12474. {
  12475. $(p.target).attr("ligerTipId", g.id);
  12476. p.target.ligeruitipid = g.id;
  12477. }
  12478. p.callback && p.callback(tip);
  12479. g.set(p);
  12480. },
  12481. _setContent: function (content)
  12482. {
  12483. $("> .l-verify-tip-content:first", this.tip).html(content);
  12484. },
  12485. remove: function ()
  12486. {
  12487. if (this.options.appendIdTo)
  12488. {
  12489. this.options.appendIdTo.removeAttr("ligerTipId");
  12490. }
  12491. if (this.options.target)
  12492. {
  12493. $(this.options.target).removeAttr("ligerTipId");
  12494. this.options.target.ligeruitipid = null;
  12495. }
  12496. this.tip.remove();
  12497. }
  12498. });
  12499. })(jQuery);/**
  12500. * jQuery ligerUI 1.1.9
  12501. *
  12502. * http://ligerui.com
  12503. *
  12504. * Author daomi 2012 [ gd_star@163.com ]
  12505. *
  12506. */
  12507. (function ($)
  12508. {
  12509. $.fn.ligerToolBar = function (options)
  12510. {
  12511. return $.ligerui.run.call(this, "ligerToolBar", arguments);
  12512. };
  12513. $.fn.ligerGetToolBarManager = function ()
  12514. {
  12515. return $.ligerui.run.call(this, "ligerGetToolBarManager", arguments);
  12516. };
  12517. $.ligerDefaults.ToolBar = {};
  12518. $.ligerMethos.ToolBar = {};
  12519. $.ligerui.controls.ToolBar = function (element, options)
  12520. {
  12521. $.ligerui.controls.ToolBar.base.constructor.call(this, element, options);
  12522. };
  12523. $.ligerui.controls.ToolBar.ligerExtend($.ligerui.core.UIComponent, {
  12524. __getType: function ()
  12525. {
  12526. return 'ToolBar';
  12527. },
  12528. __idPrev: function ()
  12529. {
  12530. return 'ToolBar';
  12531. },
  12532. _extendMethods: function ()
  12533. {
  12534. return $.ligerMethos.ToolBar;
  12535. },
  12536. _render: function ()
  12537. {
  12538. var g = this, p = this.options;
  12539. g.toolBar = $(this.element);
  12540. g.toolBar.addClass("l-toolbar");
  12541. g.set(p);
  12542. },
  12543. _setItems: function (items)
  12544. {
  12545. var g = this;
  12546. $(items).each(function (i, item)
  12547. {
  12548. g.addItem(item);
  12549. });
  12550. },
  12551. addItem: function (item)
  12552. {
  12553. var g = this, p = this.options;
  12554. if (item.line)
  12555. {
  12556. g.toolBar.append('<div class="l-bar-separator"></div>');
  12557. return;
  12558. }
  12559. var ditem = $('<div class="l-toolbar-item l-panel-btn"><span></span><div class="l-panel-btn-l"></div><div class="l-panel-btn-r"></div></div>');
  12560. g.toolBar.append(ditem);
  12561. item.id && ditem.attr("toolbarid", item.id);
  12562. if (item.img)
  12563. {
  12564. ditem.append("<img src='" + item.img + "' />");
  12565. ditem.addClass("l-toolbar-item-hasicon");
  12566. }
  12567. else if (item.icon)
  12568. {
  12569. ditem.append("<div class='l-icon l-icon-" + item.icon + "'></div>");
  12570. ditem.addClass("l-toolbar-item-hasicon");
  12571. }
  12572. item.text && $("span:first", ditem).html(item.text);
  12573. item.disable && ditem.addClass("l-toolbar-item-disable");
  12574. item.click && ditem.click(function () { item.click(item); });
  12575. ditem.hover(function ()
  12576. {
  12577. $(this).addClass("l-panel-btn-over");
  12578. }, function ()
  12579. {
  12580. $(this).removeClass("l-panel-btn-over");
  12581. });
  12582. }
  12583. });
  12584. })(jQuery);/**
  12585. * jQuery ligerUI 1.1.9
  12586. *
  12587. * http://ligerui.com
  12588. *
  12589. * Author daomi 2012 [ gd_star@163.com ]
  12590. *
  12591. */
  12592. (function ($)
  12593. {
  12594. $.fn.ligerTree = function (options)
  12595. {
  12596. return $.ligerui.run.call(this, "ligerTree", arguments);
  12597. };
  12598. $.fn.ligerGetTreeManager = function ()
  12599. {
  12600. return $.ligerui.run.call(this, "ligerGetTreeManager", arguments);
  12601. };
  12602. $.ligerDefaults.Tree = {
  12603. url: null,
  12604. data: null,
  12605. checkbox: true,
  12606. autoCheckboxEven: true,
  12607. parentIcon: 'folder',
  12608. childIcon: 'leaf',
  12609. textFieldName: 'text',
  12610. attribute: ['id', 'url'],
  12611. treeLine: true, //是否显示line
  12612. nodeWidth: 90,
  12613. statusName: '__status',
  12614. isLeaf: null, //是否子节点的判断函数
  12615. single: false, //是否单选
  12616. onBeforeExpand: function () { },
  12617. onContextmenu: function () { },
  12618. onExpand: function () { },
  12619. onBeforeCollapse: function () { },
  12620. onCollapse: function () { },
  12621. onBeforeSelect: function () { },
  12622. onSelect: function () { },
  12623. onBeforeCancelSelect: function () { },
  12624. onCancelselect: function () { },
  12625. onCheck: function () { },
  12626. onSuccess: function () { },
  12627. onError: function () { },
  12628. onClick: function () { },
  12629. idFieldName: 'id',
  12630. parentIDFieldName: null,
  12631. topParentIDValue: 0,
  12632. onBeforeAppend: function () { }, //加载数据前事件,可以通过return false取消操作
  12633. onAppend: function () { }, //加载数据时事件,对数据进行预处理以后
  12634. onAfterAppend: function () { }, //加载数据完事件
  12635. slide: true, //是否以动画的形式显示
  12636. iconFieldName: 'icon',
  12637. nodeDraggable: false, //是否允许拖拽
  12638. nodeDraggingRender: null,
  12639. btnClickToToggleOnly: true //是否点击展开/收缩 按钮时才有效
  12640. };
  12641. $.ligerui.controls.Tree = function (element, options)
  12642. {
  12643. $.ligerui.controls.Tree.base.constructor.call(this, element, options);
  12644. };
  12645. $.ligerui.controls.Tree.ligerExtend($.ligerui.core.UIComponent, {
  12646. _init: function ()
  12647. {
  12648. $.ligerui.controls.Tree.base._init.call(this);
  12649. var g = this, p = this.options;
  12650. if (p.single) p.autoCheckboxEven = false;
  12651. },
  12652. _render: function ()
  12653. {
  12654. var g = this, p = this.options;
  12655. g.set(p, true);
  12656. g.tree = $(g.element);
  12657. g.tree.addClass('l-tree');
  12658. g.sysAttribute = ['isexpand', 'ischecked', 'href', 'style'];
  12659. g.loading = $("<div class='l-tree-loading'></div>");
  12660. g.tree.after(g.loading);
  12661. g.data = [];
  12662. g.maxOutlineLevel = 1;
  12663. g.treedataindex = 0;
  12664. g._applyTree();
  12665. g._setTreeEven();
  12666. g.set(p, false);
  12667. },
  12668. _setTreeLine: function (value)
  12669. {
  12670. if (value) this.tree.removeClass("l-tree-noline");
  12671. else this.tree.addClass("l-tree-noline");
  12672. },
  12673. _setUrl: function (url)
  12674. {
  12675. if (url) this.loadData(null, url);
  12676. },
  12677. _setData: function (data)
  12678. {
  12679. if (data) this.append(null, data);
  12680. },
  12681. setData: function (data)
  12682. {
  12683. this.set('data', data);
  12684. },
  12685. getData: function ()
  12686. {
  12687. return this.data;
  12688. },
  12689. //是否包含子节点
  12690. hasChildren: function (treenodedata)
  12691. {
  12692. if (this.options.isLeaf) return this.options.isLeaf(treenodedata);
  12693. return treenodedata.children ? true : false;
  12694. },
  12695. //获取父节点 数据
  12696. getParent: function (treenode, level)
  12697. {
  12698. var g = this;
  12699. treenode = g.getNodeDom(treenode);
  12700. var parentTreeNode = g.getParentTreeItem(treenode, level);
  12701. if (!parentTreeNode) return null;
  12702. var parentIndex = $(parentTreeNode).attr("treedataindex");
  12703. return g._getDataNodeByTreeDataIndex(parentIndex);
  12704. },
  12705. //获取父节点
  12706. getParentTreeItem: function (treenode, level)
  12707. {
  12708. var g = this;
  12709. treenode = g.getNodeDom(treenode);
  12710. var treeitem = $(treenode);
  12711. if (treeitem.parent().hasClass("l-tree"))
  12712. return null;
  12713. if (level == undefined)
  12714. {
  12715. if (treeitem.parent().parent("li").length == 0)
  12716. return null;
  12717. return treeitem.parent().parent("li")[0];
  12718. }
  12719. var currentLevel = parseInt(treeitem.attr("outlinelevel"));
  12720. var currenttreeitem = treeitem;
  12721. for (var i = currentLevel - 1; i >= level; i--)
  12722. {
  12723. currenttreeitem = currenttreeitem.parent().parent("li");
  12724. }
  12725. return currenttreeitem[0];
  12726. },
  12727. getChecked: function ()
  12728. {
  12729. var g = this, p = this.options;
  12730. if (!this.options.checkbox) return null;
  12731. var nodes = [];
  12732. $(".l-checkbox-checked", g.tree).parent().parent("li").each(function ()
  12733. {
  12734. var treedataindex = parseInt($(this).attr("treedataindex"));
  12735. nodes.push({ target: this, data: g._getDataNodeByTreeDataIndex(g.data, treedataindex) });
  12736. });
  12737. return nodes;
  12738. },
  12739. getSelected: function ()
  12740. {
  12741. var g = this, p = this.options;
  12742. var node = {};
  12743. node.target = $(".l-selected", g.tree).parent("li")[0];
  12744. if (node.target)
  12745. {
  12746. var treedataindex = parseInt($(node.target).attr("treedataindex"));
  12747. node.data = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  12748. return node;
  12749. }
  12750. return null;
  12751. },
  12752. //升级为父节点级别
  12753. upgrade: function (treeNode)
  12754. {
  12755. var g = this, p = this.options;
  12756. $(".l-note", treeNode).each(function ()
  12757. {
  12758. $(this).removeClass("l-note").addClass("l-expandable-open");
  12759. });
  12760. $(".l-note-last", treeNode).each(function ()
  12761. {
  12762. $(this).removeClass("l-note-last").addClass("l-expandable-open");
  12763. });
  12764. $("." + g._getChildNodeClassName(), treeNode).each(function ()
  12765. {
  12766. $(this)
  12767. .removeClass(g._getChildNodeClassName())
  12768. .addClass(g._getParentNodeClassName(true));
  12769. });
  12770. },
  12771. //降级为叶节点级别
  12772. demotion: function (treeNode)
  12773. {
  12774. var g = this, p = this.options;
  12775. if (!treeNode && treeNode[0].tagName.toLowerCase() != 'li') return;
  12776. var islast = $(treeNode).hasClass("l-last");
  12777. $(".l-expandable-open", treeNode).each(function ()
  12778. {
  12779. $(this).removeClass("l-expandable-open")
  12780. .addClass(islast ? "l-note-last" : "l-note");
  12781. });
  12782. $(".l-expandable-close", treeNode).each(function ()
  12783. {
  12784. $(this).removeClass("l-expandable-close")
  12785. .addClass(islast ? "l-note-last" : "l-note");
  12786. });
  12787. $("." + g._getParentNodeClassName(true), treeNode).each(function ()
  12788. {
  12789. $(this)
  12790. .removeClass(g._getParentNodeClassName(true))
  12791. .addClass(g._getChildNodeClassName());
  12792. });
  12793. },
  12794. collapseAll: function ()
  12795. {
  12796. var g = this, p = this.options;
  12797. $(".l-expandable-open", g.tree).click();
  12798. },
  12799. expandAll: function ()
  12800. {
  12801. var g = this, p = this.options;
  12802. $(".l-expandable-close", g.tree).click();
  12803. },
  12804. loadData: function (node, url, param)
  12805. {
  12806. var g = this, p = this.options;
  12807. g.loading.show();
  12808. var ajaxtype = param ? "post" : "get";
  12809. param = param || [];
  12810. //请求服务器
  12811. $.ajax({
  12812. type: ajaxtype,
  12813. url: url,
  12814. data: param,
  12815. dataType: 'json',
  12816. success: function (data)
  12817. {
  12818. if (!data) return;
  12819. g.loading.hide();
  12820. g.append(node, data);
  12821. g.trigger('success', [data]);
  12822. },
  12823. error: function (XMLHttpRequest, textStatus, errorThrown)
  12824. {
  12825. try
  12826. {
  12827. g.loading.hide();
  12828. g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]);
  12829. }
  12830. catch (e)
  12831. {
  12832. }
  12833. }
  12834. });
  12835. },
  12836. //清空
  12837. clear: function ()
  12838. {
  12839. var g = this, p = this.options;
  12840. //g.tree.html("");
  12841. $("> li", g.tree).each(function () { g.remove(this); });
  12842. },
  12843. //@parm [treeNode] dom节点(li)、节点数据 或者节点 dataindex
  12844. getNodeDom: function (nodeParm)
  12845. {
  12846. var g = this, p = this.options;
  12847. if (nodeParm == null) return nodeParm;
  12848. if (typeof (nodeParm) == "string" || typeof (nodeParm) == "number")
  12849. {
  12850. return $("li[treedataindex=" + nodeParm + "]", g.tree).get(0);
  12851. }
  12852. else if (typeof (nodeParm) == "object" && 'treedataindex' in nodeParm) //nodedata
  12853. {
  12854. return g.getNodeDom(nodeParm['treedataindex']);
  12855. }
  12856. return nodeParm;
  12857. },
  12858. //@parm [treeNode] dom节点(li)、节点数据 或者节点 dataindex
  12859. remove: function (treeNode)
  12860. {
  12861. var g = this, p = this.options;
  12862. treeNode = g.getNodeDom(treeNode);
  12863. var treedataindex = parseInt($(treeNode).attr("treedataindex"));
  12864. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  12865. if (treenodedata) g._setTreeDataStatus([treenodedata], 'delete');
  12866. var parentNode = g.getParentTreeItem(treeNode);
  12867. //复选框处理
  12868. if (p.checkbox)
  12869. {
  12870. g._setParentCheckboxStatus($(treeNode));
  12871. }
  12872. $(treeNode).remove();
  12873. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  12874. },
  12875. _updateStyle: function (ul)
  12876. {
  12877. var g = this, p = this.options;
  12878. var itmes = $(" > li", ul);
  12879. var treeitemlength = itmes.length;
  12880. if (!treeitemlength) return;
  12881. //遍历设置子节点的样式
  12882. itmes.each(function (i, item)
  12883. {
  12884. if (i == 0 && !$(this).hasClass("l-first"))
  12885. $(this).addClass("l-first");
  12886. if (i == treeitemlength - 1 && !$(this).hasClass("l-last"))
  12887. $(this).addClass("l-last");
  12888. if (i == 0 && i == treeitemlength - 1)
  12889. $(this).addClass("l-onlychild");
  12890. $("> div .l-note,> div .l-note-last", this)
  12891. .removeClass("l-note l-note-last")
  12892. .addClass(i == treeitemlength - 1 ? "l-note-last" : "l-note");
  12893. g._setTreeItem(this, { isLast: i == treeitemlength - 1 });
  12894. });
  12895. },
  12896. //@parm [domnode] dom节点(li)、节点数据 或者节点 dataindex
  12897. update: function (domnode, newnodedata)
  12898. {
  12899. var g = this, p = this.options;
  12900. domnode = g.getNodeDom(domnode);
  12901. var treedataindex = parseInt($(domnode).attr("treedataindex"));
  12902. nodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  12903. for (var attr in newnodedata)
  12904. {
  12905. nodedata[attr] = newnodedata[attr];
  12906. if (attr == p.textFieldName)
  12907. {
  12908. $("> .l-body > span", domnode).text(newnodedata[attr]);
  12909. }
  12910. }
  12911. },
  12912. //增加节点集合
  12913. //@parm [newdata] 数据集合 Array
  12914. //@parm [parentNode] dom节点(li)、节点数据 或者节点 dataindex
  12915. //@parm [nearNode] 附加到节点的上方/下方(非必填)
  12916. //@parm [isAfter] 附加到节点的下方(非必填)
  12917. append: function (parentNode, newdata, nearNode, isAfter)
  12918. {
  12919. var g = this, p = this.options;
  12920. parentNode = g.getNodeDom(parentNode);
  12921. if (g.trigger('beforeAppend', [parentNode, newdata]) == false) return false;
  12922. if (!newdata || !newdata.length) return false;
  12923. if (p.idFieldName && p.parentIDFieldName)
  12924. newdata = g.arrayToTree(newdata, p.idFieldName, p.parentIDFieldName);
  12925. g._addTreeDataIndexToData(newdata);
  12926. g._setTreeDataStatus(newdata, 'add');
  12927. if (nearNode != null)
  12928. {
  12929. nearNode = g.getNodeDom(nearNode);
  12930. }
  12931. g.trigger('append', [parentNode, newdata])
  12932. g._appendData(parentNode, newdata);
  12933. if (parentNode == null)//增加到根节点
  12934. {
  12935. var gridhtmlarr = g._getTreeHTMLByData(newdata, 1, [], true);
  12936. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  12937. if (nearNode != null)
  12938. {
  12939. $(nearNode)[isAfter ? 'after' : 'before'](gridhtmlarr.join(''));
  12940. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  12941. }
  12942. else
  12943. {
  12944. //remove last node class
  12945. if ($("> li:last", g.tree).length > 0)
  12946. g._setTreeItem($("> li:last", g.tree)[0], { isLast: false });
  12947. g.tree.append(gridhtmlarr.join(''));
  12948. }
  12949. $(".l-body", g.tree).hover(function ()
  12950. {
  12951. $(this).addClass("l-over");
  12952. }, function ()
  12953. {
  12954. $(this).removeClass("l-over");
  12955. });
  12956. g._upadteTreeWidth();
  12957. g.trigger('afterAppend', [parentNode, newdata])
  12958. return;
  12959. }
  12960. var treeitem = $(parentNode);
  12961. var outlineLevel = parseInt(treeitem.attr("outlinelevel"));
  12962. var hasChildren = $("> ul", treeitem).length > 0;
  12963. if (!hasChildren)
  12964. {
  12965. treeitem.append("<ul class='l-children'></ul>");
  12966. //设置为父节点
  12967. g.upgrade(parentNode);
  12968. }
  12969. var isLast = [];
  12970. for (var i = 1; i <= outlineLevel - 1; i++)
  12971. {
  12972. var currentParentTreeItem = $(g.getParentTreeItem(parentNode, i));
  12973. isLast.push(currentParentTreeItem.hasClass("l-last"));
  12974. }
  12975. isLast.push(treeitem.hasClass("l-last"));
  12976. var gridhtmlarr = g._getTreeHTMLByData(newdata, outlineLevel + 1, isLast, true);
  12977. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  12978. if (nearNode != null)
  12979. {
  12980. $(nearNode)[isAfter ? 'after' : 'before'](gridhtmlarr.join(''));
  12981. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  12982. }
  12983. else
  12984. {
  12985. //remove last node class
  12986. if ($("> .l-children > li:last", treeitem).length > 0)
  12987. g._setTreeItem($("> .l-children > li:last", treeitem)[0], { isLast: false });
  12988. $(">.l-children", parentNode).append(gridhtmlarr.join(''));
  12989. }
  12990. g._upadteTreeWidth();
  12991. $(">.l-children .l-body", parentNode).hover(function ()
  12992. {
  12993. $(this).addClass("l-over");
  12994. }, function ()
  12995. {
  12996. $(this).removeClass("l-over");
  12997. });
  12998. g.trigger('afterAppend', [parentNode, newdata]);
  12999. },
  13000. //@parm [nodeParm] dom节点(li)、节点数据 或者节点 dataindex
  13001. cancelSelect: function (nodeParm)
  13002. {
  13003. var g = this, p = this.options;
  13004. var domNode = g.getNodeDom(nodeParm);
  13005. var treeitem = $(domNode);
  13006. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13007. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13008. var treeitembody = $(">div:first", treeitem);
  13009. if (p.checkbox)
  13010. $(".l-checkbox", treeitembody).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13011. else
  13012. treeitembody.removeClass("l-selected");
  13013. g.trigger('cancelSelect', [{ data: treenodedata, target: treeitem[0]}]);
  13014. },
  13015. //选择节点(参数:条件函数、Dom节点或ID值)
  13016. selectNode: function (selectNodeParm)
  13017. {
  13018. var g = this, p = this.options;
  13019. var clause = null;
  13020. if (typeof (selectNodeParm) == "function")
  13021. {
  13022. clause = selectNodeParm;
  13023. }
  13024. else if (typeof (selectNodeParm) == "object")
  13025. {
  13026. var treeitem = $(selectNodeParm);
  13027. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13028. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13029. var treeitembody = $(">div:first", treeitem);
  13030. if (p.checkbox)
  13031. $(".l-checkbox", treeitembody).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  13032. else
  13033. treeitembody.addClass("l-selected");
  13034. g.trigger('select', [{ data: treenodedata, target: treeitem[0]}]);
  13035. return;
  13036. }
  13037. else
  13038. {
  13039. clause = function (data)
  13040. {
  13041. if (!data[p.idFieldName]) return false;
  13042. return data[p.idFieldName].toString() == selectNodeParm.toString();
  13043. };
  13044. }
  13045. $("li", g.tree).each(function ()
  13046. {
  13047. var treeitem = $(this);
  13048. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13049. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13050. if (clause(treenodedata, treedataindex))
  13051. {
  13052. g.selectNode(this);
  13053. }
  13054. else
  13055. {
  13056. g.cancelSelect(this);
  13057. }
  13058. });
  13059. },
  13060. getTextByID: function (id)
  13061. {
  13062. var g = this, p = this.options;
  13063. var data = g.getDataByID(id);
  13064. if (!data) return null;
  13065. return data[p.textFieldName];
  13066. },
  13067. getDataByID: function (id)
  13068. {
  13069. var g = this, p = this.options;
  13070. var data = null;
  13071. $("li", g.tree).each(function ()
  13072. {
  13073. if (data) return;
  13074. var treeitem = $(this);
  13075. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13076. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13077. if (treenodedata[p.idFieldName].toString() == id.toString())
  13078. {
  13079. data = treenodedata;
  13080. }
  13081. });
  13082. return data;
  13083. },
  13084. arrayToTree: function (data, id, pid) //将ID、ParentID这种数据格式转换为树格式
  13085. {
  13086. if (!data || !data.length) return [];
  13087. var targetData = []; //存储数据的容器(返回)
  13088. var records = {};
  13089. var itemLength = data.length; //数据集合的个数
  13090. for (var i = 0; i < itemLength; i++)
  13091. {
  13092. var o = data[i];
  13093. records[o[id]] = o;
  13094. }
  13095. for (var i = 0; i < itemLength; i++)
  13096. {
  13097. var currentData = data[i];
  13098. var parentData = records[currentData[pid]];
  13099. if (!parentData)
  13100. {
  13101. targetData.push(currentData);
  13102. continue;
  13103. }
  13104. parentData.children = parentData.children || [];
  13105. parentData.children.push(currentData);
  13106. }
  13107. return targetData;
  13108. },
  13109. //根据数据索引获取数据
  13110. _getDataNodeByTreeDataIndex: function (data, treedataindex)
  13111. {
  13112. var g = this, p = this.options;
  13113. for (var i = 0; i < data.length; i++)
  13114. {
  13115. if (data[i].treedataindex == treedataindex)
  13116. return data[i];
  13117. if (data[i].children)
  13118. {
  13119. var targetData = g._getDataNodeByTreeDataIndex(data[i].children, treedataindex);
  13120. if (targetData) return targetData;
  13121. }
  13122. }
  13123. return null;
  13124. },
  13125. //设置数据状态
  13126. _setTreeDataStatus: function (data, status)
  13127. {
  13128. var g = this, p = this.options;
  13129. $(data).each(function ()
  13130. {
  13131. this[p.statusName] = status;
  13132. if (this.children)
  13133. {
  13134. g._setTreeDataStatus(this.children, status);
  13135. }
  13136. });
  13137. },
  13138. //设置data 索引
  13139. _addTreeDataIndexToData: function (data)
  13140. {
  13141. var g = this, p = this.options;
  13142. $(data).each(function ()
  13143. {
  13144. if (this.treedataindex != undefined) return;
  13145. this.treedataindex = g.treedataindex++;
  13146. if (this.children)
  13147. {
  13148. g._addTreeDataIndexToData(this.children);
  13149. }
  13150. });
  13151. },
  13152. _addToNodes: function (data)
  13153. {
  13154. var g = this, p = this.options;
  13155. g.nodes = g.nodes || [];
  13156. if ($.inArray(data, g.nodes) == -1)
  13157. g.nodes.push(data);
  13158. if (data.children)
  13159. {
  13160. $(data.children).each(function (i, item)
  13161. {
  13162. g._addToNodes(item);
  13163. });
  13164. }
  13165. },
  13166. //添加项到g.data
  13167. _appendData: function (treeNode, data)
  13168. {
  13169. var g = this, p = this.options;
  13170. var treedataindex = parseInt($(treeNode).attr("treedataindex"));
  13171. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13172. if (g.treedataindex == undefined) g.treedataindex = 0;
  13173. if (treenodedata && treenodedata.children == undefined) treenodedata.children = [];
  13174. $(data).each(function (i, item)
  13175. {
  13176. if (treenodedata)
  13177. treenodedata.children[treenodedata.children.length] = item;
  13178. else
  13179. g.data[g.data.length] = item;
  13180. g._addToNodes(item);
  13181. });
  13182. },
  13183. _setTreeItem: function (treeNode, options)
  13184. {
  13185. var g = this, p = this.options;
  13186. if (!options) return;
  13187. treeNode = g.getNodeDom(treeNode);
  13188. var treeItem = $(treeNode);
  13189. var outlineLevel = parseInt(treeItem.attr("outlinelevel"));
  13190. if (options.isLast != undefined)
  13191. {
  13192. if (options.isLast == true)
  13193. {
  13194. treeItem.removeClass("l-last").addClass("l-last");
  13195. $("> div .l-note", treeItem).removeClass("l-note").addClass("l-note-last");
  13196. $(".l-children li", treeItem)
  13197. .find(".l-box:eq(" + (outlineLevel - 1) + ")")
  13198. .removeClass("l-line");
  13199. }
  13200. else if (options.isLast == false)
  13201. {
  13202. treeItem.removeClass("l-last");
  13203. $("> div .l-note-last", treeItem).removeClass("l-note-last").addClass("l-note");
  13204. $(".l-children li", treeItem)
  13205. .find(".l-box:eq(" + (outlineLevel - 1) + ")")
  13206. .removeClass("l-line")
  13207. .addClass("l-line");
  13208. }
  13209. }
  13210. },
  13211. _upadteTreeWidth: function ()
  13212. {
  13213. var g = this, p = this.options;
  13214. var treeWidth = g.maxOutlineLevel * 22;
  13215. if (p.checkbox) treeWidth += 22;
  13216. if (p.parentIcon || p.childIcon) treeWidth += 22;
  13217. treeWidth += p.nodeWidth;
  13218. g.tree.width(treeWidth);
  13219. },
  13220. _getChildNodeClassName: function ()
  13221. {
  13222. var g = this, p = this.options;
  13223. return 'l-tree-icon-' + p.childIcon;
  13224. },
  13225. _getParentNodeClassName: function (isOpen)
  13226. {
  13227. var g = this, p = this.options;
  13228. var nodeclassname = 'l-tree-icon-' + p.parentIcon;
  13229. if (isOpen) nodeclassname += '-open';
  13230. return nodeclassname;
  13231. },
  13232. //根据data生成最终完整的tree html
  13233. _getTreeHTMLByData: function (data, outlineLevel, isLast, isExpand)
  13234. {
  13235. var g = this, p = this.options;
  13236. if (g.maxOutlineLevel < outlineLevel)
  13237. g.maxOutlineLevel = outlineLevel;
  13238. isLast = isLast || [];
  13239. outlineLevel = outlineLevel || 1;
  13240. var treehtmlarr = [];
  13241. if (!isExpand) treehtmlarr.push('<ul class="l-children" style="display:none">');
  13242. else treehtmlarr.push("<ul class='l-children'>");
  13243. for (var i = 0; i < data.length; i++)
  13244. {
  13245. var isFirst = i == 0;
  13246. var isLastCurrent = i == data.length - 1;
  13247. var isExpandCurrent = true;
  13248. var o = data[i];
  13249. if (o.isexpand == false || o.isexpand == "false") isExpandCurrent = false;
  13250. treehtmlarr.push('<li ');
  13251. if (o.treedataindex != undefined)
  13252. treehtmlarr.push('treedataindex="' + o.treedataindex + '" ');
  13253. if (isExpandCurrent)
  13254. treehtmlarr.push('isexpand=' + o.isexpand + ' ');
  13255. treehtmlarr.push('outlinelevel=' + outlineLevel + ' ');
  13256. //增加属性支持
  13257. for (var j = 0; j < g.sysAttribute.length; j++)
  13258. {
  13259. if ($(this).attr(g.sysAttribute[j]))
  13260. data[dataindex][g.sysAttribute[j]] = $(this).attr(g.sysAttribute[j]);
  13261. }
  13262. for (var j = 0; j < p.attribute.length; j++)
  13263. {
  13264. if (o[p.attribute[j]])
  13265. treehtmlarr.push(p.attribute[j] + '="' + o[p.attribute[j]] + '" ');
  13266. }
  13267. //css class
  13268. treehtmlarr.push('class="');
  13269. isFirst && treehtmlarr.push('l-first ');
  13270. isLastCurrent && treehtmlarr.push('l-last ');
  13271. isFirst && isLastCurrent && treehtmlarr.push('l-onlychild ');
  13272. treehtmlarr.push('"');
  13273. treehtmlarr.push('>');
  13274. treehtmlarr.push('<div class="l-body">');
  13275. for (var k = 0; k <= outlineLevel - 2; k++)
  13276. {
  13277. if (isLast[k]) treehtmlarr.push('<div class="l-box"></div>');
  13278. else treehtmlarr.push('<div class="l-box l-line"></div>');
  13279. }
  13280. if (g.hasChildren(o))
  13281. {
  13282. if (isExpandCurrent) treehtmlarr.push('<div class="l-box l-expandable-open"></div>');
  13283. else treehtmlarr.push('<div class="l-box l-expandable-close"></div>');
  13284. if (p.checkbox)
  13285. {
  13286. if (o.ischecked)
  13287. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-checked"></div>');
  13288. else
  13289. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-unchecked"></div>');
  13290. }
  13291. if (p.parentIcon)
  13292. {
  13293. //node icon
  13294. treehtmlarr.push('<div class="l-box l-tree-icon ');
  13295. treehtmlarr.push(g._getParentNodeClassName(p.parentIcon ? true : false) + " ");
  13296. if (p.iconFieldName && o[p.iconFieldName])
  13297. treehtmlarr.push('l-tree-icon-none');
  13298. treehtmlarr.push('">');
  13299. if (p.iconFieldName && o[p.iconFieldName])
  13300. treehtmlarr.push('<img src="' + o[p.iconFieldName] + '" />');
  13301. treehtmlarr.push('</div>');
  13302. }
  13303. }
  13304. else
  13305. {
  13306. if (isLastCurrent) treehtmlarr.push('<div class="l-box l-note-last"></div>');
  13307. else treehtmlarr.push('<div class="l-box l-note"></div>');
  13308. if (p.checkbox)
  13309. {
  13310. if (o.ischecked)
  13311. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-checked"></div>');
  13312. else
  13313. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-unchecked"></div>');
  13314. }
  13315. if (p.childIcon)
  13316. {
  13317. //node icon
  13318. treehtmlarr.push('<div class="l-box l-tree-icon ');
  13319. treehtmlarr.push(g._getChildNodeClassName() + " ");
  13320. if (p.iconFieldName && o[p.iconFieldName])
  13321. treehtmlarr.push('l-tree-icon-none');
  13322. treehtmlarr.push('">');
  13323. if (p.iconFieldName && o[p.iconFieldName])
  13324. treehtmlarr.push('<img src="' + o[p.iconFieldName] + '" />');
  13325. treehtmlarr.push('</div>');
  13326. }
  13327. }
  13328. treehtmlarr.push('<span>' + o[p.textFieldName] + '</span></div>');
  13329. if (g.hasChildren(o))
  13330. {
  13331. var isLastNew = [];
  13332. for (var k = 0; k < isLast.length; k++)
  13333. {
  13334. isLastNew.push(isLast[k]);
  13335. }
  13336. isLastNew.push(isLastCurrent);
  13337. treehtmlarr.push(g._getTreeHTMLByData(o.children, outlineLevel + 1, isLastNew, isExpandCurrent).join(''));
  13338. }
  13339. treehtmlarr.push('</li>');
  13340. }
  13341. treehtmlarr.push("</ul>");
  13342. return treehtmlarr;
  13343. },
  13344. //根据简洁的html获取data
  13345. _getDataByTreeHTML: function (treeDom)
  13346. {
  13347. var g = this, p = this.options;
  13348. var data = [];
  13349. $("> li", treeDom).each(function (i, item)
  13350. {
  13351. var dataindex = data.length;
  13352. data[dataindex] =
  13353. {
  13354. treedataindex: g.treedataindex++
  13355. };
  13356. data[dataindex][p.textFieldName] = $("> span,> a", this).html();
  13357. for (var j = 0; j < g.sysAttribute.length; j++)
  13358. {
  13359. if ($(this).attr(g.sysAttribute[j]))
  13360. data[dataindex][g.sysAttribute[j]] = $(this).attr(g.sysAttribute[j]);
  13361. }
  13362. for (var j = 0; j < p.attribute.length; j++)
  13363. {
  13364. if ($(this).attr(p.attribute[j]))
  13365. data[dataindex][p.attribute[j]] = $(this).attr(p.attribute[j]);
  13366. }
  13367. if ($("> ul", this).length > 0)
  13368. {
  13369. data[dataindex].children = g._getDataByTreeHTML($("> ul", this));
  13370. }
  13371. });
  13372. return data;
  13373. },
  13374. _applyTree: function ()
  13375. {
  13376. var g = this, p = this.options;
  13377. g.data = g._getDataByTreeHTML(g.tree);
  13378. var gridhtmlarr = g._getTreeHTMLByData(g.data, 1, [], true);
  13379. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  13380. g.tree.html(gridhtmlarr.join(''));
  13381. g._upadteTreeWidth();
  13382. $(".l-body", g.tree).hover(function ()
  13383. {
  13384. $(this).addClass("l-over");
  13385. }, function ()
  13386. {
  13387. $(this).removeClass("l-over");
  13388. });
  13389. },
  13390. _applyTreeEven: function (treeNode)
  13391. {
  13392. var g = this, p = this.options;
  13393. $("> .l-body", treeNode).hover(function ()
  13394. {
  13395. $(this).addClass("l-over");
  13396. }, function ()
  13397. {
  13398. $(this).removeClass("l-over");
  13399. });
  13400. },
  13401. _getSrcElementByEvent: function (e)
  13402. {
  13403. var g = this;
  13404. var obj = (e.target || e.srcElement);
  13405. var tag = obj.tagName.toLowerCase();
  13406. var jobjs = $(obj).parents().add(obj);
  13407. var fn = function (parm)
  13408. {
  13409. for (var i = jobjs.length - 1; i >= 0; i--)
  13410. {
  13411. if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
  13412. }
  13413. return null;
  13414. };
  13415. if (jobjs.index(this.element) == -1) return { out: true };
  13416. var r = {
  13417. tree: fn("l-tree"),
  13418. node: fn("l-body"),
  13419. checkbox: fn("l-checkbox"),
  13420. icon: fn("l-tree-icon"),
  13421. text: tag == "span"
  13422. };
  13423. if (r.node)
  13424. {
  13425. var treedataindex = parseInt($(r.node).parent().attr("treedataindex"));
  13426. r.data = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13427. }
  13428. return r;
  13429. },
  13430. _setTreeEven: function ()
  13431. {
  13432. var g = this, p = this.options;
  13433. if (g.hasBind('contextmenu'))
  13434. {
  13435. g.tree.bind("contextmenu", function (e)
  13436. {
  13437. var obj = (e.target || e.srcElement);
  13438. var treeitem = null;
  13439. if (obj.tagName.toLowerCase() == "a" || obj.tagName.toLowerCase() == "span" || $(obj).hasClass("l-box"))
  13440. treeitem = $(obj).parent().parent();
  13441. else if ($(obj).hasClass("l-body"))
  13442. treeitem = $(obj).parent();
  13443. else if (obj.tagName.toLowerCase() == "li")
  13444. treeitem = $(obj);
  13445. if (!treeitem) return;
  13446. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13447. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13448. return g.trigger('contextmenu', [{ data: treenodedata, target: treeitem[0] }, e]);
  13449. });
  13450. }
  13451. g.tree.click(function (e)
  13452. {
  13453. var obj = (e.target || e.srcElement);
  13454. var treeitem = null;
  13455. if (obj.tagName.toLowerCase() == "a" || obj.tagName.toLowerCase() == "span" || $(obj).hasClass("l-box"))
  13456. treeitem = $(obj).parent().parent();
  13457. else if ($(obj).hasClass("l-body"))
  13458. treeitem = $(obj).parent();
  13459. else
  13460. treeitem = $(obj);
  13461. if (!treeitem) return;
  13462. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13463. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13464. var treeitembtn = $("div.l-body:first", treeitem).find("div.l-expandable-open:first,div.l-expandable-close:first");
  13465. var clickOnTreeItemBtn = $(obj).hasClass("l-expandable-open") || $(obj).hasClass("l-expandable-close");
  13466. if (!$(obj).hasClass("l-checkbox") && !clickOnTreeItemBtn)
  13467. {
  13468. if ($(">div:first", treeitem).hasClass("l-selected"))
  13469. {
  13470. if (g.trigger('beforeCancelSelect', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13471. return false;
  13472. $(">div:first", treeitem).removeClass("l-selected");
  13473. g.trigger('cancelSelect', [{ data: treenodedata, target: treeitem[0]}]);
  13474. }
  13475. else
  13476. {
  13477. if (g.trigger('beforeSelect', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13478. return false;
  13479. $(".l-body", g.tree).removeClass("l-selected");
  13480. $(">div:first", treeitem).addClass("l-selected");
  13481. g.trigger('select', [{ data: treenodedata, target: treeitem[0]}])
  13482. }
  13483. }
  13484. //chekcbox even
  13485. if ($(obj).hasClass("l-checkbox"))
  13486. {
  13487. if (p.autoCheckboxEven)
  13488. {
  13489. //状态:未选中
  13490. if ($(obj).hasClass("l-checkbox-unchecked"))
  13491. {
  13492. $(obj).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  13493. $(".l-children .l-checkbox", treeitem)
  13494. .removeClass("l-checkbox-incomplete l-checkbox-unchecked")
  13495. .addClass("l-checkbox-checked");
  13496. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  13497. }
  13498. //状态:选中
  13499. else if ($(obj).hasClass("l-checkbox-checked"))
  13500. {
  13501. $(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13502. $(".l-children .l-checkbox", treeitem)
  13503. .removeClass("l-checkbox-incomplete l-checkbox-checked")
  13504. .addClass("l-checkbox-unchecked");
  13505. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, false]);
  13506. }
  13507. //状态:未完全选中
  13508. else if ($(obj).hasClass("l-checkbox-incomplete"))
  13509. {
  13510. $(obj).removeClass("l-checkbox-incomplete").addClass("l-checkbox-checked");
  13511. $(".l-children .l-checkbox", treeitem)
  13512. .removeClass("l-checkbox-incomplete l-checkbox-unchecked")
  13513. .addClass("l-checkbox-checked");
  13514. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  13515. }
  13516. g._setParentCheckboxStatus(treeitem);
  13517. }
  13518. else
  13519. {
  13520. //状态:未选中
  13521. if ($(obj).hasClass("l-checkbox-unchecked"))
  13522. {
  13523. $(obj).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  13524. //是否单选
  13525. if (p.single)
  13526. {
  13527. $(".l-checkbox", g.tree).not(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13528. }
  13529. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  13530. }
  13531. //状态:选中
  13532. else if ($(obj).hasClass("l-checkbox-checked"))
  13533. {
  13534. $(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13535. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, false]);
  13536. }
  13537. }
  13538. }
  13539. //状态:已经张开
  13540. else if (treeitembtn.hasClass("l-expandable-open") && (!p.btnClickToToggleOnly || clickOnTreeItemBtn))
  13541. {
  13542. if (g.trigger('beforeCollapse', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13543. return false;
  13544. treeitembtn.removeClass("l-expandable-open").addClass("l-expandable-close");
  13545. if (p.slide)
  13546. $("> .l-children", treeitem).slideToggle('fast');
  13547. else
  13548. $("> .l-children", treeitem).toggle();
  13549. $("> div ." + g._getParentNodeClassName(true), treeitem)
  13550. .removeClass(g._getParentNodeClassName(true))
  13551. .addClass(g._getParentNodeClassName());
  13552. g.trigger('collapse', [{ data: treenodedata, target: treeitem[0]}]);
  13553. }
  13554. //状态:没有张开
  13555. else if (treeitembtn.hasClass("l-expandable-close") && (!p.btnClickToToggleOnly || clickOnTreeItemBtn))
  13556. {
  13557. if (g.trigger('beforeExpand', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13558. return false;
  13559. treeitembtn.removeClass("l-expandable-close").addClass("l-expandable-open");
  13560. var callback = function ()
  13561. {
  13562. g.trigger('expand', [{ data: treenodedata, target: treeitem[0]}]);
  13563. };
  13564. if (p.slide)
  13565. {
  13566. $("> .l-children", treeitem).slideToggle('fast', callback);
  13567. }
  13568. else
  13569. {
  13570. $("> .l-children", treeitem).toggle();
  13571. callback();
  13572. }
  13573. $("> div ." + g._getParentNodeClassName(), treeitem)
  13574. .removeClass(g._getParentNodeClassName())
  13575. .addClass(g._getParentNodeClassName(true));
  13576. }
  13577. g.trigger('click', [{ data: treenodedata, target: treeitem[0]}]);
  13578. });
  13579. //节点拖拽支持
  13580. if ($.fn.ligerDrag && p.nodeDraggable)
  13581. {
  13582. g.nodeDroptip = $("<div class='l-drag-nodedroptip' style='display:none'></div>").appendTo('body');
  13583. g.tree.ligerDrag({ revert: true, animate: false,
  13584. proxyX: 20, proxyY: 20,
  13585. proxy: function (draggable, e)
  13586. {
  13587. var src = g._getSrcElementByEvent(e);
  13588. if (src.node)
  13589. {
  13590. var content = "dragging";
  13591. if (p.nodeDraggingRender)
  13592. {
  13593. content = p.nodeDraggingRender(draggable.draggingNodes, draggable, g);
  13594. }
  13595. else
  13596. {
  13597. content = "";
  13598. var appended = false;
  13599. for (var i in draggable.draggingNodes)
  13600. {
  13601. var node = draggable.draggingNodes[i];
  13602. if (appended) content += ",";
  13603. content += node.text;
  13604. appended = true;
  13605. }
  13606. }
  13607. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
  13608. return proxy;
  13609. }
  13610. },
  13611. onRevert: function () { return false; },
  13612. onRendered: function ()
  13613. {
  13614. this.set('cursor', 'default');
  13615. g.children[this.id] = this;
  13616. },
  13617. onStartDrag: function (current, e)
  13618. {
  13619. if (e.button == 2) return false;
  13620. this.set('cursor', 'default');
  13621. var src = g._getSrcElementByEvent(e);
  13622. if (src.checkbox) return false;
  13623. if (p.checkbox)
  13624. {
  13625. var checked = g.getChecked();
  13626. this.draggingNodes = [];
  13627. for (var i in checked)
  13628. {
  13629. this.draggingNodes.push(checked[i].data);
  13630. }
  13631. if (!this.draggingNodes || !this.draggingNodes.length) return false;
  13632. }
  13633. else
  13634. {
  13635. this.draggingNodes = [src.data];
  13636. }
  13637. this.draggingNode = src.data;
  13638. this.set('cursor', 'move');
  13639. g.nodedragging = true;
  13640. this.validRange = {
  13641. top: g.tree.offset().top,
  13642. bottom: g.tree.offset().top + g.tree.height(),
  13643. left: g.tree.offset().left,
  13644. right: g.tree.offset().left + g.tree.width()
  13645. };
  13646. },
  13647. onDrag: function (current, e)
  13648. {
  13649. var nodedata = this.draggingNode;
  13650. if (!nodedata) return false;
  13651. var nodes = this.draggingNodes ? this.draggingNodes : [nodedata];
  13652. if (g.nodeDropIn == null) g.nodeDropIn = -1;
  13653. var pageX = e.pageX;
  13654. var pageY = e.pageY;
  13655. var visit = false;
  13656. var validRange = this.validRange;
  13657. if (pageX < validRange.left || pageX > validRange.right
  13658. || pageY > validRange.bottom || pageY < validRange.top)
  13659. {
  13660. g.nodeDropIn = -1;
  13661. g.nodeDroptip.hide();
  13662. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  13663. return;
  13664. }
  13665. for (var i = 0, l = g.nodes.length; i < l; i++)
  13666. {
  13667. var nd = g.nodes[i];
  13668. var treedataindex = nd['treedataindex'];
  13669. if (nodedata['treedataindex'] == treedataindex) visit = true;
  13670. if ($.inArray(nd, nodes) != -1) continue;
  13671. var isAfter = visit ? true : false;
  13672. if (g.nodeDropIn != -1 && g.nodeDropIn != treedataindex) continue;
  13673. var jnode = $("li[treedataindex=" + treedataindex + "] div:first", g.tree);
  13674. var offset = jnode.offset();
  13675. var range = {
  13676. top: offset.top,
  13677. bottom: offset.top + jnode.height(),
  13678. left: g.tree.offset().left,
  13679. right: g.tree.offset().left + g.tree.width()
  13680. };
  13681. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  13682. {
  13683. var lineTop = offset.top;
  13684. if (isAfter) lineTop += jnode.height();
  13685. g.nodeDroptip.css({
  13686. left: range.left,
  13687. top: lineTop,
  13688. width: range.right - range.left
  13689. }).show();
  13690. g.nodeDropIn = treedataindex;
  13691. g.nodeDropDir = isAfter ? "bottom" : "top";
  13692. if (pageY > range.top + 7 && pageY < range.bottom - 7)
  13693. {
  13694. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
  13695. g.nodeDroptip.hide();
  13696. g.nodeDropInParent = true;
  13697. }
  13698. else
  13699. {
  13700. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
  13701. g.nodeDroptip.show();
  13702. g.nodeDropInParent = false;
  13703. }
  13704. break;
  13705. }
  13706. else if (g.nodeDropIn != -1)
  13707. {
  13708. g.nodeDropIn = -1;
  13709. g.nodeDropInParent = false;
  13710. g.nodeDroptip.hide();
  13711. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  13712. }
  13713. }
  13714. },
  13715. onStopDrag: function (current, e)
  13716. {
  13717. var nodes = this.draggingNodes;
  13718. g.nodedragging = false;
  13719. if (g.nodeDropIn != -1)
  13720. {
  13721. for (var i = 0; i < nodes.length; i++)
  13722. {
  13723. var children = nodes[i].children;
  13724. if (children)
  13725. {
  13726. nodes = $.grep(nodes, function (node, i)
  13727. {
  13728. var isIn = $.inArray(node, children) == -1;
  13729. return isIn;
  13730. });
  13731. }
  13732. }
  13733. for (var i in nodes)
  13734. {
  13735. var node = nodes[i];
  13736. if (g.nodeDropInParent)
  13737. {
  13738. g.remove(node);
  13739. g.append(g.nodeDropIn, [node]);
  13740. }
  13741. else
  13742. {
  13743. g.remove(node);
  13744. g.append(g.getParent(g.nodeDropIn), [node], g.nodeDropIn, g.nodeDropDir == "bottom")
  13745. }
  13746. }
  13747. g.nodeDropIn = -1;
  13748. }
  13749. g.nodeDroptip.hide();
  13750. this.set('cursor', 'default');
  13751. }
  13752. });
  13753. }
  13754. },
  13755. //递归设置父节点的状态
  13756. _setParentCheckboxStatus: function (treeitem)
  13757. {
  13758. var g = this, p = this.options;
  13759. //当前同级别或低级别的节点是否都选中了
  13760. var isCheckedComplete = $(".l-checkbox-unchecked", treeitem.parent()).length == 0;
  13761. //当前同级别或低级别的节点是否都没有选中
  13762. var isCheckedNull = $(".l-checkbox-checked", treeitem.parent()).length == 0;
  13763. if (isCheckedComplete)
  13764. {
  13765. treeitem.parent().prev().find(".l-checkbox")
  13766. .removeClass("l-checkbox-unchecked l-checkbox-incomplete")
  13767. .addClass("l-checkbox-checked");
  13768. }
  13769. else if (isCheckedNull)
  13770. {
  13771. treeitem.parent().prev().find("> .l-checkbox")
  13772. .removeClass("l-checkbox-checked l-checkbox-incomplete")
  13773. .addClass("l-checkbox-unchecked");
  13774. }
  13775. else
  13776. {
  13777. treeitem.parent().prev().find("> .l-checkbox")
  13778. .removeClass("l-checkbox-unchecked l-checkbox-checked")
  13779. .addClass("l-checkbox-incomplete");
  13780. }
  13781. if (treeitem.parent().parent("li").length > 0)
  13782. g._setParentCheckboxStatus(treeitem.parent().parent("li"));
  13783. }
  13784. });
  13785. })(jQuery);/**
  13786. * jQuery ligerUI 1.1.9
  13787. *
  13788. * http://ligerui.com
  13789. *
  13790. * Author daomi 2012 [ gd_star@163.com ]
  13791. *
  13792. */
  13793. (function ($)
  13794. {
  13795. var l = $.ligerui;
  13796. l.windowCount = 0;
  13797. $.ligerWindow = function (options)
  13798. {
  13799. return l.run.call(null, "ligerWindow", arguments, { isStatic: true });
  13800. };
  13801. $.ligerWindow.show = function (p)
  13802. {
  13803. return $.ligerWindow(p);
  13804. };
  13805. $.ligerDefaults.Window = {
  13806. showClose: true,
  13807. showMax: true,
  13808. showToggle: true,
  13809. showMin: true,
  13810. title: 'window',
  13811. load: false,
  13812. onLoaded: null,
  13813. modal: false //是否模态窗口
  13814. };
  13815. $.ligerMethos.Window = {};
  13816. l.controls.Window = function (options)
  13817. {
  13818. l.controls.Window.base.constructor.call(this, null, options);
  13819. };
  13820. l.controls.Window.ligerExtend(l.core.Win, {
  13821. __getType: function ()
  13822. {
  13823. return 'Window';
  13824. },
  13825. __idPrev: function ()
  13826. {
  13827. return 'Window';
  13828. },
  13829. _extendMethods: function ()
  13830. {
  13831. return $.ligerMethos.Window;
  13832. },
  13833. _render: function ()
  13834. {
  13835. var g = this, p = this.options;
  13836. g.window = $('<div class="l-window"><div class="l-window-header"><div class="l-window-header-buttons"><div class="l-window-toggle"></div><div class="l-window-max"></div><div class="l-window-close"></div><div class="l-clear"></div></div><div class="l-window-header-inner"></div></div><div class="l-window-content"></div></div>');
  13837. g.element = g.window[0];
  13838. g.window.content = $(".l-window-content", g.window);
  13839. g.window.header = $(".l-window-header", g.window);
  13840. g.window.buttons = $(".l-window-header-buttons:first", g.window);
  13841. if (p.url)
  13842. {
  13843. if (p.load)
  13844. {
  13845. g.window.content.load(p.url, function ()
  13846. {
  13847. g.trigger('loaded');
  13848. });
  13849. g.window.content.addClass("l-window-content-scroll");
  13850. }
  13851. else
  13852. {
  13853. var iframe = $("<iframe frameborder='0' src='" + p.url + "'></iframe>");
  13854. var framename = "ligeruiwindow" + l.windowCount++;
  13855. if (p.name) framename = p.name;
  13856. iframe.attr("name", framename).attr("id", framename);
  13857. p.framename = framename;
  13858. iframe.appendTo(g.window.content);
  13859. g.iframe = iframe;
  13860. }
  13861. }
  13862. else if (p.content)
  13863. {
  13864. var content = $("<div>" + p.content + "</div>");
  13865. content.appendTo(g.window.content);
  13866. }
  13867. else if (p.target)
  13868. {
  13869. g.window.content.append(p.target);
  13870. p.target.show();
  13871. }
  13872. this.mask();
  13873. g.active();
  13874. $('body').append(g.window);
  13875. g.set({ width: p.width, height: p.height });
  13876. //位置初始化
  13877. var left = 0;
  13878. var top = 0;
  13879. if (p.left != null) left = p.left;
  13880. else p.left = left = 0.5 * ($(window).width() - g.window.width());
  13881. if (p.top != null) top = p.top;
  13882. else p.top = top = 0.5 * ($(window).height() - g.window.height()) + $(window).scrollTop() - 10;
  13883. if (left < 0) p.left = left = 0;
  13884. if (top < 0) p.top = top = 0;
  13885. g.set(p);
  13886. p.framename && $(">iframe", g.window.content).attr('name', p.framename);
  13887. if (!p.showToggle) $(".l-window-toggle", g.window).remove();
  13888. if (!p.showMax) $(".l-window-max", g.window).remove();
  13889. if (!p.showClose) $(".l-window-close", g.window).remove();
  13890. g._saveStatus();
  13891. //拖动支持
  13892. if ($.fn.ligerDrag)
  13893. {
  13894. g.draggable = g.window.drag = g.window.ligerDrag({ handler: '.l-window-header-inner', onStartDrag: function ()
  13895. {
  13896. g.active();
  13897. }, onStopDrag: function ()
  13898. {
  13899. g._saveStatus();
  13900. }, animate: false
  13901. });
  13902. }
  13903. //改变大小支持
  13904. if ($.fn.ligerResizable)
  13905. {
  13906. g.resizeable = g.window.resizable = g.window.ligerResizable({
  13907. onStartResize: function ()
  13908. {
  13909. g.active();
  13910. $(".l-window-max", g.window).removeClass("l-window-regain");
  13911. },
  13912. onStopResize: function (current, e)
  13913. {
  13914. var top = 0;
  13915. var left = 0;
  13916. if (!isNaN(parseInt(g.window.css('top'))))
  13917. top = parseInt(g.window.css('top'));
  13918. if (!isNaN(parseInt(g.window.css('left'))))
  13919. left = parseInt(g.window.css('left'));
  13920. if (current.diffTop)
  13921. g.window.css({ top: top + current.diffTop });
  13922. if (current.diffLeft)
  13923. g.window.css({ left: left + current.diffLeft });
  13924. if (current.newWidth)
  13925. g.window.width(current.newWidth);
  13926. if (current.newHeight)
  13927. g.window.content.height(current.newHeight - 28);
  13928. g._saveStatus();
  13929. return false;
  13930. }
  13931. });
  13932. g.window.append("<div class='l-btn-nw-drop'></div>");
  13933. }
  13934. //设置事件
  13935. $(".l-window-toggle", g.window).click(function ()
  13936. {
  13937. if ($(this).hasClass("l-window-toggle-close"))
  13938. {
  13939. g.collapsed = false;
  13940. $(this).removeClass("l-window-toggle-close");
  13941. } else
  13942. {
  13943. g.collapsed = true;
  13944. $(this).addClass("l-window-toggle-close");
  13945. }
  13946. g.window.content.slideToggle();
  13947. }).hover(function ()
  13948. {
  13949. if (g.window.drag)
  13950. g.window.drag.set('disabled', true);
  13951. }, function ()
  13952. {
  13953. if (g.window.drag)
  13954. g.window.drag.set('disabled', false);
  13955. });
  13956. $(".l-window-close", g.window).click(function ()
  13957. {
  13958. if (g.trigger('close') == false) return false;
  13959. g.window.hide();
  13960. l.win.removeTask(g);
  13961. }).hover(function ()
  13962. {
  13963. if (g.window.drag)
  13964. g.window.drag.set('disabled', true);
  13965. }, function ()
  13966. {
  13967. if (g.window.drag)
  13968. g.window.drag.set('disabled', false);
  13969. });
  13970. $(".l-window-max", g.window).click(function ()
  13971. {
  13972. if ($(this).hasClass("l-window-regain"))
  13973. {
  13974. if (g.trigger('regain') == false) return false;
  13975. g.window.width(g._width).css({ left: g._left, top: g._top });
  13976. g.window.content.height(g._height - 28);
  13977. $(this).removeClass("l-window-regain");
  13978. }
  13979. else
  13980. {
  13981. if (g.trigger('max') == false) return false;
  13982. g.window.width($(window).width() - 2).css({ left: 0, top: 0 });
  13983. g.window.content.height($(window).height() - 28).show();
  13984. $(this).addClass("l-window-regain");
  13985. }
  13986. });
  13987. },
  13988. _saveStatus: function ()
  13989. {
  13990. var g = this;
  13991. g._width = g.window.width();
  13992. g._height = g.window.height();
  13993. var top = 0;
  13994. var left = 0;
  13995. if (!isNaN(parseInt(g.window.css('top'))))
  13996. top = parseInt(g.window.css('top'));
  13997. if (!isNaN(parseInt(g.window.css('left'))))
  13998. left = parseInt(g.window.css('left'));
  13999. g._top = top;
  14000. g._left = left;
  14001. },
  14002. min: function ()
  14003. {
  14004. this.window.hide();
  14005. this.minimize = true;
  14006. this.actived = false;
  14007. },
  14008. _setShowMin: function (value)
  14009. {
  14010. var g = this, p = this.options;
  14011. if (value)
  14012. {
  14013. if (!g.winmin)
  14014. {
  14015. g.winmin = $('<div class="l-window-min"></div>').prependTo(g.window.buttons)
  14016. .click(function ()
  14017. {
  14018. g.min();
  14019. });
  14020. l.win.addTask(g);
  14021. }
  14022. }
  14023. else if (g.winmin)
  14024. {
  14025. g.winmin.remove();
  14026. g.winmin = null;
  14027. }
  14028. },
  14029. _setLeft: function (value)
  14030. {
  14031. if (value != null)
  14032. this.window.css({ left: value });
  14033. },
  14034. _setTop: function (value)
  14035. {
  14036. if (value != null)
  14037. this.window.css({ top: value });
  14038. },
  14039. _setWidth: function (value)
  14040. {
  14041. if (value > 0)
  14042. this.window.width(value);
  14043. },
  14044. _setHeight: function (value)
  14045. {
  14046. if (value > 28)
  14047. this.window.content.height(value - 28);
  14048. },
  14049. _setTitle: function (value)
  14050. {
  14051. if (value)
  14052. $(".l-window-header-inner", this.window.header).html(value);
  14053. },
  14054. _setUrl: function (url)
  14055. {
  14056. var g = this, p = this.options;
  14057. p.url = url;
  14058. if (p.load)
  14059. {
  14060. g.window.content.html("").load(p.url, function ()
  14061. {
  14062. if (g.trigger('loaded') == false) return false;
  14063. });
  14064. }
  14065. else if (g.jiframe)
  14066. {
  14067. g.jiframe.attr("src", p.url);
  14068. }
  14069. },
  14070. hide: function ()
  14071. {
  14072. var g = this, p = this.options;
  14073. this.unmask();
  14074. this.window.hide();
  14075. },
  14076. show: function ()
  14077. {
  14078. var g = this, p = this.options;
  14079. this.mask();
  14080. this.window.show();
  14081. },
  14082. remove: function ()
  14083. {
  14084. var g = this, p = this.options;
  14085. this.unmask();
  14086. this.window.remove();
  14087. },
  14088. active: function ()
  14089. {
  14090. var g = this, p = this.options;
  14091. if (g.minimize)
  14092. {
  14093. var width = g._width, height = g._height, left = g._left, top = g._top;
  14094. if (g.maximum)
  14095. {
  14096. width = $(window).width();
  14097. height = $(window).height();
  14098. left = top = 0;
  14099. if (l.win.taskbar)
  14100. {
  14101. height -= l.win.taskbar.outerHeight();
  14102. if (l.win.top) top += l.win.taskbar.outerHeight();
  14103. }
  14104. }
  14105. g.set({ width: width, height: height, left: left, top: top });
  14106. }
  14107. g.actived = true;
  14108. g.minimize = false;
  14109. l.win.setFront(g);
  14110. g.show();
  14111. l.win.setFront(this);
  14112. },
  14113. setUrl: function (url)
  14114. {
  14115. return _setUrl(url);
  14116. }
  14117. });
  14118. })(jQuery);