ajaxlibs 0.1.11 → 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +9 -3
- data/VERSION +1 -1
- data/lib/ajaxlibs.rb +2 -0
- data/lib/ajaxlibs/libraries/chrome_frame.rb +13 -0
- data/lib/ajaxlibs/libraries/webfont.rb +7 -0
- data/public/chrome-frame/1.0.0/CFInstall.js +224 -0
- data/public/chrome-frame/1.0.0/CFInstall.js.1 +224 -0
- data/public/chrome-frame/1.0.1/CFInstall.js +348 -0
- data/public/chrome-frame/1.0.1/CFInstall.min.js +11 -0
- data/public/chrome-frame/1.0.2/CFInstall.js +356 -0
- data/public/chrome-frame/1.0.2/CFInstall.min.js +5 -0
- data/public/webfont/1/webfont.js +35 -0
- data/public/webfont/1/webfont_debug.js +1092 -0
- data/spec/library_spec.rb +34 -34
- metadata +14 -4
@@ -0,0 +1,5 @@
|
|
1
|
+
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
3
|
+
// found in the LICENSE file.
|
4
|
+
|
5
|
+
(function(e){if(!e.CFInstall){var f=function(a,b){return typeof a=="string"?(b||document).getElementById(a):a},h=function(){if(e.CFInstall._force)return e.CFInstall._forceValue;if(navigator.userAgent.toLowerCase().indexOf("chromeframe")>=0)return true;if(typeof window.ActiveXObject!="undefined")try{if(new ActiveXObject("ChromeTab.ChromeFrame"))return true}catch(a){}return false},i=function(a){try{var b=document.createElement("style");b.setAttribute("type","text/css");if(b.styleSheet)b.styleSheet.cssText=a;else b.appendChild(document.createTextNode(a));var c=document.getElementsByTagName("head")[0];c.insertBefore(b,c.firstChild)}catch(g){}},j=false,k=false,n=function(){if(!j){i('.chromeFrameInstallDefaultStyle {width: 800px;height: 600px;position: absolute;left: 50%;top: 50%;margin-left: -400px;margin-top: -300px;}.chromeFrameOverlayContent {position: absolute;margin-left: -400px;margin-top: -300px;left: 50%;top: 50%;border: 1px solid #93B4D9;background-color: white;z-index: 2001;}.chromeFrameOverlayContent iframe {width: 800px;height: 600px;border: none;}.chromeFrameOverlayCloseBar {height: 1em;text-align: right;background-color: #CADEF4;}.chromeFrameOverlayUnderlay {position: absolute;width: 100%;height: 100%;background-color: white;opacity: 0.5;-moz-opacity: 0.5;-webkit-opacity: 0.5;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter: alpha(opacity=50);z-index: 2000;}');j=true}},l=function(){if(!k){i(".chromeFrameOverlayContent { display: none; }.chromeFrameOverlayUnderlay { display: none; }");document.cookie="disableGCFCheck=1;path=/;max-age=31536000000";k=true}},o=function(a,b){var c=f(b.node);a.id=b.id||(c?c.id||getUid(c):"");a.style.cssText=" "+(b.cssText||"");a.className=b.className||"";a.src=b.src||"about:blank";c&&c.parentNode.replaceChild(a,c)},m=function(a){var b=document.createElement("iframe");b.setAttribute("frameborder","0");b.setAttribute("border","0");o(b,a);return b},p=function(a){a.className="chromeFrameInstallDefaultStyle "+(a.className||"");a=m(a);a.parentNode||document.body.insertBefore(a,document.body.firstChild)},q=function(a){if(!f("chromeFrameOverlayContent")){var b=document.createElement("span");b.innerHTML='<div class="chromeFrameOverlayUnderlay"></div><table class="chromeFrameOverlayContent"id="chromeFrameOverlayContent"cellpadding="0" cellspacing="0"><tr class="chromeFrameOverlayCloseBar"><td><button id="chromeFrameCloseButton">close</button></td></tr><tr><td id="chromeFrameIframeHolder"></td></tr></table>';for(var c=document.body;b.firstChild;)c.insertBefore(b.lastChild,c.firstChild);a=m(a);f("chromeFrameIframeHolder").appendChild(a);f("chromeFrameCloseButton").onclick=l}},d={};d.check=function(a){a=a||{};var b=navigator.userAgent,c=/MSIE (\S+); Windows NT/,g=false;if(c.test(b)){if(parseFloat(c.exec(b)[1])<6&&b.indexOf("SV1")<0)g=true}else g=true;if(!g){n();document.cookie.indexOf("disableGCFCheck=1")>=0&&l();b=(document.location.protocol=="https:"?"https:":"http:")+"//www.google.com/chromeframe";if(!h()){a.onmissing&&a.onmissing();a.src=a.url||b;b=a.mode||"inline";if(!(a.preventPrompt||0))if(b=="inline")p(a);else b=="overlay"?q(a):window.open(a.src);if(!a.preventInstallDetection)var r=setInterval(function(){if(h()){a.oninstall&&a.oninstall();clearInterval(r);window.location=a.destination||window.location}},2E3)}}};d._force=false;d._forceValue=false;d.isAvailable=h;e.CFInstall=d}})(this.ChromeFrameInstallScope||this);
|
@@ -0,0 +1,35 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2010 Small Batch, Inc.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
5
|
+
* use this file except in compliance with the License. You may obtain a copy of
|
6
|
+
* the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
* License for the specific language governing permissions and limitations under
|
14
|
+
* the License.
|
15
|
+
*/
|
16
|
+
;(function(window,document,undefined){
|
17
|
+
webfont={};webfont.Q=function(a,b){var c=arguments.length>2?Array.prototype.slice.call(arguments,2):[];return function(){c.push.apply(c,arguments);return b.apply(a,c)}};webfont.z=function(a){this.R=a};webfont.z.prototype.createElement=function(a,b,c){a=this.R.createElement(a);if(b)for(var d in b)b.hasOwnProperty(d)&&a.setAttribute(d,b[d]);c&&a.appendChild(this.R.createTextNode(c));return a};function i(a,b,c){a=a.R.getElementsByTagName(b)[0];if(!a)a=document.documentElement;if(a&&a.lastChild){a.insertBefore(c,a.lastChild);return true}return false}function m(a,b){function c(){document.body?b():setTimeout(c,0)}c()}
|
18
|
+
function n(a,b){if(b.parentNode){b.parentNode.removeChild(b);return true}return false}function o(a,b){return a.createElement("link",{rel:"stylesheet",href:b})}function p(a,b,c){a=b.className.split(/\s+/);for(var d=0,e=a.length;d<e;d++)if(a[d]==c)return;a.push(c);b.className=a.join(" ").replace(/^\s+/,"")}function q(a,b,c){a=b.className.split(/\s+/);for(var d=[],e=0,f=a.length;e<f;e++)a[e]!=c&&d.push(a[e]);b.className=d.join(" ").replace(/^\s+/,"").replace(/\s+$/,"")};webfont.o=function(a,b,c,d,e,f){this.Aa=a;this.Ga=b;this.Fa=c;this.Ea=d;this.Ca=e;this.Z=f};webfont.o.prototype.getName=function(){return this.Aa};webfont.e=function(a){this.a=a};webfont.e.f="Unknown";webfont.e.sa=new webfont.o(webfont.e.f,webfont.e.f,webfont.e.f,false);webfont.e.prototype.parse=function(){return this.a.indexOf("MSIE")!=-1?r(this):this.a.indexOf("Opera")!=-1?s(this):this.a.indexOf("AppleWebKit")!=-1?t(this):this.a.indexOf("Gecko")!=-1?u(this):webfont.e.sa};
|
19
|
+
function v(a){var b=w(a,a.a,/(iPod|iPad|iPhone|Android)/);if(b!="")return b;a=w(a,a.a,/(Linux|Mac_PowerPC|Macintosh|Windows)/);if(a!=""){if(a=="Mac_PowerPC")a="Macintosh";return a}return webfont.e.f}function r(a){var b=w(a,a.a,/(MSIE [\d\w\.]+)/);if(b!=""){var c=b.split(" ");b=c[0];c=c[1];return new webfont.o(b,c,b,c,v(a),x(a,c)>=6)}return new webfont.o("MSIE",webfont.e.f,"MSIE",webfont.e.f,v(a),false)}
|
20
|
+
function s(a){var b=webfont.e.f,c=webfont.e.f,d=w(a,a.a,/(Presto\/[\d\w\.]+)/);if(d!=""){c=d.split("/");b=c[0];c=c[1]}else{if(a.a.indexOf("Gecko")!=-1)b="Gecko";d=w(a,a.a,/rv:([^\)]+)/);if(d!="")c=d}if(a.a.indexOf("Version/")!=-1){d=w(a,a.a,/Version\/([\d\.]+)/);if(d!="")return new webfont.o("Opera",d,b,c,v(a),x(a,d)>=10)}d=w(a,a.a,/Opera[\/ ]([\d\.]+)/);if(d!="")return new webfont.o("Opera",d,b,c,v(a),x(a,d)>=10);return new webfont.o("Opera",webfont.e.f,b,c,v(a),false)}
|
21
|
+
function t(a){var b=v(a),c=w(a,a.a,/AppleWebKit\/([\d\.\+]+)/);if(c=="")c=webfont.e.f;var d=webfont.e.f;if(a.a.indexOf("Chrome")!=-1)d="Chrome";else if(a.a.indexOf("Safari")!=-1)d="Safari";var e=webfont.e.f;if(a.a.indexOf("Version/")!=-1)e=w(a,a.a,/Version\/([\d\.\w]+)/);else if(d=="Chrome")e=w(a,a.a,/Chrome\/([\d\.]+)/);var f=w(a,c,/\d+\.(\d+)/);return new webfont.o(d,e,"AppleWebKit",c,b,x(a,c)>=526||x(a,c)>=525&&parseInt(f)>=13)}
|
22
|
+
function u(a){var b=webfont.e.f,c=webfont.e.f,d=false;if(a.a.indexOf("Firefox")!=-1){b="Firefox";var e=w(a,a.a,/Firefox\/([\d\w\.]+)/);if(e!=""){d=w(a,e,/\d+\.(\d+)/);c=e;d=e!=""&&x(a,e)>=3&&parseInt(d)>=5}}else if(a.a.indexOf("Mozilla")!=-1)b="Mozilla";e=w(a,a.a,/rv:([^\)]+)/);if(e=="")e=webfont.e.f;else if(!d){d=x(a,e);var f=parseInt(w(a,e,/\d+\.(\d+)/)),h=parseInt(w(a,e,/\d+\.\d+\.(\d+)/));d=d>1||d==1&&f>9||d==1&&f==9&&h>=2||e.match(/1\.9\.1b[123]/)!=null||e.match(/1\.9\.1\.[\d\.]+/)!=null}return new webfont.o(b,
|
23
|
+
c,"Gecko",e,v(a),d)}function x(a,b){a=w(a,b,/(\d+)/);if(a!="")return parseInt(a);return-1}function w(a,b,c){if((a=b.match(c))&&a[1])return a[1];return""};webfont.d=function(a,b,c,d){this.c=a;this.j=b;this.ba=c;this.q=d||webfont.d.oa;this.p=new webfont.F("-")};webfont.d.oa="wf";webfont.d.u="loading";webfont.d.D="active";webfont.d.I="inactive";webfont.d.O="font";function y(a){p(a.c,a.j,a.p.h(a.q,webfont.d.u));A(a,webfont.d.u)}function B(a,b,c){q(a.c,a.j,a.p.h(a.q,b,c,webfont.d.u));p(a.c,a.j,a.p.h(a.q,b,c,webfont.d.D));A(a,webfont.d.O+webfont.d.D,b,c)}function C(a){p(a.c,a.j,a.p.h(a.q,webfont.d.I));A(a,webfont.d.I)}
|
24
|
+
function D(a){q(a.c,a.j,a.p.h(a.q,webfont.d.u));p(a.c,a.j,a.p.h(a.q,webfont.d.D));A(a,webfont.d.D)}function A(a,b,c,d){a.ba[b]&&a.ba[b](c,d)};webfont.qa=function(){this.ia={}};function E(a,b){var c=[];for(var d in b)if(b.hasOwnProperty(d)){var e=a.ia[d];e&&c.push(e(b[d]))}return c};webfont.t=function(a,b,c,d,e){this.c=a;this.v=b;this.S=c;this.L=d;this.fa=e;this.ca=0;this.X=this.ha=false;this.za=new webfont.$;this.M=new webfont.g};webfont.t.aa="DEFAULT_FONT";webfont.t.pa="n4";
|
25
|
+
webfont.t.prototype.watch=function(a,b,c){for(var d=a.length,e=0;e<d;e++){var f=a[e];b[f]||(b[f]=[webfont.t.pa]);this.ca+=b[f].length}if(c)this.ha=c;for(e=0;e<d;e++){f=a[e];c=b[f];for(var h=0,k=c.length;h<k;h++){var g=c[h],j=F(this,webfont.t.aa,g),z=this.S.T(j);n(this.c,j);j=f;var l=this.v;p(l.c,l.j,l.p.h(l.q,j,g,webfont.d.u));A(l,webfont.d.O+webfont.d.u,j,g);l=F(this,j,g);if(z!=this.S.T(l)){n(this.c,l);B(this.v,j,g);this.X=true;G(this)}else H(this,this.fa(),z,l,j,g)}}};
|
26
|
+
function G(a){if(--a.ca==0&&a.ha)a.X?D(a.v):C(a.v)}webfont.t.prototype.wa=function(a,b,c,d,e){if(b!=this.S.T(c)){n(this.c,c);B(this.v,d,e);this.X=true;G(this)}else if(this.fa()-a<5E3)H(this,a,b,c,d,e);else{n(this.c,c);a=this.v;q(a.c,a.j,a.p.h(a.q,d,e,webfont.d.u));p(a.c,a.j,a.p.h(a.q,d,e,webfont.d.I));A(a,webfont.d.O+webfont.d.I,d,e);G(this)}};function H(a,b,c,d,e,f){a.L(function(h,k){return function(){k.call(h,b,c,d,e,f)}}(a,a.wa),50)}
|
27
|
+
function F(a,b,c){b=a.za.quote(b);c=a.M.expand(c);c=a.c.createElement("span",{style:"position:absolute;top:-999px;font-size:300px;font-family:"+b+","+webfont.t.aa+";"+c},"Mm");i(a.c,"html",c);return c};webfont.C=function(a,b,c,d,e){this.c=a;this.da=b;this.j=c;this.L=d;this.a=e;this.V=this.W=0};webfont.C.prototype.K=function(a,b){this.da.ia[a]=b};webfont.C.prototype.load=function(a){var b=new webfont.d(this.c,this.j,a);this.a.Z?I(this,b,a):C(b)};webfont.C.prototype.xa=function(a,b,c,d){if(d)a.load(webfont.Q(this,this.Ba,b,c));else{a=--this.W==0;this.V--;if(a)this.V==0?C(b):y(b);c.watch([],{},a)}};
|
28
|
+
webfont.C.prototype.Ba=function(a,b,c,d){var e=--this.W==0;e&&y(a);this.L(webfont.Q(this,function(f,h,k,g){f.watch(h,k||{},g)},b,c,d,e))};function I(a,b,c){c=E(a.da,c);a.V=a.W=c.length;for(var d=new webfont.t(a.c,b,{T:function(k){return k.offsetWidth}},a.L,function(){return+new Date}),e=0,f=c.length;e<f;e++){var h=c[e];h.Y(a.a,webfont.Q(a,a.xa,h,b,d))}};webfont.F=function(a){this.ya=a||webfont.F.na};webfont.F.na="-";webfont.F.prototype.h=function(){for(var a=[],b=0;b<arguments.length;b++)a.push(arguments[b].replace(/[\W_]+/g,"").toLowerCase());return a.join(this.ya)};webfont.$=function(){this.ka='"'};webfont.$.prototype.quote=function(a){var b=[];a=a.split(/,\s*/);for(var c=0;c<a.length;c++){var d=a[c].replace(/['"]/g,"");d.indexOf(" ")==-1?b.push(d):b.push(this.ka+d+this.ka)}return b.join(",")};webfont.g=function(){this.N=webfont.g.ra;this.s=webfont.g.ta};webfont.g.ra=["font-style","font-weight"];webfont.g.ta={"font-style":[["n","normal"],["i","italic"],["o","oblique"]],"font-weight":[["1","100"],["2","200"],["3","300"],["4","400"],["5","500"],["6","600"],["7","700"],["8","800"],["9","900"],["4","normal"],["7","bold"]]};webfont.g.J=function(a,b,c){this.ga=a;this.Da=b;this.s=c};
|
29
|
+
webfont.g.J.prototype.compact=function(a,b){for(var c=0;c<this.s.length;c++)if(b==this.s[c][1]){a[this.ga]=this.s[c][0];return}};webfont.g.J.prototype.expand=function(a,b){for(var c=0;c<this.s.length;c++)if(b==this.s[c][0]){a[this.ga]=this.Da+":"+this.s[c][1];return}};
|
30
|
+
webfont.g.prototype.compact=function(a){var b=["n","4"];a=a.split(";");for(var c=0,d=a.length;c<d;c++){var e=a[c].replace(/\s+/g,"").split(":");if(e.length==2){var f=e[1];a:{e=e[0];for(var h=0;h<this.N.length;h++)if(e==this.N[h]){e=new webfont.g.J(h,e,this.s[e]);break a}e=null}e&&e.compact(b,f)}}return b.join("")};
|
31
|
+
webfont.g.prototype.expand=function(a){if(a.length!=2)return null;for(var b=[null,null],c=0,d=this.N.length;c<d;c++){var e=this.N[c],f=a.substr(c,1);(new webfont.g.J(c,e,this.s[e])).expand(b,f)}return b[0]&&b[1]?b.join(";")+";":null};window.WebFont=function(){var a=new webfont.z(document),b=(new webfont.e(navigator.userAgent)).parse();return new webfont.C(a,new webfont.qa,document.documentElement,function(c,d){setTimeout(c,d)},b)}();window.WebFont.load=window.WebFont.load;window.WebFont.addModule=window.WebFont.K;webfont.H=function(a){this.va=a||webfont.H.ma;this.m=null};webfont.H.ma="//fonts.googleapis.com/css";webfont.H.prototype.h=function(){if(!this.m)throw new Error("No fonts to load !");for(var a=this.m.length,b=[],c=0;c<a;c++)b.push(this.m[c].replace(/ /g,"+"));return this.va+"?family="+b.join("%7C")};webfont.G=function(a){this.m=a;this.ja=[];this.la={};this.M=new webfont.g};webfont.G.ua={ultralight:"n2",light:"n3",regular:"i4",bold:"i7",italic:"i4",bolditalic:"i7",ul:"n2",l:"n3",r:"n4",b:"n7",i:"i4",bi:"i7"};
|
32
|
+
webfont.G.prototype.parse=function(){for(var a=this.m.length,b=0;b<a;b++){var c=this.m[b].split(":"),d=c[0],e=null;if(c.length==2){var f=[];c=c[1].split(",");for(var h=c.length,k=0;k<h;k++){var g;g=c[k];if(g.match(/^[\w ]+$/)){var j=webfont.G.ua[g];if(j)g=j;else{j=g.match(/^(\d*)(\w*)$/);g=j[1];j=j[2];g=(g=this.M.expand([j?j:"n",g?g.substr(0,1):"4"].join("")))?this.M.compact(g):null}}else g="";g&&f.push(g)}if(f.length>0)e=f}else e=["n4"];this.ja.push(d);this.la[d]=e}};webfont.A=function(a,b,c){this.a=a;this.c=b;this.k=c};webfont.A.B="google";webfont.A.prototype.Y=function(a,b){a.Ca.match(/iPad|iPod|iPhone/)!=null&&b(false);return b(a.Z)};webfont.A.prototype.load=function(a){var b=new webfont.H(this.k.api),c=this.k.families,d=this.c,e=this.a.getName()=="MSIE"&&this.k.blocking!=true;b.m=c;e?m(d,function(){i(d,"head",o(d,b.h()))}):i(d,"head",o(d,b.h()));c=new webfont.G(c);c.parse();a(c.ja,c.la)};
|
33
|
+
WebFont.K(webfont.A.B,function(a){var b=(new webfont.e(navigator.userAgent)).parse();return new webfont.A(b,new webfont.z(document),a)});webfont.w=function(a,b){this.c=a;this.k=b};webfont.w.B="custom";webfont.w.prototype.load=function(a){for(var b=this.k.urls||[],c=this.k.families||[],d=0,e=b.length;d<e;d++)i(this.c,"head",o(this.c,b[d]));a(c)};webfont.w.prototype.Y=function(a,b){return b(a.Z)};WebFont.K(webfont.w.B,function(a){return new webfont.w(new webfont.z(document),a)});webfont.n=function(a,b,c){this.U=a;this.c=b;this.k=c;this.m=[];this.ea={}};webfont.n.B="typekit";webfont.n.P="__webfonttypekitmodule__";webfont.n.prototype.Y=function(a,b){var c=this.k.id,d=this.k,e=this;if(c){this.U[webfont.n.P]||(this.U[webfont.n.P]={});this.U[webfont.n.P][c]=function(f){f(a,d,function(h,k,g){e.m=k;e.ea=g;b(h)})};i(this.c,"head",this.c.createElement("script",{src:(this.k.api||"http://use.typekit.com")+"/"+c+".js"}))}else b(true)};webfont.n.prototype.load=function(a){a(this.m,this.ea)};
|
34
|
+
WebFont.K(webfont.n.B,function(a){return new webfont.n(window,new webfont.z(document),a)});
|
35
|
+
})(this,document);
|
@@ -0,0 +1,1092 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2010 Small Batch, Inc.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
5
|
+
* use this file except in compliance with the License. You may obtain a copy of
|
6
|
+
* the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
* License for the specific language governing permissions and limitations under
|
14
|
+
* the License.
|
15
|
+
*/
|
16
|
+
webfont = {};
|
17
|
+
|
18
|
+
webfont.bind = function(context, func, opt_args) {
|
19
|
+
var args = arguments.length > 2 ?
|
20
|
+
Array.prototype.slice.call(arguments, 2) : [];
|
21
|
+
|
22
|
+
return function() {
|
23
|
+
args.push.apply(args, arguments);
|
24
|
+
return func.apply(context, args);
|
25
|
+
};
|
26
|
+
};
|
27
|
+
|
28
|
+
webfont.DomHelper = function(doc) {
|
29
|
+
this.document_ = doc;
|
30
|
+
};
|
31
|
+
|
32
|
+
webfont.DomHelper.prototype.createElement = function(elem, opt_attr,
|
33
|
+
opt_innerHtml) {
|
34
|
+
var domElement = this.document_.createElement(elem);
|
35
|
+
|
36
|
+
if (opt_attr) {
|
37
|
+
for (var attr in opt_attr) {
|
38
|
+
// protect against native prototype augmentations
|
39
|
+
if (opt_attr.hasOwnProperty(attr)) {
|
40
|
+
domElement.setAttribute(attr, opt_attr[attr]);
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
if (opt_innerHtml) {
|
45
|
+
domElement.appendChild(this.document_.createTextNode(opt_innerHtml));
|
46
|
+
}
|
47
|
+
return domElement;
|
48
|
+
};
|
49
|
+
|
50
|
+
webfont.DomHelper.prototype.insertInto = function(tagName, e) {
|
51
|
+
var t = this.document_.getElementsByTagName(tagName)[0];
|
52
|
+
|
53
|
+
if (!t) { // opera allows documents without a head
|
54
|
+
t = document.documentElement;
|
55
|
+
}
|
56
|
+
|
57
|
+
if (t && t.lastChild) {
|
58
|
+
// This is safer than appendChild in IE. appendChild causes random
|
59
|
+
// JS errors in IE. Sometimes errors in other JS exectution, sometimes
|
60
|
+
// complete 'This page cannot be displayed' errors. For our purposes,
|
61
|
+
// it's equivalent because we don't need to insert at any specific
|
62
|
+
// location.
|
63
|
+
t.insertBefore(e, t.lastChild);
|
64
|
+
return true;
|
65
|
+
}
|
66
|
+
return false;
|
67
|
+
};
|
68
|
+
|
69
|
+
webfont.DomHelper.prototype.whenBodyExists = function(callback) {
|
70
|
+
var check = function() {
|
71
|
+
if (document.body) {
|
72
|
+
callback();
|
73
|
+
} else {
|
74
|
+
setTimeout(check, 0);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
check();
|
78
|
+
};
|
79
|
+
|
80
|
+
webfont.DomHelper.prototype.removeElement = function(node) {
|
81
|
+
if (node.parentNode) {
|
82
|
+
node.parentNode.removeChild(node);
|
83
|
+
return true;
|
84
|
+
}
|
85
|
+
return false;
|
86
|
+
};
|
87
|
+
|
88
|
+
webfont.DomHelper.prototype.createCssLink = function(src) {
|
89
|
+
return this.createElement('link', {
|
90
|
+
'rel': 'stylesheet',
|
91
|
+
'href': src
|
92
|
+
});
|
93
|
+
};
|
94
|
+
|
95
|
+
webfont.DomHelper.prototype.createScriptSrc = function(src) {
|
96
|
+
return this.createElement('script', {
|
97
|
+
'src': src
|
98
|
+
});
|
99
|
+
};
|
100
|
+
|
101
|
+
webfont.DomHelper.prototype.appendClassName = function(e, name) {
|
102
|
+
var classes = e.className.split(/\s+/);
|
103
|
+
for (var i = 0, len = classes.length; i < len; i++) {
|
104
|
+
if (classes[i] == name) {
|
105
|
+
return;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
classes.push(name);
|
109
|
+
e.className = classes.join(' ').replace(/^\s+/, '');
|
110
|
+
};
|
111
|
+
|
112
|
+
webfont.DomHelper.prototype.removeClassName = function(e, name) {
|
113
|
+
var classes = e.className.split(/\s+/);
|
114
|
+
var remainingClasses = [];
|
115
|
+
for (var i = 0, len = classes.length; i < len; i++) {
|
116
|
+
if (classes[i] != name) {
|
117
|
+
remainingClasses.push(classes[i]);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
e.className = remainingClasses.join(' ').replace(/^\s+/, '')
|
121
|
+
.replace(/\s+$/, '');
|
122
|
+
};
|
123
|
+
|
124
|
+
webfont.UserAgent = function(name, version, engine, engineVersion, platform,
|
125
|
+
webFontSupport) {
|
126
|
+
this.name_ = name;
|
127
|
+
this.version_ = version;
|
128
|
+
this.engine_ = engine;
|
129
|
+
this.engineVersion_ = engineVersion;
|
130
|
+
this.platform_ = platform;
|
131
|
+
this.webFontSupport_ = webFontSupport;
|
132
|
+
};
|
133
|
+
|
134
|
+
webfont.UserAgent.prototype.getName = function() {
|
135
|
+
return this.name_;
|
136
|
+
};
|
137
|
+
|
138
|
+
webfont.UserAgent.prototype.getVersion = function() {
|
139
|
+
return this.version_;
|
140
|
+
};
|
141
|
+
|
142
|
+
webfont.UserAgent.prototype.getEngine = function() {
|
143
|
+
return this.engine_;
|
144
|
+
};
|
145
|
+
|
146
|
+
webfont.UserAgent.prototype.getEngineVersion = function() {
|
147
|
+
return this.engineVersion_;
|
148
|
+
};
|
149
|
+
|
150
|
+
webfont.UserAgent.prototype.getPlatform = function() {
|
151
|
+
return this.platform_;
|
152
|
+
};
|
153
|
+
|
154
|
+
webfont.UserAgent.prototype.isSupportingWebFont = function() {
|
155
|
+
return this.webFontSupport_;
|
156
|
+
};
|
157
|
+
|
158
|
+
webfont.UserAgentParser = function(userAgent) {
|
159
|
+
this.userAgent_ = userAgent;
|
160
|
+
};
|
161
|
+
|
162
|
+
webfont.UserAgentParser.UNKNOWN = "Unknown";
|
163
|
+
|
164
|
+
webfont.UserAgentParser.UNKNOWN_USER_AGENT = new webfont.UserAgent(webfont.UserAgentParser.UNKNOWN,
|
165
|
+
webfont.UserAgentParser.UNKNOWN, webfont.UserAgentParser.UNKNOWN, false);
|
166
|
+
|
167
|
+
webfont.UserAgentParser.prototype.parse = function() {
|
168
|
+
if (this.isIe_()) {
|
169
|
+
return this.parseIeUserAgentString_();
|
170
|
+
} else if (this.isOpera_()) {
|
171
|
+
return this.parseOperaUserAgentString_();
|
172
|
+
} else if (this.isWebKit_()) {
|
173
|
+
return this.parseWebKitUserAgentString_();
|
174
|
+
} else if (this.isGecko_()) {
|
175
|
+
return this.parseGeckoUserAgentString_();
|
176
|
+
} else {
|
177
|
+
return webfont.UserAgentParser.UNKNOWN_USER_AGENT;
|
178
|
+
}
|
179
|
+
};
|
180
|
+
|
181
|
+
webfont.UserAgentParser.prototype.getPlatform_ = function() {
|
182
|
+
var mobileOs = this.getFirstMatchingGroup_(this.userAgent_,
|
183
|
+
/(iPod|iPad|iPhone|Android)/);
|
184
|
+
|
185
|
+
if (mobileOs != "") {
|
186
|
+
return mobileOs;
|
187
|
+
}
|
188
|
+
var os = this.getFirstMatchingGroup_(this.userAgent_,
|
189
|
+
/(Linux|Mac_PowerPC|Macintosh|Windows)/);
|
190
|
+
|
191
|
+
if (os != "") {
|
192
|
+
if (os == "Mac_PowerPC") {
|
193
|
+
os = "Macintosh";
|
194
|
+
}
|
195
|
+
return os;
|
196
|
+
}
|
197
|
+
return webfont.UserAgentParser.UNKNOWN;
|
198
|
+
};
|
199
|
+
|
200
|
+
webfont.UserAgentParser.prototype.isIe_ = function() {
|
201
|
+
return this.userAgent_.indexOf("MSIE") != -1;
|
202
|
+
};
|
203
|
+
|
204
|
+
webfont.UserAgentParser.prototype.parseIeUserAgentString_ = function() {
|
205
|
+
var browser = this.getFirstMatchingGroup_(this.userAgent_, /(MSIE [\d\w\.]+)/);
|
206
|
+
var engineName = webfont.UserAgentParser.UNKNOWN;
|
207
|
+
var engineVersion = webfont.UserAgentParser.UNKNOWN;
|
208
|
+
|
209
|
+
if (browser != "") {
|
210
|
+
var pair = browser.split(' ');
|
211
|
+
var name = pair[0];
|
212
|
+
var version = pair[1];
|
213
|
+
|
214
|
+
// For IE we give MSIE as the engine name and the version of IE
|
215
|
+
// instead of the specific Trident engine name and version
|
216
|
+
return new webfont.UserAgent(name, version, name, version,
|
217
|
+
this.getPlatform_(), this.getMajorVersion_(version) >= 6);
|
218
|
+
}
|
219
|
+
return new webfont.UserAgent("MSIE", webfont.UserAgentParser.UNKNOWN,
|
220
|
+
"MSIE", webfont.UserAgentParser.UNKNOWN, this.getPlatform_(), false);
|
221
|
+
};
|
222
|
+
|
223
|
+
webfont.UserAgentParser.prototype.isOpera_ = function() {
|
224
|
+
return this.userAgent_.indexOf("Opera") != -1;
|
225
|
+
};
|
226
|
+
|
227
|
+
webfont.UserAgentParser.prototype.parseOperaUserAgentString_ = function() {
|
228
|
+
var engineName = webfont.UserAgentParser.UNKNOWN;
|
229
|
+
var engineVersion = webfont.UserAgentParser.UNKNOWN;
|
230
|
+
var enginePair = this.getFirstMatchingGroup_(this.userAgent_,
|
231
|
+
/(Presto\/[\d\w\.]+)/);
|
232
|
+
|
233
|
+
if (enginePair != "") {
|
234
|
+
var splittedEnginePair = enginePair.split('/');
|
235
|
+
|
236
|
+
engineName = splittedEnginePair[0];
|
237
|
+
engineVersion = splittedEnginePair[1];
|
238
|
+
} else {
|
239
|
+
if (this.userAgent_.indexOf("Gecko") != -1) {
|
240
|
+
engineName = "Gecko";
|
241
|
+
}
|
242
|
+
var geckoVersion = this.getFirstMatchingGroup_(this.userAgent_, /rv:([^\)]+)/);
|
243
|
+
|
244
|
+
if (geckoVersion != "") {
|
245
|
+
engineVersion = geckoVersion;
|
246
|
+
}
|
247
|
+
}
|
248
|
+
if (this.userAgent_.indexOf("Version/") != -1) {
|
249
|
+
var version = this.getFirstMatchingGroup_(this.userAgent_, /Version\/([\d\.]+)/);
|
250
|
+
|
251
|
+
if (version != "") {
|
252
|
+
return new webfont.UserAgent("Opera", version, engineName, engineVersion,
|
253
|
+
this.getPlatform_(), this.getMajorVersion_(version) >= 10);
|
254
|
+
}
|
255
|
+
}
|
256
|
+
var version = this.getFirstMatchingGroup_(this.userAgent_, /Opera[\/ ]([\d\.]+)/);
|
257
|
+
|
258
|
+
if (version != "") {
|
259
|
+
return new webfont.UserAgent("Opera", version, engineName, engineVersion,
|
260
|
+
this.getPlatform_(), this.getMajorVersion_(version) >= 10);
|
261
|
+
}
|
262
|
+
return new webfont.UserAgent("Opera", webfont.UserAgentParser.UNKNOWN,
|
263
|
+
engineName, engineVersion, this.getPlatform_(), false);
|
264
|
+
};
|
265
|
+
|
266
|
+
webfont.UserAgentParser.prototype.isWebKit_ = function() {
|
267
|
+
return this.userAgent_.indexOf("AppleWebKit") != -1;
|
268
|
+
};
|
269
|
+
|
270
|
+
webfont.UserAgentParser.prototype.parseWebKitUserAgentString_ = function() {
|
271
|
+
var platform = this.getPlatform_();
|
272
|
+
var webKitVersion = this.getFirstMatchingGroup_(this.userAgent_,
|
273
|
+
/AppleWebKit\/([\d\.\+]+)/);
|
274
|
+
|
275
|
+
if (webKitVersion == "") {
|
276
|
+
webKitVersion = webfont.UserAgentParser.UNKNOWN;
|
277
|
+
}
|
278
|
+
var name = webfont.UserAgentParser.UNKNOWN;
|
279
|
+
|
280
|
+
if (this.userAgent_.indexOf("Chrome") != -1) {
|
281
|
+
name = "Chrome";
|
282
|
+
} else if (this.userAgent_.indexOf("Safari") != -1) {
|
283
|
+
name = "Safari";
|
284
|
+
}
|
285
|
+
var version = webfont.UserAgentParser.UNKNOWN;
|
286
|
+
|
287
|
+
if (this.userAgent_.indexOf("Version/") != -1) {
|
288
|
+
version = this.getFirstMatchingGroup_(this.userAgent_,
|
289
|
+
/Version\/([\d\.\w]+)/);
|
290
|
+
} else if (name == "Chrome") {
|
291
|
+
version = this.getFirstMatchingGroup_(this.userAgent_,
|
292
|
+
/Chrome\/([\d\.]+)/);
|
293
|
+
}
|
294
|
+
var minor = this.getFirstMatchingGroup_(webKitVersion, /\d+\.(\d+)/);
|
295
|
+
|
296
|
+
return new webfont.UserAgent(name, version, "AppleWebKit", webKitVersion,
|
297
|
+
platform, this.getMajorVersion_(webKitVersion) >= 526 ||
|
298
|
+
this.getMajorVersion_(webKitVersion) >= 525 && parseInt(minor) >= 13);
|
299
|
+
};
|
300
|
+
|
301
|
+
webfont.UserAgentParser.prototype.isGecko_ = function() {
|
302
|
+
return this.userAgent_.indexOf("Gecko") != -1;
|
303
|
+
};
|
304
|
+
|
305
|
+
webfont.UserAgentParser.prototype.parseGeckoUserAgentString_ = function() {
|
306
|
+
var name = webfont.UserAgentParser.UNKNOWN;
|
307
|
+
var version = webfont.UserAgentParser.UNKNOWN;
|
308
|
+
var supportWebFont = false;
|
309
|
+
|
310
|
+
if (this.userAgent_.indexOf("Firefox") != -1) {
|
311
|
+
name = "Firefox";
|
312
|
+
var versionNum = this.getFirstMatchingGroup_(this.userAgent_,
|
313
|
+
/Firefox\/([\d\w\.]+)/);
|
314
|
+
|
315
|
+
if (versionNum != "") {
|
316
|
+
var minor = this.getFirstMatchingGroup_(versionNum, /\d+\.(\d+)/);
|
317
|
+
|
318
|
+
version = versionNum;
|
319
|
+
supportWebFont = versionNum != "" && this.getMajorVersion_(versionNum) >= 3 &&
|
320
|
+
parseInt(minor) >= 5;
|
321
|
+
}
|
322
|
+
} else if (this.userAgent_.indexOf("Mozilla") != -1) {
|
323
|
+
name = "Mozilla";
|
324
|
+
}
|
325
|
+
var geckoVersion = this.getFirstMatchingGroup_(this.userAgent_, /rv:([^\)]+)/);
|
326
|
+
|
327
|
+
if (geckoVersion == "") {
|
328
|
+
geckoVersion = webfont.UserAgentParser.UNKNOWN;
|
329
|
+
} else {
|
330
|
+
if (!supportWebFont) {
|
331
|
+
var majorVersion = this.getMajorVersion_(geckoVersion);
|
332
|
+
var intMinorVersion = parseInt(this.getFirstMatchingGroup_(geckoVersion, /\d+\.(\d+)/));
|
333
|
+
var subVersion = parseInt(this.getFirstMatchingGroup_(geckoVersion, /\d+\.\d+\.(\d+)/));
|
334
|
+
|
335
|
+
supportWebFont = majorVersion > 1 ||
|
336
|
+
majorVersion == 1 && intMinorVersion > 9 ||
|
337
|
+
majorVersion == 1 && intMinorVersion == 9 && subVersion >= 2 ||
|
338
|
+
geckoVersion.match(/1\.9\.1b[123]/) != null ||
|
339
|
+
geckoVersion.match(/1\.9\.1\.[\d\.]+/) != null;
|
340
|
+
}
|
341
|
+
}
|
342
|
+
return new webfont.UserAgent(name, version, "Gecko", geckoVersion,
|
343
|
+
this.getPlatform_(), supportWebFont);
|
344
|
+
};
|
345
|
+
|
346
|
+
webfont.UserAgentParser.prototype.getMajorVersion_ = function(version) {
|
347
|
+
var majorVersion = this.getFirstMatchingGroup_(version, /(\d+)/);
|
348
|
+
|
349
|
+
if (majorVersion != "") {
|
350
|
+
return parseInt(majorVersion);
|
351
|
+
}
|
352
|
+
return -1;
|
353
|
+
};
|
354
|
+
|
355
|
+
webfont.UserAgentParser.prototype.getFirstMatchingGroup_ = function(str,
|
356
|
+
regexp) {
|
357
|
+
var groups = str.match(regexp);
|
358
|
+
|
359
|
+
if (groups && groups[1]) {
|
360
|
+
return groups[1];
|
361
|
+
}
|
362
|
+
return "";
|
363
|
+
};
|
364
|
+
|
365
|
+
webfont.EventDispatcher = function(domHelper, htmlElement, callbacks,
|
366
|
+
opt_namespace) {
|
367
|
+
this.domHelper_ = domHelper;
|
368
|
+
this.htmlElement_ = htmlElement;
|
369
|
+
this.callbacks_ = callbacks;
|
370
|
+
this.namespace_ = opt_namespace || webfont.EventDispatcher.DEFAULT_NAMESPACE;
|
371
|
+
this.cssClassName_ = new webfont.CssClassName('-');
|
372
|
+
};
|
373
|
+
|
374
|
+
webfont.EventDispatcher.DEFAULT_NAMESPACE = 'wf';
|
375
|
+
webfont.EventDispatcher.LOADING = 'loading';
|
376
|
+
webfont.EventDispatcher.ACTIVE = 'active';
|
377
|
+
webfont.EventDispatcher.INACTIVE = 'inactive';
|
378
|
+
webfont.EventDispatcher.FONT = 'font';
|
379
|
+
|
380
|
+
webfont.EventDispatcher.prototype.dispatchLoading = function() {
|
381
|
+
this.domHelper_.appendClassName(this.htmlElement_,
|
382
|
+
this.cssClassName_.build(
|
383
|
+
this.namespace_, webfont.EventDispatcher.LOADING));
|
384
|
+
this.dispatch_(webfont.EventDispatcher.LOADING);
|
385
|
+
};
|
386
|
+
|
387
|
+
webfont.EventDispatcher.prototype.dispatchFontLoading = function(fontFamily, fontDescription) {
|
388
|
+
this.domHelper_.appendClassName(this.htmlElement_,
|
389
|
+
this.cssClassName_.build(
|
390
|
+
this.namespace_, fontFamily, fontDescription, webfont.EventDispatcher.LOADING));
|
391
|
+
this.dispatch_(
|
392
|
+
webfont.EventDispatcher.FONT + webfont.EventDispatcher.LOADING, fontFamily, fontDescription);
|
393
|
+
};
|
394
|
+
|
395
|
+
webfont.EventDispatcher.prototype.dispatchFontActive = function(fontFamily, fontDescription) {
|
396
|
+
this.domHelper_.removeClassName(this.htmlElement_,
|
397
|
+
this.cssClassName_.build(
|
398
|
+
this.namespace_, fontFamily, fontDescription, webfont.EventDispatcher.LOADING));
|
399
|
+
this.domHelper_.appendClassName(this.htmlElement_,
|
400
|
+
this.cssClassName_.build(
|
401
|
+
this.namespace_, fontFamily, fontDescription, webfont.EventDispatcher.ACTIVE));
|
402
|
+
this.dispatch_(
|
403
|
+
webfont.EventDispatcher.FONT + webfont.EventDispatcher.ACTIVE, fontFamily, fontDescription);
|
404
|
+
};
|
405
|
+
|
406
|
+
webfont.EventDispatcher.prototype.dispatchFontInactive = function(fontFamily, fontDescription) {
|
407
|
+
this.domHelper_.removeClassName(this.htmlElement_,
|
408
|
+
this.cssClassName_.build(
|
409
|
+
this.namespace_, fontFamily, fontDescription, webfont.EventDispatcher.LOADING));
|
410
|
+
this.domHelper_.appendClassName(this.htmlElement_,
|
411
|
+
this.cssClassName_.build(
|
412
|
+
this.namespace_, fontFamily, fontDescription, webfont.EventDispatcher.INACTIVE));
|
413
|
+
this.dispatch_(
|
414
|
+
webfont.EventDispatcher.FONT + webfont.EventDispatcher.INACTIVE, fontFamily, fontDescription);
|
415
|
+
};
|
416
|
+
|
417
|
+
webfont.EventDispatcher.prototype.dispatchInactive = function() {
|
418
|
+
this.domHelper_.appendClassName(this.htmlElement_,
|
419
|
+
this.cssClassName_.build(
|
420
|
+
this.namespace_, webfont.EventDispatcher.INACTIVE));
|
421
|
+
this.dispatch_(webfont.EventDispatcher.INACTIVE);
|
422
|
+
};
|
423
|
+
|
424
|
+
webfont.EventDispatcher.prototype.dispatchActive = function() {
|
425
|
+
// what about inactive? maybe if all fonts failed to load?
|
426
|
+
this.domHelper_.removeClassName(this.htmlElement_,
|
427
|
+
this.cssClassName_.build(
|
428
|
+
this.namespace_, webfont.EventDispatcher.LOADING));
|
429
|
+
this.domHelper_.appendClassName(this.htmlElement_,
|
430
|
+
this.cssClassName_.build(
|
431
|
+
this.namespace_, webfont.EventDispatcher.ACTIVE));
|
432
|
+
this.dispatch_(webfont.EventDispatcher.ACTIVE);
|
433
|
+
};
|
434
|
+
|
435
|
+
webfont.EventDispatcher.prototype.dispatch_ = function(event, opt_arg1, opt_arg2) {
|
436
|
+
if (this.callbacks_[event]) {
|
437
|
+
this.callbacks_[event](opt_arg1, opt_arg2);
|
438
|
+
}
|
439
|
+
};
|
440
|
+
|
441
|
+
webfont.FontModuleLoader = function() {
|
442
|
+
this.modules_ = {};
|
443
|
+
};
|
444
|
+
|
445
|
+
webfont.FontModuleLoader.prototype.addModuleFactory = function(name, factory) {
|
446
|
+
this.modules_[name] = factory;
|
447
|
+
};
|
448
|
+
|
449
|
+
webfont.FontModuleLoader.prototype.getModules = function(configuration) {
|
450
|
+
var modules = [];
|
451
|
+
|
452
|
+
for (var key in configuration) {
|
453
|
+
if (configuration.hasOwnProperty(key)) {
|
454
|
+
var moduleFactory = this.modules_[key];
|
455
|
+
|
456
|
+
if (moduleFactory) {
|
457
|
+
modules.push(moduleFactory(configuration[key]));
|
458
|
+
}
|
459
|
+
}
|
460
|
+
}
|
461
|
+
return modules;
|
462
|
+
};
|
463
|
+
|
464
|
+
webfont.FontWatcher = function(domHelper, eventDispatcher, fontSizer,
|
465
|
+
asyncCall, getTime) {
|
466
|
+
this.domHelper_ = domHelper;
|
467
|
+
this.eventDispatcher_ = eventDispatcher;
|
468
|
+
this.fontSizer_ = fontSizer;
|
469
|
+
this.asyncCall_ = asyncCall;
|
470
|
+
this.getTime_ = getTime;
|
471
|
+
this.currentlyWatched_ = 0;
|
472
|
+
this.last_ = false;
|
473
|
+
this.success_ = false;
|
474
|
+
this.nameHelper_ = new webfont.CssFontFamilyName();
|
475
|
+
this.fvd_ = new webfont.FontVariationDescription();
|
476
|
+
};
|
477
|
+
|
478
|
+
webfont.FontWatcher.DEFAULT_FONT = 'DEFAULT_FONT';
|
479
|
+
webfont.FontWatcher.DEFAULT_VARIATION = 'n4';
|
480
|
+
|
481
|
+
webfont.FontWatcher.prototype.watch = function(fontFamilies, fontDescriptions, last) {
|
482
|
+
var length = fontFamilies.length;
|
483
|
+
|
484
|
+
for (var i = 0; i < length; i++) {
|
485
|
+
var fontFamily = fontFamilies[i];
|
486
|
+
if (!fontDescriptions[fontFamily]) {
|
487
|
+
fontDescriptions[fontFamily] = [webfont.FontWatcher.DEFAULT_VARIATION];
|
488
|
+
}
|
489
|
+
this.currentlyWatched_ += fontDescriptions[fontFamily].length;
|
490
|
+
}
|
491
|
+
|
492
|
+
if (last) {
|
493
|
+
this.last_ = last;
|
494
|
+
}
|
495
|
+
|
496
|
+
for (var i = 0; i < length; i++) {
|
497
|
+
var fontFamily = fontFamilies[i];
|
498
|
+
var descriptions = fontDescriptions[fontFamily];
|
499
|
+
|
500
|
+
for (var j = 0, len = descriptions.length; j < len; j++) {
|
501
|
+
var fontDescription = descriptions[j];
|
502
|
+
var originalSize = this.getDefaultFontSize_(fontDescription);
|
503
|
+
|
504
|
+
this.watch_(fontFamily, fontDescription, originalSize);
|
505
|
+
}
|
506
|
+
}
|
507
|
+
};
|
508
|
+
|
509
|
+
webfont.FontWatcher.prototype.watch_ = function(fontFamily, fontDescription, originalSize) {
|
510
|
+
this.eventDispatcher_.dispatchFontLoading(fontFamily, fontDescription);
|
511
|
+
var requestedFont = this.createHiddenElementWithFont_(fontFamily, fontDescription);
|
512
|
+
var size = this.fontSizer_.getWidth(requestedFont);
|
513
|
+
|
514
|
+
if (originalSize != size) {
|
515
|
+
this.domHelper_.removeElement(requestedFont);
|
516
|
+
this.eventDispatcher_.dispatchFontActive(fontFamily, fontDescription);
|
517
|
+
this.success_ = true;
|
518
|
+
this.decreaseCurrentlyWatched_();
|
519
|
+
} else {
|
520
|
+
this.asyncCheck_(this.getTime_(), originalSize, requestedFont,
|
521
|
+
fontFamily, fontDescription);
|
522
|
+
}
|
523
|
+
};
|
524
|
+
|
525
|
+
webfont.FontWatcher.prototype.decreaseCurrentlyWatched_ = function() {
|
526
|
+
if (--this.currentlyWatched_ == 0 && this.last_) {
|
527
|
+
if (this.success_) {
|
528
|
+
this.eventDispatcher_.dispatchActive();
|
529
|
+
} else {
|
530
|
+
this.eventDispatcher_.dispatchInactive();
|
531
|
+
}
|
532
|
+
}
|
533
|
+
};
|
534
|
+
|
535
|
+
webfont.FontWatcher.prototype.check_ = function(started, originalSize,
|
536
|
+
requestedFont, fontFamily, fontDescription) {
|
537
|
+
var size = this.fontSizer_.getWidth(requestedFont);
|
538
|
+
|
539
|
+
if (originalSize != size) {
|
540
|
+
this.domHelper_.removeElement(requestedFont);
|
541
|
+
this.eventDispatcher_.dispatchFontActive(fontFamily, fontDescription);
|
542
|
+
this.success_ = true;
|
543
|
+
this.decreaseCurrentlyWatched_();
|
544
|
+
} else if ((this.getTime_() - started) < 5000) {
|
545
|
+
this.asyncCheck_(started, originalSize, requestedFont, fontFamily, fontDescription);
|
546
|
+
} else {
|
547
|
+
this.domHelper_.removeElement(requestedFont);
|
548
|
+
this.eventDispatcher_.dispatchFontInactive(fontFamily, fontDescription);
|
549
|
+
this.decreaseCurrentlyWatched_();
|
550
|
+
}
|
551
|
+
};
|
552
|
+
|
553
|
+
webfont.FontWatcher.prototype.asyncCheck_ = function(started, originalSize,
|
554
|
+
requestedFont, fontFamily, fontDescription) {
|
555
|
+
this.asyncCall_(function(context, func) {
|
556
|
+
return function() {
|
557
|
+
func.call(context, started, originalSize, requestedFont, fontFamily, fontDescription);
|
558
|
+
}
|
559
|
+
}(this, this.check_), 50);
|
560
|
+
};
|
561
|
+
|
562
|
+
webfont.FontWatcher.prototype.getDefaultFontSize_ = function(fontDescription) {
|
563
|
+
var defaultFont = this.createHiddenElementWithFont_(
|
564
|
+
webfont.FontWatcher.DEFAULT_FONT, fontDescription);
|
565
|
+
var size = this.fontSizer_.getWidth(defaultFont);
|
566
|
+
|
567
|
+
this.domHelper_.removeElement(defaultFont);
|
568
|
+
return size;
|
569
|
+
};
|
570
|
+
|
571
|
+
webfont.FontWatcher.prototype.createHiddenElementWithFont_ = function(
|
572
|
+
fontFamily, fontDescription) {
|
573
|
+
var quotedName = this.nameHelper_.quote(fontFamily);
|
574
|
+
var variationCss = this.fvd_.expand(fontDescription);
|
575
|
+
var styleString = "position:absolute;top:-999px;font-size:300px;font-family:" +
|
576
|
+
quotedName + "," + webfont.FontWatcher.DEFAULT_FONT + ";" +
|
577
|
+
variationCss;
|
578
|
+
|
579
|
+
var span = this.domHelper_.createElement('span', {
|
580
|
+
// IE must have a fallback font option, else sometimes the loaded font
|
581
|
+
// won't be detected - typically in the fully cached case.
|
582
|
+
'style': styleString }, 'Mm');
|
583
|
+
|
584
|
+
this.domHelper_.insertInto('html', span);
|
585
|
+
return span;
|
586
|
+
};
|
587
|
+
|
588
|
+
webfont.WebFont = function(domHelper, fontModuleLoader, htmlElement, asyncCall,
|
589
|
+
userAgent) {
|
590
|
+
this.domHelper_ = domHelper;
|
591
|
+
this.fontModuleLoader_ = fontModuleLoader;
|
592
|
+
this.htmlElement_ = htmlElement;
|
593
|
+
this.asyncCall_ = asyncCall;
|
594
|
+
this.userAgent_ = userAgent;
|
595
|
+
this.moduleLoading_ = 0;
|
596
|
+
this.moduleFailedLoading_ = 0;
|
597
|
+
};
|
598
|
+
|
599
|
+
webfont.WebFont.prototype.addModule = function(name, factory) {
|
600
|
+
this.fontModuleLoader_.addModuleFactory(name, factory);
|
601
|
+
};
|
602
|
+
|
603
|
+
webfont.WebFont.prototype.load = function(configuration) {
|
604
|
+
var eventDispatcher = new webfont.EventDispatcher(
|
605
|
+
this.domHelper_, this.htmlElement_, configuration);
|
606
|
+
|
607
|
+
if (this.userAgent_.isSupportingWebFont()) {
|
608
|
+
this.load_(eventDispatcher, configuration);
|
609
|
+
} else {
|
610
|
+
eventDispatcher.dispatchInactive();
|
611
|
+
}
|
612
|
+
};
|
613
|
+
|
614
|
+
webfont.WebFont.prototype.isModuleSupportingUserAgent_ = function(module, eventDispatcher,
|
615
|
+
fontWatcher, support) {
|
616
|
+
if (!support) {
|
617
|
+
var allModulesLoaded = --this.moduleLoading_ == 0;
|
618
|
+
|
619
|
+
this.moduleFailedLoading_--;
|
620
|
+
if (allModulesLoaded) {
|
621
|
+
if (this.moduleFailedLoading_ == 0) {
|
622
|
+
eventDispatcher.dispatchInactive();
|
623
|
+
} else {
|
624
|
+
eventDispatcher.dispatchLoading();
|
625
|
+
}
|
626
|
+
}
|
627
|
+
fontWatcher.watch([], {}, allModulesLoaded);
|
628
|
+
return;
|
629
|
+
}
|
630
|
+
module.load(webfont.bind(this, this.onModuleReady_, eventDispatcher,
|
631
|
+
fontWatcher));
|
632
|
+
};
|
633
|
+
|
634
|
+
webfont.WebFont.prototype.onModuleReady_ = function(eventDispatcher, fontWatcher,
|
635
|
+
fontFamilies, opt_fontDescriptions) {
|
636
|
+
var allModulesLoaded = --this.moduleLoading_ == 0;
|
637
|
+
|
638
|
+
if (allModulesLoaded) {
|
639
|
+
eventDispatcher.dispatchLoading();
|
640
|
+
}
|
641
|
+
this.asyncCall_(webfont.bind(this, function(_fontWatcher, _fontFamilies,
|
642
|
+
_fontDescriptions, _allModulesLoaded) {
|
643
|
+
_fontWatcher.watch(_fontFamilies, _fontDescriptions || {}, _allModulesLoaded);
|
644
|
+
}, fontWatcher, fontFamilies, opt_fontDescriptions, allModulesLoaded));
|
645
|
+
};
|
646
|
+
|
647
|
+
webfont.WebFont.prototype.load_ = function(eventDispatcher, configuration) {
|
648
|
+
var modules = this.fontModuleLoader_.getModules(configuration),
|
649
|
+
self = this;
|
650
|
+
|
651
|
+
this.moduleFailedLoading_ = this.moduleLoading_ = modules.length;
|
652
|
+
|
653
|
+
var fontWatcher = new webfont.FontWatcher(this.domHelper_,
|
654
|
+
eventDispatcher, {
|
655
|
+
getWidth: function(elem) {
|
656
|
+
return elem.offsetWidth;
|
657
|
+
}}, self.asyncCall_, function() {
|
658
|
+
return +new Date();
|
659
|
+
});
|
660
|
+
|
661
|
+
for (var i = 0, len = modules.length; i < len; i++) {
|
662
|
+
var module = modules[i];
|
663
|
+
|
664
|
+
module.supportUserAgent(this.userAgent_,
|
665
|
+
webfont.bind(this, this.isModuleSupportingUserAgent_, module,
|
666
|
+
eventDispatcher, fontWatcher));
|
667
|
+
}
|
668
|
+
};
|
669
|
+
|
670
|
+
webfont.CssClassName = function(opt_joinChar) {
|
671
|
+
this.joinChar_ = opt_joinChar || webfont.CssClassName.DEFAULT_JOIN_CHAR;
|
672
|
+
};
|
673
|
+
|
674
|
+
webfont.CssClassName.DEFAULT_JOIN_CHAR = '-';
|
675
|
+
|
676
|
+
webfont.CssClassName.prototype.sanitize = function(name) {
|
677
|
+
return name.replace(/[\W_]+/g, '').toLowerCase();
|
678
|
+
};
|
679
|
+
|
680
|
+
webfont.CssClassName.prototype.build = function(__args__) {
|
681
|
+
var parts = []
|
682
|
+
for (var i = 0; i < arguments.length; i++) {
|
683
|
+
parts.push(this.sanitize(arguments[i]));
|
684
|
+
}
|
685
|
+
return parts.join(this.joinChar_);
|
686
|
+
};
|
687
|
+
|
688
|
+
|
689
|
+
webfont.CssFontFamilyName = function() {
|
690
|
+
this.quote_ = '"';
|
691
|
+
};
|
692
|
+
|
693
|
+
webfont.CssFontFamilyName.prototype.quote = function(name) {
|
694
|
+
var quoted = [];
|
695
|
+
var split = name.split(/,\s*/);
|
696
|
+
for (var i = 0; i < split.length; i++) {
|
697
|
+
var part = split[i].replace(/['"]/g, '');
|
698
|
+
if (part.indexOf(' ') == -1) {
|
699
|
+
quoted.push(part);
|
700
|
+
} else {
|
701
|
+
quoted.push(this.quote_ + part + this.quote_);
|
702
|
+
}
|
703
|
+
}
|
704
|
+
return quoted.join(',');
|
705
|
+
};
|
706
|
+
|
707
|
+
webfont.FontVariationDescription = function() {
|
708
|
+
this.properties_ = webfont.FontVariationDescription.PROPERTIES;
|
709
|
+
this.values_ = webfont.FontVariationDescription.VALUES;
|
710
|
+
};
|
711
|
+
|
712
|
+
webfont.FontVariationDescription.PROPERTIES = [
|
713
|
+
'font-style',
|
714
|
+
'font-weight'
|
715
|
+
];
|
716
|
+
|
717
|
+
webfont.FontVariationDescription.VALUES = {
|
718
|
+
'font-style': [
|
719
|
+
['n', 'normal'],
|
720
|
+
['i', 'italic'],
|
721
|
+
['o', 'oblique']
|
722
|
+
],
|
723
|
+
'font-weight': [
|
724
|
+
['1', '100'],
|
725
|
+
['2', '200'],
|
726
|
+
['3', '300'],
|
727
|
+
['4', '400'],
|
728
|
+
['5', '500'],
|
729
|
+
['6', '600'],
|
730
|
+
['7', '700'],
|
731
|
+
['8', '800'],
|
732
|
+
['9', '900'],
|
733
|
+
['4', 'normal'],
|
734
|
+
['7', 'bold']
|
735
|
+
]
|
736
|
+
};
|
737
|
+
|
738
|
+
webfont.FontVariationDescription.Item = function(index, property, values) {
|
739
|
+
this.index_ = index;
|
740
|
+
this.property_ = property;
|
741
|
+
this.values_ = values;
|
742
|
+
}
|
743
|
+
|
744
|
+
webfont.FontVariationDescription.Item.prototype.compact = function(output, value) {
|
745
|
+
for (var i = 0; i < this.values_.length; i++) {
|
746
|
+
if (value == this.values_[i][1]) {
|
747
|
+
output[this.index_] = this.values_[i][0];
|
748
|
+
return;
|
749
|
+
}
|
750
|
+
}
|
751
|
+
}
|
752
|
+
|
753
|
+
webfont.FontVariationDescription.Item.prototype.expand = function(output, value) {
|
754
|
+
for (var i = 0; i < this.values_.length; i++) {
|
755
|
+
if (value == this.values_[i][0]) {
|
756
|
+
output[this.index_] = this.property_ + ':' + this.values_[i][1];
|
757
|
+
return;
|
758
|
+
}
|
759
|
+
}
|
760
|
+
}
|
761
|
+
|
762
|
+
webfont.FontVariationDescription.prototype.compact = function(input) {
|
763
|
+
var result = ['n', '4'];
|
764
|
+
var descriptors = input.split(';');
|
765
|
+
|
766
|
+
for (var i = 0, len = descriptors.length; i < len; i++) {
|
767
|
+
var pair = descriptors[i].replace(/\s+/g, '').split(':');
|
768
|
+
if (pair.length == 2) {
|
769
|
+
var property = pair[0];
|
770
|
+
var value = pair[1];
|
771
|
+
var item = this.getItem_(property);
|
772
|
+
if (item) {
|
773
|
+
item.compact(result, value);
|
774
|
+
}
|
775
|
+
}
|
776
|
+
}
|
777
|
+
|
778
|
+
return result.join('');
|
779
|
+
};
|
780
|
+
|
781
|
+
webfont.FontVariationDescription.prototype.expand = function(fvd) {
|
782
|
+
if (fvd.length != 2) {
|
783
|
+
return null;
|
784
|
+
}
|
785
|
+
|
786
|
+
var result = [null, null];
|
787
|
+
|
788
|
+
for (var i = 0, len = this.properties_.length; i < len; i++) {
|
789
|
+
var property = this.properties_[i];
|
790
|
+
var key = fvd.substr(i, 1);
|
791
|
+
var values = this.values_[property];
|
792
|
+
var item = new webfont.FontVariationDescription.Item(i, property, values);
|
793
|
+
item.expand(result, key);
|
794
|
+
}
|
795
|
+
|
796
|
+
if (result[0] && result[1]) {
|
797
|
+
return result.join(';') + ';';
|
798
|
+
} else {
|
799
|
+
return null;
|
800
|
+
}
|
801
|
+
}
|
802
|
+
|
803
|
+
webfont.FontVariationDescription.prototype.getItem_ = function(property) {
|
804
|
+
for (var i = 0; i < this.properties_.length; i++) {
|
805
|
+
if (property == this.properties_[i]) {
|
806
|
+
var values = this.values_[property];
|
807
|
+
return new webfont.FontVariationDescription.Item(i, property, values);
|
808
|
+
}
|
809
|
+
}
|
810
|
+
|
811
|
+
return null;
|
812
|
+
};
|
813
|
+
|
814
|
+
// Name of the global object.
|
815
|
+
var globalName = 'WebFont';
|
816
|
+
|
817
|
+
// Provide an instance of WebFont in the global namespace.
|
818
|
+
window[globalName] = (function() {
|
819
|
+
var domHelper = new webfont.DomHelper(document);
|
820
|
+
var userAgentParser = new webfont.UserAgentParser(navigator.userAgent);
|
821
|
+
var userAgent = userAgentParser.parse();
|
822
|
+
var asyncCall = function(func, timeout) { setTimeout(func, timeout); };
|
823
|
+
|
824
|
+
return new webfont.WebFont(domHelper, new webfont.FontModuleLoader(),
|
825
|
+
document.documentElement, asyncCall, userAgent);
|
826
|
+
})();
|
827
|
+
|
828
|
+
// Export the public API.
|
829
|
+
window[globalName]['load'] = window[globalName].load;
|
830
|
+
window[globalName]['addModule'] = window[globalName].addModule;
|
831
|
+
|
832
|
+
webfont.FontApiUrlBuilder = function(apiUrl) {
|
833
|
+
this.apiUrl_ = apiUrl || webfont.FontApiUrlBuilder.DEFAULT_API_URL;
|
834
|
+
this.fontFamilies_ = null;
|
835
|
+
};
|
836
|
+
|
837
|
+
webfont.FontApiUrlBuilder.DEFAULT_API_URL = '//fonts.googleapis.com/css';
|
838
|
+
|
839
|
+
webfont.FontApiUrlBuilder.prototype.setFontFamilies = function(fontFamilies) {
|
840
|
+
// maybe clone?
|
841
|
+
this.fontFamilies_ = fontFamilies;
|
842
|
+
};
|
843
|
+
|
844
|
+
webfont.FontApiUrlBuilder.prototype.webSafe = function(string) {
|
845
|
+
return string.replace(/ /g, '+');
|
846
|
+
};
|
847
|
+
|
848
|
+
webfont.FontApiUrlBuilder.prototype.build = function() {
|
849
|
+
if (!this.fontFamilies_) {
|
850
|
+
throw new Error('No fonts to load !');
|
851
|
+
}
|
852
|
+
var length = this.fontFamilies_.length;
|
853
|
+
var sb = [];
|
854
|
+
|
855
|
+
for (var i = 0; i < length; i++) {
|
856
|
+
sb.push(this.webSafe(this.fontFamilies_[i]));
|
857
|
+
}
|
858
|
+
var url = this.apiUrl_ + '?family=' + sb.join('%7C'); // '|' escaped.
|
859
|
+
|
860
|
+
return url;
|
861
|
+
};
|
862
|
+
|
863
|
+
webfont.FontApiParser = function(fontFamilies) {
|
864
|
+
this.fontFamilies_ = fontFamilies;
|
865
|
+
this.parsedFontFamilies_ = [];
|
866
|
+
this.variations_ = {};
|
867
|
+
this.fvd_ = new webfont.FontVariationDescription();
|
868
|
+
};
|
869
|
+
|
870
|
+
webfont.FontApiParser.VARIATIONS = {
|
871
|
+
'ultralight': 'n2',
|
872
|
+
'light': 'n3',
|
873
|
+
'regular': 'i4',
|
874
|
+
'bold': 'i7',
|
875
|
+
'italic': 'i4',
|
876
|
+
'bolditalic': 'i7',
|
877
|
+
'ul': 'n2',
|
878
|
+
'l': 'n3',
|
879
|
+
'r': 'n4',
|
880
|
+
'b': 'n7',
|
881
|
+
'i': 'i4',
|
882
|
+
'bi': 'i7'
|
883
|
+
};
|
884
|
+
|
885
|
+
webfont.FontApiParser.prototype.parse = function() {
|
886
|
+
var length = this.fontFamilies_.length;
|
887
|
+
|
888
|
+
for (var i = 0; i < length; i++) {
|
889
|
+
var pair = this.fontFamilies_[i].split(":");
|
890
|
+
var fontFamily = pair[0];
|
891
|
+
var variations = null;
|
892
|
+
|
893
|
+
if (pair.length == 2) {
|
894
|
+
var fvds = this.parseVariations_(pair[1]);
|
895
|
+
|
896
|
+
if (fvds.length > 0) {
|
897
|
+
variations = fvds;
|
898
|
+
}
|
899
|
+
} else {
|
900
|
+
variations = ['n4'];
|
901
|
+
}
|
902
|
+
this.parsedFontFamilies_.push(fontFamily);
|
903
|
+
this.variations_[fontFamily] = variations;
|
904
|
+
}
|
905
|
+
};
|
906
|
+
|
907
|
+
webfont.FontApiParser.prototype.generateFontVariationDescription_ = function(variation) {
|
908
|
+
if (!variation.match(/^[\w ]+$/)) {
|
909
|
+
return '';
|
910
|
+
}
|
911
|
+
|
912
|
+
var fvd = webfont.FontApiParser.VARIATIONS[variation];
|
913
|
+
|
914
|
+
if (fvd) {
|
915
|
+
return fvd;
|
916
|
+
} else {
|
917
|
+
var groups = variation.match(/^(\d*)(\w*)$/);
|
918
|
+
var numericMatch = groups[1];
|
919
|
+
var styleMatch = groups[2];
|
920
|
+
var s = styleMatch ? styleMatch : 'n';
|
921
|
+
var w = numericMatch ? numericMatch.substr(0, 1) : '4';
|
922
|
+
var css = this.fvd_.expand([s, w].join(''));
|
923
|
+
if (css) {
|
924
|
+
return this.fvd_.compact(css);
|
925
|
+
} else {
|
926
|
+
return null;
|
927
|
+
}
|
928
|
+
}
|
929
|
+
};
|
930
|
+
|
931
|
+
webfont.FontApiParser.prototype.parseVariations_ = function(variations) {
|
932
|
+
var finalVariations = [];
|
933
|
+
var providedVariations = variations.split(",");
|
934
|
+
var length = providedVariations.length;
|
935
|
+
|
936
|
+
for (var i = 0; i < length; i++) {
|
937
|
+
var variation = providedVariations[i];
|
938
|
+
var fvd = this.generateFontVariationDescription_(variation);
|
939
|
+
|
940
|
+
if (fvd) {
|
941
|
+
finalVariations.push(fvd);
|
942
|
+
}
|
943
|
+
}
|
944
|
+
return finalVariations;
|
945
|
+
};
|
946
|
+
|
947
|
+
webfont.FontApiParser.prototype.getFontFamilies = function() {
|
948
|
+
return this.parsedFontFamilies_;
|
949
|
+
};
|
950
|
+
|
951
|
+
webfont.FontApiParser.prototype.getVariations = function() {
|
952
|
+
return this.variations_;
|
953
|
+
};
|
954
|
+
|
955
|
+
webfont.GoogleFontApi = function(userAgent, domHelper, configuration) {
|
956
|
+
this.userAgent_ = userAgent;
|
957
|
+
this.domHelper_ = domHelper;
|
958
|
+
this.configuration_ = configuration;
|
959
|
+
};
|
960
|
+
|
961
|
+
webfont.GoogleFontApi.NAME = 'google';
|
962
|
+
|
963
|
+
webfont.GoogleFontApi.prototype.supportUserAgent = function(userAgent, support) {
|
964
|
+
if (userAgent.getPlatform().match(/iPad|iPod|iPhone/) != null) {
|
965
|
+
support(false);
|
966
|
+
}
|
967
|
+
return support(userAgent.isSupportingWebFont());
|
968
|
+
};
|
969
|
+
|
970
|
+
webfont.GoogleFontApi.prototype.load = function(onReady) {
|
971
|
+
var fontApiUrlBuilder = new webfont.FontApiUrlBuilder(
|
972
|
+
this.configuration_['api']);
|
973
|
+
var fontFamilies = this.configuration_['families'];
|
974
|
+
var domHelper = this.domHelper_;
|
975
|
+
var nonBlockingIe = this.userAgent_.getName() == 'MSIE' &&
|
976
|
+
this.configuration_['blocking'] != true;
|
977
|
+
|
978
|
+
fontApiUrlBuilder.setFontFamilies(fontFamilies);
|
979
|
+
|
980
|
+
if (nonBlockingIe) {
|
981
|
+
domHelper.whenBodyExists(function() {
|
982
|
+
domHelper.insertInto('head', domHelper.createCssLink(
|
983
|
+
fontApiUrlBuilder.build()));
|
984
|
+
});
|
985
|
+
} else {
|
986
|
+
domHelper.insertInto('head', domHelper.createCssLink(
|
987
|
+
fontApiUrlBuilder.build()));
|
988
|
+
}
|
989
|
+
var fontApiParser = new webfont.FontApiParser(fontFamilies);
|
990
|
+
|
991
|
+
fontApiParser.parse();
|
992
|
+
onReady(fontApiParser.getFontFamilies(), fontApiParser.getVariations());
|
993
|
+
};
|
994
|
+
|
995
|
+
WebFont.addModule(webfont.GoogleFontApi.NAME, function(configuration) {
|
996
|
+
var userAgentParser = new webfont.UserAgentParser(navigator.userAgent);
|
997
|
+
var userAgent = userAgentParser.parse();
|
998
|
+
return new webfont.GoogleFontApi(userAgent,
|
999
|
+
new webfont.DomHelper(document), configuration);
|
1000
|
+
});
|
1001
|
+
|
1002
|
+
/**
|
1003
|
+
*
|
1004
|
+
* WebFont.load({
|
1005
|
+
* custom: {
|
1006
|
+
* families: ['Font1', 'Font2'],
|
1007
|
+
* urls: [ 'http://moo', 'http://meuh' ] }
|
1008
|
+
* });
|
1009
|
+
*/
|
1010
|
+
webfont.CustomCss = function(domHelper, configuration) {
|
1011
|
+
this.domHelper_ = domHelper;
|
1012
|
+
this.configuration_ = configuration;
|
1013
|
+
};
|
1014
|
+
|
1015
|
+
webfont.CustomCss.NAME = 'custom';
|
1016
|
+
|
1017
|
+
webfont.CustomCss.prototype.load = function(onReady) {
|
1018
|
+
var urls = this.configuration_['urls'] || [];
|
1019
|
+
var families = this.configuration_['families'] || [];
|
1020
|
+
|
1021
|
+
for (var i = 0, len = urls.length; i < len; i++) {
|
1022
|
+
var url = urls[i];
|
1023
|
+
|
1024
|
+
this.domHelper_.insertInto('head', this.domHelper_.createCssLink(url));
|
1025
|
+
}
|
1026
|
+
onReady(families);
|
1027
|
+
};
|
1028
|
+
|
1029
|
+
webfont.CustomCss.prototype.supportUserAgent = function(userAgent, support) {
|
1030
|
+
return support(userAgent.isSupportingWebFont());
|
1031
|
+
};
|
1032
|
+
|
1033
|
+
WebFont.addModule(webfont.CustomCss.NAME, function(configuration) {
|
1034
|
+
return new webfont.CustomCss(new webfont.DomHelper(document),
|
1035
|
+
configuration);
|
1036
|
+
});
|
1037
|
+
|
1038
|
+
webfont.TypekitScript = function(global, domHelper, configuration) {
|
1039
|
+
this.global_ = global;
|
1040
|
+
this.domHelper_ = domHelper;
|
1041
|
+
this.configuration_ = configuration;
|
1042
|
+
this.fontFamilies_ = [];
|
1043
|
+
this.fontVariations_ = {};
|
1044
|
+
};
|
1045
|
+
|
1046
|
+
webfont.TypekitScript.NAME = 'typekit';
|
1047
|
+
webfont.TypekitScript.HOOK = '__webfonttypekitmodule__';
|
1048
|
+
|
1049
|
+
webfont.TypekitScript.prototype.getScriptSrc = function(kitId) {
|
1050
|
+
var api = this.configuration_['api'] || 'http://use.typekit.com';
|
1051
|
+
return api + '/' + kitId + '.js';
|
1052
|
+
};
|
1053
|
+
|
1054
|
+
webfont.TypekitScript.prototype.supportUserAgent = function(userAgent, support) {
|
1055
|
+
var kitId = this.configuration_['id'];
|
1056
|
+
var configuration = this.configuration_;
|
1057
|
+
var self = this;
|
1058
|
+
|
1059
|
+
if (kitId) {
|
1060
|
+
// Provide data to Typekit for processing.
|
1061
|
+
if (!this.global_[webfont.TypekitScript.HOOK]) {
|
1062
|
+
this.global_[webfont.TypekitScript.HOOK] = {};
|
1063
|
+
}
|
1064
|
+
|
1065
|
+
// Typekit will call 'init' to indicate whether it supports fonts
|
1066
|
+
// and what fonts will be provided.
|
1067
|
+
this.global_[webfont.TypekitScript.HOOK][kitId] = function(callback) {
|
1068
|
+
var init = function(typekitSupports, fontFamilies, fontVariations) {
|
1069
|
+
self.fontFamilies_ = fontFamilies;
|
1070
|
+
self.fontVariations_ = fontVariations;
|
1071
|
+
support(typekitSupports);
|
1072
|
+
};
|
1073
|
+
callback(userAgent, configuration, init);
|
1074
|
+
};
|
1075
|
+
|
1076
|
+
// Load the Typekit script.
|
1077
|
+
var script = this.domHelper_.createScriptSrc(this.getScriptSrc(kitId))
|
1078
|
+
this.domHelper_.insertInto('head', script);
|
1079
|
+
|
1080
|
+
} else {
|
1081
|
+
support(true);
|
1082
|
+
}
|
1083
|
+
};
|
1084
|
+
|
1085
|
+
webfont.TypekitScript.prototype.load = function(onReady) {
|
1086
|
+
onReady(this.fontFamilies_, this.fontVariations_);
|
1087
|
+
};
|
1088
|
+
|
1089
|
+
WebFont.addModule(webfont.TypekitScript.NAME, function(configuration) {
|
1090
|
+
return new webfont.TypekitScript(window, new webfont.DomHelper(document), configuration);
|
1091
|
+
});
|
1092
|
+
|