web/static/ldt/css/border-radius.htc
author ymh <ymh.work@gmail.com>
Sun, 01 May 2011 03:22:44 +0200
changeset 72 47e0f0eef1cc
parent 68 b40657713336
permissions -rw-r--r--
update blinkster
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
--Do not remove this if you are using--
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
Original Author: Remiz Rahnas
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Original Author URL: http://www.htmlremix.com
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
Published date: 2008/09/24
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
Changes by Nick Fetchak:
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
- IE8 standards mode compatibility
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
Published date : 2009/11/18
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
<script type="text/javascript">
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
// findPos() borrowed from http://www.quirksmode.org/js/findpos.html
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
function findPos(obj) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
	var curleft = curtop = 0;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
	if (obj.offsetParent) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		do {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
			curleft += obj.offsetLeft;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
			curtop += obj.offsetTop;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		} while (obj = obj.offsetParent);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
	return({
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		'x': curleft,
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		'y': curtop
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
	});
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
function oncontentready(classID) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
  if (this.className.match(classID)) { return(false); }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	this.className = this.className.concat(' ', classID);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
	var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
	                                this.currentStyle['-webkit-border-radius'] ||
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
	                                this.currentStyle['border-radius'] ||
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
	                                this.currentStyle['-khtml-border-radius']) /
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
	                       Math.min(this.offsetWidth, this.offsetHeight), 1);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
	var fillColor = this.currentStyle.backgroundColor;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
	var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
	var strokeColor = this.currentStyle.borderColor;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
	var strokeWeight = parseInt(this.currentStyle.borderWidth);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
	var stroked = 'true';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
	if (isNaN(strokeWeight)) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		strokeWeight = 0;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		strokeColor = fillColor;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		stroked = 'false';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
	}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
	this.style.background = 'transparent';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	this.style.borderColor = 'transparent';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
	// Find which element provides position:relative for the target element (default to BODY)
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	var el = this;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	var limit = 100, i = 0;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		el = el.parentElement;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		i++;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		if (i >= limit) { return(false); }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	var el_zindex = parseInt(el.currentStyle.zIndex);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
	if (isNaN(el_zindex)) { el_zindex = 0; }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	//alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
	var rect_size = {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		'width': this.offsetWidth - strokeWeight,
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		'height': this.offsetHeight - strokeWeight
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
	};
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	var el_pos = findPos(el);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
	var this_pos = findPos(this);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
	this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
	var rect = document.createElement('v:roundrect');
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
	rect.arcsize = arcSize +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
	rect.strokecolor = strokeColor;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
	rect.strokeWeight = strokeWeight +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
	rect.stroked = stroked;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
	rect.style.display = 'block';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
	rect.style.position = 'absolute';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	rect.style.top = this_pos.y +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
	rect.style.left = this_pos.x +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
	rect.style.width = rect_size.width +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
	rect.style.height = rect_size.height +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
	rect.style.antialias = true;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	rect.style.zIndex = el_zindex - 1;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
	var fill = document.createElement('v:fill');
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	fill.color = fillColor;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
	fill.src = fillSrc;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	fill.type = 'tile';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
	rect.appendChild(fill);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
	el.appendChild(rect);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
	var css = el.document.createStyleSheet();
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
	css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
	css.addRule("v\\:fill", "behavior: url(#default#VML)");
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
	isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
	// IE6 doesn't support transparent borders, use padding to offset original element
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
	if (isIE6 && (strokeWeight > 0)) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		this.style.borderStyle = 'none';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
	}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	if (typeof(window.rounded_elements) == 'undefined') {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		window.rounded_elements = new Array();
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		window.onresize = window_resize;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
	}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
	this.element.vml = rect;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
	window.rounded_elements.push(this.element);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
function window_resize() {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
	if (typeof(window.rounded_elements) == 'undefined') { return(false); }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
	for (var i in window.rounded_elements) {
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		var el = window.rounded_elements[i];
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
		var strokeWeight = parseInt(el.currentStyle.borderWidth);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		if (isNaN(strokeWeight)) { strokeWeight = 0; }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
		var parent_pos = findPos(el.vml.parentNode);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		var pos = findPos(el);
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
		pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
		pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		el.vml.style.top = pos.y +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		el.vml.style.left = pos.x +'px';
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
	}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
}
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
</script>
b40657713336 use platform and clean install files
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143