123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- var fonts = require("../lib/settings/").fonts || [];
-
- var bySlug = {};
-
- fonts.forEach(function(font, i){
-
- var extension = "",
- split = font.file.split(".");
-
- // Use existing file extension if there is one
- if (split.length > 1){
- extension = "." + split.pop();
- }
-
- bySlug[font.slug = "custom-" + i + extension] = font;
-
- });
-
- // Send a stylesheet with custom fonts
- function sendCSS(req, res) {
- res.set("Content-Type", "text/css")
- .send(fonts.map(declaration).join("\n\n"));
- }
-
- // Send JS that forces all custom fonts to download upfront
- function sendJS(req, res) {
- res.set("Content-Type", "application/javascript")
- .send("(function(){\n\n" + fonts.map(shim).join("\n\n") + "\n\n})();");
- }
-
- // Send custom file by its slug
- function sendFont(req, res) {
-
- var font = bySlug[req.params.font];
-
- if (font && font.file) {
- return res.sendFile(font.file);
- }
-
- res.status(404).send("Cannot GET " + req.baseUrl);
-
- }
-
- function declaration(font, i) {
- return [
- "@font-face {",
- " font-family: '" + font.family + "';",
- " src: url('/fonts/" + font.slug + "');",
- font.weight ? " font-weight: " + font.weight + ";" : "",
- font.style ? " font-style: " + font.style + ";" : "",
- "}"
- ].filter(function(d){ return d; }).join("\n");
- }
-
- function shim(font, i) {
- return [
- " var font" + i + " = document.createElement(\"div\");",
- " font" + i + ".innerHTML = '.';",
- " font" + i + ".style.fontFamily = \"" + font.family + "\";",
- font.weight ? " font" + i + ".style.fontWeight = \"" + font.weight + "\";" : "",
- font.style ? " font" + i + ".style.fontStyle = \"" + font.style + "\";" : "",
- " document.body.appendChild(font" + i + ");",
- " setTimeout(function(){ font" + i + ".remove(); }, 0);"
- ].filter(function(d){ return d; }).join("\n");
- }
-
- module.exports = {
- css: sendCSS,
- js: sendJS,
- font: sendFont
- };
|