Skip to content

Commit

Permalink
Add Editor#enableLogging and Editor#disableLogging
Browse files Browse the repository at this point in the history
  • Loading branch information
bantic committed Apr 26, 2016
1 parent 087fb00 commit 0f54784
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 93 deletions.
40 changes: 30 additions & 10 deletions src/js/editor/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,7 @@ import EditState from 'mobiledoc-kit/editor/edit-state';
import HTMLRenderer from 'mobiledoc-html-renderer';
import TextRenderer from 'mobiledoc-text-renderer';
import LifecycleCallbacks from 'mobiledoc-kit/models/lifecycle-callbacks';
import Logger from 'mobiledoc-kit/utils/logger';
let log = Logger.for('editor'); /* jshint ignore:line */

Logger.enableTypes([
'mutation-handler',
'event-manager',
'editor',
'parse-utils'
]);
Logger.disable();
import LogManager from 'mobiledoc-kit/utils/log-manager';

export const EDITOR_ELEMENT_CLASS_NAME = '__mobiledoc-editor';

Expand Down Expand Up @@ -130,6 +121,7 @@ class Editor {

DEFAULT_KEY_COMMANDS.forEach(kc => this.registerKeyCommand(kc));

this._logManager = new LogManager();
this._parser = new DOMParser(this.builder);
let {cards, atoms, unknownCardHandler, unknownAtomHandler, cardOptions} = this;
this._renderer = new Renderer(this, cards, atoms, unknownCardHandler, unknownAtomHandler, cardOptions);
Expand All @@ -148,6 +140,34 @@ class Editor {
this.hasRendered = false;
}

/**
* Turns on verbose logging for the editor.
* @param {Array} [logTypes=[]] If present, only the given log types will be logged.
* @public
*/
enableLogging(logTypes=[]) {
if (logTypes.length === 0) {
this._logManager.enableAll();
} else {
this._logManager.enableTypes(logTypes);
}
}

/**
* Disable all logging
* @public
*/
disableLogging() {
this._logManager.disable();
}

/**
* @private
*/
loggerFor(type) {
return this._logManager.for(type);
}

/**
* The editor's instance of a post node builder.
* @type {PostNodeBuilder}
Expand Down
9 changes: 4 additions & 5 deletions src/js/editor/event-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import { filter, forEach, contains } from 'mobiledoc-kit/utils/array-utils';
import Key from 'mobiledoc-kit/utils/key';
import { TAB } from 'mobiledoc-kit/utils/characters';
import TextInputHandler from 'mobiledoc-kit/editor/text-input-handler';
import Logger from 'mobiledoc-kit/utils/logger';
let log = Logger.for('event-manager'); /* jshint ignore:line */

const ELEMENT_EVENT_TYPES = [
'keydown', 'keyup', 'cut', 'copy', 'paste', 'keypress', 'drop'
Expand All @@ -20,6 +18,7 @@ const DOCUMENT_EVENT_TYPES = ['mouseup'];
export default class EventManager {
constructor(editor) {
this.editor = editor;
this.logger = editor.loggerFor('event-manager');
this._textInputHandler = new TextInputHandler(editor);
this._listeners = [];
this.isShift = false;
Expand Down Expand Up @@ -215,13 +214,13 @@ export default class EventManager {

let position = editor.positionAtPoint(x, y);
if (!position) {
log('Could not find drop position');
this.logger.log('Could not find drop position');
return;
}

let post = parsePostFromDrop(event, editor);
let post = parsePostFromDrop(event, editor, {logger: this.logger});
if (!post) {
log('Could not determine post from drop event');
this.logger.log('Could not determine post from drop event');
return;
}

Expand Down
7 changes: 3 additions & 4 deletions src/js/editor/mutation-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import Set from 'mobiledoc-kit/utils/set';
import { forEach, filter } from 'mobiledoc-kit/utils/array-utils';
import assert from 'mobiledoc-kit/utils/assert';
import { containsNode } from 'mobiledoc-kit/utils/dom-utils';
import Logger from 'mobiledoc-kit/utils/logger';
let log = Logger.for('mutation-handler');

const MUTATION = {
NODES_CHANGED: 'childList',
Expand All @@ -13,6 +11,7 @@ const MUTATION = {
export default class MutationHandler {
constructor(editor) {
this.editor = editor;
this.logger = editor.loggerFor('mutation-handler');
this.renderTree = null;
this._isObserving = false;

Expand Down Expand Up @@ -111,10 +110,10 @@ export default class MutationHandler {
}

if (reparsePost) {
log(`reparsePost (${mutations.length} mutations)`);
this.logger.log(`reparsePost (${mutations.length} mutations)`);
this.reparsePost();
} else if (sections.length) {
log(`reparse ${sections.length} sections (${mutations.length} mutations)`);
this.logger.log(`reparse ${sections.length} sections (${mutations.length} mutations)`);
this.reparseSections(sections.toArray());
}
}
Expand Down
47 changes: 47 additions & 0 deletions src/js/utils/log-manager.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class Logger {
constructor(type, manager) {
this.type = type;
this.manager = manager;
}

isEnabled() {
return this.manager.isEnabled(this.type);
}

log(...args) {
args.unshift(`[${this.type}]`);
if (this.isEnabled()) {
window.console.log(...args);
}
}
}

class LogManager {
constructor() {
this.enabledTypes = [];
this.allEnabled = false;
}

for(type) {
return new Logger(type, this);
}

enableAll() {
this.allEnabled = true;
}

enableTypes(types) {
this.enabledTypes = this.enabledTypes.concat(types);
}

disable() {
this.enabledTypes = [];
this.allEnabled = false;
}

isEnabled(type) {
return this.allEnabled || this.enabledTypes.indexOf(type) !== -1;
}
}

export default LogManager;
67 changes: 0 additions & 67 deletions src/js/utils/logger.js

This file was deleted.

16 changes: 9 additions & 7 deletions src/js/utils/parse-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@
import mobiledocParsers from '../parsers/mobiledoc';
import HTMLParser from '../parsers/html';
import TextParser from '../parsers/text';
import Logger from 'mobiledoc-kit/utils/logger';

export const MIME_TEXT_PLAIN = 'text/plain';
export const MIME_TEXT_HTML = 'text/html';
export const NONSTANDARD_IE_TEXT_TYPE = 'Text';

const log = Logger.for('parse-utils');
const MOBILEDOC_REGEX = new RegExp(/data\-mobiledoc='(.*?)'>/);

/**
Expand Down Expand Up @@ -65,7 +63,7 @@ export function getContentFromPasteEvent(event, window) {
* @return {{html: String, text: String}}
* @private
*/
function getContentFromDropEvent(event) {
function getContentFromDropEvent(event, logger) {
let html = '', text = '';

try {
Expand All @@ -75,7 +73,9 @@ function getContentFromDropEvent(event) {
// FIXME IE11 does not include any data in the 'text/html' or 'text/plain'
// mimetypes. It throws an error 'Invalid argument' when attempting to read
// these properties.
log('Error getting drop data: ', e);
if (logger) {
logger.log('Error getting drop data: ', e);
}
}

return { html, text };
Expand Down Expand Up @@ -124,12 +124,14 @@ export function parsePostFromPaste(pasteEvent, {builder, _parserPlugins: plugins

/**
* @param {DropEvent}
* @param {{builder: Builder, _parserPlugins: Array}} options
* @param {Editor} editor
* @param {Object} [options={}] Can pass a logger
* @return {Post}
* @private
*/
export function parsePostFromDrop(dropEvent, {builder, _parserPlugins: plugins}) {
let { html, text } = getContentFromDropEvent(dropEvent);
export function parsePostFromDrop(dropEvent, editor, {logger}={}) {
let { builder, _parserPlugins: plugins } = editor;
let { html, text } = getContentFromDropEvent(dropEvent, logger);

if (html && html.length) {
return parsePostFromHTML(html, builder, plugins);
Expand Down

0 comments on commit 0f54784

Please sign in to comment.