tpa-style-webpack-plugin
Version:
A Webpack plugin that handles wix tpa styles, it separates static css file that injects dynamic style at runtime.
108 lines • 4.46 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { forEach, isNumber, reduceObj } from './utils';
import parseCssFont from 'parse-css-font';
export var wixStylesFontUtils = {
getFullFontStyles: function (_a) {
var fontStyles = _a.fontStyles, siteTextPresets = _a.siteTextPresets;
var ret = {};
var parsedFontStyles = reduceObj(fontStyles, function (acc, _a) {
var key = _a.key, value = _a.value;
// Fix color styles due to '.' to '-' conversion
acc[key.replace(/\./g, '-')] = parseWixStylesFont(value);
return acc;
});
var parsedSiteTextPresets = reduceObj(siteTextPresets, function (acc, _a) {
var key = _a.key, preset = _a.value;
var presetValue = cleanWixFontValue(preset.value);
var parsedCssFont;
try {
parsedCssFont = parseCssFont(presetValue);
}
catch (e) {
parsedCssFont = parseCssFont(presetValue + ' ;');
}
acc[key] = __assign(__assign(__assign({}, parsedCssFont), { preset: key, editorKey: preset.editorKey }), (preset.displayName ? { displayName: preset.displayName } : {}));
return acc;
});
// Basic template colors
forEach(parsedSiteTextPresets, function (preset, key) { return (ret[key] = parsedFontStyles[key] || preset); });
// LIGHT/MEDIUM/STRONG
ret.LIGHT = parseCssFont('12px HelveticaNeueW01-45Ligh');
ret.MEDIUM = parseCssFont('12px HelveticaNeueW01-55Roma');
ret.STRONG = parseCssFont('12px HelveticaNeueW01-65Medi');
ret = __assign(__assign({}, ret), parsedFontStyles);
forEach(ret, function (font, key) {
ret[key] = __assign(__assign({}, font), { supports: { uppercase: true } });
if (['snellroundhandw', 'niconne'].some(function (fontName) { return font.family.indexOf(fontName) > -1; })) {
ret[key].supports.uppercase = false;
}
if (ret[key].lineHeight === 'normal') {
ret[key].lineHeight = '1.4em'; // Wix's normal line height is 1.4em...
}
if (ret[key].size === 'normal') {
ret[key].size = '17px';
}
});
return ret;
},
toFontCssValue: function (value) {
var size = isNumber(value.size) ? value.size + 'px' : value.size;
var lineHeight = isNumber(value.lineHeight) ? value.lineHeight + 'px' : value.lineHeight;
var family = value.family.map(function (val) { return (val.indexOf(' ') > -1 ? JSON.stringify(val) : val); }).join(',');
return value.style + " " + value.variant + " " + value.weight + " " + size + "/" + lineHeight + " " + family;
},
isStringHack: function (fontParam) {
return fontParam.fontStyleParam === false;
},
isValidFontParam: function (fontParam) {
return fontParam.family !== undefined;
},
};
function cleanWixFontValue(value) {
return value.replace(/^font\s*:\s*/, '').replace(/\s;$/, '');
}
function parseWixStylesFont(font) {
var parsedValue;
try {
parsedValue = parseCssFont(cleanWixFontValue(font.value || ''));
}
catch (e) {
parsedValue = {
family: [],
};
}
var value = '';
if (font.style.italic) {
value += 'italic ';
}
if (font.style.bold) {
value += 'bold ';
}
var size = font.size || 'normal';
if (isNumber(size)) {
size = size + "px";
}
var lineHeight = font.lineHeight || parsedValue.lineHeight || 'normal';
if (isNumber(lineHeight)) {
lineHeight = lineHeight + "px";
}
value += size + "/" + lineHeight + " ";
value += font.cssFontFamily || font.family || 'NONE_EXISTS_FONT';
var fontObj = __assign({}, parseCssFont(value));
if (parsedValue.family && parsedValue.family.length >= fontObj.family.length) {
fontObj.family = parsedValue.family;
}
fontObj.underline = font.style && font.style.underline;
return fontObj;
}
//# sourceMappingURL=wixStyleFontUtils.js.map