UNPKG

metro4

Version:

The front-end framework for Build responsive, mobile-first projects on the web with the first front-end component library in Metro Style

91 lines (71 loc) 2.59 kB
/* global Metro */ (function(Metro, $) { 'use strict'; var ImagePlaceholderDefaultConfig = { size: "100x100", width: null, height: null, color: "#f8f8f8", textColor: "#292929", font: "12px sans-serif", text: "", showText: true, onImagePlaceholderCreate: Metro.noop }; Metro.imagePlaceholderSetup = function (options) { ImagePlaceholderDefaultConfig = $.extend({}, ImagePlaceholderDefaultConfig, options); }; if (typeof window["metroImagePlaceholderSetup"] !== undefined) { Metro.imagePlaceholderSetup(window["metroImagePlaceholderSetup"]); } Metro.Component('image-placeholder', { init: function( options, elem ) { this._super(elem, options, ImagePlaceholderDefaultConfig, { // define instance vars here width: 0, height: 0 }); return this; }, _create: function(){ this._createStructure(); this._createEvents(); this._fireEvent('image-placeholder-create'); }, _createStructure: function(){ var element = this.element, o = this.options; var size = o.size.toArray("x"); this.width = o.width ? o.width : size[0]; this.height = o.height ? o.height : size[1]; element.attr("src", this._createPlaceholder()); }, _createEvents: function(){ }, _createPlaceholder: function(){ var o = this.options; var canvas = document.createElement("canvas"), context = canvas.getContext("2d"); var width = this.width, height = this.height; canvas.width = parseInt(width); canvas.height = parseInt(height); // background context.clearRect(0, 0, width, height); context.fillStyle = o.color; context.fillRect(0, 0, width, height); // text context.fillStyle = o.textColor; context.font = o.font; context.translate(width / 2, height / 2); context.textAlign = 'center'; context.textBaseline = 'middle'; if (o.showText) context.fillText(o.text ? o.text : width + " \u00d7 " + height, 0, 0); return canvas.toDataURL(); }, // changeAttribute: function(attr, newValue){ // }, destroy: function(){ this.element.remove(); } }); }(Metro, m4q));