Add getTitle method

This commit is contained in:
David Evans 2020-01-20 18:58:07 +00:00
parent a73bf1ad98
commit bdd8122a9f
7 changed files with 47 additions and 1 deletions

View File

@ -10362,6 +10362,7 @@
generator: SharedGenerator, generator: SharedGenerator,
isInteractive: false, isInteractive: false,
latestProcessed: null, latestProcessed: null,
latestTitle: '',
parser: SharedParser, parser: SharedParser,
registerCodeMirrorMode, registerCodeMirrorMode,
renderer: new Renderer(Object.assign({ renderer: new Renderer(Object.assign({
@ -10527,6 +10528,10 @@
}; };
} }
getTitle() {
return this.latestTitle;
}
_revertParent(state) { _revertParent(state) {
const dom = this.renderer.dom(); const dom = this.renderer.dom();
if(dom.parentNode !== state.originalParent) { if(dom.parentNode !== state.originalParent) {
@ -10563,6 +10568,10 @@
if(!state.processed) { if(!state.processed) {
state.processed = this.process(this.code); state.processed = this.process(this.code);
} }
const titleParts = state.processed.meta.title || [];
this.latestTitle = titleParts
.map((ln) => ln.map((p) => p.text).join(''))
.join(' ');
this.renderer.optimisedRenderPreReflow(state.processed); this.renderer.optimisedRenderPreReflow(state.processed);
} catch(e) { } catch(e) {
this._sendRenderError(e); this._sendRenderError(e);

File diff suppressed because one or more lines are too long

View File

@ -10362,6 +10362,7 @@
generator: SharedGenerator, generator: SharedGenerator,
isInteractive: false, isInteractive: false,
latestProcessed: null, latestProcessed: null,
latestTitle: '',
parser: SharedParser, parser: SharedParser,
registerCodeMirrorMode, registerCodeMirrorMode,
renderer: new Renderer(Object.assign({ renderer: new Renderer(Object.assign({
@ -10527,6 +10528,10 @@
}; };
} }
getTitle() {
return this.latestTitle;
}
_revertParent(state) { _revertParent(state) {
const dom = this.renderer.dom(); const dom = this.renderer.dom();
if(dom.parentNode !== state.originalParent) { if(dom.parentNode !== state.originalParent) {
@ -10563,6 +10568,10 @@
if(!state.processed) { if(!state.processed) {
state.processed = this.process(this.code); state.processed = this.process(this.code);
} }
const titleParts = state.processed.meta.title || [];
this.latestTitle = titleParts
.map((ln) => ln.map((p) => p.text).join(''))
.join(' ');
this.renderer.optimisedRenderPreReflow(state.processed); this.renderer.optimisedRenderPreReflow(state.processed);
} catch(e) { } catch(e) {
this._sendRenderError(e); this._sendRenderError(e);

View File

@ -679,6 +679,17 @@ Returns an object containing <code>width</code> and <code>height</code>
properties, corresponding to the size of the diagram in units. properties, corresponding to the size of the diagram in units.
</p> </p>
<h3 id="API_getTitle">.getTitle</h3>
<pre data-lang="javascript">
title = diagram.getTitle();
</pre>
<p>
Returns the document title as a string. All formatting is lost, and
newlines are replaced with spaces. Returns a blank string if no title is set.
</p>
<h3 id="API_setContainer">.setContainer</h3> <h3 id="API_setContainer">.setContainer</h3>
<pre data-lang="javascript"> <pre data-lang="javascript">

View File

@ -92,6 +92,7 @@ export default class SequenceDiagram extends EventObject {
generator: SharedGenerator, generator: SharedGenerator,
isInteractive: false, isInteractive: false,
latestProcessed: null, latestProcessed: null,
latestTitle: '',
parser: SharedParser, parser: SharedParser,
registerCodeMirrorMode, registerCodeMirrorMode,
renderer: new Renderer(Object.assign({ renderer: new Renderer(Object.assign({
@ -257,6 +258,10 @@ export default class SequenceDiagram extends EventObject {
}; };
} }
getTitle() {
return this.latestTitle;
}
_revertParent(state) { _revertParent(state) {
const dom = this.renderer.dom(); const dom = this.renderer.dom();
if(dom.parentNode !== state.originalParent) { if(dom.parentNode !== state.originalParent) {
@ -293,6 +298,10 @@ export default class SequenceDiagram extends EventObject {
if(!state.processed) { if(!state.processed) {
state.processed = this.process(this.code); state.processed = this.process(this.code);
} }
const titleParts = state.processed.meta.title || [];
this.latestTitle = titleParts
.map((ln) => ln.map((p) => p.text).join(''))
.join(' ');
this.renderer.optimisedRenderPreReflow(state.processed); this.renderer.optimisedRenderPreReflow(state.processed);
} catch(e) { } catch(e) {
this._sendRenderError(e); this._sendRenderError(e);

View File

@ -185,4 +185,10 @@ describe('SequenceDiagram', () => {
expect(svg).toContain('<?xml version="1.0" encoding="UTF-8" ?>'); expect(svg).toContain('<?xml version="1.0" encoding="UTF-8" ?>');
expect(svg).toContain('<svg width="'); expect(svg).toContain('<svg width="');
}); });
it('makes the raw title text available', () => {
const diagram = makeDiagram('title "foo **bold**\nbar"');
expect(diagram.getTitle()).toEqual('foo bold bar');
});
}); });

View File

@ -15,6 +15,7 @@ describe('Interface', () => {
'render', 'render',
'clone', 'clone',
'getSize', 'getSize',
'getTitle',
'process', 'process',
'getThemeNames', 'getThemeNames',
'on', 'on',
@ -28,6 +29,7 @@ describe('Interface', () => {
}); });
sequenceDiagram.on.and.returnValue(sequenceDiagram); sequenceDiagram.on.and.returnValue(sequenceDiagram);
sequenceDiagram.getSize.and.returnValue({height: 20, width: 10}); sequenceDiagram.getSize.and.returnValue({height: 20, width: 10});
sequenceDiagram.getTitle.and.returnValue('');
sequenceDiagram.dom.and.returnValue(dom.createElement('svg')); sequenceDiagram.dom.and.returnValue(dom.createElement('svg'));
container = dom.createElement('div'); container = dom.createElement('div');