silex-website-builder-goodevent
Version:
Free and easy website builder for everyone.
76 lines (71 loc) • 2.1 kB
text/typescript
/**
* Silex, live web creation
* http://projects.silexlabs.org/?/silex/
*
* Copyright (c) 2012 Silex Labs
* http://www.silexlabs.org/
*
* Silex is available under the GPL license
* http://www.silexlabs.org/silex/silex-licensing/
*/
/**
* @fileoverview
* the Silex HTML editor
*
*/
import { Constants } from '../../../Constants';
import {Model} from '../../types';
import {Controller} from '../../types';
import {CodeEditorBase} from './CodeEditorBase';
/**
* @class {silex.view.dialog.HtmlEditor}
*/
export class HtmlEditor extends CodeEditorBase {
/**
* @param element container to render the UI
* @param model model class which holds
* the model instances - views use it for
* read operation only
* @param controller structure which holds
* the controller instances
*/
constructor(element: HTMLElement, model: Model, controller: Controller) {
super(element, model, controller, 'html');
}
/**
* the content has changed, notify the controler
*/
contentChanged() {
const selection = this.model.body.getSelection();
if (selection.length <= 1) {
this.controller.htmlEditorController.changed(selection[0], this.getValue());
}
}
setSelection(selection) {
if (selection.length === 0) {
// edit head tag
this.setValue(this.model.head.getUserHeadTag());
this.setReadOnly(false);
} else {
if (selection.length === 1) {
if (selection[0].tagName.toLowerCase() === 'body') {
// edit head tag
this.setValue(this.model.head.getUserHeadTag());
this.setReadOnly(false);
} else {
if (this.model.element.getType(selection[0]) === Constants.TYPE_HTML) {
// edit current selection
this.setValue(this.model.element.getInnerHtml(selection[0]));
this.setReadOnly(false);
} else {
this.setValue('-select an HTML box-');
this.setReadOnly(true);
}
}
} else {
this.setValue('-select an HTML box-');
this.setReadOnly(true);
}
}
}
}