Skip to content

Commit 89e6a48

Browse files
committed
Added full character support
2 parents cd4254d + 06c5d72 commit 89e6a48

File tree

3 files changed

+66
-50
lines changed

3 files changed

+66
-50
lines changed

README.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ After including jQuery, [download and include the minified version of Lettering.
1919
The resulting code will churn your `.fancy_title` and output the following:
2020

2121
<h1 class="fancy_title">
22-
<span class="char1 charS">S</span>
23-
<span class="char2 charo">o</span>
24-
<span class="char3 charm">m</span>
25-
<span class="char4 chare">e</span>
26-
<span class="char5 char_"> </span>
27-
<span class="char6 charT">T</span>
28-
<span class="char7 chari">i</span>
29-
<span class="char8 chart">t</span>
30-
<span class="char9 chal">l</span>
31-
<span class="char10 chare">e</span>
22+
<span class="char1 char-S">S</span>
23+
<span class="char2 char-o">o</span>
24+
<span class="char3 char-m">m</span>
25+
<span class="char4 char-e">e</span>
26+
<span class="char5 char-32"> </span>
27+
<span class="char6 char-T">T</span>
28+
<span class="char7 char-i">i</span>
29+
<span class="char8 char-t">t</span>
30+
<span class="char9 char-l">l</span>
31+
<span class="char10 char-e">e</span>
3232
</h1>
3333

3434
Magical. Now the text is easy to manipulate in your CSS using an ordinal `.char#` pattern. This plugin assumes basic counting skills, but it's a pretty fast and easy way to get control over every letter.
@@ -57,10 +57,10 @@ Here's an example of the `.lettering('words')` method:
5757
Which will generate:
5858

5959
<p class="word_split">
60-
<span class="word1 wordDont">Don't</span>
61-
<span class="word2 wordbreak">break</span>
62-
<span class="word3 wordmy">my</span>
63-
<span class="word4 wordheart">heart.</span>
60+
<span class="word1 word-Don39t">Don't</span>
61+
<span class="word2 word-break">break</span>
62+
<span class="word3 word-my">my</span>
63+
<span class="word4 word-heart46">heart.</span>
6464
</p>
6565

6666
You can then style each word using the `.word#` class.
@@ -79,9 +79,9 @@ Once word wrapping was complete, we noticed the need for yet another method, one
7979
Resulting code:
8080

8181
<p class="line_split">
82-
<span class="line1 lineAreyou">Are you</span>
83-
<span class="line2 linereadyto">ready to</span>
84-
<span class="line3 lineRUMmMmMMBBLE">RUMmMmMMBBLE!</span>
82+
<span class="line1 line-Are32you">Are you</span>
83+
<span class="line2 line-ready32to">ready to</span>
84+
<span class="line3 line-RUMmMmMMBBLE34">RUMmMmMMBBLE!</span>
8585
</p>
8686

8787
As expected it uses the `.line#` ordinal pattern. You'll also notice the `<br>`'s have been destructively ripped out. In your CSS, you'll want to declare something like `.line_split span { display:block; }` if you need them to behave as a `<br>` element.
@@ -90,7 +90,7 @@ As expected it uses the `.line#` ordinal pattern. You'll also notice the `<br>`
9090
We've found this to be a pretty quick and elegant solution to create typographical CSS3 posters. It's also a great solution for really custom type headings, while keeping the text selectable.
9191

9292
### Best Practices
93-
Be smart and use sparingly. You'll probably break your browser if you try to tried to do wrap every letter on your page in a `span` tag, so don't do that. Look to use this in your Headings, Blockquotes, Asides, etc.
93+
Be smart and use sparingly. You'll probably break your browser if you try to wrap every letter on your page in a `span` tag, so don't do that. Look to use this in your Headings, Blockquotes, Asides, etc.
9494

9595
### Kern Well
9696
If you're going through the trouble to load a fancy font and that word or phrase is the largest on the site, then it's important for it to be kerned well. With Lettering.js, kerning is a breeze. You can simply use `$("#id-of-what-i-want-to-kern").lettering();` and then on each `.char#`, you can set relative position or left/right margin. Works like a charm.

examples/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ <h4>The jQuery</h4>
8080

8181
<h4>The Result</h4>
8282
<div id="demo1" class="demo">
83-
<h1>Rainbow</h1>
83+
<h1>Rai nb&amp;ow</h1>
8484
</div>
8585

8686
</section>
@@ -91,7 +91,7 @@ <h2>Words</h2>
9191

9292
<h4>The Result</h4>
9393
<div id="demo2" class="demo">
94-
<h1>Hi, Multi Color</h1>
94+
<h1>Hi, M&ulti Color</h1>
9595
</div>
9696
</section>
9797

@@ -101,7 +101,7 @@ <h2>Lines</h2>
101101

102102
<h4>The Result</h4>
103103
<div id="demo3" class="demo">
104-
<p>This is an amazing<br/> Revolution in Typography. <br/> The possibilities are endless: <br/> Coloring, Vertical spacing, and Kerning.</p>
104+
<p>This is an amaz'ing<br/> Revolution in Typography. <br/> The possibilities are endless: <br/> Coloring, Vertical spacing, and Kerning.</p>
105105
</div>
106106
</section>
107107

@@ -132,4 +132,4 @@ <h1>WOOOoo!</h1>
132132
</div>
133133

134134
</body>
135-
</html>
135+
</html>

jquery.lettering.js

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,86 @@
1+
/*global jQuery */
12
/*!
2-
* Lettering.JS 0.6
3+
* Lettering.JS 0.6.1
34
*
45
* Copyright 2010, Dave Rupert http://daverupert.com
56
* Released under the WTFPL license
67
* http://sam.zoy.org/wtfpl/
78
*
89
* Thanks to Paul Irish - http://paulirish.com - for the feedback.
910
*
10-
* Date: Mon Sep 13 11:54:00 2010 -0600
11+
* Date: Mon Sep 20 17:14:00 2010 -0600
1112
*/
1213
(function($){
13-
var nonAlphanumeric = /[^a-z0-9_]/gi;
14-
14+
function encode(item) {
15+
var letterKlass = '';
16+
var numEntities = [160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,34,38,60,62,338,339,352,353,376,710,732,8194,8195,8201,8204,8205,8206,8207,8211,8212,8216,8217,8218,8220,8221,8222,8224,8225,8240,8249,8250,8364,402,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,977,978,982,8226,8230,8242,8243,8254,8260,8472,8465,8476,8482,8501,8592,8593,8594,8595,8596,8629,8656,8657,8658,8659,8660,8704,8706,8707,8709,8711,8712,8713,8715,8719,8721,8722,8727,8730,8733,8734,8736,8743,8744,8745,8746,8747,8756,8764,8773,8776,8800,8801,8804,8805,8834,8835,8836,8838,8839,8853,8855,8869,8901,8968,8969,8970,8971,9001,9002,9674,9824,9827,9829,9830];
17+
var htmlEntities = ['nbsp','iexcl','cent','pound','curren','yen','brvbar','sect','uml','copy','ordf','laquo','not','shy','reg','macr','deg','plusmn','sup2','sup3','acute','micro','para','middot','cedil','sup1','ordm','raquo','frac14','frac12','frac34','iquest','agrave','aacute','acirc','atilde','Auml','aring','aelig','ccedil','egrave','eacute','ecirc','euml','igrave','iacute','icirc','iuml','eth','ntilde','ograve','oacute','ocirc','otilde','Ouml','times','oslash','ugrave','uacute','ucirc','Uuml','yacute','thorn','szlig','agrave','aacute','acirc','atilde','auml','aring','aelig','ccedil','egrave','eacute','ecirc','euml','igrave','iacute','icirc','iuml','eth','ntilde','ograve','oacute','ocirc','otilde','ouml','divide','Oslash','ugrave','uacute','ucirc','uuml','yacute','thorn','yuml','quot','amp','lt','gt','oelig','oelig','scaron','scaron','yuml','circ','tilde','ensp','emsp','thinsp','zwnj','zwj','lrm','rlm','ndash','mdash','lsquo','rsquo','sbquo','ldquo','rdquo','bdquo','dagger','dagger','permil','lsaquo','rsaquo','euro','fnof','alpha','beta','gamma','delta','epsilon','zeta','eta','theta','iota','kappa','lambda','mu','nu','xi','omicron','pi','rho','sigma','tau','upsilon','phi','chi','psi','omega','alpha','beta','gamma','delta','epsilon','zeta','eta','theta','iota','kappa','lambda','mu','nu','xi','omicron','pi','rho','sigmaf','sigma','tau','upsilon','phi','chi','psi','omega','thetasym','upsih','piv','bull','hellip','prime','prime','oline','frasl','weierp','image','real','trade','alefsym','larr','uarr','rarr','darr','harr','crarr','larr','uarr','rarr','darr','harr','forall','part','exist','empty','nabla','isin','notin','ni','prod','sum','minus','lowast','radic','prop','infin','ang','and','or','cap','cup','int','there4','sim','cong','asymp','ne','equiv','le','ge','sub','sup','nsub','sube','supe','oplus','otimes','perp','sdot','lceil','rceil','lfloor','rfloor','lang','rang','loz','spades','clubs','hearts','diams'];
18+
19+
for (var i = 0; i < item.length; i++)
20+
{
21+
var c = item.charAt(i);
22+
var cC = c.charCodeAt();
23+
24+
if (c < "0" || c > "~" || (c > "9" && c < "A") || (c > "Z" && c < 'a'))
25+
{
26+
c = htmlEntities[numEntities.indexOf(cC)] || cC;
27+
}
28+
29+
letterKlass += c;
30+
}
31+
return letterKlass;
32+
}
33+
34+
function injector(t, splitter, klass, after) {
35+
var a = t.text().split(splitter), inject = '';
36+
if (a.length) {
37+
$(a).each(function(i, item) {
38+
inject += '<span class="'+klass+(i+1)+' '+klass+'-'+encode(item)+'">'+item+'</span>'+after;
39+
});
40+
t.empty().append(inject);
41+
}
42+
}
43+
1544
var methods = {
1645
init : function() {
1746

1847
return this.each(function() {
19-
return injector($(this), '', 'char', '');
48+
injector($(this), '', 'char', '');
2049
});
2150

2251
},
2352

2453
words : function() {
2554

2655
return this.each(function() {
27-
return injector($(this), ' ', 'word', ' ');
56+
injector($(this), ' ', 'word', ' ');
2857
});
2958

3059
},
31-
60+
3261
lines : function() {
3362

3463
return this.each(function() {
35-
var t = $(this), r = "eefec303079ad17405c889e092e105b0";
64+
var r = "eefec303079ad17405c889e092e105b0";
3665
// Because it's hard to split a <br/> tag consistently across browsers,
3766
// (*ahem* IE *ahem*), we replaces all <br/> instances with an md5 hash
3867
// (of the word "split"). If you're trying to use this plugin on that
3968
// md5 hash string, it will fail because you're being ridiculous.
40-
t.children("br").replaceWith(r);
41-
return injector(t, r, 'line', '');
69+
injector($(this).children("br").replaceWith(r).end(), r, 'line', '');
4270
});
4371

4472
}
4573
};
4674

47-
function injector(t, splitter, klass, after) {
48-
var a = t.text().split(splitter), inject = '';
49-
if(a.length > 0) {
50-
$(a).each(function(i, item) {
51-
inject += '<span class="'+klass+(i+1)+' '+klass+(item === ' ' ? '_' : item.replace(nonAlphanumeric, ''))+'">'+item+'</span>'+after;
52-
//
53-
});
54-
t.empty();
55-
t.append(inject);
56-
}
57-
}
58-
5975
$.fn.lettering = function( method ) {
6076
// Method calling logic
61-
if ( methods[method] ) {
62-
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
63-
} else if ( method == 'letters' || ! method ) {
64-
return methods.init.apply( this, arguments );
65-
} else {
66-
$.error( 'Method ' + method + ' does not exist on jQuery.lettering' );
77+
if ( method && methods[method] ) {
78+
return methods[ method ].apply( this, [].slice.call( arguments, 1 ));
79+
} else if ( method === 'letters' || ! method ) {
80+
return methods.init.apply( this, [].slice.call( arguments, 0 ) ); // always pass an array
6781
}
82+
$.error( 'Method ' + method + ' does not exist on jQuery.lettering' );
83+
return this;
6884
};
6985

7086
})(jQuery);

0 commit comments

Comments
 (0)