1/** 2 * @license Copyright (c) 2012 CommonTown Pte Ltd. All rights reserved. 3 */ 4// 2012-09-15 joel: attn and litebox 5(function($){ 6 7var detectbrowser=function() { 8 var matched, browser; 9 var uaMatch = function( ua ) { 10 ua = ua.toLowerCase(); 11 12 var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || 13 /(webkit)[ \/]([\w.]+)/.exec( ua ) || 14 /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || 15 /(msie) ([\w.]+)/.exec( ua ) || 16 ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || 17 []; 18 19 return { 20browser: match[ 1 ] || "", 21 version: match[ 2 ] || "0" 22 }; 23 }; 24 25 matched = uaMatch( navigator.userAgent ); 26 browser = {}; 27 28 if ( matched.browser ) { 29 browser[ matched.browser ] = true; 30 browser.version = matched.version; 31 } 32 33 // Chrome is Webkit, but Webkit is also Safari. 34 if ( browser.chrome ) { 35 browser.webkit = true; 36 } else if ( browser.webkit ) { 37 browser.safari = true; 38 } 39 40 jQuery.browser = browser; 41}; 42if (!$.browser) detectbrowser(); 43 44 45// ----- ATTN / POINTER ----- 46var $attn, $pointer; 47var msg_tmo_id; // timeout obj id 48$.extend({ 49 attn: function(html,opt) { 50 opt = $.extend({ 51 autoclose: 2000, // close after msec 52 duration: 500, // fadein in msec 53 close: false, // show close button 54 left: 'auto', // x offset (auto=center) 55 top: 150, // y offset 56 width: 400, 57 height: 'auto', 58 bottom:'auto', 59 after_open: null, 60 point_at: null // XXX 61 }, opt || {}); 62 63 if (typeof opt.autoclose!='number') opt.close=true; 64 65 if (msg_tmo_id) clearTimeout(msg_tmo_id); 66 if (!$attn) { 67 $('body').append($attn=$('<div class="ctjq_attn"><div class="content_"></div><div class="close_">Close</div></div>')); 68 $attn.hover(function(ev) { 69 if (ev.type=='mouseenter') { 70 if (msg_tmo_id && opt.close) { 71 if (opt.point_at) { 72 $attn.pointer(opt.point_at); 73 $attn.stop().fadeTo(0,.8); 74 } 75 clearTimeout(msg_tmo_id); 76 } 77 } 78 else if (opt.point_at) opt.point_at.pointer(); 79 }); 80 $('.close_',$attn).css('opacity',0.7) 81 .hover(function(ev){ $(this).css('opacity',(ev.type=='mouseenter')?1:0.7); }) 82 .click(function(){ $attn.fadeOut(opt.duration); }); 83 } 84 85 var css; 86 css={height:opt.height,left:'auto',top:'auto',bottom:'auto',right:'auto'}; 87 css.bottom=opt.bottom; 88 css.top=opt.top; 89 css.width=opt.width; 90 91 $attn.css('width',css.width); 92 if (opt.right) css.right=opt.right; 93 else css.left=(opt.left=='auto')?($(window).width()-$attn.width())/2:opt.left; 94 95 if (html) { 96 $('.content_',$attn).html(html); 97 $attn.css(css).fadeIn(opt.duration,opt.after_open); 98 $('.close_',$attn).toggle(opt.close?true:false); 99 if (opt.autoclose) msg_tmo_id=setTimeout(function(){ $attn.fadeOut(1000); }, parseInt(opt.autoclose)); 100 } 101 else $attn.fadeOut(opt.duration); 102 return this; 103 }, 104 105 pointer: function($dest,opt) { 106 var opos,owidth,oheight,npos,nwidth,nheight; 107 if (!$pointer) { 108 $pointer=$('<div class="ctjq_pointer"></div>'); 109 $('body').append($pointer); 110 } 111 112 if (!$dest||!$dest.length) { $pointer.hide(); return; } 113 114 opos=this.offset(); 115 owidth=this.outerWidth(); 116 oheight=this.outerHeight(); 117 nwidth=$dest.outerWidth()+13; 118 nheight=$dest.outerHeight()+13; 119 npos=$dest.offset(); 120 121 $pointer.css({top:opos.top,left:opos.left,width:owidth,height:oheight}).show(); 122 123 $pointer.stop().animate({ 124 width:nwidth, 125 height:nheight, 126 top: npos.top-11, 127 left: npos.left-11 128 }, 129 { 130 duration:Math.round((Math.abs(opos.left-npos.left)+Math.abs(opos.top-npos.top))/1.2), 131 easing:'easeInOutExpo', 132 complete: function() { 133 if (opt&&typeof(opt.callback)=='function') opt.callback.call(this); 134 } 135 } 136 ); 137 return this; 138 } 139}); 140 141// ----- LITEBOX ----- 142var $lb_screen, $lb_dialog, $lb_loading; 143var lb_closefn; 144var lb_placefn; 145var lb_returnValue; 146var lb_args; // need this coz arrows click closure is the init closure 147var lb_compute_size=function(args) { 148 args.winw=$(window).width(), args.winh=$(window).height(); 149 if (args.width) args.objw=args.width; 150 if (args.height) args.objh=args.height; 151 if (args.maximize || args.winw<args.objw+80) args.objw=args.winw-80; 152 if (args.maximize || args.winh<args.objh+80) args.objh=args.winh-80; 153 if (args.proportional) { 154 var wratio=args.objw/args.width; 155 var hratio=args.objh/args.height; 156 if (Math.abs(wratio-hratio)>.01) { 157 if (wratio>hratio) args.objw=args.width*hratio; 158 else args.objh=args.height*wratio; 159 } 160 } 161}; 162var lb_frames_reconfig=function(assoc){ 163 if (window.frameElement) { 164 var w=window; 165 var dv=(document.all?'parentWindow':'defaultView') ; 166 while(w&&w.frameElement&&w.frameElement.ownerDocument) { 167 w=w.frameElement.ownerDocument[dv]; 168 $('frameset',w.document).each(function(i){ 169 var $cur=$(this); 170 var cols,rows; 171 if (assoc&&assoc[this.id]) { 172 if (cols=assoc[this.id].cols) $cur.data('rl_cols',$cur.attr('cols')).attr('cols',cols); 173 if (rows=assoc[this.id].rows) $cur.data('rl_rows',$cur.attr('rows')).attr('rows',rows); 174 } 175 else { 176 //revert 177 if (cols=$cur.data('rl_cols')) $cur.attr('cols',cols); 178 if (rows=$cur.data('rl_rows')) $cur.attr('rows',rows); 179 } 180 }); 181 } 182 } 183}; 184 185$.extend({ 186 litebox:function(args) { 187 // url: 188 // Optional args 189 // type: image 190 // title: string, width: number, height: number 191 // X easy_close: true to close when click outside litebox 192 193 if (typeof args=='string') { 194 if (args=='close'&&lb_closefn) lb_closefn(); 195 return; 196 } 197 if (typeof args.close=='undefined') args.close=true;
198 if (args.query) { 199 var oldok=args.ok; 200 args.title=args.query; 201 if (typeof args.cancel=='undefined') args.cancel=true; 202 if (typeof args.close=='undefined') args.close=false; 203 args.element='<input size="30" class="text_" value=""/>'; 204 args.ok=function(dom){ 205 if (typeof oldok=='function') oldok(dom.value); 206 } 207 } 208 209 if (args.url && !args.width) args.maximize=true; 210 211 $('#ive_helpline').fadeOut(); // hide helpline 212 213 // init dom and callbacks once 214 if (!$lb_screen) { 215 $lb_screen=$('<div class="ctjq_litebox_screen"><div class="loading_"></div></div>'); 216 $lb_loading=$('.loading_',$lb_screen); 217 $('body').append($lb_screen); 218 219 $lb_dialog=$( 220'<div class="ctjq_litebox_dialog">' 221+'<div class="move_cover_"></div>' 222+'<div class="btn_close_"></div>' 223+'<div class="loading_"></div>' 224+'<div class="title_"></div>' 225+'<div class="content_"></div>' 226+'<div class="caption_"></div>' 227+'<div class="count_"></div>' 228+'<div class="arrow_ prev_"></div>' 229+'<div class="arrow_ next_"></div>' 230+'<div class="control_">' 231 +'<input type="button" class="btn_cancel_" value="Cancel"/>' 232 +'<input type="button" class="btn_ok_" value="OK"/>' 233+'</div>' 234+'</div>' 235); 236 $('body').append($lb_dialog); 237 238 lb_closefn=function(status){ 239 $('.inner_',$lb_dialog).unbind('load.litebox'); 240 $lb_dialog.stop().slideUp(200); 241 if (status=='success'&&lb_args.success&&(typeof lb_args.success=='function')) lb_args.success.call(this,lb_returnValue); 242 243 $lb_screen.stop().animate({opacity:0}
243,300,null,function(){ 244 $lb_screen.hide(); 245 // old dialog code set the returnValue to expect reload of page 246 if ((lb_returnValue&&lb_returnValue.refresh) || window.returnValue=='full_refresh') document.location.reload(); 247 }); 248 if (!lb_args.background_scroll) 249 $('body').css('overflow','visible'); // reactivate scroll event 250 251 // 2013-08-16 joel: revert frames config 252 if (window.frameElement&&lb_args.frames_reconfig) lb_frames_reconfig(); 253 }; 254 255 //$('.btn_close_',$lb_dialog).click(lb_closefn); 256 257 $('.btn_ok_,.btn_cancel_,.btn_close_',$lb_dialog).click(function(ev){ 258 var $data=$('.content_ > *',$lb_dialog).detach(); 259 var btnarg=this.className.replace(/.*btn_(\w+)_.*/,'$1'); 260 if (lb_args[btnarg] && typeof lb_args[btnarg]=='function') lb_args[btnarg]($data.get(0)); 261 lb_closefn(); 262 }); 263 264 $('.arrow_',$lb_dialog).hover(function(ev){ $(this).toggleClass('armed_'); }); 265 $('.next_',$lb_dialog).click(function(ev){ 266 if (typeof lb_args.next=='function') lb_args.next.call(this,ev); 267 }); 268 $('.prev_',$lb_dialog).click(function(ev){ 269 if (typeof lb_args.prev=='function') lb_args.prev.call(this,ev); 270 }); 271 272 // 2012-07-26 joel: DIALOG DND 273 $lb_dialog 274 .mousedown(function(ev){ 275 var tgt=ev.srcElement||ev.target; 276 // right click only and on dialog frame and title 277 if (ev.button!=0||(tgt.className.indexOf('ctjq_litebox_dialog')<0&&tgt.className.indexOf('title_')<0)) return; 278 279 var overflow=$(tgt).css('overflow'); 280 if ('|INPUT|TEXTAREA|SELECT|OPTION|'.indexOf('|'+tgt.tagName+'|')>=0) return; 281 if (overflow=='scroll'||overflow=='auto') return; // click on scrollbar will cause sticking problem 282 283 if (tgt.className.indexOf('title_')>=0) tgt=$(tgt).closest('.ctjq_litebox_dialog').get(0); 284 285 var $content=$('.content_',tgt); 286 $('.move_cover_',tgt).height($content.height()).width($content.width()).show(); 287 288 var $obj=$(this); 289 var pos={top:parseInt($obj.css('top')),left:parseInt($obj.css('left'))}; 290 // o: dialog original pos, d: mouse down pos 291 var ox=pos.left, oy=pos.top; 292 var dx=ev.pageX, dy=ev.pageY; 293 294 var 295 dmove=function(ev){ 296 // ev.which indicates the mouse button which is pressed. not used. now using the overflow detection above 297 var newpos; 298 $obj.css(newpos={left:ox+ev.pageX-dx,top:oy+ev.pageY-dy}); 299 ev.stopImmediatePropagation(); 300 return false; 301 } 302 ,dstop=function(ev){ 303 $('.move_cover_',tgt).hide(); 304 $(document).unbind('.ive_dialog'); 305 return false; 306 }; 307 308 $(document).bind({'mousemove.ive_dialog':dmove,'mouseup.ive_dialog':dstop}); 309 ev.stopImmediatePropagation(); 310 return false; 311 }) 312 // show the caption and count only when hover 313 /* 314 .hover(function(ev){ 315 if (ev.type=='mouseenter') $('.caption_,.count_').fadeIn(300); 316 else $('.caption_,.count_').fadeOut(300); 317 }) 318 */ 319 ; 320 } 321 322 // per call starts here 323 lb_args=args; 324 if (typeof lb_args.screen_opacity=='undefined') lb_args.screen_opacity=0.4; 325 if (typeof lb_args.background_scroll=='undefined') lb_args.background_scroll=false; 326 if (typeof lb_args.screen=='undefined') lb_args.screen='dark'; 327 328 // 2013-08-16 joel: frames reconfig 329 if (window.frameElement&&lb_args.frames_reconfig) lb_frames_reconfig(lb_args.frames_reconfig); 330 331 lb_compute_size(lb_args); // compute size 332 333 if ($lb_loading) $lb_loading.css({top:lb_args.winh/3,left:(lb_args.winw-$lb_loading.width())/2}).show(); 334 335 var serialcall=false; // called again while lb is active 336 337 // visibility 338 if (lb_args.screen=='dark' && !lb_args.background_scroll) 339 $('body').css('overflow','hidden'); // block scroll event 340 341 if (lb_args.screen!='none') { 342 if ($lb_dialog.is(':visible')) 343 //if ($lb_screen.is(':visible')) 344 { 345 serialcall=true; 346 $('.content_',$lb_dialog).slideUp(100); 347// $lb_dialog.animate({top:50},200); // JUMP ANIM 348 } 349 else $lb_screen.css('opacity',0).show().stop().animate({opacity:lb_args.screen_opacity},200); // show if not visible 350 } 351 352 if (lb_args.title) $('.title_',$lb_dialog).html(lb_args.title).show(); 353 else $('.title_',$lb_dialog).hide(); 354 $('.loading_',$lb_dialog).show(); 355 356 $('.next_,.prev_',$lb_dialog).hide(); 357 358 $('.caption_',$lb_dialog).html(lb_args.caption||'').hide(); 359 $('.count_',$lb_dialog).html(lb_args.count||'').hide(); 360 361 $('.control_',$lb_dialog).toggle(lb_args.ok?true:false); 362// $('.btn_ok_',$lb_dialog).toggle(lb_args.ok?true:false); 363 $('.btn_close_',$lb_dialog).toggle(lb_args.close?true:false); 364 365 // logic 366 var contenthtml; // can be dom or html string 367 var css={}; 368 369 370 // element: dom 371 if (lb_args.element) { 372 lb_args.type='dom';
373 contenthtml=$(lb_args.element).clone(); 374 } 375 376 // url: image or iframe 377 var src=(typeof lb_args.url=='string'?lb_args.url:''); 378 if (src || lb_args.type=='iframe') { 379 if (!lb_args.type) lb_args.type='iframe'; // not set => use iframe 380 if (lb_args.type=='iframe') { 381 var sep=(src.indexOf('?')>=0)?'&':'?'; 382 if (src&&src.indexOf('litebox=')<0) src+=sep+'litebox=1'; 383 } 384 385 // contenthtml 386 if (true||src) { 387 if (lb_args.type=='image') { 388 contenthtml='<img class="inner_" src="'+src+'" style="display:none"/>'; 389 } 390 else if (lb_args.type=='iframe') { 391 contenthtml='<iframe name="litebox_iframe" class="inner_" width="'+lb_args.objw+'" height="'+lb_args.objh+'" src="'+src+'" frameborder="0"></iframe>'; 392 } 393 } 394 } 395 396 lb_placefn=function(){ 397 var cb=function(){ 398 $('input:text,textarea',$lb_dialog).filter(':visible:first').focus(); 399 $('.inner_',$lb_dialog).slideDown(300); 400 if (lb_args.next) $('.next_',$lb_dialog).slideDown(200); 401 if (lb_args.prev) $('.prev_',$lb_dialog).slideDown(200); 402 if (lb_args.caption) $('.caption_',$lb_dialog).css({bottom:200,opacity:0}).show().animate({opacity:.5,bottom:0},{duration:400}); 403 if (lb_args.count) $('.count_',$lb_dialog).css({bottom:50,opacity:0}).show().animate({opacity:.3,bottom:0},{duration:300}); 404 }; 405 // query box need to grab w/h here 406 if (typeof lb_args.objw=='undefined') lb_args.objw=$lb_dialog.width(); 407 if (typeof lb_args.objh=='undefined') lb_args.objh=$lb_dialog.height(); 408 409 var left,top; 410 if (lb_args.place_top) { 411 var hdiff=$lb_dialog.outerHeight()-$lb_dialog.height(); 412 if (lb_args.place_top<0) 413 top=(lb_args.winh-lb_args.objh)-hdiff+lb_args.place_top; 414 else 415 top=lb_args.place_top; 416 } 417 else { 418 // default: center 419 top=(lb_args.winh-lb_args.objh)/2; 420 } 421 if (lb_args.left) left=lb_args.left; 422 else left=(lb_args.winw-lb_args.objw)/2; 423 $lb_dialog.animate({left:left,top:top}, { duration:100 }); 424 if (serialcall) { 425 $lb_dialog.show(); // 2013-06-19 joel: show again for sure, somehow catalog generates two click events (?!) 426 $('.content_',$lb_dialog).slideDown(300,cb); // fadein content_ 427 } 428 else $lb_dialog.fadeIn(300,cb); // simple fadein 429// console.log('win',lb_args.winw,lb_args.winh); 430 }; 431 432 var lb_readyfn=function(ev){ 433 if ($lb_loading) $lb_loading.hide(); // this is the one on the screen 434 $('.loading_',$lb_dialog).hide(); // this is the one in the litebox 435 if (this.tagName=='IMG') { 436 var newh,neww; 437 var natw=this.width||this.naturalWidth,nath=this.height||this.naturalHeight; 438 if (!natw) { 439 var newimg=new Image(); 440 newimg.src=this.src; 441 natw=newimg.width; 442 nath=newimg.height; 443 } 444 newh=nath; 445 neww=natw; 446 // scale proportionally 447 if (natw>lb_args.objw || nath>lb_args.objh) { 448 if (natw/lb_args.objw>nath/lb_args.objh) { 449 $(this).width(lb_args.objw); 450 newh=nath/(natw/lb_args.objw); 451 neww=lb_args.objw; 452 } 453 else { 454 $(this).height(lb_args.objh); 455 newh=lb_args.objh; 456 neww=natw/(nath/lb_args.objh); 457 } 458 } 459 // arrows 460 $('.arrow_',$lb_dialog).height(newh); 461 lb_args.objw=neww; 462 lb_args.objh=newh; 463 } 464 465 if (typeof lb_args.ready=='function') lb_args.ready.call(this.contentDocument); 466 lb_placefn(); 467 $(this).unbind('load.litebox'); // 2012-11-13 joel: drop it. Call it once only 468 }; 469 470 if (contenthtml) { 471 $('.content_',$lb_dialog).html(contenthtml); 472 473 // ONLOAD callback 474 if (typeof contenthtml=='string') $('.inner_',$lb_dialog).bind('load.litebox',lb_readyfn); 475 else { 476 // must be dom, show content and call readyfn 477 $('.content_ > *',$lb_dialog).css('visibility','visible').show(); 478 lb_readyfn(); 479 } 480 } 481 // the form action cannot take obj as target, must be the iframe name 482 if (lb_args.type=='iframe') return 'litebox_iframe'; 483 //if (lb_args.type=='iframe') return $('iframe:first',$lb_dialog).get(0); 484 } 485 486 // place data for the 'success' callback to retrieve 487 // if data.refresh==true, parent will refresh 488 ,litebox_return:function(data,callparent) { 489 // this is usually called from within the litebox which need to call the container window's litebox_return 490 if (typeof callparent=='undefined') window.parent.$.litebox_return(data,false); 491 else { 492 lb_returnValue=data; 493 lb_closefn('success'); 494 } 495 } 496 497 // resize the litebox, call parent's litebox unless callparent==false 498 ,litebox_resize:function(args,callparent) { 499 if (typeof callparent=='undefined') return window.parent.$.litebox_resize(args,false); 500 else { 501 if (typeof lb_args!='object') return; 502 if (typeof args.maximize=='undefined') args.maximize=false; 503 lb_args.width=args.width; 504 lb_args.height=args.height; 505 lb_args.proportional=args.proportional; 506 lb_args.maximize=args.maximize; 507 lb_compute_size(lb_args); 508 $('.inner_',$lb_dialog).animate({width:lb_args.objw,height:lb_args.objh}); 509 lb_placefn(); 510 return {width: lb_args.objw, height:lb_args.objh}; 511 } 512 } 513}); 514 515 516// SEQTHESE
517var $seqtrash,$seqedit,$seqadd,$seqbtns; 518$.fn.seqthese=function(sel,opt){ 519 var $ctr=this; // container 520 var $list=$(sel,$ctr); 521 if (sel=='stop') { 522 $seqbtns.hide(); 523 $seqadd.hide(); 524 return $ctr.off('.seqthese'); 525 //return $list.unbind('.seqthese'); 526 } 527 528 opt = $.extend({ 529 edit:false 530 ,trash:false 531 }, opt || {}); 532 533 // init once 534 if (!$seqbtns) { 535 var style='position:absolute; display:none; width:16px; height:16px; z-index:100; top:4px; cursor:pointer; '; 536 $seqedit=$('<div id="seqthese_edit" class="seqthese" style="background:url(/rs/action/edit.png) no-repeat; '+style+'right:0"></div>'); 537 $seqtrash=$('<div id="seqthese_trash" class="seqthese" style="background:url(/rs/action/delete.png) no-repeat; '+style+'right:18px"></div>'); 538 $seqadd=$('<div id="seqthese_add" class="seqthese" style="background:url(/rs/action/add.png) no-repeat; '+style+'left:0"></div>'); 539 $seqbtns=$([$seqtrash.get(0),$seqedit.get(0)]); 540 $('body').append($seqbtns).append($seqadd); 541 542 $seqbtns.mousedown(function(ev){ 543 ev.stopImmediatePropagation(); 544 }); 545 546 $seqedit.click(function(ev){ 547 var $target=$seqedit.parent(); 548 var urltail=$target.data('seqthese').urltail; 549 var lbopt={ url:opt.edit+urltail, screen_opacity:0.2, background_scroll:true , left:30}; 550 $('body').append($seqbtns); // move buttons out of obj 551 if (typeof opt.onedit=='function') opt.onedit.call($target.get(0)); 552 if (typeof opt.oneditdone=='function') lbopt.close=function(){ opt.oneditdone.call($target.get(0)); } 553 $.litebox(lbopt); 554 }); 555 $seqtrash.click(function(ev){ 556 var $target=$seqedit.parent(); 557 var urltail=$target.data('seqthese').urltail; 558 $('body').append($seqbtns); // move buttons out of obj 559 if (confirm('Delete this channel?')) { 560 $target.remove(); 561 $.ajax({ url:opt.trash+urltail}); 562 } 563 }); 564 565 $seqadd.click(function(){ 566 var lbopt={ url:opt.add, screen_opacity:0.2, background_scroll:true , left:30}; 567 if (typeof opt.onadddone=='function') lbopt.close=function(){ opt.onadddone.call(); } 568 $.litebox(lbopt); 569 }); 570 } 571 572 var $grabbed=false; 573 // add button 574 if ($list.lengt) $list.last().after($seqadd); 575 else $ctr.append($seqadd); 576 $seqadd.css({position:'relative',margin:'auto'}).show(); 577 578// $list.css('position','relative'); 579 $ctr 580 .on('mousedown.seqthese',sel,function(ev){ 581 if ($grabbed) $grabbed.removeClass('grabbed_'); 582 $grabbed=$(this); 583 $grabbed.addClass('grabbed_'); 584 585 $(document).bind('mouseup.seqthese',function(ev){ 586 $grabbed.removeClass('grabbed_'); 587 $grabbed=false; 588 $(document).unbind('.seqthese'); 589 ev.stopImmediatePropagation(); 590 }); 591 ev.stopImmediatePropagation(); 592 return false; 593 }) 594 .on('mouseenter.seqthese',sel,function(ev){ 595 if ($grabbed) return; 596 $seqbtns.show(); 597 $(this).css('position','relative').append($seqtrash).append($seqedit); // only trash and edit button 598 }) 599 .on('mouseleave.seqthese',sel,function(ev){ 600 if ($grabbed&&($grabbed.get(0)!=this)) { 601 var $target=$(this); 602 var h=$target.height(); 603 if (ev.offsetY/h>0.5) { 604 $target.after($grabbed); 605 } 606 else { 607 $target.before($grabbed); 608 } 609 } 610 }) 611 ; 612 613}; 614 615$.fn.linkto=function(opt){ 616 if (opt.newwin) { 617 window.open(opt.url); 618 } 619 else { 620 document.location=opt.url; 621 } 622}; 623 624// ----- MISC 625$.extend({ 626 getcookie:function(name){ 627 var start = document.cookie.indexOf(name+"="); 628 var len = start+name.length+1; 629 if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 630 if (start == -1) return ""; 631 var end = document.cookie.indexOf(";",len); 632 if (end == -1) end = document.cookie.length; 633 return unescape(document.cookie.substring(len,end)); 634 } 635 636 ,setcookie:function(c_name,value,exdays) { 637 var exdate=new Date(); 638 if (!exdays) exdays=3; 639 exdate.setDate(exdate.getDate() + exdays); 640 var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); 641 document.cookie=c_name + "=" + c_value; 642 } 643 644 ,getCSS:function(fn){ 645 var fstem=fn.match(/([\w\-]*)\.(\w*)$/)[1]; 646 var id='getcss-'+fstem; 647 var $old=$('link.getcss#'+id); 648 if ($old.length) return $old.get(0); 649 650 var scrtag=document.createElement('link'); 651 scrtag.rel='stylesheet'; 652 scrtag.type = 'text/css'; 653 scrtag.className = 'getcss'; 654 scrtag.href = fn; 655 scrtag.id = id; 656 657 var head=document.head||document.getElementsByTagName('head')[0]; 658 head.appendChild(scrtag); 659 return scrtag; 660 } 661}); 662 663})(jQuery); 664
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.