pie-rails 1.0.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -36,6 +36,16 @@ See [PIE repo](git://github.com/lojjic/PIE.git) for more usage guides, demos etc
36
36
 
37
37
  Note: A `PIE.js` file is also included
38
38
 
39
+ ## Box-sizing
40
+
41
+ A HTC file to enable _Box sizing_ for IE 6 & 7 is also included:
42
+
43
+ ```css
44
+ #myElement {
45
+ behavior: url(/assets/boxsizing.htc);
46
+ }
47
+ ```
48
+
39
49
  ## Textshadow
40
50
 
41
51
  The [textshadow](http://kilianvalkhof.com/2008/javascript/text-shadow-in-ie-with-jquery/) jquery plugin
@@ -62,6 +72,24 @@ $(elem).textShadow({
62
72
  });
63
73
  ```
64
74
 
75
+ ## Text-overflow
76
+
77
+ The [text-overflow](http://www.bramstein.com/projects/text-overflow/) jquery plugin
78
+
79
+ ### Install
80
+
81
+ ```text
82
+ //= require jquery.text-overflow.min
83
+ ```
84
+
85
+ ### Usage
86
+
87
+ ```javascript
88
+ $('h1').textOverflow();
89
+ ```
90
+
91
+ See [examples](http://www.bramstein.com/projects/text-overflow/examples/examples.html) for a good usage guide, including options supported.
92
+
65
93
  ## Contributing to pie-rails
66
94
 
67
95
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.0.3
data/pie-rails.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pie-rails"
8
- s.version = "1.0.1"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
@@ -31,6 +31,9 @@ Gem::Specification.new do |s|
31
31
  "spec/spec_helper.rb",
32
32
  "vendor/assets/javascripts/PIE.htc",
33
33
  "vendor/assets/javascripts/PIE.js",
34
+ "vendor/assets/javascripts/boxsizing.htc",
35
+ "vendor/assets/javascripts/jquery.text-overflow.js",
36
+ "vendor/assets/javascripts/jquery.text-overflow.min.js",
34
37
  "vendor/assets/javascripts/jquery.textshadow.js",
35
38
  "vendor/assets/javascripts/jquery.textshadow.min.js"
36
39
  ]
@@ -0,0 +1,501 @@
1
+ /**
2
+ * box-sizing Polyfill
3
+ *
4
+ * A polyfill for box-sizing: border-box for IE6 & IE7.
5
+ *
6
+ * JScript
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU Lesser General Public License as published
10
+ * by the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ * GNU Lesser General Public License for more details.
17
+ *
18
+ * See <http://www.gnu.org/licenses/lgpl-3.0.txt>
19
+ *
20
+ * @category JScript
21
+ * @package box-sizing-polyfill
22
+ * @author Christian Schepp Schaefer <schaepp@gmx.de> <http://twitter.com/derSchepp>
23
+ * @copyright 2012 Christian Schepp Schaefer
24
+ * @license http://www.gnu.org/copyleft/lesser.html The GNU LESSER GENERAL PUBLIC LICENSE, Version 3.0
25
+ * @link http://github.com/Schepp/box-sizing-polyfill
26
+ *
27
+ * PREFACE:
28
+ *
29
+ * This box-sizing polyfill is based on previous work done by Erik Arvidsson,
30
+ * which he published in 2002 on http://webfx.eae.net/dhtml/boxsizing/boxsizing.html.
31
+ *
32
+ * USAGE:
33
+ *
34
+ * Add the behavior/HTC after every `box-sizing: border-box;` that you assign:
35
+ *
36
+ * box-sizing: border-box;
37
+ * *behavior: url(/scripts/boxsizing.htc);`
38
+ *
39
+ * Prefix the `behavior` property with a star, like seen above, so it will only be seen by
40
+ * IE6 & IE7, not by IE8+ who already implement box-sizing.
41
+ *
42
+ * The URL to the HTC file must be relative to your HTML(!) document, not relative to your CSS.
43
+ * That's why I'd advise you to use absolute paths like in the example.
44
+ *
45
+ */
46
+ <component lightWeight="true">
47
+ <attach event="onpropertychange" onevent="checkPropertyChange()" />
48
+ <attach event="ondetach" onevent="restore()" />
49
+ <attach event="onresize" for="window" onevent="update()" />
50
+ <script type="text/javascript">
51
+ //<![CDATA[
52
+
53
+ var viewportwidth = (typeof window.innerWidth != 'undefined' ? window.innerWidth : element.document.documentElement.clientWidth);
54
+
55
+ // Shortcut for the document object
56
+ var doc = element.document;
57
+
58
+ // Buffer for multiple resize events
59
+ var resizetimeout = null;
60
+
61
+ // Don't apply box-sizing to certain elements
62
+ var apply = false;
63
+ switch(element.nodeName){
64
+ case '#comment':
65
+ case 'HTML':
66
+ case 'HEAD':
67
+ case 'TITLE':
68
+ case 'SCRIPT':
69
+ case 'STYLE':
70
+ case 'LINK':
71
+ case 'META':
72
+ break;
73
+
74
+ default:
75
+ apply = true;
76
+ break;
77
+ }
78
+
79
+ /*
80
+ * update gets called during resize events, then waits until there are no further resize events, and finally triggers a recalculation
81
+ */
82
+ function update(){
83
+ if(resizetimeout !== null){
84
+ window.clearTimeout(resizetimeout);
85
+ }
86
+ resizetimeout = window.setTimeout(function(){
87
+ restore();
88
+ init();
89
+ resizetimeout = null;
90
+ },100);
91
+ }
92
+
93
+ /*
94
+ * restore gets called when the behavior is being detached (see event binding at the top),
95
+ * resets everything like it was before applying the behavior
96
+ */
97
+ function restore(){
98
+ if(apply){
99
+ try{
100
+ element.runtimeStyle.removeAttribute("width");
101
+ element.runtimeStyle.removeAttribute("height");
102
+ }
103
+ catch(e){}
104
+ }
105
+ }
106
+
107
+ /*
108
+ * init gets called once at the start and then never again,
109
+ * triggers box-sizing calculations and updates width and height
110
+ */
111
+ function init(){
112
+ if(apply){
113
+ updateBorderBoxWidth();
114
+ updateBorderBoxHeight();
115
+ }
116
+ }
117
+
118
+ /*
119
+ * checkPropertyChange gets called as soon as an element property changes
120
+ * (see event binding at the top), it then checks if any property influencing its
121
+ * dimensions was changed and if yes recalculates width and height
122
+ */
123
+ function checkPropertyChange(){
124
+ if(apply){
125
+ var pn = event.propertyName;
126
+ if(pn === "style.boxSizing" && element.style.boxSizing === ""){
127
+ element.style.removeAttribute("boxSizing");
128
+ element.runtimeStyle.removeAttribute("boxSizing");
129
+ element.runtimeStyle.removeAttribute("width");
130
+ element.runtimeStyle.removeAttribute("height");
131
+ }
132
+ switch (pn){
133
+ case "style.width":
134
+ case "style.minWidth":
135
+ case "style.maxWidth":
136
+ case "style.borderLeftWidth":
137
+ case "style.borderLeftStyle":
138
+ case "style.borderRightWidth":
139
+ case "style.borderRightStyle":
140
+ case "style.paddingLeft":
141
+ case "style.paddingRight":
142
+ updateBorderBoxWidth();
143
+ break;
144
+
145
+ case "style.height":
146
+ case "style.minHeight":
147
+ case "style.maxHeight":
148
+ case "style.borderTopWidth":
149
+ case "style.borderTopStyle":
150
+ case "style.borderBottomWidth":
151
+ case "style.borderBottomStyle":
152
+ case "style.paddingTop":
153
+ case "style.paddingBottom":
154
+ updateBorderBoxHeight();
155
+ break;
156
+
157
+ case "className":
158
+ case "style.boxSizing":
159
+ updateBorderBoxWidth();
160
+ updateBorderBoxHeight();
161
+ break;
162
+ }
163
+ }
164
+ }
165
+
166
+ /*
167
+ * Helper function, taken from Dean Edward's IE7 framework,
168
+ * added by Schepp on 12.06.2010.
169
+ * http://code.google.com/p/ie7-js/
170
+ *
171
+ * Allows us to convert from relative to pixel-values.
172
+ */
173
+ function getPixelValue(value){
174
+ var PIXEL = /^\d+(px)?$/i;
175
+ if (PIXEL.test(value)) return parseInt(value);
176
+ var style = element.style.left;
177
+ var runtimeStyle = element.runtimeStyle.left;
178
+ element.runtimeStyle.left = element.currentStyle.left;
179
+ element.style.left = value || 0;
180
+ value = parseInt(element.style.pixelLeft);
181
+ element.style.left = style;
182
+ element.runtimeStyle.left = runtimeStyle;
183
+
184
+ return value;
185
+ }
186
+
187
+ function getPixelWidth(object, value){
188
+ // For Pixel Values
189
+ var PIXEL = /^\d+(px)?$/i;
190
+ if (PIXEL.test(value)) return parseInt(value);
191
+
192
+ // For Percentage Values
193
+ var PERCENT = /^[\d\.]+%$/i;
194
+ if (PERCENT.test(value)){
195
+ try{
196
+ var parentPaddingLeft = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingLeft);
197
+ var parentPaddingRight = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingRight);
198
+ var parentBorderLeft = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderLeft);
199
+ var parentBorderRight = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderRight);
200
+
201
+ //var parentWidth = getPixelWidth(object.parentElement,(object.parentElement.currentStyle.width != "auto" ? object.parentElement.currentStyle.width : "100%"));
202
+ var parentWidth = object.parentElement.offsetWidth - parentPaddingLeft - parentPaddingRight - parentBorderLeft - parentBorderRight;
203
+ var value = (parseFloat(value) / 100) * parentWidth;
204
+ }
205
+ catch(e){
206
+ var value = (parseFloat(value) / 100) * element.document.documentElement.clientWidth;
207
+ }
208
+ return parseInt(value);
209
+ }
210
+
211
+ // For EM Values
212
+ var style = object.style.left;
213
+ var runtimeStyle = object.runtimeStyle.left;
214
+ object.runtimeStyle.left = object.currentStyle.left;
215
+ object.style.left = value || 0;
216
+ value = parseInt(object.style.pixelLeft);
217
+ object.style.left = style;
218
+ object.runtimeStyle.left = runtimeStyle;
219
+
220
+ return value;
221
+ }
222
+
223
+ function getPixelHeight(object, value){
224
+ // For Pixel Values
225
+ var PIXEL = /^\d+(px)?$/i;
226
+ if (PIXEL.test(value)) return parseInt(value);
227
+
228
+ // For Percentage Values
229
+ var PERCENT = /^[\d\.]+%$/i;
230
+ if (PERCENT.test(value)){
231
+ try{
232
+ if(object.parentElement.currentStyle.height != "auto"){
233
+ switch(object.parentElement.nodeName){
234
+ default:
235
+ if(object.parentElement.currentStyle.height !== "auto"){
236
+ var parentPaddingTop = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingTop);
237
+ var parentPaddingBottom = getPixelWidth(object.parentElement,object.parentElement.currentStyle.paddingBottom);
238
+ var parentBorderTop = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderTop);
239
+ var parentBorderBottom = getPixelWidth(object.parentElement,object.parentElement.currentStyle.borderBottom);
240
+
241
+ var parentHeight = object.parentElement.offsetHeight - parentPaddingTop - parentPaddingBottom - parentBorderTop - parentBorderBottom;
242
+ //var parentHeight = getPixelHeight(object.parentElement,object.parentElement.currentStyle.height);
243
+
244
+ value = (parseFloat(value) / 100) * parentHeight;
245
+ }
246
+ else {
247
+ value = "auto";
248
+ }
249
+ break;
250
+
251
+ case 'HTML':
252
+ parentHeight = element.document.documentElement.clientHeight;
253
+ if(parentHeight !== "auto"){
254
+ value = (parseFloat(value) / 100) * parentHeight;
255
+ }
256
+ else {
257
+ value = "auto";
258
+ }
259
+ break;
260
+ }
261
+ if(value !== "auto") value = parseInt(value);
262
+ }
263
+ else {
264
+ value = "auto";
265
+ }
266
+ }
267
+ catch(e){
268
+ value = "auto";
269
+ }
270
+ return value;
271
+ }
272
+
273
+ // For EM Values
274
+ var style = object.style.left;
275
+ var runtimeStyle = object.runtimeStyle.left;
276
+ object.runtimeStyle.left = object.currentStyle.left;
277
+ object.style.left = value || 0;
278
+ value = parseInt(object.style.pixelLeft);
279
+ object.style.left = style;
280
+ object.runtimeStyle.left = runtimeStyle;
281
+
282
+ return value;
283
+ }
284
+
285
+
286
+ /*
287
+ * getBorderWidth & friends
288
+ * Border width getters
289
+ */
290
+ function getBorderWidth(sSide){
291
+ if(element.currentStyle["border" + sSide + "Style"] == "none"){
292
+ return 0;
293
+ }
294
+ var n = getPixelValue(element.currentStyle["border" + sSide + "Width"]);
295
+ return n || 0;
296
+ }
297
+ function getBorderLeftWidth() { return getBorderWidth("Left"); }
298
+ function getBorderRightWidth() { return getBorderWidth("Right"); }
299
+ function getBorderTopWidth() { return getBorderWidth("Top"); }
300
+ function getBorderBottomWidth() { return getBorderWidth("Bottom"); }
301
+
302
+
303
+ /*
304
+ * getPadding & friends
305
+ * Padding width getters
306
+ */
307
+ function getPadding(sSide) {
308
+ var n = getPixelValue(element.currentStyle["padding" + sSide]);
309
+ return n || 0;
310
+ }
311
+ function getPaddingLeft() { return getPadding("Left"); }
312
+ function getPaddingRight() { return getPadding("Right"); }
313
+ function getPaddingTop() { return getPadding("Top"); }
314
+ function getPaddingBottom() { return getPadding("Bottom"); }
315
+
316
+
317
+
318
+ /*
319
+ * getBoxSizing
320
+ * Get the box-sizing value for the current element
321
+ */
322
+ function getBoxSizing(){
323
+ var s = element.style;
324
+ var cs = element.currentStyle
325
+ if(typeof s.boxSizing != "undefined" && s.boxSizing != ""){
326
+ return s.boxSizing;
327
+ }
328
+ if(typeof s["box-sizing"] != "undefined" && s["box-sizing"] != ""){
329
+ return s["box-sizing"];
330
+ }
331
+ if(typeof cs.boxSizing != "undefined" && cs.boxSizing != ""){
332
+ return cs.boxSizing;
333
+ }
334
+ if(typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != ""){
335
+ return cs["box-sizing"];
336
+ }
337
+ return getDocumentBoxSizing();
338
+ }
339
+
340
+
341
+ /*
342
+ * getDocumentBoxSizing
343
+ * Get the default document box sizing (check for quirks mode)
344
+ */
345
+ function getDocumentBoxSizing(){
346
+ if(doc.compatMode === null || doc.compatMode === "BackCompat"){
347
+ return "border-box";
348
+ }
349
+ return "content-box"
350
+ }
351
+
352
+
353
+ /*
354
+ * setBorderBoxWidth & friends
355
+ * Width and height setters
356
+ */
357
+ function setBorderBoxWidth(n){
358
+ element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() -
359
+ getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
360
+ }
361
+ function setBorderBoxMinWidth(n){
362
+ element.runtimeStyle.minWidth = Math.max(0, n - getBorderLeftWidth() -
363
+ getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
364
+ }
365
+ function setBorderBoxMaxWidth(n){
366
+ element.runtimeStyle.maxWidth = Math.max(0, n - getBorderLeftWidth() -
367
+ getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px";
368
+ }
369
+ function setBorderBoxHeight(n){
370
+ element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() -
371
+ getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
372
+ }
373
+ function setBorderBoxMinHeight(n){
374
+ element.runtimeStyle.minHeight = Math.max(0, n - getBorderTopWidth() -
375
+ getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
376
+ }
377
+ function setBorderBoxMaxHeight(n){
378
+ element.runtimeStyle.maxHeight = Math.max(0, n - getBorderTopWidth() -
379
+ getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px";
380
+ }
381
+ function setContentBoxWidth(n){
382
+ element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() +
383
+ getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
384
+ }
385
+ function setContentBoxMinWidth(n){
386
+ element.runtimeStyle.minWidth = Math.max(0, n + getBorderLeftWidth() +
387
+ getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
388
+ }
389
+ function setContentBoxMaxWidth(n){
390
+ element.runtimeStyle.maxWidth = Math.max(0, n + getBorderLeftWidth() +
391
+ getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px";
392
+ }
393
+ function setContentBoxHeight(n){
394
+ element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() +
395
+ getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
396
+ }
397
+ function setContentBoxMinHeight(n){
398
+ element.runtimeStyle.minHeight = Math.max(0, n + getBorderTopWidth() +
399
+ getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
400
+ }
401
+ function setContentBoxMaxHeight(n){
402
+ element.runtimeStyle.maxHeight = Math.max(0, n + getBorderTopWidth() +
403
+ getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px";
404
+ }
405
+
406
+
407
+ /*
408
+ * updateBorderBoxWidth & updateBorderBoxHeight
409
+ *
410
+ */
411
+ function updateBorderBoxWidth() {
412
+ if(getDocumentBoxSizing() == getBoxSizing()){
413
+ return;
414
+ }
415
+
416
+ var csw = element.currentStyle.width;
417
+ if(csw != "auto"){
418
+ csw = getPixelWidth(element,csw);
419
+ if(getBoxSizing() == "border-box"){
420
+ setBorderBoxWidth(parseInt(csw));
421
+ }
422
+ else{
423
+ setContentBoxWidth(parseInt(csw));
424
+ }
425
+ }
426
+
427
+ csw = element.currentStyle.minWidth;
428
+ if(csw != "none"){
429
+ csw = getPixelWidth(element,csw);
430
+ if(getBoxSizing() == "border-box"){
431
+ setBorderBoxMinWidth(parseInt(csw));
432
+ }
433
+ else{
434
+ setContentBoxMinWidth(parseInt(csw));
435
+ }
436
+ }
437
+
438
+ csw = element.currentStyle.maxWidth;
439
+ if(csw != "none"){
440
+ csw = getPixelWidth(element,csw);
441
+ if(getBoxSizing() == "border-box"){
442
+ setBorderBoxMaxWidth(parseInt(csw));
443
+ }
444
+ else{
445
+ setContentBoxMaxWidth(parseInt(csw));
446
+ }
447
+ }
448
+ }
449
+
450
+ function updateBorderBoxHeight() {
451
+ if(getDocumentBoxSizing() == getBoxSizing()){
452
+ return;
453
+ }
454
+
455
+ var csh = element.currentStyle.height;
456
+ if(csh != "auto"){
457
+ csh = getPixelHeight(element,csh);
458
+ if(csh !== "auto"){
459
+ if(getBoxSizing() == "border-box"){
460
+ setBorderBoxHeight(parseInt(csh));
461
+ }
462
+ else{
463
+ setContentBoxHeight(parseInt(csh));
464
+ }
465
+ }
466
+ }
467
+
468
+ csh = element.currentStyle.minHeight;
469
+ if(csh != "none"){
470
+ csh = getPixelHeight(element,csh);
471
+ if(csh !== "none"){
472
+ if(getBoxSizing() == "border-box"){
473
+ setBorderBoxMinHeight(parseInt(csh));
474
+ }
475
+ else{
476
+ setContentBoxMinHeight(parseInt(csh));
477
+ }
478
+ }
479
+ }
480
+
481
+ csh = element.currentStyle.maxHeight;
482
+ if(csh != "none"){
483
+ csh = getPixelHeight(element,csh);
484
+ if(csh !== "none"){
485
+ if(getBoxSizing() == "border-box"){
486
+ setBorderBoxMaxHeight(parseInt(csh));
487
+ }
488
+ else{
489
+ setContentBoxMaxHeight(parseInt(csh));
490
+ }
491
+ }
492
+ }
493
+ }
494
+
495
+
496
+ // Run the calculations
497
+ init();
498
+
499
+ //]]>
500
+ </script>
501
+ </component>
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @preserve jQuery Text Overflow v0.7.4
3
+ *
4
+ * Licensed under the new BSD License.
5
+ * Copyright 2009-2011, Bram Stein
6
+ * All rights reserved.
7
+ */
8
+ /*global jQuery, document, setInterval*/
9
+ (function ($) {
10
+ var style = document.documentElement.style,
11
+ hasTextOverflow = ('textOverflow' in style || 'OTextOverflow' in style),
12
+
13
+ rtrim = function (str) {
14
+ return str.replace(/\s+$/g, '');
15
+ },
16
+
17
+ domSplit = function (root, maxIndex, options) {
18
+ var index = 0, result = [],
19
+ domSplitAux = function (nodes) {
20
+ var i = 0, tmp, clipIndex = 0;
21
+
22
+ if (index > maxIndex) {
23
+ return;
24
+ }
25
+
26
+ for (i = 0; i < nodes.length; i += 1) {
27
+ if (nodes[i].nodeType === 1) {
28
+ tmp = nodes[i].cloneNode(false);
29
+ result[result.length - 1].appendChild(tmp);
30
+ result.push(tmp);
31
+ domSplitAux(nodes[i].childNodes);
32
+ result.pop();
33
+ } else if (nodes[i].nodeType === 3) {
34
+ if (index + nodes[i].length < maxIndex) {
35
+ result[result.length - 1].appendChild(nodes[i].cloneNode(false));
36
+ } else {
37
+ tmp = nodes[i].cloneNode(false);
38
+ clipIndex = maxIndex - index;
39
+ if (options.wholeWord) {
40
+ clipIndex = Math.min(maxIndex - index, tmp.textContent.substring(0, maxIndex - index).lastIndexOf(' '));
41
+ }
42
+ tmp.textContent = options.trim ? rtrim(tmp.textContent.substring(0, clipIndex)) : tmp.textContent.substring(0, clipIndex);
43
+ result[result.length - 1].appendChild(tmp);
44
+ }
45
+ index += nodes[i].length;
46
+ } else {
47
+ result.appendChild(nodes[i].cloneNode(false));
48
+ }
49
+ }
50
+ };
51
+ result.push(root.cloneNode(false));
52
+ domSplitAux(root.childNodes);
53
+ return $(result.pop().childNodes);
54
+ };
55
+
56
+ $.extend($.fn, {
57
+ textOverflow: function (options) {
58
+ var o = $.extend({
59
+ str: '&#x2026;',
60
+ autoUpdate: false,
61
+ trim: true,
62
+ title: false,
63
+ className: undefined,
64
+ wholeWord: false
65
+ }, options);
66
+
67
+ if (!hasTextOverflow) {
68
+ return this.each(function () {
69
+ var element = $(this),
70
+
71
+ // the clone element we modify to measure the width
72
+ clone = element.clone(),
73
+
74
+ // we save a copy so we can restore it if necessary
75
+ originalElement = element.clone(),
76
+ originalText = element.text(),
77
+ originalWidth = element.width(),
78
+ low = 0, mid = 0,
79
+ high = originalText.length,
80
+ reflow = function () {
81
+ if (originalWidth !== element.width()) {
82
+ element.replaceWith(originalElement);
83
+ element = originalElement;
84
+ originalElement = element.clone();
85
+ element.textOverflow($.extend({}, o, { autoUpdate: false}));
86
+ originalWidth = element.width();
87
+ }
88
+ };
89
+
90
+ element.after(clone.hide().css({
91
+ 'position': 'absolute',
92
+ 'width': 'auto',
93
+ 'overflow': 'visible',
94
+ 'max-width': 'inherit',
95
+ 'min-width': 'inherit'
96
+ }));
97
+
98
+ if (clone.width() > originalWidth) {
99
+ while (low < high) {
100
+ mid = Math.floor(low + ((high - low) / 2));
101
+ clone.empty().append(domSplit(originalElement.get(0), mid, o)).append(o.str);
102
+ if (clone.width() < originalWidth) {
103
+ low = mid + 1;
104
+ } else {
105
+ high = mid;
106
+ }
107
+ }
108
+
109
+ if (low < originalText.length) {
110
+ element.empty().append(domSplit(originalElement.get(0), low - 1, o)).append(o.str);
111
+ if (o.title) {
112
+ element.attr('title', originalText);
113
+ }
114
+ if (o.className) {
115
+ element.addClass(o.className);
116
+ }
117
+ }
118
+ }
119
+ clone.remove();
120
+
121
+ if (o.autoUpdate) {
122
+ setInterval(reflow, 200);
123
+ }
124
+ });
125
+ } else {
126
+ return this;
127
+ }
128
+ }
129
+ });
130
+ }(jQuery));
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @preserve jQuery Text Overflow v0.7.4
3
+ *
4
+ * Licensed under the new BSD License.
5
+ * Copyright 2009-2011, Bram Stein
6
+ * All rights reserved.
7
+ */
8
+ /*global jQuery, document, setInterval*/
9
+ (function($){var style=document.documentElement.style,hasTextOverflow=('textOverflow'in style||'OTextOverflow'in style),rtrim=function(str){return str.replace(/\s+$/g,'')},domSplit=function(root,maxIndex,options){var index=0,result=[],domSplitAux=function(nodes){var i=0,tmp,clipIndex=0;if(index>maxIndex){return}for(i=0;i<nodes.length;i+=1){if(nodes[i].nodeType===1){tmp=nodes[i].cloneNode(false);result[result.length-1].appendChild(tmp);result.push(tmp);domSplitAux(nodes[i].childNodes);result.pop()}else if(nodes[i].nodeType===3){if(index+nodes[i].length<maxIndex){result[result.length-1].appendChild(nodes[i].cloneNode(false))}else{tmp=nodes[i].cloneNode(false);clipIndex=maxIndex-index;if(options.wholeWord){clipIndex=Math.min(maxIndex-index,tmp.textContent.substring(0,maxIndex-index).lastIndexOf(' '))}tmp.textContent=options.trim?rtrim(tmp.textContent.substring(0,clipIndex)):tmp.textContent.substring(0,clipIndex);result[result.length-1].appendChild(tmp)}index+=nodes[i].length}else{result.appendChild(nodes[i].cloneNode(false))}}};result.push(root.cloneNode(false));domSplitAux(root.childNodes);return $(result.pop().childNodes)};$.extend($.fn,{textOverflow:function(options){var o=$.extend({str:'&#x2026;',autoUpdate:false,trim:true,title:false,className:undefined,wholeWord:false},options);if(!hasTextOverflow){return this.each(function(){var element=$(this),clone=element.clone(),originalElement=element.clone(),originalText=element.text(),originalWidth=element.width(),low=0,mid=0,high=originalText.length,reflow=function(){if(originalWidth!==element.width()){element.replaceWith(originalElement);element=originalElement;originalElement=element.clone();element.textOverflow($.extend({},o,{autoUpdate:false}));originalWidth=element.width()}};element.after(clone.hide().css({'position':'absolute','width':'auto','overflow':'visible','max-width':'inherit','min-width':'inherit'}));if(clone.width()>originalWidth){while(low<high){mid=Math.floor(low+((high-low)/2));clone.empty().append(domSplit(originalElement.get(0),mid,o)).append(o.str);if(clone.width()<originalWidth){low=mid+1}else{high=mid}}if(low<originalText.length){element.empty().append(domSplit(originalElement.get(0),low-1,o)).append(o.str);if(o.title){element.attr('title',originalText)}if(o.className){element.addClass(o.className)}}}clone.remove();if(o.autoUpdate){setInterval(reflow,200)}})}else{return this}}})}(jQuery));
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pie-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -113,6 +113,9 @@ files:
113
113
  - spec/spec_helper.rb
114
114
  - vendor/assets/javascripts/PIE.htc
115
115
  - vendor/assets/javascripts/PIE.js
116
+ - vendor/assets/javascripts/boxsizing.htc
117
+ - vendor/assets/javascripts/jquery.text-overflow.js
118
+ - vendor/assets/javascripts/jquery.text-overflow.min.js
116
119
  - vendor/assets/javascripts/jquery.textshadow.js
117
120
  - vendor/assets/javascripts/jquery.textshadow.min.js
118
121
  homepage: http://github.com/kristianmandrup/pie-rails
@@ -130,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
133
  version: '0'
131
134
  segments:
132
135
  - 0
133
- hash: 3940177036577333418
136
+ hash: -1589924178906212531
134
137
  required_rubygems_version: !ruby/object:Gem::Requirement
135
138
  none: false
136
139
  requirements: