// The Image Resizer for vBulletin 3.7.x by TCattitude // Javascript version 1.0.2 // // Based on nCode Image Resizer by Spleasure // http://www.ncode.nl/vbulletinplugins/ // (c) 2007 nCode NcodeImageResizer.IMAGE_ID_BASE = 'ncode_imageresizer_container_'; NcodeImageResizer.WARNING_ID_BASE = 'ncode_imageresizer_warning_'; NcodeImageResizer.scheduledResizes = []; function NcodeImageResizer(id, img) { this.id = id; this.img = img; this.originalWidth = 0; this.originalHeight = 0; this.warning = null; this.warningTextNode = null; this.originalWidth = img.originalWidth; this.originalHeight = img.originalHeight; img.id = NcodeImageResizer.IMAGE_ID_BASE+id; } NcodeImageResizer.executeOnload = function() { var rss = NcodeImageResizer.scheduledResizes; for(var i = 0; i < rss.length; i++) { NcodeImageResizer.createOn(rss[i], true); } } NcodeImageResizer.schedule = function(img) { if(NcodeImageResizer.scheduledResizes.length == 0) { if(window.addEventListener) { window.addEventListener('load', NcodeImageResizer.executeOnload, false); } else if(window.attachEvent) { window.attachEvent('onload', NcodeImageResizer.executeOnload); } } NcodeImageResizer.scheduledResizes.push(img); } NcodeImageResizer.getNextId = function() { var id = 1; while(document.getElementById(NcodeImageResizer.IMAGE_ID_BASE+id) != null) { id++; } return id; } NcodeImageResizer.createOnId = function(id) { return NcodeImageResizer.createOn(document.getElementById(id)); } NcodeImageResizer.createOn = function(img, isSchedule) { if(typeof isSchedule == 'undefined') isSchedule = false; if(!img || !img.tagName || img.tagName.toLowerCase() != 'img') { alert(img+' is not an image ('+img.tagName.toLowerCase()+')'); } if(img.width == 0 || img.height == 0) { if(!isSchedule) NcodeImageResizer.schedule(img); return; } if(!img.originalWidth) img.originalWidth = img.width; if(!img.originalHeight) img.originalHeight = img.height; if((NcodeImageResizer.MAXWIDTH > 0 && img.originalWidth > NcodeImageResizer.MAXWIDTH) || (NcodeImageResizer.MAXHEIGHT > 0 && img.originalHeight > NcodeImageResizer.MAXHEIGHT)) { var isRecovery = false; // if this is a recovery from QuickEdit, which only restores the HTML, not the OO structure var newid, resizer; if(img.id && img.id.indexOf(NcodeImageResizer.IMAGE_ID_BASE) == 0) { newid = img.id.substr(NcodeImageResizer.IMAGE_ID_BASE.length); if(document.getElementById(NcodeImageResizer.WARNING_ID_BASE+newid) != null) { resizer = new NcodeImageResizer(newid, img); isRecovery = true; resizer.restoreImage(); } } else { newid = NcodeImageResizer.getNextId(); resizer = new NcodeImageResizer(newid, img); } if(isRecovery) { resizer.reclaimWarning(newid); } else { resizer.createWarning(); } resizer.scale(); } } NcodeImageResizer.prototype.restoreImage = function() { newimg = document.createElement('IMG'); newimg.src = this.img.src; this.img.width = newimg.width; this.img.height = newimg.height; } NcodeImageResizer.prototype.reclaimWarning = function(id) { this.warning = document.getElementById(NcodeImageResizer.WARNING_ID_BASE+id); this.warningTextNode = this.warning.firstChild.firstChild.childNodes[1].firstChild; this.warning.resize = this; this.scale(); } NcodeImageResizer.prototype.createWarning = function() { var mtable = document.createElement('TABLE'); var mtbody = document.createElement('TBODY'); var mtr = document.createElement('TR'); var mtd1 = document.createElement('TD'); var mtd2 = document.createElement('TD'); var mimg = document.createElement('IMG'); var mtext = document.createTextNode(''); mimg.src = NcodeImageResizer.BBURL+'/images/statusicon/wol_error.gif'; mimg.width = 16; mimg.height = 16; mimg.alt = ''; mimg.border = 0; mtd1.width = 20; mtd1.className = 'td1'; mtd2.unselectable = 'on'; mtd2.className = 'td2'; mtable.className = 'ncode_imageresizer_warning'; mtable.textNode = mtext; mtable.resize = this; mtable.id = NcodeImageResizer.WARNING_ID_BASE+this.id; mtd1.appendChild(mimg); mtd2.appendChild(mtext); mtr.appendChild(mtd1); mtr.appendChild(mtd2); mtbody.appendChild(mtr); mtable.appendChild(mtbody); this.img.parentNode.insertBefore(mtable, this.img); this.warning = mtable; this.warningTextNode = mtext; } NcodeImageResizer.prototype.setText = function(text) { var newnode = document.createTextNode(text); this.warningTextNode.parentNode.replaceChild(newnode, this.warningTextNode); this.warningTextNode = newnode; } NcodeImageResizer.prototype.scale = function() { this.img.height = this.originalHeight; this.img.width = this.originalWidth; if(NcodeImageResizer.MAXWIDTH > 0 && this.img.width > NcodeImageResizer.MAXWIDTH) { this.img.height = (NcodeImageResizer.MAXWIDTH / this.img.width) * this.img.height; this.img.width = NcodeImageResizer.MAXWIDTH; } if(NcodeImageResizer.MAXHEIGHT > 0 && this.img.height > NcodeImageResizer.MAXHEIGHT) { this.img.width = (NcodeImageResizer.MAXHEIGHT / this.img.height) * this.img.width; this.img.height = NcodeImageResizer.MAXHEIGHT; } this.warning.width = this.img.width; this.warning.onclick = function() { return this.resize.unScale(); } if(this.img.width < 450) { this.setText(vbphrase['ncode_imageresizer_warning_small']); } else if(this.img.fileSize && this.img.fileSize > 0) { this.setText(vbphrase['ncode_imageresizer_warning_filesize'].replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight).replace('%3$s', Math.round(this.img.fileSize/1024))); } else { this.setText(vbphrase['ncode_imageresizer_warning_no_filesize'].replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight)); } return false; } NcodeImageResizer.prototype.unScale = function() { switch(NcodeImageResizer.MODE) { case 'samewindow': window.open(this.img.src, '_self'); break; case 'newwindow': window.open(this.img.src, '_blank'); break; case 'enlarge': default: this.img.width = this.originalWidth; this.img.height = this.originalHeight; this.img.className = 'ncode_imageresizer_original'; if(this.warning != null) { this.setText(vbphrase['ncode_imageresizer_warning_fullsize']); this.warning.width = this.img.width; this.warning.onclick = function() { return this.resize.scale() }; } break; } return false; } // // TCattitude // Extra functions. // // Function to separate signature resizing, different height and width NcodeImageResizer.createOnSigs = function(img, isSchedule) { if(typeof isSchedule == 'undefined') isSchedule = false; if(!img || !img.tagName || img.tagName.toLowerCase() != 'img') { alert(img+' is not an image ('+img.tagName.toLowerCase()+')'); } if(img.width == 0 || img.height == 0) { if(!isSchedule) NcodeImageResizer.schedule(img); return; } if(!img.originalWidth) img.originalWidth = img.width; if(!img.originalHeight) img.originalHeight = img.height; if((NcodeImageResizer.MAXWIDTHSIGS > 0 && img.originalWidth > NcodeImageResizer.MAXWIDTHSIGS) || (NcodeImageResizer.MAXHEIGHTSIGS > 0 && img.originalHeight > NcodeImageResizer.MAXHEIGHTSIGS)) { var isRecovery = false; // if this is a recovery from QuickEdit, which only restores the HTML, not the OO structure var newid, resizer; if(img.id && img.id.indexOf(NcodeImageResizer.IMAGE_ID_BASE) == 0) { newid = img.id.substr(NcodeImageResizer.IMAGE_ID_BASE.length); if(document.getElementById(NcodeImageResizer.WARNING_ID_BASE+newid) != null) { resizer = new NcodeImageResizer(newid, img); isRecovery = true; resizer.restoreImage(); } } else { newid = NcodeImageResizer.getNextId(); resizer = new NcodeImageResizer(newid, img); } if(isRecovery) { resizer.reclaimWarning(newid); } else { resizer.createWarning(); } resizer.scalesigs(); } } NcodeImageResizer.prototype.scalesigs = function() { this.img.height = this.originalHeight; this.img.width = this.originalWidth; if(NcodeImageResizer.MAXWIDTHSIGS > 0 && this.img.width > NcodeImageResizer.MAXWIDTHSIGS) { this.img.height = (NcodeImageResizer.MAXWIDTHSIGS / this.img.width) * this.img.height; this.img.width = NcodeImageResizer.MAXWIDTHSIGS; } if(NcodeImageResizer.MAXHEIGHTSIGS > 0 && this.img.height > NcodeImageResizer.MAXHEIGHTSIGS) { this.img.width = (NcodeImageResizer.MAXHEIGHTSIGS / this.img.height) * this.img.width; this.img.height = NcodeImageResizer.MAXHEIGHTSIGS; } this.warning.width = this.img.width; this.warning.onclick = function() { return this.resize.unScale(); } if(this.img.width < 450) { this.setText(vbphrase['ncode_imageresizer_warning_small']); } else if(this.img.fileSize && this.img.fileSize > 0) { this.setText(vbphrase['ncode_imageresizer_warning_filesize'].replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight).replace('%3$s', Math.round(this.img.fileSize/1024))); } else { this.setText(vbphrase['ncode_imageresizer_warning_no_filesize'].replace('%1$s', this.originalWidth).replace('%2$s', this.originalHeight)); } return false; } NcodeImageResizer.createOnSigsExclud = function() { // }