1/* 2 * CircleType 0.34 3 * Peter Hrynkow 4 * Copyright 2013, Licensed GPL & MIT 5 * 6*/ 7 8$.fn.circleType = function(options) { 9 10 var settings = { 11 dir: 1, 12 position: 'relative' 13 }; 14 if (typeof($.fn.lettering) !== 'function') { 15 console.log('Lettering.js is required'); 16 return; 17 } 18 return this.each(function () { 19 20 if (options) { 21 $.extend(settings, options); 22 } 23 var elem = this, 24 delta = (180 / Math.PI), 25 ch = parseInt($(elem).css('line-height'), 10), 26 fs = parseInt($(elem).css('font-size'), 10), 27 txt = elem.innerHTML.replace(/^\s+|\s+$/g, '').replace(/\s/g, ' '), 28 letters, 29 center; 30 31 elem.innerHTML = txt 32 $(elem).lettering(); 33 34 elem.style.position = settings.position; 35 36 letters = elem.getElementsByTagName('span'); 37 center = Math.floor(letters.length / 2) 38 39 var layout = function () { 40 var tw = 0, 41 i, 42 offset = 0, 43 minRadius, 44 origin, 45 innerRadius, 46 l, style, r, transform; 47 48 for (i = 0; i < letters.length; i++) { 49 tw += letters[i].offsetWidth; 50 } 51 minRadius = (tw / Math.PI) / 2 + ch; 52 53 if (settings.fluid && !settings.fitText) { 54 settings.radius = Math.max(elem.offsetWidth / 2, minRadius); 55 } 56 else if (!settings.radius) { 57 settings.radius = minRadius; 58 } 59 60 if (settings.dir === -1) { 61 origin = 'center ' + (-settings.radius + ch) / fs + 'em'; 62 } else { 63 origin = 'center ' + settings.radius / fs + 'em'; 64 } 65 66 innerRadius = settings.radius - ch; 67 68 for (i = 0; i < letters.length; i++) { 69 l = letters[i]; 70 offset += l.offsetWidth / 2 / innerRadius * delta; 71 l.rot = offset; 72 offset += l.offsetWidth / 2 / innerRadius * delta; 73 } 74 for (i = 0; i < letters.length; i++) { 75 l = letters[i] 76 style = l.style 77 r = (-offset * settings.dir / 2) + l.rot * settings.dir 78 transform = 'rotate(' + r + 'deg)'; 79 80 style.position = 'absolute'; 81 style.left = '50%'; 82 style.marginLeft = -(l.offsetWidth / 2) / fs + 'em'; 83 84 style.webkitTransform = transform; 85 style.MozTransform = transform; 86 style.OTransform = transform; 87 style.msTransform = transform; 88 style.transform = transform; 89 90 style.webkitTransformOrigin = origin; 91 style.MozTransformOrigin = origin; 92 style.OTransformOrigin = origin; 93 style.msTransformOrigin = origin; 94 style.transformOrigin = origin; 95 if(settings.dir === -1) { 96 style.bottom = 0; 97 } 98 } 99 100 if (settings.fitText) { 101 if (typeof($.fn.fitText) !== 'function') { 102 console.log('FitText.js is required when using the fitText option'); 103 } else { 104 $(elem).fitText(); 105 $(window).resize(function () { 106 updateHeight(); 107 }); 108 } 109 } 110 updateHeight(); 111 }; 112 113 var getBounds = function (elem) { 114 var docElem = document.documentElement, 115 box = elem.getBoundingClientRect(); 116 return { 117 top: box.top + window.pageYOffset - docElem.clientTop, 118 left: box.left + window.pageXOffset - docElem.clientLeft, 119 height: box.height 120 }; 121 }; 122 123 var updateHeight = function () { 124 var mid = getBounds(letters[center]), 125 first = getBounds(letters[0]), 126 h; 127 if (mid.top < first.top) { 128 h = first.top - mid.top + first.height; 129 } else { 130 h = mid.top - first.top + first.height; 131 } 132 elem.style.height = h + 'px'; 133 } 134
135 if (settings.fluid && !settings.fitText) { 136 $(window).resize(function () { 137 layout(); 138 }); 139 } 140 141 if (document.readyState !== "complete") { 142 elem.style.visibility = 'hidden'; 143 $(window).load(function () { 144 elem.style.visibility = 'visible'; 145 layout(); 146 }); 147 } else { 148 layout(); 149 } 150 }); 151}; 152 153
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.