%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/js/landing/ui/field/ |
| Current File : /home/bitrix/www/bitrix/js/landing/ui/field/font_field.js |
;(function() {
"use strict";
BX.namespace("BX.Landing.UI.Field");
var isFunction = BX.Landing.Utils.isFunction;
var isPlainObject = BX.Landing.Utils.isPlainObject;
var bind = BX.Landing.Utils.bind;
var proxy = BX.Landing.Utils.proxy;
var escapeHtml = BX.Landing.Utils.escapeHtml;
var addClass = BX.Landing.Utils.addClass;
var clone = BX.Landing.Utils.clone;
/**
* Implements interface for works with text field
*
* @extends {BX.Landing.UI.Field.BaseField}
*
* @inheritDoc
* @constructor
*/
BX.Landing.UI.Field.Font = function(data)
{
BX.Landing.UI.Field.BaseField.apply(this, arguments);
addClass(this.layout, "landing-ui-field-font");
this.frame = data.frame;
this.items = [];
if (isPlainObject(data.items))
{
var keys = Object.keys(this.items);
this.items = keys.map(function(key) {
return {name: this.items[key], value: key};
}, this);
}
// Make event external event handler
this.onChangeHandler = isFunction(data.onChange) ? data.onChange : (function() {});
this.onValueChangeHandler = isFunction(data.onValueChange) ? data.onValueChange : (function() {});
// Set display field value
this.content = escapeHtml(this.content);
this.input.innerHTML = this.content;
if (this.frame)
{
var element = this.frame.document.querySelectorAll(this.selector)[0];
if (element)
{
var family = BX.style(element, "font-family");
if (family)
{
family = family.replace(/['|"]/g, "");
this.content = family.split(",")[0];
this.input.innerHTML = this.content;
}
}
}
bind(this.input, "click", proxy(this.onInputClick, this));
};
function makeFontClassName(family)
{
return "g-font-" + family.toLowerCase().replace(/ /g, "-");
}
BX.Landing.UI.Field.Font.prototype = {
constructor: BX.Landing.UI.Field.Font,
__proto__: BX.Landing.UI.Field.BaseField.prototype,
/**
* Handles input click event
* @param {MouseEvent} event
*/
onInputClick: function(event)
{
event.preventDefault();
event.stopPropagation();
BX.Landing.UI.Panel.GoogleFonts.getInstance().show().then(function(font) {
if (!this.response)
{
this.response = clone(BX.Landing.UI.Panel.GoogleFonts.getInstance().response);
this.response.forEach(function(fontItem) {
this.items.push({name: fontItem.family, value: makeFontClassName(fontItem.family)});
}, this);
}
this.setValue(font);
}.bind(this));
},
setValue: function(value)
{
if (isPlainObject(value))
{
var className = makeFontClassName(value.family);
var href = BX.Landing.UI.Panel.GoogleFonts.getInstance().client.makeUrl({
family: value.family.replace(/ /g, "+")
});
var FontManager = BX.Landing.UI.Tool.FontManager.getInstance();
// Add font to current document
FontManager.addFont({
className: className,
family: value.family,
href: href,
category: value.category
}, window);
// Update display field value
this.input.innerHTML = escapeHtml(value.family);
// Call handlers
this.onChangeHandler(className, this.items, this.postfix, this.property);
this.onValueChangeHandler(this);
// Remove unused handlers
FontManager.removeUnusedFonts();
var headString = "";
FontManager.getUsedLoadedFonts().forEach(function(item) {
if (item.element)
{
item.element.setAttribute("rel", "stylesheet");
item.element.removeAttribute("media");
headString += "<noscript>"+item.element.outerHTML+"</noscript>\n";
item.element.setAttribute("rel", "preload");
item.element.setAttribute("onload", "this.removeAttribute('onload');this.rel='stylesheet'");
item.element.setAttribute("as", "style");
headString += item.element.outerHTML + "\n";
}
if (item.CSSDeclaration)
{
headString += item.CSSDeclaration.outerHTML;
}
});
headString = headString.replace("async@load", "all");
BX.Landing.Backend.getInstance()
.action("Landing::updateHead", {content: headString});
}
}
}
})();