ligerui.all.js 547 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798
  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. $.ligerui.remove(manager.id);
  62. }
  63. this.managers[manager.id] = manager;
  64. },
  65. remove: function (arg)
  66. {
  67. if (typeof arg == "string" || typeof arg == "number")
  68. {
  69. delete $.ligerui.managers[arg];
  70. }
  71. else if (typeof arg == "object" && arg instanceof $.ligerui.core.Component)
  72. {
  73. delete $.ligerui.managers[arg.id];
  74. }
  75. },
  76. //获取ligerui对象
  77. //1,传入ligerui ID
  78. //2,传入Dom Object Array(jQuery)
  79. get: function (arg, idAttrName)
  80. {
  81. idAttrName = idAttrName || "ligeruiid";
  82. if (typeof arg == "string" || typeof arg == "number")
  83. {
  84. return $.ligerui.managers[arg];
  85. }
  86. else if (typeof arg == "object" && arg.length)
  87. {
  88. if (!arg[0][idAttrName] && !$(arg[0]).attr(idAttrName)) return null;
  89. return $.ligerui.managers[arg[0][idAttrName] || $(arg[0]).attr(idAttrName)];
  90. }
  91. return null;
  92. },
  93. //根据类型查找某一个对象
  94. find: function (type)
  95. {
  96. var arr = [];
  97. for (var id in this.managers)
  98. {
  99. var manager = this.managers[id];
  100. if (type instanceof Function)
  101. {
  102. if (manager instanceof type)
  103. {
  104. arr.push(manager);
  105. }
  106. }
  107. else if (type instanceof Array)
  108. {
  109. if ($.inArray(manager.__getType(), type) != -1)
  110. {
  111. arr.push(manager);
  112. }
  113. }
  114. else
  115. {
  116. if (manager.__getType() == type)
  117. {
  118. arr.push(manager);
  119. }
  120. }
  121. }
  122. return arr;
  123. },
  124. //$.fn.liger{Plugin} 和 $.fn.ligerGet{Plugin}Manager
  125. //会调用这个方法,并传入作用域(this)
  126. //@parm [plugin] 插件名
  127. //@parm [args] 参数(数组)
  128. //@parm [ext] 扩展参数,定义命名空间或者id属性名
  129. run: function (plugin, args, ext)
  130. {
  131. if (!plugin) return;
  132. ext = $.extend({
  133. defaultsNamespace: 'ligerDefaults',
  134. methodsNamespace: 'ligerMethods',
  135. controlNamespace: 'controls',
  136. idAttrName: 'ligeruiid',
  137. isStatic: false,
  138. hasElement: true, //是否拥有element主体(比如drag、resizable等辅助性插件就不拥有)
  139. propertyToElemnt: null //链接到element的属性名
  140. }, ext || {});
  141. plugin = plugin.replace(/^ligerGet/, '');
  142. plugin = plugin.replace(/^liger/, '');
  143. if (this == null || this == window || ext.isStatic)
  144. {
  145. if (!$.ligerui.plugins[plugin])
  146. {
  147. $.ligerui.plugins[plugin] = {
  148. fn: $['liger' + plugin],
  149. isStatic: true
  150. };
  151. }
  152. return new $.ligerui[ext.controlNamespace][plugin]($.extend({}, $[ext.defaultsNamespace][plugin] || {}, $[ext.defaultsNamespace][plugin + 'String'] || {}, args.length > 0 ? args[0] : {}));
  153. }
  154. if (!$.ligerui.plugins[plugin])
  155. {
  156. $.ligerui.plugins[plugin] = {
  157. fn: $.fn['liger' + plugin],
  158. isStatic: false
  159. };
  160. }
  161. if (/Manager$/.test(plugin)) return $.ligerui.get(this, ext.idAttrName);
  162. this.each(function ()
  163. {
  164. if (this[ext.idAttrName] || $(this).attr(ext.idAttrName))
  165. {
  166. var manager = $.ligerui.get(this[ext.idAttrName] || $(this).attr(ext.idAttrName));
  167. if (manager && args.length > 0) manager.set(args[0]);
  168. //已经执行过
  169. return;
  170. }
  171. if (args.length >= 1 && typeof args[0] == 'string') return;
  172. //只要第一个参数不是string类型,都执行组件的实例化工作
  173. var options = args.length > 0 ? args[0] : null;
  174. var p = $.extend({}, $[ext.defaultsNamespace][plugin] || {}
  175. , $[ext.defaultsNamespace][plugin + 'String'] || {}, options || {});
  176. if (ext.propertyToElemnt) p[ext.propertyToElemnt] = this;
  177. if (ext.hasElement)
  178. {
  179. new $.ligerui[ext.controlNamespace][plugin](this, p);
  180. }
  181. else
  182. {
  183. new $.ligerui[ext.controlNamespace][plugin](p);
  184. }
  185. });
  186. if (this.length == 0) return null;
  187. if (args.length == 0) return $.ligerui.get(this, ext.idAttrName);
  188. if (typeof args[0] == 'object') return $.ligerui.get(this, ext.idAttrName);
  189. if (typeof args[0] == 'string')
  190. {
  191. var manager = $.ligerui.get(this, ext.idAttrName);
  192. if (manager == null) return;
  193. if (args[0] == "option")
  194. {
  195. if (args.length == 2)
  196. return manager.get(args[1]); //manager get
  197. else if (args.length >= 3)
  198. return manager.set(args[1], args[2]); //manager set
  199. }
  200. else
  201. {
  202. var method = args[0];
  203. if (!manager[method]) return; //不存在这个方法
  204. var parms = Array.apply(null, args);
  205. parms.shift();
  206. return manager[method].apply(manager, parms); //manager method
  207. }
  208. }
  209. return null;
  210. },
  211. //扩展
  212. //1,默认参数
  213. //2,本地化扩展
  214. defaults: {},
  215. //3,方法接口扩展
  216. methods: {},
  217. //命名空间
  218. //核心控件,封装了一些常用方法
  219. core: {},
  220. //命名空间
  221. //组件的集合
  222. controls: {},
  223. //plugin 插件的集合
  224. plugins: {}
  225. };
  226. //扩展对象
  227. $.ligerDefaults = {};
  228. //扩展对象
  229. $.ligerMethos = {};
  230. //关联起来
  231. $.ligerui.defaults = $.ligerDefaults;
  232. $.ligerui.methods = $.ligerMethos;
  233. //获取ligerui对象
  234. //@parm [plugin] 插件名,可为空
  235. $.fn.liger = function (plugin)
  236. {
  237. if (plugin)
  238. {
  239. return $.ligerui.run.call(this, plugin, arguments);
  240. }
  241. else
  242. {
  243. return $.ligerui.get(this);
  244. }
  245. };
  246. //组件基类
  247. //1,完成定义参数处理方法和参数属性初始化的工作
  248. //2,完成定义事件处理方法和事件属性初始化的工作
  249. $.ligerui.core.Component = function (options)
  250. {
  251. //事件容器
  252. this.events = this.events || {};
  253. //配置参数
  254. this.options = options || {};
  255. //子组件集合索引
  256. this.children = {};
  257. };
  258. $.extend($.ligerui.core.Component.prototype, {
  259. __getType: function ()
  260. {
  261. return '$.ligerui.core.Component';
  262. },
  263. __idPrev: function ()
  264. {
  265. return 'ligerui';
  266. },
  267. //设置属性
  268. // arg 属性名 value 属性值
  269. // arg 属性/值 value 是否只设置事件
  270. set: function (arg, value)
  271. {
  272. if (!arg) return;
  273. if (typeof arg == 'object')
  274. {
  275. var tmp;
  276. if (this.options != arg)
  277. {
  278. $.extend(this.options, arg);
  279. tmp = arg;
  280. }
  281. else
  282. {
  283. tmp = $.extend({}, arg);
  284. }
  285. if (value == undefined || value == true)
  286. {
  287. for (var p in tmp)
  288. {
  289. if (p.indexOf('on') == 0)
  290. this.set(p, tmp[p]);
  291. }
  292. }
  293. if (value == undefined || value == false)
  294. {
  295. for (var p in tmp)
  296. {
  297. if (p.indexOf('on') != 0)
  298. this.set(p, tmp[p]);
  299. }
  300. }
  301. return;
  302. }
  303. var name = arg;
  304. //事件参数
  305. if (name.indexOf('on') == 0)
  306. {
  307. if (typeof value == 'function')
  308. this.bind(name.substr(2), value);
  309. return;
  310. }
  311. this.trigger('propertychange', arg, value);
  312. if (!this.options) this.options = {};
  313. this.options[name] = value;
  314. var pn = '_set' + name.substr(0, 1).toUpperCase() + name.substr(1);
  315. if (this[pn])
  316. {
  317. this[pn].call(this, value);
  318. }
  319. this.trigger('propertychanged', arg, value);
  320. },
  321. //获取属性
  322. get: function (name)
  323. {
  324. var pn = '_get' + name.substr(0, 1).toUpperCase() + name.substr(1);
  325. if (this[pn])
  326. {
  327. return this[pn].call(this, name);
  328. }
  329. return this.options[name];
  330. },
  331. hasBind: function (arg)
  332. {
  333. var name = arg.toLowerCase();
  334. var event = this.events[name];
  335. if (event && event.length) return true;
  336. return false;
  337. },
  338. //触发事件
  339. //data (可选) Array(可选)传递给事件处理函数的附加参数
  340. trigger: function (arg, data)
  341. {
  342. var name = arg.toLowerCase();
  343. var event = this.events[name];
  344. if (!event) return;
  345. data = data || [];
  346. if ((data instanceof Array) == false)
  347. {
  348. data = [data];
  349. }
  350. if(event.length>0){
  351. var ev = event[event.length-1];
  352. if (ev.handler.apply(ev.context, data) == false)
  353. return false;
  354. }
  355. /* for (var i = 0; i < event.length; i++)
  356. {
  357. var ev = event[i];
  358. if (ev.handler.apply(ev.context, data) == false)
  359. return false;
  360. }*/
  361. },
  362. //绑定事件
  363. bind: function (arg, handler, context)
  364. {
  365. if (typeof arg == 'object')
  366. {
  367. for (var p in arg)
  368. {
  369. this.bind(p, arg[p]);
  370. }
  371. return;
  372. }
  373. if (typeof handler != 'function') return false;
  374. var name = arg.toLowerCase();
  375. var event = this.events[name] || [];
  376. context = context || this;
  377. event.push({ handler: handler, context: context });
  378. this.events[name] = event;
  379. },
  380. //取消绑定
  381. unbind: function (arg, handler)
  382. {
  383. if (!arg)
  384. {
  385. this.events = {};
  386. return;
  387. }
  388. var name = arg.toLowerCase();
  389. var event = this.events[name];
  390. if (!event || !event.length) return;
  391. if (!handler)
  392. {
  393. delete this.events[name];
  394. }
  395. else
  396. {
  397. for (var i = 0, l = event.length; i < l; i++)
  398. {
  399. if (event[i].handler == handler)
  400. {
  401. event.splice(i, 1);
  402. break;
  403. }
  404. }
  405. }
  406. },
  407. destroy: function ()
  408. {
  409. $.ligerui.remove(this);
  410. }
  411. });
  412. //界面组件基类,
  413. //1,完成界面初始化:设置组件id并存入组件管理器池,初始化参数
  414. //2,渲染的工作,细节交给子类实现
  415. //@parm [element] 组件对应的dom element对象
  416. //@parm [options] 组件的参数
  417. $.ligerui.core.UIComponent = function (element, options)
  418. {
  419. $.ligerui.core.UIComponent.base.constructor.call(this, options);
  420. var extendMethods = this._extendMethods();
  421. if (extendMethods) $.extend(this, extendMethods);
  422. this.element = element;
  423. this._init();
  424. this._preRender();
  425. this.trigger('render');
  426. this._render();
  427. this.trigger('rendered');
  428. this._rendered();
  429. };
  430. $.ligerui.core.UIComponent.ligerExtend($.ligerui.core.Component, {
  431. __getType: function ()
  432. {
  433. return '$.ligerui.core.UIComponent';
  434. },
  435. //扩展方法
  436. _extendMethods: function ()
  437. {
  438. },
  439. _init: function ()
  440. {
  441. this.type = this.__getType();
  442. if (!this.element)
  443. {
  444. this.id = this.options.id || $.ligerui.getId(this.__idPrev());
  445. }
  446. else
  447. {
  448. this.id = this.options.id || this.element.id || $.ligerui.getId(this.__idPrev());
  449. }
  450. //存入管理器池
  451. $.ligerui.add(this);
  452. if (!this.element) return;
  453. //读取attr方法,并加载到参数,比如['url']
  454. var attributes = this.attr();
  455. if (attributes && attributes instanceof Array)
  456. {
  457. for (var i = 0; i < attributes.length; i++)
  458. {
  459. var name = attributes[i];
  460. this.options[name] = $(this.element).attr(name);
  461. }
  462. }
  463. //读取ligerui这个属性,并加载到参数,比如 ligerui = "width:120,heigth:100"
  464. var p = this.options;
  465. if ($(this.element).attr("ligerui"))
  466. {
  467. try
  468. {
  469. var attroptions = $(this.element).attr("ligerui");
  470. if (attroptions.indexOf('{') != 0) attroptions = "{" + attroptions + "}";
  471. eval("attroptions = " + attroptions + ";");
  472. if (attroptions) $.extend(p, attroptions);
  473. }
  474. catch (e) { }
  475. }
  476. },
  477. //预渲染,可以用于继承扩展
  478. _preRender: function ()
  479. {
  480. },
  481. _render: function ()
  482. {
  483. },
  484. _rendered: function ()
  485. {
  486. if (this.element)
  487. {
  488. $(this.element).attr("ligeruiid", this.id);
  489. }
  490. },
  491. //返回要转换成ligerui参数的属性,比如['url']
  492. attr: function ()
  493. {
  494. return [];
  495. },
  496. destroy: function ()
  497. {
  498. if (this.element) $(this.element).remove();
  499. this.options = null;
  500. $.ligerui.remove(this);
  501. }
  502. });
  503. //表单控件基类
  504. $.ligerui.controls.Input = function (element, options)
  505. {
  506. $.ligerui.controls.Input.base.constructor.call(this, element, options);
  507. };
  508. $.ligerui.controls.Input.ligerExtend($.ligerui.core.UIComponent, {
  509. __getType: function ()
  510. {
  511. return '$.ligerui.controls.Input';
  512. },
  513. attr: function ()
  514. {
  515. return ['nullText'];
  516. },
  517. setValue: function (value)
  518. {
  519. return this.set('value', value);
  520. },
  521. getValue: function ()
  522. {
  523. return this.get('value');
  524. },
  525. setEnabled: function ()
  526. {
  527. return this.set('disabled', false);
  528. },
  529. setDisabled: function ()
  530. {
  531. return this.set('disabled', true);
  532. },
  533. updateStyle: function ()
  534. {
  535. }
  536. });
  537. //全局窗口对象
  538. $.ligerui.win = {
  539. //顶端显示
  540. top: false,
  541. //遮罩
  542. mask: function (win)
  543. {
  544. function setHeight()
  545. {
  546. if (!$.ligerui.win.windowMask) return;
  547. var h = $(window).height() + $(window).scrollTop();
  548. $.ligerui.win.windowMask.height(h);
  549. }
  550. if (!this.windowMask)
  551. {
  552. this.windowMask = $("<div class='l-window-mask' style='display: block;'></div>").appendTo('body');
  553. $(window).bind('resize.ligeruiwin', setHeight);
  554. $(window).bind('scroll', setHeight);
  555. }
  556. this.windowMask.show();
  557. setHeight();
  558. this.masking = true;
  559. },
  560. //取消遮罩
  561. unmask: function (win)
  562. {
  563. var jwins = $("body > .l-dialog:visible,body > .l-window:visible");
  564. for (var i = 0, l = jwins.length; i < l; i++)
  565. {
  566. var winid = jwins.eq(i).attr("ligeruiid");
  567. if (win && win.id == winid) continue;
  568. //获取ligerui对象
  569. var winmanager = $.ligerui.get(winid);
  570. if (!winmanager) continue;
  571. //是否模态窗口
  572. var modal = winmanager.get('modal');
  573. //如果存在其他模态窗口,那么不会取消遮罩
  574. if (modal) return;
  575. }
  576. if (this.windowMask)
  577. this.windowMask.hide();
  578. this.masking = false;
  579. },
  580. //显示任务栏
  581. createTaskbar: function ()
  582. {
  583. if (!this.taskbar)
  584. {
  585. this.taskbar = $('<div class="l-taskbar"><div class="l-taskbar-tasks"></div><div class="l-clear"></div></div>').appendTo('body');
  586. if (this.top) this.taskbar.addClass("l-taskbar-top");
  587. this.taskbar.tasks = $(".l-taskbar-tasks:first", this.taskbar);
  588. this.tasks = {};
  589. }
  590. this.taskbar.show();
  591. this.taskbar.animate({ bottom: 0 });
  592. return this.taskbar;
  593. },
  594. //关闭任务栏
  595. removeTaskbar: function ()
  596. {
  597. var self = this;
  598. self.taskbar.animate({ bottom: -32 }, function ()
  599. {
  600. self.taskbar.remove();
  601. self.taskbar = null;
  602. });
  603. },
  604. activeTask: function (win)
  605. {
  606. for (var winid in this.tasks)
  607. {
  608. var t = this.tasks[winid];
  609. if (winid == win.id)
  610. {
  611. t.addClass("l-taskbar-task-active");
  612. }
  613. else
  614. {
  615. t.removeClass("l-taskbar-task-active");
  616. }
  617. }
  618. },
  619. //获取任务
  620. getTask: function (win)
  621. {
  622. var self = this;
  623. if (!self.taskbar) return;
  624. if (self.tasks[win.id]) return self.tasks[win.id];
  625. return null;
  626. },
  627. //增加任务
  628. addTask: function (win)
  629. {
  630. var self = this;
  631. if (!self.taskbar) self.createTaskbar();
  632. if (self.tasks[win.id]) return self.tasks[win.id];
  633. var title = win.get('title');
  634. var task = self.tasks[win.id] = $('<div class="l-taskbar-task" id="task_'+win.id+'"><div class="l-taskbar-task-icon"></div><div class="l-taskbar-task-content">' + title + '</div></div>');
  635. self.taskbar.tasks.append(task);
  636. self.activeTask(win);
  637. task.bind('click', function ()
  638. {
  639. self.activeTask(win);
  640. if (win.actived)
  641. win.min();
  642. else
  643. win.active();
  644. }).hover(function ()
  645. {
  646. $(this).addClass("l-taskbar-task-over");
  647. }, function ()
  648. {
  649. $(this).removeClass("l-taskbar-task-over");
  650. });
  651. return task;
  652. },
  653. hasTask: function ()
  654. {
  655. for (var p in this.tasks)
  656. {
  657. if (this.tasks[p])
  658. return true;
  659. }
  660. return false;
  661. },
  662. //移除任务
  663. removeTask: function (win)
  664. {
  665. var self = this;
  666. if (!self.taskbar) return;
  667. if (self.tasks[win.id])
  668. {
  669. self.tasks[win.id].unbind();
  670. self.tasks[win.id].remove();
  671. delete self.tasks[win.id];
  672. }
  673. if (!self.hasTask())
  674. {
  675. self.removeTaskbar();
  676. }
  677. },
  678. //前端显示
  679. setFront: function (win)
  680. {
  681. var wins = $.ligerui.find($.ligerui.core.Win);
  682. for (var i in wins)
  683. {
  684. var w = wins[i];
  685. if (w == win)
  686. {
  687. $(w.element).css("z-index", "9200");
  688. this.activeTask(w);
  689. }
  690. else
  691. {
  692. $(w.element).css("z-index", "9100");
  693. }
  694. }
  695. }
  696. };
  697. //窗口基类 window、dialog
  698. $.ligerui.core.Win = function (element, options)
  699. {
  700. $.ligerui.core.Win.base.constructor.call(this, element, options);
  701. };
  702. $.ligerui.core.Win.ligerExtend($.ligerui.core.UIComponent, {
  703. __getType: function ()
  704. {
  705. return '$.ligerui.controls.Win';
  706. },
  707. mask: function ()
  708. {
  709. if (this.options.modal)
  710. $.ligerui.win.mask(this);
  711. },
  712. unmask: function ()
  713. {
  714. if (this.options.modal)
  715. $.ligerui.win.unmask(this);
  716. },
  717. min: function ()
  718. {
  719. },
  720. max: function ()
  721. {
  722. },
  723. active: function ()
  724. {
  725. }
  726. });
  727. $.ligerui.draggable = {
  728. dragging: false
  729. };
  730. $.ligerui.resizable = {
  731. reszing: false
  732. };
  733. $.ligerui.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o)
  734. {
  735. var f = function (n)
  736. {
  737. return n < 10 ? '0' + n : n;
  738. },
  739. escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
  740. quote = function (value)
  741. {
  742. escapable.lastIndex = 0;
  743. return escapable.test(value) ?
  744. '"' + value.replace(escapable, function (a)
  745. {
  746. var c = meta[a];
  747. return typeof c === 'string' ? c :
  748. '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
  749. }) + '"' :
  750. '"' + value + '"';
  751. };
  752. if (o === null) return 'null';
  753. var type = typeof o;
  754. if (type === 'undefined') return undefined;
  755. if (type === 'string') return quote(o);
  756. if (type === 'number' || type === 'boolean') return '' + o;
  757. if (type === 'object')
  758. {
  759. if (typeof o.toJSON === 'function')
  760. {
  761. return $.ligerui.toJSON(o.toJSON());
  762. }
  763. if (o.constructor === Date)
  764. {
  765. return isFinite(this.valueOf()) ?
  766. this.getUTCFullYear() + '-' +
  767. f(this.getUTCMonth() + 1) + '-' +
  768. f(this.getUTCDate()) + 'T' +
  769. f(this.getUTCHours()) + ':' +
  770. f(this.getUTCMinutes()) + ':' +
  771. f(this.getUTCSeconds()) + 'Z' : null;
  772. }
  773. var pairs = [];
  774. if (o.constructor === Array)
  775. {
  776. for (var i = 0, l = o.length; i < l; i++)
  777. {
  778. pairs.push($.ligerui.toJSON(o[i]) || 'null');
  779. }
  780. return '[' + pairs.join(',') + ']';
  781. }
  782. var name, val;
  783. for (var k in o)
  784. {
  785. type = typeof k;
  786. if (type === 'number')
  787. {
  788. name = '"' + k + '"';
  789. } else if (type === 'string')
  790. {
  791. name = quote(k);
  792. } else
  793. {
  794. continue;
  795. }
  796. type = typeof o[k];
  797. if (type === 'function' || type === 'undefined')
  798. {
  799. continue;
  800. }
  801. val = $.ligerui.toJSON(o[k]);
  802. pairs.push(name + ':' + val);
  803. }
  804. return '{' + pairs.join(',') + '}';
  805. }
  806. };
  807. })(jQuery);
  808. /**
  809. * jQuery ligerUI 1.1.9
  810. *
  811. * http://ligerui.com
  812. *
  813. * Author daomi 2012 [ gd_star@163.com ]
  814. *
  815. */
  816. (function ($)
  817. {
  818. $.fn.ligerAccordion = function (options)
  819. {
  820. return $.ligerui.run.call(this, "ligerAccordion", arguments);
  821. };
  822. $.fn.ligerGetAccordionManager = function ()
  823. {
  824. return $.ligerui.get(this);
  825. };
  826. $.ligerDefaults.Accordion = {
  827. height: null,
  828. speed: "normal",
  829. changeHeightOnResize: false,
  830. heightDiff: 0, // 高度补差
  831. openEvent:null
  832. };
  833. $.ligerMethos.Accordion = {};
  834. $.ligerui.controls.Accordion = function (element, options)
  835. {
  836. $.ligerui.controls.Accordion.base.constructor.call(this, element, options);
  837. };
  838. $.ligerui.controls.Accordion.ligerExtend($.ligerui.core.UIComponent, {
  839. __getType: function ()
  840. {
  841. return 'Accordion';
  842. },
  843. __idPrev: function ()
  844. {
  845. return 'Accordion';
  846. },
  847. _extendMethods: function ()
  848. {
  849. return $.ligerMethos.Accordion;
  850. },
  851. _render: function ()
  852. {
  853. var g = this, p = this.options;
  854. g.accordion = $(g.element);
  855. if (!g.accordion.hasClass("l-accordion-panel")) g.accordion.addClass("l-accordion-panel");
  856. var selectedIndex = 0;
  857. if ($("> div[lselected=true]", g.accordion).length > 0)
  858. selectedIndex = $("> div", g.accordion).index($("> div[lselected=true]", g.accordion));
  859. $("> div", g.accordion).each(function (i, box)
  860. {
  861. var header = $('<div class="l-accordion-header"><div class="l-accordion-toggle"></div><div class="l-accordion-header-inner"></div></div>');
  862. if (i == selectedIndex){
  863. $(".l-accordion-toggle", header).addClass("l-accordion-toggle-open");
  864. }
  865. if ($(box).attr("title"))
  866. {
  867. $(".l-accordion-header-inner", header).html($(box).attr("title"));
  868. $(box).attr("title", "");
  869. }
  870. $(box).before(header);
  871. if (!$(box).hasClass("l-accordion-content")) $(box).addClass("l-accordion-content");
  872. if(i == selectedIndex){
  873. if(p.openEvent)p.openEvent(header);
  874. }
  875. });
  876. //add Even
  877. $(".l-accordion-toggle", g.accordion).each(function ()
  878. {
  879. if (!$(this).hasClass("l-accordion-toggle-open") && !$(this).hasClass("l-accordion-toggle-close"))
  880. {
  881. $(this).addClass("l-accordion-toggle-close");
  882. }
  883. if ($(this).hasClass("l-accordion-toggle-close"))
  884. {
  885. $(this).parent().next(".l-accordion-content:visible").hide();
  886. }
  887. });
  888. $(".l-accordion-header", g.accordion).hover(function ()
  889. {
  890. $(this).addClass("l-accordion-header-over");
  891. }, function ()
  892. {
  893. $(this).removeClass("l-accordion-header-over");
  894. });
  895. $(".l-accordion-toggle", g.accordion).hover(function ()
  896. {
  897. if ($(this).hasClass("l-accordion-toggle-open"))
  898. $(this).addClass("l-accordion-toggle-open-over");
  899. else if ($(this).hasClass("l-accordion-toggle-close"))
  900. $(this).addClass("l-accordion-toggle-close-over");
  901. }, function ()
  902. {
  903. if ($(this).hasClass("l-accordion-toggle-open"))
  904. $(this).removeClass("l-accordion-toggle-open-over");
  905. else if ($(this).hasClass("l-accordion-toggle-close"))
  906. $(this).removeClass("l-accordion-toggle-close-over");
  907. });
  908. $(">.l-accordion-header", g.accordion).click(function ()
  909. {
  910. var togglebtn = $(".l-accordion-toggle:first", this);
  911. if (togglebtn.hasClass("l-accordion-toggle-close"))
  912. {
  913. if(p.openEvent)p.openEvent(this);
  914. togglebtn.removeClass("l-accordion-toggle-close")
  915. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over");
  916. togglebtn.addClass("l-accordion-toggle-open");
  917. $(this).next(".l-accordion-content")
  918. .show(p.speed)
  919. .siblings(".l-accordion-content:visible").hide(p.speed);
  920. $(this).siblings(".l-accordion-header").find(".l-accordion-toggle").removeClass("l-accordion-toggle-open").addClass("l-accordion-toggle-close");
  921. }
  922. else
  923. {
  924. togglebtn.removeClass("l-accordion-toggle-open")
  925. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over")
  926. .addClass("l-accordion-toggle-close");
  927. $(this).next(".l-accordion-content").hide(p.speed);
  928. }
  929. });
  930. //init
  931. g.headerHoldHeight = 0;
  932. $("> .l-accordion-header", g.accordion).each(function ()
  933. {
  934. g.headerHoldHeight += $(this).height();
  935. });
  936. if (p.height && typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  937. {
  938. g.onResize();
  939. if (p.changeHeightOnResize)
  940. {
  941. $(window).resize(function ()
  942. {
  943. g.onResize();
  944. });
  945. }
  946. }
  947. else
  948. {
  949. if (p.height)
  950. {
  951. g.height = p.heightDiff + p.height;
  952. g.accordion.height(g.height);
  953. g.setHeight(p.height);
  954. }
  955. else
  956. {
  957. g.header = g.accordion.height();
  958. }
  959. }
  960. g.set(p);
  961. },
  962. openAccordion: function(id){
  963. var header = $("#" + id).prev();
  964. var togglebtn = $(".l-accordion-toggle:first", header);
  965. var g = this, p = this.options;
  966. if (togglebtn.hasClass("l-accordion-toggle-close"))
  967. {
  968. togglebtn.removeClass("l-accordion-toggle-close")
  969. .removeClass("l-accordion-toggle-close-over l-accordion-toggle-open-over");
  970. togglebtn.addClass("l-accordion-toggle-open");
  971. $(header).next(".l-accordion-content")
  972. .show(p.speed)
  973. .siblings(".l-accordion-content:visible").hide(p.speed);
  974. $(header).siblings(".l-accordion-header").find(".l-accordion-toggle").removeClass("l-accordion-toggle-open").addClass("l-accordion-toggle-close");
  975. }
  976. },
  977. onResize: function ()
  978. {
  979. var g = this, p = this.options;
  980. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  981. //set accordion height
  982. if (g.accordion.parent()[0].tagName.toLowerCase() == "body")
  983. {
  984. var windowHeight = $(window).height();
  985. windowHeight -= parseInt(g.layout.parent().css('paddingTop'));
  986. windowHeight -= parseInt(g.layout.parent().css('paddingBottom'));
  987. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  988. }
  989. else
  990. {
  991. g.height = p.heightDiff + (g.accordion.parent().height() * parseFloat(p.height) * 0.01);
  992. }
  993. g.accordion.height(g.height);
  994. g.setHeight(g.height - g.headerHoldHeight);
  995. },
  996. setHeight: function (height)
  997. {
  998. var g = this, p = this.options;
  999. g.accordion.height(height);
  1000. height -= g.headerHoldHeight;
  1001. $("> .l-accordion-content", g.accordion).height(height-9);
  1002. }
  1003. });
  1004. })(jQuery);
  1005. (function ($)
  1006. {
  1007. $.fn.ligerButton = function (options)
  1008. {
  1009. return $.ligerui.run.call(this, "ligerButton", arguments);
  1010. };
  1011. $.fn.ligerGetButtonManager = function ()
  1012. {
  1013. return $.ligerui.run.call(this, "ligerGetButtonManager", arguments);
  1014. };
  1015. $.ligerDefaults.Button = { width: 100, text: 'Button', disabled: false };
  1016. $.ligerMethos.Button = {};
  1017. $.ligerui.controls.Button = function (element, options)
  1018. {
  1019. $.ligerui.controls.Button.base.constructor.call(this, element, options);
  1020. };
  1021. $.ligerui.controls.Button.ligerExtend($.ligerui.controls.Input, {
  1022. __getType: function ()
  1023. {
  1024. return 'Button';
  1025. },
  1026. __idPrev: function ()
  1027. {
  1028. return 'Button';
  1029. },
  1030. _extendMethods: function ()
  1031. {
  1032. return $.ligerMethos.Button;
  1033. },
  1034. _render: function ()
  1035. {
  1036. var g = this, p = this.options;
  1037. g.button = $(g.element);
  1038. g.button.addClass("l-btn");
  1039. g.button.append('<div class="l-btn-l"></div><div class="l-btn-r"></div><span></span>');
  1040. p.click && g.button.click(function ()
  1041. {
  1042. if (!p.disabled)
  1043. p.click();
  1044. });
  1045. g.set(p);
  1046. },
  1047. _setEnabled: function (value)
  1048. {
  1049. if (value)
  1050. this.button.removeClass("l-btn-disabled");
  1051. },
  1052. _setDisabled: function (value)
  1053. {
  1054. if (value)
  1055. {
  1056. this.button.addClass("l-btn-disabled");
  1057. this.options.disabled = true;
  1058. }
  1059. },
  1060. _setWidth: function (value)
  1061. {
  1062. this.button.width(value);
  1063. },
  1064. _setText: function (value)
  1065. {
  1066. $("span", this.button).html(value);
  1067. },
  1068. setValue: function (value)
  1069. {
  1070. this.set('text', value);
  1071. },
  1072. getValue: function ()
  1073. {
  1074. return this.options.text;
  1075. },
  1076. setEnabled: function ()
  1077. {
  1078. this.set('disabled', false);
  1079. },
  1080. setDisabled: function ()
  1081. {
  1082. this.set('disabled', true);
  1083. }
  1084. });
  1085. })(jQuery);
  1086. (function ($)
  1087. {
  1088. $.fn.ligerCheckBox = function (options)
  1089. {
  1090. return $.ligerui.run.call(this, "ligerCheckBox", arguments);
  1091. };
  1092. $.fn.ligerGetCheckBoxManager = function ()
  1093. {
  1094. return $.ligerui.run.call(this, "ligerGetCheckBoxManager", arguments);
  1095. };
  1096. $.ligerDefaults.CheckBox = { disabled: false };
  1097. $.ligerMethos.CheckBox = {};
  1098. $.ligerui.controls.CheckBox = function (element, options)
  1099. {
  1100. $.ligerui.controls.CheckBox.base.constructor.call(this, element, options);
  1101. };
  1102. $.ligerui.controls.CheckBox.ligerExtend($.ligerui.controls.Input, {
  1103. __getType: function ()
  1104. {
  1105. return 'CheckBox';
  1106. },
  1107. __idPrev: function ()
  1108. {
  1109. return 'CheckBox';
  1110. },
  1111. _extendMethods: function ()
  1112. {
  1113. return $.ligerMethos.CheckBox;
  1114. },
  1115. _render: function ()
  1116. {
  1117. var g = this, p = this.options;
  1118. g.input = $(g.element);
  1119. g.link = $('<a class="l-checkbox"></a>');
  1120. g.wrapper = g.input.addClass('l-hidden').wrap('<div class="l-checkbox-wrapper"></div>').parent();
  1121. g.wrapper.prepend(g.link);
  1122. g.link.click(function ()
  1123. {
  1124. if (g.input.attr('disabled')) { return false; }
  1125. if (p.disabled) return false;
  1126. if (g.trigger('beforeClick', [g.element]) == false) return false;
  1127. if ($(this).hasClass("l-checkbox-checked"))
  1128. {
  1129. g._setValue(false);
  1130. }
  1131. else
  1132. {
  1133. g._setValue(true);
  1134. }
  1135. g.input.trigger("change");
  1136. });
  1137. g.wrapper.hover(function ()
  1138. {
  1139. if (!p.disabled)
  1140. $(this).addClass("l-over");
  1141. }, function ()
  1142. {
  1143. $(this).removeClass("l-over");
  1144. });
  1145. this.set(p);
  1146. this.updateStyle();
  1147. },
  1148. _setCss: function (value)
  1149. {
  1150. this.wrapper.css(value);
  1151. },
  1152. _setValue: function (value)
  1153. {
  1154. var g = this, p = this.options;
  1155. if (!value)
  1156. {
  1157. g.input[0].checked = false;
  1158. g.link.removeClass('l-checkbox-checked');
  1159. }
  1160. else
  1161. {
  1162. g.input[0].checked = true;
  1163. g.link.addClass('l-checkbox-checked');
  1164. }
  1165. },
  1166. _setDisabled: function (value)
  1167. {
  1168. if (value)
  1169. {
  1170. this.input.attr('disabled', true);
  1171. this.wrapper.addClass("l-disabled");
  1172. }
  1173. else
  1174. {
  1175. this.input.attr('disabled', false);
  1176. this.wrapper.removeClass("l-disabled");
  1177. }
  1178. },
  1179. _getValue: function ()
  1180. {
  1181. return this.element.checked;
  1182. },
  1183. updateStyle: function ()
  1184. {
  1185. if (this.input.attr('disabled'))
  1186. {
  1187. this.wrapper.addClass("l-disabled");
  1188. this.options.disabled = true;
  1189. }
  1190. if (this.input[0].checked)
  1191. {
  1192. this.link.addClass('l-checkbox-checked');
  1193. }
  1194. else
  1195. {
  1196. this.link.removeClass('l-checkbox-checked');
  1197. }
  1198. }
  1199. });
  1200. })(jQuery);/**
  1201. * jQuery ligerUI 1.1.9
  1202. *
  1203. * http://ligerui.com
  1204. *
  1205. * Author daomi 2012 [ gd_star@163.com ]
  1206. *
  1207. */
  1208. (function ($)
  1209. {
  1210. $.fn.ligerComboBox = function (options)
  1211. {
  1212. return $.ligerui.run.call(this, "ligerComboBox", arguments);
  1213. };
  1214. $.fn.ligerGetComboBoxManager = function ()
  1215. {
  1216. return $.ligerui.run.call(this, "ligerGetComboBoxManager", arguments);
  1217. };
  1218. $.ligerDefaults.ComboBox = {
  1219. resize: true, //是否调整大小
  1220. isMultiSelect: false, //是否多选
  1221. isShowCheckBox: false, //是否选择复选框
  1222. columns: false, //表格状态
  1223. selectBoxWidth: false, //宽度
  1224. selectBoxHeight: false, //高度
  1225. onBeforeSelect: false, //选择前事件
  1226. onSelected: null, //选择值事件
  1227. initValue: null,
  1228. initText: null,
  1229. valueField: 'id',
  1230. textField: 'text',
  1231. valueFieldID: null,
  1232. slide: false, //是否以动画的形式显示 // 2013-5-9赵以升调整true=>false
  1233. split: ";",
  1234. data: null,
  1235. tree: null, //下拉框以树的形式显示,tree的参数跟LigerTree的参数一致
  1236. treeLeafOnly: true, //是否只选择叶子
  1237. grid: null, //表格
  1238. onStartResize: null,
  1239. onEndResize: null,
  1240. hideOnLoseFocus: true,
  1241. url: null, //数据源URL(需返回JSON)
  1242. onSuccess: null,
  1243. onError: null,
  1244. onBeforeOpen: null, //打开下拉框前事件,可以通过return false来阻止继续操作,利用这个参数可以用来调用其他函数,比如打开一个新窗口来选择值
  1245. render: null, //文本框显示html函数
  1246. absolute: true //选择框是否在附加到body,并绝对定位
  1247. };
  1248. //扩展方法
  1249. $.ligerMethos.ComboBox = $.ligerMethos.ComboBox || {};
  1250. $.ligerui.controls.ComboBox = function (element, options)
  1251. {
  1252. $.ligerui.controls.ComboBox.base.constructor.call(this, element, options);
  1253. };
  1254. $.ligerui.controls.ComboBox.ligerExtend($.ligerui.controls.Input, {
  1255. __getType: function ()
  1256. {
  1257. return 'ComboBox';
  1258. },
  1259. _extendMethods: function ()
  1260. {
  1261. return $.ligerMethos.ComboBox;
  1262. },
  1263. _init: function ()
  1264. {
  1265. $.ligerui.controls.ComboBox.base._init.call(this);
  1266. var p = this.options;
  1267. if (p.columns)
  1268. {
  1269. p.isShowCheckBox = true;
  1270. }
  1271. if (p.isMultiSelect)
  1272. {
  1273. p.isShowCheckBox = true;
  1274. }
  1275. },
  1276. _render: function ()
  1277. {
  1278. var g = this, p = this.options;
  1279. g.data = p.data;
  1280. g.inputText = null;
  1281. g.select = null;
  1282. g.textFieldID = "";
  1283. g.valueFieldID = "";
  1284. g.valueField = null; //隐藏域(保存值)
  1285. //文本框初始化
  1286. if (this.element.tagName.toLowerCase() == "input")
  1287. {
  1288. this.element.readOnly = true;
  1289. g.inputText = $(this.element);
  1290. g.textFieldID = this.element.id;
  1291. }
  1292. else if (this.element.tagName.toLowerCase() == "select")
  1293. {
  1294. $(this.element).hide();
  1295. g.select = $(this.element);
  1296. p.isMultiSelect = false;
  1297. p.isShowCheckBox = false;
  1298. g.textFieldID = this.element.id + "_txt";
  1299. g.inputText = $('<input type="text" readonly="true"/>');
  1300. g.inputText.attr("id", g.textFieldID).insertAfter($(this.element));
  1301. } else
  1302. {
  1303. //不支持其他类型
  1304. return;
  1305. }
  1306. if (g.inputText[0].name == undefined) g.inputText[0].name = g.textFieldID;
  1307. //隐藏域初始化
  1308. g.valueField = null;
  1309. if (p.valueFieldID)
  1310. {
  1311. g.valueField = $("#" + p.valueFieldID + ":input");
  1312. if (g.valueField.length == 0) g.valueField = $('<input type="hidden"/>');
  1313. g.valueField[0].id = g.valueField[0].name = p.valueFieldID;
  1314. }
  1315. else
  1316. {
  1317. g.valueField = $('<input type="hidden"/>');
  1318. g.valueField[0].id = g.valueField[0].name = g.textFieldID + "_val";
  1319. }
  1320. if (g.valueField[0].name == undefined) g.valueField[0].name = g.valueField[0].id;
  1321. //开关
  1322. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  1323. //下拉框
  1324. 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>');
  1325. g.selectBox.table = $("table:first", g.selectBox);
  1326. //外层
  1327. g.wrapper = g.inputText.wrap('<div class="l-text l-text-combobox"></div>').parent();
  1328. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  1329. g.wrapper.append(g.link);
  1330. //添加个包裹,
  1331. g.textwrapper = g.wrapper.wrap('<div class="l-text-wrapper"></div>').parent();
  1332. if (p.absolute)
  1333. g.selectBox.appendTo('body').addClass("l-box-select-absolute");
  1334. else
  1335. g.textwrapper.append(g.selectBox);
  1336. g.textwrapper.append(g.valueField);
  1337. g.inputText.addClass("l-text-field");
  1338. if (p.isShowCheckBox && !g.select)
  1339. {
  1340. $("table", g.selectBox).addClass("l-table-checkbox");
  1341. } else
  1342. {
  1343. p.isShowCheckBox = false;
  1344. $("table", g.selectBox).addClass("l-table-nocheckbox");
  1345. }
  1346. //开关 事件
  1347. g.link.hover(function ()
  1348. {
  1349. if (p.disabled) return;
  1350. this.className = "l-trigger-hover";
  1351. }, function ()
  1352. {
  1353. if (p.disabled) return;
  1354. this.className = "l-trigger";
  1355. }).mousedown(function ()
  1356. {
  1357. if (p.disabled) return;
  1358. this.className = "l-trigger-pressed";
  1359. }).mouseup(function ()
  1360. {
  1361. if (p.disabled) return;
  1362. this.className = "l-trigger-hover";
  1363. }).click(function ()
  1364. {
  1365. if (p.disabled) return;
  1366. if (g.trigger('beforeOpen') == false) return false;
  1367. g._toggleSelectBox(g.selectBox.is(":visible"));
  1368. });
  1369. g.inputText.click(function ()
  1370. {
  1371. if (p.disabled) return;
  1372. if (g.trigger('beforeOpen') == false) return false;
  1373. g._toggleSelectBox(g.selectBox.is(":visible"));
  1374. }).blur(function ()
  1375. {
  1376. if (p.disabled) return;
  1377. g.wrapper.removeClass("l-text-focus");
  1378. }).focus(function ()
  1379. {
  1380. if (p.disabled) return;
  1381. g.wrapper.addClass("l-text-focus");
  1382. });
  1383. g.wrapper.hover(function ()
  1384. {
  1385. if (p.disabled) return;
  1386. g.wrapper.addClass("l-text-over");
  1387. }, function ()
  1388. {
  1389. if (p.disabled) return;
  1390. g.wrapper.removeClass("l-text-over");
  1391. });
  1392. g.resizing = false;
  1393. g.selectBox.hover(null, function (e)
  1394. {
  1395. if (p.hideOnLoseFocus && g.selectBox.is(":visible") && !g.boxToggling && !g.resizing)
  1396. {
  1397. g._toggleSelectBox(true);
  1398. }
  1399. });
  1400. var itemsleng = $("tr", g.selectBox.table).length;
  1401. if (!p.selectBoxHeight && itemsleng < 8) p.selectBoxHeight = itemsleng * 30;
  1402. if (p.selectBoxHeight)
  1403. {
  1404. g.selectBox.height(p.selectBoxHeight);
  1405. }
  1406. //下拉框内容初始化
  1407. g.bulidContent();
  1408. g.set(p);
  1409. //下拉框宽度、高度初始化
  1410. if (p.selectBoxWidth)
  1411. {
  1412. g.selectBox.width(p.selectBoxWidth);
  1413. }
  1414. else
  1415. {
  1416. g.selectBox.css('width', g.wrapper.css('width'));
  1417. }
  1418. },
  1419. destroy: function ()
  1420. {
  1421. if (this.wrapper) this.wrapper.remove();
  1422. if (this.selectBox) this.selectBox.remove();
  1423. this.options = null;
  1424. $.ligerui.remove(this);
  1425. },
  1426. _setDisabled: function (value)
  1427. {
  1428. //禁用样式
  1429. if (value)
  1430. {
  1431. this.wrapper.addClass('l-text-disabled');
  1432. } else
  1433. {
  1434. this.wrapper.removeClass('l-text-disabled');
  1435. }
  1436. },
  1437. _setLable: function (label)
  1438. {
  1439. var g = this, p = this.options;
  1440. if (label)
  1441. {
  1442. if (g.labelwrapper)
  1443. {
  1444. g.labelwrapper.find(".l-text-label:first").html(label + ':&nbsp');
  1445. }
  1446. else
  1447. {
  1448. g.labelwrapper = g.textwrapper.wrap('<div class="l-labeltext"></div>').parent();
  1449. g.labelwrapper.prepend('<div class="l-text-label" style="float:left;display:inline;">' + label + ':&nbsp</div>');
  1450. g.textwrapper.css('float', 'left');
  1451. }
  1452. if (!p.labelWidth)
  1453. {
  1454. p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth();
  1455. }
  1456. else
  1457. {
  1458. $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth);
  1459. }
  1460. $('.l-text-label', g.labelwrapper).width(p.labelWidth);
  1461. $('.l-text-label', g.labelwrapper).height(g.wrapper.height());
  1462. g.labelwrapper.append('<br style="clear:both;" />');
  1463. if (p.labelAlign)
  1464. {
  1465. $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign);
  1466. }
  1467. g.textwrapper.css({ display: 'inline' });
  1468. g.labelwrapper.width(g.wrapper.outerWidth() + p.labelWidth + 2);
  1469. }
  1470. },
  1471. _setWidth: function (value)
  1472. {
  1473. var g = this;
  1474. if (value > 20)
  1475. {
  1476. g.wrapper.css({ width: value });
  1477. g.inputText.css({ width: value - 20 });
  1478. g.textwrapper.css({ width: value });
  1479. }
  1480. },
  1481. _setHeight: function (value)
  1482. {
  1483. var g = this;
  1484. if (value > 10)
  1485. {
  1486. g.wrapper.height(value);
  1487. g.inputText.height(value - 2);
  1488. g.link.height(value - 4);
  1489. g.textwrapper.css({ width: value });
  1490. }
  1491. },
  1492. _setResize: function (resize)
  1493. {
  1494. //调整大小支持
  1495. if (resize && $.fn.ligerResizable)
  1496. {
  1497. var g = this;
  1498. g.selectBox.ligerResizable({ handles: 'se,s,e', onStartResize: function ()
  1499. {
  1500. g.resizing = true;
  1501. g.trigger('startResize');
  1502. }
  1503. , onEndResize: function ()
  1504. {
  1505. g.resizing = false;
  1506. if (g.trigger('endResize') == false)
  1507. return false;
  1508. }
  1509. });
  1510. g.selectBox.append("<div class='l-btn-nw-drop'></div>");
  1511. }
  1512. },
  1513. //查找Text,适用多选和单选
  1514. findTextByValue: function (value)
  1515. {
  1516. var g = this, p = this.options;
  1517. if (value == undefined) return "";
  1518. var texts = "";
  1519. var contain = function (checkvalue)
  1520. {
  1521. var targetdata = value.toString().split(p.split);
  1522. for (var i = 0; i < targetdata.length; i++)
  1523. {
  1524. if (targetdata[i] == checkvalue) return true;
  1525. }
  1526. return false;
  1527. };
  1528. $(g.data).each(function (i, item)
  1529. {
  1530. var val = item[p.valueField];
  1531. var txt = item[p.textField];
  1532. if (contain(val))
  1533. {
  1534. texts += txt + p.split;
  1535. }
  1536. });
  1537. if (texts.length > 0) texts = texts.substr(0, texts.length - 1);
  1538. return texts;
  1539. },
  1540. //查找Value,适用多选和单选
  1541. findValueByText: function (text)
  1542. {
  1543. var g = this, p = this.options;
  1544. if (!text && text == "") return "";
  1545. var contain = function (checkvalue)
  1546. {
  1547. var targetdata = text.toString().split(p.split);
  1548. for (var i = 0; i < targetdata.length; i++)
  1549. {
  1550. if (targetdata[i] == checkvalue) return true;
  1551. }
  1552. return false;
  1553. };
  1554. var values = "";
  1555. $(g.data).each(function (i, item)
  1556. {
  1557. var val = item[p.valueField];
  1558. var txt = item[p.textField];
  1559. if (contain(txt))
  1560. {
  1561. values += val + p.split;
  1562. }
  1563. });
  1564. if (values.length > 0) values = values.substr(0, values.length - 1);
  1565. return values;
  1566. },
  1567. removeItem: function ()
  1568. {
  1569. },
  1570. insertItem: function ()
  1571. {
  1572. },
  1573. addItem: function ()
  1574. {
  1575. },
  1576. _setValue: function (value)
  1577. {
  1578. var g = this, p = this.options;
  1579. var text = g.findTextByValue(value);
  1580. if (p.tree)
  1581. {
  1582. g.selectValueByTree(value);
  1583. }
  1584. else if (!p.isMultiSelect)
  1585. {
  1586. g._changeValue(value, text);
  1587. $("tr[value=" + value + "] td", g.selectBox).addClass("l-selected");
  1588. $("tr[value!=" + value + "] td", g.selectBox).removeClass("l-selected");
  1589. }
  1590. else
  1591. {
  1592. g._changeValue(value, text);
  1593. var targetdata = value.toString().split(p.split);
  1594. $("table.l-table-checkbox :checkbox", g.selectBox).each(function () {
  1595. $(this).prev().removeClass("l-checkbox-checked"); //zys 2014-3-18 修改
  1596. this.checked = false;
  1597. });
  1598. for (var i = 0; i < targetdata.length; i++)
  1599. {
  1600. $("table.l-table-checkbox tr[value=" + targetdata[i] + "] :checkbox", g.selectBox).each(function () {
  1601. $(this).prev().addClass("l-checkbox-checked"); //zys 2014-3-18 修改
  1602. this.checked = true;
  1603. });
  1604. }
  1605. }
  1606. },
  1607. selectValue: function (value)
  1608. {
  1609. this._setValue(value);
  1610. },
  1611. bulidContent: function ()
  1612. {
  1613. var g = this, p = this.options;
  1614. this.clearContent();
  1615. if (g.select)
  1616. {
  1617. g.setSelect();
  1618. }
  1619. else if (g.data)
  1620. {
  1621. g.setData(g.data);
  1622. }
  1623. else if (p.tree)
  1624. {
  1625. g.setTree(p.tree);
  1626. }
  1627. else if (p.grid)
  1628. {
  1629. g.setGrid(p.grid);
  1630. }
  1631. else if (p.url)
  1632. {
  1633. $.ajax({
  1634. type: 'post',
  1635. url: p.url,
  1636. cache: false,
  1637. dataType: 'json',
  1638. success: function (data)
  1639. {
  1640. g.data = data;
  1641. g.setData(g.data);
  1642. g.trigger('success', [g.data]);
  1643. },
  1644. error: function (XMLHttpRequest, textStatus)
  1645. {
  1646. g.trigger('error', [XMLHttpRequest, textStatus]);
  1647. }
  1648. });
  1649. }
  1650. },
  1651. clearContent: function ()
  1652. {
  1653. var g = this, p = this.options;
  1654. $("table", g.selectBox).html("");
  1655. //g.inputText.val("");
  1656. //g.valueField.val("");
  1657. },
  1658. setSelect: function ()
  1659. {
  1660. var g = this, p = this.options;
  1661. this.clearContent();
  1662. $('option', g.select).each(function (i)
  1663. {
  1664. var val = $(this).val();
  1665. var txt = $(this).html();
  1666. var tr = $("<tr><td index='" + i + "' value='" + val + "'>" + txt + "</td>");
  1667. $("table.l-table-nocheckbox", g.selectBox).append(tr);
  1668. $("td", tr).hover(function ()
  1669. {
  1670. $(this).addClass("l-over");
  1671. }, function ()
  1672. {
  1673. $(this).removeClass("l-over");
  1674. });
  1675. });
  1676. $('td:eq(' + g.select[0].selectedIndex + ')', g.selectBox).each(function ()
  1677. {
  1678. if ($(this).hasClass("l-selected"))
  1679. {
  1680. g.selectBox.hide();
  1681. return;
  1682. }
  1683. $(".l-selected", g.selectBox).removeClass("l-selected");
  1684. $(this).addClass("l-selected");
  1685. if (g.select[0].selectedIndex != $(this).attr('index') && g.select[0].onchange)
  1686. {
  1687. g.select[0].selectedIndex = $(this).attr('index'); g.select[0].onchange();
  1688. }
  1689. var newIndex = parseInt($(this).attr('index'));
  1690. g.select[0].selectedIndex = newIndex;
  1691. g.select.trigger("change");
  1692. g.selectBox.hide();
  1693. var value = $(this).attr("value");
  1694. var text = $(this).html();
  1695. if (p.render)
  1696. {
  1697. g.inputText.val(p.render(value, text));
  1698. }
  1699. else
  1700. {
  1701. g.inputText.val(text);
  1702. }
  1703. });
  1704. g._addClickEven();
  1705. },
  1706. setData: function (data)
  1707. {
  1708. var g = this, p = this.options;
  1709. this.clearContent();
  1710. if (!data || !data.length) return;
  1711. if (g.data != data) g.data = data;
  1712. if (p.columns)
  1713. {
  1714. g.selectBox.table.headrow = $("<tr class='l-table-headerow'><td width='18px'></td></tr>");
  1715. g.selectBox.table.append(g.selectBox.table.headrow);
  1716. g.selectBox.table.addClass("l-box-select-grid");
  1717. for (var j = 0; j < p.columns.length; j++)
  1718. {
  1719. var headrow = $("<td columnindex='" + j + "' columnname='" + p.columns[j].name + "'>" + p.columns[j].header + "</td>");
  1720. if (p.columns[j].width)
  1721. {
  1722. headrow.width(p.columns[j].width);
  1723. }
  1724. g.selectBox.table.headrow.append(headrow);
  1725. }
  1726. }
  1727. for (var i = 0; i < data.length; i++)
  1728. {
  1729. var val = data[i][p.valueField];
  1730. var txt = data[i][p.textField];
  1731. if (!p.columns)
  1732. {
  1733. $("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>");
  1734. $("table.l-table-nocheckbox", g.selectBox).append("<tr value='" + val + "'><td index='" + i + "' value='" + val + "' align='left'>" + txt + "</td>");
  1735. } else
  1736. {
  1737. var tr = $("<tr value='" + val + "'><td style='width:18px;' index='" + i + "' value='" + val + "' text='" + txt + "' ><input type='checkbox' /></td></tr>");
  1738. $("td", g.selectBox.table.headrow).each(function ()
  1739. {
  1740. var columnname = $(this).attr("columnname");
  1741. if (columnname)
  1742. {
  1743. var td = $("<td>" + data[i][columnname] + "</td>");
  1744. tr.append(td);
  1745. }
  1746. });
  1747. g.selectBox.table.append(tr);
  1748. }
  1749. }
  1750. //自定义复选框支持
  1751. if (p.isShowCheckBox && $.fn.ligerCheckBox)
  1752. {
  1753. $("table input:checkbox", g.selectBox).ligerCheckBox();
  1754. }
  1755. $(".l-table-checkbox input:checkbox", g.selectBox).change(function ()
  1756. {
  1757. if (this.checked && g.hasBind('beforeSelect'))
  1758. {
  1759. var parentTD = null;
  1760. if ($(this).parent().get(0).tagName.toLowerCase() == "div")
  1761. {
  1762. parentTD = $(this).parent().parent();
  1763. } else
  1764. {
  1765. parentTD = $(this).parent();
  1766. }
  1767. if (parentTD != null && g.trigger('beforeSelect', [parentTD.attr("value"), parentTD.attr("text")]) == false)
  1768. {
  1769. g.selectBox.slideToggle("fast");
  1770. return false;
  1771. }
  1772. }
  1773. if (!p.isMultiSelect)
  1774. {
  1775. if (this.checked)
  1776. {
  1777. $("input:checked", g.selectBox).not(this).each(function ()
  1778. {
  1779. this.checked = false;
  1780. $(".l-checkbox-checked", $(this).parent()).removeClass("l-checkbox-checked");
  1781. });
  1782. g.selectBox.slideToggle("fast");
  1783. }
  1784. }
  1785. g._checkboxUpdateValue();
  1786. });
  1787. $("table.l-table-nocheckbox td", g.selectBox).hover(function ()
  1788. {
  1789. $(this).addClass("l-over");
  1790. }, function ()
  1791. {
  1792. $(this).removeClass("l-over");
  1793. });
  1794. g._addClickEven();
  1795. //选择项初始化
  1796. g._dataInit();
  1797. },
  1798. //树
  1799. setTree: function (tree)
  1800. {
  1801. var g = this, p = this.options;
  1802. this.clearContent();
  1803. g.selectBox.table.remove();
  1804. if (tree.checkbox != false)
  1805. {
  1806. tree.onCheck = function ()
  1807. {
  1808. var nodes = g.treeManager.getChecked();
  1809. var value = [];
  1810. var text = [];
  1811. $(nodes).each(function (i, node)
  1812. {
  1813. if (p.treeLeafOnly && node.data.children) return;
  1814. value.push(node.data[p.valueField]);
  1815. text.push(node.data[p.textField]);
  1816. });
  1817. g._changeValue(value.join(p.split), text.join(p.split));
  1818. };
  1819. }
  1820. else
  1821. {
  1822. tree.onSelect = function (node)
  1823. {
  1824. if (p.treeLeafOnly && node.data.children) return;
  1825. var value = node.data[p.valueField];
  1826. var text = node.data[p.textField];
  1827. g._changeValue(value, text);
  1828. };
  1829. tree.onCancelSelect = function (node)
  1830. {
  1831. g._changeValue("", "");
  1832. };
  1833. }
  1834. tree.onAfterAppend = function (domnode, nodedata)
  1835. {
  1836. if (!g.treeManager) return;
  1837. var value = null;
  1838. if (p.initValue) value = p.initValue;
  1839. else if (g.valueField.val() != "") value = g.valueField.val();
  1840. g.selectValueByTree(value);
  1841. };
  1842. g.tree = $("<ul></ul>");
  1843. $("div:first", g.selectBox).append(g.tree);
  1844. g.tree.ligerTree(tree);
  1845. g.treeManager = g.tree.ligerGetTreeManager();
  1846. },
  1847. selectValueByTree: function (value)
  1848. {
  1849. var g = this, p = this.options;
  1850. if (value != null)
  1851. {
  1852. var text = "";
  1853. var valuelist = value.toString().split(p.split);
  1854. $(valuelist).each(function (i, item)
  1855. {
  1856. g.treeManager.selectNode(item.toString());
  1857. text += g.treeManager.getTextByID(item);
  1858. if (i < valuelist.length - 1) text += p.split;
  1859. });
  1860. g._changeValue(value, text);
  1861. }
  1862. },
  1863. //表格
  1864. setGrid: function (grid)
  1865. {
  1866. var g = this, p = this.options;
  1867. this.clearContent();
  1868. g.selectBox.table.remove();
  1869. g.grid = $("div:first", g.selectBox);
  1870. grid.columnWidth = grid.columnWidth || 120;
  1871. grid.width = "100%";
  1872. grid.height = "100%";
  1873. grid.heightDiff = -2;
  1874. grid.InWindow = false;
  1875. g.gridManager = g.grid.ligerGrid(grid);
  1876. p.hideOnLoseFocus = false;
  1877. if (grid.checkbox != false)
  1878. {
  1879. var onCheckRow = function ()
  1880. {
  1881. var rowsdata = g.gridManager.getCheckedRows();
  1882. var value = [];
  1883. var text = [];
  1884. $(rowsdata).each(function (i, rowdata)
  1885. {
  1886. value.push(rowdata[p.valueField]);
  1887. text.push(rowdata[p.textField]);
  1888. });
  1889. g._changeValue(value.join(p.split), text.join(p.split));
  1890. };
  1891. g.gridManager.bind('CheckAllRow', onCheckRow);
  1892. g.gridManager.bind('CheckRow', onCheckRow);
  1893. }
  1894. else
  1895. {
  1896. g.gridManager.bind('SelectRow', function (rowdata, rowobj, index)
  1897. {
  1898. var value = rowdata[p.valueField];
  1899. var text = rowdata[p.textField];
  1900. g._changeValue(value, text);
  1901. });
  1902. g.gridManager.bind('UnSelectRow', function (rowdata, rowobj, index)
  1903. {
  1904. g._changeValue("", "");
  1905. });
  1906. }
  1907. g.bind('show', function ()
  1908. {
  1909. if (g.gridManager)
  1910. {
  1911. g.gridManager._updateFrozenWidth();
  1912. }
  1913. });
  1914. g.bind('endResize', function ()
  1915. {
  1916. if (g.gridManager)
  1917. {
  1918. g.gridManager._updateFrozenWidth();
  1919. g.gridManager.setHeight(g.selectBox.height() - 2);
  1920. }
  1921. });
  1922. },
  1923. _getValue: function ()
  1924. {
  1925. return $(this.valueField).val();
  1926. },
  1927. getValue: function ()
  1928. {
  1929. //获取值
  1930. return this._getValue();
  1931. },
  1932. updateStyle: function ()
  1933. {
  1934. var g = this, p = this.options;
  1935. g._dataInit();
  1936. },
  1937. _dataInit: function ()
  1938. {
  1939. var g = this, p = this.options;
  1940. var value = null;
  1941. if (p.initValue != null && p.initText != null)
  1942. {
  1943. g._changeValue(p.initValue, p.initText);
  1944. }
  1945. //根据值来初始化
  1946. if (p.initValue != null)
  1947. {
  1948. value = p.initValue;
  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. //根据文本来初始化
  1961. else if (p.initText != null)
  1962. {
  1963. value = g.findValueByText(p.initText);
  1964. g._changeValue(value, p.initText);
  1965. }
  1966. else if (g.valueField.val() != "")
  1967. {
  1968. value = g.valueField.val();
  1969. if (p.tree)
  1970. {
  1971. if(value)
  1972. g.selectValueByTree(value);
  1973. }
  1974. else
  1975. {
  1976. var text = g.findTextByValue(value);
  1977. g._changeValue(value, text);
  1978. }
  1979. }
  1980. if (!p.isShowCheckBox && value != null)
  1981. {
  1982. $("table tr", g.selectBox).find("td:first").each(function ()
  1983. {
  1984. if (value == $(this).attr("value"))
  1985. {
  1986. $(this).addClass("l-selected");
  1987. }
  1988. });
  1989. }
  1990. if (p.isShowCheckBox && value != null)
  1991. {
  1992. $(":checkbox", g.selectBox).each(function ()
  1993. {
  1994. var parentTD = null;
  1995. var checkbox = $(this);
  1996. if (checkbox.parent().get(0).tagName.toLowerCase() == "div")
  1997. {
  1998. parentTD = checkbox.parent().parent();
  1999. } else
  2000. {
  2001. parentTD = checkbox.parent();
  2002. }
  2003. if (parentTD == null) return;
  2004. var valuearr = value.toString().split(p.split);
  2005. $(valuearr).each(function (i, item)
  2006. {
  2007. if (item == parentTD.attr("value"))
  2008. {
  2009. $(".l-checkbox", parentTD).addClass("l-checkbox-checked");
  2010. checkbox[0].checked = true;
  2011. }
  2012. });
  2013. });
  2014. }
  2015. },
  2016. //设置值到 文本框和隐藏域
  2017. _changeValue: function (newValue, newText)
  2018. {
  2019. var g = this, p = this.options;
  2020. g.valueField.val(newValue);
  2021. if (p.render)
  2022. {
  2023. g.inputText.val(p.render(newValue, newText));
  2024. }
  2025. else
  2026. {
  2027. g.inputText.val(newText);
  2028. }
  2029. g.selectedValue = newValue;
  2030. g.selectedText = newText;
  2031. g.inputText.trigger("change").focus();
  2032. g.trigger('selected', [newValue, newText]);
  2033. },
  2034. //更新选中的值(复选框)
  2035. _checkboxUpdateValue: function ()
  2036. {
  2037. var g = this, p = this.options;
  2038. var valueStr = "";
  2039. var textStr = "";
  2040. $("input:checked", g.selectBox).each(function ()
  2041. {
  2042. var parentTD = null;
  2043. if ($(this).parent().get(0).tagName.toLowerCase() == "div")
  2044. {
  2045. parentTD = $(this).parent().parent();
  2046. } else
  2047. {
  2048. parentTD = $(this).parent();
  2049. }
  2050. if (!parentTD) return;
  2051. valueStr += parentTD.attr("value") + p.split;
  2052. textStr += parentTD.attr("text") + p.split;
  2053. });
  2054. if (valueStr.length > 0) valueStr = valueStr.substr(0, valueStr.length - 1);
  2055. if (textStr.length > 0) textStr = textStr.substr(0, textStr.length - 1);
  2056. g._changeValue(valueStr, textStr);
  2057. },
  2058. _addClickEven: function ()
  2059. {
  2060. var g = this, p = this.options;
  2061. //选项点击
  2062. $(".l-table-nocheckbox td", g.selectBox).click(function ()
  2063. {
  2064. var value = $(this).attr("value");
  2065. var index = parseInt($(this).attr('index'));
  2066. var text = $(this).html();
  2067. if (g.hasBind('beforeSelect') && g.trigger('beforeSelect', [value, text]) == false)
  2068. {
  2069. if (p.slide) g.selectBox.slideToggle("fast");
  2070. else g.selectBox.hide();
  2071. return false;
  2072. }
  2073. if ($(this).hasClass("l-selected"))
  2074. {
  2075. if (p.slide) g.selectBox.slideToggle("fast");
  2076. else g.selectBox.hide();
  2077. return;
  2078. }
  2079. $(".l-selected", g.selectBox).removeClass("l-selected");
  2080. $(this).addClass("l-selected");
  2081. if (g.select)
  2082. {
  2083. if (g.select[0].selectedIndex != index)
  2084. {
  2085. g.select[0].selectedIndex = index;
  2086. g.select.trigger("change");
  2087. }
  2088. }
  2089. if (p.slide)
  2090. {
  2091. g.boxToggling = true;
  2092. g.selectBox.hide("fast", function ()
  2093. {
  2094. g.boxToggling = false;
  2095. })
  2096. } else g.selectBox.hide();
  2097. g._changeValue(value, text);
  2098. //添加值选择事件
  2099. g.onSelected;
  2100. });
  2101. },
  2102. updateSelectBoxPosition: function ()
  2103. {
  2104. var g = this, p = this.options;
  2105. if (p.absolute)
  2106. {
  2107. g.selectBox.css({ left: g.wrapper.offset().left, top: g.wrapper.offset().top + 1 + g.wrapper.outerHeight() });
  2108. }
  2109. else
  2110. {
  2111. var topheight = g.wrapper.offset().top - $(window).scrollTop();
  2112. var selfheight = g.selectBox.height() + textHeight + 4;
  2113. if (topheight + selfheight > $(window).height() && topheight > selfheight)
  2114. {
  2115. g.selectBox.css("marginTop", -1 * (g.selectBox.height() + textHeight + 5));
  2116. }
  2117. }
  2118. },
  2119. _toggleSelectBox: function (isHide)
  2120. {
  2121. var g = this, p = this.options;
  2122. var textHeight = g.wrapper.height();
  2123. g.boxToggling = true;
  2124. if (isHide)
  2125. {
  2126. if (p.slide)
  2127. {
  2128. g.selectBox.slideToggle('fast', function ()
  2129. {
  2130. g.boxToggling = false;
  2131. });
  2132. }
  2133. else
  2134. {
  2135. g.selectBox.hide();
  2136. g.boxToggling = false;
  2137. }
  2138. }
  2139. else
  2140. {
  2141. g.updateSelectBoxPosition();
  2142. if (p.slide)
  2143. {
  2144. g.selectBox.slideToggle('fast', function ()
  2145. {
  2146. g.boxToggling = false;
  2147. if (!p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0)
  2148. {
  2149. var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top);
  2150. $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet });
  2151. }
  2152. });
  2153. }
  2154. else
  2155. {
  2156. g.selectBox.show();
  2157. g.boxToggling = false;
  2158. if (!g.tree && !g.grid && !p.isShowCheckBox && $('td.l-selected', g.selectBox).length > 0)
  2159. {
  2160. var offSet = ($('td.l-selected', g.selectBox).offset().top - g.selectBox.offset().top);
  2161. $(".l-box-select-inner", g.selectBox).animate({ scrollTop: offSet });
  2162. }
  2163. }
  2164. }
  2165. g.isShowed = g.selectBox.is(":visible");
  2166. g.trigger('toggle', [isHide]);
  2167. g.trigger(isHide ? 'hide' : 'show');
  2168. }
  2169. });
  2170. $.ligerui.controls.ComboBox.prototype.setValue = $.ligerui.controls.ComboBox.prototype.selectValue;
  2171. //设置文本框和隐藏控件的值
  2172. $.ligerui.controls.ComboBox.prototype.setInputValue = $.ligerui.controls.ComboBox.prototype._changeValue;
  2173. })(jQuery);/**
  2174. * jQuery ligerUI 1.1.9
  2175. *
  2176. * http://ligerui.com
  2177. *
  2178. * Author daomi 2012 [ gd_star@163.com ]
  2179. *
  2180. */
  2181. (function ($)
  2182. {
  2183. $.fn.ligerDateEditor = function ()
  2184. {
  2185. return $.ligerui.run.call(this, "ligerDateEditor", arguments);
  2186. };
  2187. $.fn.ligerGetDateEditorManager = function ()
  2188. {
  2189. return $.ligerui.run.call(this, "ligerGetDateEditorManager", arguments);
  2190. };
  2191. $.ligerDefaults.DateEditor = {
  2192. format: "yyyy-MM-dd hh:mm",
  2193. showTime: false,
  2194. onChangeDate: false,
  2195. absolute: true //选择框是否在附加到body,并绝对定位
  2196. };
  2197. $.ligerDefaults.DateEditorString = {
  2198. dayMessage: ["日", "一", "二", "三", "四", "五", "六"],
  2199. monthMessage: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
  2200. todayMessage: "今天",
  2201. closeMessage: "关闭"
  2202. };
  2203. $.ligerMethos.DateEditor = {};
  2204. $.ligerui.controls.DateEditor = function (element, options)
  2205. {
  2206. $.ligerui.controls.DateEditor.base.constructor.call(this, element, options);
  2207. };
  2208. $.ligerui.controls.DateEditor.ligerExtend($.ligerui.controls.Input, {
  2209. __getType: function ()
  2210. {
  2211. return 'DateEditor';
  2212. },
  2213. __idPrev: function ()
  2214. {
  2215. return 'DateEditor';
  2216. },
  2217. _extendMethods: function ()
  2218. {
  2219. return $.ligerMethos.DateEditor;
  2220. },
  2221. _render: function ()
  2222. {
  2223. var g = this, p = this.options;
  2224. if (!p.showTime && p.format.indexOf(" hh:mm") > -1)
  2225. p.format = p.format.replace(" hh:mm", "");
  2226. if (this.element.tagName.toLowerCase() != "input" || this.element.type != "text")
  2227. return;
  2228. g.inputText = $(this.element);
  2229. if (!g.inputText.hasClass("l-text-field"))
  2230. g.inputText.addClass("l-text-field");
  2231. g.link = $('<div class="l-trigger"><div class="l-trigger-icon"></div></div>');
  2232. g.text = g.inputText.wrap('<div class="l-text l-text-date"></div>').parent();
  2233. g.text.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  2234. g.text.append(g.link);
  2235. //添加个包裹,
  2236. g.textwrapper = g.text.wrap('<div class="l-text-wrapper"></div>').parent();
  2237. var dateeditorHTML = "";
  2238. dateeditorHTML += "<div class='l-box-dateeditor' style='display:none'>";
  2239. dateeditorHTML += " <div class='l-box-dateeditor-header'>";
  2240. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-prevyear'><span></span></div>";
  2241. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-prevmonth'><span></span></div>";
  2242. 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>";
  2243. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-nextmonth'><span></span></div>";
  2244. dateeditorHTML += " <div class='l-box-dateeditor-header-btn l-box-dateeditor-header-nextyear'><span></span></div>";
  2245. dateeditorHTML += " </div>";
  2246. dateeditorHTML += " <div class='l-box-dateeditor-body'>";
  2247. dateeditorHTML += " <table cellpadding='0' cellspacing='0' border='0' class='l-box-dateeditor-calendar'>";
  2248. dateeditorHTML += " <thead>";
  2249. 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>";
  2250. dateeditorHTML += " </thead>";
  2251. dateeditorHTML += " <tbody>";
  2252. 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>";
  2253. dateeditorHTML += " </tbody>";
  2254. dateeditorHTML += " </table>";
  2255. 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>";
  2256. 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>";
  2257. 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>";
  2258. 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>";
  2259. dateeditorHTML += " </div>";
  2260. dateeditorHTML += " <div class='l-box-dateeditor-toolbar'>";
  2261. dateeditorHTML += " <div class='l-box-dateeditor-time'></div>";
  2262. dateeditorHTML += " <div class='l-button l-button-today'></div>";
  2263. dateeditorHTML += " <div class='l-button l-button-close'></div>";
  2264. dateeditorHTML += " <div class='l-clear'></div>";
  2265. dateeditorHTML += " </div>";
  2266. dateeditorHTML += "</div>";
  2267. g.dateeditor = $(dateeditorHTML);
  2268. if (p.absolute)
  2269. g.dateeditor.appendTo('body').addClass("l-box-dateeditor-absolute");
  2270. else
  2271. g.textwrapper.append(g.dateeditor);
  2272. g.header = $(".l-box-dateeditor-header", g.dateeditor);
  2273. g.body = $(".l-box-dateeditor-body", g.dateeditor);
  2274. g.toolbar = $(".l-box-dateeditor-toolbar", g.dateeditor);
  2275. g.body.thead = $("thead", g.body);
  2276. g.body.tbody = $("tbody", g.body);
  2277. g.body.monthselector = $(".l-box-dateeditor-monthselector", g.body);
  2278. g.body.yearselector = $(".l-box-dateeditor-yearselector", g.body);
  2279. g.body.hourselector = $(".l-box-dateeditor-hourselector", g.body);
  2280. g.body.minuteselector = $(".l-box-dateeditor-minuteselector", g.body);
  2281. g.toolbar.time = $(".l-box-dateeditor-time", g.toolbar);
  2282. g.toolbar.time.hour = $("<a></a>");
  2283. g.toolbar.time.minute = $("<a></a>");
  2284. g.buttons = {
  2285. btnPrevYear: $(".l-box-dateeditor-header-prevyear", g.header),
  2286. btnNextYear: $(".l-box-dateeditor-header-nextyear", g.header),
  2287. btnPrevMonth: $(".l-box-dateeditor-header-prevmonth", g.header),
  2288. btnNextMonth: $(".l-box-dateeditor-header-nextmonth", g.header),
  2289. btnYear: $(".l-box-dateeditor-header-year", g.header),
  2290. btnMonth: $(".l-box-dateeditor-header-month", g.header),
  2291. btnToday: $(".l-button-today", g.toolbar),
  2292. btnClose: $(".l-button-close", g.toolbar)
  2293. };
  2294. var nowDate = new Date();
  2295. g.now = {
  2296. year: nowDate.getFullYear(),
  2297. month: nowDate.getMonth() + 1, //注意这里
  2298. day: nowDate.getDay(),
  2299. date: nowDate.getDate(),
  2300. hour: nowDate.getHours(),
  2301. minute: nowDate.getMinutes()
  2302. };
  2303. //当前的时间
  2304. g.currentDate = {
  2305. year: nowDate.getFullYear(),
  2306. month: nowDate.getMonth() + 1,
  2307. day: nowDate.getDay(),
  2308. date: nowDate.getDate(),
  2309. hour: nowDate.getHours(),
  2310. minute: nowDate.getMinutes()
  2311. };
  2312. //选择的时间
  2313. g.selectedDate = null;
  2314. //使用的时间
  2315. g.usedDate = null;
  2316. //初始化数据
  2317. //设置周日至周六
  2318. $("td", g.body.thead).each(function (i, td)
  2319. {
  2320. $(td).html(p.dayMessage[i]);
  2321. });
  2322. //设置一月到十一二月
  2323. $("li", g.body.monthselector).each(function (i, li)
  2324. {
  2325. $(li).html(p.monthMessage[i]);
  2326. });
  2327. //设置按钮
  2328. g.buttons.btnToday.html(p.todayMessage);
  2329. g.buttons.btnClose.html(p.closeMessage);
  2330. //设置时间
  2331. if (p.showTime)
  2332. {
  2333. g.toolbar.time.show();
  2334. g.toolbar.time.append(g.toolbar.time.hour).append(":").append(g.toolbar.time.minute);
  2335. $("li", g.body.hourselector).each(function (i, item)
  2336. {
  2337. var str = i;
  2338. if (i < 10) str = "0" + i.toString();
  2339. $(this).html(str);
  2340. });
  2341. $("li", g.body.minuteselector).each(function (i, item)
  2342. {
  2343. var str = i;
  2344. if (i < 10) str = "0" + i.toString();
  2345. $(this).html(str);
  2346. });
  2347. }
  2348. //设置主体
  2349. g.bulidContent();
  2350. //初始化
  2351. if (g.inputText.val() != "")
  2352. g.onTextChange();
  2353. /**************
  2354. **bulid evens** wuhb
  2355. *************/
  2356. // g.dateeditor.hover(null, function (e)
  2357. // {
  2358. // if (g.dateeditor.is(":visible") && !g.editorToggling)
  2359. // {
  2360. // g.toggleDateEditor(true);
  2361. // }
  2362. // });
  2363. //toggle even
  2364. g.link.hover(function ()
  2365. {
  2366. if (p.disabled) return;
  2367. this.className = "l-trigger-hover";
  2368. }, function ()
  2369. {
  2370. if (p.disabled) return;
  2371. this.className = "l-trigger";
  2372. }).mousedown(function ()
  2373. {
  2374. if (p.disabled) return;
  2375. this.className = "l-trigger-pressed";
  2376. }).mouseup(function ()
  2377. {
  2378. if (p.disabled) return;
  2379. this.className = "l-trigger-hover";
  2380. }).click(function ()
  2381. {
  2382. if (p.disabled) return;
  2383. g.bulidContent();
  2384. g.toggleDateEditor(g.dateeditor.is(":visible"));
  2385. });
  2386. //不可用属性时处理
  2387. if (p.disabled)
  2388. {
  2389. g.inputText.attr("readonly", "readonly");
  2390. g.text.addClass('l-text-disabled');
  2391. }
  2392. //初始值
  2393. if (p.initValue)
  2394. {
  2395. g.inputText.val(p.initValue);
  2396. }
  2397. g.buttons.btnClose.click(function ()
  2398. {
  2399. g.toggleDateEditor(true);
  2400. });
  2401. //日期 点击
  2402. $("td", g.body.tbody).hover(function ()
  2403. {
  2404. if ($(this).hasClass("l-box-dateeditor-today")) return;
  2405. $(this).addClass("l-box-dateeditor-over");
  2406. }, function ()
  2407. {
  2408. $(this).removeClass("l-box-dateeditor-over");
  2409. }).click(function ()
  2410. {
  2411. $(".l-box-dateeditor-selected", g.body.tbody).removeClass("l-box-dateeditor-selected");
  2412. if (!$(this).hasClass("l-box-dateeditor-today"))
  2413. $(this).addClass("l-box-dateeditor-selected");
  2414. g.currentDate.date = parseInt($(this).html());
  2415. g.currentDate.day = new Date(g.currentDate.year, g.currentDate.month - 1, 1).getDay();
  2416. if ($(this).hasClass("l-box-dateeditor-out"))
  2417. {
  2418. if ($("tr", g.body.tbody).index($(this).parent()) == 0)
  2419. {
  2420. if (--g.currentDate.month == 0)
  2421. {
  2422. g.currentDate.month = 12;
  2423. g.currentDate.year--;
  2424. }
  2425. } else
  2426. {
  2427. if (++g.currentDate.month == 13)
  2428. {
  2429. g.currentDate.month = 1;
  2430. g.currentDate.year++;
  2431. }
  2432. }
  2433. }
  2434. g.selectedDate = {
  2435. year: g.currentDate.year,
  2436. month: g.currentDate.month,
  2437. date: g.currentDate.date
  2438. };
  2439. g.showDate();
  2440. g.editorToggling = true;
  2441. g.dateeditor.slideToggle('fast', function ()
  2442. {
  2443. g.editorToggling = false;
  2444. });
  2445. g.body.hourselector.slideUp("fast");
  2446. g.body.minuteselector.slideUp("fast");
  2447. });
  2448. $(".l-box-dateeditor-header-btn", g.header).hover(function ()
  2449. {
  2450. $(this).addClass("l-box-dateeditor-header-btn-over");
  2451. }, function ()
  2452. {
  2453. $(this).removeClass("l-box-dateeditor-header-btn-over");
  2454. });
  2455. //选择年份
  2456. g.buttons.btnYear.click(function ()
  2457. {
  2458. //build year list
  2459. if (!g.body.yearselector.is(":visible"))
  2460. {
  2461. $("li", g.body.yearselector).each(function (i, item)
  2462. {
  2463. var currentYear = g.currentDate.year + (i - 4);
  2464. if (currentYear == g.currentDate.year)
  2465. $(this).addClass("l-selected");
  2466. else
  2467. $(this).removeClass("l-selected");
  2468. $(this).html(currentYear);
  2469. });
  2470. }
  2471. g.body.yearselector.slideToggle();
  2472. });
  2473. g.body.yearselector.hover(function () { }, function ()
  2474. {
  2475. $(this).slideUp();
  2476. });
  2477. $("li", g.body.yearselector).click(function ()
  2478. {
  2479. g.currentDate.year = parseInt($(this).html());
  2480. g.body.yearselector.slideToggle();
  2481. g.bulidContent();
  2482. });
  2483. //select month
  2484. g.buttons.btnMonth.click(function ()
  2485. {
  2486. $("li", g.body.monthselector).each(function (i, item)
  2487. {
  2488. //add selected style
  2489. if (g.currentDate.month == i + 1)
  2490. $(this).addClass("l-selected");
  2491. else
  2492. $(this).removeClass("l-selected");
  2493. });
  2494. g.body.monthselector.slideToggle();
  2495. });
  2496. g.body.monthselector.hover(function () { }, function ()
  2497. {
  2498. $(this).slideUp("fast");
  2499. });
  2500. $("li", g.body.monthselector).click(function ()
  2501. {
  2502. var index = $("li", g.body.monthselector).index(this);
  2503. g.currentDate.month = index + 1;
  2504. g.body.monthselector.slideToggle();
  2505. g.bulidContent();
  2506. });
  2507. //选择小时
  2508. g.toolbar.time.hour.click(function ()
  2509. {
  2510. g.body.minuteselector.slideUp("fast");
  2511. $("li", g.body.hourselector).each(function (i, item)
  2512. {
  2513. //add selected style
  2514. if (g.currentDate.hour == i)
  2515. $(this).addClass("l-selected");
  2516. else
  2517. $(this).removeClass("l-selected");
  2518. });
  2519. g.body.hourselector.slideToggle();
  2520. });
  2521. // wuhb
  2522. // g.body.hourselector.hover(function () { }, function ()
  2523. // {
  2524. // $(this).slideUp("fast");
  2525. // });
  2526. $("li", g.body.hourselector).click(function ()
  2527. {
  2528. var index = $("li", g.body.hourselector).index(this);
  2529. g.currentDate.hour = index;
  2530. g.body.hourselector.slideToggle();
  2531. g.bulidContent();
  2532. });
  2533. //选择分钟
  2534. g.toolbar.time.minute.click(function ()
  2535. {
  2536. g.body.hourselector.slideUp("fast");
  2537. $("li", g.body.minuteselector).each(function (i, item)
  2538. {
  2539. //add selected style
  2540. if (g.currentDate.minute == i)
  2541. $(this).addClass("l-selected");
  2542. else
  2543. $(this).removeClass("l-selected");
  2544. });
  2545. g.body.minuteselector.slideToggle("fast", function ()
  2546. {
  2547. var index = $("li", this).index($('li.l-selected', this));
  2548. if (index > 29)
  2549. {
  2550. var offSet = ($('li.l-selected', this).offset().top - $(this).offset().top);
  2551. $(this).animate({ scrollTop: offSet });
  2552. }
  2553. });
  2554. });
  2555. // wuhb
  2556. // g.body.minuteselector.hover(function () { }, function ()
  2557. // {
  2558. // $(this).slideUp("fast");
  2559. // });
  2560. $("li", g.body.minuteselector).click(function ()
  2561. {
  2562. var index = $("li", g.body.minuteselector).index(this);
  2563. g.currentDate.minute = index;
  2564. g.body.minuteselector.slideToggle("fast");
  2565. g.bulidContent();
  2566. });
  2567. //上个月
  2568. g.buttons.btnPrevMonth.click(function ()
  2569. {
  2570. if (--g.currentDate.month == 0)
  2571. {
  2572. g.currentDate.month = 12;
  2573. g.currentDate.year--;
  2574. }
  2575. g.bulidContent();
  2576. });
  2577. //下个月
  2578. g.buttons.btnNextMonth.click(function ()
  2579. {
  2580. if (++g.currentDate.month == 13)
  2581. {
  2582. g.currentDate.month = 1;
  2583. g.currentDate.year++;
  2584. }
  2585. g.bulidContent();
  2586. });
  2587. //上一年
  2588. g.buttons.btnPrevYear.click(function ()
  2589. {
  2590. g.currentDate.year--;
  2591. g.bulidContent();
  2592. });
  2593. //下一年
  2594. g.buttons.btnNextYear.click(function ()
  2595. {
  2596. g.currentDate.year++;
  2597. g.bulidContent();
  2598. });
  2599. //今天
  2600. g.buttons.btnToday.click(function ()
  2601. {
  2602. g.currentDate = {
  2603. year: g.now.year,
  2604. month: g.now.month,
  2605. day: g.now.day,
  2606. date: g.now.date
  2607. };
  2608. g.selectedDate = {
  2609. year: g.now.year,
  2610. month: g.now.month,
  2611. day: g.now.day,
  2612. date: g.now.date
  2613. };
  2614. g.showDate();
  2615. g.dateeditor.slideToggle("fast");
  2616. g.body.hourselector.slideUp("fast");
  2617. g.body.minuteselector.slideUp("fast");
  2618. });
  2619. //文本框
  2620. g.inputText.change(function ()
  2621. {
  2622. g.onTextChange();
  2623. }).blur(function ()
  2624. {
  2625. g.text.removeClass("l-text-focus");
  2626. }).focus(function ()
  2627. {
  2628. g.text.addClass("l-text-focus");
  2629. });
  2630. g.text.hover(function ()
  2631. {
  2632. g.text.addClass("l-text-over");
  2633. }, function ()
  2634. {
  2635. g.text.removeClass("l-text-over");
  2636. });
  2637. //LEABEL 支持
  2638. if (p.label)
  2639. {
  2640. g.labelwrapper = g.textwrapper.wrap('<div class="l-labeltext"></div>').parent();
  2641. g.labelwrapper.prepend('<div class="l-text-label" style="float:left;display:inline;">' + p.label + ':&nbsp</div>');
  2642. g.textwrapper.css('float', 'left');
  2643. if (!p.labelWidth)
  2644. {
  2645. p.labelWidth = $('.l-text-label', g.labelwrapper).outerWidth();
  2646. } else
  2647. {
  2648. $('.l-text-label', g.labelwrapper).outerWidth(p.labelWidth);
  2649. }
  2650. $('.l-text-label', g.labelwrapper).width(p.labelWidth);
  2651. $('.l-text-label', g.labelwrapper).height(g.text.height());
  2652. g.labelwrapper.append('<br style="clear:both;" />');
  2653. if (p.labelAlign)
  2654. {
  2655. $('.l-text-label', g.labelwrapper).css('text-align', p.labelAlign);
  2656. }
  2657. g.textwrapper.css({ display: 'inline' });
  2658. g.labelwrapper.width(g.text.outerWidth() + p.labelWidth + 2);
  2659. }
  2660. g.set(p);
  2661. },
  2662. destroy: function ()
  2663. {
  2664. if (this.textwrapper) this.textwrapper.remove();
  2665. if (this.dateeditor) this.dateeditor.remove();
  2666. this.options = null;
  2667. $.ligerui.remove(this);
  2668. },
  2669. bulidContent: function ()
  2670. {
  2671. var g = this, p = this.options;
  2672. //当前月第一天星期
  2673. var thismonthFirstDay = new Date(g.currentDate.year, g.currentDate.month - 1, 1).getDay();
  2674. //当前月天数
  2675. var nextMonth = g.currentDate.month;
  2676. var nextYear = g.currentDate.year;
  2677. if (++nextMonth == 13)
  2678. {
  2679. nextMonth = 1;
  2680. nextYear++;
  2681. }
  2682. var monthDayNum = new Date(nextYear, nextMonth - 1, 0).getDate();
  2683. //当前上个月天数
  2684. var prevMonthDayNum = new Date(g.currentDate.year, g.currentDate.month - 1, 0).getDate();
  2685. g.buttons.btnMonth.html(p.monthMessage[g.currentDate.month - 1]);
  2686. g.buttons.btnYear.html(g.currentDate.year);
  2687. g.toolbar.time.hour.html(g.currentDate.hour);
  2688. g.toolbar.time.minute.html(g.currentDate.minute);
  2689. if (g.toolbar.time.hour.html().length == 1)
  2690. g.toolbar.time.hour.html("0" + g.toolbar.time.hour.html());
  2691. if (g.toolbar.time.minute.html().length == 1)
  2692. g.toolbar.time.minute.html("0" + g.toolbar.time.minute.html());
  2693. $("td", this.body.tbody).each(function () { this.className = "" });
  2694. $("tr", this.body.tbody).each(function (i, tr)
  2695. {
  2696. $("td", tr).each(function (j, td)
  2697. {
  2698. var id = i * 7 + (j - thismonthFirstDay);
  2699. var showDay = id + 1;
  2700. if (g.selectedDate && g.currentDate.year == g.selectedDate.year &&
  2701. g.currentDate.month == g.selectedDate.month &&
  2702. id + 1 == g.selectedDate.date)
  2703. {
  2704. if (j == 0 || j == 6)
  2705. {
  2706. $(td).addClass("l-box-dateeditor-holiday")
  2707. }
  2708. $(td).addClass("l-box-dateeditor-selected");
  2709. $(td).siblings().removeClass("l-box-dateeditor-selected");
  2710. }
  2711. else if (g.currentDate.year == g.now.year &&
  2712. g.currentDate.month == g.now.month &&
  2713. id + 1 == g.now.date)
  2714. {
  2715. if (j == 0 || j == 6)
  2716. {
  2717. $(td).addClass("l-box-dateeditor-holiday")
  2718. }
  2719. $(td).addClass("l-box-dateeditor-today");
  2720. }
  2721. else if (id < 0)
  2722. {
  2723. showDay = prevMonthDayNum + showDay;
  2724. $(td).addClass("l-box-dateeditor-out")
  2725. .removeClass("l-box-dateeditor-selected");
  2726. }
  2727. else if (id > monthDayNum - 1)
  2728. {
  2729. showDay = showDay - monthDayNum;
  2730. $(td).addClass("l-box-dateeditor-out")
  2731. .removeClass("l-box-dateeditor-selected");
  2732. }
  2733. else if (j == 0 || j == 6)
  2734. {
  2735. $(td).addClass("l-box-dateeditor-holiday")
  2736. .removeClass("l-box-dateeditor-selected");
  2737. }
  2738. else
  2739. {
  2740. td.className = "";
  2741. }
  2742. $(td).html(showDay);
  2743. });
  2744. });
  2745. },
  2746. updateSelectBoxPosition: function ()
  2747. {
  2748. var g = this, p = this.options;
  2749. /**
  2750. * zys 2013-1-15
  2751. * var textHeight = g.text.height();
  2752. */
  2753. var textHeight = g.text.height();
  2754. if (p.absolute)
  2755. {
  2756. g.dateeditor.css({ left: g.text.offset().left, top: g.text.offset().top + 1 + g.text.outerHeight() });
  2757. }
  2758. else
  2759. {
  2760. if (g.text.offset().top + 4 > g.dateeditor.height() && g.text.offset().top + g.dateeditor.height() + textHeight + 4 - $(window).scrollTop() > $(window).height())
  2761. {
  2762. g.dateeditor.css("marginTop", -1 * (g.dateeditor.height() + textHeight + 5));
  2763. g.showOnTop = true;
  2764. }
  2765. else
  2766. {
  2767. g.showOnTop = false;
  2768. }
  2769. }
  2770. },
  2771. toggleDateEditor: function (isHide)
  2772. {
  2773. var g = this, p = this.options;
  2774. var textHeight = g.text.height();
  2775. g.editorToggling = true;
  2776. g.body.hourselector.slideUp("fast");
  2777. g.body.minuteselector.slideUp("fast");
  2778. if (isHide)
  2779. {
  2780. g.dateeditor.hide('fast', function ()
  2781. {
  2782. g.editorToggling = false;
  2783. });
  2784. }
  2785. else
  2786. {
  2787. g.updateSelectBoxPosition();
  2788. g.dateeditor.slideDown('fast', function ()
  2789. {
  2790. g.editorToggling = false;
  2791. });
  2792. }
  2793. },
  2794. showDate: function ()
  2795. {
  2796. var g = this, p = this.options;
  2797. if (!this.selectedDate) return;
  2798. var dateStr = g.selectedDate.year + "/" + g.selectedDate.month + "/" + g.selectedDate.date;
  2799. this.currentDate.hour = parseInt(g.toolbar.time.hour.html(), 10);
  2800. this.currentDate.minute = parseInt(g.toolbar.time.minute.html(), 10);
  2801. if (p.showTime)
  2802. {
  2803. dateStr += " " + this.currentDate.hour + ":" + this.currentDate.minute;
  2804. }
  2805. this.inputText.val(dateStr);
  2806. this.inputText.trigger("change").focus();
  2807. },
  2808. isDateTime: function (dateStr)
  2809. {
  2810. var g = this, p = this.options;
  2811. var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  2812. if (r == null) return false;
  2813. var d = new Date(r[1], r[3] - 1, r[4]);
  2814. if (d == "NaN") return false;
  2815. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
  2816. },
  2817. isLongDateTime: function (dateStr)
  2818. {
  2819. var g = this, p = this.options;
  2820. var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
  2821. var r = dateStr.match(reg);
  2822. if (r == null) return false;
  2823. var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
  2824. if (d == "NaN") return false;
  2825. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
  2826. },
  2827. getFormatDate: function (date)
  2828. {
  2829. var g = this, p = this.options;
  2830. if (date == "NaN") return null;
  2831. var format = p.format;
  2832. var o = {
  2833. "M+": date.getMonth() + 1,
  2834. "d+": date.getDate(),
  2835. "h+": date.getHours(),
  2836. "m+": date.getMinutes(),
  2837. "s+": date.getSeconds(),
  2838. "q+": Math.floor((date.getMonth() + 3) / 3),
  2839. "S": date.getMilliseconds()
  2840. }
  2841. if (/(y+)/.test(format))
  2842. {
  2843. format = format.replace(RegExp.$1, (date.getFullYear() + "")
  2844. .substr(4 - RegExp.$1.length));
  2845. }
  2846. for (var k in o)
  2847. {
  2848. if (new RegExp("(" + k + ")").test(format))
  2849. {
  2850. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
  2851. : ("00" + o[k]).substr(("" + o[k]).length));
  2852. }
  2853. }
  2854. return format;
  2855. },
  2856. onTextChange: function ()
  2857. {
  2858. var g = this, p = this.options;
  2859. var val = g.inputText.val();
  2860. if (val == "")
  2861. {
  2862. g.selectedDate = null;
  2863. return true;
  2864. }
  2865. if (!p.showTime && !g.isDateTime(val))
  2866. {
  2867. //恢复
  2868. if (!g.usedDate)
  2869. {
  2870. g.inputText.val("");
  2871. } else
  2872. {
  2873. g.inputText.val(g.getFormatDate(g.usedDate));
  2874. }
  2875. }
  2876. else if (p.showTime && !g.isLongDateTime(val))
  2877. {
  2878. //恢复
  2879. if (!g.usedDate)
  2880. {
  2881. g.inputText.val("");
  2882. } else
  2883. {
  2884. g.inputText.val(g.getFormatDate(g.usedDate));
  2885. }
  2886. }
  2887. else
  2888. {
  2889. val = val.replace(/-/g, "/");
  2890. var formatVal = g.getFormatDate(new Date(val));
  2891. if (formatVal == null)
  2892. {
  2893. //恢复
  2894. if (!g.usedDate)
  2895. {
  2896. g.inputText.val("");
  2897. } else
  2898. {
  2899. g.inputText.val(g.getFormatDate(g.usedDate));
  2900. }
  2901. }
  2902. g.usedDate = new Date(val); //记录
  2903. g.selectedDate = {
  2904. year: g.usedDate.getFullYear(),
  2905. month: g.usedDate.getMonth() + 1, //注意这里
  2906. day: g.usedDate.getDay(),
  2907. date: g.usedDate.getDate(),
  2908. hour: g.usedDate.getHours(),
  2909. minute: g.usedDate.getMinutes()
  2910. };
  2911. g.currentDate = {
  2912. year: g.usedDate.getFullYear(),
  2913. month: g.usedDate.getMonth() + 1, //注意这里
  2914. day: g.usedDate.getDay(),
  2915. date: g.usedDate.getDate(),
  2916. hour: g.usedDate.getHours(),
  2917. minute: g.usedDate.getMinutes()
  2918. };
  2919. g.inputText.val(formatVal);
  2920. g.trigger('changeDate', [formatVal]);
  2921. if ($(g.dateeditor).is(":visible"))
  2922. g.bulidContent();
  2923. }
  2924. },
  2925. _setHeight: function (value)
  2926. {
  2927. var g = this;
  2928. if (value > 4)
  2929. {
  2930. g.text.css({ height: value });
  2931. g.inputText.css({ height: value });
  2932. g.textwrapper.css({ height: value });
  2933. }
  2934. },
  2935. _setWidth: function (value)
  2936. {
  2937. var g = this;
  2938. if (value > 20)
  2939. {
  2940. g.text.css({ width: value });
  2941. g.inputText.css({ width: value - 20 });
  2942. g.textwrapper.css({ width: value });
  2943. }
  2944. },
  2945. _setValue: function (value)
  2946. {
  2947. var g = this;
  2948. if (!value) g.inputText.val('');
  2949. if (typeof value == "string")
  2950. {
  2951. g.inputText.val(value);
  2952. }
  2953. else if (typeof value == "object")
  2954. {
  2955. if (value instanceof Date)
  2956. {
  2957. g.inputText.val(g.getFormatDate(value));
  2958. g.onTextChange();
  2959. }
  2960. }
  2961. },
  2962. _getValue: function ()
  2963. {
  2964. return this.usedDate;
  2965. },
  2966. setEnabled: function ()
  2967. {
  2968. var g = this, p = this.options;
  2969. this.inputText.removeAttr("readonly");
  2970. this.text.removeClass('l-text-disabled');
  2971. p.disabled = false;
  2972. },
  2973. setDisabled: function ()
  2974. {
  2975. var g = this, p = this.options;
  2976. this.inputText.attr("readonly", "readonly");
  2977. this.text.addClass('l-text-disabled');
  2978. p.disabled = true;
  2979. }
  2980. });
  2981. })(jQuery);/**
  2982. * jQuery ligerUI 1.1.9
  2983. *
  2984. * http://ligerui.com
  2985. *
  2986. * Author daomi 2012 [ gd_star@163.com ]
  2987. *
  2988. */
  2989. (function ($)
  2990. {
  2991. var l = $.ligerui;
  2992. //全局事件
  2993. $(".l-dialog-btn").live('mouseover', function ()
  2994. {
  2995. $(this).addClass("l-dialog-btn-over");
  2996. }).live('mouseout', function ()
  2997. {
  2998. $(this).removeClass("l-dialog-btn-over");
  2999. });
  3000. $(".l-dialog-tc .l-dialog-close").live('mouseover', function ()
  3001. {
  3002. $(this).addClass("l-dialog-close-over");
  3003. }).live('mouseout', function ()
  3004. {
  3005. $(this).removeClass("l-dialog-close-over");
  3006. });
  3007. $.ligerDialog = function ()
  3008. {
  3009. return l.run.call(null, "ligerDialog", arguments, { isStatic: true });
  3010. };
  3011. //dialog 图片文件夹的路径 预加载
  3012. $.ligerui.DialogImagePath = "../../lib/ligerUI/skins/Aqua/images/win/";
  3013. function prevImage(paths)
  3014. {
  3015. for (var i in paths)
  3016. {
  3017. $('<img />').attr('src', l.DialogImagePath + paths[i]);
  3018. }
  3019. }
  3020. //prevImage(['dialog.gif', 'dialog-winbtns.gif', 'dialog-bc.gif', 'dialog-tc.gif']);
  3021. $.ligerDefaults.Dialog = {
  3022. cls: null, //给dialog附加css class
  3023. id: null, //给dialog附加id
  3024. buttons: null, //按钮集合
  3025. isDrag: true, //是否拖动
  3026. width: 280, //宽度
  3027. height: null, //高度,默认自适应
  3028. content: '', //内容
  3029. target: null, //目标对象,指定它将以appendTo()的方式载入
  3030. url: null, //目标页url,默认以iframe的方式载入
  3031. load: false, //是否以load()的方式加载目标页的内容
  3032. onLoaded: null,
  3033. type: 'none', //类型 warn、success、error、question
  3034. left: null, //位置left
  3035. top: null, //位置top
  3036. modal: true, //是否模态对话框
  3037. name: null, //创建iframe时 作为iframe的name和id
  3038. isResize: false, // 是否调整大小
  3039. allowClose: true, //允许关闭
  3040. opener: null,
  3041. timeParmName: null, //是否给URL后面加上值为new Date().getTime()的参数,如果需要指定一个参数名即可
  3042. closeWhenEnter: null, //回车时是否关闭dialog
  3043. isHidden: true, //关闭对话框时是否只是隐藏,还是销毁对话框
  3044. show: true, //初始化时是否马上显示
  3045. title: '提示', //头部
  3046. showMax: false, //是否显示最大化按钮
  3047. showToggle: false, //是否显示收缩窗口按钮
  3048. showMin: false, //是否显示最小化按钮
  3049. slide: $.browser.msie ? false : true, //是否以动画的形式显示
  3050. fixedType: null, //在固定的位置显示, 可以设置的值有n, e, s, w, ne, se, sw, nw
  3051. showType: null , //显示类型,可以设置为slide(固定显示时有效)
  3052. containerId: null //更新于 赵以升 2013年5月29日。容器id,dialog创建的div包含于该id所对应的页面对象内。默认为body
  3053. };
  3054. $.ligerDefaults.DialogString = {
  3055. titleMessage: '提示', //提示文本标题
  3056. ok: '确定',
  3057. yes: '是',
  3058. no: '否',
  3059. cancel: '取消',
  3060. waittingMessage: '正在等待中,请稍候...'
  3061. };
  3062. $.ligerMethos.Dialog = $.ligerMethos.Dialog || {};
  3063. l.controls.Dialog = function (options)
  3064. {
  3065. l.controls.Dialog.base.constructor.call(this, null, options);
  3066. };
  3067. l.controls.Dialog.ligerExtend(l.core.Win, {
  3068. __getType: function ()
  3069. {
  3070. return 'Dialog';
  3071. },
  3072. __idPrev: function ()
  3073. {
  3074. return 'Dialog';
  3075. },
  3076. _extendMethods: function ()
  3077. {
  3078. return $.ligerMethos.Dialog;
  3079. },
  3080. _render: function ()
  3081. {
  3082. var g = this, p = this.options;
  3083. var tmpId = "";
  3084. g.set(p, true);
  3085. 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>');
  3086. // 修改于 赵以升 2013年5月29日。新增对dialog容器的定义;
  3087. if(p.containerId == null){
  3088. $('body').append(dialog);
  3089. } else {
  3090. $('#' + p.containerId).append(dialog);
  3091. }
  3092. // $('body').append(dialog);
  3093. g.dialog = dialog;
  3094. g.element = dialog[0];
  3095. g.dialog.body = $(".l-dialog-body:first", g.dialog);
  3096. g.dialog.header = $(".l-dialog-tc-inner:first", g.dialog);
  3097. g.dialog.winbtns = $(".l-dialog-winbtns:first", g.dialog.header);
  3098. g.dialog.buttons = $(".l-dialog-buttons:first", g.dialog);
  3099. g.dialog.content = $(".l-dialog-content:first", g.dialog);
  3100. g.set(p, false);
  3101. if(p.height&&p.height!='auto'){
  3102. g.dialog.content.height(p.height);
  3103. }
  3104. if (p.allowClose == false) $(".l-dialog-close", g.dialog).remove();
  3105. if (p.target || p.url || p.type == "none")
  3106. {
  3107. p.type = null;
  3108. g.dialog.addClass("l-dialog-win");
  3109. }
  3110. if (p.cls) g.dialog.addClass(p.cls);
  3111. if (p.id) g.dialog.attr("id", p.id);
  3112. //设置锁定屏幕、拖动支持 和设置图片
  3113. g.mask();
  3114. if (p.isDrag)
  3115. g._applyDrag();
  3116. if (p.isResize)
  3117. g._applyResize();
  3118. if (p.type)
  3119. g._setImage();
  3120. else
  3121. {
  3122. $(".l-dialog-image", g.dialog).remove();
  3123. g.dialog.content.addClass("l-dialog-content-noimage");
  3124. }
  3125. if (!p.show)
  3126. {
  3127. g.unmask();
  3128. g.dialog.hide();
  3129. }
  3130. //设置主体内容
  3131. if (p.target)
  3132. {
  3133. g.dialog.content.prepend(p.target);
  3134. $(p.target).show();
  3135. }
  3136. else if (p.url)
  3137. {
  3138. if (p.timeParmName)
  3139. {
  3140. p.url += p.url.indexOf('?') == -1 ? "?" : "&";
  3141. p.url += p.timeParmName + "=" + new Date().getTime();
  3142. }
  3143. if (p.load)
  3144. {
  3145. g.dialog.body.load(p.url, function ()
  3146. {
  3147. g._saveStatus();
  3148. g.trigger('loaded');
  3149. });
  3150. }
  3151. else
  3152. {
  3153. g.jiframe = $("<iframe frameborder='0'></iframe>");
  3154. var framename = p.name ? p.name : "ligerwindow" + new Date().getTime();
  3155. g.jiframe.attr("name", framename);
  3156. g.jiframe.attr("id", framename);
  3157. g.dialog.content.prepend(g.jiframe);
  3158. g.dialog.content.addClass("l-dialog-content-nopadding l-dialog-content-frame");
  3159. setTimeout(function ()
  3160. {
  3161. if (g.dialog.body.find(".l-dialog-loading:first").length == 0)
  3162. g.dialog.body.append("<div class='l-dialog-loading' style='display:block;'></div>");
  3163. var iframeloading = $(".l-dialog-loading:first", g.dialog.body);
  3164. g.jiframe[0].dialog = g;//增加窗口对dialog对象的引用
  3165. /*
  3166. 可以在子窗口这样使用:
  3167. var dialog = frameElement.dialog;
  3168. var dialogData = dialog.get('data');//获取data参数
  3169. dialog.set('title','新标题'); //设置标题
  3170. dialog.close();//关闭dialog
  3171. */
  3172. g.jiframe.attr("src", p.url).bind('load.dialog', function ()
  3173. {
  3174. iframeloading.hide();
  3175. g.trigger('loaded');
  3176. });
  3177. g.frame = window.frames[g.jiframe.attr("name")];
  3178. // g.jiframe.attr("src", p.url);
  3179. // g.frame = window.frames[g.jiframe.attr("name")];
  3180. }, 0);
  3181. // 为了解决ie下对含有iframe的div窗口销毁不正确,进而导致第二次打开时焦点不在当前图层的问题
  3182. // 加入以下代码
  3183. tmpId = 'jquery_ligerui_' + new Date().getTime();
  3184. g.tmpInput = $("<input></input>");
  3185. g.tmpInput.attr("id", tmpId);
  3186. g.dialog.content.prepend(g.tmpInput);
  3187. }
  3188. }
  3189. if (p.opener) g.dialog.opener = p.opener;
  3190. //设置按钮
  3191. if (p.buttons)
  3192. {
  3193. $(p.buttons).each(function (i, item)
  3194. {
  3195. 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>');
  3196. $(".l-dialog-btn-inner", btn).html(item.text);
  3197. $(".l-dialog-buttons-inner", g.dialog.buttons).prepend(btn);
  3198. item.width && btn.width(item.width);
  3199. item.onclick && btn.click(function () { item.onclick(item, g, i) });
  3200. });
  3201. } else
  3202. {
  3203. g.dialog.buttons.remove();
  3204. }
  3205. $(".l-dialog-buttons-inner", g.dialog.buttons).append("<div class='l-clear'></div>");
  3206. $(".l-dialog-title", g.dialog)
  3207. .bind("selectstart", function () { return false; });
  3208. g.dialog.click(function ()
  3209. {
  3210. l.win.setFront(g);
  3211. });
  3212. //设置事件
  3213. $(".l-dialog-tc .l-dialog-close", g.dialog).click(function ()
  3214. {
  3215. if (p.isHidden)
  3216. g.hide();
  3217. else
  3218. g.close();
  3219. });
  3220. if(p.isTitle){
  3221. g.dialog.empty();
  3222. g.dialog.append(g.dialog.body);
  3223. }
  3224. if (!p.fixedType)
  3225. {
  3226. //位置初始化
  3227. var left = 0;
  3228. var top = 0;
  3229. if(p.width=='auto')p.width = g.dialog.width()+g._borderX+20;
  3230. if(p.height=='auto')p.height = g.dialog.height();
  3231. var width = p.width || g.dialog.width();
  3232. if (p.slide == true) p.slide = 'fast';
  3233. if (p.left != null) left = p.left;
  3234. else p.left = left = 0.5 * ($(window).width() - width);
  3235. if (p.top != null) top = p.top;
  3236. else p.top = top = 0.5 * ($(window).height() - g.dialog.height()) + $(window).scrollTop() - 10;
  3237. if (left < 0) p.left = left = 0;
  3238. if (top < 0) p.top = top = 0;
  3239. if(g.dialog.height()>$(window).height()){
  3240. top = 0;
  3241. g.dialog.content.animate({height:$(window).height() - g._borderY - g.dialog.buttons.outerHeight()}, p.slide, function ()
  3242. {
  3243. g._onReisze();
  3244. });
  3245. }
  3246. g.dialog.css({ left: left, top: top });
  3247. }
  3248. g.show();
  3249. $('body').bind('keydown.dialog', function (e)
  3250. {
  3251. var key = e.which;
  3252. if (key == 13)
  3253. {
  3254. g.enter();
  3255. }
  3256. else if (key == 27)
  3257. {
  3258. g.esc();
  3259. }
  3260. });
  3261. g._updateBtnsWidth();
  3262. g._saveStatus();
  3263. g._onReisze();
  3264. if (tmpId != "")
  3265. {
  3266. $("#" + tmpId).focus();
  3267. $("#" + tmpId).remove();
  3268. }
  3269. },
  3270. _borderX: 12,
  3271. _borderY: 32,
  3272. doMax: function (slide)
  3273. {
  3274. var g = this, p = this.options;
  3275. var width = $(window).width(), height = $(window).height(), left = 0, top = 0;
  3276. if (l.win.taskbar)
  3277. {
  3278. height -= l.win.taskbar.outerHeight();
  3279. if (l.win.top) top += l.win.taskbar.outerHeight();
  3280. }
  3281. if (slide)
  3282. {
  3283. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  3284. g.dialog.animate({ left: left, top: top }, p.slide);
  3285. g.dialog.content.animate({ height: height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  3286. {
  3287. g._onReisze();
  3288. });
  3289. }
  3290. else
  3291. {
  3292. if(g.isIE7)height = height-10;
  3293. g.set({ width: width, height: height, left: left, top: top });
  3294. g._onReisze();
  3295. }
  3296. },
  3297. isIE7:function(){
  3298. if(navigator.appName == "Microsoft Internet Explorer" && navigator.appVersion.match(/7./i)=="7."){
  3299. return true;
  3300. }
  3301. return false;
  3302. },
  3303. //最大化
  3304. max: function ()
  3305. {
  3306. var g = this, p = this.options;
  3307. if (g.winmax)
  3308. {
  3309. g.winmax.addClass("l-dialog-recover");
  3310. g.doMax(p.slide);
  3311. if (g.wintoggle)
  3312. {
  3313. if (g.wintoggle.hasClass("l-dialog-extend"))
  3314. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-extend-disabled");
  3315. else
  3316. g.wintoggle.addClass("l-dialog-toggle-disabled l-dialog-collapse-disabled");
  3317. }
  3318. if (g.resizable) g.resizable.set({ disabled: true });
  3319. if (g.draggable) g.draggable.set({ disabled: true });
  3320. g.maximum = true;
  3321. $(window).bind('resize.dialogmax', function ()
  3322. {
  3323. g.doMax(false);
  3324. });
  3325. }
  3326. },
  3327. //恢复
  3328. recover: function ()
  3329. {
  3330. var g = this, p = this.options;
  3331. if (g.winmax)
  3332. {
  3333. g.winmax.removeClass("l-dialog-recover");
  3334. if (p.slide)
  3335. {
  3336. g.dialog.body.animate({ width: g._width - g._borderX }, p.slide);
  3337. g.dialog.animate({ left: g._left, top: g._top }, p.slide);
  3338. g.dialog.content.animate({ height: g._height - g._borderY - g.dialog.buttons.outerHeight() }, p.slide, function ()
  3339. {
  3340. g._onReisze();
  3341. });
  3342. }
  3343. else
  3344. {
  3345. g.set({ width: g._width, height: g._height, left: g._left, top: g._top });
  3346. g._onReisze();
  3347. }
  3348. if (g.wintoggle)
  3349. {
  3350. g.wintoggle.removeClass("l-dialog-toggle-disabled l-dialog-extend-disabled l-dialog-collapse-disabled");
  3351. }
  3352. $(window).unbind('resize.dialogmax');
  3353. }
  3354. if (this.resizable) this.resizable.set({ disabled: false });
  3355. if (g.draggable) g.draggable.set({ disabled: false });
  3356. g.maximum = false;
  3357. },
  3358. //最小化
  3359. min: function ()
  3360. {
  3361. var g = this, p = this.options;
  3362. var task = l.win.getTask(this);
  3363. if (p.slide)
  3364. {
  3365. g.dialog.body.animate({ width: 1 }, p.slide);
  3366. task.y = task.offset().top + task.height();
  3367. task.x = task.offset().left + task.width() / 2;
  3368. g.dialog.animate({ left: task.x, top: task.y }, p.slide, function ()
  3369. {
  3370. g.dialog.hide();
  3371. });
  3372. }
  3373. else
  3374. {
  3375. g.dialog.hide();
  3376. }
  3377. g.unmask();
  3378. g.minimize = true;
  3379. g.actived = false;
  3380. },
  3381. active: function ()
  3382. {
  3383. var g = this, p = this.options;
  3384. if (g.minimize)
  3385. {
  3386. var width = g._width, height = g._height, left = g._left, top = g._top;
  3387. if (g.maximum)
  3388. {
  3389. width = $(window).width();
  3390. height = $(window).height();
  3391. left = top = 0;
  3392. if (l.win.taskbar)
  3393. {
  3394. height -= l.win.taskbar.outerHeight();
  3395. if (l.win.top) top += l.win.taskbar.outerHeight();
  3396. }
  3397. }
  3398. if (p.slide)
  3399. {
  3400. g.dialog.body.animate({ width: width - g._borderX }, p.slide);
  3401. g.dialog.animate({ left: left, top: top }, p.slide);
  3402. }
  3403. else
  3404. {
  3405. g.set({ width: width, height: height, left: left, top: top });
  3406. }
  3407. }
  3408. g.actived = true;
  3409. g.minimize = false;
  3410. l.win.setFront(g);
  3411. g.show();
  3412. },
  3413. //展开 收缩
  3414. toggle: function ()
  3415. {
  3416. var g = this, p = this.options;
  3417. if (!g.wintoggle) return;
  3418. if (g.wintoggle.hasClass("l-dialog-extend"))
  3419. g.extend();
  3420. else
  3421. g.collapse();
  3422. },
  3423. //收缩
  3424. collapse: function ()
  3425. {
  3426. var g = this, p = this.options;
  3427. if (!g.wintoggle) return;
  3428. if (p.slide)
  3429. g.dialog.content.animate({ height: 1 }, p.slide);
  3430. else
  3431. g.dialog.content.height(1);
  3432. if (this.resizable) this.resizable.set({ disabled: true });
  3433. },
  3434. //展开
  3435. extend: function ()
  3436. {
  3437. var g = this, p = this.options;
  3438. if (!g.wintoggle) return;
  3439. var contentHeight = g._height - g._borderY - g.dialog.buttons.outerHeight();
  3440. if (p.slide)
  3441. g.dialog.content.animate({ height: contentHeight }, p.slide);
  3442. else
  3443. g.dialog.content.height(contentHeight);
  3444. if (this.resizable) this.resizable.set({ disabled: false });
  3445. },
  3446. _updateBtnsWidth: function ()
  3447. {
  3448. var g = this;
  3449. var btnscount = $(">div", g.dialog.winbtns).length;
  3450. g.dialog.winbtns.width(22 * btnscount);
  3451. },
  3452. _setLeft: function (value)
  3453. {
  3454. if (!this.dialog) return;
  3455. if (value != null)
  3456. this.dialog.css({ left: value });
  3457. },
  3458. _setTop: function (value)
  3459. {
  3460. if (!this.dialog) return;
  3461. if (value != null)
  3462. this.dialog.css({ top: value });
  3463. },
  3464. _setWidth: function (value)
  3465. {
  3466. if (!this.dialog) return;
  3467. if (value >= this._borderX)
  3468. {
  3469. this.dialog.body.width(value - this._borderX);
  3470. }
  3471. },
  3472. _setHeight: function (value)
  3473. {
  3474. var g = this, p = this.options;
  3475. if (!this.dialog) return;
  3476. if (value >= this._borderY)
  3477. {
  3478. var height = value - this._borderY - g.dialog.buttons.outerHeight();
  3479. g.dialog.content.height(height);
  3480. }
  3481. },
  3482. _setShowMax: function (value)
  3483. {
  3484. var g = this, p = this.options;
  3485. if (value)
  3486. {
  3487. if (!g.winmax)
  3488. {
  3489. g.winmax = $('<div class="l-dialog-winbtn l-dialog-max"></div>').appendTo(g.dialog.winbtns)
  3490. .hover(function ()
  3491. {
  3492. if ($(this).hasClass("l-dialog-recover"))
  3493. $(this).addClass("l-dialog-recover-over");
  3494. else
  3495. $(this).addClass("l-dialog-max-over");
  3496. }, function ()
  3497. {
  3498. $(this).removeClass("l-dialog-max-over l-dialog-recover-over");
  3499. }).click(function ()
  3500. {
  3501. if ($(this).hasClass("l-dialog-recover"))
  3502. g.recover();
  3503. else
  3504. g.max();
  3505. });
  3506. }
  3507. }
  3508. else if (g.winmax)
  3509. {
  3510. g.winmax.remove();
  3511. g.winmax = null;
  3512. }
  3513. g._updateBtnsWidth();
  3514. },
  3515. _setShowMin: function (value)
  3516. {
  3517. var g = this, p = this.options;
  3518. if (value)
  3519. {
  3520. if (!g.winmin)
  3521. {
  3522. g.winmin = $('<div class="l-dialog-winbtn l-dialog-min"></div>').appendTo(g.dialog.winbtns)
  3523. .hover(function ()
  3524. {
  3525. $(this).addClass("l-dialog-min-over");
  3526. }, function ()
  3527. {
  3528. $(this).removeClass("l-dialog-min-over");
  3529. }).click(function ()
  3530. {
  3531. g.min();
  3532. });
  3533. l.win.addTask(g);
  3534. }
  3535. }
  3536. else if (g.winmin)
  3537. {
  3538. g.winmin.remove();
  3539. g.winmin = null;
  3540. }
  3541. g._updateBtnsWidth();
  3542. },
  3543. _setShowToggle: function (value)
  3544. {
  3545. var g = this, p = this.options;
  3546. if (value)
  3547. {
  3548. if (!g.wintoggle)
  3549. {
  3550. g.wintoggle = $('<div class="l-dialog-winbtn l-dialog-collapse"></div>').appendTo(g.dialog.winbtns)
  3551. .hover(function ()
  3552. {
  3553. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  3554. if ($(this).hasClass("l-dialog-extend"))
  3555. $(this).addClass("l-dialog-extend-over");
  3556. else
  3557. $(this).addClass("l-dialog-collapse-over");
  3558. }, function ()
  3559. {
  3560. $(this).removeClass("l-dialog-extend-over l-dialog-collapse-over");
  3561. }).click(function ()
  3562. {
  3563. if ($(this).hasClass("l-dialog-toggle-disabled")) return;
  3564. if (g.wintoggle.hasClass("l-dialog-extend"))
  3565. {
  3566. if (g.trigger('extend') == false) return;
  3567. g.wintoggle.removeClass("l-dialog-extend");
  3568. g.extend();
  3569. g.trigger('extended');
  3570. }
  3571. else
  3572. {
  3573. if (g.trigger('collapse') == false) return;
  3574. g.wintoggle.addClass("l-dialog-extend");
  3575. g.collapse();
  3576. g.trigger('collapseed')
  3577. }
  3578. });
  3579. }
  3580. }
  3581. else if (g.wintoggle)
  3582. {
  3583. g.wintoggle.remove();
  3584. g.wintoggle = null;
  3585. }
  3586. },
  3587. //按下回车
  3588. enter: function ()
  3589. {
  3590. var g = this, p = this.options;
  3591. var isClose;
  3592. if (p.closeWhenEnter != undefined)
  3593. {
  3594. isClose = p.closeWhenEnter;
  3595. }
  3596. else if (p.type == "warn" || p.type == "error" || p.type == "success" || p.type == "question")
  3597. {
  3598. isClose = true;
  3599. }
  3600. if (isClose)
  3601. {
  3602. g.close();
  3603. }
  3604. },
  3605. esc: function ()
  3606. {
  3607. },
  3608. _removeDialog: function ()
  3609. {
  3610. var g = this, p = this.options;
  3611. if (p.showType && p.fixedType)
  3612. {
  3613. g.dialog.animate({ bottom: -1 * p.height }, function ()
  3614. {
  3615. g.dialog.remove();
  3616. });
  3617. } else
  3618. {
  3619. g.dialog.remove();
  3620. }
  3621. },
  3622. close: function ()
  3623. {
  3624. var g = this, p = this.options;
  3625. /**
  3626. * 增加窗口关闭前的拦截事件,如果onClose返回false,将不会关闭对话框
  3627. * add by tangj 20120802
  3628. */
  3629. var onClose = p.onClose;
  3630. var allowClose = true;
  3631. if(onClose && typeof(onClose) == "function"){
  3632. allowClose = onClose(g,p);
  3633. }
  3634. if(allowClose){
  3635. l.win.removeTask(this);
  3636. g.unmask();
  3637. g._removeDialog();
  3638. $('body').unbind('keydown.dialog');
  3639. }
  3640. },
  3641. _getVisible: function ()
  3642. {
  3643. return this.dialog.is(":visible");
  3644. },
  3645. _setUrl: function (url)
  3646. {
  3647. var g = this, p = this.options;
  3648. p.url = url;
  3649. if (p.load)
  3650. {
  3651. g.dialog.body.html("").load(p.url, function ()
  3652. {
  3653. g.trigger('loaded');
  3654. });
  3655. }
  3656. else if (g.jiframe)
  3657. {
  3658. g.jiframe.attr("src", p.url);
  3659. }
  3660. },
  3661. _setContent: function (content)
  3662. {
  3663. this.dialog.content.html(content);
  3664. },
  3665. _setTitle: function (value)
  3666. {
  3667. var g = this; var p = this.options;
  3668. if (value)
  3669. {
  3670. $(".l-dialog-title", g.dialog).html(value);
  3671. }
  3672. },
  3673. _hideDialog: function ()
  3674. {
  3675. var g = this, p = this.options;
  3676. if (p.showType && p.fixedType)
  3677. {
  3678. g.dialog.animate({ bottom: -1 * p.height }, function ()
  3679. {
  3680. g.dialog.hide();
  3681. });
  3682. } else
  3683. {
  3684. g.dialog.hide();
  3685. }
  3686. },
  3687. hidden: function ()
  3688. {
  3689. var g = this;
  3690. l.win.removeTask(g);
  3691. g.dialog.hide();
  3692. g.unmask();
  3693. },
  3694. show: function ()
  3695. {
  3696. var g = this, p = this.options;
  3697. g.mask();
  3698. if (p.fixedType)
  3699. {
  3700. if (p.showType)
  3701. {
  3702. g.dialog.css({ bottom: -1 * p.height }).addClass("l-dialog-fixed");
  3703. g.dialog.show().animate({ bottom: 0 });
  3704. }
  3705. else
  3706. {
  3707. g.dialog.show().css({ bottom: 0 });
  3708. }
  3709. }
  3710. else
  3711. {
  3712. g.dialog.show();
  3713. }
  3714. //前端显示
  3715. $.ligerui.win.setFront.ligerDefer($.ligerui.win, 100, [g]);
  3716. },
  3717. setUrl: function (url)
  3718. {
  3719. this._setUrl(url);
  3720. },
  3721. _saveStatus: function ()
  3722. {
  3723. var g = this;
  3724. g._width = g.dialog.body.width();
  3725. g._height = g.dialog.body.height();
  3726. var top = 0;
  3727. var left = 0;
  3728. if (!isNaN(parseInt(g.dialog.css('top'))))
  3729. top = parseInt(g.dialog.css('top'));
  3730. if (!isNaN(parseInt(g.dialog.css('left'))))
  3731. left = parseInt(g.dialog.css('left'));
  3732. if(top<0){
  3733. top = 0;
  3734. g.dialog.css('top',top)
  3735. }
  3736. if(left<0){
  3737. left = 0;
  3738. g.dialog.css('left',left)
  3739. }
  3740. g._top = top;
  3741. g._left = left;
  3742. },
  3743. _applyDrag: function ()
  3744. {
  3745. var g = this, p = this.options;
  3746. if ($.fn.ligerDrag)
  3747. g.draggable = g.dialog.ligerDrag({ handler: '.l-dialog-title', animate: false,
  3748. onStartDrag: function ()
  3749. {
  3750. l.win.setFront(g);
  3751. },
  3752. onStopDrag: function ()
  3753. {
  3754. if (p.target)
  3755. {
  3756. var triggers1 = l.find($.ligerui.controls.DateEditor);
  3757. var triggers2 = l.find($.ligerui.controls.ComboBox);
  3758. //更新所有下拉选择框的位置
  3759. $($.merge(triggers1, triggers2)).each(function ()
  3760. {
  3761. if (this.updateSelectBoxPosition)
  3762. this.updateSelectBoxPosition();
  3763. });
  3764. }
  3765. g._saveStatus();
  3766. }
  3767. });
  3768. },
  3769. _onReisze: function ()
  3770. {
  3771. var g = this, p = this.options;
  3772. if (p.target)
  3773. {
  3774. var manager = $(p.target).liger();
  3775. if (!manager) manager = $(p.target).find(":first").liger();
  3776. if (!manager) return;
  3777. var contentHeight = g.dialog.content.height();
  3778. var contentWidth = g.dialog.content.width();
  3779. manager.trigger('resize', [{ width: contentWidth, height: contentHeight}]);
  3780. }
  3781. },
  3782. _applyResize: function ()
  3783. {
  3784. var g = this, p = this.options;
  3785. if ($.fn.ligerResizable)
  3786. {
  3787. g.resizable = g.dialog.ligerResizable({
  3788. onStopResize: function (current, e)
  3789. {
  3790. var top = 0;
  3791. var left = 0;
  3792. if (!isNaN(parseInt(g.dialog.css('top'))))
  3793. top = parseInt(g.dialog.css('top'));
  3794. if (!isNaN(parseInt(g.dialog.css('left'))))
  3795. left = parseInt(g.dialog.css('left'));
  3796. if (current.diffLeft)
  3797. {
  3798. g.set({ left: left + current.diffLeft });
  3799. }
  3800. if (current.diffTop)
  3801. {
  3802. g.set({ top: top + current.diffTop });
  3803. }
  3804. if (current.newWidth)
  3805. {
  3806. g.set({ width: current.newWidth });
  3807. g.dialog.body.css({ width: current.newWidth - g._borderX });
  3808. }
  3809. if (current.newHeight)
  3810. {
  3811. g.set({ height: current.newHeight });
  3812. }
  3813. g._onReisze();
  3814. g._saveStatus();
  3815. return false;
  3816. }, animate: false
  3817. });
  3818. }
  3819. },
  3820. _setImage: function ()
  3821. {
  3822. var g = this, p = this.options;
  3823. if (p.type)
  3824. {
  3825. if (p.type == 'success' || p.type == 'donne' || p.type == 'ok')
  3826. {
  3827. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-donne").show();
  3828. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  3829. }
  3830. else if (p.type == 'error')
  3831. {
  3832. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-error").show();
  3833. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  3834. }
  3835. else if (p.type == 'warn')
  3836. {
  3837. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-warn").show();
  3838. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 30 });
  3839. }
  3840. else if (p.type == 'question')
  3841. {
  3842. $(".l-dialog-image", g.dialog).addClass("l-dialog-image-question").show();
  3843. g.dialog.content.css({ paddingLeft: 64, paddingBottom: 40 });
  3844. }
  3845. }
  3846. }
  3847. });
  3848. l.controls.Dialog.prototype.hide = l.controls.Dialog.prototype.hidden;
  3849. $.ligerDialog.open = function (p)
  3850. {
  3851. return $.ligerDialog(p);
  3852. };
  3853. $.ligerDialog.close = function ()
  3854. {
  3855. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  3856. for (var i in dialogs)
  3857. {
  3858. var d = dialogs[i];
  3859. d.destroy.ligerDefer(d, 5);
  3860. }
  3861. l.win.unmask();
  3862. };
  3863. $.ligerDialog.show = function (p)
  3864. {
  3865. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  3866. if (dialogs.length)
  3867. {
  3868. for (var i in dialogs)
  3869. {
  3870. dialogs[i].show();
  3871. return;
  3872. }
  3873. }
  3874. return $.ligerDialog(p);
  3875. };
  3876. $.ligerDialog.hide = function ()
  3877. {
  3878. var dialogs = l.find(l.controls.Dialog.prototype.__getType());
  3879. for (var i in dialogs)
  3880. {
  3881. var d = dialogs[i];
  3882. d.hide();
  3883. }
  3884. };
  3885. $.ligerDialog.tip = function (options)
  3886. {
  3887. options = $.extend({
  3888. showType: 'slide',
  3889. width: 240,
  3890. modal: false,
  3891. height: 100
  3892. }, options || {});
  3893. $.extend(options, {
  3894. fixedType: 'se',
  3895. type: 'none',
  3896. isDrag: false,
  3897. isResize: false,
  3898. showMax: false,
  3899. showToggle: false,
  3900. showMin: false
  3901. });
  3902. return $.ligerDialog.open(options);
  3903. };
  3904. $.ligerDialog.alert = function (content, title, type, callback)
  3905. {
  3906. content = content || "";
  3907. if (typeof (title) == "function")
  3908. {
  3909. callback = title;
  3910. type = null;
  3911. }
  3912. else if (typeof (type) == "function")
  3913. {
  3914. callback = type;
  3915. }
  3916. var btnclick = function (item, Dialog, index)
  3917. {
  3918. Dialog.close();
  3919. if (callback)
  3920. callback(item, Dialog, index);
  3921. };
  3922. var p = {
  3923. content: content,
  3924. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick}]
  3925. };
  3926. if (typeof (title) == "string" && title != "") p.title = title;
  3927. if (typeof (type) == "string" && type != "") p.type = type;
  3928. $.extend(p, {
  3929. showMax: false,
  3930. showToggle: false,
  3931. showMin: false,
  3932. isHidden:false
  3933. });
  3934. return $.ligerDialog(p);
  3935. };
  3936. $.ligerDialog.confirm = function (content, title, callback)
  3937. {
  3938. if (typeof (title) == "function")
  3939. {
  3940. callback = title;
  3941. type = null;
  3942. }
  3943. var btnclick = function (item, Dialog)
  3944. {
  3945. Dialog.close();
  3946. if (callback)
  3947. {
  3948. callback(item.type == 'ok');
  3949. }
  3950. };
  3951. p = {
  3952. type: 'question',
  3953. content: content,
  3954. buttons: [{ text: $.ligerDefaults.DialogString.yes, onclick: btnclick, type: 'ok' }, { text: $.ligerDefaults.DialogString.no, onclick: btnclick, type: 'no'}]
  3955. };
  3956. if (typeof (title) == "string" && title != "") p.title = title;
  3957. $.extend(p, {
  3958. showMax: false,
  3959. showToggle: false,
  3960. showMin: false
  3961. });
  3962. return $.ligerDialog(p);
  3963. };
  3964. $.ligerDialog.warning = function (content, title, callback)
  3965. {
  3966. if (typeof (title) == "function")
  3967. {
  3968. callback = title;
  3969. type = null;
  3970. }
  3971. var btnclick = function (item, Dialog)
  3972. {
  3973. Dialog.close();
  3974. if (callback)
  3975. {
  3976. callback(item.type);
  3977. }
  3978. };
  3979. p = {
  3980. type: 'question',
  3981. content: content,
  3982. 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'}]
  3983. };
  3984. if (typeof (title) == "string" && title != "") p.title = title;
  3985. $.extend(p, {
  3986. showMax: false,
  3987. showToggle: false,
  3988. showMin: false
  3989. });
  3990. return $.ligerDialog(p);
  3991. };
  3992. $.ligerDialog.waitting = function (title)
  3993. {
  3994. title = title || $.ligerDefaults.Dialog.waittingMessage;
  3995. return $.ligerDialog.open({ cls: 'l-dialog-waittingdialog', type: 'none', content: '<div style="padding:4px">' + title + '</div>', allowClose: false });
  3996. };
  3997. $.ligerDialog.closeWaitting = function ()
  3998. {
  3999. var dialogs = l.find(l.controls.Dialog);
  4000. for (var i in dialogs)
  4001. {
  4002. var d = dialogs[i];
  4003. if (d.dialog.hasClass("l-dialog-waittingdialog"))
  4004. d.close();
  4005. }
  4006. };
  4007. $.ligerDialog.success = function (content, title, onBtnClick)
  4008. {
  4009. return $.ligerDialog.alert(content, title, 'success', onBtnClick);
  4010. };
  4011. $.ligerDialog.error = function (content, title, onBtnClick)
  4012. {
  4013. return $.ligerDialog.alert(content, title, 'error', onBtnClick);
  4014. };
  4015. $.ligerDialog.warn = function (content, title, onBtnClick)
  4016. {
  4017. return $.ligerDialog.alert(content, title, 'warn', onBtnClick);
  4018. };
  4019. $.ligerDialog.question = function (content, title)
  4020. {
  4021. return $.ligerDialog.alert(content, title, 'question');
  4022. };
  4023. $.ligerDialog.prompt = function (title, value, multi, callback)
  4024. {
  4025. var target = $('<input type="text" class="l-dialog-inputtext"/>');
  4026. if (typeof (multi) == "function")
  4027. {
  4028. callback = multi;
  4029. }
  4030. if (typeof (value) == "function")
  4031. {
  4032. callback = value;
  4033. }
  4034. else if (typeof (value) == "boolean")
  4035. {
  4036. multi = value;
  4037. }
  4038. if (typeof (multi) == "boolean" && multi)
  4039. {
  4040. target = $('<textarea class="l-dialog-textarea"></textarea>');
  4041. }
  4042. if (typeof (value) == "string" || typeof (value) == "int")
  4043. {
  4044. target.val(value);
  4045. }
  4046. var btnclick = function (item, Dialog, index)
  4047. {
  4048. Dialog.close();
  4049. if (callback)
  4050. {
  4051. callback(item.type == 'yes', target.val());
  4052. }
  4053. }
  4054. p = {
  4055. title: title,
  4056. target: target,
  4057. width: 320,
  4058. buttons: [{ text: $.ligerDefaults.DialogString.ok, onclick: btnclick, type: 'yes' }, { text: $.ligerDefaults.DialogString.cancel, onclick: btnclick, type: 'cancel'}]
  4059. };
  4060. return $.ligerDialog(p);
  4061. };
  4062. })(jQuery);/**
  4063. * jQuery ligerUI 1.1.9
  4064. *
  4065. * http://ligerui.com
  4066. *
  4067. * Author daomi 2012 [ gd_star@163.com ]
  4068. *
  4069. */
  4070. (function ($)
  4071. {
  4072. var l = $.ligerui;
  4073. $.fn.ligerDrag = function (options)
  4074. {
  4075. return l.run.call(this, "ligerDrag", arguments,
  4076. {
  4077. idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
  4078. }
  4079. );
  4080. };
  4081. $.fn.ligerGetDragManager = function ()
  4082. {
  4083. return l.run.call(this, "ligerGetDragManager", arguments,
  4084. {
  4085. idAttrName: 'ligeruidragid', hasElement: false, propertyToElemnt: 'target'
  4086. });
  4087. };
  4088. $.ligerDefaults.Drag = {
  4089. onStartDrag: false,
  4090. onDrag: false,
  4091. onStopDrag: false,
  4092. handler: null,
  4093. //代理 拖动时的主体,可以是'clone'或者是函数,放回jQuery 对象
  4094. proxy: true,
  4095. revert: false,
  4096. animate: true,
  4097. onRevert: null,
  4098. onEndRevert: null,
  4099. //接收区域 jQuery对象或者jQuery选择字符
  4100. receive: null,
  4101. //进入区域
  4102. onDragEnter: null,
  4103. //在区域移动
  4104. onDragOver: null,
  4105. //离开区域
  4106. onDragLeave: null,
  4107. //在区域释放
  4108. onDrop: null,
  4109. disabled: false,
  4110. proxyX: null, //代理相对鼠标指针的位置,如果不设置则对应target的left
  4111. proxyY: null
  4112. };
  4113. l.controls.Drag = function (options)
  4114. {
  4115. l.controls.Drag.base.constructor.call(this, null, options);
  4116. };
  4117. l.controls.Drag.ligerExtend(l.core.UIComponent, {
  4118. __getType: function ()
  4119. {
  4120. return 'Drag';
  4121. },
  4122. __idPrev: function ()
  4123. {
  4124. return 'Drag';
  4125. },
  4126. _render: function ()
  4127. {
  4128. var g = this, p = this.options;
  4129. this.set(p);
  4130. g.cursor = "move";
  4131. g.handler.css('cursor', g.cursor);
  4132. g.handler.bind('mousedown.drag', function (e)
  4133. {
  4134. if (p.disabled) return;
  4135. if (e.button == 2) return;
  4136. g._start.call(g, e);
  4137. }).bind('mousemove.drag', function ()
  4138. {
  4139. if (p.disabled) return;
  4140. g.handler.css('cursor', g.cursor);
  4141. });
  4142. },
  4143. _rendered: function ()
  4144. {
  4145. this.options.target.ligeruidragid = this.id;
  4146. },
  4147. _start: function (e)
  4148. {
  4149. var g = this, p = this.options;
  4150. if (g.reverting) return;
  4151. if (p.disabled) return;
  4152. g.current = {
  4153. target: g.target,
  4154. left: g.target.offset().left,
  4155. top: g.target.offset().top,
  4156. startX: e.pageX || e.screenX,
  4157. startY: e.pageY || e.clientY
  4158. };
  4159. if (g.trigger('startDrag', [g.current, e]) == false) return false;
  4160. g.cursor = "move";
  4161. g._createProxy(p.proxy, e);
  4162. //代理没有创建成功
  4163. if (p.proxy && !g.proxy) return false;
  4164. (g.proxy || g.handler).css('cursor', g.cursor);
  4165. $(document).bind("selectstart.drag", function () { return false; });
  4166. $(document).bind('mousemove.drag', function ()
  4167. {
  4168. g._drag.apply(g, arguments);
  4169. });
  4170. l.draggable.dragging = true;
  4171. $(document).bind('mouseup.drag', function ()
  4172. {
  4173. l.draggable.dragging = false;
  4174. g._stop.apply(g, arguments);
  4175. });
  4176. },
  4177. _drag: function (e)
  4178. {
  4179. var g = this, p = this.options;
  4180. if (!g.current) return;
  4181. var pageX = e.pageX || e.screenX;
  4182. var pageY = e.pageY || e.screenY;
  4183. g.current.diffX = pageX - g.current.startX;
  4184. g.current.diffY = pageY - g.current.startY;
  4185. (g.proxy || g.handler).css('cursor', g.cursor);
  4186. if (g.receive)
  4187. {
  4188. g.receive.each(function (i, obj)
  4189. {
  4190. var receive = $(obj);
  4191. var xy = receive.offset();
  4192. if (pageX > xy.left && pageX < xy.left + receive.width()
  4193. && pageY > xy.top && pageY < xy.top + receive.height())
  4194. {
  4195. if (!g.receiveEntered[i])
  4196. {
  4197. g.receiveEntered[i] = true;
  4198. g.trigger('dragEnter', [obj, g.proxy || g.target, e]);
  4199. }
  4200. else
  4201. {
  4202. g.trigger('dragOver', [obj, g.proxy || g.target, e]);
  4203. }
  4204. }
  4205. else if (g.receiveEntered[i])
  4206. {
  4207. g.receiveEntered[i] = false;
  4208. g.trigger('dragLeave', [obj, g.proxy || g.target, e]);
  4209. }
  4210. });
  4211. }
  4212. if (g.hasBind('drag'))
  4213. {
  4214. if (g.trigger('drag', [g.current, e]) != false)
  4215. {
  4216. g._applyDrag();
  4217. }
  4218. else
  4219. {
  4220. g._removeProxy();
  4221. }
  4222. }
  4223. else
  4224. {
  4225. g._applyDrag();
  4226. }
  4227. },
  4228. _stop: function (e)
  4229. {
  4230. var g = this, p = this.options;
  4231. $(document).unbind('mousemove.drag');
  4232. $(document).unbind('mouseup.drag');
  4233. $(document).unbind("selectstart.drag");
  4234. if (g.receive)
  4235. {
  4236. g.receive.each(function (i, obj)
  4237. {
  4238. if (g.receiveEntered[i])
  4239. {
  4240. g.trigger('drop', [obj, g.proxy || g.target, e]);
  4241. }
  4242. });
  4243. }
  4244. if (g.proxy)
  4245. {
  4246. if (p.revert)
  4247. {
  4248. if (g.hasBind('revert'))
  4249. {
  4250. if (g.trigger('revert', [g.current, e]) != false)
  4251. g._revert(e);
  4252. else
  4253. g._removeProxy();
  4254. }
  4255. else
  4256. {
  4257. g._revert(e);
  4258. }
  4259. }
  4260. else
  4261. {
  4262. g._applyDrag(g.target);
  4263. g._removeProxy();
  4264. }
  4265. }
  4266. g.cursor = 'move';
  4267. g.trigger('stopDrag', [g.current, e]);
  4268. g.current = null;
  4269. g.handler.css('cursor', g.cursor);
  4270. },
  4271. _revert: function (e)
  4272. {
  4273. var g = this;
  4274. g.reverting = true;
  4275. g.proxy.animate({
  4276. left: g.current.left,
  4277. top: g.current.top
  4278. }, function ()
  4279. {
  4280. g.reverting = false;
  4281. g._removeProxy();
  4282. g.trigger('endRevert', [g.current, e]);
  4283. g.current = null;
  4284. });
  4285. },
  4286. _applyDrag: function (applyResultBody)
  4287. {
  4288. var g = this, p = this.options;
  4289. applyResultBody = applyResultBody || g.proxy || g.target;
  4290. var cur = {}, changed = false;
  4291. var noproxy = applyResultBody == g.target;
  4292. if (g.current.diffX)
  4293. {
  4294. if (noproxy || p.proxyX == null)
  4295. cur.left = g.current.left + g.current.diffX;
  4296. else
  4297. cur.left = g.current.startX + p.proxyX + g.current.diffX;
  4298. changed = true;
  4299. }
  4300. if (g.current.diffY)
  4301. {
  4302. if (noproxy || p.proxyY == null)
  4303. cur.top = g.current.top + g.current.diffY;
  4304. else
  4305. cur.top = g.current.startY + p.proxyY + g.current.diffY;
  4306. changed = true;
  4307. }
  4308. if (applyResultBody == g.target && g.proxy && p.animate)
  4309. {
  4310. g.reverting = true;
  4311. applyResultBody.animate(cur, function ()
  4312. {
  4313. g.reverting = false;
  4314. });
  4315. }
  4316. else
  4317. {
  4318. applyResultBody.css(cur);
  4319. }
  4320. },
  4321. _setReceive: function (receive)
  4322. {
  4323. this.receiveEntered = {};
  4324. if (!receive) return;
  4325. if (typeof receive == 'string')
  4326. this.receive = $(receive);
  4327. else
  4328. this.receive = receive;
  4329. },
  4330. _setHandler: function (handler)
  4331. {
  4332. var g = this, p = this.options;
  4333. if (!handler)
  4334. g.handler = $(p.target);
  4335. else
  4336. g.handler = (typeof handler == 'string' ? $(handler, p.target) : handler);
  4337. },
  4338. _setTarget: function (target)
  4339. {
  4340. this.target = $(target);
  4341. },
  4342. _setCursor: function (cursor)
  4343. {
  4344. this.cursor = cursor;
  4345. (this.proxy || this.handler).css('cursor', cursor);
  4346. },
  4347. _createProxy: function (proxy, e)
  4348. {
  4349. if (!proxy) return;
  4350. var g = this, p = this.options;
  4351. if (typeof proxy == 'function')
  4352. {
  4353. g.proxy = proxy.call(this.options.target, g, e);
  4354. }
  4355. else if (proxy == 'clone')
  4356. {
  4357. g.proxy = g.target.clone().css('position', 'absolute');
  4358. g.proxy.appendTo('body');
  4359. }
  4360. else
  4361. {
  4362. g.proxy = $("<div class='l-draggable'></div>");
  4363. g.proxy.width(g.target.width()).height(g.target.height())
  4364. g.proxy.attr("dragid", g.id).appendTo('body');
  4365. }
  4366. g.proxy.css({
  4367. left: p.proxyX == null ? g.current.left : g.current.startX + p.proxyX,
  4368. top: p.proxyY == null ? g.current.top : g.current.startY + p.proxyY
  4369. }).show();
  4370. },
  4371. _removeProxy: function ()
  4372. {
  4373. var g = this;
  4374. if (g.proxy)
  4375. {
  4376. g.proxy.remove();
  4377. g.proxy = null;
  4378. }
  4379. }
  4380. });
  4381. })(jQuery);/**
  4382. * jQuery ligerUI 1.1.9
  4383. *
  4384. * http://ligerui.com
  4385. *
  4386. * Author daomi 2012 [ gd_star@163.com ]
  4387. *
  4388. */
  4389. (function ($)
  4390. {
  4391. $.fn.ligerEasyTab = function ()
  4392. {
  4393. return $.ligerui.run.call(this, "ligerEasyTab", arguments);
  4394. };
  4395. $.fn.ligerGetEasyTabManager = function ()
  4396. {
  4397. return $.ligerui.run.call(this, "ligerGetEasyTabManager", arguments);
  4398. };
  4399. $.ligerDefaults.EasyTab = {};
  4400. $.ligerMethos.EasyTab = {};
  4401. $.ligerui.controls.EasyTab = function (element, options)
  4402. {
  4403. $.ligerui.controls.EasyTab.base.constructor.call(this, element, options);
  4404. };
  4405. $.ligerui.controls.EasyTab.ligerExtend($.ligerui.core.UIComponent, {
  4406. __getType: function ()
  4407. {
  4408. return 'EasyTab';
  4409. },
  4410. __idPrev: function ()
  4411. {
  4412. return 'EasyTab';
  4413. },
  4414. _extendMethods: function ()
  4415. {
  4416. return $.ligerMethos.EasyTab;
  4417. },
  4418. _render: function ()
  4419. {
  4420. var g = this, p = this.options;
  4421. g.tabs = $(this.element);
  4422. g.tabs.addClass("l-easytab");
  4423. var selectedIndex = 0;
  4424. if ($("> div[lselected=true]", g.tabs).length > 0)
  4425. selectedIndex = $("> div", g.tabs).index($("> div[lselected=true]", g.tabs));
  4426. g.tabs.ul = $('<ul class="l-easytab-header"></ul>');
  4427. $("> div", g.tabs).each(function (i, box)
  4428. {
  4429. var li = $('<li><span></span></li>');
  4430. if (i == selectedIndex)
  4431. $("span", li).addClass("l-selected");
  4432. if ($(box).attr("title"))
  4433. $("span", li).html($(box).attr("title"));
  4434. g.tabs.ul.append(li);
  4435. if (!$(box).hasClass("l-easytab-panelbox")) $(box).addClass("l-easytab-panelbox");
  4436. });
  4437. g.tabs.ul.prependTo(g.tabs);
  4438. //init
  4439. $(".l-easytab-panelbox:eq(" + selectedIndex + ")", g.tabs).show().siblings(".l-easytab-panelbox").hide();
  4440. //add even
  4441. $("> ul:first span", g.tabs).click(function ()
  4442. {
  4443. if ($(this).hasClass("l-selected")) return;
  4444. var i = $("> ul:first span", g.tabs).index(this);
  4445. $(this).addClass("l-selected").parent().siblings().find("span.l-selected").removeClass("l-selected");
  4446. $(".l-easytab-panelbox:eq(" + i + ")", g.tabs).show().siblings(".l-easytab-panelbox").hide();
  4447. }).not("l-selected").hover(function ()
  4448. {
  4449. $(this).addClass("l-over");
  4450. }, function ()
  4451. {
  4452. $(this).removeClass("l-over");
  4453. });
  4454. g.set(p);
  4455. }
  4456. });
  4457. })(jQuery);/**
  4458. * jQuery ligerUI 1.1.9
  4459. *
  4460. * http://ligerui.com
  4461. *
  4462. * Author daomi 2012 [ gd_star@163.com ]
  4463. *
  4464. */
  4465. (function ($)
  4466. {
  4467. $.fn.ligerFilter = function ()
  4468. {
  4469. return $.ligerui.run.call(this, "ligerFilter", arguments);
  4470. };
  4471. $.fn.ligerGetFilterManager = function ()
  4472. {
  4473. return $.ligerui.run.call(this, "ligerGetFilterManager", arguments);
  4474. };
  4475. $.ligerDefaults.Filter = {
  4476. //字段列表
  4477. fields: [],
  4478. //字段类型 - 运算符 的对应关系
  4479. operators: {},
  4480. //自定义输入框(如下拉框、日期)
  4481. editors: {}
  4482. };
  4483. $.ligerDefaults.FilterString = {
  4484. strings: {
  4485. "and": "并且",
  4486. "or": "或者",
  4487. "equal": "相等",
  4488. "notequal": "不相等",
  4489. "startwith": "以..开始",
  4490. "endwith": "以..结束",
  4491. "like": "相似",
  4492. "greater": "大于",
  4493. "greaterorequal": "大于或等于",
  4494. "less": "小于",
  4495. "lessorequal": "小于或等于",
  4496. "in": "包括在...",
  4497. "notin": "不包括...",
  4498. "addgroup": "增加分组",
  4499. "addrule": "增加条件",
  4500. "deletegroup": "删除分组"
  4501. }
  4502. };
  4503. $.ligerDefaults.Filter.operators['string'] =
  4504. $.ligerDefaults.Filter.operators['text'] =
  4505. ["equal", "notequal", "startwith", "endwith", "like", "greater", "greaterorequal", "less", "lessorequal", "in", "notin"];
  4506. $.ligerDefaults.Filter.operators['number'] =
  4507. $.ligerDefaults.Filter.operators['int'] =
  4508. $.ligerDefaults.Filter.operators['float'] =
  4509. $.ligerDefaults.Filter.operators['date'] =
  4510. ["equal", "notequal", "greater", "greaterorequal", "less", "lessorequal", "in", "notin"];
  4511. $.ligerDefaults.Filter.editors['string'] =
  4512. {
  4513. create: function (container, field)
  4514. {
  4515. var input = $("<input type='text'/>");
  4516. container.append(input);
  4517. input.ligerTextBox(field.editor.options || {});
  4518. return input;
  4519. },
  4520. setValue: function (input, value)
  4521. {
  4522. input.val(value);
  4523. },
  4524. getValue: function (input)
  4525. {
  4526. return input.liger('option', 'value');
  4527. },
  4528. destroy: function (input)
  4529. {
  4530. input.liger('destroy');
  4531. }
  4532. };
  4533. $.ligerDefaults.Filter.editors['date'] =
  4534. {
  4535. create: function (container, field)
  4536. {
  4537. var input = $("<input type='text'/>");
  4538. container.append(input);
  4539. input.ligerDateEditor(field.editor.options || {});
  4540. return input;
  4541. },
  4542. setValue: function (input, value)
  4543. {
  4544. input.liger('option', 'value', value);
  4545. },
  4546. getValue: function (input, field)
  4547. {
  4548. return input.liger('option', 'value');
  4549. },
  4550. destroy: function (input)
  4551. {
  4552. input.liger('destroy');
  4553. }
  4554. };
  4555. $.ligerDefaults.Filter.editors['number'] =
  4556. {
  4557. create: function (container, field)
  4558. {
  4559. var input = $("<input type='text'/>");
  4560. container.append(input);
  4561. var options = {
  4562. minValue: field.editor.minValue,
  4563. maxValue: field.editor.maxValue
  4564. };
  4565. input.ligerSpinner($.extend(options, field.editor.options || {}));
  4566. return input;
  4567. },
  4568. setValue: function (input, value)
  4569. {
  4570. input.val(value);
  4571. },
  4572. getValue: function (input, field)
  4573. {
  4574. var isInt = field.editor.type == "int";
  4575. if (isInt)
  4576. return parseInt(input.val(), 10);
  4577. else
  4578. return parseFloat(input.val());
  4579. },
  4580. destroy: function (input)
  4581. {
  4582. input.liger('destroy');
  4583. }
  4584. };
  4585. $.ligerDefaults.Filter.editors['combobox'] =
  4586. {
  4587. create: function (container, field)
  4588. {
  4589. var input = $("<input type='text'/>");
  4590. container.append(input);
  4591. var options = {
  4592. data: field.data,
  4593. slide: false,
  4594. valueField: field.editor.valueField || field.editor.valueColumnName,
  4595. textField: field.editor.textField || field.editor.displayColumnName
  4596. };
  4597. $.extend(options, field.editor.options || {});
  4598. input.ligerComboBox(options);
  4599. return input;
  4600. },
  4601. setValue: function (input, value)
  4602. {
  4603. input.liger('option', 'value', value);
  4604. },
  4605. getValue: function (input)
  4606. {
  4607. return input.liger('option', 'value');
  4608. },
  4609. destroy: function (input)
  4610. {
  4611. input.liger('destroy');
  4612. }
  4613. };
  4614. //过滤器组件
  4615. $.ligerui.controls.Filter = function (element, options)
  4616. {
  4617. $.ligerui.controls.Filter.base.constructor.call(this, element, options);
  4618. };
  4619. $.ligerui.controls.Filter.ligerExtend($.ligerui.core.UIComponent, {
  4620. __getType: function ()
  4621. {
  4622. return 'Filter'
  4623. },
  4624. __idPrev: function ()
  4625. {
  4626. return 'Filter';
  4627. },
  4628. _init: function ()
  4629. {
  4630. $.ligerui.controls.Filter.base._init.call(this);
  4631. },
  4632. _render: function ()
  4633. {
  4634. var g = this, p = this.options;
  4635. g.set(p);
  4636. //事件:增加分组
  4637. $("#" + g.id + " .addgroup").live('click', function ()
  4638. {
  4639. var jtable = $(this).parent().parent().parent().parent();
  4640. g.addGroup(jtable);
  4641. });
  4642. //事件:删除分组
  4643. $("#" + g.id + " .deletegroup").live('click', function ()
  4644. {
  4645. var jtable = $(this).parent().parent().parent().parent();
  4646. g.deleteGroup(jtable);
  4647. });
  4648. //事件:增加条件
  4649. $("#" + g.id + " .addrule").live('click', function ()
  4650. {
  4651. var jtable = $(this).parent().parent().parent().parent();
  4652. g.addRule(jtable);
  4653. });
  4654. //事件:删除条件
  4655. $("#" + g.id + " .deleterole").live('click', function ()
  4656. {
  4657. var rulerow = $(this).parent().parent();
  4658. g.deleteRule(rulerow);
  4659. });
  4660. },
  4661. //设置字段列表
  4662. _setFields: function (fields)
  4663. {
  4664. var g = this, p = this.options;
  4665. if (g.group) g.group.remove();
  4666. g.group = $(g._bulidGroupTableHtml()).appendTo(g.element);
  4667. },
  4668. //输入框列表
  4669. editors: {},
  4670. //输入框计算器
  4671. editorCounter: 0,
  4672. //增加分组
  4673. //@parm [jgroup] jQuery对象(主分组的table dom元素)
  4674. addGroup: function (jgroup)
  4675. {
  4676. var g = this, p = this.options;
  4677. jgroup = $(jgroup || g.group);
  4678. var lastrow = $(">tbody:first > tr:last", jgroup);
  4679. var groupHtmlArr = [];
  4680. groupHtmlArr.push('<tr class="l-filter-rowgroup"><td class="l-filter-cellgroup" colSpan="4">');
  4681. var altering = !jgroup.hasClass("l-filter-group-alt");
  4682. groupHtmlArr.push(g._bulidGroupTableHtml(altering, true));
  4683. groupHtmlArr.push('</td></tr>');
  4684. var row = $(groupHtmlArr.join(''));
  4685. lastrow.before(row);
  4686. return row.find("table:first");
  4687. },
  4688. //删除分组
  4689. deleteGroup: function (group)
  4690. {
  4691. var g = this, p = this.options;
  4692. $("td.l-filter-value", group).each(function ()
  4693. {
  4694. var rulerow = $(this).parent();
  4695. $("select.fieldsel", rulerow).unbind();
  4696. g.removeEditor(rulerow);
  4697. });
  4698. $(group).parent().parent().remove();
  4699. },
  4700. //删除编辑器
  4701. removeEditor: function (rulerow)
  4702. {
  4703. var g = this, p = this.options;
  4704. var type = $(rulerow).attr("editortype");
  4705. var id = $(rulerow).attr("editorid");
  4706. var editor = g.editors[id];
  4707. if (editor) p.editors[type].destroy(editor);
  4708. $("td.l-filter-value:first", rulerow).html("");
  4709. },
  4710. //设置规则
  4711. //@parm [group] 分组数据
  4712. //@parm [jgruop] 分组table dom jQuery对象
  4713. setData: function (group, jgroup)
  4714. {
  4715. var g = this, p = this.options;
  4716. jgroup = jgroup || g.group;
  4717. var lastrow = $(">tbody:first > tr:last", jgroup);
  4718. jgroup.find(">tbody:first > tr").not(lastrow).remove();
  4719. $("select:first", lastrow).val(group.op);
  4720. if (group.rules)
  4721. {
  4722. $(group.rules).each(function ()
  4723. {
  4724. var rulerow = g.addRule(jgroup);
  4725. rulerow.attr("fieldtype", this.type || "string");
  4726. $("select.opsel", rulerow).val(this.op);
  4727. $("select.fieldsel", rulerow).val(this.field).trigger('change');
  4728. var editorid = rulerow.attr("editorid");
  4729. if (editorid && g.editors[editorid])
  4730. {
  4731. var field = g.getField(this.field);
  4732. p.editors[field.editor.type].setValue(g.editors[editorid], this.value, field);
  4733. }
  4734. else
  4735. {
  4736. $(":text", rulerow).val(this.value);
  4737. }
  4738. });
  4739. }
  4740. if (group.groups)
  4741. {
  4742. $(group.groups).each(function ()
  4743. {
  4744. var subjgroup = g.addGroup(jgroup);
  4745. g.setData(this, subjgroup);
  4746. });
  4747. }
  4748. },
  4749. //增加一个条件
  4750. //@parm [jgroup] 分组的jQuery对象
  4751. addRule: function (jgroup)
  4752. {
  4753. var g = this, p = this.options;
  4754. jgroup = jgroup || g.group;
  4755. var lastrow = $(">tbody:first > tr:last", jgroup);
  4756. var rulerow = $(g._bulidRuleRowHtml());
  4757. lastrow.before(rulerow);
  4758. if (p.fields.length)
  4759. {
  4760. //如果第一个字段启用了自定义输入框
  4761. g.appendEditor(rulerow, p.fields[0]);
  4762. }
  4763. //事件:字段列表改变时
  4764. $("select.fieldsel", rulerow).bind('change', function ()
  4765. {
  4766. var jopsel = $(this).parent().next().find("select:first");
  4767. var fieldName = $(this).val();
  4768. var field = g.getField(fieldName);
  4769. //字段类型处理
  4770. var fieldType = field.type || "string";
  4771. var oldFieldtype = rulerow.attr("fieldtype");
  4772. if (fieldType != oldFieldtype)
  4773. {
  4774. jopsel.html(g._bulidOpSelectOptionsHtml(fieldType));
  4775. rulerow.attr("fieldtype", fieldType);
  4776. }
  4777. //当前的编辑器
  4778. var editorType = null;
  4779. //上一次的编辑器
  4780. var oldEditorType = rulerow.attr("editortype");
  4781. if (g.enabledEditor(field)) editorType = field.editor.type;
  4782. if (oldEditorType)
  4783. {
  4784. //如果存在旧的输入框
  4785. g.removeEditor(rulerow);
  4786. }
  4787. if (editorType)
  4788. {
  4789. //如果当前选择的字段定义了输入框
  4790. g.appendEditor(rulerow, field);
  4791. } else
  4792. {
  4793. rulerow.removeAttr("editortype").removeAttr("editorid");
  4794. $("td.l-filter-value:first", rulerow).html('<input type="text" class="valtxt" />');
  4795. }
  4796. });
  4797. return rulerow;
  4798. },
  4799. //删除一个条件
  4800. deleteRule: function (rulerow)
  4801. {
  4802. $("select.fieldsel", rulerow).unbind();
  4803. this.removeEditor(rulerow);
  4804. $(rulerow).remove();
  4805. },
  4806. //附加一个输入框
  4807. appendEditor: function (rulerow, field)
  4808. {
  4809. var g = this, p = this.options;
  4810. if (g.enabledEditor(field))
  4811. {
  4812. var cell = $("td.l-filter-value:first", rulerow).html("");
  4813. var editor = p.editors[field.editor.type];
  4814. g.editors[++g.editorCounter] = editor.create(cell, field);
  4815. rulerow.attr("editortype", field.editor.type).attr("editorid", g.editorCounter);
  4816. }
  4817. },
  4818. //获取分组数据
  4819. getData: function (group)
  4820. {
  4821. var g = this, p = this.options;
  4822. group = group || g.group;
  4823. var groupData = {};
  4824. $("> tbody > tr", group).each(function (i, row)
  4825. {
  4826. var rowlast = $(row).hasClass("l-filter-rowlast");
  4827. var rowgroup = $(row).hasClass("l-filter-rowgroup");
  4828. if (rowgroup)
  4829. {
  4830. var groupTable = $("> td:first > table:first", row);
  4831. if (groupTable.length)
  4832. {
  4833. if (!groupData.groups) groupData.groups = [];
  4834. groupData.groups.push(g.getData(groupTable));
  4835. }
  4836. }
  4837. else if (rowlast)
  4838. {
  4839. groupData.op = $(".groupopsel:first", row).val();
  4840. }
  4841. else
  4842. {
  4843. var fieldName = $("select.fieldsel:first", row).val();
  4844. var field = g.getField(fieldName);
  4845. var op = $(".opsel:first", row).val();
  4846. var value = g._getRuleValue(row, field);
  4847. var type = $(row).attr("fieldtype") || "string";
  4848. if (!groupData.rules) groupData.rules = [];
  4849. groupData.rules.push({
  4850. field: fieldName, op: op, value: value, type: type
  4851. });
  4852. }
  4853. });
  4854. return groupData;
  4855. },
  4856. _getRuleValue: function (rulerow, field)
  4857. {
  4858. var g = this, p = this.options;
  4859. var editorid = $(rulerow).attr("editorid");
  4860. var editortype = $(rulerow).attr("editortype");
  4861. var editor = g.editors[editorid];
  4862. if (editor)
  4863. return p.editors[editortype].getValue(editor, field);
  4864. return $(".valtxt:first", rulerow).val();
  4865. },
  4866. //判断某字段是否启用自定义的输入框
  4867. enabledEditor: function (field)
  4868. {
  4869. var g = this, p = this.options;
  4870. if (!field.editor || !field.editor.type) return false;
  4871. return (field.editor.type in p.editors);
  4872. },
  4873. //根据fieldName 获取 字段
  4874. getField: function (fieldname)
  4875. {
  4876. var g = this, p = this.options;
  4877. for (var i = 0, l = p.fields.length; i < l; i++)
  4878. {
  4879. var field = p.fields[i];
  4880. if (field.name == fieldname) return field;
  4881. }
  4882. return null;
  4883. },
  4884. //获取一个分组的html
  4885. _bulidGroupTableHtml: function (altering, allowDelete)
  4886. {
  4887. var g = this, p = this.options;
  4888. var tableHtmlArr = [];
  4889. tableHtmlArr.push('<table cellpadding="0" cellspacing="0" border="0" class="l-filter-group');
  4890. if (altering)
  4891. tableHtmlArr.push(' l-filter-group-alt');
  4892. tableHtmlArr.push('"><tbody>');
  4893. tableHtmlArr.push('<tr class="l-filter-rowlast"><td class="l-filter-rowlastcell" align="right" colSpan="4">');
  4894. //and or
  4895. tableHtmlArr.push('<select class="groupopsel">');
  4896. tableHtmlArr.push('<option value="and">' + p.strings['and'] + '</option>');
  4897. tableHtmlArr.push('<option value="or">' + p.strings['or'] + '</option>');
  4898. tableHtmlArr.push('</select>');
  4899. //add group
  4900. tableHtmlArr.push('<input type="button" value="' + p.strings['addgroup'] + '" class="addgroup">');
  4901. //add rule
  4902. tableHtmlArr.push('<input type="button" value="' + p.strings['addrule'] + '" class="addrule">');
  4903. if (allowDelete)
  4904. tableHtmlArr.push('<input type="button" value="' + p.strings['deletegroup'] + '" class="deletegroup">');
  4905. tableHtmlArr.push('</td></tr>');
  4906. tableHtmlArr.push('</tbody></table>');
  4907. return tableHtmlArr.join('');
  4908. },
  4909. //获取字段值规则的html
  4910. _bulidRuleRowHtml: function (fields)
  4911. {
  4912. var g = this, p = this.options;
  4913. fields = fields || p.fields;
  4914. var rowHtmlArr = [];
  4915. var fieldType = fields[0].type || "string";
  4916. rowHtmlArr.push('<tr fieldtype="' + fieldType + '"><td class="l-filter-column">');
  4917. rowHtmlArr.push('<select class="fieldsel">');
  4918. for (var i = 0, l = fields.length; i < l; i++)
  4919. {
  4920. var field = fields[i];
  4921. rowHtmlArr.push('<option value="' + field.name + '"');
  4922. if (i == 0) rowHtmlArr.push(" selected ");
  4923. rowHtmlArr.push('>');
  4924. rowHtmlArr.push(field.display);
  4925. rowHtmlArr.push('</option>');
  4926. }
  4927. rowHtmlArr.push("</select>");
  4928. rowHtmlArr.push('</td>');
  4929. rowHtmlArr.push('<td class="l-filter-op">');
  4930. rowHtmlArr.push('<select class="opsel">');
  4931. rowHtmlArr.push(g._bulidOpSelectOptionsHtml(fieldType));
  4932. rowHtmlArr.push('</select>');
  4933. rowHtmlArr.push('</td>');
  4934. rowHtmlArr.push('<td class="l-filter-value">');
  4935. rowHtmlArr.push('<input type="text" class="valtxt" />');
  4936. rowHtmlArr.push('</td>');
  4937. rowHtmlArr.push('<td>');
  4938. rowHtmlArr.push('<div class="l-icon-cross deleterole"></div>');
  4939. rowHtmlArr.push('</td>');
  4940. rowHtmlArr.push('</tr>');
  4941. return rowHtmlArr.join('');
  4942. },
  4943. //获取一个运算符选择框的html
  4944. _bulidOpSelectOptionsHtml: function (fieldType)
  4945. {
  4946. var g = this, p = this.options;
  4947. var ops = p.operators[fieldType];
  4948. var opHtmlArr = [];
  4949. for (var i = 0, l = ops.length; i < l; i++)
  4950. {
  4951. var op = ops[i];
  4952. opHtmlArr[opHtmlArr.length] = '<option value="' + op + '">';
  4953. opHtmlArr[opHtmlArr.length] = p.strings[op];
  4954. opHtmlArr[opHtmlArr.length] = '</option>';
  4955. }
  4956. return opHtmlArr.join('');
  4957. }
  4958. });
  4959. })(jQuery);/**
  4960. * jQuery ligerUI 1.1.9
  4961. *
  4962. * http://ligerui.com
  4963. *
  4964. * Author daomi 2012 [ gd_star@163.com ]
  4965. *
  4966. */
  4967. (function ($)
  4968. {
  4969. $.fn.ligerForm = function ()
  4970. {
  4971. return $.ligerui.run.call(this, "ligerForm", arguments);
  4972. };
  4973. $.ligerDefaults = $.ligerDefaults || {};
  4974. $.ligerDefaults.Form = {
  4975. //控件宽度
  4976. inputWidth: 180,
  4977. //标签宽度
  4978. labelWidth: 90,
  4979. //间隔宽度
  4980. space: 40,
  4981. rightToken: ':',
  4982. //标签对齐方式
  4983. labelAlign: 'left',
  4984. //控件对齐方式
  4985. align: 'left',
  4986. //字段
  4987. fields: [],
  4988. //创建的表单元素是否附加ID
  4989. appendID: true,
  4990. //生成表单元素ID的前缀
  4991. prefixID: "",
  4992. //json解析函数
  4993. toJSON: $.ligerui.toJSON
  4994. };
  4995. //@description 默认表单编辑器构造器扩展(如果创建的表单效果不满意 建议重载)
  4996. //@param {jinput} 表单元素jQuery对象 比如input、select、textarea
  4997. $.ligerDefaults.Form.editorBulider = function (jinput)
  4998. {
  4999. //这里this就是form的ligerui对象
  5000. var g = this, p = this.options;
  5001. var inputOptions = {};
  5002. if (p.inputWidth) inputOptions.width = p.inputWidth;
  5003. if (jinput.is("select"))
  5004. {
  5005. jinput.ligerComboBox(inputOptions);
  5006. }
  5007. else if (jinput.is(":text") || jinput.is(":password"))
  5008. {
  5009. var ltype = jinput.attr("ltype");
  5010. switch (ltype)
  5011. {
  5012. case "select":
  5013. case "combobox":
  5014. jinput.ligerComboBox(inputOptions);
  5015. break;
  5016. case "spinner":
  5017. jinput.ligerSpinner(inputOptions);
  5018. break;
  5019. case "date":
  5020. jinput.ligerDateEditor(inputOptions);
  5021. break;
  5022. case "float":
  5023. case "number":
  5024. inputOptions.number = true;
  5025. jinput.ligerTextBox(inputOptions);
  5026. break;
  5027. case "int":
  5028. case "digits":
  5029. inputOptions.digits = true;
  5030. default:
  5031. jinput.ligerTextBox(inputOptions);
  5032. break;
  5033. }
  5034. }
  5035. else if (jinput.is(":radio"))
  5036. {
  5037. jinput.ligerRadio(inputOptions);
  5038. }
  5039. else if (jinput.is(":checkbox"))
  5040. {
  5041. jinput.ligerCheckBox(inputOptions);
  5042. }
  5043. else if (jinput.is("textarea"))
  5044. {
  5045. jinput.addClass("l-textarea");
  5046. }
  5047. }
  5048. //表单组件
  5049. $.ligerui.controls.Form = function (element, options)
  5050. {
  5051. $.ligerui.controls.Form.base.constructor.call(this, element, options);
  5052. };
  5053. $.ligerui.controls.Form.ligerExtend($.ligerui.core.UIComponent, {
  5054. __getType: function ()
  5055. {
  5056. return 'Form'
  5057. },
  5058. __idPrev: function ()
  5059. {
  5060. return 'Form';
  5061. },
  5062. _init: function ()
  5063. {
  5064. $.ligerui.controls.Form.base._init.call(this);
  5065. },
  5066. _render: function ()
  5067. {
  5068. var g = this, p = this.options;
  5069. var jform = $(this.element);
  5070. //自动创建表单
  5071. if (p.fields && p.fields.length)
  5072. {
  5073. if (!jform.hasClass("l-form"))
  5074. jform.addClass("l-form");
  5075. var out = [];
  5076. var appendULStartTag = false;
  5077. $(p.fields).each(function (index, field)
  5078. {
  5079. var name = field.name || field.id;
  5080. if (!name) return;
  5081. if (field.type == "hidden")
  5082. {
  5083. out.push('<input type="hidden" id="' + name + '" name="' + name + '" />');
  5084. return;
  5085. }
  5086. var newLine = field.renderToNewLine || field.newline;
  5087. if (newLine == null) newLine = true;
  5088. if (field.merge) newLine = false;
  5089. if (field.group) newLine = true;
  5090. if (newLine)
  5091. {
  5092. if (appendULStartTag)
  5093. {
  5094. out.push('</ul>');
  5095. appendULStartTag = false;
  5096. }
  5097. if (field.group)
  5098. {
  5099. out.push('<div class="l-group');
  5100. if (field.groupicon)
  5101. out.push(' l-group-hasicon');
  5102. out.push('">');
  5103. if (field.groupicon)
  5104. out.push('<img src="' + field.groupicon + '" />');
  5105. out.push('<span>' + field.group + '</span></div>');
  5106. }
  5107. out.push('<ul>');
  5108. appendULStartTag = true;
  5109. }
  5110. //append label
  5111. out.push(g._buliderLabelContainer(field));
  5112. //append input
  5113. out.push(g._buliderControlContainer(field));
  5114. //append space
  5115. out.push(g._buliderSpaceContainer(field));
  5116. });
  5117. if (appendULStartTag)
  5118. {
  5119. out.push('</ul>');
  5120. appendULStartTag = false;
  5121. }
  5122. jform.append(out.join(''));
  5123. }
  5124. //生成ligerui表单样式
  5125. $("input,select,textarea", jform).each(function ()
  5126. {
  5127. p.editorBulider.call(g, $(this));
  5128. });
  5129. },
  5130. //标签部分
  5131. _buliderLabelContainer: function (field)
  5132. {
  5133. var g = this, p = this.options;
  5134. var label = field.label || field.display;
  5135. var labelWidth = field.labelWidth || field.labelwidth || p.labelWidth;
  5136. var labelAlign = field.labelAlign || p.labelAlign;
  5137. if (label) label += p.rightToken;
  5138. var out = [];
  5139. out.push('<li style="');
  5140. if (labelWidth)
  5141. {
  5142. out.push('width:' + labelWidth + 'px;');
  5143. }
  5144. if (labelAlign)
  5145. {
  5146. out.push('text-align:' + labelAlign + ';');
  5147. }
  5148. out.push('">');
  5149. if (label)
  5150. {
  5151. out.push(label);
  5152. }
  5153. out.push('</li>');
  5154. return out.join('');
  5155. },
  5156. //控件部分
  5157. _buliderControlContainer: function (field)
  5158. {
  5159. var g = this, p = this.options;
  5160. var width = field.width || p.inputWidth;
  5161. var align = field.align || field.textAlign || field.textalign || p.align;
  5162. var out = [];
  5163. out.push('<li style="');
  5164. if (width)
  5165. {
  5166. out.push('width:' + width + 'px;');
  5167. }
  5168. if (align)
  5169. {
  5170. out.push('text-align:' + align + ';');
  5171. }
  5172. out.push('">');
  5173. out.push(g._buliderControl(field));
  5174. out.push('</li>');
  5175. return out.join('');
  5176. },
  5177. //间隔部分
  5178. _buliderSpaceContainer: function (field)
  5179. {
  5180. var g = this, p = this.options;
  5181. var spaceWidth = field.space || field.spaceWidth || p.space;
  5182. var out = [];
  5183. out.push('<li style="');
  5184. if (spaceWidth)
  5185. {
  5186. out.push('width:' + spaceWidth + 'px;');
  5187. }
  5188. out.push('">');
  5189. out.push('</li>');
  5190. return out.join('');
  5191. },
  5192. _buliderControl: function (field)
  5193. {
  5194. var g = this, p = this.options;
  5195. var width = field.width || p.inputWidth;
  5196. var name = field.name || field.id;
  5197. var out = [];
  5198. if (field.comboboxName && field.type == "select")
  5199. {
  5200. out.push('<input type="hidden" id="' + p.prefixID + name + '" name="' + name + '" />');
  5201. }
  5202. if (field.textarea || field.type == "textarea")
  5203. {
  5204. out.push('<textarea ');
  5205. }
  5206. else if (field.type == "checkbox")
  5207. {
  5208. out.push('<input type="checkbox" ');
  5209. }
  5210. else if (field.type == "radio")
  5211. {
  5212. out.push('<input type="radio" ');
  5213. }
  5214. else if (field.type == "password")
  5215. {
  5216. out.push('<input type="password" ');
  5217. }
  5218. else
  5219. {
  5220. out.push('<input type="text" ');
  5221. }
  5222. if (field.cssClass)
  5223. {
  5224. out.push('class="' + field.cssClass + '" ');
  5225. }
  5226. if (field.type)
  5227. {
  5228. out.push('ltype="' + field.type + '" ');
  5229. }
  5230. if (field.attr)
  5231. {
  5232. for (var attrp in field.attr)
  5233. {
  5234. out.push(attrp + '="' + field.attr[attrp] + '" ');
  5235. }
  5236. }
  5237. if (field.comboboxName && field.type == "select")
  5238. {
  5239. out.push('name="' + field.comboboxName + '"');
  5240. if (p.appendID)
  5241. {
  5242. out.push(' id="' + p.prefixID + field.comboboxName + '" ');
  5243. }
  5244. }
  5245. else
  5246. {
  5247. out.push('name="' + name + '"');
  5248. if (p.appendID)
  5249. {
  5250. out.push(' id="' + name + '" ');
  5251. }
  5252. }
  5253. //参数
  5254. var fieldOptions = $.extend({
  5255. width: width - 2
  5256. }, field.options || {});
  5257. out.push(" ligerui='" + p.toJSON(fieldOptions) + "' ");
  5258. //验证参数
  5259. if (field.validate)
  5260. {
  5261. out.push(" validate='" + p.toJSON(field.validate) + "' ");
  5262. }
  5263. out.push(' />');
  5264. return out.join('');
  5265. }
  5266. });
  5267. })(jQuery);/**
  5268. * jQuery ligerUI 1.1.9
  5269. *
  5270. * http://ligerui.com
  5271. *
  5272. * Author daomi 2012 [ gd_star@163.com ]
  5273. *
  5274. */
  5275. (function ($)
  5276. {
  5277. var l = $.ligerui;
  5278. $.fn.ligerGrid = function (options)
  5279. {
  5280. return $.ligerui.run.call(this, "ligerGrid", arguments);
  5281. };
  5282. $.fn.ligerGetGridManager = function ()
  5283. {
  5284. return $.ligerui.run.call(this, "ligerGetGridManager", arguments);
  5285. };
  5286. $.ligerDefaults.Grid = {
  5287. title: null,
  5288. width: 'auto', //宽度值
  5289. height: 'auto', //宽度值
  5290. columnWidth: null, //默认列宽度
  5291. resizable: true, //table是否可伸缩
  5292. url: false, //ajax url
  5293. usePager: true, //是否分页
  5294. page: 1, //默认当前页
  5295. pageSize: 10, //每页默认的结果数
  5296. pageSizeOptions: [10, 20, 30, 40, 50], //可选择设定的每页结果数
  5297. parms: [], //提交到服务器的参数
  5298. columns: [], //数据源
  5299. minColToggle: 1, //最小显示的列
  5300. dataType: 'server', //数据源:本地(local)或(server),本地是将读取p.data。不需要配置,取决于设置了data或是url
  5301. dataAction: 'server', //提交数据的方式:本地(local)或(server),选择本地方式时将在客服端分页、排序。
  5302. showTableToggleBtn: false, //是否显示'显示隐藏Grid'按钮
  5303. switchPageSizeApplyComboBox: false, //切换每页记录数是否应用ligerComboBox
  5304. allowAdjustColWidth: true, //是否允许调整列宽
  5305. checkbox: false, //是否显示复选框
  5306. allowHideColumn: true, //是否显示'切换列层'按钮
  5307. enabledEdit: false, //是否允许编辑
  5308. isScroll: true, //是否滚动
  5309. onDragCol: null, //拖动列事件
  5310. onToggleCol: null, //切换列事件
  5311. onChangeSort: null, //改变排序事件
  5312. onSuccess: null, //成功获取服务器数据的事件
  5313. onDblClickRow: null, //双击行事件
  5314. onSelectRow: null, //选择行事件
  5315. onUnSelectRow: null, //取消选择行事件
  5316. onBeforeCheckRow: null, //选择前事件,可以通过return false阻止操作(复选框)
  5317. onCheckRow: null, //选择事件(复选框)
  5318. onBeforeCheckAllRow: null, //选择前事件,可以通过return false阻止操作(复选框 全选/全不选)
  5319. onCheckAllRow: null, //选择事件(复选框 全选/全不选)
  5320. onBeforeShowData: null, //显示数据前事件,可以通过reutrn false阻止操作
  5321. onAfterShowData: null, //显示完数据事件
  5322. onError: null, //错误事件
  5323. onSubmit: null, //提交前事件
  5324. dateFormat: 'yyyy-MM-dd', //默认时间显示格式
  5325. InWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
  5326. statusName: '__status', //状态名
  5327. method: 'post', //提交方式
  5328. async: true,
  5329. fixedCellHeight: true, //是否固定单元格的高度
  5330. heightDiff: 0, //高度补差,当设置height:100%时,可能会有高度的误差,可以通过这个属性调整
  5331. cssClass: null, //类名
  5332. root: 'Rows', //数据源字段名
  5333. record: 'Total', //数据源记录数字段名
  5334. pageParmName: 'page', //页索引参数名,(提交给服务器)
  5335. pagesizeParmName: 'pagesize', //页记录数参数名,(提交给服务器)
  5336. sortnameParmName: 'sortname', //页排序列名(提交给服务器)
  5337. sortorderParmName: 'sortorder', //页排序方向(提交给服务器)
  5338. onReload: null, //刷新事件,可以通过return false来阻止操作
  5339. onToFirst: null, //第一页,可以通过return false来阻止操作
  5340. onToPrev: null, //上一页,可以通过return false来阻止操作
  5341. onToNext: null, //下一页,可以通过return false来阻止操作
  5342. onToLast: null, //最后一页,可以通过return false来阻止操作
  5343. allowUnSelectRow: false, //是否允许反选行
  5344. alternatingRow: true, //奇偶行效果
  5345. mouseoverRowCssClass: 'l-grid-row-over',
  5346. enabledSort: true, //是否允许排序
  5347. rowAttrRender: null, //行自定义属性渲染器(包括style,也可以定义)
  5348. groupColumnName: null, //分组 - 列名
  5349. groupColumnDisplay: '分组', //分组 - 列显示名字
  5350. groupRender: null, //分组 - 渲染器
  5351. totalRender: null, //统计行(全部数据)
  5352. delayLoad: false, //初始化时是否不加载
  5353. where: null, //数据过滤查询函数,(参数一 data item,参数二 data item index)
  5354. selectRowButtonOnly: false, //复选框模式时,是否只允许点击复选框才能选择行
  5355. onAfterAddRow: null, //增加行后事件
  5356. onBeforeEdit: null, //编辑前事件
  5357. onBeforeSubmitEdit: null, //验证编辑器结果是否通过
  5358. onAfterEdit: null, //结束编辑后事件
  5359. onLoading: null, //加载时函数
  5360. onLoaded: null, //加载完函数
  5361. onContextmenu: null, //右击事件
  5362. whenRClickToSelect: false, //右击行时是否选中
  5363. contentType: null, //Ajax contentType参数
  5364. checkboxColWidth: 27, //复选框列宽度
  5365. detailColWidth: 29, //明细列宽度
  5366. clickToEdit: true, //是否点击单元格的时候就编辑
  5367. detailToEdit: false, //是否点击明细的时候进入编辑
  5368. onEndEdit: null,
  5369. minColumnWidth: 80,
  5370. tree: null, //treeGrid模式
  5371. isChecked: null, //复选框 初始化函数
  5372. frozen: true, //是否固定列
  5373. frozenDetail: false, //明细按钮是否在固定列中
  5374. frozenCheckbox: true, //复选框按钮是否在固定列中
  5375. detailHeight: 260,
  5376. rownumbers: false, //是否显示行序号
  5377. frozenRownumbers: true, //行序号是否在固定列中
  5378. rownumbersColWidth: 26,
  5379. colDraggable: false, //是否允许表头拖拽
  5380. rowDraggable: false, //是否允许行拖拽
  5381. rowDraggingRender: null,
  5382. autoCheckChildren: true, //是否自动选中子节点
  5383. onRowDragDrop: null, //行拖拽事件
  5384. rowHeight: 22, //行默认的高度
  5385. headerRowHeight: 23, //表头行的高度
  5386. toolbar: null, //工具条,参数同 ligerToolbar的
  5387. headerImg: null //表格头部图标
  5388. };
  5389. $.ligerDefaults.GridString = {
  5390. errorMessage: '发生错误',
  5391. pageStatMessage: '显示从{from}到{to},总 {total} 条 。每页显示:{pagesize}',
  5392. pageTextMessage: 'Page',
  5393. loadingMessage: '加载中...',
  5394. findTextMessage: '查找',
  5395. noRecordMessage: '没有符合条件的记录存在',
  5396. isContinueByDataChanged: '数据已经改变,如果继续将丢失数据,是否继续?',
  5397. cancelMessage: '取消',
  5398. saveMessage: '保存',
  5399. applyMessage: '应用',
  5400. draggingMessage: '{count}行'
  5401. };
  5402. //接口方法扩展
  5403. $.ligerMethos.Grid = $.ligerMethos.Grid || {};
  5404. //排序器扩展
  5405. $.ligerDefaults.Grid.sorters = $.ligerDefaults.Grid.sorters || {};
  5406. //格式化器扩展
  5407. $.ligerDefaults.Grid.formatters = $.ligerDefaults.Grid.formatters || {};
  5408. //编辑器扩展
  5409. $.ligerDefaults.Grid.editors = $.ligerDefaults.Grid.editors || {};
  5410. $.ligerDefaults.Grid.sorters['date'] = function (val1, val2)
  5411. {
  5412. return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
  5413. };
  5414. $.ligerDefaults.Grid.sorters['int'] = function (val1, val2)
  5415. {
  5416. return parseInt(val1) < parseInt(val2) ? -1 : parseInt(val1) > parseInt(val2) ? 1 : 0;
  5417. };
  5418. $.ligerDefaults.Grid.sorters['float'] = function (val1, val2)
  5419. {
  5420. return parseFloat(val1) < parseFloat(val2) ? -1 : parseFloat(val1) > parseFloat(val2) ? 1 : 0;
  5421. };
  5422. $.ligerDefaults.Grid.sorters['string'] = function (val1, val2)
  5423. {
  5424. return val1.localeCompare(val2);
  5425. };
  5426. $.ligerDefaults.Grid.formatters['date'] = function (value, column)
  5427. {
  5428. function getFormatDate(date, dateformat)
  5429. {
  5430. var g = this, p = this.options;
  5431. if (isNaN(date)) return null;
  5432. var format = dateformat;
  5433. var o = {
  5434. "M+": date.getMonth() + 1,
  5435. "d+": date.getDate(),
  5436. "h+": date.getHours(),
  5437. "m+": date.getMinutes(),
  5438. "s+": date.getSeconds(),
  5439. "q+": Math.floor((date.getMonth() + 3) / 3),
  5440. "S": date.getMilliseconds()
  5441. }
  5442. if (/(y+)/.test(format))
  5443. {
  5444. format = format.replace(RegExp.$1, (date.getFullYear() + "")
  5445. .substr(4 - RegExp.$1.length));
  5446. }
  5447. for (var k in o)
  5448. {
  5449. if (new RegExp("(" + k + ")").test(format))
  5450. {
  5451. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
  5452. : ("00" + o[k]).substr(("" + o[k]).length));
  5453. }
  5454. }
  5455. return format;
  5456. }
  5457. if (!value) return "";
  5458. // /Date(1328423451489)/
  5459. if (typeof (value) == "string" && /^\/Date/.test(value))
  5460. {
  5461. value = value.replace(/^\//, "new ").replace(/\/$/, "");
  5462. eval("value = " + value);
  5463. }
  5464. if (value instanceof Date)
  5465. {
  5466. var format = column.format || this.options.dateFormat || "yyyy-MM-dd";
  5467. return getFormatDate(value, format);
  5468. }
  5469. else
  5470. {
  5471. return value.toString();
  5472. }
  5473. }
  5474. $.ligerDefaults.Grid.editors['date'] =
  5475. {
  5476. create: function (container, editParm)
  5477. {
  5478. var column = editParm.column;
  5479. var input = $("<input type='text'/>");
  5480. container.append(input);
  5481. var options = {};
  5482. var ext = column.editor.p || column.editor.ext;
  5483. if (ext)
  5484. {
  5485. var tmp = typeof (ext) == 'function' ?
  5486. ext(editParm.record, editParm.rowindex, editParm.value, column) : ext;
  5487. $.extend(options, tmp);
  5488. }
  5489. input.ligerDateEditor(options);
  5490. return input;
  5491. },
  5492. getValue: function (input, editParm)
  5493. {
  5494. return input.liger('option', 'value');
  5495. },
  5496. setValue: function (input, value, editParm)
  5497. {
  5498. input.liger('option', 'value', 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['select'] =
  5511. $.ligerDefaults.Grid.editors['combobox'] =
  5512. {
  5513. create: function (container, editParm)
  5514. {
  5515. var column = editParm.column;
  5516. var input = $("<input type='text'/>");
  5517. container.append(input);
  5518. var options = {
  5519. data: column.editor.data,
  5520. slide: false,
  5521. valueField: column.editor.valueField || column.editor.valueColumnName,
  5522. textField: column.editor.textField || column.editor.displayColumnName
  5523. };
  5524. var ext = column.editor.p || column.editor.ext;
  5525. if (ext)
  5526. {
  5527. var tmp = typeof (ext) == 'function' ?
  5528. ext(editParm.record, editParm.rowindex, editParm.value, column) : ext;
  5529. $.extend(options, tmp);
  5530. }
  5531. input.ligerComboBox(options);
  5532. return input;
  5533. },
  5534. getValue: function (input, editParm)
  5535. {
  5536. return input.liger('option', 'value');
  5537. },
  5538. setValue: function (input, value, editParm)
  5539. {
  5540. input.liger('option', 'value', value);
  5541. },
  5542. resize: function (input, width, height, editParm)
  5543. {
  5544. input.liger('option', 'width', width);
  5545. input.liger('option', 'height', height);
  5546. },
  5547. destroy: function (input, editParm)
  5548. {
  5549. input.liger('destroy');
  5550. }
  5551. };
  5552. $.ligerDefaults.Grid.editors['int'] =
  5553. $.ligerDefaults.Grid.editors['float'] =
  5554. $.ligerDefaults.Grid.editors['spinner'] =
  5555. {
  5556. create: function (container, editParm)
  5557. {
  5558. var column = editParm.column;
  5559. var input = $("<input type='text'/>");
  5560. container.append(input);
  5561. input.css({ border: '#6E90BE' })
  5562. var options = {
  5563. type: column.editor.type == 'float' ? 'float' : 'int'
  5564. };
  5565. if (column.editor.minValue != undefined) options.minValue = column.editor.minValue;
  5566. if (column.editor.maxValue != undefined) options.maxValue = column.editor.maxValue;
  5567. input.ligerSpinner(options);
  5568. return input;
  5569. },
  5570. getValue: function (input, editParm)
  5571. {
  5572. var column = editParm.column;
  5573. var isInt = column.editor.type == "int";
  5574. if (isInt)
  5575. return parseInt(input.val(), 10);
  5576. else
  5577. return parseFloat(input.val());
  5578. },
  5579. setValue: function (input, value, editParm)
  5580. {
  5581. input.val(value);
  5582. },
  5583. resize: function (input, width, height, editParm)
  5584. {
  5585. input.liger('option', 'width', width);
  5586. input.liger('option', 'height', height);
  5587. },
  5588. destroy: function (input, editParm)
  5589. {
  5590. input.liger('destroy');
  5591. }
  5592. };
  5593. $.ligerDefaults.Grid.editors['string'] =
  5594. $.ligerDefaults.Grid.editors['text'] = {
  5595. create: function (container, editParm)
  5596. {
  5597. var input = $("<input type='text' class='l-text-editing'/>");
  5598. container.append(input);
  5599. input.ligerTextBox();
  5600. return input;
  5601. },
  5602. getValue: function (input, editParm)
  5603. {
  5604. return input.val();
  5605. },
  5606. setValue: function (input, value, editParm)
  5607. {
  5608. input.val(value);
  5609. },
  5610. resize: function (input, width, height, editParm)
  5611. {
  5612. input.liger('option', 'width', width);
  5613. input.liger('option', 'height', height);
  5614. },
  5615. destroy: function (input, editParm)
  5616. {
  5617. input.liger('destroy');
  5618. }
  5619. };
  5620. $.ligerDefaults.Grid.editors['chk'] = $.ligerDefaults.Grid.editors['checkbox'] = {
  5621. create: function (container, editParm)
  5622. {
  5623. var input = $("<input type='checkbox' />");
  5624. container.append(input);
  5625. input.ligerCheckBox();
  5626. return input;
  5627. },
  5628. getValue: function (input, editParm)
  5629. {
  5630. return input[0].checked ? 1 : 0;
  5631. },
  5632. setValue: function (input, value, editParm)
  5633. {
  5634. input.val(value ? true : false);
  5635. },
  5636. resize: function (input, width, height, editParm)
  5637. {
  5638. input.liger('option', 'width', width);
  5639. input.liger('option', 'height', height);
  5640. },
  5641. destroy: function (input, editParm)
  5642. {
  5643. input.liger('destroy');
  5644. }
  5645. };
  5646. $.ligerui.controls.Grid = function (element, options)
  5647. {
  5648. $.ligerui.controls.Grid.base.constructor.call(this, element, options);
  5649. };
  5650. $.ligerui.controls.Grid.ligerExtend($.ligerui.core.UIComponent, {
  5651. __getType: function ()
  5652. {
  5653. return '$.ligerui.controls.Grid';
  5654. },
  5655. __idPrev: function ()
  5656. {
  5657. return 'grid';
  5658. },
  5659. _extendMethods: function ()
  5660. {
  5661. return $.ligerMethos.Grid;
  5662. },
  5663. _init: function ()
  5664. {
  5665. $.ligerui.controls.Grid.base._init.call(this);
  5666. var g = this, p = this.options;
  5667. p.dataType = p.url ? "server" : "local";
  5668. if (p.dataType == "local")
  5669. {
  5670. p.data = p.data || [];
  5671. p.dataAction = "local";
  5672. }
  5673. if (p.isScroll == false)
  5674. {
  5675. p.height = 'auto';
  5676. }
  5677. if (!p.frozen)
  5678. {
  5679. p.frozenCheckbox = false;
  5680. p.frozenDetail = false;
  5681. p.frozenRownumbers = false;
  5682. }
  5683. if (p.detailToEdit)
  5684. {
  5685. p.enabledEdit = true;
  5686. p.clickToEdit = false;
  5687. p.detail = {
  5688. height: 'auto',
  5689. onShowDetail: function (record, container, callback)
  5690. {
  5691. $(container).addClass("l-grid-detailpanel-edit");
  5692. g.beginEdit(record, function (rowdata, column)
  5693. {
  5694. var editContainer = $("<div class='l-editbox'></div>");
  5695. editContainer.width(120).height(p.rowHeight + 1);
  5696. editContainer.appendTo(container);
  5697. return editContainer;
  5698. });
  5699. function removeRow()
  5700. {
  5701. $(container).parent().parent().remove();
  5702. g.collapseDetail(record);
  5703. }
  5704. $("<div class='l-clear'></div>").appendTo(container);
  5705. $("<div class='l-button'>" + p.saveMessage + "</div>").appendTo(container).click(function ()
  5706. {
  5707. g.endEdit(record);
  5708. removeRow();
  5709. });
  5710. $("<div class='l-button'>" + p.applyMessage + "</div>").appendTo(container).click(function ()
  5711. {
  5712. g.submitEdit(record);
  5713. });
  5714. $("<div class='l-button'>" + p.cancelMessage + "</div>").appendTo(container).click(function ()
  5715. {
  5716. g.cancelEdit(record);
  5717. removeRow();
  5718. });
  5719. }
  5720. };
  5721. }
  5722. if (p.tree)//启用分页模式
  5723. {
  5724. p.tree.childrenName = p.tree.childrenName || "children";
  5725. p.tree.isParent = p.tree.isParent || function (rowData)
  5726. {
  5727. var exist = p.tree.childrenName in rowData;
  5728. return exist;
  5729. };
  5730. p.tree.isExtend = p.tree.isExtend || function (rowData)
  5731. {
  5732. if ('isextend' in rowData && rowData['isextend'] == false)
  5733. return false;
  5734. return true;
  5735. };
  5736. }
  5737. },
  5738. _render: function ()
  5739. {
  5740. var g = this, p = this.options;
  5741. g.grid = $(g.element);
  5742. g.grid.addClass("l-panel");
  5743. var gridhtmlarr = [];
  5744. gridhtmlarr.push(" <div class='l-panel-header'><span class='l-panel-header-text'></span></div>");
  5745. gridhtmlarr.push(" <div class='l-grid-loading'></div>");
  5746. gridhtmlarr.push(" <div class='l-panel-topbar'></div>");
  5747. gridhtmlarr.push(" <div class='l-panel-bwarp'>");
  5748. gridhtmlarr.push(" <div class='l-panel-body'>");
  5749. gridhtmlarr.push(" <div class='l-grid'>");
  5750. gridhtmlarr.push(" <div class='l-grid-dragging-line'></div>");
  5751. gridhtmlarr.push(" <div class='l-grid-popup'><table cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  5752. gridhtmlarr.push(" <div class='l-grid1'>");
  5753. gridhtmlarr.push(" <div class='l-grid-header l-grid-header1'>");
  5754. gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  5755. gridhtmlarr.push(" </div>");
  5756. gridhtmlarr.push(" <div class='l-grid-body l-grid-body1'>");
  5757. gridhtmlarr.push(" </div>");
  5758. gridhtmlarr.push(" </div>");
  5759. gridhtmlarr.push(" <div class='l-grid2'>");
  5760. gridhtmlarr.push(" <div class='l-grid-header l-grid-header2'>");
  5761. gridhtmlarr.push(" <div class='l-grid-header-inner'><table class='l-grid-header-table' cellpadding='0' cellspacing='0'><tbody></tbody></table></div>");
  5762. gridhtmlarr.push(" </div>");
  5763. gridhtmlarr.push(" <div class='l-grid-body l-grid-body2 l-scroll'>");
  5764. gridhtmlarr.push(" </div>");
  5765. gridhtmlarr.push(" </div>");
  5766. gridhtmlarr.push(" </div>");
  5767. gridhtmlarr.push(" </div>");
  5768. gridhtmlarr.push(" </div>");
  5769. gridhtmlarr.push(" <div class='l-panel-bar'>");
  5770. gridhtmlarr.push(" <div class='l-panel-bbar-inner'>");
  5771. gridhtmlarr.push(" <div class='l-bar-group l-bar-message'><span class='l-bar-text'></span></div>");
  5772. gridhtmlarr.push(" <div class='l-bar-group l-bar-selectpagesize'></div>");
  5773. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5774. gridhtmlarr.push(" <div class='l-bar-group'>");
  5775. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnfirst'><span></span></div>");
  5776. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnprev'><span></span></div>");
  5777. gridhtmlarr.push(" </div>");
  5778. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5779. gridhtmlarr.push(" <div class='l-bar-group'><span class='pcontrol'> <input type='text' size='4' value='1' style='width:20px;height:25px;' maxlength='3' /> / <span></span></span></div>");
  5780. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5781. gridhtmlarr.push(" <div class='l-bar-group'>");
  5782. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnnext'><span></span></div>");
  5783. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnlast'><span></span></div>");
  5784. gridhtmlarr.push(" </div>");
  5785. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5786. gridhtmlarr.push(" <div class='l-bar-group'>");
  5787. gridhtmlarr.push(" <div class='l-bar-button l-bar-btnload'><span></span></div>");
  5788. gridhtmlarr.push(" </div>");
  5789. gridhtmlarr.push(" <div class='l-bar-separator'></div>");
  5790. gridhtmlarr.push(" <div class='l-clear'></div>");
  5791. gridhtmlarr.push(" </div>");
  5792. gridhtmlarr.push(" </div>");
  5793. g.grid.html(gridhtmlarr.join(''));
  5794. //头部
  5795. g.header = $(".l-panel-header:first", g.grid);
  5796. //主体
  5797. g.body = $(".l-panel-body:first", g.grid);
  5798. //底部工具条
  5799. g.toolbar = $(".l-panel-bar:first", g.grid);
  5800. //显示/隐藏列
  5801. g.popup = $(".l-grid-popup:first", g.grid);
  5802. //加载中
  5803. g.gridloading = $(".l-grid-loading:first", g.grid);
  5804. //调整列宽层
  5805. g.draggingline = $(".l-grid-dragging-line", g.grid);
  5806. //顶部工具栏
  5807. g.topbar = $(".l-panel-topbar:first", g.grid);
  5808. g.gridview = $(".l-grid:first", g.grid);
  5809. g.gridview.attr("id", g.id + "grid");
  5810. g.gridview1 = $(".l-grid1:first", g.gridview);
  5811. g.gridview2 = $(".l-grid2:first", g.gridview);
  5812. //表头
  5813. g.gridheader = $(".l-grid-header:first", g.gridview2);
  5814. //表主体
  5815. g.gridbody = $(".l-grid-body:first", g.gridview2);
  5816. //frozen
  5817. g.f = {};
  5818. //表头
  5819. g.f.gridheader = $(".l-grid-header:first", g.gridview1);
  5820. //表主体
  5821. g.f.gridbody = $(".l-grid-body:first", g.gridview1);
  5822. g.currentData = null;
  5823. g.changedCells = {};
  5824. g.editors = {}; //多编辑器同时存在
  5825. g.editor = { editing: false }; //单编辑器,配置clickToEdit
  5826. if (p.height == "auto")
  5827. {
  5828. g.bind("SysGridHeightChanged", function ()
  5829. {
  5830. if (g.enabledFrozen())
  5831. g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height()));
  5832. });
  5833. }
  5834. var pc = $.extend({}, p);
  5835. this._bulid();
  5836. this._setColumns(p.columns);
  5837. delete pc['columns'];
  5838. delete pc['data'];
  5839. delete pc['url'];
  5840. g.set(pc);
  5841. if (!p.delayLoad)
  5842. {
  5843. if (p.url)
  5844. g.set({ url: p.url });
  5845. else if (p.data)
  5846. g.set({ data: p.data });
  5847. }
  5848. },
  5849. _setFrozen: function (frozen)
  5850. {
  5851. if (frozen)
  5852. this.grid.addClass("l-frozen");
  5853. else
  5854. this.grid.removeClass("l-frozen");
  5855. },
  5856. _setCssClass: function (value)
  5857. {
  5858. this.grid.addClass(value);
  5859. },
  5860. _setLoadingMessage: function (value)
  5861. {
  5862. this.gridloading.html(value);
  5863. },
  5864. _setHeight: function (h)
  5865. {
  5866. var g = this, p = this.options;
  5867. g.unbind("SysGridHeightChanged");
  5868. if (h == "auto")
  5869. {
  5870. g.bind("SysGridHeightChanged", function ()
  5871. {
  5872. if (g.enabledFrozen())
  5873. g.gridview.height(Math.max(g.gridview1.height(), g.gridview2.height()));
  5874. });
  5875. return;
  5876. }
  5877. if (typeof h == "string" && h.indexOf('%') > 0)
  5878. {
  5879. if (p.inWindow)
  5880. h = $(window).height() * parseFloat(h) * 0.01;
  5881. else
  5882. h = g.grid.parent().height() * parseFloat(h) * 0.01;
  5883. }
  5884. if (p.title) h -= 24;
  5885. if (p.usePager) h -= 32;
  5886. if (p.totalRender) h -= 25;
  5887. if (p.toolbar) h -= g.topbar.outerHeight();
  5888. var gridHeaderHeight = p.headerRowHeight * (g._columnMaxLevel - 1) + p.headerRowHeight - 1;
  5889. h -= gridHeaderHeight;
  5890. if (h > 0)
  5891. {
  5892. g.gridbody.height(h);
  5893. if (h > 18) g.f.gridbody.height(h - 18);
  5894. g.gridview.height(h + gridHeaderHeight);
  5895. }
  5896. },
  5897. _updateFrozenWidth: function ()
  5898. {
  5899. var g = this, p = this.options;
  5900. if (g.enabledFrozen())
  5901. {
  5902. g.gridview1.width(g.f.gridtablewidth);
  5903. var view2width = g.gridview.width() - g.f.gridtablewidth;
  5904. g.gridview2.css({ left: g.f.gridtablewidth });
  5905. if (view2width > 0) g.gridview2.css({ width: view2width });
  5906. }
  5907. },
  5908. _setWidth: function (value)
  5909. {
  5910. var g = this, p = this.options;
  5911. if (g.enabledFrozen()) g._onResize();
  5912. },
  5913. _setUrl: function (value)
  5914. {
  5915. this.options.url = value;
  5916. if (value)
  5917. {
  5918. this.options.dataType = "server";
  5919. this.loadData(true);
  5920. }
  5921. else
  5922. {
  5923. this.options.dataType = "local";
  5924. }
  5925. },
  5926. _setData: function (value)
  5927. {
  5928. this.loadData(this.options.data);
  5929. },
  5930. // 2012-08-01赵以升添加
  5931. _setParms: function (value)
  5932. {
  5933. this.options.parms = value;
  5934. },
  5935. //刷新数据
  5936. loadData: function (loadDataParm)
  5937. {
  5938. var g = this, p = this.options;
  5939. g.loading = true;
  5940. var clause = null;
  5941. var loadServer = true;
  5942. if (typeof (loadDataParm) == "function")
  5943. {
  5944. clause = loadDataParm;
  5945. loadServer = false;
  5946. }
  5947. else if (typeof (loadDataParm) == "boolean")
  5948. {
  5949. loadServer = loadDataParm;
  5950. }
  5951. else if (typeof (loadDataParm) == "object" && loadDataParm)
  5952. {
  5953. loadServer = false;
  5954. p.dataType = "local";
  5955. p.data = loadDataParm;
  5956. }
  5957. //参数初始化
  5958. if (!p.newPage) p.newPage = 1;
  5959. if (p.dataAction == "server")
  5960. {
  5961. if (!p.sortOrder) p.sortOrder = "asc";
  5962. }
  5963. var param = [];
  5964. if (p.parms)
  5965. {
  5966. if (p.parms.length)
  5967. {
  5968. $(p.parms).each(function ()
  5969. {
  5970. param.push({ name: this.name, value: this.value });
  5971. });
  5972. }
  5973. else if (typeof p.parms == "object")
  5974. {
  5975. for (var name in p.parms)
  5976. {
  5977. param.push({ name: name, value: p.parms[name] });
  5978. }
  5979. }
  5980. }
  5981. if (p.dataAction == "server")
  5982. {
  5983. if (p.usePager)
  5984. {
  5985. param.push({ name: p.pageParmName, value: p.newPage });
  5986. param.push({ name: p.pagesizeParmName, value: p.pageSize });
  5987. }
  5988. if (p.sortName)
  5989. {
  5990. param.push({ name: p.sortnameParmName, value: p.sortName });
  5991. param.push({ name: p.sortorderParmName, value: p.sortOrder });
  5992. }
  5993. };
  5994. $(".l-bar-btnload span", g.toolbar).addClass("l-disabled");
  5995. if (p.dataType == "local")
  5996. {
  5997. g.filteredData = g.data = p.data;
  5998. if (clause)
  5999. g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  6000. if (p.usePager)
  6001. g.currentData = g._getCurrentPageData(g.filteredData);
  6002. else
  6003. {
  6004. g.currentData = g.filteredData;
  6005. }
  6006. g._showData();
  6007. }
  6008. else if (p.dataAction == "local" && !loadServer)
  6009. {
  6010. if (g.data && g.data[p.root])
  6011. {
  6012. g.filteredData = g.data;
  6013. if (clause)
  6014. g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  6015. g.currentData = g._getCurrentPageData(g.filteredData);
  6016. g._showData();
  6017. }
  6018. }
  6019. else
  6020. {
  6021. g.loadServerData(param, clause);
  6022. //g.loadServerData.ligerDefer(g, 10, [param, clause]);
  6023. }
  6024. g.loading = false;
  6025. },
  6026. loadServerData: function (param, clause)
  6027. {
  6028. var g = this, p = this.options;
  6029. var ajaxOptions = {
  6030. type: p.method,
  6031. url: p.url,
  6032. data: param,
  6033. async: p.async,
  6034. dataType: 'json',
  6035. beforeSend: function ()
  6036. {
  6037. if (g.hasBind('loading'))
  6038. {
  6039. g.trigger('loading');
  6040. }
  6041. else
  6042. {
  6043. g.toggleLoading(true);
  6044. }
  6045. },
  6046. success: function (data)
  6047. {
  6048. g.trigger('success', [data, g]);
  6049. if (!data || !data[p.root] || !data[p.root].length)
  6050. {
  6051. g.currentData = g.data = {};
  6052. g.currentData[p.root] = g.data[p.root] = [];
  6053. g.currentData[p.record] = g.data[p.record] = 0;
  6054. g._showData();
  6055. return;
  6056. }
  6057. g.data = data;
  6058. if (p.dataAction == "server")
  6059. {
  6060. g.currentData = g.data;
  6061. }
  6062. else
  6063. {
  6064. g.filteredData = g.data;
  6065. if (clause) g.filteredData[p.root] = g._searchData(g.filteredData[p.root], clause);
  6066. if (p.usePager)
  6067. g.currentData = g._getCurrentPageData(g.filteredData);
  6068. else
  6069. g.currentData = g.filteredData;
  6070. }
  6071. g._showData.ligerDefer(g, 10, [g.currentData]);
  6072. },
  6073. complete: function ()
  6074. {
  6075. g.trigger('complete', [g]);
  6076. if (g.hasBind('loaded'))
  6077. {
  6078. g.trigger('loaded', [g]);
  6079. }
  6080. else
  6081. {
  6082. g.toggleLoading.ligerDefer(g, 10, [false]);
  6083. }
  6084. },
  6085. error: function (XMLHttpRequest, textStatus, errorThrown)
  6086. {
  6087. g.currentData = g.data = {};
  6088. g.currentData[p.root] = g.data[p.root] = [];
  6089. g.currentData[p.record] = g.data[p.record] = 0;
  6090. g.toggleLoading.ligerDefer(g, 10, [false]);
  6091. $(".l-bar-btnload span", g.toolbar).removeClass("l-disabled");
  6092. g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]);
  6093. }
  6094. };
  6095. if (p.contentType) ajaxOptions.contentType = p.contentType;
  6096. $.ajax(ajaxOptions);
  6097. },
  6098. toggleLoading: function (show)
  6099. {
  6100. this.gridloading[show ? 'show' : 'hide']();
  6101. },
  6102. _createEditor: function (editor, container, editParm, width, height)
  6103. {
  6104. var editorInput = editor.create(container, editParm);
  6105. if (editor.setValue) editor.setValue(editorInput, editParm.value, editParm);
  6106. if (editor.resize) editor.resize(editorInput, width, height, editParm);
  6107. return editorInput;
  6108. },
  6109. /*
  6110. @description 使一行进入编辑状态
  6111. @param {rowParm} rowindex或者rowdata
  6112. @param {containerBulider} 编辑器填充层构造器
  6113. */
  6114. beginEdit: function (rowParm, containerBulider)
  6115. {
  6116. var g = this, p = this.options;
  6117. if (!p.enabledEdit || p.clickToEdit) return;
  6118. var rowdata = g.getRow(rowParm);
  6119. if (rowdata._editing) return;
  6120. if (g.trigger('beginEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return;
  6121. g.editors[rowdata['__id']] = {};
  6122. rowdata._editing = true;
  6123. g.reRender({ rowdata: rowdata });
  6124. containerBulider = containerBulider || function (rowdata, column)
  6125. {
  6126. var cellobj = g.getCellObj(rowdata, column);
  6127. var container = $(cellobj).html("");
  6128. g.setCellEditing(rowdata, column, true);
  6129. return container;
  6130. };
  6131. for (var i = 0, l = g.columns.length; i < l; i++)
  6132. {
  6133. var column = g.columns[i];
  6134. if (!column.name || !column.editor || !column.editor.type || !p.editors[column.editor.type]) continue;
  6135. var editor = p.editors[column.editor.type];
  6136. var editParm = { record: rowdata, value: rowdata[column.name], column: column, rowindex: rowdata['__index'], grid: g };
  6137. var container = containerBulider(rowdata, column);
  6138. var width = container.width(), height = container.height();
  6139. var editorInput = g._createEditor(editor, container, editParm, width, height);
  6140. g.editors[rowdata['__id']][column['__id']] = { editor: editor, input: editorInput, editParm: editParm, container: container };
  6141. }
  6142. g.trigger('afterBeginEdit', { record: rowdata, rowindex: rowdata['__index'] });
  6143. },
  6144. cancelEdit: function (rowParm)
  6145. {
  6146. var g = this;
  6147. if (rowParm == undefined)
  6148. {
  6149. for (var rowid in g.editors)
  6150. {
  6151. g.cancelEdit(rowid);
  6152. }
  6153. }
  6154. else
  6155. {
  6156. var rowdata = g.getRow(rowParm);
  6157. if (!g.editors[rowdata['__id']]) return;
  6158. if (g.trigger('cancelEdit', { record: rowdata, rowindex: rowdata['__index'] }) == false) return;
  6159. for (var columnid in g.editors[rowdata['__id']])
  6160. {
  6161. var o = g.editors[rowdata['__id']][columnid];
  6162. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  6163. }
  6164. delete g.editors[rowdata['__id']];
  6165. delete rowdata['_editing'];
  6166. g.reRender({ rowdata: rowdata });
  6167. }
  6168. },
  6169. addEditRow: function (rowdata)
  6170. {
  6171. this.submitEdit();
  6172. rowdata = this.add(rowdata);
  6173. this.beginEdit(rowdata);
  6174. },
  6175. submitEdit: function (rowParm)
  6176. {
  6177. var g = this, p = this.options;
  6178. if (rowParm == undefined)
  6179. {
  6180. for (var rowid in g.editors)
  6181. {
  6182. g.submitEdit(rowid);
  6183. }
  6184. }
  6185. else
  6186. {
  6187. var rowdata = g.getRow(rowParm);
  6188. var newdata = {};
  6189. if (!g.editors[rowdata['__id']]) return;
  6190. for (var columnid in g.editors[rowdata['__id']])
  6191. {
  6192. var o = g.editors[rowdata['__id']][columnid];
  6193. var column = o.editParm.column;
  6194. if (column.name)
  6195. newdata[column.name] = o.editor.getValue(o.input, o.editParm);
  6196. }
  6197. if (g.trigger('beforeSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata }) == false)
  6198. return false;
  6199. g.updateRow(rowdata, newdata);
  6200. g.trigger('afterSubmitEdit', { record: rowdata, rowindex: rowdata['__index'], newdata: newdata });
  6201. }
  6202. },
  6203. endEdit: function (rowParm)
  6204. {
  6205. var g = this, p = this.options;
  6206. if (g.editor.editing)
  6207. {
  6208. var o = g.editor;
  6209. g.trigger('sysEndEdit', [g.editor.editParm]);
  6210. g.trigger('endEdit', [g.editor.editParm]);
  6211. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  6212. g.editor.container.remove();
  6213. g.reRender({ rowdata: g.editor.editParm.record, column: g.editor.editParm.column });
  6214. g.trigger('afterEdit', [g.editor.editParm]);
  6215. g.editor = { editing: false };
  6216. }
  6217. else if (rowParm != undefined)
  6218. {
  6219. var rowdata = g.getRow(rowParm);
  6220. if (!g.editors[rowdata['__id']]) return;
  6221. if (g.submitEdit(rowParm) == false) return false;
  6222. for (var columnid in g.editors[rowdata['__id']])
  6223. {
  6224. var o = g.editors[rowdata['__id']][columnid];
  6225. if (o.editor.destroy) o.editor.destroy(o.input, o.editParm);
  6226. }
  6227. delete g.editors[rowdata['__id']];
  6228. delete rowdata['_editing'];
  6229. g.trigger('afterEdit', { record: rowdata, rowindex: rowdata['__index'] });
  6230. }
  6231. else
  6232. {
  6233. for (var rowid in g.editors)
  6234. {
  6235. g.endEdit(rowid);
  6236. }
  6237. }
  6238. },
  6239. setWidth: function (w)
  6240. {
  6241. return this._setWidth(w);
  6242. },
  6243. setHeight: function (h)
  6244. {
  6245. return this._setHeight(h);
  6246. },
  6247. //是否启用复选框列
  6248. enabledCheckbox: function ()
  6249. {
  6250. return this.options.checkbox ? true : false;
  6251. },
  6252. //是否固定列
  6253. enabledFrozen: function ()
  6254. {
  6255. var g = this, p = this.options;
  6256. if (!p.frozen) return false;
  6257. var cols = g.columns || [];
  6258. if (g.enabledDetail() && p.frozenDetail || g.enabledCheckbox() && p.frozenCheckbox
  6259. || p.frozenRownumbers && p.rownumbers) return true;
  6260. for (var i = 0, l = cols.length; i < l; i++)
  6261. {
  6262. if (cols[i].frozen)
  6263. {
  6264. return true;
  6265. }
  6266. }
  6267. this._setFrozen(false);
  6268. return false;
  6269. },
  6270. //是否启用明细编辑
  6271. enabledDetailEdit: function ()
  6272. {
  6273. if (!this.enabledDetail()) return false;
  6274. return this.options.detailToEdit ? true : false;
  6275. },
  6276. //是否启用明细列
  6277. enabledDetail: function ()
  6278. {
  6279. if (this.options.detail && this.options.detail.onShowDetail) return true;
  6280. return false;
  6281. },
  6282. //是否启用分组
  6283. enabledGroup: function ()
  6284. {
  6285. return this.options.groupColumnName ? true : false;
  6286. },
  6287. deleteSelectedRow: function ()
  6288. {
  6289. if (!this.selected) return;
  6290. for (var i in this.selected)
  6291. {
  6292. var o = this.selected[i];
  6293. if (o['__id'] in this.records)
  6294. this._deleteData.ligerDefer(this, 10, [o]);
  6295. }
  6296. this.reRender.ligerDefer(this, 20);
  6297. },
  6298. removeRange: function (rowArr)
  6299. {
  6300. var g = this, p = this.options;
  6301. $.each(rowArr, function ()
  6302. {
  6303. g._removeData(this);
  6304. });
  6305. g.reRender();
  6306. },
  6307. remove: function (rowParm)
  6308. {
  6309. var g = this, p = this.options;
  6310. var rowdata = g.getRow(rowParm);
  6311. g._removeData(rowParm);
  6312. g.reRender();
  6313. },
  6314. deleteRange: function (rowArr)
  6315. {
  6316. var g = this, p = this.options;
  6317. $.each(rowArr, function ()
  6318. {
  6319. g._deleteData(this);
  6320. });
  6321. g.reRender();
  6322. },
  6323. deleteRow: function (rowParm)
  6324. {
  6325. var g = this, p = this.options;
  6326. var rowdata = g.getRow(rowParm);
  6327. if (!rowdata) return;
  6328. g._deleteData(rowdata);
  6329. g.reRender();
  6330. g.isDataChanged = true;
  6331. },
  6332. _deleteData: function (rowParm)
  6333. {
  6334. var g = this, p = this.options;
  6335. var rowdata = g.getRow(rowParm);
  6336. rowdata[p.statusName] = 'delete';
  6337. if (p.tree)
  6338. {
  6339. var children = g.getChildren(rowdata, true);
  6340. if (children)
  6341. {
  6342. for (var i = 0, l = children.length; i < l; i++)
  6343. {
  6344. children[i][p.statusName] = 'delete';
  6345. }
  6346. }
  6347. }
  6348. g.deletedRows = g.deletedRows || [];
  6349. g.deletedRows.push(rowdata);
  6350. g._removeSelected(rowdata);
  6351. },
  6352. /*
  6353. @param {arg} column index、column name、column、单元格
  6354. @param {value} 值
  6355. @param {rowParm} rowindex或者rowdata
  6356. */
  6357. updateCell: function (arg, value, rowParm)
  6358. {
  6359. var g = this, p = this.options;
  6360. var column, cellObj, rowdata;
  6361. if (typeof (arg) == "string") //column name
  6362. {
  6363. for (var i = 0, l = g.columns.length; i < l; i++)
  6364. {
  6365. if (g.columns[i].name == arg)
  6366. {
  6367. g.updateCell(i, value, rowParm);
  6368. }
  6369. }
  6370. return;
  6371. }
  6372. if (typeof (arg) == "number")
  6373. {
  6374. column = g.columns[arg];
  6375. rowdata = g.getRow(rowParm);
  6376. cellObj = g.getCellObj(rowdata, column);
  6377. }
  6378. else if (typeof (arg) == "object" && arg['__id'])
  6379. {
  6380. column = arg;
  6381. rowdata = g.getRow(rowParm);
  6382. cellObj = g.getCellObj(rowdata, column);
  6383. }
  6384. else
  6385. {
  6386. cellObj = arg;
  6387. var ids = cellObj.id.split('|');
  6388. var columnid = ids[ids.length - 1];
  6389. column = g._columns[columnid];
  6390. var row = $(cellObj).parent();
  6391. rowdata = rowdata || g.getRow(row[0]);
  6392. }
  6393. if (value != null && column.name)
  6394. {
  6395. rowdata[column.name] = value;
  6396. if (rowdata[p.statusName] != 'add')
  6397. rowdata[p.statusName] = 'update';
  6398. g.isDataChanged = true;
  6399. }
  6400. g.reRender({ rowdata: rowdata, column: column });
  6401. },
  6402. addRows: function (rowdataArr, neardata, isBefore, parentRowData)
  6403. {
  6404. var g = this, p = this.options;
  6405. $(rowdataArr).each(function ()
  6406. {
  6407. g.addRow(this, neardata, isBefore, parentRowData);
  6408. });
  6409. },
  6410. _createRowid: function ()
  6411. {
  6412. return "r" + (1000 + this.recordNumber);
  6413. },
  6414. _isRowId: function (str)
  6415. {
  6416. return (str in this.records);
  6417. },
  6418. _addNewRecord: function (o, previd, pid)
  6419. {
  6420. var g = this, p = this.options;
  6421. g.recordNumber++;
  6422. o['__id'] = g._createRowid();
  6423. o['__previd'] = previd;
  6424. if (previd && previd != -1)
  6425. {
  6426. var prev = g.records[previd];
  6427. if (prev['__nextid'] && prev['__nextid'] != -1)
  6428. {
  6429. var prevOldNext = g.records[prev['__nextid']];
  6430. if (prevOldNext)
  6431. prevOldNext['__previd'] = o['__id'];
  6432. }
  6433. prev['__nextid'] = o['__id'];
  6434. o['__index'] = prev['__index'] + 1;
  6435. }
  6436. else
  6437. {
  6438. o['__index'] = 0;
  6439. }
  6440. if (p.tree)
  6441. {
  6442. if (pid && pid != -1)
  6443. {
  6444. var parent = g.records[pid];
  6445. o['__pid'] = pid;
  6446. o['__level'] = parent['__level'] + 1;
  6447. }
  6448. else
  6449. {
  6450. o['__pid'] = -1;
  6451. o['__level'] = 1;
  6452. }
  6453. o['__hasChildren'] = o[p.tree.childrenName] ? true : false;
  6454. }
  6455. if (o[p.statusName] != "add")
  6456. o[p.statusName] = "nochanged";
  6457. g.rows[o['__index']] = o;
  6458. g.records[o['__id']] = o;
  6459. return o;
  6460. },
  6461. //将原始的数据转换成适合 grid的行数据
  6462. _getRows: function (data)
  6463. {
  6464. var g = this, p = this.options;
  6465. var targetData = [];
  6466. function load(data)
  6467. {
  6468. if (!data || !data.length) return;
  6469. for (var i = 0, l = data.length; i < l; i++)
  6470. {
  6471. var o = data[i];
  6472. targetData.push(o);
  6473. if (o[p.tree.childrenName])
  6474. {
  6475. load(o[p.tree.childrenName]);
  6476. }
  6477. }
  6478. }
  6479. load(data);
  6480. return targetData;
  6481. },
  6482. _updateGridData: function ()
  6483. {
  6484. var g = this, p = this.options;
  6485. g.recordNumber = 0;
  6486. g.rows = [];
  6487. g.records = {};
  6488. var previd = -1;
  6489. function load(data, pid)
  6490. {
  6491. if (!data || !data.length) return;
  6492. for (var i = 0, l = data.length; i < l; i++)
  6493. {
  6494. var o = data[i];
  6495. g.formatRecord(o);
  6496. if (o[p.statusName] == "delete") continue;
  6497. g._addNewRecord(o, previd, pid);
  6498. previd = o['__id'];
  6499. if (o['__hasChildren'])
  6500. {
  6501. load(o[p.tree.childrenName], o['__id']);
  6502. }
  6503. }
  6504. }
  6505. load(g.currentData[p.root], -1);
  6506. return g.rows;
  6507. },
  6508. _moveData: function (from, to, isAfter)
  6509. {
  6510. var g = this, p = this.options;
  6511. var fromRow = g.getRow(from);
  6512. var toRow = g.getRow(to);
  6513. var fromIndex, toIndex;
  6514. var listdata = g._getParentChildren(fromRow);
  6515. fromIndex = $.inArray(fromRow, listdata);
  6516. listdata.splice(fromIndex, 1);
  6517. listdata = g._getParentChildren(toRow);
  6518. toIndex = $.inArray(toRow, listdata);
  6519. listdata.splice(toIndex + (isAfter ? 1 : 0), 0, fromRow);
  6520. },
  6521. move: function (from, to, isAfter)
  6522. {
  6523. this._moveData(from, to, isAfter);
  6524. this.reRender();
  6525. },
  6526. moveRange: function (rows, to, isAfter)
  6527. {
  6528. for (var i in rows)
  6529. {
  6530. this._moveData(rows[i], to, isAfter);
  6531. }
  6532. this.reRender();
  6533. },
  6534. up: function (rowParm)
  6535. {
  6536. var g = this, p = this.options;
  6537. var rowdata = g.getRow(rowParm);
  6538. var listdata = g._getParentChildren(rowdata);
  6539. var index = $.inArray(rowdata, listdata);
  6540. if (index == -1 || index == 0) return;
  6541. var selected = g.getSelected();
  6542. g.move(rowdata, listdata[index - 1], false);
  6543. g.select(selected);
  6544. },
  6545. down: function (rowParm)
  6546. {
  6547. var g = this, p = this.options;
  6548. var rowdata = g.getRow(rowParm);
  6549. var listdata = g._getParentChildren(rowdata);
  6550. var index = $.inArray(rowdata, listdata);
  6551. if (index == -1 || index == listdata.length - 1) return;
  6552. var selected = g.getSelected();
  6553. g.move(rowdata, listdata[index + 1], true);
  6554. g.select(selected);
  6555. },
  6556. addRow: function (rowdata, neardata, isBefore, parentRowData)
  6557. {
  6558. var g = this, p = this.options;
  6559. rowdata = rowdata || {};
  6560. g._addData(rowdata, parentRowData, neardata, isBefore);
  6561. g.reRender();
  6562. //标识状态
  6563. rowdata[p.statusName] = 'add';
  6564. if (p.tree)
  6565. {
  6566. var children = g.getChildren(rowdata, true);
  6567. if (children)
  6568. {
  6569. for (var i = 0, l = children.length; i < l; i++)
  6570. {
  6571. children[i][p.statusName] = 'add';
  6572. }
  6573. }
  6574. }
  6575. g.isDataChanged = true;
  6576. p.total = p.total ? (p.total + 1) : 1;
  6577. p.pageCount = Math.ceil(p.total / p.pageSize);
  6578. g._buildPager();
  6579. g.trigger('SysGridHeightChanged');
  6580. g.trigger('afterAddRow', [rowdata]);
  6581. return rowdata;
  6582. },
  6583. updateRow: function (rowDom, newRowData)
  6584. {
  6585. var g = this, p = this.options;
  6586. var rowdata = g.getRow(rowDom);
  6587. //标识状态
  6588. g.isDataChanged = true;
  6589. $.extend(rowdata, newRowData || {});
  6590. if (rowdata[p.statusName] != 'add')
  6591. rowdata[p.statusName] = 'update';
  6592. g.reRender.ligerDefer(g, 10, [{ rowdata: rowdata}]);
  6593. return rowdata;
  6594. },
  6595. setCellEditing: function (rowdata, column, editing)
  6596. {
  6597. var g = this, p = this.options;
  6598. var cell = g.getCellObj(rowdata, column);
  6599. var methodName = editing ? 'addClass' : 'removeClass';
  6600. $(cell)[methodName]("l-grid-row-cell-editing");
  6601. if (rowdata['__id'] != 0)
  6602. {
  6603. var prevrowobj = $(g.getRowObj(rowdata['__id'])).prev();
  6604. if (!prevrowobj.length) return;
  6605. var prevrow = g.getRow(prevrowobj[0]);
  6606. var cellprev = g.getCellObj(prevrow, column);
  6607. if (!cellprev) return;
  6608. $(cellprev)[methodName]("l-grid-row-cell-editing-topcell");
  6609. }
  6610. if (column['__previd'] != -1 && column['__previd'] != null)
  6611. {
  6612. var cellprev = $(g.getCellObj(rowdata, column)).prev();
  6613. $(cellprev)[methodName]("l-grid-row-cell-editing-leftcell");
  6614. }
  6615. },
  6616. reRender: function (e)
  6617. {
  6618. var g = this, p = this.options;
  6619. e = e || {};
  6620. var rowdata = e.rowdata, column = e.column;
  6621. if (column && (column.isdetail || column.ischeckbox)) return;
  6622. if (rowdata && rowdata[p.statusName] == "delete") return;
  6623. if (rowdata && column)
  6624. {
  6625. var cell = g.getCellObj(rowdata, column);
  6626. $(cell).html(g._getCellHtml(rowdata, column));
  6627. if (!column.issystem)
  6628. g.setCellEditing(rowdata, column, false);
  6629. }
  6630. else if (rowdata)
  6631. {
  6632. $(g.columns).each(function () { g.reRender({ rowdata: rowdata, column: this }); });
  6633. }
  6634. else if (column)
  6635. {
  6636. for (var rowid in g.records) { g.reRender({ rowdata: g.records[rowid], column: column }); }
  6637. for (var i = 0; i < g.totalNumber; i++)
  6638. {
  6639. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  6640. $("div:first", tobj).html(g._getTotalCellContent(column, g.groups && g.groups[i] ? g.groups[i] : g.currentData[p.root]));
  6641. }
  6642. }
  6643. else
  6644. {
  6645. g._showData();
  6646. }
  6647. },
  6648. getData: function (status, removeStatus)
  6649. {
  6650. var g = this, p = this.options;
  6651. var data = [];
  6652. for (var rowid in g.records)
  6653. {
  6654. //var o = $.extend(true, {}, g.records[rowid]);
  6655. var o = $.extend({}, g.records[rowid]);
  6656. if (o[p.statusName] == status || status == undefined)
  6657. {
  6658. data.push(g.formatRecord(o, removeStatus));
  6659. }
  6660. }
  6661. return data;
  6662. },
  6663. //格式化数据
  6664. formatRecord: function (o, removeStatus)
  6665. {
  6666. delete o['__id'];
  6667. delete o['__previd'];
  6668. delete o['__nextid'];
  6669. delete o['__index'];
  6670. if (this.options.tree)
  6671. {
  6672. delete o['__pid'];
  6673. delete o['__level'];
  6674. delete o['__hasChildren'];
  6675. }
  6676. if (removeStatus) delete o[this.options.statusName];
  6677. return o;
  6678. },
  6679. getUpdated: function ()
  6680. {
  6681. return this.getData('update', true);
  6682. },
  6683. getDeleted: function ()
  6684. {
  6685. return this.deletedRows;
  6686. },
  6687. getAdded: function ()
  6688. {
  6689. return this.getData('add', true);
  6690. },
  6691. getColumn: function (columnParm)
  6692. {
  6693. var g = this, p = this.options;
  6694. if (typeof columnParm == "string") // column id
  6695. {
  6696. if (g._isColumnId(columnParm))
  6697. return g._columns[columnParm];
  6698. else
  6699. return g.columns[parseInt(columnParm)];
  6700. }
  6701. else if (typeof (columnParm) == "number") //column index
  6702. {
  6703. return g.columns[columnParm];
  6704. }
  6705. else if (typeof columnParm == "object" && columnParm.nodeType == 1) //column header cell
  6706. {
  6707. var ids = columnParm.id.split('|');
  6708. var columnid = ids[ids.length - 1];
  6709. return g._columns[columnid];
  6710. }
  6711. return columnParm;
  6712. },
  6713. getColumnType: function (columnname)
  6714. {
  6715. var g = this, p = this.options;
  6716. for (i = 0; i < g.columns.length; i++)
  6717. {
  6718. if (g.columns[i].name == columnname)
  6719. {
  6720. if (g.columns[i].type) return g.columns[i].type;
  6721. return "string";
  6722. }
  6723. }
  6724. return null;
  6725. },
  6726. //是否包含汇总
  6727. isTotalSummary: function ()
  6728. {
  6729. var g = this, p = this.options;
  6730. for (var i = 0; i < g.columns.length; i++)
  6731. {
  6732. if (g.columns[i].totalSummary) return true;
  6733. }
  6734. return false;
  6735. },
  6736. //根据层次获取列集合
  6737. //如果columnLevel为空,获取叶节点集合
  6738. getColumns: function (columnLevel)
  6739. {
  6740. var g = this, p = this.options;
  6741. var columns = [];
  6742. for (var id in g._columns)
  6743. {
  6744. var col = g._columns[id];
  6745. if (columnLevel != undefined)
  6746. {
  6747. if (col['__level'] == columnLevel) columns.push(col);
  6748. }
  6749. else
  6750. {
  6751. if (col['__leaf']) columns.push(col);
  6752. }
  6753. }
  6754. return columns;
  6755. },
  6756. //改变排序
  6757. changeSort: function (columnName, sortOrder)
  6758. {
  6759. var g = this, p = this.options;
  6760. if (g.loading) return true;
  6761. if (p.dataAction == "local")
  6762. {
  6763. var columnType = g.getColumnType(columnName);
  6764. if (!g.sortedData)
  6765. g.sortedData = g.filteredData;
  6766. if (p.sortName == columnName)
  6767. {
  6768. g.sortedData[p.root].reverse();
  6769. } else
  6770. {
  6771. g.sortedData[p.root].sort(function (data1, data2)
  6772. {
  6773. return g._compareData(data1, data2, columnName, columnType);
  6774. });
  6775. }
  6776. if (p.usePager)
  6777. g.currentData = g._getCurrentPageData(g.sortedData);
  6778. else
  6779. g.currentData = g.sortedData;
  6780. g._showData();
  6781. }
  6782. p.sortName = columnName;
  6783. p.sortOrder = sortOrder;
  6784. if (p.dataAction == "server")
  6785. {
  6786. g.loadData(p.where);
  6787. }
  6788. },
  6789. //改变分页
  6790. changePage: function (ctype)
  6791. {
  6792. var g = this, p = this.options;
  6793. if (g.loading) return true;
  6794. if (p.dataAction != "local" && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  6795. return false;
  6796. p.pageCount = parseInt($(".pcontrol span", g.toolbar).html());
  6797. switch (ctype)
  6798. {
  6799. case 'first': if (p.page == 1) return; p.newPage = 1; break;
  6800. case 'prev': if (p.page == 1) return; if (p.page > 1) p.newPage = parseInt(p.page) - 1; break;
  6801. case 'next': if (p.page >= p.pageCount) return; p.newPage = parseInt(p.page) + 1; break;
  6802. case 'last': if (p.page >= p.pageCount) return; p.newPage = p.pageCount; break;
  6803. case 'input':
  6804. var nv = parseInt($('.pcontrol input', g.toolbar).val());
  6805. if (isNaN(nv)) nv = 1;
  6806. if (nv < 1) nv = 1;
  6807. else if (nv > p.pageCount) nv = p.pageCount;
  6808. $('.pcontrol input', g.toolbar).val(nv);
  6809. p.newPage = nv;
  6810. break;
  6811. }
  6812. if (p.newPage == p.page) return false;
  6813. if (p.newPage == 1)
  6814. {
  6815. $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
  6816. $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
  6817. }
  6818. else
  6819. {
  6820. $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
  6821. $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
  6822. }
  6823. if (p.newPage == p.pageCount)
  6824. {
  6825. $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
  6826. $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
  6827. }
  6828. else
  6829. {
  6830. $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
  6831. $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
  6832. }
  6833. g.trigger('changePage', [p.newPage]);
  6834. if (p.dataAction == "server")
  6835. {
  6836. g.loadData(p.where);
  6837. }
  6838. else
  6839. {
  6840. g.currentData = g._getCurrentPageData(g.filteredData);
  6841. g._showData();
  6842. }
  6843. },
  6844. getSelectedRow: function ()
  6845. {
  6846. for (var i in this.selected)
  6847. {
  6848. var o = this.selected[i];
  6849. if (o['__id'] in this.records)
  6850. return o;
  6851. }
  6852. return null;
  6853. },
  6854. getSelectedRows: function ()
  6855. {
  6856. var arr = [];
  6857. for (var i in this.selected)
  6858. {
  6859. var o = this.selected[i];
  6860. if (o['__id'] in this.records)
  6861. arr.push(o);
  6862. }
  6863. return arr;
  6864. },
  6865. getSelectedRowObj: function ()
  6866. {
  6867. for (var i in this.selected)
  6868. {
  6869. var o = this.selected[i];
  6870. if (o['__id'] in this.records)
  6871. return this.getRowObj(o);
  6872. }
  6873. return null;
  6874. },
  6875. getSelectedRowObjs: function ()
  6876. {
  6877. var arr = [];
  6878. for (var i in this.selected)
  6879. {
  6880. var o = this.selected[i];
  6881. if (o['__id'] in this.records)
  6882. arr.push(this.getRowObj(o));
  6883. }
  6884. return arr;
  6885. },
  6886. getCellObj: function (rowParm, column)
  6887. {
  6888. var rowdata = this.getRow(rowParm);
  6889. column = this.getColumn(column);
  6890. return document.getElementById(this._getCellDomId(rowdata, column));
  6891. },
  6892. getRowObj: function (rowParm, frozen)
  6893. {
  6894. var g = this, p = this.options;
  6895. if (rowParm == null) return null;
  6896. if (typeof (rowParm) == "string")
  6897. {
  6898. if (g._isRowId(rowParm))
  6899. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + rowParm);
  6900. else
  6901. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[parseInt(rowParm)]['__id']);
  6902. }
  6903. else if (typeof (rowParm) == "number")
  6904. {
  6905. return document.getElementById(g.id + (frozen ? "|1|" : "|2|") + g.rows[rowParm]['__id']);
  6906. }
  6907. else if (typeof (rowParm) == "object" && rowParm['__id']) //rowdata
  6908. {
  6909. return g.getRowObj(rowParm['__id'], frozen);
  6910. }
  6911. return rowParm;
  6912. },
  6913. getRow: function (rowParm)
  6914. {
  6915. var g = this, p = this.options;
  6916. if (rowParm == null) return null;
  6917. if (typeof (rowParm) == "string")
  6918. {
  6919. if (g._isRowId(rowParm))
  6920. return g.records[rowParm];
  6921. else
  6922. return g.rows[parseInt(rowParm)];
  6923. }
  6924. else if (typeof (rowParm) == "number")
  6925. {
  6926. return g.rows[parseInt(rowParm)];
  6927. }
  6928. else if (typeof (rowParm) == "object" && rowParm.nodeType == 1 && !rowParm['__id']) //dom对象
  6929. {
  6930. return g._getRowByDomId(rowParm.id);
  6931. }
  6932. return rowParm;
  6933. },
  6934. _setColumnVisible: function (column, hide)
  6935. {
  6936. var g = this, p = this.options;
  6937. if (!hide) //显示
  6938. {
  6939. column._hide = false;
  6940. document.getElementById(column['__domid']).style.display = "";
  6941. //判断分组列是否隐藏,如果隐藏了则显示出来
  6942. if (column['__pid'] != -1)
  6943. {
  6944. var pcol = g._columns[column['__pid']];
  6945. if (pcol._hide)
  6946. {
  6947. document.getElementById(pcol['__domid']).style.display = "";
  6948. this._setColumnVisible(pcol, hide);
  6949. }
  6950. }
  6951. }
  6952. else //隐藏
  6953. {
  6954. column._hide = true;
  6955. document.getElementById(column['__domid']).style.display = "none";
  6956. //判断同分组的列是否都隐藏,如果是则隐藏分组列
  6957. if (column['__pid'] != -1)
  6958. {
  6959. var hideall = true;
  6960. var pcol = this._columns[column['__pid']];
  6961. for (var i = 0; pcol && i < pcol.columns.length; i++)
  6962. {
  6963. if (!pcol.columns[i]._hide)
  6964. {
  6965. hideall = false;
  6966. break;
  6967. }
  6968. }
  6969. if (hideall)
  6970. {
  6971. pcol._hide = true;
  6972. document.getElementById(pcol['__domid']).style.display = "none";
  6973. this._setColumnVisible(pcol, hide);
  6974. }
  6975. }
  6976. }
  6977. },
  6978. //显示隐藏列
  6979. toggleCol: function (columnparm, visible, toggleByPopup)
  6980. {
  6981. var g = this, p = this.options;
  6982. var column;
  6983. if (typeof (columnparm) == "number")
  6984. {
  6985. column = g.columns[columnparm];
  6986. }
  6987. else if (typeof (columnparm) == "object" && columnparm['__id'])
  6988. {
  6989. column = columnparm;
  6990. }
  6991. else if (typeof (columnparm) == "string")
  6992. {
  6993. if (g._isColumnId(columnparm)) // column id
  6994. {
  6995. column = g._columns[columnparm];
  6996. }
  6997. else // column name
  6998. {
  6999. $(g.columns).each(function ()
  7000. {
  7001. if (this.name == columnparm)
  7002. g.toggleCol(this, visible, toggleByPopup);
  7003. });
  7004. return;
  7005. }
  7006. }
  7007. if (!column) return;
  7008. var columnindex = column['__leafindex'];
  7009. var headercell = document.getElementById(column['__domid']);
  7010. if (!headercell) return;
  7011. headercell = $(headercell);
  7012. var cells = [];
  7013. for (var i in g.rows)
  7014. {
  7015. var obj = g.getCellObj(g.rows[i], column);
  7016. if (obj) cells.push(obj);
  7017. }
  7018. for (var i = 0; i < g.totalNumber; i++)
  7019. {
  7020. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  7021. if (tobj) cells.push(tobj);
  7022. }
  7023. var colwidth = column._width;
  7024. //显示列
  7025. if (visible && column._hide)
  7026. {
  7027. if (column.frozen)
  7028. g.f.gridtablewidth += (parseInt(colwidth) + 1);
  7029. else
  7030. g.gridtablewidth += (parseInt(colwidth) + 1);
  7031. g._setColumnVisible(column, false);
  7032. $(cells).show();
  7033. }
  7034. //隐藏列
  7035. else if (!visible && !column._hide)
  7036. {
  7037. if (column.frozen)
  7038. g.f.gridtablewidth -= (parseInt(colwidth) + 1);
  7039. else
  7040. g.gridtablewidth -= (parseInt(colwidth) + 1);
  7041. g._setColumnVisible(column, true);
  7042. $(cells).hide();
  7043. }
  7044. if (column.frozen)
  7045. {
  7046. $("div:first", g.f.gridheader).width(g.f.gridtablewidth);
  7047. $("div:first", g.f.gridbody).width(g.f.gridtablewidth);
  7048. }
  7049. else
  7050. {
  7051. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  7052. $("div:first", g.gridbody).width(g.gridtablewidth);
  7053. }
  7054. g._updateFrozenWidth();
  7055. if (!toggleByPopup)
  7056. {
  7057. $(':checkbox[columnindex=' + columnindex + "]", g.popup).each(function ()
  7058. {
  7059. this.checked = visible;
  7060. if ($.fn.ligerCheckBox)
  7061. {
  7062. var checkboxmanager = $(this).ligerGetCheckBoxManager();
  7063. if (checkboxmanager) checkboxmanager.updateStyle();
  7064. }
  7065. });
  7066. }
  7067. },
  7068. //设置列宽
  7069. setColumnWidth: function (columnparm, newwidth)
  7070. {
  7071. var g = this, p = this.options;
  7072. if (!newwidth) return;
  7073. newwidth = parseInt(newwidth, 10);
  7074. var column;
  7075. if (typeof (columnparm) == "number")
  7076. {
  7077. column = g.columns[columnparm];
  7078. }
  7079. else if (typeof (columnparm) == "object" && columnparm['__id'])
  7080. {
  7081. column = columnparm;
  7082. }
  7083. else if (typeof (columnparm) == "string")
  7084. {
  7085. if (g._isColumnId(columnparm)) // column id
  7086. {
  7087. column = g._columns[columnparm];
  7088. }
  7089. else // column name
  7090. {
  7091. $(g.columns).each(function ()
  7092. {
  7093. if (this.name == columnparm)
  7094. g.setColumnWidth(this, newwidth);
  7095. });
  7096. return;
  7097. }
  7098. }
  7099. if (!column) return;
  7100. var mincolumnwidth = p.minColumnWidth;
  7101. if (column.minWidth) mincolumnwidth = column.minWidth;
  7102. newwidth = newwidth < mincolumnwidth ? mincolumnwidth : newwidth;
  7103. var diff = newwidth - column._width;
  7104. if (g.trigger('beforeChangeColumnWidth', [column, newwidth]) == false) return;
  7105. column._width = newwidth;
  7106. if (column.frozen)
  7107. {
  7108. g.f.gridtablewidth += diff;
  7109. $("div:first", g.f.gridheader).width(g.f.gridtablewidth);
  7110. $("div:first", g.f.gridbody).width(g.f.gridtablewidth);
  7111. }
  7112. else
  7113. {
  7114. g.gridtablewidth += diff;
  7115. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  7116. $("div:first", g.gridbody).width(g.gridtablewidth);
  7117. }
  7118. $(document.getElementById(column['__domid'])).css('width', newwidth);
  7119. var cells = [];
  7120. for (var rowid in g.records)
  7121. {
  7122. var obj = g.getCellObj(g.records[rowid], column);
  7123. if (obj) cells.push(obj);
  7124. if (!g.enabledDetailEdit() && g.editors[rowid] && g.editors[rowid][column['__id']])
  7125. {
  7126. var o = g.editors[rowid][column['__id']];
  7127. if (o.editor.resize) o.editor.resize(o.input, newwidth, o.container.height(), o.editParm);
  7128. }
  7129. }
  7130. for (var i = 0; i < g.totalNumber; i++)
  7131. {
  7132. var tobj = document.getElementById(g.id + "|total" + i + "|" + column['__id']);
  7133. if (tobj) cells.push(tobj);
  7134. }
  7135. $(cells).css('width', newwidth).find("> div.l-grid-row-cell-inner:first").css('width', newwidth - 8);
  7136. g._updateFrozenWidth();
  7137. g.trigger('afterChangeColumnWidth', [column, newwidth]);
  7138. },
  7139. //改变列表头内容
  7140. changeHeaderText: function (columnparm, headerText)
  7141. {
  7142. var g = this, p = this.options;
  7143. var column;
  7144. if (typeof (columnparm) == "number")
  7145. {
  7146. column = g.columns[columnparm];
  7147. }
  7148. else if (typeof (columnparm) == "object" && columnparm['__id'])
  7149. {
  7150. column = columnparm;
  7151. }
  7152. else if (typeof (columnparm) == "string")
  7153. {
  7154. if (g._isColumnId(columnparm)) // column id
  7155. {
  7156. column = g._columns[columnparm];
  7157. }
  7158. else // column name
  7159. {
  7160. $(g.columns).each(function ()
  7161. {
  7162. if (this.name == columnparm)
  7163. g.changeHeaderText(this, headerText);
  7164. });
  7165. return;
  7166. }
  7167. }
  7168. if (!column) return;
  7169. var columnindex = column['__leafindex'];
  7170. var headercell = document.getElementById(column['__domid']);
  7171. $(".l-grid-hd-cell-text", headercell).html(headerText);
  7172. if (p.allowHideColumn)
  7173. {
  7174. $(':checkbox[columnindex=' + columnindex + "]", g.popup).parent().next().html(headerText);
  7175. }
  7176. },
  7177. //改变列的位置
  7178. changeCol: function (from, to, isAfter)
  7179. {
  7180. var g = this, p = this.options;
  7181. if (!from || !to) return;
  7182. var fromCol = g.getColumn(from);
  7183. var toCol = g.getColumn(to);
  7184. fromCol.frozen = toCol.frozen;
  7185. var fromColIndex, toColIndex;
  7186. var fromColumns = fromCol['__pid'] == -1 ? p.columns : g._columns[fromCol['__pid']].columns;
  7187. var toColumns = toCol['__pid'] == -1 ? p.columns : g._columns[toCol['__pid']].columns;
  7188. fromColIndex = $.inArray(fromCol, fromColumns);
  7189. toColIndex = $.inArray(toCol, toColumns);
  7190. var sameParent = fromColumns == toColumns;
  7191. var sameLevel = fromCol['__level'] == toCol['__level'];
  7192. toColumns.splice(toColIndex + (isAfter ? 1 : 0), 0, fromCol);
  7193. if (!sameParent)
  7194. {
  7195. fromColumns.splice(fromColIndex, 1);
  7196. }
  7197. else
  7198. {
  7199. if (isAfter) fromColumns.splice(fromColIndex, 1);
  7200. else fromColumns.splice(fromColIndex + 1, 1);
  7201. }
  7202. g._setColumns(p.columns);
  7203. g.reRender();
  7204. },
  7205. collapseDetail: function (rowParm)
  7206. {
  7207. var g = this, p = this.options;
  7208. var rowdata = g.getRow(rowParm);
  7209. if (!rowdata) return;
  7210. for (var i = 0, l = g.columns.length; i < l; i++)
  7211. {
  7212. if (g.columns[i].isdetail)
  7213. {
  7214. var row = g.getRowObj(rowdata);
  7215. var cell = g.getCellObj(rowdata, g.columns[i]);
  7216. $(row).next("tr.l-grid-detailpanel").hide();
  7217. $(".l-grid-row-cell-detailbtn:first", cell).removeClass("l-open");
  7218. g.trigger('SysGridHeightChanged');
  7219. return;
  7220. }
  7221. }
  7222. },
  7223. extendDetail: function (rowParm)
  7224. {
  7225. var g = this, p = this.options;
  7226. var rowdata = g.getRow(rowParm);
  7227. if (!rowdata) return;
  7228. for (var i = 0, l = g.columns; i < l; i++)
  7229. {
  7230. if (g.columns[i].isdetail)
  7231. {
  7232. var row = g.getRowObj(rowdata);
  7233. var cell = g.getCellObj(rowdata, g.columns[i]);
  7234. $(row).next("tr.l-grid-detailpanel").show();
  7235. $(".l-grid-row-cell-detailbtn:first", cell).addClass("l-open");
  7236. g.trigger('SysGridHeightChanged');
  7237. return;
  7238. }
  7239. }
  7240. },
  7241. getParent: function (rowParm)
  7242. {
  7243. var g = this, p = this.options;
  7244. if (!p.tree) return null;
  7245. var rowdata = g.getRow(rowParm);
  7246. if (!rowdata) return null;
  7247. if (rowdata['__pid'] in g.records) return g.records[rowdata['__pid']];
  7248. else return null;
  7249. },
  7250. getChildren: function (rowParm, deep)
  7251. {
  7252. var g = this, p = this.options;
  7253. if (!p.tree) return null;
  7254. var rowData = g.getRow(rowParm);
  7255. if (!rowData) return null;
  7256. var arr = [];
  7257. function loadChildren(data)
  7258. {
  7259. if (data[p.tree.childrenName])
  7260. {
  7261. for (var i = 0, l = data[p.tree.childrenName].length; i < l; i++)
  7262. {
  7263. var o = data[p.tree.childrenName][i];
  7264. if (o['__status'] == 'delete') continue;
  7265. arr.push(o);
  7266. if (deep)
  7267. loadChildren(o);
  7268. }
  7269. }
  7270. }
  7271. loadChildren(rowData);
  7272. return arr;
  7273. },
  7274. isLeaf: function (rowParm)
  7275. {
  7276. var g = this, p = this.options;
  7277. var rowdata = g.getRow(rowParm);
  7278. if (!rowdata) return;
  7279. return rowdata['__hasChildren'] ? false : true;
  7280. },
  7281. hasChildren: function (rowParm)
  7282. {
  7283. var g = this, p = this.options;
  7284. var rowdata = this.getRow(rowParm);
  7285. if (!rowdata) return;
  7286. return (rowdata[p.tree.childrenName] && rowdata[p.tree.childrenName].length) ? true : false;
  7287. },
  7288. existRecord: function (record)
  7289. {
  7290. for (var rowid in this.records)
  7291. {
  7292. if (this.records[rowid] == record) return true;
  7293. }
  7294. return false;
  7295. },
  7296. _removeSelected: function (rowdata)
  7297. {
  7298. var g = this, p = this.options;
  7299. if (p.tree)
  7300. {
  7301. var children = g.getChildren(rowdata, true);
  7302. if (children)
  7303. {
  7304. for (var i = 0, l = children.length; i < l; i++)
  7305. {
  7306. var index2 = $.inArray(children[i], g.selected);
  7307. if (index2 != -1) g.selected.splice(index2, 1);
  7308. }
  7309. }
  7310. }
  7311. var index = $.inArray(rowdata, g.selected);
  7312. if (index != -1) g.selected.splice(index, 1);
  7313. },
  7314. _getParentChildren: function (rowParm)
  7315. {
  7316. var g = this, p = this.options;
  7317. var rowdata = g.getRow(rowParm);
  7318. var listdata;
  7319. if (p.tree && g.existRecord(rowdata) && rowdata['__pid'] in g.records)
  7320. {
  7321. listdata = g.records[rowdata['__pid']][p.tree.childrenName];
  7322. }
  7323. else
  7324. {
  7325. listdata = g.currentData[p.root];
  7326. }
  7327. return listdata;
  7328. },
  7329. _removeData: function (rowdata)
  7330. {
  7331. var g = this, p = this.options;
  7332. var listdata = g._getParentChildren(rowdata);
  7333. var index = $.inArray(rowdata, listdata);
  7334. if (index != -1)
  7335. {
  7336. listdata.splice(index, 1);
  7337. }
  7338. g._removeSelected(rowdata);
  7339. },
  7340. _addData: function (rowdata, parentdata, neardata, isBefore)
  7341. {
  7342. var g = this, p = this.options;
  7343. var listdata = g.currentData[p.root];
  7344. if (neardata)
  7345. {
  7346. if (p.tree)
  7347. {
  7348. if (parentdata)
  7349. listdata = parentdata[p.tree.childrenName];
  7350. else if (neardata['__pid'] in g.records)
  7351. listdata = g.records[neardata['__pid']][p.tree.childrenName];
  7352. }
  7353. var index = $.inArray(neardata, listdata);
  7354. listdata.splice(index == -1 ? -1 : index + (isBefore ? 0 : 1), 0, rowdata);
  7355. }
  7356. else
  7357. {
  7358. if (p.tree && parentdata)
  7359. {
  7360. listdata = parentdata[p.tree.childrenName];
  7361. }
  7362. listdata.push(rowdata);
  7363. }
  7364. },
  7365. //移动数据(树)
  7366. //@parm [parentdata] 附加到哪一个节点下级
  7367. //@parm [neardata] 附加到哪一个节点的上方/下方
  7368. //@parm [isBefore] 是否附加到上方
  7369. _appendData: function (rowdata, parentdata, neardata, isBefore)
  7370. {
  7371. var g = this, p = this.options;
  7372. rowdata[p.statusName] = "update";
  7373. g._removeData(rowdata);
  7374. g._addData(rowdata, parentdata, neardata, isBefore);
  7375. },
  7376. appendRange: function (rows, parentdata, neardata, isBefore)
  7377. {
  7378. var g = this, p = this.options;
  7379. var toRender = false;
  7380. $.each(rows, function (i, item)
  7381. {
  7382. if (item['__id'] && g.existRecord(item))
  7383. {
  7384. if (g.isLeaf(parentdata)) g.upgrade(parentdata);
  7385. g._appendData(item, parentdata, neardata, isBefore);
  7386. toRender = true;
  7387. }
  7388. else
  7389. {
  7390. g.appendRow(item, parentdata, neardata, isBefore);
  7391. }
  7392. });
  7393. if (toRender) g.reRender();
  7394. },
  7395. appendRow: function (rowdata, parentdata, neardata, isBefore)
  7396. {
  7397. var g = this, p = this.options;
  7398. if ($.isArray(rowdata))
  7399. {
  7400. g.appendRange(rowdata, parentdata, neardata, isBefore);
  7401. return;
  7402. }
  7403. if (rowdata['__id'] && g.existRecord(rowdata))
  7404. {
  7405. g._appendData(rowdata, parentdata, neardata, isBefore);
  7406. g.reRender();
  7407. return;
  7408. }
  7409. if (parentdata && g.isLeaf(parentdata)) g.upgrade(parentdata);
  7410. g.addRow(rowdata, neardata, isBefore ? true : false, parentdata);
  7411. },
  7412. upgrade: function (rowParm)
  7413. {
  7414. var g = this, p = this.options;
  7415. var rowdata = g.getRow(rowParm);
  7416. if (!rowdata || !p.tree) return;
  7417. rowdata[p.tree.childrenName] = rowdata[p.tree.childrenName] || [];
  7418. rowdata['__hasChildren'] = true;
  7419. var rowobjs = [g.getRowObj(rowdata)];
  7420. if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true));
  7421. $("> td > div > .l-grid-tree-space:last", rowobjs).addClass("l-grid-tree-link l-grid-tree-link-open");
  7422. },
  7423. demotion: function (rowParm)
  7424. {
  7425. var g = this, p = this.options;
  7426. var rowdata = g.getRow(rowParm);
  7427. if (!rowdata || !p.tree) return;
  7428. var rowobjs = [g.getRowObj(rowdata)];
  7429. if (g.enabledFrozen()) rowobjs.push(g.getRowObj(rowdata, true));
  7430. $("> td > div > .l-grid-tree-space:last", rowobjs).removeClass("l-grid-tree-link l-grid-tree-link-open l-grid-tree-link-close");
  7431. if (g.hasChildren(rowdata))
  7432. {
  7433. var children = g.getChildren(rowdata);
  7434. for (var i = 0, l = children.length; i < l; i++)
  7435. {
  7436. g.deleteRow(children[i]);
  7437. }
  7438. }
  7439. rowdata['__hasChildren'] = false;
  7440. },
  7441. collapse: function (rowParm)
  7442. {
  7443. var g = this, p = this.options;
  7444. var targetRowObj = g.getRowObj(rowParm);
  7445. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  7446. if (linkbtn.hasClass("l-grid-tree-link-close")) return;
  7447. g.toggle(rowParm);
  7448. },
  7449. expand: function (rowParm)
  7450. {
  7451. var g = this, p = this.options;
  7452. var targetRowObj = g.getRowObj(rowParm);
  7453. var linkbtn = $(".l-grid-tree-link", targetRowObj);
  7454. if (linkbtn.hasClass("l-grid-tree-link-open")) return;
  7455. g.toggle(rowParm);
  7456. },
  7457. toggle: function (rowParm)
  7458. {
  7459. if (!rowParm) return;
  7460. var g = this, p = this.options;
  7461. var rowdata = g.getRow(rowParm);
  7462. var targetRowObj = [g.getRowObj(rowdata)];
  7463. if (g.enabledFrozen()) targetRowObj.push(g.getRowObj(rowdata, true));
  7464. var level = rowdata['__level'], indexInCollapsedRows;
  7465. var linkbtn = $(".l-grid-tree-link:first", targetRowObj);
  7466. var opening = true;
  7467. g.collapsedRows = g.collapsedRows || [];
  7468. if (linkbtn.hasClass("l-grid-tree-link-close")) //收缩
  7469. {
  7470. linkbtn.removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
  7471. indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows);
  7472. if (indexInCollapsedRows != -1) g.collapsedRows.splice(indexInCollapsedRows, 1);
  7473. }
  7474. else //折叠
  7475. {
  7476. opening = false;
  7477. linkbtn.addClass("l-grid-tree-link-close").removeClass("l-grid-tree-link-open");
  7478. indexInCollapsedRows = $.inArray(rowdata, g.collapsedRows);
  7479. if (indexInCollapsedRows == -1) g.collapsedRows.push(rowdata);
  7480. }
  7481. var children = g.getChildren(rowdata, true);
  7482. for (var i = 0, l = children.length; i < l; i++)
  7483. {
  7484. var o = children[i];
  7485. var currentRow = $([g.getRowObj(o['__id'])]);
  7486. if (g.enabledFrozen()) currentRow = currentRow.add(g.getRowObj(o['__id'], true));
  7487. if (opening)
  7488. {
  7489. $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-close").addClass("l-grid-tree-link-open");
  7490. currentRow.show();
  7491. }
  7492. else
  7493. {
  7494. $(".l-grid-tree-link", currentRow).removeClass("l-grid-tree-link-open").addClass("l-grid-tree-link-close");
  7495. currentRow.hide();
  7496. }
  7497. }
  7498. },
  7499. _bulid: function ()
  7500. {
  7501. var g = this;
  7502. g._clearGrid();
  7503. //创建头部
  7504. g._initBuildHeader();
  7505. //宽度高度初始化
  7506. g._initHeight();
  7507. //创建底部工具条
  7508. g._initFootbar();
  7509. //创建分页
  7510. g._buildPager();
  7511. //创建事件
  7512. g._setEvent();
  7513. },
  7514. _setColumns: function (columns)
  7515. {
  7516. var g = this;
  7517. //初始化列
  7518. g._initColumns();
  7519. //创建表头
  7520. g._initBuildGridHeader();
  7521. //创建 显示/隐藏 列 列表
  7522. g._initBuildPopup();
  7523. },
  7524. _initBuildHeader: function ()
  7525. {
  7526. var g = this, p = this.options;
  7527. if (p.title)
  7528. {
  7529. $(".l-panel-header-text", g.header).html(p.title);
  7530. if (p.headerImg)
  7531. g.header.append("<img src='" + p.headerImg + "' />").addClass("l-panel-header-hasicon");
  7532. }
  7533. else
  7534. {
  7535. g.header.hide();
  7536. }
  7537. if (p.toolbar)
  7538. {
  7539. if ($.fn.ligerToolBar)
  7540. g.toolbarManager = g.topbar.ligerToolBar(p.toolbar);
  7541. }
  7542. else
  7543. {
  7544. g.topbar.remove();
  7545. }
  7546. },
  7547. _createColumnId: function (column)
  7548. {
  7549. if (column.id != null) return column.id.toString();
  7550. return "c" + (100 + this._columnCount);
  7551. },
  7552. _isColumnId: function (str)
  7553. {
  7554. return (str in this._columns);
  7555. },
  7556. _initColumns: function ()
  7557. {
  7558. var g = this, p = this.options;
  7559. g._columns = {}; //全部列的信息
  7560. g._columnCount = 0;
  7561. g._columnLeafCount = 0;
  7562. g._columnMaxLevel = 1;
  7563. if (!p.columns) return;
  7564. function removeProp(column, props)
  7565. {
  7566. for (var i in props)
  7567. {
  7568. if (props[i] in column)
  7569. delete column[props[i]];
  7570. }
  7571. }
  7572. //设置id、pid、level、leaf,返回叶节点数,如果是叶节点,返回1
  7573. function setColumn(column, level, pid, previd)
  7574. {
  7575. removeProp(column, ['__id', '__pid', '__previd', '__nextid', '__domid', '__leaf', '__leafindex', '__level', '__colSpan', '__rowSpan']);
  7576. if (level > g._columnMaxLevel) g._columnMaxLevel = level;
  7577. g._columnCount++;
  7578. column['__id'] = g._createColumnId(column);
  7579. column['__domid'] = g.id + "|hcell|" + column['__id'];
  7580. g._columns[column['__id']] = column;
  7581. if (!column.columns || !column.columns.length)
  7582. column['__leafindex'] = g._columnLeafCount++;
  7583. column['__level'] = level;
  7584. column['__pid'] = pid;
  7585. column['__previd'] = previd;
  7586. if (!column.columns || !column.columns.length)
  7587. {
  7588. column['__leaf'] = true;
  7589. return 1;
  7590. }
  7591. var leafcount = 0;
  7592. var newid = -1;
  7593. for (var i = 0, l = column.columns.length; i < l; i++)
  7594. {
  7595. var col = column.columns[i];
  7596. leafcount += setColumn(col, level + 1, column['__id'], newid);
  7597. newid = col['__id'];
  7598. }
  7599. column['__leafcount'] = leafcount;
  7600. return leafcount;
  7601. }
  7602. var lastid = -1;
  7603. //行序号
  7604. if (p.rownumbers)
  7605. {
  7606. var frozenRownumbers = g.enabledGroup() ? false : p.frozen && p.frozenRownumbers;
  7607. var col = { isrownumber: true, issystem: true, width: p.rownumbersColWidth, frozen: frozenRownumbers };
  7608. setColumn(col, 1, -1, lastid);
  7609. lastid = col['__id'];
  7610. }
  7611. //明细列
  7612. if (g.enabledDetail())
  7613. {
  7614. var frozenDetail = g.enabledGroup() ? false : p.frozen && p.frozenDetail;
  7615. var col = { isdetail: true, issystem: true, width: p.detailColWidth, frozen: frozenDetail };
  7616. setColumn(col, 1, -1, lastid);
  7617. lastid = col['__id'];
  7618. }
  7619. //复选框列
  7620. if (g.enabledCheckbox())
  7621. {
  7622. var frozenCheckbox = g.enabledGroup() ? false : p.frozen && p.frozenCheckbox;
  7623. var col = { ischeckbox: true, issystem: true, width: p.detailColWidth, frozen: frozenCheckbox };
  7624. setColumn(col, 1, -1, lastid);
  7625. lastid = col['__id'];
  7626. }
  7627. for (var i = 0, l = p.columns.length; i < l; i++)
  7628. {
  7629. var col = p.columns[i];
  7630. setColumn(col, 1, -1, lastid);
  7631. lastid = col['__id'];
  7632. }
  7633. //设置colSpan和rowSpan
  7634. for (var id in g._columns)
  7635. {
  7636. var col = g._columns[id];
  7637. if (col['__leafcount'] > 1)
  7638. {
  7639. col['__colSpan'] = col['__leafcount'];
  7640. }
  7641. if (col['__leaf'] && col['__level'] != g._columnMaxLevel)
  7642. {
  7643. col['__rowSpan'] = g._columnMaxLevel - col['__level'] + 1;
  7644. }
  7645. }
  7646. //叶级别列的信息
  7647. g.columns = g.getColumns();
  7648. $(g.columns).each(function (i, column)
  7649. {
  7650. column.columnname = column.name;
  7651. column.columnindex = i;
  7652. column.type = column.type || "string";
  7653. column.islast = i == g.columns.length - 1;
  7654. column.isSort = column.isSort == false ? false : true;
  7655. column.frozen = column.frozen ? true : false;
  7656. column._width = g._getColumnWidth(column);
  7657. column._hide = column.hide ? true : false;
  7658. });
  7659. },
  7660. _getColumnWidth: function (column)
  7661. {
  7662. var g = this, p = this.options;
  7663. if (column._width) return column._width;
  7664. var colwidth;
  7665. if (column.width)
  7666. {
  7667. colwidth = column.width;
  7668. }
  7669. else if (p.columnWidth)
  7670. {
  7671. colwidth = p.columnWidth;
  7672. }
  7673. if (!colwidth)
  7674. {
  7675. var lwidth = 4;
  7676. if (g.enabledCheckbox()) lwidth += p.checkboxColWidth;
  7677. if (g.enabledDetail()) lwidth += p.detailColWidth;
  7678. colwidth = parseInt((g.grid.width() - lwidth) / g.columns.length);
  7679. }
  7680. if (typeof (colwidth) == "string" && colwidth.indexOf('%') > 0)
  7681. {
  7682. column._width = colwidth = parseInt(parseInt(colwidth) * 0.01 * (g.grid.width() - g.columns.length));
  7683. }
  7684. if (column.minWidth && colwidth < column.minWidth) colwidth = column.minWidth;
  7685. if (column.maxWidth && colwidth > column.maxWidth) colwidth = column.maxWidth;
  7686. column._width = colwidth;
  7687. return colwidth;
  7688. },
  7689. _createHeaderCell: function (column)
  7690. {
  7691. var g = this, p = this.options;
  7692. 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>");
  7693. jcell.attr("id", column['__domid']);
  7694. if (!column['__leaf'])
  7695. jcell.addClass("l-grid-hd-cell-mul");
  7696. if (column.columnindex == g.columns.length - 1)
  7697. {
  7698. jcell.addClass("l-grid-hd-cell-last");
  7699. }
  7700. if (column.isrownumber)
  7701. {
  7702. jcell.addClass("l-grid-hd-cell-rownumbers");
  7703. jcell.html("<div class='l-grid-hd-cell-inner'></div>");
  7704. }
  7705. if (column.ischeckbox)
  7706. {
  7707. jcell.addClass("l-grid-hd-cell-checkbox");
  7708. jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-checkbox'></div></div>");
  7709. }
  7710. if (column.isdetail)
  7711. {
  7712. jcell.addClass("l-grid-hd-cell-detail");
  7713. jcell.html("<div class='l-grid-hd-cell-inner'><div class='l-grid-hd-cell-text l-grid-hd-cell-btn-detail'></div></div>");
  7714. }
  7715. if (column.heightAlign)
  7716. {
  7717. $(".l-grid-hd-cell-inner:first", jcell).css("textAlign", column.heightAlign);
  7718. }
  7719. if (column['__colSpan']) jcell.attr("colSpan", column['__colSpan']);
  7720. if (column['__rowSpan'])
  7721. {
  7722. jcell.attr("rowSpan", column['__rowSpan']);
  7723. jcell.height(p.headerRowHeight * column['__rowSpan']);
  7724. } else
  7725. {
  7726. jcell.height(p.headerRowHeight);
  7727. }
  7728. if (column['__leaf'])
  7729. {
  7730. jcell.width(column['_width']);
  7731. jcell.attr("columnindex", column['__leafindex']);
  7732. }
  7733. if (column._hide) jcell.hide();
  7734. if (column.name) jcell.attr({ columnname: column.name });
  7735. var headerText = "";
  7736. if (column.display && column.display != "")
  7737. headerText = column.display;
  7738. else if (column.headerRender)
  7739. headerText = column.headerRender(column);
  7740. else
  7741. headerText = "&nbsp;";
  7742. $(".l-grid-hd-cell-text:first", jcell).html(headerText);
  7743. if (!column.issystem && column['__leaf'] && column.resizable !== false && $.fn.ligerResizable)
  7744. {
  7745. g.colResizable[column['__id']] = jcell.ligerResizable({ handles: 'e',
  7746. onStartResize: function (e, ev)
  7747. {
  7748. this.proxy.hide();
  7749. g.draggingline.css({ height: g.body.height(), top: 0, left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) }).show();
  7750. },
  7751. onResize: function (e, ev)
  7752. {
  7753. g.colresizing = true;
  7754. g.draggingline.css({ left: ev.pageX - g.grid.offset().left + parseInt(g.body[0].scrollLeft) });
  7755. $('body').add(jcell).css('cursor', 'e-resize');
  7756. },
  7757. onStopResize: function (e)
  7758. {
  7759. g.colresizing = false;
  7760. $('body').add(jcell).css('cursor', 'default');
  7761. g.draggingline.hide();
  7762. g.setColumnWidth(column, column._width + e.diffX);
  7763. return false;
  7764. }
  7765. });
  7766. }
  7767. return jcell;
  7768. },
  7769. _initBuildGridHeader: function ()
  7770. {
  7771. var g = this, p = this.options;
  7772. g.gridtablewidth = 0;
  7773. g.f.gridtablewidth = 0;
  7774. if (g.colResizable)
  7775. {
  7776. for (var i in g.colResizable)
  7777. {
  7778. g.colResizable[i].destroy();
  7779. }
  7780. g.colResizable = null;
  7781. }
  7782. g.colResizable = {};
  7783. $("tbody:first", g.gridheader).html("");
  7784. $("tbody:first", g.f.gridheader).html("");
  7785. for (var level = 1; level <= g._columnMaxLevel; level++)
  7786. {
  7787. var columns = g.getColumns(level); //获取level层次的列集合
  7788. var islast = level == g._columnMaxLevel; //是否最末级
  7789. var tr = $("<tr class='l-grid-hd-row'></tr>");
  7790. var trf = $("<tr class='l-grid-hd-row'></tr>");
  7791. if (!islast) tr.add(trf).addClass("l-grid-hd-mul");
  7792. $("tbody:first", g.gridheader).append(tr);
  7793. $("tbody:first", g.f.gridheader).append(trf);
  7794. $(columns).each(function (i, column)
  7795. {
  7796. (column.frozen ? trf : tr).append(g._createHeaderCell(column));
  7797. if (column['__leaf'])
  7798. {
  7799. var colwidth = column['_width'];
  7800. if (!column.frozen)
  7801. g.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1;
  7802. else
  7803. g.f.gridtablewidth += (parseInt(colwidth) ? parseInt(colwidth) : 0) + 1;
  7804. }
  7805. });
  7806. }
  7807. if (g._columnMaxLevel > 0)
  7808. {
  7809. var h = p.headerRowHeight * g._columnMaxLevel;
  7810. g.gridheader.add(g.f.gridheader).height(h);
  7811. if (p.rownumbers && p.frozenRownumbers) g.f.gridheader.find("td:first").height(h);
  7812. }
  7813. g._updateFrozenWidth();
  7814. $("div:first", g.gridheader).width(g.gridtablewidth + 40);
  7815. },
  7816. _initBuildPopup: function ()
  7817. {
  7818. var g = this, p = this.options;
  7819. $(':checkbox', g.popup).unbind();
  7820. $('tbody tr', g.popup).remove();
  7821. $(g.columns).each(function (i, column)
  7822. {
  7823. if (column.issystem) return;
  7824. if (column.isAllowHide == false) return;
  7825. var chk = 'checked="checked"';
  7826. if (column._hide) chk = '';
  7827. var header = column.display;
  7828. $('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>');
  7829. });
  7830. if ($.fn.ligerCheckBox)
  7831. {
  7832. $('input:checkbox', g.popup).ligerCheckBox(
  7833. {
  7834. onBeforeClick: function (obj)
  7835. {
  7836. if (!obj.checked) return true;
  7837. if ($('input:checked', g.popup).length <= p.minColToggle)
  7838. return false;
  7839. return true;
  7840. }
  7841. });
  7842. }
  7843. //表头 - 显示/隐藏'列控制'按钮事件
  7844. if (p.allowHideColumn)
  7845. {
  7846. $('tr', g.popup).hover(function ()
  7847. {
  7848. $(this).addClass('l-popup-row-over');
  7849. },
  7850. function ()
  7851. {
  7852. $(this).removeClass('l-popup-row-over');
  7853. });
  7854. var onPopupCheckboxChange = function ()
  7855. {
  7856. if ($('input:checked', g.popup).length + 1 <= p.minColToggle)
  7857. {
  7858. return false;
  7859. }
  7860. g.toggleCol(parseInt($(this).attr("columnindex")), this.checked, true);
  7861. };
  7862. if ($.fn.ligerCheckBox)
  7863. $(':checkbox', g.popup).bind('change', onPopupCheckboxChange);
  7864. else
  7865. $(':checkbox', g.popup).bind('click', onPopupCheckboxChange);
  7866. }
  7867. },
  7868. _initHeight: function ()
  7869. {
  7870. var g = this, p = this.options;
  7871. if (p.height == 'auto')
  7872. {
  7873. g.gridbody.height('auto');
  7874. g.f.gridbody.height('auto');
  7875. }
  7876. if (p.width)
  7877. {
  7878. g.grid.width(p.width);
  7879. }
  7880. g._onResize.call(g);
  7881. },
  7882. _initFootbar: function ()
  7883. {
  7884. var g = this, p = this.options;
  7885. if (p.usePager)
  7886. {
  7887. //创建底部工具条 - 选择每页显示记录数
  7888. var optStr = "";
  7889. var selectedIndex = -1;
  7890. $(p.pageSizeOptions).each(function (i, item)
  7891. {
  7892. var selectedStr = "";
  7893. if (p.pageSize == item) selectedIndex = i;
  7894. optStr += "<option value='" + item + "' " + selectedStr + " >" + item + "</option>";
  7895. });
  7896. $('.l-bar-selectpagesize', g.toolbar).append("<select name='rp'>" + optStr + "</select>");
  7897. if (selectedIndex != -1) $('.l-bar-selectpagesize select', g.toolbar)[0].selectedIndex = selectedIndex;
  7898. if (p.switchPageSizeApplyComboBox && $.fn.ligerComboBox)
  7899. {
  7900. $(".l-bar-selectpagesize select", g.toolbar).ligerComboBox(
  7901. {
  7902. onBeforeSelect: function ()
  7903. {
  7904. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  7905. return false;
  7906. return true;
  7907. },
  7908. width: 45
  7909. });
  7910. }
  7911. }
  7912. else
  7913. {
  7914. g.toolbar.hide();
  7915. }
  7916. },
  7917. _searchData: function (data, clause)
  7918. {
  7919. var g = this, p = this.options;
  7920. var newData = new Array();
  7921. for (var i = 0; i < data.length; i++)
  7922. {
  7923. if (clause(data[i], i))
  7924. {
  7925. newData[newData.length] = data[i];
  7926. }
  7927. }
  7928. return newData;
  7929. },
  7930. _clearGrid: function ()
  7931. {
  7932. var g = this, p = this.options;
  7933. for (var i in g.rows)
  7934. {
  7935. var rowobj = $(g.getRowObj(g.rows[i]));
  7936. if (g.enabledFrozen())
  7937. rowobj = rowobj.add(g.getRowObj(g.rows[i], true));
  7938. rowobj.unbind();
  7939. }
  7940. //清空数据
  7941. g.gridbody.html("");
  7942. g.f.gridbody.html("");
  7943. g.recordNumber = 0;
  7944. g.records = {};
  7945. g.rows = [];
  7946. //清空选择的行
  7947. g.selected = [];
  7948. g.totalNumber = 0;
  7949. //编辑器计算器
  7950. g.editorcounter = 0;
  7951. },
  7952. _fillGridBody: function (data, frozen)
  7953. {
  7954. var g = this, p = this.options;
  7955. //加载数据
  7956. var gridhtmlarr = ['<div class="l-grid-body-inner"><table class="l-grid-body-table" cellpadding=0 cellspacing=0><tbody>'];
  7957. if (g.enabledGroup()) //启用分组模式
  7958. {
  7959. var groups = []; //分组列名数组
  7960. var groupsdata = []; //切成几块后的数据
  7961. g.groups = groupsdata;
  7962. for (var rowparm in data)
  7963. {
  7964. var item = data[rowparm];
  7965. var groupColumnValue = item[p.groupColumnName];
  7966. var valueIndex = $.inArray(groupColumnValue, groups);
  7967. if (valueIndex == -1)
  7968. {
  7969. groups.push(groupColumnValue);
  7970. valueIndex = groups.length - 1;
  7971. groupsdata.push([]);
  7972. }
  7973. groupsdata[valueIndex].push(item);
  7974. }
  7975. $(groupsdata).each(function (i, item)
  7976. {
  7977. if (groupsdata.length == 1)
  7978. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last l-grid-grouprow-first"');
  7979. if (i == groupsdata.length - 1)
  7980. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-last"');
  7981. else if (i == 0)
  7982. gridhtmlarr.push('<tr class="l-grid-grouprow l-grid-grouprow-first"');
  7983. else
  7984. gridhtmlarr.push('<tr class="l-grid-grouprow"');
  7985. gridhtmlarr.push(' groupindex"=' + i + '" >');
  7986. gridhtmlarr.push('<td colSpan="' + g.columns.length + '" class="l-grid-grouprow-cell">');
  7987. gridhtmlarr.push('<span class="l-grid-group-togglebtn">&nbsp;&nbsp;&nbsp;&nbsp;</span>');
  7988. if (p.groupRender)
  7989. gridhtmlarr.push(p.groupRender(groups[i], item, p.groupColumnDisplay));
  7990. else
  7991. gridhtmlarr.push(p.groupColumnDisplay + ':' + groups[i]);
  7992. gridhtmlarr.push('</td>');
  7993. gridhtmlarr.push('</tr>');
  7994. gridhtmlarr.push(g._getHtmlFromData(item, frozen));
  7995. //汇总
  7996. if (g.isTotalSummary())
  7997. gridhtmlarr.push(g._getTotalSummaryHtml(item, "l-grid-totalsummary-group", frozen));
  7998. });
  7999. }
  8000. else
  8001. {
  8002. gridhtmlarr.push(g._getHtmlFromData(data, frozen));
  8003. }
  8004. gridhtmlarr.push('</tbody></table></div>');
  8005. (frozen ? g.f.gridbody : g.gridbody).html(gridhtmlarr.join(''));
  8006. //分组时不需要
  8007. if (!g.enabledGroup())
  8008. {
  8009. //创建汇总行
  8010. g._bulidTotalSummary(frozen);
  8011. }
  8012. $("> div:first", g.gridbody).width(g.gridtablewidth);
  8013. g._onResize();
  8014. },
  8015. _showData: function ()
  8016. {
  8017. var g = this, p = this.options;
  8018. var data = g.currentData[p.root];
  8019. if (p.usePager)
  8020. {
  8021. //更新总记录数
  8022. if (p.dataAction == "server" && g.data && g.data[p.record])
  8023. p.total = g.data[p.record];
  8024. else if (g.filteredData && g.filteredData[p.root])
  8025. p.total = g.filteredData[p.root].length;
  8026. else if (g.data && g.data[p.root])
  8027. p.total = g.data[p.root].length;
  8028. else if (data)
  8029. p.total = data.length;
  8030. p.page = p.newPage;
  8031. if (!p.total) p.total = 0;
  8032. if (!p.page) p.page = 1;
  8033. p.pageCount = Math.ceil(p.total / p.pageSize);
  8034. if (!p.pageCount) p.pageCount = 1;
  8035. //更新分页
  8036. g._buildPager();
  8037. }
  8038. //加载中
  8039. $('.l-bar-btnloading:first', g.toolbar).removeClass('l-bar-btnloading');
  8040. if (g.trigger('beforeShowData', [g.currentData]) == false) return;
  8041. g._clearGrid();
  8042. g.isDataChanged = false;
  8043. if (!data) return;
  8044. $(".l-bar-btnload:first span", g.toolbar).removeClass("l-disabled");
  8045. g._updateGridData();
  8046. if (g.enabledFrozen())
  8047. g._fillGridBody(g.rows, true);
  8048. g._fillGridBody(g.rows, false);
  8049. g.trigger('SysGridHeightChanged');
  8050. if (p.totalRender)
  8051. {
  8052. $(".l-panel-bar-total", g.element).remove();
  8053. $(".l-panel-bar", g.element).before('<div class="l-panel-bar-total">' + p.totalRender(g.data, g.filteredData) + '</div>');
  8054. }
  8055. if (p.mouseoverRowCssClass)
  8056. {
  8057. for (var i in g.rows)
  8058. {
  8059. var rowobj = $(g.getRowObj(g.rows[i]));
  8060. if (g.enabledFrozen())
  8061. rowobj = rowobj.add(g.getRowObj(g.rows[i], true));
  8062. rowobj.bind('mouseover.gridrow', function ()
  8063. {
  8064. g._onRowOver(this, true);
  8065. }).bind('mouseout.gridrow', function ()
  8066. {
  8067. g._onRowOver(this, false);
  8068. });
  8069. }
  8070. }
  8071. g.gridbody.trigger('scroll.grid');
  8072. g.trigger('afterShowData', [g.currentData]);
  8073. },
  8074. _getRowDomId: function (rowdata, frozen)
  8075. {
  8076. //cxx 2014/06/10 解决分组中有下拉框报错问题
  8077. if(rowdata)
  8078. return this.id + "|" + (frozen ? "1" : "2") + "|" + rowdata['__id'];
  8079. else
  8080. return this.id + "|" + (frozen ? "1" : "2") + "|";
  8081. },
  8082. _getCellDomId: function (rowdata, column)
  8083. {
  8084. return this._getRowDomId(rowdata, column.frozen) + "|" + column['__id'];
  8085. },
  8086. _getHtmlFromData: function (data, frozen)
  8087. {
  8088. if (!data) return "";
  8089. var g = this, p = this.options;
  8090. var gridhtmlarr = [];
  8091. for (var rowparm in data)
  8092. {
  8093. var item = data[rowparm];
  8094. var rowid = item['__id'];
  8095. if (!item) continue;
  8096. gridhtmlarr.push('<tr');
  8097. gridhtmlarr.push(' id="' + g._getRowDomId(item, frozen) + '"');
  8098. gridhtmlarr.push(' class="l-grid-row'); //class start
  8099. if (!frozen && g.enabledCheckbox() && p.isChecked && p.isChecked(item))
  8100. {
  8101. g.select(item);
  8102. gridhtmlarr.push(' l-selected');
  8103. }
  8104. else if (g.isSelected(item))
  8105. {
  8106. gridhtmlarr.push(' l-selected');
  8107. }
  8108. if (item['__index'] % 2 == 1 && p.alternatingRow)
  8109. gridhtmlarr.push(' l-grid-row-alt');
  8110. gridhtmlarr.push('" '); //class end
  8111. if (p.rowAttrRender) gridhtmlarr.push(p.rowAttrRender(item, rowid));
  8112. if (p.tree && g.collapsedRows && g.collapsedRows.length)
  8113. {
  8114. var isHide = function ()
  8115. {
  8116. var pitem = g.getParent(item);
  8117. while (pitem)
  8118. {
  8119. if ($.inArray(pitem, g.collapsedRows) != -1) return true;
  8120. pitem = g.getParent(pitem);
  8121. }
  8122. return false;
  8123. };
  8124. if (isHide()) gridhtmlarr.push(' style="display:none;" ');
  8125. }
  8126. gridhtmlarr.push('>');
  8127. $(g.columns).each(function (columnindex, column)
  8128. {
  8129. if (frozen != column.frozen) return;
  8130. gridhtmlarr.push('<td');
  8131. gridhtmlarr.push(' id="' + g._getCellDomId(item, this) + '"');
  8132. //如果是行序号(系统列)
  8133. if (this.isrownumber)
  8134. {
  8135. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-rownumbers" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  8136. if (p.fixedCellHeight)
  8137. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  8138. gridhtmlarr.push('>' + (parseInt(item['__index']) + 1) + '</div></td>');
  8139. return;
  8140. }
  8141. //如果是复选框(系统列)
  8142. if (this.ischeckbox)
  8143. {
  8144. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-checkbox" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  8145. if (p.fixedCellHeight)
  8146. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  8147. gridhtmlarr.push('><span class="l-grid-row-cell-btn-checkbox"></span></div></td>');
  8148. return;
  8149. }
  8150. //如果是明细列(系统列)
  8151. else if (this.isdetail)
  8152. {
  8153. gridhtmlarr.push(' class="l-grid-row-cell l-grid-row-cell-detail" style="width:' + this.width + 'px"><div class="l-grid-row-cell-inner"');
  8154. if (p.fixedCellHeight)
  8155. gridhtmlarr.push(' style = "height:' + p.rowHeight + 'px;" ');
  8156. gridhtmlarr.push('><span class="l-grid-row-cell-detailbtn"></span></div></td>');
  8157. return;
  8158. }
  8159. var colwidth = this._width;
  8160. gridhtmlarr.push(' class="l-grid-row-cell ');
  8161. if (g.changedCells[rowid + "_" + this['__id']]) gridhtmlarr.push("l-grid-row-cell-edited ");
  8162. if (this.islast)
  8163. gridhtmlarr.push('l-grid-row-cell-last ');
  8164. gridhtmlarr.push('"');
  8165. //if (this.columnname) gridhtmlarr.push('columnname="' + this.columnname + '"');
  8166. gridhtmlarr.push(' style = "');
  8167. // gridhtmlarr.push('width:' + colwidth + 'px; ');
  8168. //cxx 2014-11-07 添加单元格背景色
  8169. gridhtmlarr.push('width:' + colwidth + 'px;background: ' + column.cellBackground + ';');
  8170. if (column._hide)
  8171. {
  8172. gridhtmlarr.push('display:none;');
  8173. }
  8174. gridhtmlarr.push(' ">');
  8175. gridhtmlarr.push(g._getCellHtml(item, column));
  8176. gridhtmlarr.push('</td>');
  8177. });
  8178. gridhtmlarr.push('</tr>');
  8179. }
  8180. return gridhtmlarr.join('');
  8181. },
  8182. _getCellHtml: function (rowdata, column)
  8183. {
  8184. var g = this, p = this.options;
  8185. if (column.isrownumber)
  8186. return '<div class="l-grid-row-cell-inner">' + (parseInt(rowdata['__index']) + 1) + '</div>';
  8187. var htmlarr = [];
  8188. htmlarr.push('<div class="l-grid-row-cell-inner"');
  8189. //htmlarr.push('<div');
  8190. htmlarr.push(' style = "width:' + parseInt(column._width - 8) + 'px;');
  8191. if (p.fixedCellHeight) htmlarr.push('height:' + p.rowHeight + 'px;min-height:' + p.rowHeight + 'px; ');
  8192. if (column.align) htmlarr.push('text-align:' + column.align + ';');
  8193. var content = g._getCellContent(rowdata, column);
  8194. htmlarr.push('">' + content + '</div>');
  8195. return htmlarr.join('');
  8196. },
  8197. _getCellContent: function (rowdata, column)
  8198. {
  8199. if (!rowdata || !column) return "";
  8200. if (column.isrownumber) return parseInt(rowdata['__index']) + 1;
  8201. var rowid = rowdata['__id'];
  8202. var rowindex = rowdata['__index'];
  8203. var value = column.name ? rowdata[column.name] : null;
  8204. var g = this, p = this.options;
  8205. var content = "";
  8206. if (column.render)
  8207. {
  8208. content = column.render.call(g, rowdata, rowindex, value, column);
  8209. }
  8210. else if (p.formatters[column.type])
  8211. {
  8212. content = p.formatters[column.type].call(g, value, column);
  8213. }
  8214. else if (value != null)
  8215. {
  8216. content = value.toString();
  8217. }
  8218. if (p.tree && (p.tree.columnName != null && p.tree.columnName == column.name || p.tree.columnId != null && p.tree.columnId == column.id))
  8219. {
  8220. content = g._getTreeCellHtml(content, rowdata);
  8221. }
  8222. return content || "";
  8223. },
  8224. _getTreeCellHtml: function (oldContent, rowdata)
  8225. {
  8226. var level = rowdata['__level'];
  8227. var g = this, p = this.options;
  8228. //var isExtend = p.tree.isExtend(rowdata);
  8229. var isExtend = $.inArray(rowdata, g.collapsedRows || []) == -1;
  8230. var isParent = p.tree.isParent(rowdata);
  8231. var content = "";
  8232. level = parseInt(level) || 1;
  8233. for (var i = 1; i < level; i++)
  8234. {
  8235. content += "<div class='l-grid-tree-space'></div>";
  8236. }
  8237. if (isExtend && isParent)
  8238. content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-open'></div>";
  8239. else if (isParent)
  8240. content += "<div class='l-grid-tree-space l-grid-tree-link l-grid-tree-link-close'></div>";
  8241. else
  8242. content += "<div class='l-grid-tree-space'></div>";
  8243. content += "<span class='l-grid-tree-content'>" + oldContent + "</span>";
  8244. return content;
  8245. },
  8246. _applyEditor: function (obj)
  8247. {
  8248. var g = this, p = this.options;
  8249. var rowcell = obj;
  8250. var ids = rowcell.id.split('|');
  8251. var columnid = ids[ids.length - 1];
  8252. var column = g._columns[columnid];
  8253. var row = $(rowcell).parent();
  8254. var rowdata = g.getRow(row[0]);
  8255. var rowid = rowdata['__id'];
  8256. var rowindex = rowdata['__index'];
  8257. if (!column || !column.editor) return;
  8258. var columnname = column.name;
  8259. var columnindex = column.columnindex;
  8260. if (column.editor.type && p.editors[column.editor.type])
  8261. {
  8262. var currentdata = rowdata[columnname];
  8263. var editParm = { record: rowdata, value: currentdata, column: column, rowindex: rowindex };
  8264. if (g.trigger('beforeEdit', [editParm]) == false) return false;
  8265. var editor = p.editors[column.editor.type];
  8266. var jcell = $(rowcell), offset = $(rowcell).offset();
  8267. jcell.html("");
  8268. g.setCellEditing(rowdata, column, true);
  8269. var width = $(rowcell).width(), height = $(rowcell).height();
  8270. var container = $("<div class='l-grid-editor'></div>").appendTo('body');
  8271. if ($.browser.mozilla)
  8272. container.css({ left: offset.left, top: offset.top }).show();
  8273. else
  8274. container.css({ left: offset.left + 1, top: offset.top + 1 }).show();
  8275. var editorInput = g._createEditor(editor, container, editParm, width, height);
  8276. g.editor = { editing: true, editor: editor, input: editorInput, editParm: editParm, container: container };
  8277. g.unbind('sysEndEdit');
  8278. g.bind('sysEndEdit', function ()
  8279. {
  8280. var newValue = editor.getValue(editorInput, editParm);
  8281. if (newValue != currentdata)
  8282. {
  8283. $(rowcell).addClass("l-grid-row-cell-edited");
  8284. g.changedCells[rowid + "_" + column['__id']] = true;
  8285. if (column.editor.onChange) column.editor.onChange(rowcell, newValue);
  8286. editParm.value = newValue;
  8287. if (g._checkEditAndUpdateCell(editParm))
  8288. {
  8289. if (column.editor.onChanged) column.editor.onChanged(rowcell, newValue);
  8290. }
  8291. }
  8292. });
  8293. }
  8294. },
  8295. _checkEditAndUpdateCell: function (editParm)
  8296. {
  8297. var g = this, p = this.options;
  8298. if (g.trigger('beforeSubmitEdit', [editParm]) == false) return false;
  8299. g.updateCell(editParm.column, editParm.value, editParm.record);
  8300. if (editParm.column.render || g.enabledTotal()) g.reRender({ column: editParm.column });
  8301. g.reRender({ rowdata: editParm.record });
  8302. return true;
  8303. },
  8304. _getCurrentPageData: function (source)
  8305. {
  8306. var g = this, p = this.options;
  8307. var data = {};
  8308. data[p.root] = [];
  8309. if (!source || !source[p.root] || !source[p.root].length)
  8310. {
  8311. data[p.record] = 0;
  8312. return data;
  8313. }
  8314. data[p.record] = source[p.root].length;
  8315. if (!p.newPage) p.newPage = 1;
  8316. for (i = (p.newPage - 1) * p.pageSize; i < source[p.root].length && i < p.newPage * p.pageSize; i++)
  8317. {
  8318. data[p.root].push(source[p.root][i]);
  8319. }
  8320. return data;
  8321. },
  8322. //比较某一列两个数据
  8323. _compareData: function (data1, data2, columnName, columnType)
  8324. {
  8325. var g = this, p = this.options;
  8326. var val1 = data1[columnName], val2 = data2[columnName];
  8327. if (val1 == null && val2 != null) return 1;
  8328. else if (val1 == null && val2 == null) return 0;
  8329. else if (val1 != null && val2 == null) return -1;
  8330. if (p.sorters[columnType])
  8331. return p.sorters[columnType].call(g, val1, val2);
  8332. else
  8333. return val1 < val2 ? -1 : val1 > val2 ? 1 : 0;
  8334. },
  8335. _getTotalCellContent: function (column, data)
  8336. {
  8337. var g = this, p = this.options;
  8338. var totalsummaryArr = [];
  8339. if (column.totalSummary)
  8340. {
  8341. var isExist = function (type)
  8342. {
  8343. for (var i = 0; i < types.length; i++)
  8344. if (types[i].toLowerCase() == type.toLowerCase()) return true;
  8345. return false;
  8346. };
  8347. var sum = 0, count = 0, avg = 0;
  8348. var max = parseFloat(data[0][column.name]);
  8349. var min = parseFloat(data[0][column.name]);
  8350. for (var i = 0; i < data.length; i++)
  8351. {
  8352. count += 1;
  8353. var value = parseFloat(data[i][column.name]);
  8354. if (!value) continue;
  8355. sum += value;
  8356. if (value > max) max = value;
  8357. if (value < min) min = value;
  8358. }
  8359. avg = sum * 1.0 / data.length;
  8360. if (column.totalSummary.render)
  8361. {
  8362. var renderhtml = column.totalSummary.render({
  8363. sum: sum,
  8364. count: count,
  8365. avg: avg,
  8366. min: min,
  8367. max: max
  8368. }, column, g.data);
  8369. totalsummaryArr.push(renderhtml);
  8370. }
  8371. else if (column.totalSummary.type)
  8372. {
  8373. var types = column.totalSummary.type.split(',');
  8374. if (isExist('sum'))
  8375. totalsummaryArr.push("<div>Sum=" + sum.toFixed(2) + "</div>");
  8376. if (isExist('count'))
  8377. totalsummaryArr.push("<div>Count=" + count + "</div>");
  8378. if (isExist('max'))
  8379. totalsummaryArr.push("<div>Max=" + max.toFixed(2) + "</div>");
  8380. if (isExist('min'))
  8381. totalsummaryArr.push("<div>Min=" + min.toFixed(2) + "</div>");
  8382. if (isExist('avg'))
  8383. totalsummaryArr.push("<div>Avg=" + avg.toFixed(2) + "</div>");
  8384. }
  8385. }
  8386. return totalsummaryArr.join('');
  8387. },
  8388. _getTotalSummaryHtml: function (data, classCssName, frozen)
  8389. {
  8390. var g = this, p = this.options;
  8391. var totalsummaryArr = [];
  8392. if (classCssName)
  8393. totalsummaryArr.push('<tr class="l-grid-totalsummary ' + classCssName + '">');
  8394. else
  8395. totalsummaryArr.push('<tr class="l-grid-totalsummary">');
  8396. $(g.columns).each(function (columnindex, column)
  8397. {
  8398. if (!column._hide) {
  8399. if (this.frozen != frozen) return;
  8400. //如果是行序号(系统列)
  8401. if (this.isrownumber)
  8402. {
  8403. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-rownumbers" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  8404. return;
  8405. }
  8406. //如果是复选框(系统列)
  8407. if (this.ischeckbox)
  8408. {
  8409. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-checkbox" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  8410. return;
  8411. }
  8412. //如果是明细列(系统列)
  8413. else if (this.isdetail)
  8414. {
  8415. totalsummaryArr.push('<td class="l-grid-totalsummary-cell l-grid-totalsummary-cell-detail" style="width:' + this.width + 'px"><div>&nbsp;</div></td>');
  8416. return;
  8417. }
  8418. totalsummaryArr.push('<td class="l-grid-totalsummary-cell');
  8419. if (this.islast)
  8420. totalsummaryArr.push(" l-grid-totalsummary-cell-last");
  8421. totalsummaryArr.push('" ');
  8422. totalsummaryArr.push('id="' + g.id + "|total" + g.totalNumber + "|" + column.__id + '" ');
  8423. totalsummaryArr.push('width="' + this._width + '" ');
  8424. columnname = this.columnname;
  8425. if (columnname)
  8426. {
  8427. totalsummaryArr.push('columnname="' + columnname + '" ');
  8428. }
  8429. totalsummaryArr.push('columnindex="' + columnindex + '" ');
  8430. totalsummaryArr.push('><div class="l-grid-totalsummary-cell-inner"');
  8431. if (column.align)
  8432. totalsummaryArr.push(' style="text-Align:' + column.align + ';"');
  8433. totalsummaryArr.push('>');
  8434. totalsummaryArr.push(g._getTotalCellContent(column, data));
  8435. totalsummaryArr.push('</div></td>');
  8436. }
  8437. });
  8438. totalsummaryArr.push('</tr>');
  8439. if (!frozen) g.totalNumber++;
  8440. return totalsummaryArr.join('');
  8441. },
  8442. _bulidTotalSummary: function (frozen)
  8443. {
  8444. var g = this, p = this.options;
  8445. if (!g.isTotalSummary()) return false;
  8446. if (!g.currentData || g.currentData[p.root].length == 0) return false;
  8447. var totalRow = $(g._getTotalSummaryHtml(g.currentData[p.root], null, frozen));
  8448. $("tbody:first", frozen ? g.f.gridbody : g.gridbody).append(totalRow);
  8449. },
  8450. _buildPager: function ()
  8451. {
  8452. var g = this, p = this.options;
  8453. $('.pcontrol input', g.toolbar).val(p.page);
  8454. if (!p.pageCount) p.pageCount = 1;
  8455. $('.pcontrol span', g.toolbar).html(p.pageCount);
  8456. var r1 = parseInt((p.page - 1) * p.pageSize) + 1.0;
  8457. var r2 = parseInt(r1) + parseInt(p.pageSize) - 1;
  8458. if (!p.total) p.total = 0;
  8459. if (p.total < r2) r2 = p.total;
  8460. if (!p.total) r1 = r2 = 0;
  8461. if (r1 < 0) r1 = 0;
  8462. if (r2 < 0) r2 = 0;
  8463. var stat = p.pageStatMessage;
  8464. stat = stat.replace(/{from}/, r1);
  8465. stat = stat.replace(/{to}/, r2);
  8466. stat = stat.replace(/{total}/, p.total);
  8467. stat = stat.replace(/{pagesize}/, p.pageSize);
  8468. $('.l-bar-text', g.toolbar).html(stat);
  8469. if (!p.total)
  8470. {
  8471. $(".l-bar-btnfirst span,.l-bar-btnprev span,.l-bar-btnnext span,.l-bar-btnlast span", g.toolbar)
  8472. .addClass("l-disabled");
  8473. }
  8474. if (p.page == 1)
  8475. {
  8476. $(".l-bar-btnfirst span", g.toolbar).addClass("l-disabled");
  8477. $(".l-bar-btnprev span", g.toolbar).addClass("l-disabled");
  8478. }
  8479. else if (p.page > p.pageCount && p.pageCount > 0)
  8480. {
  8481. $(".l-bar-btnfirst span", g.toolbar).removeClass("l-disabled");
  8482. $(".l-bar-btnprev span", g.toolbar).removeClass("l-disabled");
  8483. }
  8484. if (p.page == p.pageCount)
  8485. {
  8486. $(".l-bar-btnlast span", g.toolbar).addClass("l-disabled");
  8487. $(".l-bar-btnnext span", g.toolbar).addClass("l-disabled");
  8488. }
  8489. else if (p.page < p.pageCount && p.pageCount > 0)
  8490. {
  8491. $(".l-bar-btnlast span", g.toolbar).removeClass("l-disabled");
  8492. $(".l-bar-btnnext span", g.toolbar).removeClass("l-disabled");
  8493. }
  8494. },
  8495. _getRowIdByDomId: function (domid)
  8496. {
  8497. var ids = domid.split('|');
  8498. var rowid = ids[2];
  8499. return rowid;
  8500. },
  8501. _getRowByDomId: function (domid)
  8502. {
  8503. return this.records[this._getRowIdByDomId(domid)];
  8504. },
  8505. _getSrcElementByEvent: function (e)
  8506. {
  8507. var g = this;
  8508. var obj = (e.target || e.srcElement);
  8509. var jobjs = $(obj).parents().add(obj);
  8510. var fn = function (parm)
  8511. {
  8512. for (var i = 0, l = jobjs.length; i < l; i++)
  8513. {
  8514. if (typeof parm == "string")
  8515. {
  8516. if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
  8517. }
  8518. else if (typeof parm == "object")
  8519. {
  8520. if (jobjs[i] == parm) return jobjs[i];
  8521. }
  8522. }
  8523. return null;
  8524. };
  8525. if (fn("l-grid-editor")) return { editing: true, editor: fn("l-grid-editor") };
  8526. if (jobjs.index(this.element) == -1) return { out: true };
  8527. var indetail = false;
  8528. if (jobjs.hasClass("l-grid-detailpanel") && g.detailrows)
  8529. {
  8530. for (var i = 0, l = g.detailrows.length; i < l; i++)
  8531. {
  8532. if (jobjs.index(g.detailrows[i]) != -1)
  8533. {
  8534. indetail = true;
  8535. break;
  8536. }
  8537. }
  8538. }
  8539. var r = {
  8540. grid: fn("l-panel"),
  8541. indetail: indetail,
  8542. frozen: fn(g.gridview1[0]) ? true : false,
  8543. header: fn("l-panel-header"), //标题
  8544. gridheader: fn("l-grid-header"), //表格头
  8545. gridbody: fn("l-grid-body"),
  8546. total: fn("l-panel-bar-total"), //总汇总
  8547. popup: fn("l-grid-popup"),
  8548. toolbar: fn("l-panel-bar")
  8549. };
  8550. if (r.gridheader)
  8551. {
  8552. r.hrow = fn("l-grid-hd-row");
  8553. r.hcell = fn("l-grid-hd-cell");
  8554. r.hcelltext = fn("l-grid-hd-cell-text");
  8555. r.checkboxall = fn("l-grid-hd-cell-checkbox");
  8556. if (r.hcell)
  8557. {
  8558. var columnid = r.hcell.id.split('|')[2];
  8559. r.column = g._columns[columnid];
  8560. }
  8561. }
  8562. if (r.gridbody)
  8563. {
  8564. r.row = fn("l-grid-row");
  8565. r.cell = fn("l-grid-row-cell");
  8566. r.checkbox = fn("l-grid-row-cell-btn-checkbox");
  8567. r.groupbtn = fn("l-grid-group-togglebtn");
  8568. r.grouprow = fn("l-grid-grouprow");
  8569. r.detailbtn = fn("l-grid-row-cell-detailbtn");
  8570. r.detailrow = fn("l-grid-detailpanel");
  8571. r.totalrow = fn("l-grid-totalsummary");
  8572. r.totalcell = fn("l-grid-totalsummary-cell");
  8573. r.rownumberscell = $(r.cell).hasClass("l-grid-row-cell-rownumbers") ? r.cell : null;
  8574. r.detailcell = $(r.cell).hasClass("l-grid-row-cell-detail") ? r.cell : null;
  8575. r.checkboxcell = $(r.cell).hasClass("l-grid-row-cell-checkbox") ? r.cell : null;
  8576. r.treelink = fn("l-grid-tree-link");
  8577. r.editor = fn("l-grid-editor");
  8578. if (r.row) r.data = this._getRowByDomId(r.row.id);
  8579. if (r.cell) r.editing = $(r.cell).hasClass("l-grid-row-cell-editing");
  8580. if (r.editor) r.editing = true;
  8581. if (r.editing) r.out = false;
  8582. }
  8583. if (r.toolbar)
  8584. {
  8585. r.first = fn("l-bar-btnfirst");
  8586. r.last = fn("l-bar-btnlast");
  8587. r.next = fn("l-bar-btnnext");
  8588. r.prev = fn("l-bar-btnprev");
  8589. r.load = fn("l-bar-btnload");
  8590. r.button = fn("l-bar-button");
  8591. }
  8592. return r;
  8593. },
  8594. _setEvent: function ()
  8595. {
  8596. var g = this, p = this.options;
  8597. g.grid.bind("mousedown.grid", function (e)
  8598. {
  8599. g._onMouseDown.call(g, e);
  8600. });
  8601. g.grid.bind("dblclick.grid", function (e)
  8602. {
  8603. g._onDblClick.call(g, e);
  8604. });
  8605. g.grid.bind("contextmenu.grid", function (e)
  8606. {
  8607. return g._onContextmenu.call(g, e);
  8608. });
  8609. $(document).bind("mouseup.grid", function (e)
  8610. {
  8611. g._onMouseUp.call(g, e);
  8612. });
  8613. $(document).bind("click.grid", function (e)
  8614. {
  8615. g._onClick.call(g, e);
  8616. });
  8617. $(window).bind("resize.grid", function (e)
  8618. {
  8619. g._onResize.call(g);
  8620. });
  8621. $(document).bind("keydown.grid", function (e)
  8622. {
  8623. if (e.ctrlKey) g.ctrlKey = true;
  8624. });
  8625. $(document).bind("keyup.grid", function (e)
  8626. {
  8627. delete g.ctrlKey;
  8628. });
  8629. //表体 - 滚动联动事件
  8630. g.gridbody.bind('scroll.grid', function ()
  8631. {
  8632. var scrollLeft = g.gridbody.scrollLeft();
  8633. var scrollTop = g.gridbody.scrollTop();
  8634. if (scrollLeft != null)
  8635. g.gridheader[0].scrollLeft = scrollLeft;
  8636. if (scrollTop != null)
  8637. g.f.gridbody[0].scrollTop = scrollTop;
  8638. g.endEdit();
  8639. g.trigger('SysGridHeightChanged');
  8640. });
  8641. //工具条 - 切换每页记录数事件
  8642. $('select', g.toolbar).change(function ()
  8643. {
  8644. if (g.isDataChanged && !confirm(p.isContinueByDataChanged))
  8645. return false;
  8646. p.newPage = 1;
  8647. p.pageSize = this.value;
  8648. g.loadData(p.where);
  8649. });
  8650. //工具条 - 切换当前页事件
  8651. $('span.pcontrol :text', g.toolbar).blur(function (e)
  8652. {
  8653. g.changePage('input');
  8654. });
  8655. $("div.l-bar-button", g.toolbar).hover(function ()
  8656. {
  8657. $(this).addClass("l-bar-button-over");
  8658. }, function ()
  8659. {
  8660. $(this).removeClass("l-bar-button-over");
  8661. });
  8662. //列拖拽支持
  8663. if ($.fn.ligerDrag && p.colDraggable)
  8664. {
  8665. 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');
  8666. g.gridheader.add(g.f.gridheader).ligerDrag({ revert: true, animate: false,
  8667. proxyX: 0, proxyY: 0,
  8668. proxy: function (draggable, e)
  8669. {
  8670. var src = g._getSrcElementByEvent(e);
  8671. if (src.hcell && src.column)
  8672. {
  8673. var content = $(".l-grid-hd-cell-text:first", src.hcell).html();
  8674. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
  8675. proxy.append(content);
  8676. return proxy;
  8677. }
  8678. },
  8679. onRevert: function () { return false; },
  8680. onRendered: function ()
  8681. {
  8682. this.set('cursor', 'default');
  8683. g.children[this.id] = this;
  8684. },
  8685. onStartDrag: function (current, e)
  8686. {
  8687. if (e.button == 2) return false;
  8688. if (g.colresizing) return false;
  8689. this.set('cursor', 'default');
  8690. var src = g._getSrcElementByEvent(e);
  8691. if (!src.hcell || !src.column || src.column.issystem || src.hcelltext) return false;
  8692. if ($(src.hcell).css('cursor').indexOf('resize') != -1) return false;
  8693. this.draggingColumn = src.column;
  8694. g.coldragging = true;
  8695. var gridOffset = g.grid.offset();
  8696. this.validRange = {
  8697. top: gridOffset.top,
  8698. bottom: gridOffset.top + g.gridheader.height(),
  8699. left: gridOffset.left - 10,
  8700. right: gridOffset.left + g.grid.width() + 10
  8701. };
  8702. },
  8703. onDrag: function (current, e)
  8704. {
  8705. this.set('cursor', 'default');
  8706. var column = this.draggingColumn;
  8707. if (!column) return false;
  8708. if (g.colresizing) return false;
  8709. if (g.colDropIn == null)
  8710. g.colDropIn = -1;
  8711. var pageX = e.pageX;
  8712. var pageY = e.pageY;
  8713. var visit = false;
  8714. var gridOffset = g.grid.offset();
  8715. var validRange = this.validRange;
  8716. if (pageX < validRange.left || pageX > validRange.right
  8717. || pageY > validRange.bottom || pageY < validRange.top)
  8718. {
  8719. g.colDropIn = -1;
  8720. g.colDroptip.hide();
  8721. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
  8722. return;
  8723. }
  8724. for (var colid in g._columns)
  8725. {
  8726. var col = g._columns[colid];
  8727. if (column == col)
  8728. {
  8729. visit = true;
  8730. continue;
  8731. }
  8732. if (col.issystem) continue;
  8733. var sameLevel = col['__level'] == column['__level'];
  8734. var isAfter = !sameLevel ? false : visit ? true : false;
  8735. if (column.frozen != col.frozen) isAfter = col.frozen ? false : true;
  8736. if (g.colDropIn != -1 && g.colDropIn != colid) continue;
  8737. var cell = document.getElementById(col['__domid']);
  8738. var offset = $(cell).offset();
  8739. var range = {
  8740. top: offset.top,
  8741. bottom: offset.top + $(cell).height(),
  8742. left: offset.left - 10,
  8743. right: offset.left + 10
  8744. };
  8745. if (isAfter)
  8746. {
  8747. var cellwidth = $(cell).width();
  8748. range.left += cellwidth;
  8749. range.right += cellwidth;
  8750. }
  8751. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  8752. {
  8753. var height = p.headerRowHeight;
  8754. if (col['__rowSpan']) height *= col['__rowSpan'];
  8755. g.colDroptip.css({
  8756. left: range.left + 5,
  8757. top: range.top - 9,
  8758. height: height + 9 * 2
  8759. }).show();
  8760. g.colDropIn = colid;
  8761. g.colDropDir = isAfter ? "right" : "left";
  8762. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no").addClass("l-drop-yes");
  8763. break;
  8764. }
  8765. else if (g.colDropIn != -1)
  8766. {
  8767. g.colDropIn = -1;
  8768. g.colDroptip.hide();
  8769. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes").addClass("l-drop-no");
  8770. }
  8771. }
  8772. },
  8773. onStopDrag: function (current, e)
  8774. {
  8775. var column = this.draggingColumn;
  8776. g.coldragging = false;
  8777. if (g.colDropIn != -1)
  8778. {
  8779. g.changeCol.ligerDefer(g, 0, [column, g.colDropIn, g.colDropDir == "right"]);
  8780. g.colDropIn = -1;
  8781. }
  8782. g.colDroptip.hide();
  8783. this.set('cursor', 'default');
  8784. }
  8785. });
  8786. }
  8787. //行拖拽支持
  8788. if ($.fn.ligerDrag && p.rowDraggable)
  8789. {
  8790. g.rowDroptip = $("<div class='l-drag-rowdroptip' style='display:none'></div>").appendTo('body');
  8791. g.gridbody.add(g.f.gridbody).ligerDrag({ revert: true, animate: false,
  8792. proxyX: 0, proxyY: 0,
  8793. proxy: function (draggable, e)
  8794. {
  8795. var src = g._getSrcElementByEvent(e);
  8796. if (src.row)
  8797. {
  8798. var content = p.draggingMessage.replace(/{count}/, draggable.draggingRows ? draggable.draggingRows.length : 1);
  8799. if (p.rowDraggingRender)
  8800. {
  8801. content = p.rowDraggingRender(draggable.draggingRows, draggable, g);
  8802. }
  8803. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
  8804. return proxy;
  8805. }
  8806. },
  8807. onRevert: function () { return false; },
  8808. onRendered: function ()
  8809. {
  8810. this.set('cursor', 'default');
  8811. g.children[this.id] = this;
  8812. },
  8813. onStartDrag: function (current, e)
  8814. {
  8815. if (e.button == 2) return false;
  8816. if (g.colresizing) return false;
  8817. if (!g.columns.length) return false;
  8818. this.set('cursor', 'default');
  8819. var src = g._getSrcElementByEvent(e);
  8820. if (!src.cell || !src.data || src.checkbox) return false;
  8821. var ids = src.cell.id.split('|');
  8822. var column = g._columns[ids[ids.length - 1]];
  8823. if (src.rownumberscell || src.detailcell || src.checkboxcell || column == g.columns[0])
  8824. {
  8825. if (g.enabledCheckbox())
  8826. {
  8827. this.draggingRows = g.getSelecteds();
  8828. if (!this.draggingRows || !this.draggingRows.length) return false;
  8829. }
  8830. else
  8831. {
  8832. this.draggingRows = [src.data];
  8833. }
  8834. this.draggingRow = src.data;
  8835. this.set('cursor', 'move');
  8836. g.rowdragging = true;
  8837. this.validRange = {
  8838. top: g.gridbody.offset().top,
  8839. bottom: g.gridbody.offset().top + g.gridbody.height(),
  8840. left: g.grid.offset().left - 10,
  8841. right: g.grid.offset().left + g.grid.width() + 10
  8842. };
  8843. }
  8844. else
  8845. {
  8846. return false;
  8847. }
  8848. },
  8849. onDrag: function (current, e)
  8850. {
  8851. var rowdata = this.draggingRow;
  8852. if (!rowdata) return false;
  8853. var rows = this.draggingRows ? this.draggingRows : [rowdata];
  8854. if (g.colresizing) return false;
  8855. if (g.rowDropIn == null) g.rowDropIn = -1;
  8856. var pageX = e.pageX;
  8857. var pageY = e.pageY;
  8858. var visit = false;
  8859. var validRange = this.validRange;
  8860. if (pageX < validRange.left || pageX > validRange.right
  8861. || pageY > validRange.bottom || pageY < validRange.top)
  8862. {
  8863. g.rowDropIn = -1;
  8864. g.rowDroptip.hide();
  8865. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  8866. return;
  8867. }
  8868. for (var i in g.rows)
  8869. {
  8870. var rd = g.rows[i];
  8871. var rowid = rd['__id'];
  8872. if (rowdata == rd) visit = true;
  8873. if ($.inArray(rd, rows) != -1) continue;
  8874. var isAfter = visit ? true : false;
  8875. if (g.rowDropIn != -1 && g.rowDropIn != rowid) continue;
  8876. var rowobj = g.getRowObj(rowid);
  8877. var offset = $(rowobj).offset();
  8878. var range = {
  8879. top: offset.top - 4,
  8880. bottom: offset.top + $(rowobj).height() + 4,
  8881. left: g.grid.offset().left,
  8882. right: g.grid.offset().left + g.grid.width()
  8883. };
  8884. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  8885. {
  8886. var lineTop = offset.top;
  8887. if (isAfter) lineTop += $(rowobj).height();
  8888. g.rowDroptip.css({
  8889. left: range.left,
  8890. top: lineTop,
  8891. width: range.right - range.left
  8892. }).show();
  8893. g.rowDropIn = rowid;
  8894. g.rowDropDir = isAfter ? "bottom" : "top";
  8895. if (p.tree && pageY > range.top + 5 && pageY < range.bottom - 5)
  8896. {
  8897. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
  8898. g.rowDroptip.hide();
  8899. g.rowDropInParent = true;
  8900. }
  8901. else
  8902. {
  8903. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
  8904. g.rowDroptip.show();
  8905. g.rowDropInParent = false;
  8906. }
  8907. break;
  8908. }
  8909. else if (g.rowDropIn != -1)
  8910. {
  8911. g.rowDropIn = -1;
  8912. g.rowDropInParent = false;
  8913. g.rowDroptip.hide();
  8914. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  8915. }
  8916. }
  8917. },
  8918. onStopDrag: function (current, e)
  8919. {
  8920. var rows = this.draggingRows;
  8921. g.rowdragging = false;
  8922. for (var i = 0; i < rows.length; i++)
  8923. {
  8924. var children = rows[i].children;
  8925. if (children)
  8926. {
  8927. rows = $.grep(rows, function (node, i)
  8928. {
  8929. var isIn = $.inArray(node, children) == -1;
  8930. return isIn;
  8931. });
  8932. }
  8933. }
  8934. if (g.rowDropIn != -1)
  8935. {
  8936. if (p.tree)
  8937. {
  8938. var neardata, prow;
  8939. if (g.rowDropInParent)
  8940. {
  8941. prow = g.getRow(g.rowDropIn);
  8942. }
  8943. else
  8944. {
  8945. neardata = g.getRow(g.rowDropIn);
  8946. prow = g.getParent(neardata);
  8947. }
  8948. g.appendRange(rows, prow, neardata, g.rowDropDir != "bottom");
  8949. g.trigger('rowDragDrop', {
  8950. rows: rows,
  8951. parent: prow,
  8952. near: neardata,
  8953. after: g.rowDropDir == "bottom"
  8954. });
  8955. }
  8956. else
  8957. {
  8958. g.moveRange(rows, g.rowDropIn, g.rowDropDir == "bottom");
  8959. g.trigger('rowDragDrop', {
  8960. rows: rows,
  8961. parent: prow,
  8962. near: g.getRow(g.rowDropIn),
  8963. after: g.rowDropDir == "bottom"
  8964. });
  8965. }
  8966. g.rowDropIn = -1;
  8967. }
  8968. g.rowDroptip.hide();
  8969. this.set('cursor', 'default');
  8970. }
  8971. });
  8972. }
  8973. },
  8974. _onRowOver: function (rowParm, over)
  8975. {
  8976. if (l.draggable.dragging) return;
  8977. var g = this, p = this.options;
  8978. var rowdata = g.getRow(rowParm);
  8979. var methodName = over ? "addClass" : "removeClass";
  8980. if (g.enabledFrozen())
  8981. $(g.getRowObj(rowdata, true))[methodName](p.mouseoverRowCssClass);
  8982. $(g.getRowObj(rowdata, false))[methodName](p.mouseoverRowCssClass);
  8983. },
  8984. _onMouseUp: function (e)
  8985. {
  8986. var g = this, p = this.options;
  8987. if (l.draggable.dragging)
  8988. {
  8989. var src = g._getSrcElementByEvent(e);
  8990. //drop in header cell
  8991. if (src.hcell && src.column)
  8992. {
  8993. g.trigger('dragdrop', [{ type: 'header', column: src.column, cell: src.hcell }, e]);
  8994. }
  8995. else if (src.row)
  8996. {
  8997. g.trigger('dragdrop', [{ type: 'row', record: src.data, row: src.row }, e]);
  8998. }
  8999. }
  9000. },
  9001. _onMouseDown: function (e)
  9002. {
  9003. var g = this, p = this.options;
  9004. },
  9005. _onContextmenu: function (e)
  9006. {
  9007. var g = this, p = this.options;
  9008. var src = g._getSrcElementByEvent(e);
  9009. if (src.row)
  9010. {
  9011. if (p.whenRClickToSelect)
  9012. g.select(src.data);
  9013. if (g.hasBind('contextmenu'))
  9014. {
  9015. return g.trigger('contextmenu', [{ data: src.data, rowindex: src.data['__index'], row: src.row }, e]);
  9016. }
  9017. }
  9018. else if (src.hcell)
  9019. {
  9020. if (!p.allowHideColumn) return true;
  9021. var columnindex = $(src.hcell).attr("columnindex");
  9022. if (columnindex == undefined) return true;
  9023. var left = (e.pageX - g.body.offset().left + parseInt(g.body[0].scrollLeft));
  9024. if (columnindex == g.columns.length - 1) left -= 50;
  9025. g.popup.css({ left: left, top: g.gridheader.height() + 1 });
  9026. g.popup.toggle();
  9027. return false;
  9028. }
  9029. },
  9030. _onDblClick: function (e)
  9031. {
  9032. var g = this, p = this.options;
  9033. var src = g._getSrcElementByEvent(e);
  9034. if (src.row)
  9035. {
  9036. g.trigger('dblClickRow', [src.data, src.data['__id'], src.row]);
  9037. }
  9038. },
  9039. _onClick: function (e)
  9040. {
  9041. var obj = (e.target || e.srcElement);
  9042. var g = this, p = this.options;
  9043. var src = g._getSrcElementByEvent(e);
  9044. if (src.out)
  9045. {
  9046. if (g.editor.editing && !$.ligerui.win.masking) g.endEdit();
  9047. if (p.allowHideColumn) g.popup.hide();
  9048. return;
  9049. }
  9050. if (src.indetail || src.editing)
  9051. {
  9052. return;
  9053. }
  9054. if (g.editor.editing)
  9055. {
  9056. g.endEdit();
  9057. }
  9058. if (p.allowHideColumn)
  9059. {
  9060. if (!src.popup)
  9061. {
  9062. g.popup.hide();
  9063. }
  9064. }
  9065. if (src.checkboxall) //复选框全选
  9066. {
  9067. var row = $(src.hrow);
  9068. var uncheck = row.hasClass("l-checked");
  9069. if (g.trigger('beforeCheckAllRow', [!uncheck, g.element]) == false) return false;
  9070. if (uncheck)
  9071. {
  9072. row.removeClass("l-checked");
  9073. }
  9074. else
  9075. {
  9076. row.addClass("l-checked");
  9077. }
  9078. g.selected = [];
  9079. for (var rowid in g.records)
  9080. {
  9081. if (uncheck)
  9082. g.unselect(g.records[rowid]);
  9083. else
  9084. g.select(g.records[rowid]);
  9085. }
  9086. g.trigger('checkAllRow', [!uncheck, g.element]);
  9087. }
  9088. else if (src.hcelltext) //排序
  9089. {
  9090. var hcell = $(src.hcelltext).parent().parent();
  9091. if (!p.enabledSort || !src.column) return;
  9092. if (src.column.isSort == false) return;
  9093. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged)) return;
  9094. var sort = $(".l-grid-hd-cell-sort:first", hcell);
  9095. var columnName = src.column.name;
  9096. if (!columnName) return;
  9097. if (sort.length > 0)
  9098. {
  9099. if (sort.hasClass("l-grid-hd-cell-sort-asc"))
  9100. {
  9101. sort.removeClass("l-grid-hd-cell-sort-asc").addClass("l-grid-hd-cell-sort-desc");
  9102. hcell.removeClass("l-grid-hd-cell-asc").addClass("l-grid-hd-cell-desc");
  9103. g.changeSort(columnName, 'desc');
  9104. }
  9105. else if (sort.hasClass("l-grid-hd-cell-sort-desc"))
  9106. {
  9107. sort.removeClass("l-grid-hd-cell-sort-desc").addClass("l-grid-hd-cell-sort-asc");
  9108. hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
  9109. g.changeSort(columnName, 'asc');
  9110. }
  9111. }
  9112. else
  9113. {
  9114. hcell.removeClass("l-grid-hd-cell-desc").addClass("l-grid-hd-cell-asc");
  9115. $(src.hcelltext).after("<span class='l-grid-hd-cell-sort l-grid-hd-cell-sort-asc'>&nbsp;&nbsp;</span>");
  9116. g.changeSort(columnName, 'asc');
  9117. }
  9118. $(".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();
  9119. }
  9120. //明细
  9121. else if (src.detailbtn && p.detail)
  9122. {
  9123. var item = src.data;
  9124. var row = $([g.getRowObj(item, false)]);
  9125. if (g.enabledFrozen()) row = row.add(g.getRowObj(item, true));
  9126. var rowid = item['__id'];
  9127. if ($(src.detailbtn).hasClass("l-open"))
  9128. {
  9129. if (p.detail.onCollapse)
  9130. p.detail.onCollapse(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
  9131. row.next("tr.l-grid-detailpanel").hide();
  9132. $(src.detailbtn).removeClass("l-open");
  9133. }
  9134. else
  9135. {
  9136. var nextrow = row.next("tr.l-grid-detailpanel");
  9137. if (nextrow.length > 0)
  9138. {
  9139. nextrow.show();
  9140. if (p.detail.onExtend)
  9141. p.detail.onExtend(item, $(".l-grid-detailpanel-inner:first", nextrow)[0]);
  9142. $(src.detailbtn).addClass("l-open");
  9143. g.trigger('SysGridHeightChanged');
  9144. return;
  9145. }
  9146. $(src.detailbtn).addClass("l-open");
  9147. var frozenColNum = 0;
  9148. for (var i = 0; i < g.columns.length; i++)
  9149. if (g.columns[i].frozen) frozenColNum++;
  9150. var detailRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
  9151. var detailFrozenRow = $("<tr class='l-grid-detailpanel'><td><div class='l-grid-detailpanel-inner' style='display:none'></div></td></tr>");
  9152. detailRow.attr("id", g.id + "|detail|" + rowid);
  9153. g.detailrows = g.detailrows || [];
  9154. g.detailrows.push(detailRow[0]);
  9155. g.detailrows.push(detailFrozenRow[0]);
  9156. var detailRowInner = $("div:first", detailRow);
  9157. detailRowInner.parent().attr("colSpan", g.columns.length - frozenColNum);
  9158. row.eq(0).after(detailRow);
  9159. if (frozenColNum > 0)
  9160. {
  9161. detailFrozenRow.find("td:first").attr("colSpan", frozenColNum);
  9162. row.eq(1).after(detailFrozenRow);
  9163. }
  9164. if (p.detail.onShowDetail)
  9165. {
  9166. p.detail.onShowDetail(item, detailRowInner[0], function ()
  9167. {
  9168. g.trigger('SysGridHeightChanged');
  9169. });
  9170. $("div:first", detailFrozenRow).add(detailRowInner).show().height(p.detail.height || p.detailHeight);
  9171. }
  9172. else if (p.detail.render)
  9173. {
  9174. detailRowInner.append(p.detail.render());
  9175. detailRowInner.show();
  9176. }
  9177. g.trigger('SysGridHeightChanged');
  9178. }
  9179. }
  9180. else if (src.groupbtn)
  9181. {
  9182. var grouprow = $(src.grouprow);
  9183. var opening = true;
  9184. if ($(src.groupbtn).hasClass("l-grid-group-togglebtn-close"))
  9185. {
  9186. $(src.groupbtn).removeClass("l-grid-group-togglebtn-close");
  9187. if (grouprow.hasClass("l-grid-grouprow-last"))
  9188. {
  9189. $("td:first", grouprow).width('auto');
  9190. }
  9191. }
  9192. else
  9193. {
  9194. opening = false;
  9195. $(src.groupbtn).addClass("l-grid-group-togglebtn-close");
  9196. if (grouprow.hasClass("l-grid-grouprow-last"))
  9197. {
  9198. $("td:first", grouprow).width(g.gridtablewidth);
  9199. }
  9200. }
  9201. var currentRow = grouprow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
  9202. while (true)
  9203. {
  9204. if (currentRow.length == 0) break;
  9205. if (opening)
  9206. {
  9207. currentRow.show();
  9208. //如果是明细展开的行,并且之前的状态已经是关闭的,隐藏之
  9209. 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"))
  9210. {
  9211. currentRow.hide();
  9212. }
  9213. }
  9214. else
  9215. {
  9216. currentRow.hide();
  9217. }
  9218. currentRow = currentRow.next(".l-grid-row,.l-grid-totalsummary-group,.l-grid-detailpanel");
  9219. }
  9220. g.trigger('SysGridHeightChanged');
  9221. }
  9222. //树 - 伸展/收缩节点
  9223. else if (src.treelink)
  9224. {
  9225. g.toggle(src.data);
  9226. }
  9227. else if (src.row && g.enabledCheckbox()) //复选框选择行
  9228. {
  9229. //复选框
  9230. var selectRowButtonOnly = p.selectRowButtonOnly ? true : false;
  9231. if (p.enabledEdit) selectRowButtonOnly = true;
  9232. if (src.checkbox || !selectRowButtonOnly)
  9233. {
  9234. var row = $(src.row);
  9235. var uncheck = row.hasClass("l-selected");
  9236. if (g.trigger('beforeCheckRow', [!uncheck, src.data, src.data['__id'], src.row]) == false)
  9237. return false;
  9238. var met = uncheck ? 'unselect' : 'select';
  9239. g[met](src.data);
  9240. if (p.tree && p.autoCheckChildren)
  9241. {
  9242. var children = g.getChildren(src.data, true);
  9243. for (var i = 0, l = children.length; i < l; i++)
  9244. {
  9245. g[met](children[i]);
  9246. }
  9247. }
  9248. g.trigger('checkRow', [!uncheck, src.data, src.data['__id'], src.row]);
  9249. }
  9250. if (!src.checkbox && src.cell && p.enabledEdit && p.clickToEdit)
  9251. {
  9252. g._applyEditor(src.cell);
  9253. }
  9254. }
  9255. else if (src.row && !g.enabledCheckbox())
  9256. {
  9257. if (src.cell && p.enabledEdit && p.clickToEdit)
  9258. {
  9259. g._applyEditor(src.cell);
  9260. }
  9261. //选择行
  9262. if ($(src.row).hasClass("l-selected"))
  9263. {
  9264. if (!p.allowUnSelectRow)
  9265. {
  9266. $(src.row).addClass("l-selected-again");
  9267. return;
  9268. }
  9269. g.unselect(src.data);
  9270. }
  9271. else
  9272. {
  9273. g.select(src.data);
  9274. }
  9275. }
  9276. else if (src.toolbar)
  9277. {
  9278. if (src.first)
  9279. {
  9280. if (g.trigger('toFirst', [g.element]) == false) return false;
  9281. g.changePage('first');
  9282. }
  9283. else if (src.prev)
  9284. {
  9285. if (g.trigger('toPrev', [g.element]) == false) return false;
  9286. g.changePage('prev');
  9287. }
  9288. else if (src.next)
  9289. {
  9290. if (g.trigger('toNext', [g.element]) == false) return false;
  9291. g.changePage('next');
  9292. }
  9293. else if (src.last)
  9294. {
  9295. if (g.trigger('toLast', [g.element]) == false) return false;
  9296. g.changePage('last');
  9297. }
  9298. else if (src.load)
  9299. {
  9300. if ($("span", src.load).hasClass("l-disabled")) return false;
  9301. if (g.trigger('reload', [g.element]) == false) return false;
  9302. if (p.url && g.isDataChanged && !confirm(p.isContinueByDataChanged))
  9303. return false;
  9304. g.loadData(p.where);
  9305. }
  9306. }
  9307. },
  9308. select: function (rowParm)
  9309. {
  9310. var g = this, p = this.options;
  9311. var rowdata = g.getRow(rowParm);
  9312. var rowid = rowdata['__id'];
  9313. var rowobj = g.getRowObj(rowid);
  9314. var rowobj1 = g.getRowObj(rowid, true);
  9315. if (!g.enabledCheckbox() && !g.ctrlKey) //单选
  9316. {
  9317. for (var i in g.selected)
  9318. {
  9319. var o = g.selected[i];
  9320. if (o['__id'] in g.records)
  9321. {
  9322. $(g.getRowObj(o)).removeClass("l-selected l-selected-again");
  9323. if (g.enabledFrozen())
  9324. $(g.getRowObj(o, true)).removeClass("l-selected l-selected-again");
  9325. }
  9326. }
  9327. g.selected = [];
  9328. }
  9329. if (rowobj) $(rowobj).addClass("l-selected");
  9330. if (rowobj1) $(rowobj1).addClass("l-selected");
  9331. g.selected[g.selected.length] = rowdata;
  9332. g.trigger('selectRow', [rowdata, rowid, rowobj]);
  9333. },
  9334. unselect: function (rowParm)
  9335. {
  9336. var g = this, p = this.options;
  9337. var rowdata = g.getRow(rowParm);
  9338. var rowid = rowdata['__id'];
  9339. var rowobj = g.getRowObj(rowid);
  9340. var rowobj1 = g.getRowObj(rowid, true);
  9341. $(rowobj).removeClass("l-selected l-selected-again");
  9342. if (g.enabledFrozen())
  9343. $(rowobj1).removeClass("l-selected l-selected-again");
  9344. g._removeSelected(rowdata);
  9345. g.trigger('unSelectRow', [rowdata, rowid, rowobj]);
  9346. },
  9347. isSelected: function (rowParm)
  9348. {
  9349. var g = this, p = this.options;
  9350. var rowdata = g.getRow(rowParm);
  9351. for (var i in g.selected)
  9352. {
  9353. if (g.selected[i] == rowdata) return true;
  9354. }
  9355. return false;
  9356. },
  9357. _onResize: function ()
  9358. {
  9359. var g = this, p = this.options;
  9360. if (p.height && p.height != 'auto')
  9361. {
  9362. var windowHeight = $(window).height();
  9363. //if(g.windowHeight != undefined && g.windowHeight == windowHeight) return;
  9364. var h = 0;
  9365. var parentHeight = null;
  9366. if (typeof (p.height) == "string" && p.height.indexOf('%') > 0)
  9367. {
  9368. var gridparent = g.grid.parent();
  9369. if (p.InWindow)
  9370. {
  9371. parentHeight = windowHeight;
  9372. parentHeight -= parseInt($('body').css('paddingTop'));
  9373. parentHeight -= parseInt($('body').css('paddingBottom'));
  9374. }
  9375. else
  9376. {
  9377. parentHeight = gridparent.height();
  9378. }
  9379. h = parentHeight * parseFloat(p.height) * 0.01;
  9380. if (p.InWindow || gridparent[0].tagName.toLowerCase() == "body")
  9381. h -= (g.grid.offset().top - parseInt($('body').css('paddingTop')));
  9382. }
  9383. else
  9384. {
  9385. h = parseInt(p.height);
  9386. }
  9387. h += p.heightDiff;
  9388. g.windowHeight = windowHeight;
  9389. g._setHeight(h);
  9390. }
  9391. if (g.enabledFrozen())
  9392. {
  9393. var gridView1Width = g.gridview1.width();
  9394. var gridViewWidth = g.gridview.width()
  9395. g.gridview2.css({
  9396. width: gridViewWidth - gridView1Width
  9397. });
  9398. }
  9399. g.trigger('SysGridHeightChanged');
  9400. }
  9401. });
  9402. $.ligerui.controls.Grid.prototype.enabledTotal = $.ligerui.controls.Grid.prototype.isTotalSummary;
  9403. $.ligerui.controls.Grid.prototype.add = $.ligerui.controls.Grid.prototype.addRow;
  9404. $.ligerui.controls.Grid.prototype.update = $.ligerui.controls.Grid.prototype.updateRow;
  9405. $.ligerui.controls.Grid.prototype.append = $.ligerui.controls.Grid.prototype.appendRow;
  9406. $.ligerui.controls.Grid.prototype.getSelected = $.ligerui.controls.Grid.prototype.getSelectedRow;
  9407. $.ligerui.controls.Grid.prototype.getSelecteds = $.ligerui.controls.Grid.prototype.getSelectedRows;
  9408. $.ligerui.controls.Grid.prototype.getCheckedRows = $.ligerui.controls.Grid.prototype.getSelectedRows;
  9409. $.ligerui.controls.Grid.prototype.getCheckedRowObjs = $.ligerui.controls.Grid.prototype.getSelectedRowObjs;
  9410. $.ligerui.controls.Grid.prototype.setOptions = $.ligerui.controls.Grid.prototype.set;
  9411. })(jQuery);/**
  9412. * jQuery ligerUI 1.1.9
  9413. *
  9414. * http://ligerui.com
  9415. *
  9416. * Author daomi 2012 [ gd_star@163.com ]
  9417. *
  9418. */
  9419. (function ($)
  9420. {
  9421. $.fn.ligerLayout = function (options)
  9422. {
  9423. return $.ligerui.run.call(this, "ligerLayout", arguments);
  9424. };
  9425. $.fn.ligerGetLayoutManager = function ()
  9426. {
  9427. return $.ligerui.run.call(this, "ligerGetLayoutManager", arguments);
  9428. };
  9429. $.ligerDefaults.Layout = {
  9430. topHeight: 50,
  9431. bottomHeight: 50,
  9432. leftWidth: 110,
  9433. centerWidth: 300,
  9434. rightWidth: 170,
  9435. InWindow: true, //是否以窗口的高度为准 height设置为百分比时可用
  9436. heightDiff: 0, //高度补差
  9437. height: '100%', //高度
  9438. onHeightChanged: null,
  9439. isLeftCollapse: false, //初始化时 左边是否隐藏
  9440. isRightCollapse: false, //初始化时 右边是否隐藏
  9441. allowLeftCollapse: true, //是否允许 左边可以隐藏
  9442. allowRightCollapse: true, //是否允许 右边可以隐藏
  9443. allowLeftResize: true, //是否允许 左边可以调整大小
  9444. allowRightResize: true, //是否允许 右边可以调整大小
  9445. allowTopResize: true, //是否允许 头部可以调整大小
  9446. allowBottomResize: true, //是否允许 底部可以调整大小
  9447. space: 3, //间隔
  9448. onEndResize: null, //调整大小结束事件
  9449. minLeftWidth: 80, //调整左侧宽度时的最小允许宽度
  9450. minRightWidth: 80 //调整右侧宽度时的最小允许宽度
  9451. };
  9452. $.ligerMethos.Layout = {};
  9453. $.ligerui.controls.Layout = function (element, options)
  9454. {
  9455. $.ligerui.controls.Layout.base.constructor.call(this, element, options);
  9456. };
  9457. $.ligerui.controls.Layout.ligerExtend($.ligerui.core.UIComponent, {
  9458. __getType: function ()
  9459. {
  9460. return 'Layout';
  9461. },
  9462. __idPrev: function ()
  9463. {
  9464. return 'Layout';
  9465. },
  9466. _extendMethods: function ()
  9467. {
  9468. return $.ligerMethos.Layout;
  9469. },
  9470. _render: function ()
  9471. {
  9472. var g = this, p = this.options;
  9473. g.layout = $(this.element);
  9474. g.layout.addClass("l-layout");
  9475. g.width = g.layout.width();
  9476. //top
  9477. if ($("> div[position=top]", g.layout).length > 0)
  9478. {
  9479. g.top = $("> div[position=top]", g.layout).wrap('<div class="l-layout-top" style="top:0px;"></div>').parent();
  9480. g.top.content = $("> div[position=top]", g.top);
  9481. if (!g.top.content.hasClass("l-layout-content"))
  9482. g.top.content.addClass("l-layout-content");
  9483. g.topHeight = p.topHeight;
  9484. if (g.topHeight)
  9485. {
  9486. g.top.height(g.topHeight);
  9487. }
  9488. }
  9489. //bottom
  9490. if ($("> div[position=bottom]", g.layout).length > 0)
  9491. {
  9492. g.bottom = $("> div[position=bottom]", g.layout).wrap('<div class="l-layout-bottom"></div>').parent();
  9493. g.bottom.content = $("> div[position=bottom]", g.bottom);
  9494. if (!g.bottom.content.hasClass("l-layout-content"))
  9495. g.bottom.content.addClass("l-layout-content");
  9496. g.bottomHeight = p.bottomHeight;
  9497. if (g.bottomHeight)
  9498. {
  9499. g.bottom.height(g.bottomHeight);
  9500. }
  9501. //set title
  9502. var bottomtitle = g.bottom.content.attr("title");
  9503. if (bottomtitle)
  9504. {
  9505. g.bottom.header = $('<div class="l-layout-header"></div>');
  9506. g.bottom.prepend(g.bottom.header);
  9507. g.bottom.header.html(bottomtitle);
  9508. g.bottom.content.attr("title", "");
  9509. }
  9510. }
  9511. //left
  9512. if ($("> div[position=left]", g.layout).length > 0)
  9513. {
  9514. g.left = $("> div[position=left]", g.layout).wrap('<div class="l-layout-left" style="left:0px;"></div>').parent();
  9515. g.left.header = $('<div class="l-layout-header"><div class="l-layout-header-toggle"></div><div class="l-layout-header-inner"></div></div>');
  9516. g.left.prepend(g.left.header);
  9517. g.left.header.toggle = $(".l-layout-header-toggle", g.left.header);
  9518. g.left.content = $("> div[position=left]", g.left);
  9519. if (!g.left.content.hasClass("l-layout-content"))
  9520. g.left.content.addClass("l-layout-content");
  9521. if (!p.allowLeftCollapse) $(".l-layout-header-toggle", g.left.header).remove();
  9522. //set title
  9523. var lefttitle = g.left.content.attr("title");
  9524. if (lefttitle)
  9525. {
  9526. g.left.content.attr("title", "");
  9527. $(".l-layout-header-inner", g.left.header).html(lefttitle);
  9528. }
  9529. //set width
  9530. g.leftWidth = p.leftWidth;
  9531. if (g.leftWidth)
  9532. g.left.width(g.leftWidth);
  9533. }
  9534. //center
  9535. if ($("> div[position=center]", g.layout).length > 0)
  9536. {
  9537. g.center = $("> div[position=center]", g.layout).wrap('<div class="l-layout-center" ></div>').parent();
  9538. g.center.content = $("> div[position=center]", g.center);
  9539. g.center.content.addClass("l-layout-content");
  9540. //set title
  9541. var centertitle = g.center.content.attr("title");
  9542. if (centertitle)
  9543. {
  9544. g.center.content.attr("title", "");
  9545. g.center.header = $('<div class="l-layout-header"></div>');
  9546. g.center.prepend(g.center.header);
  9547. g.center.header.html(centertitle);
  9548. }
  9549. //set width
  9550. g.centerWidth = p.centerWidth;
  9551. if (g.centerWidth)
  9552. g.center.width(g.centerWidth);
  9553. }
  9554. //right
  9555. if ($("> div[position=right]", g.layout).length > 0)
  9556. {
  9557. g.right = $("> div[position=right]", g.layout).wrap('<div class="l-layout-right"></div>').parent();
  9558. g.right.header = $('<div class="l-layout-header"><div class="l-layout-header-toggle"></div><div class="l-layout-header-inner"></div></div>');
  9559. g.right.prepend(g.right.header);
  9560. g.right.header.toggle = $(".l-layout-header-toggle", g.right.header);
  9561. if (!p.allowRightCollapse) $(".l-layout-header-toggle", g.right.header).remove();
  9562. g.right.content = $("> div[position=right]", g.right);
  9563. if (!g.right.content.hasClass("l-layout-content"))
  9564. g.right.content.addClass("l-layout-content");
  9565. //set title
  9566. var righttitle = g.right.content.attr("title");
  9567. if (righttitle)
  9568. {
  9569. g.right.content.attr("title", "");
  9570. $(".l-layout-header-inner", g.right.header).html(righttitle);
  9571. }
  9572. //set width
  9573. g.rightWidth = p.rightWidth;
  9574. if (g.rightWidth)
  9575. g.right.width(g.rightWidth);
  9576. }
  9577. //lock
  9578. g.layout.lock = $("<div class='l-layout-lock'></div>");
  9579. g.layout.append(g.layout.lock);
  9580. //DropHandle
  9581. g._addDropHandle();
  9582. //Collapse
  9583. g.isLeftCollapse = p.isLeftCollapse;
  9584. g.isRightCollapse = p.isRightCollapse;
  9585. g.leftCollapse = $('<div class="l-layout-collapse-left" style="display: none; "><div class="l-layout-collapse-left-toggle"></div></div>');
  9586. g.rightCollapse = $('<div class="l-layout-collapse-right" style="display: none; "><div class="l-layout-collapse-right-toggle"></div></div>');
  9587. g.layout.append(g.leftCollapse).append(g.rightCollapse);
  9588. g.leftCollapse.toggle = $("> .l-layout-collapse-left-toggle", g.leftCollapse);
  9589. g.rightCollapse.toggle = $("> .l-layout-collapse-right-toggle", g.rightCollapse);
  9590. g._setCollapse();
  9591. //init
  9592. g._bulid();
  9593. $(window).resize(function ()
  9594. {
  9595. g._onResize();
  9596. });
  9597. g.set(p);
  9598. },
  9599. setLeftCollapse: function (isCollapse)
  9600. {
  9601. var g = this, p = this.options;
  9602. if (!g.left) return false;
  9603. g.isLeftCollapse = isCollapse;
  9604. if (g.isLeftCollapse)
  9605. {
  9606. g.leftCollapse.show();
  9607. g.leftDropHandle && g.leftDropHandle.hide();
  9608. g.left.hide();
  9609. }
  9610. else
  9611. {
  9612. g.leftCollapse.hide();
  9613. g.leftDropHandle && g.leftDropHandle.show();
  9614. g.left.show();
  9615. }
  9616. g._onResize();
  9617. },
  9618. setRightCollapse: function (isCollapse)
  9619. {
  9620. var g = this, p = this.options;
  9621. if (!g.right) return false;
  9622. g.isRightCollapse = isCollapse;
  9623. g._onResize();
  9624. if (g.isRightCollapse)
  9625. {
  9626. g.rightCollapse.show();
  9627. g.rightDropHandle && g.rightDropHandle.hide();
  9628. g.right.hide();
  9629. }
  9630. else
  9631. {
  9632. g.rightCollapse.hide();
  9633. g.rightDropHandle && g.rightDropHandle.show();
  9634. g.right.show();
  9635. }
  9636. g._onResize();
  9637. },
  9638. _bulid: function ()
  9639. {
  9640. var g = this, p = this.options;
  9641. $("> .l-layout-left .l-layout-header,> .l-layout-right .l-layout-header", g.layout).hover(function ()
  9642. {
  9643. $(this).addClass("l-layout-header-over");
  9644. }, function ()
  9645. {
  9646. $(this).removeClass("l-layout-header-over");
  9647. });
  9648. $(".l-layout-header-toggle", g.layout).hover(function ()
  9649. {
  9650. $(this).addClass("l-layout-header-toggle-over");
  9651. }, function ()
  9652. {
  9653. $(this).removeClass("l-layout-header-toggle-over");
  9654. });
  9655. $(".l-layout-header-toggle", g.left).click(function ()
  9656. {
  9657. g.setLeftCollapse(true);
  9658. });
  9659. $(".l-layout-header-toggle", g.right).click(function ()
  9660. {
  9661. g.setRightCollapse(true);
  9662. });
  9663. //set top
  9664. g.middleTop = 0;
  9665. if (g.top)
  9666. {
  9667. g.middleTop += g.top.height();
  9668. g.middleTop += parseInt(g.top.css('borderTopWidth'));
  9669. g.middleTop += parseInt(g.top.css('borderBottomWidth'));
  9670. g.middleTop += p.space;
  9671. }
  9672. if (g.left)
  9673. {
  9674. g.left.css({ top: g.middleTop });
  9675. g.leftCollapse.css({ top: g.middleTop });
  9676. }
  9677. if (g.center) g.center.css({ top: g.middleTop });
  9678. if (g.right)
  9679. {
  9680. g.right.css({ top: g.middleTop });
  9681. g.rightCollapse.css({ top: g.middleTop });
  9682. }
  9683. //set left
  9684. if (g.left) g.left.css({ left: 0 });
  9685. g._onResize();
  9686. g._onResize();
  9687. },
  9688. _setCollapse: function ()
  9689. {
  9690. var g = this, p = this.options;
  9691. g.leftCollapse.hover(function ()
  9692. {
  9693. $(this).addClass("l-layout-collapse-left-over");
  9694. }, function ()
  9695. {
  9696. $(this).removeClass("l-layout-collapse-left-over");
  9697. });
  9698. g.leftCollapse.toggle.hover(function ()
  9699. {
  9700. $(this).addClass("l-layout-collapse-left-toggle-over");
  9701. }, function ()
  9702. {
  9703. $(this).removeClass("l-layout-collapse-left-toggle-over");
  9704. });
  9705. g.rightCollapse.hover(function ()
  9706. {
  9707. $(this).addClass("l-layout-collapse-right-over");
  9708. }, function ()
  9709. {
  9710. $(this).removeClass("l-layout-collapse-right-over");
  9711. });
  9712. g.rightCollapse.toggle.hover(function ()
  9713. {
  9714. $(this).addClass("l-layout-collapse-right-toggle-over");
  9715. }, function ()
  9716. {
  9717. $(this).removeClass("l-layout-collapse-right-toggle-over");
  9718. });
  9719. g.leftCollapse.toggle.click(function ()
  9720. {
  9721. g.setLeftCollapse(false);
  9722. });
  9723. g.rightCollapse.toggle.click(function ()
  9724. {
  9725. g.setRightCollapse(false);
  9726. });
  9727. if (g.left && g.isLeftCollapse)
  9728. {
  9729. g.leftCollapse.show();
  9730. g.leftDropHandle && g.leftDropHandle.hide();
  9731. g.left.hide();
  9732. }
  9733. if (g.right && g.isRightCollapse)
  9734. {
  9735. g.rightCollapse.show();
  9736. g.rightDropHandle && g.rightDropHandle.hide();
  9737. g.right.hide();
  9738. }
  9739. },
  9740. _addDropHandle: function ()
  9741. {
  9742. var g = this, p = this.options;
  9743. if (g.left && p.allowLeftResize)
  9744. {
  9745. g.leftDropHandle = $("<div class='l-layout-drophandle-left'></div>");
  9746. g.layout.append(g.leftDropHandle);
  9747. g.leftDropHandle && g.leftDropHandle.show();
  9748. g.leftDropHandle.mousedown(function (e)
  9749. {
  9750. g._start('leftresize', e);
  9751. });
  9752. }
  9753. if (g.right && p.allowRightResize)
  9754. {
  9755. g.rightDropHandle = $("<div class='l-layout-drophandle-right'></div>");
  9756. g.layout.append(g.rightDropHandle);
  9757. g.rightDropHandle && g.rightDropHandle.show();
  9758. g.rightDropHandle.mousedown(function (e)
  9759. {
  9760. g._start('rightresize', e);
  9761. });
  9762. }
  9763. if (g.top && p.allowTopResize)
  9764. {
  9765. g.topDropHandle = $("<div class='l-layout-drophandle-top'></div>");
  9766. g.layout.append(g.topDropHandle);
  9767. g.topDropHandle.show();
  9768. g.topDropHandle.mousedown(function (e)
  9769. {
  9770. g._start('topresize', e);
  9771. });
  9772. }
  9773. if (g.bottom && p.allowBottomResize)
  9774. {
  9775. g.bottomDropHandle = $("<div class='l-layout-drophandle-bottom'></div>");
  9776. g.layout.append(g.bottomDropHandle);
  9777. g.bottomDropHandle.show();
  9778. g.bottomDropHandle.mousedown(function (e)
  9779. {
  9780. g._start('bottomresize', e);
  9781. });
  9782. }
  9783. g.draggingxline = $("<div class='l-layout-dragging-xline'></div>");
  9784. g.draggingyline = $("<div class='l-layout-dragging-yline'></div>");
  9785. g.layout.append(g.draggingxline).append(g.draggingyline);
  9786. },
  9787. _setDropHandlePosition: function ()
  9788. {
  9789. var g = this, p = this.options;
  9790. if (g.leftDropHandle)
  9791. {
  9792. g.leftDropHandle.css({ left: g.left.width() + parseInt(g.left.css('left')), height: g.middleHeight, top: g.middleTop });
  9793. }
  9794. if (g.rightDropHandle)
  9795. {
  9796. g.rightDropHandle.css({ left: parseInt(g.right.css('left')) - p.space, height: g.middleHeight, top: g.middleTop });
  9797. }
  9798. if (g.topDropHandle)
  9799. {
  9800. g.topDropHandle.css({ top: g.top.height() + parseInt(g.top.css('top')), width: g.top.width() });
  9801. }
  9802. if (g.bottomDropHandle)
  9803. {
  9804. g.bottomDropHandle.css({ top: parseInt(g.bottom.css('top')) - p.space, width: g.bottom.width() });
  9805. }
  9806. },
  9807. _onResize: function ()
  9808. {
  9809. var g = this, p = this.options;
  9810. var oldheight = g.layout.height();
  9811. //set layout height
  9812. var h = 0;
  9813. var windowHeight = $(window).height();
  9814. var parentHeight = null;
  9815. if (typeof (p.height) == "string" && p.height.indexOf('%') > 0)
  9816. {
  9817. var layoutparent = g.layout.parent();
  9818. if (p.InWindow || layoutparent[0].tagName.toLowerCase() == "body")
  9819. {
  9820. parentHeight = windowHeight;
  9821. parentHeight -= parseInt($('body').css('paddingTop'));
  9822. parentHeight -= parseInt($('body').css('paddingBottom'));
  9823. }
  9824. else
  9825. {
  9826. parentHeight = layoutparent.height();
  9827. }
  9828. h = parentHeight * parseFloat(p.height) * 0.01;
  9829. if (p.InWindow || layoutparent[0].tagName.toLowerCase() == "body")
  9830. h -= (g.layout.offset().top - parseInt($('body').css('paddingTop')));
  9831. }
  9832. else
  9833. {
  9834. h = parseInt(p.height);
  9835. }
  9836. h += p.heightDiff;
  9837. g.layout.height(h);
  9838. g.layoutHeight = g.layout.height();
  9839. g.middleWidth = g.layout.width();
  9840. g.middleHeight = g.layout.height();
  9841. if (g.top)
  9842. {
  9843. g.middleHeight -= g.top.height();
  9844. g.middleHeight -= parseInt(g.top.css('borderTopWidth'));
  9845. g.middleHeight -= parseInt(g.top.css('borderBottomWidth'));
  9846. g.middleHeight -= p.space;
  9847. }
  9848. if (g.bottom)
  9849. {
  9850. g.middleHeight -= g.bottom.height();
  9851. g.middleHeight -= parseInt(g.bottom.css('borderTopWidth'));
  9852. g.middleHeight -= parseInt(g.bottom.css('borderBottomWidth'));
  9853. g.middleHeight -= p.space;
  9854. }
  9855. //specific
  9856. g.middleHeight -= 2;
  9857. if (g.hasBind('heightChanged') && g.layoutHeight != oldheight)
  9858. {
  9859. g.trigger('heightChanged', [{ layoutHeight: g.layoutHeight, diff: g.layoutHeight - oldheight, middleHeight: g.middleHeight}]);
  9860. }
  9861. if (g.center)
  9862. {
  9863. g.centerWidth = g.middleWidth;
  9864. if (g.left)
  9865. {
  9866. if (g.isLeftCollapse)
  9867. {
  9868. g.centerWidth -= g.leftCollapse.width();
  9869. g.centerWidth -= parseInt(g.leftCollapse.css('borderLeftWidth'));
  9870. g.centerWidth -= parseInt(g.leftCollapse.css('borderRightWidth'));
  9871. g.centerWidth -= parseInt(g.leftCollapse.css('left'));
  9872. g.centerWidth -= p.space;
  9873. }
  9874. else
  9875. {
  9876. g.centerWidth -= g.leftWidth;
  9877. g.centerWidth -= parseInt(g.left.css('borderLeftWidth'));
  9878. g.centerWidth -= parseInt(g.left.css('borderRightWidth'));
  9879. g.centerWidth -= parseInt(g.left.css('left'));
  9880. g.centerWidth -= p.space;
  9881. }
  9882. }
  9883. if (g.right)
  9884. {
  9885. if (g.isRightCollapse)
  9886. {
  9887. g.centerWidth -= g.rightCollapse.width();
  9888. g.centerWidth -= parseInt(g.rightCollapse.css('borderLeftWidth'));
  9889. g.centerWidth -= parseInt(g.rightCollapse.css('borderRightWidth'));
  9890. g.centerWidth -= parseInt(g.rightCollapse.css('right'));
  9891. g.centerWidth -= p.space;
  9892. }
  9893. else
  9894. {
  9895. g.centerWidth -= g.rightWidth;
  9896. g.centerWidth -= parseInt(g.right.css('borderLeftWidth'));
  9897. g.centerWidth -= parseInt(g.right.css('borderRightWidth'));
  9898. g.centerWidth -= p.space;
  9899. }
  9900. }
  9901. g.centerLeft = 0;
  9902. if (g.left)
  9903. {
  9904. if (g.isLeftCollapse)
  9905. {
  9906. g.centerLeft += g.leftCollapse.width();
  9907. g.centerLeft += parseInt(g.leftCollapse.css('borderLeftWidth'));
  9908. g.centerLeft += parseInt(g.leftCollapse.css('borderRightWidth'));
  9909. g.centerLeft += parseInt(g.leftCollapse.css('left'));
  9910. g.centerLeft += p.space;
  9911. }
  9912. else
  9913. {
  9914. g.centerLeft += g.left.width();
  9915. g.centerLeft += parseInt(g.left.css('borderLeftWidth'));
  9916. g.centerLeft += parseInt(g.left.css('borderRightWidth'));
  9917. g.centerLeft += p.space;
  9918. }
  9919. }
  9920. g.center.css({ left: g.centerLeft });
  9921. g.center.width(g.centerWidth);
  9922. g.center.height(g.middleHeight);
  9923. var contentHeight = g.middleHeight;
  9924. if (g.center.header) contentHeight -= g.center.header.height();
  9925. g.center.content.height(contentHeight);
  9926. }
  9927. if (g.left)
  9928. {
  9929. g.leftCollapse.height(g.middleHeight);
  9930. g.left.height(g.middleHeight);
  9931. }
  9932. if (g.right)
  9933. {
  9934. g.rightCollapse.height(g.middleHeight);
  9935. g.right.height(g.middleHeight);
  9936. //set left
  9937. g.rightLeft = 0;
  9938. if (g.left)
  9939. {
  9940. if (g.isLeftCollapse)
  9941. {
  9942. g.rightLeft += g.leftCollapse.width();
  9943. g.rightLeft += parseInt(g.leftCollapse.css('borderLeftWidth'));
  9944. g.rightLeft += parseInt(g.leftCollapse.css('borderRightWidth'));
  9945. g.rightLeft += p.space;
  9946. }
  9947. else
  9948. {
  9949. g.rightLeft += g.left.width();
  9950. g.rightLeft += parseInt(g.left.css('borderLeftWidth'));
  9951. g.rightLeft += parseInt(g.left.css('borderRightWidth'));
  9952. g.rightLeft += parseInt(g.left.css('left'));
  9953. g.rightLeft += p.space;
  9954. }
  9955. }
  9956. if (g.center)
  9957. {
  9958. g.rightLeft += g.center.width();
  9959. g.rightLeft += parseInt(g.center.css('borderLeftWidth'));
  9960. g.rightLeft += parseInt(g.center.css('borderRightWidth'));
  9961. g.rightLeft += p.space;
  9962. }
  9963. g.right.css({ left: g.rightLeft });
  9964. }
  9965. if (g.bottom)
  9966. {
  9967. g.bottomTop = g.layoutHeight - g.bottom.height() - 2;
  9968. g.bottom.css({ top: g.bottomTop });
  9969. }
  9970. g._setDropHandlePosition();
  9971. },
  9972. _start: function (dragtype, e)
  9973. {
  9974. var g = this, p = this.options;
  9975. g.dragtype = dragtype;
  9976. if (dragtype == 'leftresize' || dragtype == 'rightresize')
  9977. {
  9978. g.xresize = { startX: e.pageX };
  9979. g.draggingyline.css({ left: e.pageX - g.layout.offset().left, height: g.middleHeight, top: g.middleTop }).show();
  9980. $('body').css('cursor', 'col-resize');
  9981. }
  9982. else if (dragtype == 'topresize' || dragtype == 'bottomresize')
  9983. {
  9984. g.yresize = { startY: e.pageY };
  9985. g.draggingxline.css({ top: e.pageY - g.layout.offset().top, width: g.layout.width() }).show();
  9986. $('body').css('cursor', 'row-resize');
  9987. }
  9988. else
  9989. {
  9990. return;
  9991. }
  9992. g.layout.lock.width(g.layout.width());
  9993. g.layout.lock.height(g.layout.height());
  9994. g.layout.lock.show();
  9995. if ($.browser.msie || $.browser.safari) $('body').bind('selectstart', function () { return false; }); // 不能选择
  9996. $(document).bind('mouseup', function ()
  9997. {
  9998. g._stop.apply(g, arguments);
  9999. });
  10000. $(document).bind('mousemove', function ()
  10001. {
  10002. g._drag.apply(g, arguments);
  10003. });
  10004. },
  10005. _drag: function (e)
  10006. {
  10007. var g = this, p = this.options;
  10008. if (g.xresize)
  10009. {
  10010. g.xresize.diff = e.pageX - g.xresize.startX;
  10011. g.draggingyline.css({ left: e.pageX - g.layout.offset().left });
  10012. $('body').css('cursor', 'col-resize');
  10013. }
  10014. else if (g.yresize)
  10015. {
  10016. g.yresize.diff = e.pageY - g.yresize.startY;
  10017. g.draggingxline.css({ top: e.pageY - g.layout.offset().top });
  10018. $('body').css('cursor', 'row-resize');
  10019. }
  10020. },
  10021. _stop: function (e)
  10022. {
  10023. var g = this, p = this.options;
  10024. var diff;
  10025. if (g.xresize && g.xresize.diff != undefined)
  10026. {
  10027. diff = g.xresize.diff;
  10028. if (g.dragtype == 'leftresize')
  10029. {
  10030. if (p.minLeftWidth)
  10031. {
  10032. if (g.leftWidth + g.xresize.diff < p.minLeftWidth)
  10033. return;
  10034. }
  10035. g.leftWidth += g.xresize.diff;
  10036. g.left.width(g.leftWidth);
  10037. if (g.center)
  10038. g.center.width(g.center.width() - g.xresize.diff).css({ left: parseInt(g.center.css('left')) + g.xresize.diff });
  10039. else if (g.right)
  10040. g.right.width(g.left.width() - g.xresize.diff).css({ left: parseInt(g.right.css('left')) + g.xresize.diff });
  10041. }
  10042. else if (g.dragtype == 'rightresize')
  10043. {
  10044. if (p.minRightWidth)
  10045. {
  10046. if (g.rightWidth - g.xresize.diff < p.minRightWidth)
  10047. return;
  10048. }
  10049. g.rightWidth -= g.xresize.diff;
  10050. g.right.width(g.rightWidth).css({ left: parseInt(g.right.css('left')) + g.xresize.diff });
  10051. if (g.center)
  10052. g.center.width(g.center.width() + g.xresize.diff);
  10053. else if (g.left)
  10054. g.left.width(g.left.width() + g.xresize.diff);
  10055. }
  10056. }
  10057. else if (g.yresize && g.yresize.diff != undefined)
  10058. {
  10059. diff = g.yresize.diff;
  10060. if (g.dragtype == 'topresize')
  10061. {
  10062. g.top.height(g.top.height() + g.yresize.diff);
  10063. g.middleTop += g.yresize.diff;
  10064. g.middleHeight -= g.yresize.diff;
  10065. if (g.left)
  10066. {
  10067. g.left.css({ top: g.middleTop }).height(g.middleHeight);
  10068. g.leftCollapse.css({ top: g.middleTop }).height(g.middleHeight);
  10069. }
  10070. if (g.center) g.center.css({ top: g.middleTop }).height(g.middleHeight);
  10071. if (g.right)
  10072. {
  10073. g.right.css({ top: g.middleTop }).height(g.middleHeight);
  10074. g.rightCollapse.css({ top: g.middleTop }).height(g.middleHeight);
  10075. }
  10076. }
  10077. else if (g.dragtype == 'bottomresize')
  10078. {
  10079. g.bottom.height(g.bottom.height() - g.yresize.diff);
  10080. g.middleHeight += g.yresize.diff;
  10081. g.bottomTop += g.yresize.diff;
  10082. g.bottom.css({ top: g.bottomTop });
  10083. if (g.left)
  10084. {
  10085. g.left.height(g.middleHeight);
  10086. g.leftCollapse.height(g.middleHeight);
  10087. }
  10088. if (g.center) g.center.height(g.middleHeight);
  10089. if (g.right)
  10090. {
  10091. g.right.height(g.middleHeight);
  10092. g.rightCollapse.height(g.middleHeight);
  10093. }
  10094. }
  10095. }
  10096. g.trigger('endResize', [{
  10097. direction: g.dragtype ? g.dragtype.replace(/resize/, '') : '',
  10098. diff: diff
  10099. }, e]);
  10100. g._setDropHandlePosition();
  10101. g.draggingxline.hide();
  10102. g.draggingyline.hide();
  10103. g.xresize = g.yresize = g.dragtype = false;
  10104. g.layout.lock.hide();
  10105. if ($.browser.msie || $.browser.safari)
  10106. $('body').unbind('selectstart');
  10107. $(document).unbind('mousemove', g._drag);
  10108. $(document).unbind('mouseup', g._stop);
  10109. $('body').css('cursor', '');
  10110. }
  10111. });
  10112. })(jQuery);/**
  10113. * jQuery ligerUI 1.1.9
  10114. *
  10115. * http://ligerui.com
  10116. *
  10117. * Author daomi 2012 [ gd_star@163.com ]
  10118. *
  10119. */
  10120. (function ($)
  10121. {
  10122. $.ligerMenu = function (options)
  10123. {
  10124. return $.ligerui.run.call(null, "ligerMenu", arguments);
  10125. };
  10126. $.ligerDefaults.Menu = {
  10127. width: 120,
  10128. top: 0,
  10129. left: 0,
  10130. items: null,
  10131. shadow: true
  10132. };
  10133. $.ligerMethos.Menu = {};
  10134. $.ligerui.controls.Menu = function (options)
  10135. {
  10136. $.ligerui.controls.Menu.base.constructor.call(this, null, options);
  10137. };
  10138. $.ligerui.controls.Menu.ligerExtend($.ligerui.core.UIComponent, {
  10139. __getType: function ()
  10140. {
  10141. return 'Menu';
  10142. },
  10143. __idPrev: function ()
  10144. {
  10145. return 'Menu';
  10146. },
  10147. _extendMethods: function ()
  10148. {
  10149. return $.ligerMethos.Menu;
  10150. },
  10151. _render: function ()
  10152. {
  10153. var g = this, p = this.options;
  10154. g.menuItemCount = 0;
  10155. //全部菜单
  10156. g.menus = {};
  10157. //顶级菜单
  10158. g.menu = g.createMenu();
  10159. g.element = g.menu[0];
  10160. g.menu.css({ top: p.top, left: p.left, width: p.width });
  10161. p.items && $(p.items).each(function (i, item)
  10162. {
  10163. g.addItem(item);
  10164. });
  10165. $(document).bind('click.menu', function ()
  10166. {
  10167. for (var menuid in g.menus)
  10168. {
  10169. var menu = g.menus[menuid];
  10170. if (!menu) return;
  10171. menu.hide();
  10172. if (menu.shadow) menu.shadow.hide();
  10173. }
  10174. });
  10175. g.set(p);
  10176. },
  10177. show: function (options, menu)
  10178. {
  10179. var g = this, p = this.options;
  10180. if (menu == undefined) menu = g.menu;
  10181. if (options && options.left != undefined)
  10182. {
  10183. menu.css({ left: options.left });
  10184. }
  10185. if (options && options.top != undefined)
  10186. {
  10187. menu.css({ top: options.top });
  10188. }
  10189. menu.show();
  10190. g.updateShadow(menu);
  10191. },
  10192. updateShadow: function (menu)
  10193. {
  10194. var g = this, p = this.options;
  10195. if (!p.shadow) return;
  10196. menu.shadow.css({
  10197. left: menu.css('left'),
  10198. top: menu.css('top'),
  10199. width: menu.outerWidth(),
  10200. height: menu.outerHeight()
  10201. });
  10202. if (menu.is(":visible"))
  10203. menu.shadow.show();
  10204. else
  10205. menu.shadow.hide();
  10206. },
  10207. hide: function (menu)
  10208. {
  10209. var g = this, p = this.options;
  10210. if (menu == undefined) menu = g.menu;
  10211. g.hideAllSubMenu(menu);
  10212. menu.hide();
  10213. g.updateShadow(menu);
  10214. },
  10215. toggle: function ()
  10216. {
  10217. var g = this, p = this.options;
  10218. g.menu.toggle();
  10219. g.updateShadow(g.menu);
  10220. },
  10221. removeItem: function (itemid)
  10222. {
  10223. var g = this, p = this.options;
  10224. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).remove();
  10225. },
  10226. setEnabled: function (itemid)
  10227. {
  10228. var g = this, p = this.options;
  10229. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).removeClass("l-menu-item-disable");
  10230. },
  10231. setDisabled: function (itemid)
  10232. {
  10233. var g = this, p = this.options;
  10234. $("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).addClass("l-menu-item-disable");
  10235. },
  10236. isEnable: function (itemid)
  10237. {
  10238. var g = this, p = this.options;
  10239. return !$("> .l-menu-item[menuitemid=" + itemid + "]", g.menu.items).hasClass("l-menu-item-disable");
  10240. },
  10241. getItemCount: function ()
  10242. {
  10243. var g = this, p = this.options;
  10244. return $("> .l-menu-item", g.menu.items).length;
  10245. },
  10246. addItem: function (item, menu)
  10247. {
  10248. var g = this, p = this.options;
  10249. if (!item) return;
  10250. if (menu == undefined) menu = g.menu;
  10251. if (item.line)
  10252. {
  10253. menu.items.append('<div class="l-menu-item-line"></div>');
  10254. return;
  10255. }
  10256. var ditem = $('<div class="l-menu-item"><div class="l-menu-item-text"></div> </div>');
  10257. var itemcount = $("> .l-menu-item", menu.items).length;
  10258. menu.items.append(ditem);
  10259. ditem.attr("ligeruimenutemid", ++g.menuItemCount);
  10260. item.id && ditem.attr("menuitemid", item.id);
  10261. item.text && $(">.l-menu-item-text:first", ditem).html(item.text);
  10262. item.icon && ditem.prepend('<div class="l-menu-item-icon l-icon-' + item.icon + '"></div>');
  10263. if (item.disable || item.disabled)
  10264. ditem.addClass("l-menu-item-disable");
  10265. if (item.children)
  10266. {
  10267. ditem.append('<div class="l-menu-item-arrow"></div>');
  10268. var newmenu = g.createMenu(ditem.attr("ligeruimenutemid"));
  10269. g.menus[ditem.attr("ligeruimenutemid")] = newmenu;
  10270. newmenu.width(p.width);
  10271. newmenu.hover(null, function ()
  10272. {
  10273. if (!newmenu.showedSubMenu)
  10274. g.hide(newmenu);
  10275. });
  10276. $(item.children).each(function ()
  10277. {
  10278. g.addItem(this, newmenu);
  10279. });
  10280. }
  10281. item.click && ditem.click(function ()
  10282. {
  10283. if ($(this).hasClass("l-menu-item-disable")) return;
  10284. item.click(item, itemcount);
  10285. });
  10286. item.dblclick && ditem.dblclick(function ()
  10287. {
  10288. if ($(this).hasClass("l-menu-item-disable")) return;
  10289. item.dblclick(item, itemcount);
  10290. });
  10291. var menuover = $("> .l-menu-over:first", menu);
  10292. ditem.hover(function ()
  10293. {
  10294. if ($(this).hasClass("l-menu-item-disable")) return;
  10295. var itemtop = $(this).offset().top;
  10296. var top = itemtop - menu.offset().top;
  10297. menuover.css({ top: top });
  10298. g.hideAllSubMenu(menu);
  10299. if (item.children)
  10300. {
  10301. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10302. if (!ligeruimenutemid) return;
  10303. if (g.menus[ligeruimenutemid])
  10304. {
  10305. g.show({ top: itemtop, left: $(this).offset().left + $(this).width() - 5 }, g.menus[ligeruimenutemid]);
  10306. menu.showedSubMenu = true;
  10307. }
  10308. }
  10309. }, function ()
  10310. {
  10311. if ($(this).hasClass("l-menu-item-disable")) return;
  10312. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10313. if (item.children)
  10314. {
  10315. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10316. if (!ligeruimenutemid) return;
  10317. };
  10318. });
  10319. },
  10320. hideAllSubMenu: function (menu)
  10321. {
  10322. var g = this, p = this.options;
  10323. if (menu == undefined) menu = g.menu;
  10324. $("> .l-menu-item", menu.items).each(function ()
  10325. {
  10326. if ($("> .l-menu-item-arrow", this).length > 0)
  10327. {
  10328. var ligeruimenutemid = $(this).attr("ligeruimenutemid");
  10329. if (!ligeruimenutemid) return;
  10330. g.menus[ligeruimenutemid] && g.hide(g.menus[ligeruimenutemid]);
  10331. }
  10332. });
  10333. menu.showedSubMenu = false;
  10334. },
  10335. createMenu: function (parentMenuItemID)
  10336. {
  10337. var g = this, p = this.options;
  10338. 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>');
  10339. parentMenuItemID && menu.attr("ligeruiparentmenuitemid", parentMenuItemID);
  10340. menu.items = $("> .l-menu-inner:first", menu);
  10341. menu.appendTo('body');
  10342. if (p.shadow)
  10343. {
  10344. menu.shadow = $('<div class="l-menu-shadow"></div>').insertAfter(menu);
  10345. g.updateShadow(menu);
  10346. }
  10347. menu.hover(null, function ()
  10348. {
  10349. if (!menu.showedSubMenu)
  10350. $("> .l-menu-over:first", menu).css({ top: -24 });
  10351. });
  10352. if (parentMenuItemID)
  10353. g.menus[parentMenuItemID] = menu;
  10354. else
  10355. g.menus[0] = menu;
  10356. return menu;
  10357. }
  10358. });
  10359. //旧写法保留
  10360. $.ligerui.controls.Menu.prototype.setEnable = $.ligerui.controls.Menu.prototype.setEnabled;
  10361. $.ligerui.controls.Menu.prototype.setDisable = $.ligerui.controls.Menu.prototype.setDisabled;
  10362. })(jQuery);/**
  10363. * jQuery ligerUI 1.1.9
  10364. *
  10365. * http://ligerui.com
  10366. *
  10367. * Author daomi 2012 [ gd_star@163.com ]
  10368. *
  10369. */
  10370. (function ($)
  10371. {
  10372. $.fn.ligerMenuBar = function (options)
  10373. {
  10374. return $.ligerui.run.call(this, "ligerMenuBar", arguments);
  10375. };
  10376. $.fn.ligerGetMenuBarManager = function ()
  10377. {
  10378. return $.ligerui.run.call(this, "ligerGetMenuBarManager", arguments);
  10379. };
  10380. $.ligerDefaults.MenuBar = {};
  10381. $.ligerMethos.MenuBar = {};
  10382. $.ligerui.controls.MenuBar = function (element, options)
  10383. {
  10384. $.ligerui.controls.MenuBar.base.constructor.call(this, element, options);
  10385. };
  10386. $.ligerui.controls.MenuBar.ligerExtend($.ligerui.core.UIComponent, {
  10387. __getType: function ()
  10388. {
  10389. return 'MenuBar';
  10390. },
  10391. __idPrev: function ()
  10392. {
  10393. return 'MenuBar';
  10394. },
  10395. _extendMethods: function ()
  10396. {
  10397. return $.ligerMethos.MenuBar;
  10398. },
  10399. _render: function ()
  10400. {
  10401. var g = this, p = this.options;
  10402. g.menubar = $(this.element);
  10403. if (!g.menubar.hasClass("l-menubar")) g.menubar.addClass("l-menubar");
  10404. if (p && p.items)
  10405. {
  10406. $(p.items).each(function (i, item)
  10407. {
  10408. g.addItem(item);
  10409. });
  10410. }
  10411. $(document).click(function ()
  10412. {
  10413. $(".l-panel-btn-selected", g.menubar).removeClass("l-panel-btn-selected");
  10414. });
  10415. g.set(p);
  10416. },
  10417. addItem: function (item)
  10418. {
  10419. var g = this, p = this.options;
  10420. 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>');
  10421. g.menubar.append(ditem);
  10422. item.id && ditem.attr("menubarid", item.id);
  10423. item.text && $("span:first", ditem).html(item.text);
  10424. item.disable && ditem.addClass("l-menubar-item-disable");
  10425. item.click && ditem.click(function () { item.click(item); });
  10426. if (item.menu)
  10427. {
  10428. var menu = $.ligerMenu(item.menu);
  10429. ditem.hover(function ()
  10430. {
  10431. g.actionMenu && g.actionMenu.hide();
  10432. var left = $(this).offset().left;
  10433. var top = $(this).offset().top + $(this).height();
  10434. menu.show({ top: top, left: left });
  10435. g.actionMenu = menu;
  10436. $(this).addClass("l-panel-btn-over l-panel-btn-selected").siblings(".l-menubar-item").removeClass("l-panel-btn-selected");
  10437. }, function ()
  10438. {
  10439. $(this).removeClass("l-panel-btn-over");
  10440. });
  10441. }
  10442. else
  10443. {
  10444. ditem.hover(function ()
  10445. {
  10446. $(this).addClass("l-panel-btn-over");
  10447. }, function ()
  10448. {
  10449. $(this).removeClass("l-panel-btn-over");
  10450. });
  10451. $(".l-menubar-item-down", ditem).remove();
  10452. }
  10453. }
  10454. });
  10455. })(jQuery);/**
  10456. * jQuery ligerUI 1.1.9
  10457. *
  10458. * http://ligerui.com
  10459. *
  10460. * Author daomi 2012 [ gd_star@163.com ]
  10461. *
  10462. */
  10463. (function ($)
  10464. {
  10465. $.ligerMessageBox = function (options)
  10466. {
  10467. return $.ligerui.run.call(null, "ligerMessageBox", arguments, { isStatic: true });
  10468. };
  10469. $.ligerDefaults.MessageBox = {
  10470. isDrag: true
  10471. };
  10472. $.ligerMethos.MessageBox = {};
  10473. $.ligerui.controls.MessageBox = function (options)
  10474. {
  10475. $.ligerui.controls.MessageBox.base.constructor.call(this, null, options);
  10476. };
  10477. $.ligerui.controls.MessageBox.ligerExtend($.ligerui.core.UIComponent, {
  10478. __getType: function ()
  10479. {
  10480. return 'MessageBox';
  10481. },
  10482. __idPrev: function ()
  10483. {
  10484. return 'MessageBox';
  10485. },
  10486. _extendMethods: function ()
  10487. {
  10488. return $.ligerMethos.MessageBox;
  10489. },
  10490. _render: function ()
  10491. {
  10492. var g = this, p = this.options;
  10493. var messageBoxHTML = "";
  10494. messageBoxHTML += '<div class="l-messagebox">';
  10495. messageBoxHTML += ' <div class="l-messagebox-lt"></div><div class="l-messagebox-rt"></div>';
  10496. messageBoxHTML += ' <div class="l-messagebox-l"></div><div class="l-messagebox-r"></div> ';
  10497. messageBoxHTML += ' <div class="l-messagebox-image"></div>';
  10498. messageBoxHTML += ' <div class="l-messagebox-title">';
  10499. messageBoxHTML += ' <div class="l-messagebox-title-inner"></div>';
  10500. messageBoxHTML += ' <div class="l-messagebox-close"></div>';
  10501. messageBoxHTML += ' </div>';
  10502. messageBoxHTML += ' <div class="l-messagebox-content">';
  10503. messageBoxHTML += ' </div>';
  10504. messageBoxHTML += ' <div class="l-messagebox-buttons"><div class="l-messagebox-buttons-inner">';
  10505. messageBoxHTML += ' </div></div>';
  10506. messageBoxHTML += ' </div>';
  10507. g.messageBox = $(messageBoxHTML);
  10508. $('body').append(g.messageBox);
  10509. g.messageBox.close = function ()
  10510. {
  10511. g._removeWindowMask();
  10512. g.messageBox.remove();
  10513. };
  10514. //设置参数属性
  10515. p.width && g.messageBox.width(p.width);
  10516. p.title && $(".l-messagebox-title-inner", g.messageBox).html(p.title);
  10517. p.content && $(".l-messagebox-content", g.messageBox).html(p.content);
  10518. if (p.buttons)
  10519. {
  10520. $(p.buttons).each(function (i, item)
  10521. {
  10522. 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>');
  10523. $(".l-messagebox-btn-inner", btn).html(item.text);
  10524. $(".l-messagebox-buttons-inner", g.messageBox).append(btn);
  10525. item.width && btn.width(item.width);
  10526. item.onclick && btn.click(function () { item.onclick(item, i, g.messageBox) });
  10527. });
  10528. $(".l-messagebox-buttons-inner", g.messageBox).append("<div class='l-clear'></div>");
  10529. }
  10530. var boxWidth = g.messageBox.width();
  10531. var sumBtnWidth = 0;
  10532. $(".l-messagebox-buttons-inner .l-messagebox-btn", g.messageBox).each(function ()
  10533. {
  10534. sumBtnWidth += $(this).width();
  10535. });
  10536. $(".l-messagebox-buttons-inner", g.messageBox).css({ marginLeft: parseInt((boxWidth - sumBtnWidth) * 0.5) });
  10537. //设置背景、拖动支持 和设置图片
  10538. g._applyWindowMask();
  10539. g._applyDrag();
  10540. g._setImage();
  10541. //位置初始化
  10542. var left = 0;
  10543. var top = 0;
  10544. var width = p.width || g.messageBox.width();
  10545. if (p.left != null) left = p.left;
  10546. else p.left = left = 0.5 * ($(window).width() - width);
  10547. if (p.top != null) top = p.top;
  10548. else p.top = top = 0.5 * ($(window).height() - g.messageBox.height()) + $(window).scrollTop() - 10;
  10549. if (left < 0) p.left = left = 0;
  10550. if (top < 0) p.top = top = 0;
  10551. g.messageBox.css({ left: left, top: top });
  10552. //设置事件
  10553. $(".l-messagebox-btn", g.messageBox).hover(function ()
  10554. {
  10555. $(this).addClass("l-messagebox-btn-over");
  10556. }, function ()
  10557. {
  10558. $(this).removeClass("l-messagebox-btn-over");
  10559. });
  10560. $(".l-messagebox-close", g.messageBox).hover(function ()
  10561. {
  10562. $(this).addClass("l-messagebox-close-over");
  10563. }, function ()
  10564. {
  10565. $(this).removeClass("l-messagebox-close-over");
  10566. }).click(function ()
  10567. {
  10568. g.messageBox.close();
  10569. });
  10570. g.set(p);
  10571. },
  10572. close: function ()
  10573. {
  10574. var g = this, p = this.options;
  10575. this.g._removeWindowMask();
  10576. this.messageBox.remove();
  10577. },
  10578. _applyWindowMask: function ()
  10579. {
  10580. var g = this, p = this.options;
  10581. $(".l-window-mask").remove();
  10582. $("<div class='l-window-mask' style='display: block;'></div>").appendTo($("body"));
  10583. },
  10584. _removeWindowMask: function ()
  10585. {
  10586. var g = this, p = this.options;
  10587. $(".l-window-mask").remove();
  10588. },
  10589. _applyDrag: function ()
  10590. {
  10591. var g = this, p = this.options;
  10592. if (p.isDrag && $.fn.ligerDrag)
  10593. g.messageBox.ligerDrag({ handler: '.l-messagebox-title-inner', animate: false });
  10594. },
  10595. _setImage: function ()
  10596. {
  10597. var g = this, p = this.options;
  10598. if (p.type)
  10599. {
  10600. if (p.type == 'success' || p.type == 'donne')
  10601. {
  10602. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-donne").show();
  10603. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  10604. }
  10605. else if (p.type == 'error')
  10606. {
  10607. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-error").show();
  10608. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  10609. }
  10610. else if (p.type == 'warn')
  10611. {
  10612. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-warn").show();
  10613. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 30 });
  10614. }
  10615. else if (p.type == 'question')
  10616. {
  10617. $(".l-messagebox-image", g.messageBox).addClass("l-messagebox-image-question").show();
  10618. $(".l-messagebox-content", g.messageBox).css({ paddingLeft: 64, paddingBottom: 40 });
  10619. }
  10620. }
  10621. }
  10622. });
  10623. $.ligerMessageBox.show = function (p)
  10624. {
  10625. return $.ligerMessageBox(p);
  10626. };
  10627. $.ligerMessageBox.alert = function (title, content, type, onBtnClick)
  10628. {
  10629. title = title || "";
  10630. content = content || title;
  10631. var onclick = function (item, index, messageBox)
  10632. {
  10633. messageBox.close();
  10634. if (onBtnClick)
  10635. onBtnClick(item, index, messageBox);
  10636. };
  10637. p = {
  10638. title: title,
  10639. content: content,
  10640. buttons: [{ text: '确定', onclick: onclick}]
  10641. };
  10642. if (type) p.type = type;
  10643. return $.ligerMessageBox(p);
  10644. };
  10645. $.ligerMessageBox.confirm = function (title, content, callback)
  10646. {
  10647. var onclick = function (item, index, messageBox)
  10648. {
  10649. messageBox.close();
  10650. if (callback)
  10651. {
  10652. callback(index == 0);
  10653. }
  10654. };
  10655. p = {
  10656. type: 'question',
  10657. title: title,
  10658. content: content,
  10659. buttons: [{ text: '是', onclick: onclick }, { text: '否', onclick: onclick}]
  10660. };
  10661. return $.ligerMessageBox(p);
  10662. };
  10663. $.ligerMessageBox.success = function (title, content, onBtnClick)
  10664. {
  10665. return $.ligerMessageBox.alert(title, content, 'success', onBtnClick);
  10666. };
  10667. $.ligerMessageBox.error = function (title, content, onBtnClick)
  10668. {
  10669. return $.ligerMessageBox.alert(title, content, 'error', onBtnClick);
  10670. };
  10671. $.ligerMessageBox.warn = function (title, content, onBtnClick)
  10672. {
  10673. return $.ligerMessageBox.alert(title, content, 'warn', onBtnClick);
  10674. };
  10675. $.ligerMessageBox.question = function (title, content)
  10676. {
  10677. return $.ligerMessageBox.alert(title, content, 'question');
  10678. };
  10679. })(jQuery);/**
  10680. * jQuery ligerUI 1.1.9
  10681. *
  10682. * http://ligerui.com
  10683. *
  10684. * Author daomi 2012 [ gd_star@163.com ]
  10685. *
  10686. */
  10687. (function ($)
  10688. {
  10689. $.fn.ligerRadio = function ()
  10690. {
  10691. return $.ligerui.run.call(this, "ligerRadio", arguments);
  10692. };
  10693. $.fn.ligerGetRadioManager = function ()
  10694. {
  10695. return $.ligerui.run.call(this, "ligerGetRadioManager", arguments);
  10696. };
  10697. $.ligerDefaults.Radio = { disabled: false };
  10698. $.ligerMethos.Radio = {};
  10699. $.ligerui.controls.Radio = function (element, options)
  10700. {
  10701. $.ligerui.controls.Radio.base.constructor.call(this, element, options);
  10702. };
  10703. $.ligerui.controls.Radio.ligerExtend($.ligerui.controls.Input, {
  10704. __getType: function ()
  10705. {
  10706. return 'Radio';
  10707. },
  10708. __idPrev: function ()
  10709. {
  10710. return 'Radio';
  10711. },
  10712. _extendMethods: function ()
  10713. {
  10714. return $.ligerMethos.Radio;
  10715. },
  10716. _render: function ()
  10717. {
  10718. var g = this, p = this.options;
  10719. g.input = $(this.element);
  10720. g.link = $('<a href="javascript:void(0)" class="l-radio"></a>');
  10721. g.wrapper = g.input.addClass('l-hidden').wrap('<div class="l-radio-wrapper"></div>').parent();
  10722. g.wrapper.prepend(g.link);
  10723. g.input.change(function ()
  10724. {
  10725. if (this.checked)
  10726. {
  10727. g.link.addClass('l-radio-checked');
  10728. }
  10729. else
  10730. {
  10731. g.link.removeClass('l-radio-checked');
  10732. }
  10733. return true;
  10734. });
  10735. g.link.click(function ()
  10736. {
  10737. g._doclick();
  10738. });
  10739. g.wrapper.hover(function ()
  10740. {
  10741. if (!p.disabled)
  10742. $(this).addClass("l-over");
  10743. }, function ()
  10744. {
  10745. $(this).removeClass("l-over");
  10746. });
  10747. this.element.checked && g.link.addClass('l-radio-checked');
  10748. if (this.element.id)
  10749. {
  10750. $("label[for=" + this.element.id + "]").click(function ()
  10751. {
  10752. g._doclick();
  10753. });
  10754. }
  10755. g.set(p);
  10756. },
  10757. setValue: function (value)
  10758. {
  10759. var g = this, p = this.options;
  10760. if (!value)
  10761. {
  10762. g.input[0].checked = false;
  10763. g.link.removeClass('l-radio-checked');
  10764. }
  10765. else
  10766. {
  10767. g.input[0].checked = true;
  10768. g.link.addClass('l-radio-checked');
  10769. }
  10770. },
  10771. getValue: function ()
  10772. {
  10773. return this.input[0].checked;
  10774. },
  10775. setEnabled: function ()
  10776. {
  10777. this.input.attr('disabled', false);
  10778. this.wrapper.removeClass("l-disabled");
  10779. this.options.disabled = false;
  10780. },
  10781. setDisabled: function ()
  10782. {
  10783. this.input.attr('disabled', true);
  10784. this.wrapper.addClass("l-disabled");
  10785. this.options.disabled = true;
  10786. },
  10787. updateStyle: function ()
  10788. {
  10789. if (this.input.attr('disabled'))
  10790. {
  10791. this.wrapper.addClass("l-disabled");
  10792. this.options.disabled = true;
  10793. }
  10794. if (this.input[0].checked)
  10795. {
  10796. this.link.addClass('l-checkbox-checked');
  10797. }
  10798. else
  10799. {
  10800. this.link.removeClass('l-checkbox-checked');
  10801. }
  10802. },
  10803. _doclick: function ()
  10804. {
  10805. var g = this, p = this.options;
  10806. if (g.input.attr('disabled')) { return false; }
  10807. g.input.trigger('click').trigger('change');
  10808. var formEle;
  10809. if (g.input[0].form) formEle = g.input[0].form;
  10810. else formEle = document;
  10811. $("input:radio[name=" + g.input[0].name + "]", formEle).not(g.input).trigger("change");
  10812. return false;
  10813. }
  10814. });
  10815. })(jQuery);/**
  10816. * jQuery ligerUI 1.1.9
  10817. *
  10818. * http://ligerui.com
  10819. *
  10820. * Author daomi 2012 [ gd_star@163.com ]
  10821. *
  10822. */
  10823. (function ($)
  10824. {
  10825. $.fn.ligerResizable = function (options)
  10826. {
  10827. return $.ligerui.run.call(this, "ligerResizable", arguments,
  10828. {
  10829. idAttrName: 'ligeruiresizableid', hasElement: false, propertyToElemnt: 'target'
  10830. });
  10831. };
  10832. $.fn.ligerGetResizableManager = function ()
  10833. {
  10834. return $.ligerui.run.call(this, "ligerGetResizableManager", arguments,
  10835. {
  10836. idAttrName: 'ligeruiresizableid', hasElement: false, propertyToElemnt: 'target'
  10837. });
  10838. };
  10839. $.ligerDefaults.Resizable = {
  10840. handles: 'n, e, s, w, ne, se, sw, nw',
  10841. maxWidth: 2000,
  10842. maxHeight: 2000,
  10843. minWidth: 20,
  10844. minHeight: 20,
  10845. scope: 3,
  10846. animate: false,
  10847. onStartResize: function (e) { },
  10848. onResize: function (e) { },
  10849. onStopResize: function (e) { },
  10850. onEndResize: null
  10851. };
  10852. $.ligerui.controls.Resizable = function (options)
  10853. {
  10854. $.ligerui.controls.Resizable.base.constructor.call(this, null, options);
  10855. };
  10856. $.ligerui.controls.Resizable.ligerExtend($.ligerui.core.UIComponent, {
  10857. __getType: function ()
  10858. {
  10859. return 'Resizable';
  10860. },
  10861. __idPrev: function ()
  10862. {
  10863. return 'Resizable';
  10864. },
  10865. _render: function ()
  10866. {
  10867. var g = this, p = this.options;
  10868. g.target = $(p.target);
  10869. g.set(p);
  10870. g.target.mousemove(function (e)
  10871. {
  10872. if (p.disabled) return;
  10873. g.dir = g._getDir(e);
  10874. if (g.dir)
  10875. g.target.css('cursor', g.dir + '-resize');
  10876. else if (g.target.css('cursor').indexOf('-resize') > 0)
  10877. g.target.css('cursor', 'default');
  10878. if (p.target.ligeruidragid)
  10879. {
  10880. var drag = $.ligerui.get(p.target.ligeruidragid);
  10881. if (drag && g.dir)
  10882. {
  10883. drag.set('disabled', true);
  10884. } else if (drag)
  10885. {
  10886. drag.set('disabled', false);
  10887. }
  10888. }
  10889. }).mousedown(function (e)
  10890. {
  10891. if (p.disabled) return;
  10892. if (g.dir)
  10893. {
  10894. g._start(e);
  10895. }
  10896. });
  10897. },
  10898. _rendered: function ()
  10899. {
  10900. this.options.target.ligeruiresizableid = this.id;
  10901. },
  10902. _getDir: function (e)
  10903. {
  10904. var g = this, p = this.options;
  10905. var dir = '';
  10906. var xy = g.target.offset();
  10907. var width = g.target.width();
  10908. var height = g.target.height();
  10909. var scope = p.scope;
  10910. var pageX = e.pageX || e.screenX;
  10911. var pageY = e.pageY || e.screenY;
  10912. if (pageY >= xy.top && pageY < xy.top + scope)
  10913. {
  10914. dir += 'n';
  10915. }
  10916. else if (pageY <= xy.top + height && pageY > xy.top + height - scope)
  10917. {
  10918. dir += 's';
  10919. }
  10920. if (pageX >= xy.left && pageX < xy.left + scope)
  10921. {
  10922. dir += 'w';
  10923. }
  10924. else if (pageX <= xy.left + width && pageX > xy.left + width - scope)
  10925. {
  10926. dir += 'e';
  10927. }
  10928. if (p.handles == "all" || dir == "") return dir;
  10929. if ($.inArray(dir, g.handles) != -1) return dir;
  10930. return '';
  10931. },
  10932. _setHandles: function (handles)
  10933. {
  10934. if (!handles) return;
  10935. this.handles = handles.replace(/(\s*)/g, '').split(',');
  10936. },
  10937. _createProxy: function ()
  10938. {
  10939. var g = this;
  10940. g.proxy = $('<div class="l-resizable"></div>');
  10941. g.proxy.width(g.target.width()).height(g.target.height())
  10942. g.proxy.attr("resizableid", g.id).appendTo('body');
  10943. },
  10944. _removeProxy: function ()
  10945. {
  10946. var g = this;
  10947. if (g.proxy)
  10948. {
  10949. g.proxy.remove();
  10950. g.proxy = null;
  10951. }
  10952. },
  10953. _start: function (e)
  10954. {
  10955. var g = this, p = this.options;
  10956. g._createProxy();
  10957. g.proxy.css({
  10958. left: g.target.offset().left,
  10959. top: g.target.offset().top,
  10960. position: 'absolute'
  10961. });
  10962. g.current = {
  10963. dir: g.dir,
  10964. left: g.target.offset().left,
  10965. top: g.target.offset().top,
  10966. startX: e.pageX || e.screenX,
  10967. startY: e.pageY || e.clientY,
  10968. width: g.target.width(),
  10969. height: g.target.height()
  10970. };
  10971. $(document).bind("selectstart.resizable", function () { return false; });
  10972. $(document).bind('mouseup.resizable', function ()
  10973. {
  10974. g._stop.apply(g, arguments);
  10975. });
  10976. $(document).bind('mousemove.resizable', function ()
  10977. {
  10978. g._drag.apply(g, arguments);
  10979. });
  10980. g.proxy.show();
  10981. g.trigger('startResize', [g.current, e]);
  10982. },
  10983. changeBy: {
  10984. t: ['n', 'ne', 'nw'],
  10985. l: ['w', 'sw', 'nw'],
  10986. w: ['w', 'sw', 'nw', 'e', 'ne', 'se'],
  10987. h: ['n', 'ne', 'nw', 's', 'se', 'sw']
  10988. },
  10989. _drag: function (e)
  10990. {
  10991. var g = this, p = this.options;
  10992. if (!g.current) return;
  10993. if (!g.proxy) return;
  10994. g.proxy.css('cursor', g.current.dir == '' ? 'default' : g.current.dir + '-resize');
  10995. var pageX = e.pageX || e.screenX;
  10996. var pageY = e.pageY || e.screenY;
  10997. g.current.diffX = pageX - g.current.startX;
  10998. g.current.diffY = pageY - g.current.startY;
  10999. g._applyResize(g.proxy);
  11000. g.trigger('resize', [g.current, e]);
  11001. },
  11002. _stop: function (e)
  11003. {
  11004. var g = this, p = this.options;
  11005. if (g.hasBind('stopResize'))
  11006. {
  11007. if (g.trigger('stopResize', [g.current, e]) != false)
  11008. g._applyResize();
  11009. }
  11010. else
  11011. {
  11012. g._applyResize();
  11013. }
  11014. g._removeProxy();
  11015. g.trigger('endResize', [g.current, e]);
  11016. $(document).unbind("selectstart.resizable");
  11017. $(document).unbind('mousemove.resizable');
  11018. $(document).unbind('mouseup.resizable');
  11019. },
  11020. _applyResize: function (applyResultBody)
  11021. {
  11022. var g = this, p = this.options;
  11023. var cur = {
  11024. left: g.current.left,
  11025. top: g.current.top,
  11026. width: g.current.width,
  11027. height: g.current.height
  11028. };
  11029. var applyToTarget = false;
  11030. if (!applyResultBody)
  11031. {
  11032. applyResultBody = g.target;
  11033. applyToTarget = true;
  11034. if (!isNaN(parseInt(g.target.css('top'))))
  11035. cur.top = parseInt(g.target.css('top'));
  11036. else
  11037. cur.top = 0;
  11038. if (!isNaN(parseInt(g.target.css('left'))))
  11039. cur.left = parseInt(g.target.css('left'));
  11040. else
  11041. cur.left = 0;
  11042. }
  11043. if ($.inArray(g.current.dir, g.changeBy.l) > -1)
  11044. {
  11045. cur.left += g.current.diffX;
  11046. g.current.diffLeft = g.current.diffX;
  11047. }
  11048. else if (applyToTarget)
  11049. {
  11050. delete cur.left;
  11051. }
  11052. if ($.inArray(g.current.dir, g.changeBy.t) > -1)
  11053. {
  11054. cur.top += g.current.diffY;
  11055. g.current.diffTop = g.current.diffY;
  11056. }
  11057. else if (applyToTarget)
  11058. {
  11059. delete cur.top;
  11060. }
  11061. if ($.inArray(g.current.dir, g.changeBy.w) > -1)
  11062. {
  11063. cur.width += (g.current.dir.indexOf('w') == -1 ? 1 : -1) * g.current.diffX;
  11064. g.current.newWidth = cur.width;
  11065. }
  11066. else if (applyToTarget)
  11067. {
  11068. delete cur.width;
  11069. }
  11070. if ($.inArray(g.current.dir, g.changeBy.h) > -1)
  11071. {
  11072. cur.height += (g.current.dir.indexOf('n') == -1 ? 1 : -1) * g.current.diffY;
  11073. g.current.newHeight = cur.height;
  11074. }
  11075. else if (applyToTarget)
  11076. {
  11077. delete cur.height;
  11078. }
  11079. if (applyToTarget && p.animate)
  11080. applyResultBody.animate(cur);
  11081. else
  11082. applyResultBody.css(cur);
  11083. }
  11084. });
  11085. })(jQuery);/**
  11086. * jQuery ligerUI 1.1.9
  11087. *
  11088. * http://ligerui.com
  11089. *
  11090. * Author daomi 2012 [ gd_star@163.com ]
  11091. *
  11092. */
  11093. (function ($)
  11094. {
  11095. $.fn.ligerSpinner = function ()
  11096. {
  11097. return $.ligerui.run.call(this, "ligerSpinner", arguments);
  11098. };
  11099. $.fn.ligerGetSpinnerManager = function ()
  11100. {
  11101. return $.ligerui.run.call(this, "ligerGetSpinnerManager", arguments);
  11102. };
  11103. $.ligerDefaults.Spinner = {
  11104. type: 'float', //类型 float:浮点数 int:整数 time:时间
  11105. isNegative: true, //是否负数
  11106. decimalplace: 2, //小数位 type=float时起作用
  11107. step: 0.1, //每次增加的值
  11108. interval: 50, //间隔,毫秒
  11109. onChangeValue: false, //改变值事件
  11110. minValue: null, //最小值
  11111. maxValue: null, //最大值
  11112. disabled: false
  11113. };
  11114. $.ligerMethos.Spinner = {};
  11115. $.ligerui.controls.Spinner = function (element, options)
  11116. {
  11117. $.ligerui.controls.Spinner.base.constructor.call(this, element, options);
  11118. };
  11119. $.ligerui.controls.Spinner.ligerExtend($.ligerui.controls.Input, {
  11120. __getType: function ()
  11121. {
  11122. return 'Spinner';
  11123. },
  11124. __idPrev: function ()
  11125. {
  11126. return 'Spinner';
  11127. },
  11128. _extendMethods: function ()
  11129. {
  11130. return $.ligerMethos.Spinner;
  11131. },
  11132. _init: function ()
  11133. {
  11134. $.ligerui.controls.Spinner.base._init.call(this);
  11135. var p = this.options;
  11136. if (p.type == 'float')
  11137. {
  11138. p.step = 0.1;
  11139. p.interval = 50;
  11140. } else if (p.type == 'int')
  11141. {
  11142. p.step = 1;
  11143. p.interval = 100;
  11144. } else if (p.type == 'time')
  11145. {
  11146. p.step = 1;
  11147. p.interval = 100;
  11148. }
  11149. },
  11150. _render: function ()
  11151. {
  11152. var g = this, p = this.options;
  11153. g.interval = null;
  11154. g.inputText = null;
  11155. g.value = null;
  11156. g.textFieldID = "";
  11157. if (this.element.tagName.toLowerCase() == "input" && this.element.type && this.element.type == "text")
  11158. {
  11159. g.inputText = $(this.element);
  11160. if (this.element.id)
  11161. g.textFieldID = this.element.id;
  11162. }
  11163. else
  11164. {
  11165. g.inputText = $('<input type="text"/>');
  11166. g.inputText.appendTo($(this.element));
  11167. }
  11168. if (g.textFieldID == "" && p.textFieldID)
  11169. g.textFieldID = p.textFieldID;
  11170. 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>');
  11171. g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
  11172. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  11173. g.wrapper.append(g.link).after(g.selectBox).after(g.valueField);
  11174. g.link.up = $(".l-spinner-up", g.link);
  11175. g.link.down = $(".l-spinner-down", g.link);
  11176. g.inputText.addClass("l-text-field");
  11177. if (p.disabled)
  11178. {
  11179. g.wrapper.addClass("l-text-disabled");
  11180. }
  11181. //初始化
  11182. if (!g._isVerify(g.inputText.val()))
  11183. {
  11184. g.value = g._getDefaultValue();
  11185. g.inputText.val(g.value);
  11186. }
  11187. //事件
  11188. g.link.up.hover(function ()
  11189. {
  11190. if (!p.disabled)
  11191. $(this).addClass("l-spinner-up-over");
  11192. }, function ()
  11193. {
  11194. clearInterval(g.interval);
  11195. $(document).unbind("selectstart.spinner");
  11196. $(this).removeClass("l-spinner-up-over");
  11197. }).mousedown(function ()
  11198. {
  11199. if (!p.disabled)
  11200. {
  11201. g._uping.call(g);
  11202. g.interval = setInterval(function ()
  11203. {
  11204. g._uping.call(g);
  11205. }, p.interval);
  11206. $(document).bind("selectstart.spinner", function () { return false; });
  11207. }
  11208. }).mouseup(function ()
  11209. {
  11210. clearInterval(g.interval);
  11211. g.inputText.trigger("change").focus();
  11212. $(document).unbind("selectstart.spinner");
  11213. });
  11214. g.link.down.hover(function ()
  11215. {
  11216. if (!p.disabled)
  11217. $(this).addClass("l-spinner-down-over");
  11218. }, function ()
  11219. {
  11220. clearInterval(g.interval);
  11221. $(document).unbind("selectstart.spinner");
  11222. $(this).removeClass("l-spinner-down-over");
  11223. }).mousedown(function ()
  11224. {
  11225. if (!p.disabled)
  11226. {
  11227. g.interval = setInterval(function ()
  11228. {
  11229. g._downing.call(g);
  11230. }, p.interval);
  11231. $(document).bind("selectstart.spinner", function () { return false; });
  11232. }
  11233. }).mouseup(function ()
  11234. {
  11235. clearInterval(g.interval);
  11236. g.inputText.trigger("change").focus();
  11237. $(document).unbind("selectstart.spinner");
  11238. });
  11239. g.inputText.change(function ()
  11240. {
  11241. var value = g.inputText.val();
  11242. g.value = g._getVerifyValue(value);
  11243. g.trigger('changeValue', [g.value]);
  11244. g.inputText.val(g.value);
  11245. }).blur(function ()
  11246. {
  11247. g.wrapper.removeClass("l-text-focus");
  11248. }).focus(function ()
  11249. {
  11250. g.wrapper.addClass("l-text-focus");
  11251. });
  11252. g.wrapper.hover(function ()
  11253. {
  11254. if (!p.disabled)
  11255. g.wrapper.addClass("l-text-over");
  11256. }, function ()
  11257. {
  11258. g.wrapper.removeClass("l-text-over");
  11259. });
  11260. g.set(p);
  11261. },
  11262. _setWidth: function (value)
  11263. {
  11264. var g = this;
  11265. if (value > 20)
  11266. {
  11267. g.wrapper.css({ width: value });
  11268. g.inputText.css({ width: value - 20 });
  11269. }
  11270. },
  11271. _setHeight: function (value)
  11272. {
  11273. var g = this;
  11274. if (value > 10)
  11275. {
  11276. g.wrapper.height(value);
  11277. g.inputText.height(value - 2);
  11278. g.link.height(value - 4);
  11279. }
  11280. },
  11281. _setDisabled: function (value)
  11282. {
  11283. if (value)
  11284. {
  11285. this.wrapper.addClass("l-text-disabled");
  11286. }
  11287. else
  11288. {
  11289. this.wrapper.removeClass("l-text-disabled");
  11290. }
  11291. },
  11292. setValue: function (value)
  11293. {
  11294. this.inputText.val(value);
  11295. },
  11296. getValue: function ()
  11297. {
  11298. return this.inputText.val();
  11299. },
  11300. _round: function (v, e)
  11301. {
  11302. var g = this, p = this.options;
  11303. var t = 1;
  11304. for (; e > 0; t *= 10, e--);
  11305. for (; e < 0; t /= 10, e++);
  11306. return Math.round(v * t) / t;
  11307. },
  11308. _isInt: function (str)
  11309. {
  11310. var g = this, p = this.options;
  11311. var strP = p.isNegative ? /^-?\d+$/ : /^\d+$/;
  11312. if (!strP.test(str)) return false;
  11313. if (parseFloat(str) != str) return false;
  11314. return true;
  11315. },
  11316. _isFloat: function (str)
  11317. {
  11318. var g = this, p = this.options;
  11319. var strP = p.isNegative ? /^-?\d+(\.\d+)?$/ : /^\d+(\.\d+)?$/;
  11320. if (!strP.test(str)) return false;
  11321. if (parseFloat(str) != str) return false;
  11322. return true;
  11323. },
  11324. _isTime: function (str)
  11325. {
  11326. var g = this, p = this.options;
  11327. var a = str.match(/^(\d{1,2}):(\d{1,2})$/);
  11328. if (a == null) return false;
  11329. if (a[1] > 24 || a[2] > 60) return false;
  11330. return true;
  11331. },
  11332. _isVerify: function (str)
  11333. {
  11334. var g = this, p = this.options;
  11335. if (p.type == 'float')
  11336. {
  11337. if (!g._isFloat(str)) return false;
  11338. var value = parseFloat(str);
  11339. if (p.minValue != undefined && p.minValue > value) return false;
  11340. if (p.maxValue != undefined && p.maxValue < value) return false;
  11341. return true;
  11342. } else if (p.type == 'int')
  11343. {
  11344. if (!g._isInt(str)) return false;
  11345. var value = parseInt(str);
  11346. if (p.minValue != undefined && p.minValue > value) return false;
  11347. if (p.maxValue != undefined && p.maxValue < value) return false;
  11348. return true;
  11349. } else if (p.type == 'time')
  11350. {
  11351. return g._isTime(str);
  11352. }
  11353. return false;
  11354. },
  11355. _getVerifyValue: function (value)
  11356. {
  11357. var g = this, p = this.options;
  11358. var newvalue = null;
  11359. if (p.type == 'float')
  11360. {
  11361. newvalue = g._round(value, p.decimalplace);
  11362. } else if (p.type == 'int')
  11363. {
  11364. newvalue = parseInt(value);
  11365. } else if (p.type == 'time')
  11366. {
  11367. newvalue = value;
  11368. }
  11369. if (!g._isVerify(newvalue))
  11370. {
  11371. return g.value;
  11372. } else
  11373. {
  11374. return newvalue;
  11375. }
  11376. },
  11377. _isOverValue: function (value)
  11378. {
  11379. var g = this, p = this.options;
  11380. if (p.minValue != null && p.minValue > value) return true;
  11381. if (p.maxValue != null && p.maxValue < value) return true;
  11382. return false;
  11383. },
  11384. _getDefaultValue: function ()
  11385. {
  11386. var g = this, p = this.options;
  11387. if (p.type == 'float' || p.type == 'int') { return 0; }
  11388. else if (p.type == 'time') { return "00:00"; }
  11389. },
  11390. _addValue: function (num)
  11391. {
  11392. var g = this, p = this.options;
  11393. var value = g.inputText.val();
  11394. value = parseFloat(value) + num;
  11395. if (g._isOverValue(value)) return;
  11396. g.inputText.val(value);
  11397. g.inputText.trigger("change");
  11398. },
  11399. _addTime: function (minute)
  11400. {
  11401. var g = this, p = this.options;
  11402. var value = g.inputText.val();
  11403. var a = value.match(/^(\d{1,2}):(\d{1,2})$/);
  11404. newminute = parseInt(a[2]) + minute;
  11405. if (newminute < 10) newminute = "0" + newminute;
  11406. value = a[1] + ":" + newminute;
  11407. if (g._isOverValue(value)) return;
  11408. g.inputText.val(value);
  11409. g.inputText.trigger("change");
  11410. },
  11411. _uping: function ()
  11412. {
  11413. var g = this, p = this.options;
  11414. if (p.type == 'float' || p.type == 'int')
  11415. {
  11416. g._addValue(p.step);
  11417. } else if (p.type == 'time')
  11418. {
  11419. g._addTime(p.step);
  11420. }
  11421. },
  11422. _downing: function ()
  11423. {
  11424. var g = this, p = this.options;
  11425. if (p.type == 'float' || p.type == 'int')
  11426. {
  11427. g._addValue(-1 * p.step);
  11428. } else if (p.type == 'time')
  11429. {
  11430. g._addTime(-1 * p.step);
  11431. }
  11432. },
  11433. _isDateTime: function (dateStr)
  11434. {
  11435. var g = this, p = this.options;
  11436. var r = dateStr.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
  11437. if (r == null) return false;
  11438. var d = new Date(r[1], r[3] - 1, r[4]);
  11439. if (d == "NaN") return false;
  11440. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]);
  11441. },
  11442. _isLongDateTime: function (dateStr)
  11443. {
  11444. var g = this, p = this.options;
  11445. var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2})$/;
  11446. var r = dateStr.match(reg);
  11447. if (r == null) return false;
  11448. var d = new Date(r[1], r[3] - 1, r[4], r[5], r[6]);
  11449. if (d == "NaN") return false;
  11450. return (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6]);
  11451. }
  11452. });
  11453. })(jQuery);/**
  11454. * jQuery ligerUI 1.1.9
  11455. *
  11456. * http://ligerui.com
  11457. *
  11458. * Author daomi 2012 [ gd_star@163.com ]
  11459. *
  11460. */
  11461. (function ($)
  11462. {
  11463. $.fn.ligerTab = function (options)
  11464. {
  11465. return $.ligerui.run.call(this, "ligerTab", arguments);
  11466. };
  11467. $.fn.ligerGetTabManager = function ()
  11468. {
  11469. return $.ligerui.run.call(this, "ligerGetTabManager", arguments);
  11470. };
  11471. $.ligerDefaults.Tab = {
  11472. height: null,
  11473. heightDiff: 0, // 高度补差 ,
  11474. isMove:true,
  11475. changeHeightOnResize: false,
  11476. contextmenu: true,
  11477. dblClickToClose: false, //是否双击时关闭
  11478. dragToMove: false, //是否允许拖动时改变tab项的位置
  11479. onBeforeOverrideTabItem: null,
  11480. onAfterOverrideTabItem: null,
  11481. onBeforeRemoveTabItem: null,
  11482. onAfterRemoveTabItem: null,
  11483. onBeforeAddTabItem: null,
  11484. onAfterAddTabItem: null,
  11485. onBeforeSelectTabItem: null,
  11486. onAfterSelectTabItem: null
  11487. };
  11488. $.ligerDefaults.TabString = {
  11489. closeMessage: "关闭当前页",
  11490. closeOtherMessage: "关闭其他",
  11491. closeAllMessage: "关闭所有",
  11492. reloadMessage: "刷新"
  11493. };
  11494. $.ligerMethos.Tab = {};
  11495. $.ligerui.controls.Tab = function (element, options)
  11496. {
  11497. $.ligerui.controls.Tab.base.constructor.call(this, element, options);
  11498. };
  11499. $.ligerui.controls.Tab.ligerExtend($.ligerui.core.UIComponent, {
  11500. __getType: function ()
  11501. {
  11502. return 'Tab';
  11503. },
  11504. __idPrev: function ()
  11505. {
  11506. return 'Tab';
  11507. },
  11508. _extendMethods: function ()
  11509. {
  11510. return $.ligerMethos.Tab;
  11511. },
  11512. _render: function ()
  11513. {
  11514. var g = this, p = this.options;
  11515. if (p.height) g.makeFullHeight = true;
  11516. g.tab = $(this.element);
  11517. g.tab.addClass("l-tab");
  11518. if (p.contextmenu && $.ligerMenu)
  11519. {
  11520. g.tab.menu = $.ligerMenu({ width: 100, items: [
  11521. { text: p.closeMessage, id: 'close', click: function ()
  11522. {
  11523. g._menuItemClick.apply(g, arguments);
  11524. }
  11525. },
  11526. { text: p.closeOtherMessage, id: 'closeother', click: function ()
  11527. {
  11528. g._menuItemClick.apply(g, arguments);
  11529. }
  11530. },
  11531. { text: p.closeAllMessage, id: 'closeall', click: function ()
  11532. {
  11533. g._menuItemClick.apply(g, arguments);
  11534. }
  11535. },
  11536. { text: p.reloadMessage, id: 'reload', click: function ()
  11537. {
  11538. g._menuItemClick.apply(g, arguments);
  11539. }
  11540. }
  11541. ]
  11542. });
  11543. }
  11544. g.tab.content = $('<div class="l-tab-content"></div>');
  11545. $("> div", g.tab).appendTo(g.tab.content);
  11546. g.tab.content.appendTo(g.tab);
  11547. g.tab.links = $('<div class="l-tab-links"><ul style="left: 0px; "></ul></div>');
  11548. g.tab.links.prependTo(g.tab);
  11549. g.tab.links.ul = $("ul", g.tab.links);
  11550. var lselecteds = $("> div[lselected=true]", g.tab.content);
  11551. var haslselected = lselecteds.length > 0;
  11552. g.selectedTabId = lselecteds.attr("tabid");
  11553. $("> div", g.tab.content).each(function (i, box)
  11554. {
  11555. var li = $('<li class=""><a></a><div class="l-tab-links-item-left"></div><div class="l-tab-links-item-right"></div></li>');
  11556. var contentitem = $(this);
  11557. if (contentitem.attr("title"))
  11558. {
  11559. $("> a", li).html(contentitem.attr("title"));
  11560. //contentitem.attr("title", "");
  11561. }
  11562. li.attr("title",contentitem.attr("title"));
  11563. var tabid = contentitem.attr("tabid");
  11564. if (tabid == undefined)
  11565. {
  11566. tabid = g.getNewTabid();
  11567. contentitem.attr("tabid", tabid);
  11568. if (contentitem.attr("lselected"))
  11569. {
  11570. g.selectedTabId = tabid;
  11571. }
  11572. }
  11573. li.attr("tabid", tabid);
  11574. if (!haslselected && i == 0) g.selectedTabId = tabid;
  11575. var showClose = contentitem.attr("showClose");
  11576. if (showClose)
  11577. {
  11578. li.append("<div class='l-tab-links-item-close'></div>");
  11579. }
  11580. $("> ul", g.tab.links).append(li);
  11581. if (!contentitem.hasClass("l-tab-content-item")) contentitem.addClass("l-tab-content-item");
  11582. if (contentitem.find("iframe").length > 0)
  11583. {
  11584. var iframe = $("iframe:first", contentitem);
  11585. if (iframe[0].readyState != "complete")
  11586. {
  11587. if (contentitem.find(".l-tab-loading:first").length == 0)
  11588. contentitem.prepend("<div class='l-tab-loading' style='display:block;'></div>");
  11589. var iframeloading = $(".l-tab-loading:first", contentitem);
  11590. iframe.bind('load.tab', function ()
  11591. {
  11592. iframeloading.hide();
  11593. });
  11594. }
  11595. }
  11596. });
  11597. //init
  11598. g.selectTabItem(g.selectedTabId);
  11599. //set content height
  11600. if (p.height)
  11601. {
  11602. if (typeof (p.height) == 'string' && p.height.indexOf('%') > 0)
  11603. {
  11604. g.onResize();
  11605. if (p.changeHeightOnResize)
  11606. {
  11607. $(window).resize(function ()
  11608. {
  11609. g.onResize.call(g);
  11610. });
  11611. }
  11612. } else
  11613. {
  11614. g.setHeight(p.height);
  11615. }
  11616. }
  11617. if (g.makeFullHeight)
  11618. g.setContentHeight();
  11619. //add even
  11620. $("li", g.tab.links).each(function ()
  11621. {
  11622. g._addTabItemEvent($(this));
  11623. });
  11624. g.tab.bind('dblclick.tab', function (e)
  11625. {
  11626. if (!p.dblClickToClose) return;
  11627. g.dblclicking = true;
  11628. var obj = (e.target || e.srcElement);
  11629. var tagName = obj.tagName.toLowerCase();
  11630. if (tagName == "a")
  11631. {
  11632. var tabid = $(obj).parent().attr("tabid");
  11633. var allowClose = $(obj).parent().find("div.l-tab-links-item-close").length ? true : false;
  11634. if (allowClose)
  11635. {
  11636. g.removeTabItem(tabid);
  11637. }
  11638. }
  11639. g.dblclicking = false;
  11640. });
  11641. g.set(p);
  11642. },
  11643. _applyDrag: function (tabItemDom)
  11644. {
  11645. var g = this, p = this.options;
  11646. 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');
  11647. var drag = $(tabItemDom).ligerDrag(
  11648. {
  11649. revert: true, animate: false,
  11650. proxy: function ()
  11651. {
  11652. var name = $(this).find("a").html();
  11653. g.dragproxy = $("<div class='l-tab-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div></div>").appendTo('body');
  11654. g.dragproxy.append(name);
  11655. return g.dragproxy;
  11656. },
  11657. onRendered: function ()
  11658. {
  11659. this.set('cursor', 'pointer');
  11660. },
  11661. onStartDrag: function (current, e)
  11662. {
  11663. if (!$(tabItemDom).hasClass("l-selected")) return false;
  11664. if (e.button == 2) return false;
  11665. var obj = e.srcElement || e.target;
  11666. if ($(obj).hasClass("l-tab-links-item-close")) return false;
  11667. },
  11668. onDrag: function (current, e)
  11669. {
  11670. if (g.dropIn == null)
  11671. g.dropIn = -1;
  11672. var tabItems = g.tab.links.ul.find('>li');
  11673. var targetIndex = tabItems.index(current.target);
  11674. tabItems.each(function (i, item)
  11675. {
  11676. if (targetIndex == i)
  11677. {
  11678. return;
  11679. }
  11680. var isAfter = i > targetIndex;
  11681. if (g.dropIn != -1 && g.dropIn != i) return;
  11682. var offset = $(this).offset();
  11683. var range = {
  11684. top: offset.top,
  11685. bottom: offset.top + $(this).height(),
  11686. left: offset.left - 10,
  11687. right: offset.left + 10
  11688. };
  11689. if (isAfter)
  11690. {
  11691. range.left += $(this).width();
  11692. range.right += $(this).width();
  11693. }
  11694. var pageX = e.pageX || e.screenX;
  11695. var pageY = e.pageY || e.screenY;
  11696. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  11697. {
  11698. g.droptip.css({
  11699. left: range.left + 5,
  11700. top: range.top - 9
  11701. }).show();
  11702. g.dropIn = i;
  11703. g.dragproxy.find(".l-drop-icon").removeClass("l-drop-no").addClass("l-drop-yes");
  11704. }
  11705. else
  11706. {
  11707. g.dropIn = -1;
  11708. g.droptip.hide();
  11709. g.dragproxy.find(".l-drop-icon").removeClass("l-drop-yes").addClass("l-drop-no");
  11710. }
  11711. });
  11712. },
  11713. onStopDrag: function (current, e)
  11714. {
  11715. if (g.dropIn > -1)
  11716. {
  11717. var to = g.tab.links.ul.find('>li:eq(' + g.dropIn + ')').attr("tabid");
  11718. var from = $(current.target).attr("tabid");
  11719. setTimeout(function ()
  11720. {
  11721. g.moveTabItem(from, to);
  11722. }, 0);
  11723. g.dropIn = -1;
  11724. g.dragproxy.remove();
  11725. }
  11726. g.droptip.hide();
  11727. this.set('cursor', 'default');
  11728. }
  11729. });
  11730. return drag;
  11731. },
  11732. _setDragToMove: function (value)
  11733. {
  11734. if (!$.fn.ligerDrag) return; //需要ligerDrag的支持
  11735. var g = this, p = this.options;
  11736. if (value)
  11737. {
  11738. if (g.drags) return;
  11739. g.drags = g.drags || [];
  11740. g.tab.links.ul.find('>li').each(function ()
  11741. {
  11742. g.drags.push(g._applyDrag(this));
  11743. });
  11744. }
  11745. },
  11746. moveTabItem: function (fromTabItemID, toTabItemID)
  11747. {
  11748. var g = this;
  11749. var from = g.tab.links.ul.find(">li[tabid=" + fromTabItemID + "]");
  11750. var to = g.tab.links.ul.find(">li[tabid=" + toTabItemID + "]");
  11751. var index1 = g.tab.links.ul.find(">li").index(from);
  11752. var index2 = g.tab.links.ul.find(">li").index(to);
  11753. if (index1 < index2)
  11754. {
  11755. to.after(from);
  11756. }
  11757. else
  11758. {
  11759. to.before(from);
  11760. }
  11761. },
  11762. //设置tab按钮(左和右),显示返回true,隐藏返回false
  11763. setTabButton: function ()
  11764. {
  11765. var g = this, p = this.options;
  11766. var sumwidth = 0;
  11767. $("li", g.tab.links.ul).each(function ()
  11768. {
  11769. sumwidth += $(this).width() + 2;
  11770. });
  11771. var mainwidth = g.tab.width();
  11772. if (sumwidth > mainwidth)
  11773. {
  11774. g.tab.links.append('<div class="l-tab-links-left"></div><div class="l-tab-links-right"></div>');
  11775. g.setTabButtonEven();
  11776. return true;
  11777. } else
  11778. {
  11779. g.tab.links.ul.animate({ left: 0 });
  11780. $(".l-tab-links-left,.l-tab-links-right", g.tab.links).remove();
  11781. return false;
  11782. }
  11783. },
  11784. //设置左右按钮的事件 标签超出最大宽度时,可左右拖动
  11785. setTabButtonEven: function ()
  11786. {
  11787. var g = this, p = this.options;
  11788. $(".l-tab-links-left", g.tab.links).hover(function ()
  11789. {
  11790. $(this).addClass("l-tab-links-left-over");
  11791. }, function ()
  11792. {
  11793. $(this).removeClass("l-tab-links-left-over");
  11794. }).click(function ()
  11795. {
  11796. g.moveToPrevTabItem();
  11797. });
  11798. $(".l-tab-links-right", g.tab.links).hover(function ()
  11799. {
  11800. $(this).addClass("l-tab-links-right-over");
  11801. }, function ()
  11802. {
  11803. $(this).removeClass("l-tab-links-right-over");
  11804. }).click(function ()
  11805. {
  11806. g.moveToNextTabItem();
  11807. });
  11808. },
  11809. //切换到上一个tab
  11810. moveToPrevTabItem: function ()
  11811. {
  11812. var g = this, p = this.options;
  11813. var btnWitdth = $(".l-tab-links-left", g.tab.links).width();
  11814. var leftList = new Array(); //记录每个tab的left,由左到右
  11815. $("li", g.tab.links).each(function (i, item)
  11816. {
  11817. var currentItemLeft = -1 * btnWitdth;
  11818. if (i > 0)
  11819. {
  11820. currentItemLeft = parseInt(leftList[i - 1]) + $(this).prev().width() + 2;
  11821. }
  11822. leftList.push(currentItemLeft);
  11823. });
  11824. var currentLeft = -1 * parseInt(g.tab.links.ul.css("left"));
  11825. for (var i = 0; i < leftList.length - 1; i++)
  11826. {
  11827. if (leftList[i] < currentLeft && leftList[i + 1] >= currentLeft)
  11828. {
  11829. g.tab.links.ul.animate({ left: -1 * parseInt(leftList[i]) });
  11830. return;
  11831. }
  11832. }
  11833. },
  11834. //切换到下一个tab
  11835. moveToNextTabItem: function ()
  11836. {
  11837. var g = this, p = this.options;
  11838. var btnWitdth = $(".l-tab-links-right", g.tab).width();
  11839. var sumwidth = 0;
  11840. var tabItems = $("li", g.tab.links.ul);
  11841. tabItems.each(function ()
  11842. {
  11843. sumwidth += $(this).width() + 2;
  11844. });
  11845. var mainwidth = g.tab.width();
  11846. var leftList = new Array(); //记录每个tab的left,由右到左
  11847. for (var i = tabItems.length - 1; i >= 0; i--)
  11848. {
  11849. var currentItemLeft = sumwidth - mainwidth + btnWitdth + 2;
  11850. if (i != tabItems.length - 1)
  11851. {
  11852. currentItemLeft = parseInt(leftList[tabItems.length - 2 - i]) - $(tabItems[i + 1]).width() - 2;
  11853. }
  11854. leftList.push(currentItemLeft);
  11855. }
  11856. var currentLeft = -1 * parseInt(g.tab.links.ul.css("left"));
  11857. for (var j = 1; j < leftList.length; j++)
  11858. {
  11859. if (leftList[j] <= currentLeft && leftList[j - 1] > currentLeft)
  11860. {
  11861. g.tab.links.ul.animate({ left: -1 * parseInt(leftList[j - 1]) });
  11862. return;
  11863. }
  11864. }
  11865. },
  11866. getTabItemCount: function ()
  11867. {
  11868. var g = this, p = this.options;
  11869. return $("li", g.tab.links.ul).length;
  11870. },
  11871. getSelectedTabItemID: function ()
  11872. {
  11873. var g = this, p = this.options;
  11874. return $("li.l-selected", g.tab.links.ul).attr("tabid");
  11875. },
  11876. removeSelectedTabItem: function ()
  11877. {
  11878. var g = this, p = this.options;
  11879. g.removeTabItem(g.getSelectedTabItemID());
  11880. },
  11881. //覆盖选择的tabitem
  11882. overrideSelectedTabItem: function (options)
  11883. {
  11884. var g = this, p = this.options;
  11885. g.overrideTabItem(g.getSelectedTabItemID(), options);
  11886. },
  11887. //覆盖
  11888. overrideTabItem: function (targettabid, options)
  11889. {
  11890. var g = this, p = this.options;
  11891. if (g.trigger('beforeOverrideTabItem', [targettabid]) == false)
  11892. return false;
  11893. var tabid = options.tabid;
  11894. if (tabid == undefined) tabid = g.getNewTabid();
  11895. var url = options.url;
  11896. var content = options.content;
  11897. var target = options.target;
  11898. var text = options.text;
  11899. var showClose = options.showClose;
  11900. var height = options.height;
  11901. //如果已经存在
  11902. if (g.isTabItemExist(tabid))
  11903. {
  11904. return;
  11905. }
  11906. var tabitem = $("li[tabid='" + targettabid + "']", g.tab.links.ul);
  11907. var contentitem = $(".l-tab-content-item[tabid='" + targettabid + "']", g.tab.content);
  11908. if (!tabitem || !contentitem) return;
  11909. tabitem.attr("tabid", tabid);
  11910. contentitem.attr("tabid", tabid);
  11911. if ($("iframe", contentitem).length == 0 && url)
  11912. {
  11913. contentitem.html("<iframe frameborder='0' ></iframe>");
  11914. }
  11915. else if (content)
  11916. {
  11917. contentitem.html(content);
  11918. }
  11919. $("iframe", contentitem).attr("name", tabid);
  11920. if (showClose == undefined) showClose = true;
  11921. if (showClose == false) $(".l-tab-links-item-close", tabitem).remove();
  11922. else
  11923. {
  11924. if ($(".l-tab-links-item-close", tabitem).length == 0)
  11925. tabitem.append("<div class='l-tab-links-item-close'></div>");
  11926. }
  11927. if (text == undefined) text = tabid;
  11928. if (height) contentitem.height(height);
  11929. $("a", tabitem).text(text);
  11930. $("iframe", contentitem).attr("src", url);
  11931. g.trigger('afterOverrideTabItem', [targettabid]);
  11932. },
  11933. //选中tab项
  11934. selectTabItem: function (tabid)
  11935. {
  11936. var g = this, p = this.options;
  11937. if (g.trigger('beforeSelectTabItem', [tabid]) == false)
  11938. return false;
  11939. g.selectedTabId = tabid;
  11940. $("> .l-tab-content-item[tabid='" + tabid + "']", g.tab.content).show().siblings().hide();
  11941. $("li[tabid='" + tabid + "']", g.tab.links.ul).addClass("l-selected").siblings().removeClass("l-selected");
  11942. g.trigger('afterSelectTabItem', [tabid]);
  11943. },
  11944. //移动到最后一个tab
  11945. moveToLastTabItem: function ()
  11946. {
  11947. var g = this, p = this.options;
  11948. var sumwidth = 0;
  11949. $("li", g.tab.links.ul).each(function ()
  11950. {
  11951. sumwidth += $(this).width() + 2;
  11952. });
  11953. var mainwidth = g.tab.width();
  11954. if (sumwidth > mainwidth)
  11955. {
  11956. var btnWitdth = $(".l-tab-links-right", g.tab.links).width();
  11957. g.tab.links.ul.animate({ left: -1 * (sumwidth - mainwidth + btnWitdth + 2) });
  11958. }
  11959. },
  11960. //移动到第一个tab
  11961. moveToFirstTabItem: function ()
  11962. {
  11963. var g = this, p = this.options;
  11964. var sumwidth = 0;
  11965. $("li", g.tab.links.ul).each(function ()
  11966. {
  11967. sumwidth += $(this).width() + 2;
  11968. });
  11969. var mainwidth = g.tab.width();
  11970. if (sumwidth > mainwidth)
  11971. {
  11972. var btnWitdth = $(".l-tab-links-right", g.tab.links).width();
  11973. g.tab.links.ul.animate({ left: btnWitdth});
  11974. }
  11975. },
  11976. //判断tab是否存在
  11977. isTabItemExist: function (tabid)
  11978. {
  11979. var g = this, p = this.options;
  11980. return $("li[tabid='" + tabid + "']", g.tab.links.ul).length > 0;
  11981. },
  11982. //增加一个tab
  11983. addTabItem: function (options)
  11984. {
  11985. var g = this, p = this.options;
  11986. if (g.trigger('beforeAddTabItem', [tabid]) == false)
  11987. return false;
  11988. var tabid = options.tabid;
  11989. if (tabid == undefined) tabid = g.getNewTabid();
  11990. var url = options.url;
  11991. var content = options.content;
  11992. var text = options.text;
  11993. var showClose = options.showClose;
  11994. var height = options.height;
  11995. var isMove = options.isMove;
  11996. //如果已经存在
  11997. if (g.isTabItemExist(tabid))
  11998. {
  11999. g.selectTabItem(tabid);
  12000. return;
  12001. }
  12002. var iframeName = " name="+tabid;
  12003. 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>");
  12004. var contentitem = $("<div class='l-tab-content-item'><div class='l-tab-loading' style='display:block;'></div><iframe "+iframeName+" frameborder='0'></iframe></div>");
  12005. var iframeloading = $("div:first", contentitem);
  12006. var iframe = $("iframe:first", contentitem);
  12007. if (g.makeFullHeight)
  12008. {
  12009. var newheight = g.tab.height() - g.tab.links.height();
  12010. contentitem.height(newheight);
  12011. }
  12012. tabitem.attr("title", text);
  12013. tabitem.attr("tabid", tabid);
  12014. contentitem.attr("tabid", tabid);
  12015. if (url)
  12016. {
  12017. $(iframe).attr("name", tabid);
  12018. iframe.attr("id", tabid)
  12019. .attr("src", url)
  12020. .bind('load.tab', function ()
  12021. {
  12022. iframeloading.hide();
  12023. if (options.callback)
  12024. options.callback();
  12025. });
  12026. }
  12027. else
  12028. {
  12029. iframe.remove();
  12030. iframeloading.remove();
  12031. }
  12032. if (content)
  12033. {
  12034. contentitem.html(content);
  12035. }
  12036. else if (options.target)
  12037. {
  12038. contentitem.append(options.target);
  12039. }
  12040. if (showClose == undefined) showClose = true;
  12041. if (showClose == false) $(".l-tab-links-item-close", tabitem).remove();
  12042. if (text == undefined) text = tabid;
  12043. if (height) contentitem.height(height);
  12044. $("a", tabitem).text(text);
  12045. g.tab.links.ul.append(tabitem);
  12046. g.tab.content.append(contentitem);
  12047. g.selectTabItem(tabid);
  12048. if (g.setTabButton()&&isMove)
  12049. {
  12050. g.moveToLastTabItem();
  12051. }
  12052. if(!isMove){
  12053. g.moveToFirstTabItem();
  12054. }
  12055. //增加事件
  12056. g._addTabItemEvent(tabitem);
  12057. if (p.dragToMove && $.fn.ligerDrag)
  12058. {
  12059. g.drags = g.drags || [];
  12060. tabitem.each(function ()
  12061. {
  12062. g.drags.push(g._applyDrag(this));
  12063. });
  12064. }
  12065. g.trigger('afterAddTabItem', [tabid]);
  12066. },
  12067. _addTabItemEvent: function (tabitem)
  12068. {
  12069. var g = this, p = this.options;
  12070. tabitem.click(function ()
  12071. {
  12072. var tabid = $(this).attr("tabid");
  12073. g.selectTabItem(tabid);
  12074. });
  12075. //右键事件支持
  12076. g.tab.menu && g._addTabItemContextMenuEven(tabitem);
  12077. $(".l-tab-links-item-close", tabitem).hover(function ()
  12078. {
  12079. $(this).addClass("l-tab-links-item-close-over");
  12080. }, function ()
  12081. {
  12082. $(this).removeClass("l-tab-links-item-close-over");
  12083. }).click(function ()
  12084. {
  12085. var tabid = $(this).parent().attr("tabid");
  12086. g.removeTabItem(tabid);
  12087. });
  12088. },
  12089. //移除tab项
  12090. removeTabItem: function (tabid)
  12091. {
  12092. var g = this, p = this.options;
  12093. if (g.trigger('beforeRemoveTabItem', [tabid]) == false)
  12094. return false;
  12095. var currentIsSelected = $("li[tabid='" + tabid + "']", g.tab.links.ul).hasClass("l-selected");
  12096. if (currentIsSelected)
  12097. {
  12098. $(".l-tab-content-item[tabid='" + tabid + "']", g.tab.content).prev().show();
  12099. $("li[tabid='" + tabid + "']", g.tab.links.ul).prev().addClass("l-selected").siblings().removeClass("l-selected");
  12100. }
  12101. $(".l-tab-content-item[tabid='" + tabid + "']", g.tab.content).remove();
  12102. $("li[tabid='" + tabid + "']", g.tab.links.ul).remove();
  12103. g.setTabButton();
  12104. g.trigger('afterRemoveTabItem', [tabid]);
  12105. },
  12106. addHeight: function (heightDiff)
  12107. {
  12108. var g = this, p = this.options;
  12109. var newHeight = g.tab.height() + heightDiff;
  12110. g.setHeight(newHeight);
  12111. },
  12112. setHeight: function (height)
  12113. {
  12114. var g = this, p = this.options;
  12115. g.tab.height(height);
  12116. g.setContentHeight();
  12117. },
  12118. setContentHeight: function ()
  12119. {
  12120. var g = this, p = this.options;
  12121. var newheight = g.tab.height() - g.tab.links.height();
  12122. g.tab.content.height(newheight);
  12123. $("> .l-tab-content-item", g.tab.content).height(newheight);
  12124. },
  12125. getNewTabid: function ()
  12126. {
  12127. var g = this, p = this.options;
  12128. g.getnewidcount = g.getnewidcount || 0;
  12129. return 'tabitem' + (++g.getnewidcount);
  12130. },
  12131. //notabid 过滤掉tabid的
  12132. //noclose 过滤掉没有关闭按钮的
  12133. getTabidList: function (notabid, noclose)
  12134. {
  12135. var g = this, p = this.options;
  12136. var tabidlist = [];
  12137. $("> li", g.tab.links.ul).each(function ()
  12138. {
  12139. if ($(this).attr("tabid")
  12140. && $(this).attr("tabid") != notabid
  12141. && (!noclose || $(".l-tab-links-item-close", this).length > 0))
  12142. {
  12143. tabidlist.push($(this).attr("tabid"));
  12144. }
  12145. });
  12146. return tabidlist;
  12147. },
  12148. removeOther: function (tabid, compel)
  12149. {
  12150. var g = this, p = this.options;
  12151. var tabidlist = g.getTabidList(tabid, true);
  12152. $(tabidlist).each(function ()
  12153. {
  12154. g.removeTabItem(this);
  12155. });
  12156. },
  12157. reload: function (tabid)
  12158. {
  12159. var g = this, p = this.options;
  12160. var contentitem = $(".l-tab-content-item[tabid='" + tabid + "']");
  12161. var iframeloading = $(".l-tab-loading:first", contentitem);
  12162. var iframe = $("iframe:first", contentitem);
  12163. var url = $(iframe).attr("src");
  12164. iframeloading.show();
  12165. iframe.attr("src", url).unbind('load.tab').bind('load.tab', function ()
  12166. {
  12167. iframeloading.hide();
  12168. });
  12169. },
  12170. removeAll: function (compel)
  12171. {
  12172. var g = this, p = this.options;
  12173. var tabidlist = g.getTabidList(null, true);
  12174. $(tabidlist).each(function ()
  12175. {
  12176. g.removeTabItem(this);
  12177. });
  12178. },
  12179. onResize: function ()
  12180. {
  12181. var g = this, p = this.options;
  12182. if (!p.height || typeof (p.height) != 'string' || p.height.indexOf('%') == -1) return false;
  12183. //set tab height
  12184. if (g.tab.parent()[0].tagName.toLowerCase() == "body")
  12185. {
  12186. var windowHeight = $(window).height();
  12187. windowHeight -= parseInt(g.tab.parent().css('paddingTop'));
  12188. windowHeight -= parseInt(g.tab.parent().css('paddingBottom'));
  12189. g.height = p.heightDiff + windowHeight * parseFloat(g.height) * 0.01;
  12190. }
  12191. else
  12192. {
  12193. g.height = p.heightDiff + (g.tab.parent().height() * parseFloat(p.height) * 0.01);
  12194. }
  12195. g.tab.height(g.height);
  12196. g.setContentHeight();
  12197. },
  12198. _menuItemClick: function (item)
  12199. {
  12200. var g = this, p = this.options;
  12201. if (!item.id || !g.actionTabid) return;
  12202. switch (item.id)
  12203. {
  12204. case "close":
  12205. g.removeTabItem(g.actionTabid);
  12206. g.actionTabid = null;
  12207. break;
  12208. case "closeother":
  12209. g.removeOther(g.actionTabid);
  12210. break;
  12211. case "closeall":
  12212. g.removeAll();
  12213. g.actionTabid = null;
  12214. break;
  12215. case "reload":
  12216. g.selectTabItem(g.actionTabid);
  12217. g.reload(g.actionTabid);
  12218. break;
  12219. }
  12220. },
  12221. _addTabItemContextMenuEven: function (tabitem)
  12222. {
  12223. var g = this, p = this.options;
  12224. tabitem.bind("contextmenu", function (e)
  12225. {
  12226. if (!g.tab.menu) return;
  12227. g.actionTabid = tabitem.attr("tabid");
  12228. g.tab.menu.show({ top: e.pageY, left: e.pageX });
  12229. if ($(".l-tab-links-item-close", this).length == 0)
  12230. {
  12231. g.tab.menu.setDisabled('close');
  12232. }
  12233. else
  12234. {
  12235. g.tab.menu.setEnabled('close');
  12236. }
  12237. return false;
  12238. });
  12239. }
  12240. });
  12241. })(jQuery);/**
  12242. * jQuery ligerUI 1.1.9
  12243. *
  12244. * http://ligerui.com
  12245. *
  12246. * Author daomi 2012 [ gd_star@163.com ]
  12247. *
  12248. */
  12249. (function ($)
  12250. {
  12251. $.fn.ligerTextBox = function ()
  12252. {
  12253. return $.ligerui.run.call(this, "ligerTextBox", arguments);
  12254. };
  12255. $.fn.ligerGetTextBoxManager = function ()
  12256. {
  12257. return $.ligerui.run.call(this, "ligerGetTextBoxManager", arguments);
  12258. };
  12259. $.ligerDefaults.TextBox = {
  12260. onChangeValue: null,
  12261. width: null,
  12262. disabled: false,
  12263. value: null, //初始化值
  12264. nullText: null, //不能为空时的提示
  12265. digits: false, //是否限定为数字输入框
  12266. number: false //是否限定为浮点数格式输入框
  12267. };
  12268. $.ligerui.controls.TextBox = function (element, options)
  12269. {
  12270. $.ligerui.controls.TextBox.base.constructor.call(this, element, options);
  12271. };
  12272. $.ligerui.controls.TextBox.ligerExtend($.ligerui.controls.Input, {
  12273. __getType: function ()
  12274. {
  12275. return 'TextBox'
  12276. },
  12277. __idPrev: function ()
  12278. {
  12279. return 'TextBox';
  12280. },
  12281. _init: function ()
  12282. {
  12283. $.ligerui.controls.TextBox.base._init.call(this);
  12284. var g = this, p = this.options;
  12285. if (!p.width)
  12286. {
  12287. p.width = $(g.element).width();
  12288. }
  12289. if ($(this.element).attr("readonly"))
  12290. {
  12291. p.disabled = true;
  12292. }
  12293. },
  12294. _render: function ()
  12295. {
  12296. var g = this, p = this.options;
  12297. g.inputText = $(this.element);
  12298. //外层
  12299. g.wrapper = g.inputText.wrap('<div class="l-text"></div>').parent();
  12300. g.wrapper.append('<div class="l-text-l"></div><div class="l-text-r"></div>');
  12301. if (!g.inputText.hasClass("l-text-field"))
  12302. g.inputText.addClass("l-text-field");
  12303. this._setEvent();
  12304. g.set(p);
  12305. g.checkValue();
  12306. },
  12307. _getValue: function ()
  12308. {
  12309. return this.inputText.val();
  12310. },
  12311. _setNullText: function ()
  12312. {
  12313. this.checkNotNull();
  12314. },
  12315. checkValue: function ()
  12316. {
  12317. var g = this, p = this.options;
  12318. var v = g.inputText.val();
  12319. if (p.number && !/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(v) || p.digits && !/^\d+$/.test(v))
  12320. {
  12321. g.inputText.val(g.value || 0);
  12322. return;
  12323. }
  12324. g.value = v;
  12325. },
  12326. checkNotNull: function ()
  12327. {
  12328. var g = this, p = this.options;
  12329. if (p.nullText && !p.disabled)
  12330. {
  12331. if (!g.inputText.val())
  12332. {
  12333. g.inputText.addClass("l-text-field-null").val(p.nullText);
  12334. }
  12335. }
  12336. },
  12337. _setEvent: function ()
  12338. {
  12339. var g = this, p = this.options;
  12340. g.inputText.bind('blur.textBox', function ()
  12341. {
  12342. g.trigger('blur');
  12343. g.checkNotNull();
  12344. g.checkValue();
  12345. g.wrapper.removeClass("l-text-focus");
  12346. }).bind('focus.textBox', function ()
  12347. {
  12348. g.trigger('focus');
  12349. if (p.nullText)
  12350. {
  12351. if ($(this).hasClass("l-text-field-null"))
  12352. {
  12353. $(this).removeClass("l-text-field-null").val("");
  12354. }
  12355. }
  12356. g.wrapper.addClass("l-text-focus");
  12357. })
  12358. .change(function ()
  12359. {
  12360. g.trigger('changeValue', [this.value]);
  12361. });
  12362. g.wrapper.hover(function ()
  12363. {
  12364. g.trigger('mouseOver');
  12365. g.wrapper.addClass("l-text-over");
  12366. }, function ()
  12367. {
  12368. g.trigger('mouseOut');
  12369. g.wrapper.removeClass("l-text-over");
  12370. });
  12371. },
  12372. _setDisabled: function (value)
  12373. {
  12374. if (value)
  12375. {
  12376. this.inputText.attr("readonly", "readonly");
  12377. this.wrapper.addClass("l-text-disabled");
  12378. }
  12379. else
  12380. {
  12381. this.inputText.removeAttr("readonly");
  12382. this.wrapper.removeClass('l-text-disabled');
  12383. }
  12384. },
  12385. _setWidth: function (value)
  12386. {
  12387. if (value > 20)
  12388. {
  12389. this.wrapper.css({ width: value });
  12390. this.inputText.css({ width: value - 4 });
  12391. }
  12392. },
  12393. _setHeight: function (value)
  12394. {
  12395. if (value > 10)
  12396. {
  12397. this.wrapper.height(value);
  12398. this.inputText.height(value - 2);
  12399. }
  12400. },
  12401. _setValue: function (value)
  12402. {
  12403. if (value != null)
  12404. this.inputText.val(value);
  12405. },
  12406. _setLabel: function (value)
  12407. {
  12408. var g = this, p = this.options;
  12409. if (!g.labelwrapper)
  12410. {
  12411. g.labelwrapper = g.wrapper.wrap('<div class="l-labeltext"></div>').parent();
  12412. var lable = $('<div class="l-text-label" style="float:left;">' + value + ':&nbsp</div>');
  12413. g.labelwrapper.prepend(lable);
  12414. g.wrapper.css('float', 'left');
  12415. if (!p.labelWidth)
  12416. {
  12417. p.labelWidth = lable.width();
  12418. }
  12419. else
  12420. {
  12421. g._setLabelWidth(p.labelWidth);
  12422. }
  12423. lable.height(g.wrapper.height());
  12424. if (p.labelAlign)
  12425. {
  12426. g._setLabelAlign(p.labelAlign);
  12427. }
  12428. g.labelwrapper.append('<br style="clear:both;" />');
  12429. g.labelwrapper.width(p.labelWidth + p.width + 2);
  12430. }
  12431. else
  12432. {
  12433. g.labelwrapper.find(".l-text-label").html(value + ':&nbsp');
  12434. }
  12435. },
  12436. _setLabelWidth: function (value)
  12437. {
  12438. var g = this, p = this.options;
  12439. if (!g.labelwrapper) return;
  12440. g.labelwrapper.find(".l-text-label").width(value);
  12441. },
  12442. _setLabelAlign: function (value)
  12443. {
  12444. var g = this, p = this.options;
  12445. if (!g.labelwrapper) return;
  12446. g.labelwrapper.find(".l-text-label").css('text-align', value);
  12447. },
  12448. updateStyle: function ()
  12449. {
  12450. var g = this, p = this.options;
  12451. if (g.inputText.attr('disabled') || g.inputText.attr('readonly'))
  12452. {
  12453. g.wrapper.addClass("l-text-disabled");
  12454. g.options.disabled = true;
  12455. }
  12456. else
  12457. {
  12458. g.wrapper.removeClass("l-text-disabled");
  12459. g.options.disabled = false;
  12460. }
  12461. if (g.inputText.hasClass("l-text-field-null") && g.inputText.val() != p.nullText)
  12462. {
  12463. g.inputText.removeClass("l-text-field-null");
  12464. }
  12465. g.checkValue();
  12466. }
  12467. });
  12468. })(jQuery);/**
  12469. * jQuery ligerUI 1.1.9
  12470. *
  12471. * http://ligerui.com
  12472. *
  12473. * Author daomi 2012 [ gd_star@163.com ]
  12474. *
  12475. */
  12476. (function ($)
  12477. {
  12478. //气泡,可以在制定位置显示
  12479. $.ligerTip = function (p)
  12480. {
  12481. return $.ligerui.run.call(null, "ligerTip", arguments);
  12482. };
  12483. //在指定Dom Element右侧显示气泡
  12484. //target:将ligerui对象ID附加上
  12485. $.fn.ligerTip = function (options)
  12486. {
  12487. this.each(function ()
  12488. {
  12489. var p = $.extend({}, $.ligerDefaults.ElementTip, options || {});
  12490. p.target = p.target || this;
  12491. //如果是自动模式:鼠标经过时显示,移开时关闭
  12492. if (p.auto || options == undefined)
  12493. {
  12494. if (!p.content)
  12495. {
  12496. p.content = this.title;
  12497. if (p.removeTitle)
  12498. $(this).removeAttr("title");
  12499. }
  12500. p.content = p.content || this.title;
  12501. $(this).bind('mouseover.tip', function ()
  12502. {
  12503. p.x = $(this).offset().left + $(this).width() + (p.distanceX || 0);
  12504. p.y = $(this).offset().top + (p.distanceY || 0);
  12505. $.ligerTip(p);
  12506. }).bind('mouseout.tip', function ()
  12507. {
  12508. var tipmanager = $.ligerui.managers[this.ligeruitipid];
  12509. if (tipmanager)
  12510. {
  12511. tipmanager.remove();
  12512. }
  12513. });
  12514. }
  12515. else
  12516. {
  12517. if (p.target.ligeruitipid) return;
  12518. p.x = $(this).offset().left + $(this).width() + (p.distanceX || 0);
  12519. p.y = $(this).offset().top + (p.distanceY || 0);
  12520. p.x = p.x || 0;
  12521. p.y = p.y || 0;
  12522. $.ligerTip(p);
  12523. }
  12524. });
  12525. return $.ligerui.get(this, 'ligeruitipid');
  12526. };
  12527. //关闭指定在Dom Element(附加了ligerui对象ID,属性名"ligeruitipid")显示的气泡
  12528. $.fn.ligerHideTip = function (options)
  12529. {
  12530. return this.each(function ()
  12531. {
  12532. var p = options || {};
  12533. if (p.isLabel == undefined)
  12534. {
  12535. //如果是lable,将查找指定的input,并找到ligerui对象ID
  12536. p.isLabel = this.tagName.toLowerCase() == "label" && $(this).attr("for") != null;
  12537. }
  12538. var target = this;
  12539. if (p.isLabel)
  12540. {
  12541. var forele = $("#" + $(this).attr("for"));
  12542. if (forele.length == 0) return;
  12543. target = forele[0];
  12544. }
  12545. var tipmanager = $.ligerui.managers[target.ligeruitipid];
  12546. if (tipmanager)
  12547. {
  12548. tipmanager.remove();
  12549. }
  12550. }).unbind('mouseover.tip').unbind('mouseout.tip');
  12551. };
  12552. $.fn.ligerGetTipManager = function ()
  12553. {
  12554. return $.ligerui.get(this);
  12555. };
  12556. $.ligerDefaults = $.ligerDefaults || {};
  12557. //隐藏气泡
  12558. $.ligerDefaults.HideTip = {};
  12559. //气泡
  12560. $.ligerDefaults.Tip = {
  12561. content: null,
  12562. callback: null,
  12563. width: 150,
  12564. height: null,
  12565. x: 0,
  12566. y: 0,
  12567. appendIdTo: null, //保存ID到那一个对象(jQuery)(待移除)
  12568. target: null,
  12569. auto: null, //是否自动模式,如果是,那么:鼠标经过时显示,移开时关闭,并且当content为空时自动读取attr[title]
  12570. removeTitle: true //自动模式时,默认是否移除掉title
  12571. };
  12572. //在指定Dom Element右侧显示气泡,通过$.fn.ligerTip调用
  12573. $.ligerDefaults.ElementTip = {
  12574. distanceX: 1,
  12575. distanceY: -3,
  12576. auto: null,
  12577. removeTitle: true
  12578. };
  12579. $.ligerMethos.Tip = {};
  12580. $.ligerui.controls.Tip = function (options)
  12581. {
  12582. $.ligerui.controls.Tip.base.constructor.call(this, null, options);
  12583. };
  12584. $.ligerui.controls.Tip.ligerExtend($.ligerui.core.UIComponent, {
  12585. __getType: function ()
  12586. {
  12587. return 'Tip';
  12588. },
  12589. __idPrev: function ()
  12590. {
  12591. return 'Tip';
  12592. },
  12593. _extendMethods: function ()
  12594. {
  12595. return $.ligerMethos.Tip;
  12596. },
  12597. _render: function ()
  12598. {
  12599. var g = this, p = this.options;
  12600. var tip = $('<div class="l-verify-tip"><div class="l-verify-tip-corner"></div><div class="l-verify-tip-content"></div></div>');
  12601. g.tip = tip;
  12602. g.tip.attr("id", g.id);
  12603. if (p.content)
  12604. {
  12605. $("> .l-verify-tip-content:first", tip).html(p.content);
  12606. tip.appendTo('body');
  12607. }
  12608. else
  12609. {
  12610. return;
  12611. }
  12612. tip.css({ left: p.x, top: p.y }).show();
  12613. p.width && $("> .l-verify-tip-content:first", tip).width(p.width - 8);
  12614. p.height && $("> .l-verify-tip-content:first", tip).width(p.height);
  12615. eee = p.appendIdTo;
  12616. if (p.appendIdTo)
  12617. {
  12618. p.appendIdTo.attr("ligerTipId", g.id);
  12619. }
  12620. if (p.target)
  12621. {
  12622. $(p.target).attr("ligerTipId", g.id);
  12623. p.target.ligeruitipid = g.id;
  12624. }
  12625. p.callback && p.callback(tip);
  12626. g.set(p);
  12627. },
  12628. _setContent: function (content)
  12629. {
  12630. $("> .l-verify-tip-content:first", this.tip).html(content);
  12631. },
  12632. remove: function ()
  12633. {
  12634. if (this.options.appendIdTo)
  12635. {
  12636. this.options.appendIdTo.removeAttr("ligerTipId");
  12637. }
  12638. if (this.options.target)
  12639. {
  12640. $(this.options.target).removeAttr("ligerTipId");
  12641. this.options.target.ligeruitipid = null;
  12642. }
  12643. this.tip.remove();
  12644. }
  12645. });
  12646. })(jQuery);/**
  12647. * jQuery ligerUI 1.1.9
  12648. *
  12649. * http://ligerui.com
  12650. *
  12651. * Author daomi 2012 [ gd_star@163.com ]
  12652. *
  12653. */
  12654. (function ($)
  12655. {
  12656. $.fn.ligerToolBar = function (options)
  12657. {
  12658. return $.ligerui.run.call(this, "ligerToolBar", arguments);
  12659. };
  12660. $.fn.ligerGetToolBarManager = function ()
  12661. {
  12662. return $.ligerui.run.call(this, "ligerGetToolBarManager", arguments);
  12663. };
  12664. $.ligerDefaults.ToolBar = {};
  12665. $.ligerMethos.ToolBar = {};
  12666. $.ligerui.controls.ToolBar = function (element, options)
  12667. {
  12668. $.ligerui.controls.ToolBar.base.constructor.call(this, element, options);
  12669. };
  12670. $.ligerui.controls.ToolBar.ligerExtend($.ligerui.core.UIComponent, {
  12671. __getType: function ()
  12672. {
  12673. return 'ToolBar';
  12674. },
  12675. __idPrev: function ()
  12676. {
  12677. return 'ToolBar';
  12678. },
  12679. _extendMethods: function ()
  12680. {
  12681. return $.ligerMethos.ToolBar;
  12682. },
  12683. _render: function ()
  12684. {
  12685. var g = this, p = this.options;
  12686. g.toolBar = $(this.element);
  12687. g.toolBar.addClass("l-toolbar");
  12688. g.set(p);
  12689. },
  12690. _setItems: function (items)
  12691. {
  12692. var g = this;
  12693. $(items).each(function (i, item)
  12694. {
  12695. g.addItem(item);
  12696. });
  12697. },
  12698. addItem: function (item)
  12699. {
  12700. var g = this, p = this.options;
  12701. if (item.line)
  12702. {
  12703. g.toolBar.append('<div class="l-bar-separator"></div>');
  12704. return;
  12705. }
  12706. 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>');
  12707. g.toolBar.append(ditem);
  12708. item.id && ditem.attr("toolbarid", item.id);
  12709. if (item.img)
  12710. {
  12711. ditem.append("<img src='" + item.img + "' />");
  12712. ditem.addClass("l-toolbar-item-hasicon");
  12713. }
  12714. else if (item.icon)
  12715. {
  12716. ditem.append("<div class='l-icon l-icon-" + item.icon + "'></div>");
  12717. ditem.addClass("l-toolbar-item-hasicon");
  12718. }
  12719. item.text && $("span:first", ditem).html(item.text);
  12720. item.disable && ditem.addClass("l-toolbar-item-disable");
  12721. item.click && ditem.click(function () { item.click(item); });
  12722. ditem.hover(function ()
  12723. {
  12724. $(this).addClass("l-panel-btn-over");
  12725. }, function ()
  12726. {
  12727. $(this).removeClass("l-panel-btn-over");
  12728. });
  12729. }
  12730. });
  12731. })(jQuery);/**
  12732. * jQuery ligerUI 1.1.9
  12733. *
  12734. * http://ligerui.com
  12735. *
  12736. * Author daomi 2012 [ gd_star@163.com ]
  12737. *
  12738. */
  12739. (function ($)
  12740. {
  12741. $.fn.ligerTree = function (options)
  12742. {
  12743. return $.ligerui.run.call(this, "ligerTree", arguments);
  12744. };
  12745. $.fn.ligerGetTreeManager = function ()
  12746. {
  12747. return $.ligerui.run.call(this, "ligerGetTreeManager", arguments);
  12748. };
  12749. $.ligerDefaults.Tree = {
  12750. url: null,
  12751. data: null,
  12752. checkbox: true,
  12753. autoCheckboxEven: true,
  12754. parentIcon: 'folder',
  12755. folderCheckbox:true,
  12756. childIcon: 'leaf',
  12757. textFieldName: 'text',
  12758. attribute: ['id', 'url'],
  12759. treeLine: true, //是否显示line
  12760. nodeWidth: 90,
  12761. root:'',
  12762. statusName: '__status',
  12763. isLeaf: null, //是否子节点的判断函数
  12764. single: false, //是否单选
  12765. openFolderEven:false, //是否点击非叶节点文本时展开
  12766. onBeforeExpand: function () { },
  12767. onContextmenu: function () { },
  12768. onExpand: function () { },
  12769. onBeforeCollapse: function () { },
  12770. onCollapse: function () { },
  12771. onBeforeSelect: function () { },
  12772. onSelect: function () { },
  12773. onBeforeCancelSelect: function () { },
  12774. onCancelselect: function () { },
  12775. onCheck: function () { },
  12776. onSuccess: function () { },
  12777. onError: function () { },
  12778. onClick: function () { },
  12779. idFieldName: 'id',
  12780. parentIDFieldName: null,
  12781. topParentIDValue: 0,
  12782. onBeforeAppend: function () { }, //加载数据前事件,可以通过return false取消操作
  12783. onAppend: function () { }, //加载数据时事件,对数据进行预处理以后
  12784. onAfterAppend: function () { }, //加载数据完事件
  12785. slide: true, //是否以动画的形式显示
  12786. iconFieldName: 'icon',
  12787. nodeDraggable: false, //是否允许拖拽
  12788. nodeDraggingRender: null,
  12789. btnClickToToggleOnly: true, //是否点击展开/收缩 按钮时才有效
  12790. reloadSelected:false
  12791. };
  12792. $.ligerui.controls.Tree = function (element, options)
  12793. {
  12794. $.ligerui.controls.Tree.base.constructor.call(this, element, options);
  12795. };
  12796. $.ligerui.controls.Tree.ligerExtend($.ligerui.core.UIComponent, {
  12797. _init: function ()
  12798. {
  12799. $.ligerui.controls.Tree.base._init.call(this);
  12800. var g = this, p = this.options;
  12801. if (p.single) p.autoCheckboxEven = false;
  12802. },
  12803. _render: function ()
  12804. {
  12805. var g = this, p = this.options;
  12806. g.set(p, true);
  12807. g.tree = $(g.element);
  12808. g.tree.addClass('l-tree');
  12809. g.sysAttribute = ['isexpand', 'ischecked', 'href', 'style'];
  12810. g.loading = $("<div class='l-tree-loading'></div>");
  12811. g.tree.after(g.loading);
  12812. g.data = [];
  12813. g.maxOutlineLevel = 1;
  12814. g.treedataindex = 0;
  12815. g._applyTree();
  12816. g._setTreeEven();
  12817. g.set(p, false);
  12818. },
  12819. _setTreeLine: function (value)
  12820. {
  12821. if (value) this.tree.removeClass("l-tree-noline");
  12822. else this.tree.addClass("l-tree-noline");
  12823. },
  12824. _setUrl: function (url)
  12825. {
  12826. if (url) this.loadData(null, url);
  12827. },
  12828. _setData: function (data)
  12829. {
  12830. if (data) this.append(null, data);
  12831. },
  12832. setData: function (data)
  12833. {
  12834. this.set('data', data);
  12835. },
  12836. getData: function ()
  12837. {
  12838. return this.data;
  12839. },
  12840. //是否包含子节点
  12841. hasChildren: function (treenodedata)
  12842. {
  12843. if (this.options.isLeaf) return this.options.isLeaf(treenodedata);
  12844. return treenodedata.children ? true : false;
  12845. },
  12846. //移到节点 pos:after:下移,before:上移
  12847. move: function (pos){
  12848. var g = this, p = this.options;
  12849. var node = g.getSelected();
  12850. var relaNode = g.getParentNode(node,pos);
  12851. var nearNode = g.getNextNode(node,pos);
  12852. if(!relaNode)return;
  12853. var i = $(relaNode).attr("treedataindex");
  12854. var nodes = [];
  12855. $(node.target).attr("treedataindex","-1");
  12856. nodes.push(node.data);
  12857. if(pos == 'after'){
  12858. g.append(i, nodes,nearNode,true);
  12859. }else{
  12860. g.append(i, nodes,nearNode,false);
  12861. }
  12862. var delNode = g.getNodeDom('-1');
  12863. g.remove(delNode);
  12864. var ix = $(nodes).attr("treedataindex");
  12865. var n = g.getNodeDom(ix);
  12866. g.selectNode(n);
  12867. },
  12868. getNode: function (index){
  12869. var g = this, p = this.options;
  12870. var node = {};
  12871. var nodeDom = g.getNodeDom(index);
  12872. node.target = nodeDom;
  12873. if (node.target)
  12874. {
  12875. node.data = g._getDataNodeByTreeDataIndex(g.data, index);
  12876. return node;
  12877. }
  12878. return null;
  12879. },
  12880. //获取相邻节点
  12881. getNextNode: function (treenode,type)
  12882. {
  12883. var g = this;
  12884. var relaTreeNode;
  12885. treenode = g.getNodeDom(treenode);
  12886. var treeitem = $(treenode);
  12887. if (treeitem.parent().hasClass("l-tree"))
  12888. return null;
  12889. if("after"==type){
  12890. relaTreeNode = $(treenode.target).next("li");
  12891. }else{
  12892. relaTreeNode = $(treenode.target).prev("li");
  12893. }
  12894. if (!relaTreeNode) return null;
  12895. var parentIndex = $(relaTreeNode).attr("treedataindex");
  12896. return g.getNodeDom(parentIndex);
  12897. },
  12898. //获取相邻节点
  12899. getParentNode: function (treenode,type)
  12900. {
  12901. var g = this;
  12902. var relaTreeNode;
  12903. treenode = g.getNodeDom(treenode);
  12904. var treeitem = $(treenode);
  12905. if (treeitem.parent().hasClass("l-tree"))
  12906. return null;
  12907. relaTreeNode = $(treenode.target).parent().parent("li");
  12908. if (!relaTreeNode) return null;
  12909. var parentIndex = $(relaTreeNode).attr("treedataindex");
  12910. return g.getNodeDom(parentIndex);
  12911. },
  12912. //获取父节点 数据
  12913. getParent: function (treenode, level)
  12914. {
  12915. var g = this;
  12916. treenode = g.getNodeDom(treenode);
  12917. var parentTreeNode = g.getParentTreeItem(treenode, level);
  12918. if (!parentTreeNode) return null;
  12919. var parentIndex = $(parentTreeNode).attr("treedataindex");
  12920. return g._getDataNodeByTreeDataIndex(parentIndex);
  12921. },
  12922. //获取父节点
  12923. getParentTreeItem: function (treenode, level)
  12924. {
  12925. var g = this;
  12926. treenode = g.getNodeDom(treenode);
  12927. var treeitem = $(treenode);
  12928. if (treeitem.parent().hasClass("l-tree"))
  12929. return null;
  12930. if (level == undefined)
  12931. {
  12932. if (treeitem.parent().parent("li").length == 0)
  12933. return null;
  12934. return treeitem.parent().parent("li")[0];
  12935. }
  12936. var currentLevel = parseInt(treeitem.attr("outlinelevel"));
  12937. var currenttreeitem = treeitem;
  12938. for (var i = currentLevel - 1; i >= level; i--)
  12939. {
  12940. currenttreeitem = currenttreeitem.parent().parent("li");
  12941. }
  12942. return currenttreeitem[0];
  12943. },
  12944. getChecked: function ()
  12945. {
  12946. var g = this, p = this.options;
  12947. if (!this.options.checkbox) return null;
  12948. var nodes = [];
  12949. $(".l-checkbox-checked", g.tree).parent().parent("li").each(function ()
  12950. {
  12951. var treedataindex = parseInt($(this).attr("treedataindex"));
  12952. nodes.push({ target: this, data: g._getDataNodeByTreeDataIndex(g.data, treedataindex) });
  12953. });
  12954. return nodes;
  12955. },
  12956. getSelected: function ()
  12957. {
  12958. var g = this, p = this.options;
  12959. var node = {};
  12960. node.target = $(".l-selected", g.tree).parent("li")[0];
  12961. if (node.target)
  12962. {
  12963. var treedataindex = parseInt($(node.target).attr("treedataindex"));
  12964. node.data = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  12965. return node;
  12966. }
  12967. return null;
  12968. },
  12969. //升级为父节点级别
  12970. upgrade: function (treeNode)
  12971. {
  12972. var g = this, p = this.options;
  12973. $(".l-note", treeNode).each(function ()
  12974. {
  12975. $(this).removeClass("l-note").addClass("l-expandable-open");
  12976. });
  12977. $(".l-note-last", treeNode).each(function ()
  12978. {
  12979. $(this).removeClass("l-note-last").addClass("l-expandable-open");
  12980. });
  12981. $("." + g._getChildNodeClassName(), treeNode).each(function ()
  12982. {
  12983. $(this)
  12984. .removeClass(g._getChildNodeClassName())
  12985. .addClass(g._getParentNodeClassName(true));
  12986. });
  12987. },
  12988. //降级为叶节点级别
  12989. demotion: function (treeNode)
  12990. {
  12991. var g = this, p = this.options;
  12992. if (!treeNode && treeNode[0].tagName.toLowerCase() != 'li') return;
  12993. var islast = $(treeNode).hasClass("l-last");
  12994. $(".l-expandable-open", treeNode).each(function ()
  12995. {
  12996. $(this).removeClass("l-expandable-open")
  12997. .addClass(islast ? "l-note-last" : "l-note");
  12998. });
  12999. $(".l-expandable-close", treeNode).each(function ()
  13000. {
  13001. $(this).removeClass("l-expandable-close")
  13002. .addClass(islast ? "l-note-last" : "l-note");
  13003. });
  13004. $("." + g._getParentNodeClassName(true), treeNode).each(function ()
  13005. {
  13006. $(this)
  13007. .removeClass(g._getParentNodeClassName(true))
  13008. .addClass(g._getChildNodeClassName());
  13009. });
  13010. },
  13011. collapseAll: function ()
  13012. {
  13013. var g = this, p = this.options;
  13014. $(".l-expandable-open", g.tree).click();
  13015. },
  13016. expandAll: function ()
  13017. {
  13018. var g = this, p = this.options;
  13019. $(".l-expandable-close", g.tree).click();
  13020. },
  13021. expandFirst: function ()
  13022. {
  13023. var g = this, p = this.options;
  13024. var o = $("li:eq(0) .l-body:eq(0) .l-expandable-close", g.tree);
  13025. if(o.length==0){
  13026. o = $("li:eq(0) .l-body:eq(0) .l-note-last", g.tree);
  13027. }
  13028. o.click();
  13029. },
  13030. loadData: function (node, url, param)
  13031. {
  13032. var g = this, p = this.options;
  13033. g.loading.show();
  13034. var ajaxtype = param ? "post" : "get";
  13035. param = param || [];
  13036. //请求服务器
  13037. $.ajax({
  13038. type: ajaxtype,
  13039. url: url,
  13040. data: param,
  13041. dataType: 'json',
  13042. success: function (data)
  13043. {
  13044. if (!data) return;
  13045. g.loading.hide();
  13046. g.append(node, data);
  13047. g.trigger('success', [data]);
  13048. },
  13049. error: function (XMLHttpRequest, textStatus, errorThrown)
  13050. {
  13051. try
  13052. {
  13053. g.loading.hide();
  13054. g.trigger('error', [XMLHttpRequest, textStatus, errorThrown]);
  13055. }
  13056. catch (e)
  13057. {
  13058. }
  13059. }
  13060. });
  13061. },
  13062. //清空
  13063. clear: function ()
  13064. {
  13065. var g = this, p = this.options;
  13066. //g.tree.html("");
  13067. $("> li", g.tree).each(function () { g.remove(this); });
  13068. },
  13069. //@parm [treeNode] dom节点(li)、节点数据 或者节点 dataindex
  13070. getNodeDom: function (nodeParm)
  13071. {
  13072. var g = this, p = this.options;
  13073. if (nodeParm == null) return nodeParm;
  13074. if (typeof (nodeParm) == "string" || typeof (nodeParm) == "number")
  13075. {
  13076. return $("li[treedataindex=" + nodeParm + "]", g.tree).get(0);
  13077. }
  13078. else if (typeof (nodeParm) == "object" && 'treedataindex' in nodeParm) //nodedata
  13079. {
  13080. return g.getNodeDom(nodeParm['treedataindex']);
  13081. }
  13082. return nodeParm;
  13083. },
  13084. //@parm [treeNode] dom节点(li)、节点数据 或者节点 dataindex
  13085. remove: function (treeNode)
  13086. {
  13087. var g = this, p = this.options;
  13088. treeNode = g.getNodeDom(treeNode);
  13089. var treedataindex = parseInt($(treeNode).attr("treedataindex"));
  13090. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13091. if (treenodedata) g._setTreeDataStatus([treenodedata], 'delete');
  13092. var parentNode = g.getParentTreeItem(treeNode);
  13093. //复选框处理
  13094. if (p.checkbox)
  13095. {
  13096. g._setParentCheckboxStatus($(treeNode));
  13097. }
  13098. $(treeNode).remove();
  13099. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  13100. },
  13101. _updateStyle: function (ul)
  13102. {
  13103. var g = this, p = this.options;
  13104. var itmes = $(" > li", ul);
  13105. var treeitemlength = itmes.length;
  13106. if (!treeitemlength) return;
  13107. //遍历设置子节点的样式
  13108. itmes.each(function (i, item)
  13109. {
  13110. if (i == 0 && !$(this).hasClass("l-first"))
  13111. $(this).addClass("l-first");
  13112. if (i == treeitemlength - 1 && !$(this).hasClass("l-last"))
  13113. $(this).addClass("l-last");
  13114. if (i == 0 && i == treeitemlength - 1)
  13115. $(this).addClass("l-onlychild");
  13116. $("> div .l-note,> div .l-note-last", this)
  13117. .removeClass("l-note l-note-last")
  13118. .addClass(i == treeitemlength - 1 ? "l-note-last" : "l-note");
  13119. g._setTreeItem(this, { isLast: i == treeitemlength - 1 });
  13120. });
  13121. },
  13122. //@parm [domnode] dom节点(li)、节点数据 或者节点 dataindex
  13123. update: function (domnode, newnodedata)
  13124. {
  13125. var g = this, p = this.options;
  13126. domnode = g.getNodeDom(domnode);
  13127. var treedataindex = parseInt($(domnode).attr("treedataindex"));
  13128. nodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13129. for (var attr in newnodedata)
  13130. {
  13131. nodedata[attr] = newnodedata[attr];
  13132. if (attr == p.textFieldName)
  13133. {
  13134. $("> .l-body > span", domnode).text(newnodedata[attr]);
  13135. }
  13136. }
  13137. },
  13138. //增加节点集合
  13139. //@parm [newdata] 数据集合 Array
  13140. //@parm [parentNode] dom节点(li)、节点数据 或者节点 dataindex
  13141. //@parm [nearNode] 附加到节点的上方/下方(非必填)
  13142. //@parm [isAfter] 附加到节点的下方(非必填)
  13143. append: function (parentNode, newdata, nearNode, isAfter)
  13144. {
  13145. var g = this, p = this.options;
  13146. parentNode = g.getNodeDom(parentNode);
  13147. if (g.trigger('beforeAppend', [parentNode, newdata]) == false) return false;
  13148. if (!newdata || !newdata.length) return false;
  13149. if (p.idFieldName && p.parentIDFieldName)
  13150. newdata = g.arrayToTree(newdata, p.idFieldName, p.parentIDFieldName);
  13151. g._addTreeDataIndexToData(newdata);
  13152. g._setTreeDataStatus(newdata, 'add');
  13153. if (nearNode != null)
  13154. {
  13155. nearNode = g.getNodeDom(nearNode);
  13156. }
  13157. g.trigger('append', [parentNode, newdata])
  13158. g._appendData(parentNode, newdata);
  13159. if (parentNode == null)//增加到根节点
  13160. {
  13161. var gridhtmlarr = g._getTreeHTMLByData(newdata, 1, [], true);
  13162. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  13163. if (nearNode != null)
  13164. {
  13165. $(nearNode)[isAfter ? 'after' : 'before'](gridhtmlarr.join(''));
  13166. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  13167. }
  13168. else
  13169. {
  13170. //remove last node class
  13171. if ($("> li:last", g.tree).length > 0)
  13172. g._setTreeItem($("> li:last", g.tree)[0], { isLast: false });
  13173. g.tree.append(gridhtmlarr.join(''));
  13174. }
  13175. $(".l-body", g.tree).hover(function ()
  13176. {
  13177. $(this).addClass("l-over");
  13178. }, function ()
  13179. {
  13180. $(this).removeClass("l-over");
  13181. });
  13182. g._upadteTreeWidth();
  13183. g.trigger('afterAppend', [parentNode, newdata])
  13184. return;
  13185. }
  13186. var treeitem = $(parentNode);
  13187. var outlineLevel = parseInt(treeitem.attr("outlinelevel"));
  13188. var hasChildren = $("> ul", treeitem).length > 0;
  13189. if (!hasChildren)
  13190. {
  13191. treeitem.append("<ul class='l-children'></ul>");
  13192. //设置为父节点
  13193. g.upgrade(parentNode);
  13194. }
  13195. var isLast = [];
  13196. for (var i = 1; i <= outlineLevel - 1; i++)
  13197. {
  13198. var currentParentTreeItem = $(g.getParentTreeItem(parentNode, i));
  13199. isLast.push(currentParentTreeItem.hasClass("l-last"));
  13200. }
  13201. isLast.push(treeitem.hasClass("l-last"));
  13202. var gridhtmlarr = g._getTreeHTMLByData(newdata, outlineLevel + 1, isLast, true);
  13203. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  13204. if (nearNode != null)
  13205. {
  13206. $(nearNode)[isAfter ? 'after' : 'before'](gridhtmlarr.join(''));
  13207. g._updateStyle(parentNode ? $("ul:first", parentNode) : g.tree);
  13208. }
  13209. else
  13210. {
  13211. //remove last node class
  13212. if ($("> .l-children > li:last", treeitem).length > 0)
  13213. g._setTreeItem($("> .l-children > li:last", treeitem)[0], { isLast: false });
  13214. $(">.l-children", parentNode).append(gridhtmlarr.join(''));
  13215. }
  13216. g._upadteTreeWidth();
  13217. $(">.l-children .l-body", parentNode).hover(function ()
  13218. {
  13219. $(this).addClass("l-over");
  13220. }, function ()
  13221. {
  13222. $(this).removeClass("l-over");
  13223. });
  13224. g.trigger('afterAppend', [parentNode, newdata]);
  13225. },
  13226. //@parm [nodeParm] dom节点(li)、节点数据 或者节点 dataindex
  13227. cancelSelect: function (nodeParm)
  13228. {
  13229. var g = this, p = this.options;
  13230. var domNode = g.getNodeDom(nodeParm);
  13231. var treeitem = $(domNode);
  13232. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13233. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13234. var treeitembody = $(">div:first", treeitem);
  13235. if (p.checkbox)
  13236. $(".l-checkbox", treeitembody).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13237. else
  13238. treeitembody.removeClass("l-selected");
  13239. g.trigger('cancelSelect', [{ data: treenodedata, target: treeitem[0]}]);
  13240. },
  13241. //选择节点(参数:条件函数、Dom节点或ID值)
  13242. selectNode: function (selectNodeParm)
  13243. {
  13244. var g = this, p = this.options;
  13245. var clause = null;
  13246. if (typeof (selectNodeParm) == "function")
  13247. {
  13248. clause = selectNodeParm;
  13249. }
  13250. else if (typeof (selectNodeParm) == "object")
  13251. {
  13252. var treeitem = $(selectNodeParm);
  13253. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13254. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13255. var treeitembody = $(">div:first", treeitem);
  13256. if (p.checkbox)
  13257. $(".l-checkbox", treeitembody).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  13258. else
  13259. treeitembody.addClass("l-selected");
  13260. g.trigger('select', [{ data: treenodedata, target: treeitem[0]}]);
  13261. return;
  13262. }
  13263. else
  13264. {
  13265. clause = function (data)
  13266. {
  13267. if (!data[p.idFieldName]) return false;
  13268. return data[p.idFieldName].toString() == selectNodeParm.toString();
  13269. };
  13270. }
  13271. $("li", g.tree).each(function ()
  13272. {
  13273. var treeitem = $(this);
  13274. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13275. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13276. if (clause(treenodedata, treedataindex))
  13277. {
  13278. g.selectNode(this);
  13279. }
  13280. else
  13281. {
  13282. g.cancelSelect(this);
  13283. }
  13284. });
  13285. },
  13286. getTextByID: function (id)
  13287. {
  13288. var g = this, p = this.options;
  13289. var data = g.getDataByID(id);
  13290. if (!data) return null;
  13291. return data[p.textFieldName];
  13292. },
  13293. getDataByID: function (id)
  13294. {
  13295. var g = this, p = this.options;
  13296. var data = null;
  13297. $("li", g.tree).each(function ()
  13298. {
  13299. if (data) return;
  13300. var treeitem = $(this);
  13301. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13302. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13303. if (treenodedata[p.idFieldName].toString() == id.toString())
  13304. {
  13305. data = treenodedata;
  13306. }
  13307. });
  13308. return data;
  13309. },
  13310. arrayToTree: function (data, id, pid) //将ID、ParentID这种数据格式转换为树格式
  13311. {
  13312. if (!data || !data.length) return [];
  13313. var targetData = []; //存储数据的容器(返回)
  13314. var records = {};
  13315. var itemLength = data.length; //数据集合的个数
  13316. for (var i = 0; i < itemLength; i++)
  13317. {
  13318. var o = data[i];
  13319. records[o[id]] = o;
  13320. }
  13321. for (var i = 0; i < itemLength; i++)
  13322. {
  13323. var currentData = data[i];
  13324. var parentData = records[currentData[pid]];
  13325. if (!parentData)
  13326. {
  13327. targetData.push(currentData);
  13328. continue;
  13329. }
  13330. parentData.children = parentData.children || [];
  13331. parentData.children.push(currentData);
  13332. }
  13333. return targetData;
  13334. },
  13335. //根据数据索引获取数据
  13336. _getDataNodeByTreeDataIndex: function (data, treedataindex)
  13337. {
  13338. var g = this, p = this.options;
  13339. for (var i = 0; i < data.length; i++)
  13340. {
  13341. if (data[i].treedataindex == treedataindex)
  13342. return data[i];
  13343. if (data[i].children)
  13344. {
  13345. var targetData = g._getDataNodeByTreeDataIndex(data[i].children, treedataindex);
  13346. if (targetData) return targetData;
  13347. }
  13348. }
  13349. return null;
  13350. },
  13351. //设置数据状态
  13352. _setTreeDataStatus: function (data, status)
  13353. {
  13354. var g = this, p = this.options;
  13355. $(data).each(function ()
  13356. {
  13357. this[p.statusName] = status;
  13358. if (this.children)
  13359. {
  13360. g._setTreeDataStatus(this.children, status);
  13361. }
  13362. });
  13363. },
  13364. //设置data 索引
  13365. _addTreeDataIndexToData: function (data)
  13366. {
  13367. var g = this, p = this.options;
  13368. $(data).each(function ()
  13369. {
  13370. if (this.treedataindex != undefined) return;
  13371. this.treedataindex = g.treedataindex++;
  13372. if (this.children)
  13373. {
  13374. g._addTreeDataIndexToData(this.children);
  13375. }
  13376. });
  13377. },
  13378. _addToNodes: function (data)
  13379. {
  13380. var g = this, p = this.options;
  13381. if(data==null)return;
  13382. g.nodes = g.nodes || [];
  13383. if ($.inArray(data, g.nodes) == -1)
  13384. g.nodes.push(data);
  13385. if (data.children)
  13386. {
  13387. $(data.children).each(function (i, item)
  13388. {
  13389. g._addToNodes(item);
  13390. });
  13391. }
  13392. },
  13393. //添加项到g.data
  13394. _appendData: function (treeNode, data)
  13395. {
  13396. var g = this, p = this.options;
  13397. var treedataindex = parseInt($(treeNode).attr("treedataindex"));
  13398. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13399. if (g.treedataindex == undefined) g.treedataindex = 0;
  13400. if (treenodedata && treenodedata.children == undefined) treenodedata.children = [];
  13401. $(data).each(function (i, item)
  13402. {
  13403. if (treenodedata)
  13404. treenodedata.children[treenodedata.children.length] = item;
  13405. else
  13406. g.data[g.data.length] = item;
  13407. g._addToNodes(item);
  13408. });
  13409. },
  13410. _setTreeItem: function (treeNode, options)
  13411. {
  13412. var g = this, p = this.options;
  13413. if (!options) return;
  13414. treeNode = g.getNodeDom(treeNode);
  13415. var treeItem = $(treeNode);
  13416. var outlineLevel = parseInt(treeItem.attr("outlinelevel"));
  13417. if (options.isLast != undefined)
  13418. {
  13419. if (options.isLast == true)
  13420. {
  13421. treeItem.removeClass("l-last").addClass("l-last");
  13422. $("> div .l-note", treeItem).removeClass("l-note").addClass("l-note-last");
  13423. $(".l-children li", treeItem)
  13424. .find(".l-box:eq(" + (outlineLevel - 1) + ")")
  13425. .removeClass("l-line");
  13426. }
  13427. else if (options.isLast == false)
  13428. {
  13429. treeItem.removeClass("l-last");
  13430. $("> div .l-note-last", treeItem).removeClass("l-note-last").addClass("l-note");
  13431. $(".l-children li", treeItem)
  13432. .find(".l-box:eq(" + (outlineLevel - 1) + ")")
  13433. .removeClass("l-line")
  13434. .addClass("l-line");
  13435. }
  13436. }
  13437. },
  13438. _upadteTreeWidth: function ()
  13439. {
  13440. var g = this, p = this.options;
  13441. var treeWidth = g.maxOutlineLevel * 22;
  13442. if (p.checkbox) treeWidth += 22;
  13443. if (p.parentIcon || p.childIcon) treeWidth += 22;
  13444. treeWidth += p.nodeWidth;
  13445. // g.tree.width(treeWidth);
  13446. },
  13447. _getChildNodeClassName: function ()
  13448. {
  13449. var g = this, p = this.options;
  13450. return 'l-tree-icon-' + p.childIcon;
  13451. },
  13452. _getParentNodeClassName: function (isOpen)
  13453. {
  13454. var g = this, p = this.options;
  13455. var nodeclassname = 'l-tree-icon-' + p.parentIcon;
  13456. if (isOpen) nodeclassname += '-open';
  13457. return nodeclassname;
  13458. },
  13459. //根据data生成最终完整的tree html
  13460. _getTreeHTMLByData: function (data, outlineLevel, isLast, isExpand)
  13461. {
  13462. var g = this, p = this.options;
  13463. var count = 0;
  13464. if (g.maxOutlineLevel < outlineLevel)
  13465. g.maxOutlineLevel = outlineLevel;
  13466. isLast = isLast || [];
  13467. outlineLevel = outlineLevel || 1;
  13468. var firstLevel = "";
  13469. var treehtmlarr = [];
  13470. if (!isExpand) treehtmlarr.push('<ul class="l-children" style="display:none">');
  13471. else treehtmlarr.push("<ul class='l-children'>");
  13472. for (var i = 0; i < data.length; i++){
  13473. var o = data[i];
  13474. if(p.root==o.id)firstLevel = outlineLevel;
  13475. }
  13476. for (var i = 0; i < data.length; i++)
  13477. {
  13478. var isFirst = i == 0;
  13479. var isLastCurrent = i == data.length - 1;
  13480. var isExpandCurrent = true;
  13481. var o = data[i];
  13482. if(p.root!=o.id&&outlineLevel==firstLevel)continue;
  13483. var isPass = true;
  13484. var map=[];
  13485. if(p.filter)map = p.filter.split(",");
  13486. for(var j=0;j<map.length;j++){
  13487. var f = map[j].split("|");
  13488. var field = f[0];
  13489. var v = f[1];
  13490. if(o[field]==v){
  13491. isPass &=false;
  13492. }else{
  13493. continue;
  13494. }
  13495. }
  13496. if(!isPass)continue;
  13497. if(o==null)continue;
  13498. if (o.isexpand == false || o.isexpand == "false") isExpandCurrent = false;
  13499. treehtmlarr.push('<li ');
  13500. if (o.treedataindex != undefined)
  13501. treehtmlarr.push('treedataindex="' + o.treedataindex + '" ');
  13502. if (isExpandCurrent)
  13503. treehtmlarr.push('isexpand=' + o.isexpand + ' ');
  13504. treehtmlarr.push('outlinelevel=' + outlineLevel + ' ');
  13505. //增加属性支持
  13506. for (var j = 0; j < g.sysAttribute.length; j++)
  13507. {
  13508. if ($(this).attr(g.sysAttribute[j]))
  13509. data[dataindex][g.sysAttribute[j]] = $(this).attr(g.sysAttribute[j]);
  13510. }
  13511. for (var j = 0; j < p.attribute.length; j++)
  13512. {
  13513. if (o[p.attribute[j]])
  13514. treehtmlarr.push(p.attribute[j] + '="' + o[p.attribute[j]] + '" ');
  13515. }
  13516. //css class
  13517. treehtmlarr.push('class="');
  13518. isFirst && treehtmlarr.push('l-first ');
  13519. isLastCurrent && treehtmlarr.push('l-last ');
  13520. isFirst && isLastCurrent && treehtmlarr.push('l-onlychild ');
  13521. treehtmlarr.push('"');
  13522. treehtmlarr.push('>');
  13523. //wuhb
  13524. // treehtmlarr.push('<div class="l-body">');
  13525. if(o.hide&&g.hasChildren(o)){
  13526. count++;
  13527. var ln = g.data[0].children.length;
  13528. ln = ln*22;
  13529. treehtmlarr.push('<div class="l-body l-ln" style="display:none;height:'+ln+'px;">');
  13530. }else{
  13531. treehtmlarr.push('<div class="l-body">');
  13532. }
  13533. for (var k = 0; k <= outlineLevel - 2; k++)
  13534. {
  13535. if (isLast[k]) treehtmlarr.push('<div class="l-box"></div>');
  13536. else treehtmlarr.push('<div class="l-box l-line"></div>');
  13537. }
  13538. if (g.hasChildren(o))
  13539. {
  13540. if (isExpandCurrent) treehtmlarr.push('<div class="l-box l-expandable-open"></div>');
  13541. else treehtmlarr.push('<div class="l-box l-expandable-close"></div>');
  13542. //复选框区分 wuhb
  13543. if (p.checkbox&&o.checkbox)
  13544. {
  13545. if (o.ischecked)
  13546. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-checked"></div>');
  13547. else
  13548. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-unchecked"></div>');
  13549. }
  13550. if (p.parentIcon)
  13551. {
  13552. //node icon
  13553. treehtmlarr.push('<div class="l-box l-tree-icon ');
  13554. treehtmlarr.push(g._getParentNodeClassName(p.parentIcon ? true : false) + " ");
  13555. if (p.iconFieldName && o[p.iconFieldName])
  13556. treehtmlarr.push('l-tree-icon-none');
  13557. treehtmlarr.push('">');
  13558. if (p.iconFieldName && o[p.iconFieldName])
  13559. treehtmlarr.push('<img src="' + o[p.iconFieldName] + '" />');
  13560. treehtmlarr.push('</div>');
  13561. }
  13562. }
  13563. else
  13564. {
  13565. if(o.hide){
  13566. if (isLastCurrent) treehtmlarr.push('<div class="l-box l-note-last"></div>');
  13567. else treehtmlarr.push('<div class="l-box l-note"></div>');
  13568. }
  13569. else{
  13570. if (isLastCurrent) treehtmlarr.push('<div class="l-box l-note-last"></div>');
  13571. else treehtmlarr.push('<div class="l-box l-note"></div>');
  13572. }
  13573. //复选框区分 wuhb
  13574. if (p.checkbox&&o.checkbox)
  13575. {
  13576. if (o.ischecked)
  13577. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-checked"></div>');
  13578. else
  13579. treehtmlarr.push('<div class="l-box l-checkbox l-checkbox-unchecked"></div>');
  13580. }
  13581. if (p.childIcon)
  13582. {
  13583. //node icon
  13584. treehtmlarr.push('<div class="l-box l-tree-icon ');
  13585. treehtmlarr.push(g._getChildNodeClassName() + " ");
  13586. if (p.iconFieldName && o[p.iconFieldName])
  13587. treehtmlarr.push('l-tree-icon-none');
  13588. treehtmlarr.push('">');
  13589. if (p.iconFieldName && o[p.iconFieldName])
  13590. treehtmlarr.push('<img src="' + o[p.iconFieldName] + '" />');
  13591. treehtmlarr.push('</div>');
  13592. }
  13593. }
  13594. treehtmlarr.push('<span>' + o[p.textFieldName] + '</span></div>');
  13595. if (g.hasChildren(o))
  13596. {
  13597. var isLastNew = [];
  13598. for (var k = 0; k < isLast.length; k++)
  13599. {
  13600. isLastNew.push(isLast[k]);
  13601. }
  13602. isLastNew.push(isLastCurrent);
  13603. treehtmlarr.push(g._getTreeHTMLByData(o.children, outlineLevel + 1, isLastNew, isExpandCurrent).join(''));
  13604. }
  13605. treehtmlarr.push('</li>');
  13606. }
  13607. treehtmlarr.push("</ul>");
  13608. return treehtmlarr;
  13609. },
  13610. //根据简洁的html获取data
  13611. _getDataByTreeHTML: function (treeDom)
  13612. {
  13613. var g = this, p = this.options;
  13614. var data = [];
  13615. $("> li", treeDom).each(function (i, item)
  13616. {
  13617. var dataindex = data.length;
  13618. data[dataindex] =
  13619. {
  13620. treedataindex: g.treedataindex++
  13621. };
  13622. data[dataindex][p.textFieldName] = $("> span,> a", this).html();
  13623. for (var j = 0; j < g.sysAttribute.length; j++)
  13624. {
  13625. if ($(this).attr(g.sysAttribute[j]))
  13626. data[dataindex][g.sysAttribute[j]] = $(this).attr(g.sysAttribute[j]);
  13627. }
  13628. for (var j = 0; j < p.attribute.length; j++)
  13629. {
  13630. if ($(this).attr(p.attribute[j]))
  13631. data[dataindex][p.attribute[j]] = $(this).attr(p.attribute[j]);
  13632. }
  13633. if ($("> ul", this).length > 0)
  13634. {
  13635. data[dataindex].children = g._getDataByTreeHTML($("> ul", this));
  13636. }
  13637. });
  13638. return data;
  13639. },
  13640. _applyTree: function ()
  13641. {
  13642. var g = this, p = this.options;
  13643. g.data = g._getDataByTreeHTML(g.tree);
  13644. var gridhtmlarr = g._getTreeHTMLByData(g.data, 1, [], true);
  13645. gridhtmlarr[gridhtmlarr.length - 1] = gridhtmlarr[0] = "";
  13646. g.tree.html(gridhtmlarr.join(''));
  13647. // g._upadteTreeWidth();
  13648. $(".l-body", g.tree).hover(function ()
  13649. {
  13650. $(this).addClass("l-over");
  13651. }, function ()
  13652. {
  13653. $(this).removeClass("l-over");
  13654. });
  13655. },
  13656. _applyTreeEven: function (treeNode)
  13657. {
  13658. var g = this, p = this.options;
  13659. $("> .l-body", treeNode).hover(function ()
  13660. {
  13661. $(this).addClass("l-over");
  13662. }, function ()
  13663. {
  13664. $(this).removeClass("l-over");
  13665. });
  13666. },
  13667. _getSrcElementByEvent: function (e)
  13668. {
  13669. var g = this;
  13670. var obj = (e.target || e.srcElement);
  13671. var tag = obj.tagName.toLowerCase();
  13672. var jobjs = $(obj).parents().add(obj);
  13673. var fn = function (parm)
  13674. {
  13675. for (var i = jobjs.length - 1; i >= 0; i--)
  13676. {
  13677. if ($(jobjs[i]).hasClass(parm)) return jobjs[i];
  13678. }
  13679. return null;
  13680. };
  13681. if (jobjs.index(this.element) == -1) return { out: true };
  13682. var r = {
  13683. tree: fn("l-tree"),
  13684. node: fn("l-body"),
  13685. checkbox: fn("l-checkbox"),
  13686. icon: fn("l-tree-icon"),
  13687. text: tag == "span"
  13688. };
  13689. if (r.node)
  13690. {
  13691. var treedataindex = parseInt($(r.node).parent().attr("treedataindex"));
  13692. r.data = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13693. }
  13694. return r;
  13695. },
  13696. _setTreeEven: function ()
  13697. {
  13698. var g = this, p = this.options;
  13699. if (g.hasBind('contextmenu'))
  13700. {
  13701. g.tree.bind("contextmenu", function (e)
  13702. {
  13703. var obj = (e.target || e.srcElement);
  13704. var treeitem = null;
  13705. if (obj.tagName.toLowerCase() == "a" || obj.tagName.toLowerCase() == "span" || $(obj).hasClass("l-box"))
  13706. treeitem = $(obj).parent().parent();
  13707. else if (obj.tagName.toLowerCase() == "font" ||obj.tagName.toLowerCase() == "img" )
  13708. treeitem = $(obj).parent().parent().parent();
  13709. else if ($(obj).hasClass("l-body"))
  13710. treeitem = $(obj).parent();
  13711. else if (obj.tagName.toLowerCase() == "li")
  13712. treeitem = $(obj);
  13713. if (!treeitem) return;
  13714. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13715. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13716. return g.trigger('contextmenu', [{ data: treenodedata, target: treeitem[0] }, e]);
  13717. });
  13718. }
  13719. g.tree.click(function (e)
  13720. {
  13721. var obj = (e.target || e.srcElement);
  13722. var treeitem = null;
  13723. if (obj.tagName.toLowerCase() == "a" || obj.tagName.toLowerCase() == "span" || $(obj).hasClass("l-box"))
  13724. treeitem = $(obj).parent().parent();
  13725. else if (obj.tagName.toLowerCase() == "font" ||obj.tagName.toLowerCase() == "img" )
  13726. treeitem = $(obj).parent().parent().parent();
  13727. else if ($(obj).hasClass("l-body"))
  13728. treeitem = $(obj).parent();
  13729. else
  13730. treeitem = $(obj);
  13731. if (!treeitem) return;
  13732. var treedataindex = parseInt(treeitem.attr("treedataindex"));
  13733. var treenodedata = g._getDataNodeByTreeDataIndex(g.data, treedataindex);
  13734. var treeitembtn = $("div.l-body:first", treeitem).find("div.l-expandable-open:first,div.l-expandable-close:first");
  13735. var clickOnTreeItemBtn = $(obj).hasClass("l-expandable-open") || $(obj).hasClass("l-expandable-close");
  13736. var isFolder = $(treeitem).find(".l-expandable-open").length>0||$(treeitem).find(".l-expandable-close").length>0;
  13737. if(isFolder&&p.openFolderEven)clickOnTreeItemBtn = true;
  13738. if (!$(obj).hasClass("l-checkbox") && !clickOnTreeItemBtn)
  13739. {
  13740. if ($(">div:first", treeitem).hasClass("l-selected")&&p.reloadSelected)
  13741. {
  13742. if (g.trigger('beforeCancelSelect', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13743. return false;
  13744. $(">div:first", treeitem).removeClass("l-selected");
  13745. g.trigger('cancelSelect', [{ data: treenodedata, target: treeitem[0]}]);
  13746. }
  13747. else
  13748. {
  13749. if (g.trigger('beforeSelect', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13750. return false;
  13751. $(".l-body", g.tree).removeClass("l-selected");
  13752. $(">div:first", treeitem).addClass("l-selected");
  13753. g.trigger('select', [{ data: treenodedata, target: treeitem[0]}])
  13754. }
  13755. }
  13756. //chekcbox even
  13757. if ($(obj).hasClass("l-checkbox"))
  13758. {
  13759. if (p.autoCheckboxEven)
  13760. {
  13761. //状态:未选中
  13762. if ($(obj).hasClass("l-checkbox-unchecked"))
  13763. {
  13764. $(obj).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  13765. $(".l-children .l-checkbox", treeitem)
  13766. .removeClass("l-checkbox-incomplete l-checkbox-unchecked")
  13767. .addClass("l-checkbox-checked");
  13768. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  13769. }
  13770. //状态:选中
  13771. else if ($(obj).hasClass("l-checkbox-checked"))
  13772. {
  13773. $(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13774. $(".l-children .l-checkbox", treeitem)
  13775. .removeClass("l-checkbox-incomplete l-checkbox-checked")
  13776. .addClass("l-checkbox-unchecked");
  13777. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, false]);
  13778. }
  13779. //状态:未完全选中
  13780. else if ($(obj).hasClass("l-checkbox-incomplete"))
  13781. {
  13782. $(obj).removeClass("l-checkbox-incomplete").addClass("l-checkbox-checked");
  13783. $(".l-children .l-checkbox", treeitem)
  13784. .removeClass("l-checkbox-incomplete l-checkbox-unchecked")
  13785. .addClass("l-checkbox-checked");
  13786. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  13787. }
  13788. g._setParentCheckboxStatus(treeitem);
  13789. }
  13790. else
  13791. {
  13792. //状态:未选中
  13793. if ($(obj).hasClass("l-checkbox-unchecked"))
  13794. {
  13795. $(obj).removeClass("l-checkbox-unchecked").addClass("l-checkbox-checked");
  13796. //是否单选
  13797. if (p.single)
  13798. {
  13799. $(".l-checkbox", g.tree).not(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13800. }
  13801. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, true]);
  13802. }
  13803. //状态:选中
  13804. else if ($(obj).hasClass("l-checkbox-checked"))
  13805. {
  13806. $(obj).removeClass("l-checkbox-checked").addClass("l-checkbox-unchecked");
  13807. g.trigger('check', [{ data: treenodedata, target: treeitem[0] }, false]);
  13808. }
  13809. }
  13810. }
  13811. //状态:已经张开
  13812. else if (treeitembtn.hasClass("l-expandable-open") && (!p.btnClickToToggleOnly || clickOnTreeItemBtn))
  13813. {
  13814. if (g.trigger('beforeCollapse', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13815. return false;
  13816. treeitembtn.removeClass("l-expandable-open").addClass("l-expandable-close");
  13817. if (p.slide)
  13818. $("> .l-children", treeitem).slideToggle('fast');
  13819. else
  13820. $("> .l-children", treeitem).toggle();
  13821. $("> div ." + g._getParentNodeClassName(true), treeitem)
  13822. .removeClass(g._getParentNodeClassName(true))
  13823. .addClass(g._getParentNodeClassName());
  13824. g.trigger('collapse', [{ data: treenodedata, target: treeitem[0]}]);
  13825. }
  13826. //状态:没有张开
  13827. else if (treeitembtn.hasClass("l-expandable-close") && (!p.btnClickToToggleOnly || clickOnTreeItemBtn))
  13828. {
  13829. if (g.trigger('beforeExpand', [{ data: treenodedata, target: treeitem[0]}]) == false)
  13830. return false;
  13831. treeitembtn.removeClass("l-expandable-close").addClass("l-expandable-open");
  13832. var callback = function ()
  13833. {
  13834. g.trigger('expand', [{ data: treenodedata, target: treeitem[0]}]);
  13835. };
  13836. if (p.slide)
  13837. {
  13838. $("> .l-children", treeitem).slideToggle('fast', callback);
  13839. }
  13840. else
  13841. {
  13842. $("> .l-children", treeitem).toggle();
  13843. callback();
  13844. }
  13845. $("> div ." + g._getParentNodeClassName(), treeitem)
  13846. .removeClass(g._getParentNodeClassName())
  13847. .addClass(g._getParentNodeClassName(true));
  13848. }
  13849. g.trigger('click', [{ data: treenodedata, target: treeitem[0]}]);
  13850. });
  13851. //节点拖拽支持
  13852. if ($.fn.ligerDrag && p.nodeDraggable)
  13853. {
  13854. g.nodeDroptip = $("<div class='l-drag-nodedroptip' style='display:none'></div>").appendTo('body');
  13855. g.tree.ligerDrag({ revert: true, animate: false,
  13856. proxyX: 20, proxyY: 20,
  13857. proxy: function (draggable, e)
  13858. {
  13859. var src = g._getSrcElementByEvent(e);
  13860. if (src.node)
  13861. {
  13862. var content = "dragging";
  13863. if (p.nodeDraggingRender)
  13864. {
  13865. content = p.nodeDraggingRender(draggable.draggingNodes, draggable, g);
  13866. }
  13867. else
  13868. {
  13869. content = "";
  13870. var appended = false;
  13871. for (var i in draggable.draggingNodes)
  13872. {
  13873. var node = draggable.draggingNodes[i];
  13874. if (appended) content += ",";
  13875. content += node.text;
  13876. appended = true;
  13877. }
  13878. }
  13879. var proxy = $("<div class='l-drag-proxy' style='display:none'><div class='l-drop-icon l-drop-no'></div>" + content + "</div>").appendTo('body');
  13880. return proxy;
  13881. }
  13882. },
  13883. onRevert: function () { return false; },
  13884. onRendered: function ()
  13885. {
  13886. this.set('cursor', 'default');
  13887. g.children[this.id] = this;
  13888. },
  13889. onStartDrag: function (current, e)
  13890. {
  13891. if (e.button == 2) return false;
  13892. this.set('cursor', 'default');
  13893. var src = g._getSrcElementByEvent(e);
  13894. if (src.checkbox) return false;
  13895. if (p.checkbox)
  13896. {
  13897. var checked = g.getChecked();
  13898. this.draggingNodes = [];
  13899. for (var i in checked)
  13900. {
  13901. this.draggingNodes.push(checked[i].data);
  13902. }
  13903. if (!this.draggingNodes || !this.draggingNodes.length) return false;
  13904. }
  13905. else
  13906. {
  13907. this.draggingNodes = [src.data];
  13908. }
  13909. this.draggingNode = src.data;
  13910. this.set('cursor', 'move');
  13911. g.nodedragging = true;
  13912. this.validRange = {
  13913. top: g.tree.offset().top,
  13914. bottom: g.tree.offset().top + g.tree.height(),
  13915. left: g.tree.offset().left,
  13916. right: g.tree.offset().left + g.tree.width()
  13917. };
  13918. },
  13919. onDrag: function (current, e)
  13920. {
  13921. var nodedata = this.draggingNode;
  13922. if (!nodedata) return false;
  13923. var nodes = this.draggingNodes ? this.draggingNodes : [nodedata];
  13924. if (g.nodeDropIn == null) g.nodeDropIn = -1;
  13925. var pageX = e.pageX;
  13926. var pageY = e.pageY;
  13927. var visit = false;
  13928. var validRange = this.validRange;
  13929. if (pageX < validRange.left || pageX > validRange.right
  13930. || pageY > validRange.bottom || pageY < validRange.top)
  13931. {
  13932. g.nodeDropIn = -1;
  13933. g.nodeDroptip.hide();
  13934. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  13935. return;
  13936. }
  13937. for (var i = 0, l = g.nodes.length; i < l; i++)
  13938. {
  13939. var nd = g.nodes[i];
  13940. var treedataindex = nd['treedataindex'];
  13941. if (nodedata['treedataindex'] == treedataindex) visit = true;
  13942. if ($.inArray(nd, nodes) != -1) continue;
  13943. var isAfter = visit ? true : false;
  13944. if (g.nodeDropIn != -1 && g.nodeDropIn != treedataindex) continue;
  13945. var jnode = $("li[treedataindex=" + treedataindex + "] div:first", g.tree);
  13946. var offset = jnode.offset();
  13947. var range = {
  13948. top: offset.top,
  13949. bottom: offset.top + jnode.height(),
  13950. left: g.tree.offset().left,
  13951. right: g.tree.offset().left + g.tree.width()
  13952. };
  13953. if (pageX > range.left && pageX < range.right && pageY > range.top && pageY < range.bottom)
  13954. {
  13955. var lineTop = offset.top;
  13956. if (isAfter) lineTop += jnode.height();
  13957. g.nodeDroptip.css({
  13958. left: range.left,
  13959. top: lineTop,
  13960. width: range.right - range.left
  13961. }).show();
  13962. g.nodeDropIn = treedataindex;
  13963. g.nodeDropDir = isAfter ? "bottom" : "top";
  13964. if (pageY > range.top + 7 && pageY < range.bottom - 7)
  13965. {
  13966. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-yes").addClass("l-drop-add");
  13967. g.nodeDroptip.hide();
  13968. g.nodeDropInParent = true;
  13969. }
  13970. else
  13971. {
  13972. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-no l-drop-add").addClass("l-drop-yes");
  13973. g.nodeDroptip.show();
  13974. g.nodeDropInParent = false;
  13975. }
  13976. break;
  13977. }
  13978. else if (g.nodeDropIn != -1)
  13979. {
  13980. g.nodeDropIn = -1;
  13981. g.nodeDropInParent = false;
  13982. g.nodeDroptip.hide();
  13983. this.proxy.find(".l-drop-icon:first").removeClass("l-drop-yes l-drop-add").addClass("l-drop-no");
  13984. }
  13985. }
  13986. },
  13987. onStopDrag: function (current, e)
  13988. {
  13989. var nodes = this.draggingNodes;
  13990. g.nodedragging = false;
  13991. if (g.nodeDropIn != -1)
  13992. {
  13993. for (var i = 0; i < nodes.length; i++)
  13994. {
  13995. var children = nodes[i].children;
  13996. if (children)
  13997. {
  13998. nodes = $.grep(nodes, function (node, i)
  13999. {
  14000. var isIn = $.inArray(node, children) == -1;
  14001. return isIn;
  14002. });
  14003. }
  14004. }
  14005. for (var i in nodes)
  14006. {
  14007. var node = nodes[i];
  14008. if (g.nodeDropInParent)
  14009. {
  14010. g.remove(node);
  14011. g.append(g.nodeDropIn, [node]);
  14012. }
  14013. else
  14014. {
  14015. g.remove(node);
  14016. g.append(g.getParent(g.nodeDropIn), [node], g.nodeDropIn, g.nodeDropDir == "bottom")
  14017. }
  14018. }
  14019. g.nodeDropIn = -1;
  14020. }
  14021. g.nodeDroptip.hide();
  14022. this.set('cursor', 'default');
  14023. }
  14024. });
  14025. }
  14026. },
  14027. //递归设置父节点的状态
  14028. _setParentCheckboxStatus: function (treeitem)
  14029. {
  14030. var g = this, p = this.options;
  14031. //当前同级别或低级别的节点是否都选中了
  14032. var isCheckedComplete = $(".l-checkbox-unchecked", treeitem.parent()).length == 0;
  14033. //当前同级别或低级别的节点是否都没有选中
  14034. var isCheckedNull = $(".l-checkbox-checked", treeitem.parent()).length == 0;
  14035. if (isCheckedComplete)
  14036. {
  14037. treeitem.parent().prev().find(".l-checkbox")
  14038. .removeClass("l-checkbox-unchecked l-checkbox-incomplete")
  14039. .addClass("l-checkbox-checked");
  14040. }
  14041. else if (isCheckedNull)
  14042. {
  14043. treeitem.parent().prev().find("> .l-checkbox")
  14044. .removeClass("l-checkbox-checked l-checkbox-incomplete")
  14045. .addClass("l-checkbox-unchecked");
  14046. }
  14047. else
  14048. {
  14049. treeitem.parent().prev().find("> .l-checkbox")
  14050. .removeClass("l-checkbox-unchecked l-checkbox-checked")
  14051. .addClass("l-checkbox-incomplete");
  14052. }
  14053. if (treeitem.parent().parent("li").length > 0)
  14054. g._setParentCheckboxStatus(treeitem.parent().parent("li"));
  14055. }
  14056. });
  14057. })(jQuery);/**
  14058. * jQuery ligerUI 1.1.9
  14059. *
  14060. * http://ligerui.com
  14061. *
  14062. * Author daomi 2012 [ gd_star@163.com ]
  14063. *
  14064. */
  14065. (function ($)
  14066. {
  14067. var l = $.ligerui;
  14068. l.windowCount = 0;
  14069. $.ligerWindow = function (options)
  14070. {
  14071. return l.run.call(null, "ligerWindow", arguments, { isStatic: true });
  14072. };
  14073. $.ligerWindow.show = function (p)
  14074. {
  14075. return $.ligerWindow(p);
  14076. };
  14077. $.ligerDefaults.Window = {
  14078. showClose: true,
  14079. showMax: true,
  14080. showToggle: true,
  14081. showMin: true,
  14082. title: 'window',
  14083. load: false,
  14084. onLoaded: null,
  14085. modal: false //是否模态窗口
  14086. };
  14087. $.ligerMethos.Window = {};
  14088. l.controls.Window = function (options)
  14089. {
  14090. l.controls.Window.base.constructor.call(this, null, options);
  14091. };
  14092. l.controls.Window.ligerExtend(l.core.Win, {
  14093. __getType: function ()
  14094. {
  14095. return 'Window';
  14096. },
  14097. __idPrev: function ()
  14098. {
  14099. return 'Window';
  14100. },
  14101. _extendMethods: function ()
  14102. {
  14103. return $.ligerMethos.Window;
  14104. },
  14105. _render: function ()
  14106. {
  14107. var g = this, p = this.options;
  14108. 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>');
  14109. g.element = g.window[0];
  14110. g.window.content = $(".l-window-content", g.window);
  14111. g.window.header = $(".l-window-header", g.window);
  14112. g.window.buttons = $(".l-window-header-buttons:first", g.window);
  14113. if (p.url)
  14114. {
  14115. if (p.load)
  14116. {
  14117. g.window.content.load(p.url, function ()
  14118. {
  14119. g.trigger('loaded');
  14120. });
  14121. g.window.content.addClass("l-window-content-scroll");
  14122. }
  14123. else
  14124. {
  14125. var iframe = $("<iframe frameborder='0' src='" + p.url + "'></iframe>");
  14126. var framename = "ligeruiwindow" + l.windowCount++;
  14127. if (p.name) framename = p.name;
  14128. iframe.attr("name", framename).attr("id", framename);
  14129. p.framename = framename;
  14130. iframe.appendTo(g.window.content);
  14131. g.iframe = iframe;
  14132. }
  14133. }
  14134. else if (p.content)
  14135. {
  14136. var content = $("<div>" + p.content + "</div>");
  14137. content.appendTo(g.window.content);
  14138. }
  14139. else if (p.target)
  14140. {
  14141. g.window.content.append(p.target);
  14142. p.target.show();
  14143. }
  14144. this.mask();
  14145. g.active();
  14146. $('body').append(g.window);
  14147. g.set({ width: p.width, height: p.height });
  14148. //位置初始化
  14149. var left = 0;
  14150. var top = 0;
  14151. if (p.left != null) left = p.left;
  14152. else p.left = left = 0.5 * ($(window).width() - g.window.width());
  14153. if (p.top != null) top = p.top;
  14154. else p.top = top = 0.5 * ($(window).height() - g.window.height()) + $(window).scrollTop() - 10;
  14155. if (left < 0) p.left = left = 0;
  14156. if (top < 0) p.top = top = 0;
  14157. g.set(p);
  14158. p.framename && $(">iframe", g.window.content).attr('name', p.framename);
  14159. if (!p.showToggle) $(".l-window-toggle", g.window).remove();
  14160. if (!p.showMax) $(".l-window-max", g.window).remove();
  14161. if (!p.showClose) $(".l-window-close", g.window).remove();
  14162. g._saveStatus();
  14163. //拖动支持
  14164. if ($.fn.ligerDrag)
  14165. {
  14166. g.draggable = g.window.drag = g.window.ligerDrag({ handler: '.l-window-header-inner', onStartDrag: function ()
  14167. {
  14168. g.active();
  14169. }, onStopDrag: function ()
  14170. {
  14171. g._saveStatus();
  14172. }, animate: false
  14173. });
  14174. }
  14175. //改变大小支持
  14176. if ($.fn.ligerResizable)
  14177. {
  14178. g.resizeable = g.window.resizable = g.window.ligerResizable({
  14179. onStartResize: function ()
  14180. {
  14181. g.active();
  14182. $(".l-window-max", g.window).removeClass("l-window-regain");
  14183. },
  14184. onStopResize: function (current, e)
  14185. {
  14186. var top = 0;
  14187. var left = 0;
  14188. if (!isNaN(parseInt(g.window.css('top'))))
  14189. top = parseInt(g.window.css('top'));
  14190. if (!isNaN(parseInt(g.window.css('left'))))
  14191. left = parseInt(g.window.css('left'));
  14192. if (current.diffTop)
  14193. g.window.css({ top: top + current.diffTop });
  14194. if (current.diffLeft)
  14195. g.window.css({ left: left + current.diffLeft });
  14196. if (current.newWidth)
  14197. g.window.width(current.newWidth);
  14198. if (current.newHeight)
  14199. g.window.content.height(current.newHeight - 28);
  14200. g._saveStatus();
  14201. return false;
  14202. }
  14203. });
  14204. g.window.append("<div class='l-btn-nw-drop'></div>");
  14205. }
  14206. //设置事件
  14207. $(".l-window-toggle", g.window).click(function ()
  14208. {
  14209. if ($(this).hasClass("l-window-toggle-close"))
  14210. {
  14211. g.collapsed = false;
  14212. $(this).removeClass("l-window-toggle-close");
  14213. } else
  14214. {
  14215. g.collapsed = true;
  14216. $(this).addClass("l-window-toggle-close");
  14217. }
  14218. g.window.content.slideToggle();
  14219. }).hover(function ()
  14220. {
  14221. if (g.window.drag)
  14222. g.window.drag.set('disabled', true);
  14223. }, function ()
  14224. {
  14225. if (g.window.drag)
  14226. g.window.drag.set('disabled', false);
  14227. });
  14228. $(".l-window-close", g.window).click(function ()
  14229. {
  14230. if (g.trigger('close') == false) return false;
  14231. g.window.hide();
  14232. l.win.removeTask(g);
  14233. }).hover(function ()
  14234. {
  14235. if (g.window.drag)
  14236. g.window.drag.set('disabled', true);
  14237. }, function ()
  14238. {
  14239. if (g.window.drag)
  14240. g.window.drag.set('disabled', false);
  14241. });
  14242. $(".l-window-max", g.window).click(function ()
  14243. {
  14244. if ($(this).hasClass("l-window-regain"))
  14245. {
  14246. if (g.trigger('regain') == false) return false;
  14247. g.window.width(g._width).css({ left: g._left, top: g._top });
  14248. g.window.content.height(g._height - 28);
  14249. $(this).removeClass("l-window-regain");
  14250. }
  14251. else
  14252. {
  14253. if (g.trigger('max') == false) return false;
  14254. g.window.width($(window).width() - 2).css({ left: 0, top: 0 });
  14255. g.window.content.height($(window).height() - 28).show();
  14256. $(this).addClass("l-window-regain");
  14257. }
  14258. });
  14259. },
  14260. _saveStatus: function ()
  14261. {
  14262. var g = this;
  14263. g._width = g.window.width();
  14264. g._height = g.window.height();
  14265. var top = 0;
  14266. var left = 0;
  14267. if (!isNaN(parseInt(g.window.css('top'))))
  14268. top = parseInt(g.window.css('top'));
  14269. if (!isNaN(parseInt(g.window.css('left'))))
  14270. left = parseInt(g.window.css('left'));
  14271. if(top<0){
  14272. top = 0;
  14273. g.dialog.css('top',top)
  14274. }
  14275. if(left<0){
  14276. left = 0;
  14277. g.dialog.css('left',left)
  14278. }
  14279. g._top = top;
  14280. g._left = left;
  14281. },
  14282. min: function ()
  14283. {
  14284. this.window.hide();
  14285. this.minimize = true;
  14286. this.actived = false;
  14287. },
  14288. _setShowMin: function (value)
  14289. {
  14290. var g = this, p = this.options;
  14291. if (value)
  14292. {
  14293. if (!g.winmin)
  14294. {
  14295. g.winmin = $('<div class="l-window-min"></div>').prependTo(g.window.buttons)
  14296. .click(function ()
  14297. {
  14298. g.min();
  14299. });
  14300. l.win.addTask(g);
  14301. }
  14302. }
  14303. else if (g.winmin)
  14304. {
  14305. g.winmin.remove();
  14306. g.winmin = null;
  14307. }
  14308. },
  14309. _setLeft: function (value)
  14310. {
  14311. if (value != null)
  14312. this.window.css({ left: value });
  14313. },
  14314. _setTop: function (value)
  14315. {
  14316. if (value != null)
  14317. this.window.css({ top: value });
  14318. },
  14319. _setWidth: function (value)
  14320. {
  14321. if (value > 0)
  14322. this.window.width(value);
  14323. },
  14324. _setHeight: function (value)
  14325. {
  14326. if (value > 28)
  14327. this.window.content.height(value - 28);
  14328. },
  14329. _setTitle: function (value)
  14330. {
  14331. if (value)
  14332. $(".l-window-header-inner", this.window.header).html(value);
  14333. },
  14334. _setUrl: function (url)
  14335. {
  14336. var g = this, p = this.options;
  14337. p.url = url;
  14338. if (p.load)
  14339. {
  14340. g.window.content.html("").load(p.url, function ()
  14341. {
  14342. if (g.trigger('loaded') == false) return false;
  14343. });
  14344. }
  14345. else if (g.jiframe)
  14346. {
  14347. g.jiframe.attr("src", p.url);
  14348. }
  14349. },
  14350. hide: function ()
  14351. {
  14352. var g = this, p = this.options;
  14353. this.unmask();
  14354. this.window.hide();
  14355. },
  14356. show: function ()
  14357. {
  14358. var g = this, p = this.options;
  14359. this.mask();
  14360. this.window.show();
  14361. },
  14362. remove: function ()
  14363. {
  14364. var g = this, p = this.options;
  14365. this.unmask();
  14366. this.window.remove();
  14367. },
  14368. active: function ()
  14369. {
  14370. var g = this, p = this.options;
  14371. if (g.minimize)
  14372. {
  14373. var width = g._width, height = g._height, left = g._left, top = g._top;
  14374. if (g.maximum)
  14375. {
  14376. width = $(window).width();
  14377. height = $(window).height();
  14378. left = top = 0;
  14379. if (l.win.taskbar)
  14380. {
  14381. height -= l.win.taskbar.outerHeight();
  14382. if (l.win.top) top += l.win.taskbar.outerHeight();
  14383. }
  14384. }
  14385. g.set({ width: width, height: height, left: left, top: top });
  14386. }
  14387. g.actived = true;
  14388. g.minimize = false;
  14389. l.win.setFront(g);
  14390. g.show();
  14391. l.win.setFront(this);
  14392. },
  14393. setUrl: function (url)
  14394. {
  14395. return _setUrl(url);
  14396. }
  14397. });
  14398. })(jQuery);