Edit D:\AVA\AVAStandard\AVA.ResourcesPlatform.WebUI\CSS\zh-CN\DefaultTheme\js\waterfall\woo.js
/* @?????????? Woo (Waterfall O O) */ ;(function(window, undefined){ var location = window.location, $W = $(window), // window????????????????????? WH, // window????????????resize ????????????????????resize???????????? WW, H = $.History, // ???????????????????????? IDX = 0, // ????????????????? USERCLICK = false, // ?????ab ??????????? TABSW = false, BARSCROLL = false, // ??????????????$gotop ??????????????????????? true SCROLLINGTOTOP = false, TIMERINTERVAL, TIMERSCROLL, // ????? $HOLDER, PAGINE = [], MASN = [], // $.Woo.WooTemp ??? WOOTEMP; var Woo = function(conf){ Woo.init(conf); }; $.extend(Woo,{ dfConf : { // ???????????orm ??d ?????? arrform ??????????? "formprefix" : '#woo-form-', // ????????????????? ???????ab??????????ab?????????????????????????(??oo-pcont?????????????????masn??) "frame" : ['#woo-holder','.woo-swa','.woo-swb','.woo-pcont','.woo-pager','.woo-masned'], // ???????????????(???????????????) "gopre" : null, "gonext" : null, // ????????? "gotop" : null, // ??????????????????????????????????ooter "footer" : null, // ??????dom????? "unit" : '.woo', // anchor ??????????????????????? "anchor" : 'woo-anchor', // ????? name="woo-anchor" ???????????????????????ixed nav?????? "anchordiff" : 70, // ?? * ???????????? // ????????????????????.woo-pcont???????? data- ?????????????? // * ?????????????????????????????????????? "sink" : $(null), // * ??(??)??????????????????inkheight ???????????? "sinkheight" : 0, // * ???????? sink ????????????????????????????? sinkheight ????? "sinkright" : false, // * ????????? "unitsnum" : 24, // * ???????????? "subpagenum" : 4, // scroll lock?????????? "scrollwait" : 100, // ??????????????????? "lbias" : 400, // ???append???dom???????? "appendnum" : 12, // (??????)??????????????? "batchopen" : false, // (??????) ??????????????????batchopen ???????? "batchdelay" : 6, // (??????) ??????dom????????atchopen ???????? "batchnum" : 2, // ?????????????????? "nearbypagenum" : 3, // ajax ????????????????? "ajaxdatatype" : "text", // ajax ????????? "ajaxcache" : false, // resize ?? false ?? window resize ???????????????????? resize ??? "resize" : false, // whether refresh or keep the latest pagenum when switch waterfall "refreshwhenswitch" : false, // scroll ???????????? "onScroll" : function (tp){ // tp ??????scrolltop }, // When preset html units are arranged ok "onFirstArrange" : function (idx){ // idx is the index of current waterfall }, // ?????????????????? "onOnePageOver" : function (pg, idx){ // pg ?? Pagine ?????g.$pager ??????????? // idx ??????????????? // ?????? pg.hasNextUpperPage() pg.isLastSub() }, // ???lazyAdd ????????? "onLazyAddOver" : function (pg, idx){ // pg ?? Pagine ?????g.$pager ??????????? // idx ??????????????? }, // ??? tabswitch ??? "onTabSwitch" : function ($swtrigs,$swconts,a,pre,c){ // $swtrigs tabswitch ?????? // $swconts tabswitch ?????? // a ????????? pre ??????????? c ????????????????????abswitch }, // ?????????????????? "requestAlways" : function (pg, idx){ // pg ?? Pagine ?????g.$pager ??????????? // idx ??????????????? } }, /* @?????witch????????????????? @????? conf - (Dic) ???????????? dfconf ---- ??????????? dfconf ?????????????? arrform - (Arr) ?????????????? ??????????rl???hash ???????????? ????????woo-form- ??????form???id arrsplit - (Arr) ???????????????????????orm????? arrmasnw - (Arr) ?????????????????????????? arrmargin - (Arr) ?????????????? arrfmasnw - (Arr) ??????????? ??????arrmasnw */ init : function (conf){ // ??????? if( typeof conf.arrsplit === 'string' ){ var tmpsplit = conf.arrsplit; conf.arrsplit = []; } if( typeof conf.arrmasnw === 'number' ){ var tmpmasnw = conf.arrmasnw; conf.arrmasnw = []; } if( typeof conf.arrmessw === 'number' ){ var tmpmessw = conf.arrmessw; conf.arrmessw = []; } if( typeof conf.arrmargin === 'number' ){ var tmpmargin = conf.arrmargin; conf.arrmargin = []; } if( typeof conf.arrfmasnw === 'number' ){ var tmpfmasnw = conf.arrfmasnw; conf.arrfmasnw = []; } if( typeof conf.arrgap === 'number' ){ var tmpgap = conf.arrgap; conf.arrgap = []; } for( var i=0; i<conf.arrform.length; i++ ){ tmpsplit !== undefined && conf.arrsplit.push(tmpsplit), tmpmasnw !== undefined && conf.arrmasnw.push(tmpmasnw), tmpmessw !== undefined && conf.arrmessw.push(tmpmessw), tmpmargin !== undefined && conf.arrmargin.push(tmpmargin), tmpfmasnw !== undefined && conf.arrfmasnw.push(tmpfmasnw); tmpgap !== undefined && conf.arrgap.push(tmpgap); } // ????????? // ???????? this.conf = $.extend({},this.dfConf,conf); var conf = this.conf, frame = conf.frame, $trigs = $(frame[1]), $conts = $(frame[2]), undefined; this.$holder = $HOLDER = $(frame[0]); // ?????????dom?????? if( !$HOLDER.length || !$trigs.length || !$conts.length ) return; // ????? $gonext $gopre $gopre $footer this.$conts = $conts, this.$gonext = $(conf.gonext), this.$gopre = $(conf.gopre), this.$gotop = $(conf.gotop), this.$footer = $(conf.footer); // WooTemp ??? WOOTEMP = Woo.WooTemp; // ???window ????? WH = $W.height(); // webkit ?????? this.iswebkit = $.browser && $.browser.webkit || !!/webkit/.exec(navigator.userAgent.toLocaleLowerCase()) if( H && !H.getHash() || !H ){ Woo._switch($trigs,$conts) } // ???hash ?????? H && H.bind(function(hash){ // ???tab ??????????? hashchange if( !TABSW ){ Woo._switch($trigs,$conts) }else{ TABSW = false; } // ??ash ?????????????????ash?? -p ????????? var tmphash = hash.split('-p'), num = parseInt(tmphash[1]) || 1; // ??????????????? if( num > 1 ){ Woo.$gopre.css("display","block") }else{ Woo.$gopre.css("display","none") } }); this.setClickGoPre(), this.setClickGoNext(), this.setClickGoTop(); // ??? window scroll ??? $W.scroll(function (){ BARSCROLL = true window.clearTimeout(TIMERSCROLL) TIMERSCROLL = window.setTimeout(function (){ BARSCROLL = false },Woo.conf.scrollwait) var tp = $W.scrollTop() Woo.$gotop.css('visibility',tp > 100 ? 'visible' : 'hidden') }) // ??? window resize ???????????indow ??? $W.bind('resize',function (e){ Woo.throttle(function (){ WH = $W.height(); // ?????? resize ????? conf.resize ??? if( conf.resize && WW != (WW=$W.width()) ){ Woo.resize(); } }, 100); }) }, iswebkit : null, // ???dom ??? $holder : $(null), // masn????????? masn : [], // pagine????????? pagine : [], /* @?????????????? @????? v - (Num) ???????? sc - (Num) ????????????? co - (Num) ????????????? tp - (Num) ????????top?? */ resetCol : function(v,sc,co,tp){ var $masn = $HOLDER.find(this.conf.frame[5]+':visible').not('.woo-tmpmasn'), dacol = $masn.data('colY'); if( dacol && dacol[co] ){ dacol[co] += v; var mx = Math.max.apply(Math,dacol); // ??????????????? colY ?????ata ????? $masn.data('colY',dacol).css({"height":mx}) $HOLDER.find('div.co'+co).each(function (i,e){ var ttp = parseInt(e.style.top); if( ttp > tp ){ e.style.top = (ttp + v) + 'px'; } }) } }, /* @???????????????????????esize */ throttle : function(method, delay){ window.clearTimeout(Woo.throttle.timer); Woo.throttle.timer = setTimeout(function(){ method.call(this); },delay); }, /* @????????esize ????? */ resize : function (){ // ???????ASN ??om width for( var i=0; i<MASN.length; i++ ){ var msni = MASN[i] if( i === IDX && msni ){ msni.setCols(), // ???????????? IDX ??????????????????????? msni.figure(), // true ????????????????????? msni.arrangeContents(true); }else if( msni ){ msni.resetDomWidth(); } } }, /* @???????????????????? @????? fn - (Fun) ?????????????? arr - (Arr) ??n??????????????? fn???????????????? n - (Num) ???????? delay - (Num) ????????? callback - (Fun) ??????????????? */ recurseDo : function(fn,arr,n,delay,callback){ if( n == 0 ){ if( $.isFunction(callback) ){ callback(); } return; } // fn ????????????? arr = fn.apply(null,arr); if( arr[0].length ){ window.setTimeout(function (){ Woo.recurseDo(fn,arr,--n,delay,callback); },delay) }else{ if( $.isFunction(callback) ){ callback(); } } }, /* @????????orm ??ction ???encode ??? */ getFormAction : function ($form){ return encodeURI($form.attr('action')); }, /* @?????orm ?????????????? @????? $form - (Obj) form ??? ajsn - (Dic) ????????son object ????????? @????? - (Str) ????????????????????? */ paramForm : function ($form, ajsn){ var jsn = {}; $('input,select,textarea',$form) .not('[type=submit]') .filter('[name]') .each(function (i,a){ if( ($(a).attr('type') === 'checkbox' || $(a).attr('type') === 'radio') && $(a).prop('checked') === true || ($(a).attr('type') !== 'checkbox' && $(a).attr('type') !== 'radio') ){ if( jsn[a.name] !== undefined ){ jsn[a.name] += ',' + a.value }else{ jsn[a.name] = a.value; } } }); if( $.isPlainObject(ajsn) ){ $.extend(jsn,ajsn) }; return $.param(jsn); }, /* @???????? gotop ?????????click ??? */ setClickGoTop : function (){ Woo.$gotop.click(function (e){ e.preventDefault(), e.stopPropagation(); SCROLLINGTOTOP = true; // ?????his ??????????????? $gotop ??? var gotop = this, // webkit ??????????? body ?? scroll ??? // ??ebkit ???????? html ?? scroll ??? $body = Woo.iswebkit ? $('body') : $('html'); $body.animate({scrollTop:0},200,function (){ gotop.style.visibility = 'hidden', SCROLLINGTOTOP = false; }) }) }, /* @???????? gopre ???????????click ??? */ setClickGoPre : function (){ Woo.$gopre.click(function (e){ e.preventDefault(); Woo._clickGo.call(this,-1) }) }, /* @???????? gonext ???????????click ??? */ setClickGoNext : function (){ Woo.$gonext.click(function (e){ e.preventDefault(); Woo._clickGo.call(this,1) }) }, /* @?????????????? setClickGoPre setClickGoNext ?????? click?????? @????? dir - (num) ??????? 1 ?? -1 ?????????????? */ _clickGo : function (dir){ var conf = Woo.conf; // ?????his ??????????????? $(this).css('display','none'); if( PAGINE && PAGINE[IDX] && MASN && MASN[IDX]){ var $pagerv = $HOLDER.find(conf.frame[4]+':visible'), cond1 = $pagerv.find('.woo-pbr').length, cond2 = PAGINE[IDX] && PAGINE[IDX].hasNextUpperPage, f = cond1 && cond2 ? false : true; // ???upper page ???1?? if( cond1 && !cond2 ){ return } // ??????????????? PAGINE[IDX].isPagerClick = true; //?????????????????????????? if( f ){ PAGINE[IDX].loading = false; PAGINE[IDX].lazyAdding = true; PAGINE[IDX].halting = true; } PAGINE[IDX].slidePage(dir,true) } }, /* @????????????switch ?????????????? @????? $trigs - (obj) ????????? $conts - (obj) ???????????$trigs ??? */ _switch : function($trigs,$conts){ var conf = Woo.conf, // ????????om????? frame = conf.frame, // ??????????? arrform = conf.arrform; // ???tabswitch ??? // a ????????? pre ??????????? c ????????????????????abswitch $trigs.tabswitch(function ($l,$c,a,pre,c){ var $ndym = $l.eq(a), // ??????????????1??? upg = Woo._getPageNumFromHash(); // ???tabswitch ??? $.Woo.conf.onTabSwitch($l,$c,a,pre,c); // ?????wtich ???????????? if(!c){ // }else{ upg = PAGINE[a] && a != pre && !Woo.conf.refreshwhenswitch ? PAGINE[a].getPageNum() : 1; // ????????oading ?????ash change ??????????????????? $W ??????? USERCLICK = true; // tab ????????? TABSW = true; if( H ){ var nexh = '!' + arrform[a]; H.setHash(nexh + ( upg > 1 ? '-p'+upg : '')); } // ??????cont ???????? $c.eq(a).find(Woo.conf.frame[3]).last().css('height',WH); } // ?????? WooTemp ?????????MASNUNITS WOOTEMP && WOOTEMP.reset(); // ???????????????????? if( PAGINE[pre] ){ PAGINE[pre].idata = [] PAGINE[pre].$data = $(null) } Woo._pageInit($conts,a,upg); },{"focus":"woo-cur","cont":frame[2],"index":Woo._getFocusIdx($trigs)}); }, /* @??????????????????tab ??ndex ????? @????? $conts - (Obj) ???????? n - (Num) ????????????????? gtoupg - (Num) ??????????? */ _pageInit : function($conts,n,gtoupg){ IDX = n; var conf = this.conf, frame = conf.frame, arrform = conf.arrform, arrsplit = conf.arrsplit, arrmasnw = conf.arrmasnw, arrmessw = conf.arrmessw, arrmargin = conf.arrmargin, arrfmasnw = conf.arrfmasnw, arrgap = conf.arrgap, splitstr = $.isArray(arrsplit) ? arrsplit[n] : '', $ccont = $conts.eq(n), $pg_cont = $ccont.find(frame[3]).not('.woo-tmpmasn'), $pg_pager = $ccont.find(frame[4]), // ???.woo-pcont???????? data-totalunits ?????? // ?????????????????asnext ??? ucount = parseInt($pg_cont.data('totalunits')), pageunknown = isNaN(ucount), // np ????????????????????????? 0,1,2... // ??? masnunit.js ????????? np = $pg_cont.data('wootemp') || 0, // conf ?????? subpagenum ???????? // ??????????????????????????????.woo-pcont???????? data-subpagenum subpagenum = $pg_cont.data('subpagenum') || conf.subpagenum, // conf ?????? unitsnum ???????? // ??????????????????????????????.woo-pcont???????? data-unitsnum unitsnum = $pg_cont.data('unitsnum') || conf.unitsnum, sink = $pg_cont.data('sink') ? $($pg_cont.data('sink')) : $(conf.sink), sinkheight = $pg_cont.data('sinkheight') || conf.sinkheight, sinkright = !!$pg_cont.data('sinkright') || conf.sinkright, // ???????? pcount = pageunknown ? 2 : Math.ceil(ucount/unitsnum), // ??????????????????????????????????? isextended = !!arrfmasnw[n], // masn ?????? wdt = arrmasnw[n], // mess width of this col mwdt = $.isArray(arrmessw) ? arrmessw[n] : null, wdt = mwdt ? wdt - mwdt : wdt, // ???????????? mgn = arrmargin[n], // ????????????????????? gap = arrgap[n], // ????????????????????? fwdt = isextended ? wdt+arrfmasnw[n] : wdt, specialopen = fwdt != wdt, // ?????? nextMode ??? hsn = pcount > 2 ? false : true, undefined; // ??????1????????? footer????????? this.$footer.css("display", pcount == 1 ? "block" : "none"); if( !PAGINE[n] ){ var pgcache, $pgdata = $(null); this.masn[n] = MASN[n] = new Woo.Masn($pg_cont,{ unit : conf.unit, gap : gap || 0, onAppend : Woo._doLoadImage, onFirstArrange : conf.onFirstArrange, onArrange : function ($c){ if( $c.length ){ pgcache = 2; $pgdata = $c; } if( PAGINE[n] ){ PAGINE[n].caching = 1; PAGINE[n].$data = $c; } // _onscroll ??? if( TIMERINTERVAL ){ window.clearTimeout(TIMERINTERVAL) } Woo._onscroll() }, initAppendCounts : unitsnum, sinkWhat : sink, firstHeight : sinkheight, rightAlignFirstBlock : sinkright, specialColumnOpen : specialopen, firstColumnWidth : fwdt, columnMessWidth : mwdt, columnWidth : wdt, columnMargin : mgn, batchOpen : conf.batchopen, batchDelay : conf.batchdelay, batchNum : conf.batchnum }) this.pagine[n] = PAGINE[n] = new Woo.Pagine([$pg_cont,$pg_pager],{ identity : '!' + arrform[n], // ??????????????????3????? arrRequestUrl : [$(conf.formprefix+arrform[n])[0],splitstr], // ?????????????????? always ??? requestAlways : conf.requestAlways, onOnePageOver : conf.onOnePageOver, // ajax ???????????? ajaxDataType : conf.ajaxdatatype, // ajax ????????? ajaxCache : conf.ajaxcache, // ?????????scroll ????????????100px??? scrollBias : conf.lbias, // ???????????? ?????? anchor : conf.anchor, // ????? name="woo-anchor" ???????????????????????ixed nav?????? anchorDiff : conf.anchordiff, // ?????????????????? nearbyPageNum : conf.nearbypagenum, // ???????????? subPageNum : subpagenum, // ????????? unitsPerSub : unitsnum, // ????????? currentUpperPage : gtoupg, // ???????? totalPageNum : pcount, caching : pgcache, // masn ?????????unit dom $data : $pgdata, // ?????? hasNext ??? nextMode : hsn, analyzeResponse : WOOTEMP ? WOOTEMP.analyzeResponse[np] : $.noop, // ????????? lazyAdd : function (emp){ var pg = this, c = pg.config; // ??????????????? if( pg.$data.length === 0 && pg.idata.length === 0 ){ pg.caching = 0; // ????????????????ooter if( pg.isLastSub() ){ pg.showFooter(); } return; } pg.lazyAdding = true, pg.caching = 1; var $da = pg.$data, ida = pg.idata, len1 = $da && $da.length || 0, len2 = ida && ida.length || 0, tlen = len1 + len2, // Math.max(MASN[n].spaceNum(),6), ????????????? snum = emp ? Math.max(tlen + 1,c.unitsPerSub) : Woo.conf.appendnum, rnum = len1 + len2 - snum, addfirst = false; if( emp && MASN[n] ){ MASN[n].clearColY(), addfirst = true; } var $madd, imadd; if( snum <= len1 ){ // ??????$da ?????? $madd = $da.slice(0,snum), pg.$data = $da.slice(snum); }else{ $madd = $da, pg.$data = $(null), imadd = ida.slice(0,snum-len1), pg.idata = ida.slice(snum-len1); } // Start = new Date().getTime() // ????????onhtml ????? string ??? // ?????? [<jQuery???>] ??? // ????????????? $() ?????? var jonhtml = WOOTEMP && WOOTEMP.render[np] ? WOOTEMP.render[np](imadd) : imadd; MASN[n].appendContents($madd,jonhtml,false,false,addfirst,Woo.conf.batchnum,function (lastscreen,screen){ // End = new Date().getTime() if( rnum <= 0 ){ // pg ??? Pagine ?????? pg.caching = 0; var cp = pg.currentPage, spn = c.subPageNum; // ????????? if( cp % spn === 0 && pg.currentPage != pg.totalPageNum ){ window.setTimeout(function (){ pg.prepareNext() },400) } // ????????????????ooter if( pg.isLastSub() ){ pg.showFooter() } }else{ pg.caching = rnum <= c.unitsPerSub ? 1 : 2, // ???????????? pg.$pager.css({"height" : 0,"overflow" : "hidden"}); } window.setTimeout(function (){ pg.lazyAdding = false; Woo.conf.onLazyAddOver(pg, IDX); },200) }); } }); }else{ // ??? USERCLICK // ????????oading ?????ash change ?????????????? if( !PAGINE[n].lazyAdding && !PAGINE[n].loading || !USERCLICK ){ PAGINE[n].lazyAdding = true, PAGINE[n].scrollLoading = true; MASN[n].setCols(); // ??????????????????????????????????????????????? PAGINE[n].refreshPage(gtoupg); } } // ????????oading ?????ash change ?????????????? USERCLICK = false, Woo.$gonext.css('visibility', 'hidden'); }, /* @??????hash???????????????????? */ _getIdentityFromHash : function (){ var u = ''; if( H ){ u = H.getHash(), u = u.split('-')[0]; } return u; }, /* @??????????????????????????????? */ _getPageNumFromHash : function (){ var n = 1; if( H ){ var hash = H.getHash(); hash = hash.split('-p')[1]; if( hash ){ n = parseInt(hash) || n; } } return n; }, /* @??????????????????tab triger ?????? @????? $trigs - (obj) ????????? */ _getFocusIdx : function($trigs){ var arrform = Woo.conf.arrform, hs = Woo._getIdentityFromHash().substr(1), fcn = -1; for( var i=0; i<arrform.length; i++ ){ if( arrform[i] === hs ){ fcn = i; break; } } if(fcn === -1){ $trigs.each(function (i,e){ if($(e).hasClass('woo-cur')){ fcn = i; } }) } fcn = fcn === -1 ? 0 : fcn; return fcn; }, /* @?????croll ??? */ _onscroll : function(){ // ??????????????????????????onscroll if( !SCROLLINGTOTOP ){ var tp = $W.scrollTop(); // ?????????scrollbar ???????? if( PAGINE[IDX] && !PAGINE[IDX].lazyAdding && tp + WH > $('body').height() - Woo.conf.lbias ){ // pageinate ?????croll??? ????????????scroll ???????????? PAGINE[IDX].doLazyAdd(tp,true), PAGINE[IDX].doLoadNext(); ////////// } // ????????crollbar ???????? if( !BARSCROLL ){ // ????????nScroll ??? Woo.conf.onScroll(tp) if( $HOLDER.length ){ var conf = Woo.conf, $gopre = Woo.$gopre, $gonext = Woo.$gonext, $pagerv = $HOLDER.find(conf.frame[4]+':visible'), cond1 = $pagerv.find('.woo-pbr').length, cond2 = PAGINE[IDX] && PAGINE[IDX].hasNextUpperPage; $gopre.add($gonext).css('visibility',tp > $HOLDER.position().top && ( !cond1 || cond1 && cond2 ) ? 'visible' : 'hidden') } } } window.clearTimeout(TIMERINTERVAL), TIMERINTERVAL = window.setTimeout(Woo._onscroll,100); }, /* @????????????????????????????????????????? @????? $u - (obj) ?????? */ _doLoadImage : function($u){ // ????? srcd ?????? $u.find('img[srcd]').each(function (i,e){ var $e = $(e), or = $e.attr('srcd'); //??????????? srcd ?????? src if( or ){ $e.css("display","none") .one('load',function (){ $(this).css({ "visibility" : "visible" }) .fadeIn(400) }) // ???????????????error ?????? .one('error',function (){ var $t = $(this) $({}).delay(1000).queue(function (){ $t.one('error',function (){ $t.attr('src',or) }) .attr('src',or) }) }) .attr('src',or).removeAttr('srcd') } }) } }); /* @?????agine ?? */ Woo.Pagine = function (id,opts){ this.init(id,opts); } Woo.Pagine.prototype = { /* @?????agine ????????? @????? id - (Arr) ??????????d[0]???????????d[1]????? opts - (Dic) ???????????????????????? */ init : function (id,opts){ this.config = $.extend({}, opts); var pg=this, c = pg.config, upg = c.currentUpperPage, spn = c.subPageNum, undefined; pg.hasNextUpperPage = true, pg.caching = c.caching, pg.$data = c.$data || $(null), pg.idata = [], pg.$dom = id[0], pg.$pager = id[1], pg.unitsPerSub = c.unitsPerSub, pg.totalPageNum = c.totalPageNum, pg.currentUpperPage = upg, pg.currentPage = (upg-1)*spn + 1, // loading ????? pg.$loadingsm = $('<div id="woo-loading" class="woo-loading"></div>'); // ???arrurl ?? c.arrRequestUrl ????????orm ????????????????????? var arrurl = c.arrRequestUrl; if( $.type(arrurl[0]) === 'object' && arrurl[0].tagName.toLowerCase() === 'form' ){ pg.arrurl = arrurl; } // ???????????????????????? if( !pg.$dom.find(':first-child').length ){ // ??????????? ??????cont ??????false ??????????? pg.clearCont = false, pg.loadPage(pg.currentPage, 1 ); }else if( upg > 1 ){ pg.clearCont = true, pg.loadPage(pg.currentPage, 1); }else{ pg.setPager(); } }, /* @????????????????????????????????ontObj??????????????ager????? @????? cp - (Num) ???????? sub - (Bool) ???subpage ?? direct - (Bool) ?? .halting ????????????????? */ loadPage : function (cp,sub,direct){ if(this.loading){ this.scrollLoading = false; return; } var pg = this, c = pg.config, spn = c.subPageNum, isFirstSub = sub && ( cp % spn === 1 || spn == 1 ), clear = false, undefined; !sub && pg.scrollToAnchor(), pg.$pager.css("display","none"), pg.pagerVisible = false, pg.loading = true, // ?????????????????s ????? pg.currentPage = cp ??? pg.currentUpperPage = cp; if(spn > 1 && !sub){ cp = (cp - 1) * spn + 1; }else if(spn > 1 && sub){ pg.currentUpperPage = Math.floor((cp-.1)/spn) + 1; } if( (!sub || isFirstSub) && pg.clearCont ){ //url hash??? ???firstSub ?????ash pg.changeHashOnFirstLoad(c.identity, pg.currentUpperPage); // ????????oading ?????ash change ?????????????? USERCLICK = true, clear = true, pg.$dom.empty(); } pg.isPagerClick = false; pg._requestData(cp,sub,direct,false,clear); }, /* @????????croll ????????? */ scrollToAnchor : function (){ var pg = this, c = pg.config, $body = Woo.iswebkit ? $('body') : $('html'), $tohsh = $('a[name='+c.anchor+']'); // ???????????????????????? anchor ??? if( c.anchor && $tohsh.length ){ // ????????????fix ??????????????70 ????? var at = $tohsh.offset().top - c.anchorDiff || 0; if( $body.scrollTop() > at ){ $body.animate({scrollTop:at},200); } }else{ // ???ie6 ?????????????????????????????????????? // ???????? ActiveXObject ?? XMLHttpRequest ???????? ie6 if( !!window.ActiveXObject && !window.XMLHttpRequest ){ $body.animate({scrollTop:0},200); } } }, /* @?????????????????? */ getPageNum : function (){ return this.currentUpperPage; }, /* @?????oto ????????? @????? cp - (Num) ????? */ gotoPage : function (cp){ var pg = this; pg.clearCont = true, pg.loadPage(cp,false,true); }, /* @???????????pper page????????????????? */ refreshPage : function (n){ var pg = this, upg = n || pg.currentUpperPage; pg.$data = $(null), pg.idata = [], pg.caching = 0, pg.halting = true, pg.loading = false, pg.gotoPage(upg); }, /* @?????????????????????????????? @????? dir - (Num) ??ir=1??????????????+1???dir=-1??????????????-1 direct - (Bool) ?? .halting ????????????????? */ slidePage : function (dir,direct){ var pg = this, cp = pg.currentUpperPage; pg.clearCont = true, pg.loadPage(cp+dir,false,direct); }, /* @?????????????? @????? dir - (Num) ??ir=1??????????????+1???dir=-1??????????????-1 */ slideSubPage : function (dir){ var pg = this, cp = pg.currentPage; pg.clearCont = true, pg.loadPage(cp+dir,1); }, /* @??????????????????????? */ jumpPage : function (){ var pg = this, mypto = pg.$pager.find('[type=text]').val() || 0; if(mypto){ pg.clearCont = true, pg.loadPage(mypto); } }, /* @???????????????????????? */ prepareNext : function (){ var pg = this, cp = pg.currentPage; // ????????repare if( !pg.prepare || pg.prepare[0] !== cp+1 ){ pg._requestData(cp+1,true,false,true) } }, /* @?????????????????????????????? html ??? ????? */ requestOver : function (cp,sub,jsndata,hasnext,totalunit){ var pg = this, c = pg.config, // ???contObj ?????????????????????????? emp = !pg.$dom.find(':first-child').length, spn = c.subPageNum, isFirstSub = cp % spn === 1, //?????? undefined; pg.hasNoMore = !hasnext, // currentPage ????????? pg.currentPage = cp, pg.caching = 2; /***************** ?? afterRequest ??? ****************/ // totalunit ????????????????????????????¤???????unit ??? // ????? totalunit ??? pg.totalPageNum if( totalunit ){ pg.totalPageNum = Math.ceil(totalunit/c.unitsPerSub) } // ?????????? ???emp ??? if( emp ){ //page loading ???????? pg.loading = true; } var thn = c.nextMode, tcp = pg.currentPage, tup = pg.currentUpperPage || tcp, ttp = pg.totalPageNum, $loadingsm = pg.$loadingsm, undefined; // ????????????????????? pg.$dom.removeClass('woo-loading'); // ????????????????? if( !pg.isLastSub() ){ $loadingsm.css('visibility','hidden'); } if( thn || tcp === ttp ){ if( hasnext ){ pg.totalPageNum = tcp + 1; }else{ pg.totalPageNum = tcp; } }else if( !thn ){ if( !hasnext ){ pg.totalPageNum = tcp; }else if(tcp > ttp){ pg.totalPageNum = tcp + 1; } } /***************** ?? afterRequest ?????? ****************/ pg.idata = pg.idata.concat(jsndata); // ???????????????????????????????? c.lazyAdd.call(pg,emp); // ????????????????? af.call ????????f ???totalPageNum?????? // setPager ????????? if(!sub || isFirstSub || pg.isLastSub()){ pg.setPager(); } if( pg.caching ){ pg.$pager.css({ "display" : "block", "height" : 0, "overflow" : "hidden" }) }else if( pg.isLastSub() ){ pg.$pager.css({ "display" : "block", "height" : "auto" }) } pg.pagerVisible = true; }, // ?????????????????? always ??? _requestAlways : function (){ var pg = this, c = pg.config; pg.loading = false, pg.$dom.removeClass('woo-loading'), pg.$loadingsm.css('visibility','hidden'); // ????????? requestAlways ??? $.isFunction(c.requestAlways) && c.requestAlways(pg,IDX); }, // ??????????? ???c ????????????????? _beforeRequest : function (c){ var pg = this, $loadingsm = pg.$loadingsm; pg.$pager.after($loadingsm), Woo.$footer.css("display","none"); // ????????????????? if(c){ // ?????oading ???????? pg.$dom.addClass('woo-loading'), $loadingsm.css('visibility','hidden'), // ?????? WooTemp ?????????MASNUNITS WOOTEMP && WOOTEMP.reset(), // ???????????????????? pg.idata = [], pg.$data = $(null); // ??????? TIMERINTERVAL if( TIMERINTERVAL ){ window.clearTimeout(TIMERINTERVAL) } Woo._onscroll() }else{ $loadingsm.css('visibility','visible') } }, /* @?????????????? @????? cp - (Num) ???????? sub - (Bool) ???subpage ?? direct - (Bool) ?????????????????????????¤??? prepare - (Bool) ??????????????? clear - (Bool) ??????????????? */ _requestData : function (cp,sub,direct,prepare,clear){ var pg = this, c = pg.config, spn = c.subPageNum, arrurl = pg.arrurl, undefined; if( arrurl ){ !prepare && pg._beforeRequest(clear); // ??????????????????????? if( pg.prepare && pg.prepare[0] == cp ){ pg.requestOver(cp,sub,pg.prepare[1],pg.prepare[2],pg.prepare[3]), pg.prepare = null, // ??????????? always ?????? pg.loading=false $({}).delay(100).queue(function (){ pg._requestAlways() }), pg.scrollLoading = false; }else{ var $form = $(arrurl[0]); $.ajax({ type : 'POST', dataType : c.ajaxDataType, cache : typeof DEBUG !== 'undefined' && DEBUG ? false : !!c.ajaxCache, url : typeof DEBUG !== 'undefined' && DEBUG ? '?page='+cp : Woo.getFormAction($form) + cp + arrurl[1], data : Woo.paramForm($form), timeout : 20000, success : function(h){ // ????? debug??????????????????? typeof DEBUG !== 'undefined' && DEBUG && (h = DEBUG_DATA[Math.floor((DEBUG_DATA.length-1)*Math.random())]); if( pg.halting && !direct ) return; if( direct ){ pg.halting = false, pg.$dom.empty(); } // resp = [cont, hasnext, totalcount] // ??????????????????totalcount ???? var resp = c.analyzeResponse(h); if(prepare){ pg.prepare = [cp,resp[0],resp[1],resp[2]]; // ????????????????????? var lst = []; $(resp[0]).find('img[srcd]').each(function (i,e){ var $e = $(e); lst.push($e.attr('srcd')); }) Woo.recurseDo(function (a){ new Image().src = a.splice(0,1); return [a]; },[lst],lst.length,200) }else{ pg.requestOver(cp,sub,resp[0],resp[1],resp[2]); } pg.scrollLoading = false; pg._requestAlways(); }, error : function (x,statustext){ if(!prepare){ $('<div id="woo-retry" style="text-align:center;padding:16px 0 0;height:48px">????????<a href="javascript:;">??????~</a></div>') .click(function (e){ e.stopPropagation(), e.preventDefault(), pg._requestData(cp,sub), $(this).remove(); }) .insertAfter(pg.$dom); } pg._requestAlways() } }) // ajax over } } }, /* @????????????????? */ hasNextUpperPage : function (){ var pg = this; return pg.hasNextUpperPage; }, /* @??????????????????? */ isLastSub : function (){ var pg = this; return pg.currentPage % pg.config.subPageNum === 0 || pg.currentPage === pg.totalPageNum; }, /* @???????????????????????????footer ?? */ showFooter : function (){ var pg = this; pg.$pager.css({"height" : "auto"}), Woo.$footer.css("display","block"), // ????????oading ????? pg.$loadingsm.remove(); // ??????????? window.setTimeout(function (){ // ???intervaltimer if( pg.$data.length === 0 && pg.idata.length === 0 ){ window.clearTimeout(TIMERINTERVAL) } },200); // call onOnePageOver pg.config.onOnePageOver(pg, IDX); }, /* @????????ager????????his.pager ??? */ setPager : function (){ var pg = this, c = pg.config, cup = pg.currentUpperPage, nn = c.nearbyPageNum, tn = pg.totalPageNum, spn = c.subPageNum, // ????????? strPager = '', undefined; tn = Math.floor((tn-.1)/spn) + 1; if( (c.nextMode && cup >= tn || !c.nextMode && cup >= tn) && pg.hasNoMore ){ pg.hasNextUpperPage = false; } if( pg.isLastSub() ){ // ?????????????????tml ????? strPager = ['<div class="woo-pbr"><ul class="woo-dib">', cup==1 ? '' : '<li><a class="woo-pre" href="javascript:;" pdir="-1" >?????</a></li>' , cup==1 ? '<li class="woo-cur">1</li>' : '<li><a href="javascript:;">1</a></li>', cup-nn > 2 ? '<li class="woo-ell" >??</li>' : '', (function (){ var tmps = ''; for(var i=cup-nn; i<=cup+nn; i++){ if( i==cup && i!=1 ){ tmps += '<li class="woo-cur">'+i+'</li>'; }else if(i>1 && i<=tn){ tmps += '<li><a href="javascript:;">'+i+'</a></li>'; } } return tmps })(), cup+nn < tn-1 && !c.nextMode ? '<li class="woo-ell" >??</li>' : '', cup+nn < tn && !c.nextMode ? '<li><a href="javascript:;">'+tn+'</a></li>' : '', cup==tn ? '' : ( c.nextMode ? '<li class="woo-ell" >??</li>' : '') +'<li><a class="woo-nxt" href="javascript:;" pdir="1">?????</a></li>', '</ul></div>'].join(''); pg.$pager.find('.woo-pbr').remove(), pg.$pager.append(strPager); } else{ pg.$pager.find('.woo-pbr').remove(), pg.$pager.append(strPager); } // pager???click ??? if(!pg.isEventSetting){ pg.addEventOnPagerClick(), pg.isEventSetting = true; } var $gonext = Woo.$gonext; $gonext.css('display','block'); if( pg.$pager.find('.woo-pbr').length ){ $gonext.css('visibility', pg.hasNextUpperPage ? 'visible' : 'hidden'); } pg.pagerVisible = true, pg.doLazyAdd(); }, /* @?????rl hash??? ???firstSub ?????ash @????? idt - (Str) pagine ???????????? upg - (Num) pagine ????? currentUpperpage */ changeHashOnFirstLoad : function (idt,upg){ var pg = this, hash = idt + (upg > 1 ? '-p' + upg : ''), nowhs = H.getHash(); if( (nowhs || pg.isPagerClick) && nowhs !== hash ){ H.setHash(hash); } }, /* @????????ager ???click??? */ addEventOnPagerClick : function (){ var pg = this; pg.$pager.click(function (e){ var s = e.target; if( s && s.tagName && s.tagName.toLowerCase() != 'a'){ s = $(s).closest('a')[0]; } if( s && s.tagName && s.tagName.toLowerCase() === 'a' && !$(s).closest('.woo-nopagine',pg.$pager.get(0)).length){ e.preventDefault(); e.stopPropagation(); var pto = parseInt(s.innerHTML), dir = s.getAttribute('pdir'); // ??????????????? pg.isPagerClick = true; if(pto){ pg.gotoPage(pto); }else if(dir === 'jump'){ pg.jumpPage(); }else if(dir === 'sub'){ pg.slideSubPage(1); }else if(dir = parseInt(dir)){ pg.slidePage(dir); } } }) }, /* @?????????????? lazyAdd @??? wt - ????? window scrollTop ???? imm - ?????? lazyAdd */ doLazyAdd : function (wt,imm){ var pg = this, c = pg.config, wt = wt === undefined ? $W.scrollTop() : wt, dacol = pg.$dom.data('colY'), distance = pg.$pager.offset().top - wt - WH, mx = Math.max.apply(Math,dacol), mi = Math.min.apply(Math,dacol); if( !pg.lazyAdding && pg.pagerVisible && pg.caching && ( imm || distance < c.scrollBias || distance < mx - mi ) ){ c.lazyAdd.call(pg); } }, /* @?????????????? slideSubPage */ doLoadNext : function (){ var pg = this, c = pg.config; // ??crollTop + window?????????????? === more btn??ffsetTop ????? if( !pg.lazyAdding && !pg.halting && !pg.scrollLoading && pg.pagerVisible && (pg.caching < 2 || !pg.caching) && !pg.isLastSub() ){ pg.scrollLoading = true, pg.slideSubPage(1); } } } /* @?????asn ?? */ Woo.Masn = function ($cont,opts){ this.init($cont,opts); } Woo.Masn.prototype = { /* @?????asn ????????? @????? $cont - (Str) Masn ???????????om selector or jquery??? opts - (Dic) ??????????????????????? */ init: function ($cont,opts){ this.opts = $.extend({}, opts) var masn = this; masn.$dom = $($cont), masn.domInitWidth = masn.$dom.data('domwidth') || 'auto', masn.figure(), masn.arrangeContents(), masn.opts.onFirstArrange(IDX); }, figure : function (){ var masn = this, colY = [], $d = masn.$dom, c = masn.opts, exlen = 0, $cursor = $('<div>'); $d.css({ "position" : "relative" }); // ??????????? masn.colwf = masn.colw = c.columnWidth; if( c.firstColumnWidth ){ masn.colwf = c.firstColumnWidth; } masn.setCols(); // ???????????????0 for( var i=0; i<masn.colCount; i++ ){ colY[i] = 0; } masn.$dom.data('colY',colY); $d.prepend( $cursor ), masn.offset0 = $cursor.offset(), masn.domtop0 = $d.offset().top, masn.left0 = Math.round( $cursor.position().left ), $cursor.remove(), // ?????????????????????screen????? masn.lastscreen = masn.screen = 0; // ??? firstHeight ?????????????? if( c.firstHeight ){ masn.firstWidth = masn.colwf, masn.firstHeight = c.firstHeight; } }, clearColY : function (){ var masn = this, colY = []; for( var i=0; i<masn.colCount; i++ ){ colY[i] = 0; } masn.$dom.data('colY',colY); }, setContHeight : function (){ var masn = this, colY = masn.$dom.data('colY'); masn.$dom .css({ "height" : Math.max.apply(Math, colY.concat(WH - masn.domtop0)) }) .data('colY',colY) }, /* @???????? $dom ???????????? */ setCols : function (){ var masn = this, c = masn.opts, $dom = masn.$dom, messdiff = c.columnMessWidth || 0, messmg = messdiff ? c.columnMargin : 0, dw; masn.resetDomWidth(), dw = masn.domWidth, masn.colCount = Math.max( Math.floor( (dw + c.columnMargin - masn.colwf + masn.colw - messdiff) / masn.colw ), 1 ), masn.domWidth = masn.colCount*masn.colw + masn.colwf - masn.colw - c.columnMargin + messdiff - messmg, $dom.css('width',masn.domWidth); }, /* @???????? $dom ?????????????????resize??????????? MASN ??om width */ resetDomWidth : function (){ var masn = this, $dom = masn.$dom; $dom.css("width",masn.domInitWidth), masn.domWidth = masn.domInitWidth === 'auto' ? $dom.parent().width() : masn.domInitWidth; }, /* @?????????????????????????? @????? all - (Bool) ??????????????????????????????????????????????? */ arrangeContents : function (all){ var masn = this, $d = masn.$dom, c = masn.opts, anum = c.initAppendCounts, $c, clen; $c = $d.children().filter(c.unit), clen = $c.length; if( clen ){ // Decide whether append all preset units via html or not // all ????????????????????????????????? all && (anum = clen); // if param 'all' is false, we only append part of units according to c.initAppendCounts. // ????? anum ??nit????????? onArrange ?????? var $madd = $c.slice(0,anum); // if you preset too many units via html,say, more than unitsnum. // The overflow units should be added className woo-wait $c = $c.slice(anum).addClass('woo-wait'), // param 'all' refers to whether resize has been triggered // all ?????????????????? resize masn.appendContents($madd,null,true,all,!!c.firstHeight,anum,$.noop), // Load images in onAppend() which will not be called since the param indom is true here. c.onAppend($madd); } // Set dom visible after initialization // ????????$dom ?????????????? hidden ???? $d.css('visibility','visible'); if( $.isFunction(c.onArrange) ){ c.onArrange($c); } }, /* @???????????????????? @????? $data - (Obj) ?????? jQuery ??? htmlp - (Str) html ?????????????? $data indom - (Bool) ???????????? $data ?????om???????????ppend?????tmlp ???????? resize - (Bool) ???resize ?? addfirst - (Num) ?????????(???)????????????????? nm - (Num) ??????????????????????????????? callback - (Fun) ?????????????????????????????????? */ appendContents : function ($data,htmlp,indom,resize,addfirst,nm,callback){ var masn = this, c = masn.opts, $d = masn.$dom, colY = $d.data('colY'), nm = nm || c.batchNum, minI,minY; // set lastscreen masn.lastscreen = masn.screen; // call _placeEachUnit() which return both unit-wrap node and unit-inner node var arr = masn._placeEachUnit(masn,c,$d,$data,htmlp,indom,resize,addfirst && masn.firstHeight), $u = arr[0], inner = arr[1]; // indom = true indicate that $data has already been in the dom, no need to append again. // indom???????????? $data ?????om???????????ppend if( !indom ){ $u.appendTo($d); // If batchOpen is opened, appending process will be longer but smoother if( c.batchOpen ){ // Append small pieces of $u recursively Woo.recurseDo(function (b,inner){ var m = 0; b.append(function (i){ m++; return inner.eq(i).children(); }) c.onAppend(b), b = b.slice(nm), inner = inner.slice(m), // set content height masn.setContHeight(); return [b,inner]; },[$u,inner],Math.ceil($u.length/nm),c.batchDelay,function (){ callback(masn.lastscreen,masn.screen); }); }else{ // put unit-inner node into each unit-wrap node $u.append(function (i){ return inner.eq(i).children(); }) // set content height masn.setContHeight(), // Load images in onAppend() c.onAppend($u), callback(masn.lastscreen,masn.screen); } }else{ // Load images in onAppend() c.onAppend($u) // set content height masn.setContHeight(); } }, prePlaceUnit : function ($e, colY, colc, resize, f){ var masn = this, c = masn.opts, len = colc, minY, minI, left, ht, colwf; minY = Math.min.apply(Math, colY); // Get the index of minY column while (len--){ if( colY[len] == minY ){ minI = len; } } // Judge whether it's special column or not throught woo-spcol // ???minI ??????? woo-spcol ????? if( (minI === 0 && !c.rightAlignFirstBlock || minI === colc - 1 && c.rightAlignFirstBlock) && masn.colwf != masn.colw ){ colwf = masn.colwf; !f && ($e.addClass('woo-spcol')) } // if specialColumnOpen is true, unit height will be uncertain. // So,we need to removeData ht before calculating the virtual height. if( resize && c.specialColumnOpen ){ $e.removeData('ht').removeAttr('data-ht'); } // Calculate the position of each unit left = masn.colw * minI + masn.left0 + ( !c.rightAlignFirstBlock && minI && masn.colwf != masn.colw ? masn.colwf - masn.colw : 0 ), // Be sure to put 'datap-ht'(unit height) on each unit(.woo) if you have known the unit height in advance. // ????????????? data-ht ?????????????????????????????nit ??????????? ht = f ? masn.firstHeight : $e.data('ht') || $e.outerHeight(true), // Increase colY the height of the spercific column by the unit height plus gap. // ????????? colY ??inI ??????????? colY[minI] += ht + c.gap, // get the screen number // ????????screen ?? masn.screen = Math.ceil( (minY + ht) / WH ); return [minY, minI, left, ht, colwf]; }, _placeEachUnit : function(masn,c,$d,$data,htmlp,indom,resize,f){ var $pre = $d.prev(), haspre = !!$pre.length, strwrap = '', $htmlp = $(null), colY = $d.data('colY'), colc = masn.colCount, ars, minY, minI, left, ht, colwf, mm = 0, addf, // ?????esize ???????????????????????esize???????????? resf = resize && f, // ??????????????????????????????(?????)??? $addfc; if( !haspre || haspre && !$pre.hasClass('woo-tmpmasn') ){ var frame = Woo.conf.frame, clss = (frame[3].indexOf(0) == '.' ? frame[3].substr(1) : '') +' '+(frame[5].indexOf(0) == '.' ? frame[5].substr(1) : '')+' woo-loading'; $pre = $('<div class="woo-tmpmasn '+$d.attr('class')+'" style="position:relative;height:0;overflow:hidden;margin:0;padding:0;"></div>').removeClass(clss), $d.before($pre); } // indom ??rue ??? $data?????????????om ??? var $lame = $data.add(htmlp).removeClass('woo-wait'), $drawer = indom ? $lame.parent() : $pre.append($lame); $htmlp = $drawer.find(c.unit).not('.woo-f,.woo-wait').each(function (i,e){ var $e = $(e), id = $e.data('id'); // ???(??)????????????????????????????????(resize??)????? if( (i === 0 && f && !c.rightAlignFirstBlock || i === colc - 1 && f && c.rightAlignFirstBlock) ){ // ??? minY minI left ars = masn.prePlaceUnit($e, colY, colc, resize, f); minY = ars[0], minI = ars[1], left = ars[2], ht = ars[3], colwf = ars[4], // ????????????????? addf = '<div class="woo woo-f sc'+masn.screen+' co'+minI+' '+(colwf?'woo-spcol':'')+'" data-ht="'+ht+'" style="position:absolute;overflow:hidden;top:'+minY+'px;left:'+left+'px;width:'+(masn.firstWidth-c.columnMargin)+'px;"></div>', strwrap += addf; // ?????esize ?????????????????? if( resf ){ $addfc = $drawer.find('.woo-f:first').css({ "left" : left, "top" : minY }); }else{ $addfc = $(addf).append(c.sinkWhat); } mm = i; } // ??? minY minI left ars = masn.prePlaceUnit($e, colY, colc, resize); minY = ars[0], minI = ars[1], left = ars[2], ht = ars[3], colwf = ars[4], strwrap += '<div class="'+c.unit.substr(1)+' sc'+masn.screen+' co'+minI+' '+(colwf?'woo-spcol':'')+'" '+ (id?'data-id="'+id+'"':'')+' data-ht="'+ht+'" style="top:'+minY+'px;left:'+left+'px;"></div>'; $e.css({ "top" : minY, "left" : left }) .data('ht',ht) .removeClass(function (i,cls){ return 'woo-spcol ' + (cls.match(/(co|sc)\d+/ig) || []).join(' ') }) .addClass((colwf ? 'woo-spcol ' : '')+'sc'+masn.screen+' co'+minI); }) // ??????????????? colY $d.data('colY',colY); // resf ??????resize ????????????????? if( !resf && f ){ var arrp = $htmlp.toArray(); $htmlp = $(arrp.slice(0,mm).concat($addfc ? $addfc.toArray() : [],arrp.slice(mm))) } $pre.empty(); return [$(strwrap),$htmlp]; } } $.Woo = Woo; })(window)
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de