Skip to content
Snippets Groups Projects
minmax.js 1.98 KiB
Newer Older
  • Learn to ignore specific revisions
  • // minmax.js - written by Andrew Clover <and@doxdesk.com>
    // Adapted for PunBB by Rickard Andersson and Paul Sullivan
    
    /*@cc_on
    @if (@_win32 && @_jscript_version>4)
    
    var minmax_elements;
    
    function minmax_bind(el) {
    	var em, ms;
    	var st= el.style, cs= el.currentStyle;
    
    	if (minmax_elements==window.undefined) {
    		if (!document.body || !document.body.currentStyle) return;
    		minmax_elements= new Array();
    		window.attachEvent('onresize', minmax_delayout);
    	}
    
    	if (cs['max-width'])
    		st['maxWidth']= cs['max-width'];
    
    	ms= cs['maxWidth'];
    	if (ms && ms!='auto' && ms!='none' && ms!='0' && ms!='') {
    		st.minmaxWidth= cs.width;
    		minmax_elements[minmax_elements.length]= el;
    		minmax_delayout();
    	}
    }
    
    var minmax_delaying= false;
    function minmax_delayout() {
    	if (minmax_delaying) return;
    	minmax_delaying= true;
    	window.setTimeout(minmax_layout, 0);
    }
    
    function minmax_stopdelaying() {
    	minmax_delaying= false;
    }
    
    function minmax_layout() {
    	window.setTimeout(minmax_stopdelaying, 100);
    	var i, el, st, cs, optimal, inrange;
    	for (i= minmax_elements.length; i-->0;) {
    		el= minmax_elements[i]; st= el.style; cs= el.currentStyle;
    
    		st.width= st.minmaxWidth; optimal= el.offsetWidth;
    		inrange= true;
    		if (inrange && cs.minWidth && cs.minWidth!='0' && cs.minWidth!='auto' && cs.minWidth!='') {
    			st.width= cs.minWidth;
    			inrange= (el.offsetWidth<optimal);
    		}
    		if (inrange && cs.maxWidth && cs.maxWidth!='none' && cs.maxWidth!='auto' && cs.maxWidth!='') {
    			st.width= cs.maxWidth;
    			inrange= (el.offsetWidth>optimal);
    		}
    		if (inrange) st.width= st.minmaxWidth;
    	}
    }
    
    var minmax_SCANDELAY= 500;
    
    function minmax_scan() {
    	var el;
    	for (var i= 0; i<document.all.length; i++) {
    		el= document.all[i];
    		if (!el.minmax_bound) {
    			el.minmax_bound= true;
    			minmax_bind(el);
    		}
    	}
    }
    
    var minmax_scanner;
    function minmax_stop() {
    	window.clearInterval(minmax_scanner);
    	minmax_scan();
    }
    
    minmax_scan();
    minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
    window.attachEvent('onload', minmax_stop);
    
    @end @*/