import { result } from 'underscore';
import Component from './Component';
import { toLowerCase, buildBase64UrlFromSvg, hasWin } from '../../utils/mixins';
const svgAttrs =
'xmlns="http://www.w3.org/2000/svg" width="100" viewBox="0 0 24 24" style="fill: rgba(0,0,0,0.15); transform: scale(0.75)"';
export default class ComponentImage extends Component {
get defaults() {
return {
...super.defaults,
type: 'image',
tagName: 'img',
void: true,
droppable: 0,
editable: 1,
highlightable: 0,
resizable: { ratioDefault: 1 },
traits: ['alt'],
src: ``,
// Fallback image in case the src can't be loaded
// If you use SVG, xmlns="http://www.w3.org/2000/svg" is required
fallback: ``,
// File to load asynchronously once the model is rendered
file: '',
};
}
initialize(o, opt) {
Component.prototype.initialize.apply(this, arguments);
const { src } = this.get('attributes');
if (src && buildBase64UrlFromSvg(result(this, 'defaults').src) !== src) {
this.set('src', src, { silent: 1 });
}
}
initToolbar(...args) {
Component.prototype.initToolbar.apply(this, args);
const em = this.em;
if (em) {
var cmd = em.get('Commands');
var cmdName = 'image-editor';
// Add Image Editor button only if the default command exists
if (cmd.has(cmdName)) {
let hasButtonBool = false;
var tb = this.get('toolbar');
for (let i = 0; i < tb.length; i++) {
if (tb[i].command === 'image-editor') {
hasButtonBool = true;
break;
}
}
if (!hasButtonBool) {
tb.push({
attributes: { class: 'fa fa-pencil' },
command: cmdName,
});
this.set('toolbar', tb);
}
}
}
}
/**
* Returns object of attributes for HTML
* @return {Object}
* @private
*/
getAttrToHTML(...args) {
const attr = Component.prototype.getAttrToHTML.apply(this, args);
const src = this.getSrcResult();
if (src) attr.src = src;
return attr;
}
getSrcResult(opt = {}) {
const src = this.get(opt.fallback ? 'fallback' : 'src') || '';
let result = src;
if (src && src.substr(0, 4) === '