1/* 2 * Thickbox 3.1 - One Box To Rule Them All. 3 * By Cody Lindley (http://www.codylindley.com) 4 * Copyright (c) 2007 cody lindley 5 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php 6 * 7 * Patched Version by Jamie Thompson - Fixes IE7 Positioning Issues 8 * http://jamazon.co.uk/web/2008/03/17/thickbox-31-ie7-positioning-bug/ 9*/ 10 11var tb_pathToImage = "http://www.fukuoka-cambodia.jp/common/thickbox/loadingAnimation.gif"; 12 13/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ 14 15// fixes the fact that ie7 now reports itself as MSIE 6.0 compatible 16$.browser.msie6 = 17 $.browser.msie 18 && /MSIE 6\.0/i.test(window.navigator.userAgent) 19 && !/MSIE 7\.0/i.test(window.navigator.userAgent); 20 21//on page load call tb_init 22$(document).ready(function(){ 23 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox 24 imgLoader = new Image();// preload image 25 imgLoader.src = tb_pathToImage; 26}); 27 28//add thickbox to href & area elements that have a class of .thickbox 29function tb_init(domChunk){ 30 $(domChunk).click(function(){ 31 var t = this.title || this.name || null; 32 var a = this.href || this.alt; 33 var g = this.rel || false; 34 tb_show(t,a,g); 35 this.blur(); 36 return false; 37 }).removeClass('thickbox'); 38} 39 40function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link 41 42 try { 43 if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 44 $("body","html").css({height: "100%", width: "100%"}); 45 $("html").css("overflow","hidden"); 46 if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6 47 $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>"); 48 $("#TB_overlay").click(tb_remove); 49 } 50 }else{//all others 51 if(document.getElementById("TB_overlay") === null){ 52 $("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>"); 53 $("#TB_overlay").click(tb_remove); 54 } 55 } 56 57 if(tb_detectMacXFF()){ 58 $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash 59 }else{ 60 $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity 61 } 62 63 if(caption===null){caption="";} 64 $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page 65 $('#TB_load').show();//show loader 66 67 var baseURL; 68 if(url.indexOf("?")!==-1){ //ff there is a query string involved 69 baseURL = url.substr(0, url.indexOf("?")); 70 }else{ 71 baseURL = url; 72 } 73 74 var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/; 75 var urlType = baseURL.toLowerCase().match(urlString); 76 77 if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images 78 79 TB_PrevCaption = ""; 80 TB_PrevURL = ""; 81 TB_PrevHTML = ""; 82 TB_NextCaption = ""; 83 TB_NextURL = ""; 84 TB_NextHTML = ""; 85 TB_imageCount = ""; 86 TB_FoundURL = false; 87 if(imageGroup){ 88 TB_TempArray = $("a[@rel="+imageGroup+"]").get(); 89 for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { 90 var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); 91 if (!(TB_TempArray[TB_Counter].href == url)) { 92 if (TB_FoundURL) { 93 TB_NextCaption = TB_TempArray[TB_Counter].title; 94 TB_NextURL = TB_TempArray[TB_Counter].href; 95 TB_NextHTML = "<span id='TB_next'> <a href='#'>Next ></a></span>"; 96 } else { 97 TB_PrevCaption = TB_TempArray[TB_Counter].title; 98 TB_PrevURL = TB_TempArray[TB_Counter].href; 99 TB_PrevHTML = "<span id='TB_prev'> <a href='#'>< Prev</a></span>"; 100 } 101 } else { 102 TB_FoundURL = true; 103 TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length); 104 } 105 } 106 } 107 108 imgPreloader = new Image(); 109 imgPreloader.onload = function(){ 110 imgPreloader.onload = null; 111 112 // Resizing large images - orginal by Christian Montoya edited by me. 113 var pagesize = tb_getPageSize(); 114 var x = pagesize[0] - 150; 115 var y = pagesize[1] - 150; 116 var imageWidth = imgPreloader.width; 117 var imageHeight = imgPreloader.height; 118 if (imageWidth > x) { 119 imageHeight = imageHeight * (x / imageWidth); 120 imageWidth = x; 121 if (imageHeight > y) { 122 imageWidth = imageWidth * (y / imageHeight); 123 imageHeight = y; 124 } 125 } else if (imageHeight > y) { 126 imageWidth = imageWidth * (y / imageHeight); 127 imageHeight = y; 128 if (imageWidth > x) { 129 imageHeight = imageHeight * (x / imageWidth); 130 imageWidth = x; 131 } 132 } 133 // End Resizing 134 135 TB_WIDTH = imageWidth + 30; 136 TB_HEIGHT = imageHeight + 60; 137 $("#TB_window").append("<img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>éãã</a> </div>"); 138 139 $("#TB_closeWindowButton").click(tb_remove); 140 141 if (!(TB_PrevHTML === "")) { 142 function goPrev(){ 143 if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);} 144 $("#TB_window").remove(); 145 $("body").append("<div id='TB_window'></div>"); 146 tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); 147 return false; 148 } 149 $("#TB_prev").click(goPrev); 150 } 151 152 if (!(TB_NextHTML === "")) { 153 function goNext(){ 154 $("#TB_window").remove(); 155 $("body").append("<div id='TB_window'></div>"); 156 tb_show(TB_NextCaption, TB_NextURL, imageGroup); 157 return false; 158 } 159 $("#TB_next").click(goNext); 160 161 } 162 163 document.onkeydown = function(e){ 164 if (e == null) { // ie 165 keycode = event.keyCode; 166 } else { // mozilla 167 keycode = e.which; 168 } 169 if(keycode == 27){ // close 170 tb_remove(); 171 } else if(keycode == 190){ // display previous image 172 if(!(TB_NextHTML == "")){ 173 document.onkeydown = ""; 174 goNext(); 175 } 176 } else if(keycode == 188){ // display next image 177 if(!(TB_PrevHTML == "")){ 178 document.onkeydown = ""; 179 goPrev(); 180 } 181 } 182 }; 183 184 tb_position(); 185 $("#TB_load").remove(); 186 $("#TB_Image").click(tb_remove); 187 $("#TB_window").css({display:"block"}); //for safari using css instead of show 188 }; 189 190 imgPreloader.src = url; 191 }else{//code to show html 192 193 var queryString = url.replace(/^[^\?]+\??/,''); 194 var params = tb_parseQuery( queryString ); 195 196 TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
197 TB_HEIGHT = (params['height']*1) + 40 || 500; //defaults to 440 if no paramaters were added to URL 198 ajaxContentW = TB_WIDTH - 30; 199 ajaxContentH = TB_HEIGHT - 45; 200 201 if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window 202 urlNoQuery = url.split('TB_'); 203 $("#TB_iframeContent").remove(); 204 if(params['modal'] != "true"){//iframe no modal 205 $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>éãã</a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>"); 206 }else{//iframe modal 207 $("#TB_overlay").unbind(); 208 $("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>"); 209 } 210 }else{// not an iframe, ajax 211 if($("#TB_window").css("display") != "block"){ 212 if(params['modal'] != "true"){//ajax no modal 213 $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>éãã</a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>"); 214 }else{//ajax modal 215 $("#TB_overlay").unbind(); 216 $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>"); 217 } 218 }else{//this means the window is already up, we are just loading new content via ajax 219 $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; 220 $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; 221 $("#TB_ajaxContent")[0].scrollTop = 0; 222 $("#TB_ajaxWindowTitle").html(caption); 223 } 224 } 225 226 $("#TB_closeWindowButton").click(tb_remove); 227 228 if(url.indexOf('TB_inline') != -1){ 229 $("#TB_ajaxContent").append($('#' + params['inlineId']).children()); 230 $("#TB_window").unload(function () { 231 $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished 232 }); 233 tb_position(); 234 $("#TB_load").remove(); 235 $("#TB_window").css({display:"block"}); 236 }else if(url.indexOf('TB_iframe') != -1){ 237 tb_position(); 238 if($.browser.safari){//safari needs help because it will not fire iframe onload 239 $("#TB_load").remove(); 240 $("#TB_window").css({display:"block"}); 241 } 242 }else{ 243 $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method 244 tb_position(); 245 $("#TB_load").remove(); 246 tb_init("#TB_ajaxContent a.thickbox"); 247 $("#TB_window").css({display:"block"}); 248 }); 249 } 250 251 } 252 253 if(!params['modal']){ 254 document.onkeyup = function(e){ 255 if (e == null) { // ie 256 keycode = event.keyCode; 257 } else { // mozilla 258 keycode = e.which; 259 } 260 if(keycode == 27){ // close 261 tb_remove(); 262 } 263 }; 264 } 265 266 } catch(e) { 267 //nothing here 268 } 269} 270 271//helper functions below 272function tb_showIframe(){ 273 $("#TB_load").remove(); 274 $("#TB_window").css({display:"block"}); 275} 276 277function tb_remove() { 278 $("#TB_imageOff").unbind("click"); 279 $("#TB_closeWindowButton").unbind("click"); 280 $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();}); 281 $("#TB_load").remove(); 282 if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 283 $("body","html").css({height: "auto", width: "auto"}); 284 $("html").css("overflow",""); 285 } 286 document.onkeydown = ""; 287 document.onkeyup = ""; 288 return false; 289} 290 291function tb_position() { 292$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); 293 294 if ( !(jQuery.browser.msie6)) { // take away IE6 295 $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); 296 } 297} 298 299function tb_parseQuery ( query ) { 300 var Params = {}; 301 if ( ! query ) {return Params;}// return empty object 302 var Pairs = query.split(/[;&]/); 303 for ( var i = 0; i < Pairs.length; i++ ) { 304 var KeyVal = Pairs[i].split('='); 305 if ( ! KeyVal || KeyVal.length != 2 ) {continue;} 306 var key = unescape( KeyVal[0] ); 307 var val = unescape( KeyVal[1] ); 308 val = val.replace(/\+/g, ' '); 309 Params[key] = val; 310 } 311 return Params; 312} 313 314function tb_getPageSize(){ 315 var de = document.documentElement; 316 var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
317 var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; 318 arrayPageSize = [w,h]; 319 return arrayPageSize; 320} 321 322function tb_detectMacXFF() { 323 var userAgent = navigator.userAgent.toLowerCase(); 324 if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { 325 return true; 326 } 327} 328 329
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.