1
0
Fork 0
mirror of https://github.com/TryGhost/Ghost-Admin.git synced 2023-12-14 02:33:04 +01:00
Ghost-Admin/lib/gh-koenig--old/addon/lib/card-factory.js
Kevin Ansfield 3d341e2dd6
Koenig reboot - rich text (#952)
refs https://github.com/TryGhost/Ghost/issues/9311

Koenig is being fully rebooted, first port of call is to focus on getting the rich-text only aspect of mobiledoc-kit working with our popup toolbar.

- renames old koenig implementation (used for reference, will eventually be deleted)
- new `{{koenig-editor}}` mobiledoc-kit component implementation based on ember-mobiledoc-editor
  - markdown text expansions
- new `{{gh-koenig-edtor}}` that wraps our title+editor and handles keyboard navigation between the two
  - clicks below content will focus the editor
- new `{{koenig-toolbar}}` component for the popup formatting toolbar with improved behaviour and simplified code
2018-01-30 10:01:07 +00:00

100 lines
3.2 KiB
JavaScript

/* eslint-disable camelcase */
import Ember from 'ember';
import EmberObject from '@ember/object';
import {copy} from '@ember/object/internals';
const {uuid} = Ember;
// returns a create card factory that takes a generic mobiledoc card and adds a ghost specific wrapper around it.
// it also provides helper functionality for Ember based cards.
export default function createCardFactory(toolbar) {
let self = this;
function createCard(cardObject) {
// if we have an array of cards then we convert them one by one.
if (cardObject instanceof Array) {
return cardObject.map(card => createCard(card));
}
// an ember card doesn't need a render or edit method
if (!cardObject.name || (!cardObject.willRender && cardObject.genus !== 'ember')) {
throw new Error('A card must have a name and willRender method');
}
cardObject.render = ({env, options, payload: _payload}) => {
// setupUI({env, options, payload});
// TODO: setup non ember UI
let payload = copy(_payload);
payload.card_name = env.name;
if (cardObject.genus === 'ember') {
let card = setupEmberCard({env, options, payload}, 'render');
let div = document.createElement('div');
div.id = card.id;
div.className = 'gh-card-holder';
return div;
}
return cardObject.willRender({env, options, payload});
};
cardObject.edit = ({env, options, payload: _payload}) => {
// setupUI({env, options, payload});
let payload = copy(_payload);
payload.card_name = env.name;
if (cardObject.genus === 'ember') {
let card = setupEmberCard({env, options, payload});
let div = document.createElement('div');
div.id = card.id;
return div;
}
if (cardObject.hasOwnProperty('willRender')) {
return cardObject.willEdit({env, options, payload, toolbar});
} else {
return cardObject.willRender({env, options, payload, toolbar});
}
// do handle and delete stuff
};
cardObject.type = 'dom';
cardObject.didPlace = () => {
};
function setupEmberCard({env, options, payload}) {
let id = `GHOST_CARD_${uuid()}`;
let newlyCreated;
if (payload.newlyCreated) {
newlyCreated = true;
delete payload.newlyCreated;
env.save(payload, false);
}
let card = EmberObject.create({
id,
env,
options,
payload,
card: cardObject,
newlyCreated
});
self.emberCards.pushObject(card);
env.onTeardown(() => {
self.emberCards.removeObject(card);
});
return card;
}
return cardObject;
// self.editor.cards.push(cardObject);
}
// then return the card factory so new cards can be made at runtime
return createCard;
}