This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
76 lines
2.4 KiB
var Class = require('../../core/class'); |
|
var Base = require('./base'); |
|
var Modulizer = require('./modulizer'); |
|
var fonts = {}, fontsInUse = null; |
|
|
|
var artVar = Base.prototype.artVar, artFont = artVar.property('Font'); |
|
|
|
var parseFontString = function(font){ |
|
var regexp = /^\s*((?:(?:normal|bold|italic)\s+)*)(?:(\d+(?:\.\d+)?)[ptexm\%]*(?:\s*\/.*?)?\s+)?\s*\"?([^\"]*)/i, |
|
match = regexp.exec(font); |
|
return { |
|
fontFamily: match[3], |
|
fontSize: match[2], |
|
fontStyle: (/italic/.exec(match[1]) || ''), |
|
fontWeight: (/bold/.exec(match[1]) || '') |
|
}; |
|
}; |
|
|
|
var Font = Class(Base, { |
|
|
|
base_initialize: Base.prototype.initialize, |
|
|
|
initialize: function(text, font, alignment){ |
|
this.base_initialize(); |
|
if (text != null && font != null) this.draw(text, font, alignment); |
|
}, |
|
|
|
draw: function(text, fontArg, alignment){ |
|
var font = (typeof fontArg == 'string') ? parseFontString(fontArg) : fontArg; |
|
if (font){ |
|
var family = font.fontFamily || font['font-family'], |
|
weight = font.fontWeight || font['font-weight'] || 'normal', |
|
style = font.fontStyle || font['font-style'] || 'normal', |
|
size = parseFloat(font.fontSize || font['font-size'] || font.size); |
|
|
|
this.font = font.glyphs ? null : weight + style + family; |
|
} |
|
this.args = Array.prototype.slice.call(arguments); |
|
return this; |
|
}, |
|
|
|
base_toExpression: Base.prototype.toExpression, |
|
|
|
toExpression: function(expr){ |
|
if (this.font && fontsInUse) fontsInUse[this.font] = fonts[this.font]; |
|
if (!expr) expr = this.args ? artFont.construct.apply(artFont, this.args) : artFont.construct(); |
|
return this.base_toExpression(expr); |
|
} |
|
|
|
}); |
|
|
|
Font.register = function(font){ |
|
var face = font.face, |
|
family = face['font-family'], |
|
weight = (face['font-weight'] > 500 ? 'bold' : 'normal'), |
|
style = (face['font-stretch'] == 'oblique' || face['font-style'] == 'oblique' || face['font-style'] == 'italic' ? 'italic' : 'normal'); |
|
fonts[weight + style + family] = font; |
|
return this; |
|
}; |
|
|
|
var _toModuleStatements = Modulizer._toModuleStatements; |
|
|
|
Modulizer._toModuleStatements = function(){ |
|
fontsInUse = {}; |
|
var statements = _toModuleStatements.call(this); |
|
for (var font in fontsInUse){ |
|
var registerStatement = artFont.property('register').call(fontsInUse[font]); |
|
statements.push(registerStatement); |
|
} |
|
statements.push(statements[1]); |
|
statements.splice(1, 1); |
|
fontsInUse = null; |
|
return statements; |
|
}; |
|
|
|
module.exports = Font; |