scrawl-canvas
Version:
Version 8.9.4 - 19 Nov 2022
578 lines (381 loc) • 26.8 kB
HTML
<html>
<head>
<title>Demo Modules 001</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link rel="stylesheet" media="all" href="../../docco.css" />
</head>
<body>
<div id="container">
<div id="background"></div>
<ul id="jump_to">
<li>
<a class="large" href="javascript:void(0);">Jump To …</a>
<a class="small" href="javascript:void(0);">+</a>
<div id="jump_wrapper">
<div id="jump_page_wrapper">
<div id="jump_page">
<a class="source" href="canvas-minimap.html">
./demo/modules/canvas-minimap.js
</a>
<a class="source" href="canvas-scene-editor.html">
./demo/modules/canvas-scene-editor.js
</a>
<a class="source" href="dom-entity-editor.html">
./demo/modules/dom-entity-editor.js
</a>
<a class="source" href="entity-copy-paste.html">
./demo/modules/entity-copy-paste.js
</a>
<a class="source" href="entity-manipulation-gui.html">
./demo/modules/entity-manipulation-gui.js
</a>
<a class="source" href="entity-navigation.html">
./demo/modules/entity-navigation.js
</a>
<a class="source" href="entity-ring-builder.html">
./demo/modules/entity-ring-builder.js
</a>
<a class="source" href="london-crime-graphic.html">
./demo/modules/london-crime-graphic.js
</a>
<a class="source" href="london-crime-lines.html">
./demo/modules/london-crime-lines.js
</a>
<a class="source" href="london-crime-stacked-bars.html">
./demo/modules/london-crime-stacked-bars.js
</a>
<a class="source" href="lottie-loader.html">
./demo/modules/lottie-loader.js
</a>
<a class="source" href="simple-chart-frame-tests.html">
./demo/modules/simple-chart-frame-tests.js
</a>
<a class="source" href="simple-chart-frame.html">
./demo/modules/simple-chart-frame.js
</a>
<a class="source" href="simple-graph-lines.html">
./demo/modules/simple-graph-lines.js
</a>
<a class="source" href="simple-graph-stacked-bars.html">
./demo/modules/simple-graph-stacked-bars.js
</a>
<a class="source" href="wikipedia-views-spiral-chart.html">
./demo/modules/wikipedia-views-spiral-chart.js
</a>
<a class="source" href="../snippets/animated-highlight-gradient-text-snippet.html">
./demo/snippets/animated-highlight-gradient-text-snippet.js
</a>
<a class="source" href="../snippets/animated-hover-gradient-snippet.html">
./demo/snippets/animated-hover-gradient-snippet.js
</a>
<a class="source" href="../snippets/animated-word-gradient-snippet.html">
./demo/snippets/animated-word-gradient-snippet.js
</a>
<a class="source" href="../snippets/before-after-slider-infographic.html">
./demo/snippets/before-after-slider-infographic.js
</a>
<a class="source" href="../snippets/bubbles-text-snippet.html">
./demo/snippets/bubbles-text-snippet.js
</a>
<a class="source" href="../snippets/green-box-snippet.html">
./demo/snippets/green-box-snippet.js
</a>
<a class="source" href="../snippets/jazzy-button-snippet.html">
./demo/snippets/jazzy-button-snippet.js
</a>
<a class="source" href="../snippets/page-performance-snippet-test.html">
./demo/snippets/page-performance-snippet-test.js
</a>
<a class="source" href="../snippets/page-performance-snippet.html">
./demo/snippets/page-performance-snippet.js
</a>
<a class="source" href="../snippets/pan-image-snippet.html">
./demo/snippets/pan-image-snippet.js
</a>
<a class="source" href="../snippets/placeholder-effect-snippet.html">
./demo/snippets/placeholder-effect-snippet.js
</a>
<a class="source" href="../snippets/ripple-effect-snippet.html">
./demo/snippets/ripple-effect-snippet.js
</a>
<a class="source" href="../snippets/risograph-text-gradient-snippet.html">
./demo/snippets/risograph-text-gradient-snippet.js
</a>
<a class="source" href="../snippets/spotlight-text-snippet-test.html">
./demo/snippets/spotlight-text-snippet-test.js
</a>
<a class="source" href="../snippets/spotlight-text-snippet.html">
./demo/snippets/spotlight-text-snippet.js
</a>
<a class="source" href="../snippets/swirling-stripes-text-snippet.html">
./demo/snippets/swirling-stripes-text-snippet.js
</a>
<a class="source" href="../snippets/text-snippet-helper.html">
./demo/snippets/text-snippet-helper.js
</a>
<a class="source" href="../snippets/word-highlighter-snippet.html">
./demo/snippets/word-highlighter-snippet.js
</a>
<a class="source" href="../snippets/worley-text-gradient-snippet.html">
./demo/snippets/worley-text-gradient-snippet.js
</a>
</div>
</div>
</li>
</ul>
<ul class="sections">
<li id="section-1">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-1">§</a>
</div>
<h1 id="demo-modules-001">Demo Modules 001</h1>
<p>Scrawl-canvas modularized code - London crime charts</p>
<p>Related files:</p>
<ul>
<li><a href="../modules-001.html">London crime charts - main module</a></li>
<li><a href="./london-crime-graphic.html">London crime graphic module</a></li>
<li><a href="./london-crime-lines.html">London crime lines module</a></li>
<li><a href="./london-crime-stacked-bars.html">London crime stacked bar module</a></li>
<li><a href="./simple-chart-frame.html">Simple chart frame module</a></li>
<li><a href="./simple-chart-frame-tests.html">Simple chart frame tests module</a></li>
<li><a href="./simple-graph-lines.html">Simple graph lines module</a></li>
<li><a href="./simple-graph-stacked-bars.html">Simple graph stacked bars module</a></li>
</ul>
</div>
<div class="content"><div class='highlight'><pre>
<span class="hljs-keyword">import</span> * <span class="hljs-keyword">as</span> scrawl <span class="hljs-keyword">from</span> <span class="hljs-string">'../../source/scrawl.js'</span>;
scrawl.<span class="hljs-title function_">importDomImage</span>(<span class="hljs-string">'.crime'</span>);
<span class="hljs-keyword">let</span> background,
title, subtitle,
yLabelTop, yLabelBottom,
xLabelLeft, xLabelRight,
group,
navigation;</pre></div></div>
</li>
<li id="section-2">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-2">§</a>
</div>
<p>Magic numbers to define where the chart will go within the grid</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-keyword">const</span> graphWidth = <span class="hljs-number">90</span>;
<span class="hljs-keyword">const</span> graphHeight = <span class="hljs-number">80</span>;
<span class="hljs-keyword">const</span> graphBottom = <span class="hljs-number">95</span>;
<span class="hljs-keyword">const</span> graphLeft = <span class="hljs-number">10</span>;
<span class="hljs-keyword">const</span> build = <span class="hljs-keyword">function</span> (<span class="hljs-params">namespace, canvas, backgroundImage</span>) {</pre></div></div>
</li>
<li id="section-3">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-3">§</a>
</div>
<p>Accessibility</p>
</div>
<div class="content"><div class='highlight'><pre> canvas.<span class="hljs-title function_">set</span>({
<span class="hljs-attr">includeInTabNavigation</span>: <span class="hljs-literal">true</span>,
});
navigation = <span class="hljs-title function_">addArrowNavigation</span>(canvas);</pre></div></div>
</li>
<li id="section-4">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-4">§</a>
</div>
<p>Build out the frame</p>
</div>
<div class="content"><div class='highlight'><pre> group = scrawl.<span class="hljs-title function_">makeGroup</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-group`</span>,
<span class="hljs-attr">host</span>: canvas.<span class="hljs-property">base</span>.<span class="hljs-property">name</span>,
<span class="hljs-attr">order</span>: <span class="hljs-number">1</span>,
<span class="hljs-attr">visibility</span>: <span class="hljs-literal">false</span>,
});
background = scrawl.<span class="hljs-title function_">makePicture</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-background`</span>,
<span class="hljs-attr">group</span>: group,
<span class="hljs-attr">order</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">width</span>: <span class="hljs-string">'100%'</span>,
<span class="hljs-attr">height</span>: <span class="hljs-string">'100%'</span>,
<span class="hljs-attr">copyWidth</span>: <span class="hljs-string">'100%'</span>,
<span class="hljs-attr">copyHeight</span>: <span class="hljs-string">'100%'</span>,
<span class="hljs-attr">globalAlpha</span>: <span class="hljs-number">0.65</span>,
<span class="hljs-attr">asset</span>: backgroundImage,
});
title = scrawl.<span class="hljs-title function_">makePhrase</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-title`</span>,
<span class="hljs-attr">group</span>: group,
<span class="hljs-attr">order</span>: <span class="hljs-number">1</span>,
<span class="hljs-attr">text</span>: <span class="hljs-string">'No title'</span>,
<span class="hljs-attr">width</span>: <span class="hljs-string">'100%'</span>,
<span class="hljs-attr">justify</span>: <span class="hljs-string">'center'</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">'3%'</span>,
<span class="hljs-attr">font</span>: <span class="hljs-string">'1.5rem Roboto, Arial, sans-serif'</span>,
<span class="hljs-attr">fillStyle</span>: <span class="hljs-string">'black'</span>,
});
subtitle = title.<span class="hljs-title function_">clone</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-subtitle`</span>,
<span class="hljs-attr">text</span>: <span class="hljs-string">'No data selected'</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">'9%'</span>,
<span class="hljs-attr">size</span>: <span class="hljs-string">'1.2rem'</span>,
});
subtitle.<span class="hljs-title function_">addSectionClass</span>(<span class="hljs-string">'RED'</span>, { <span class="hljs-attr">fill</span>: <span class="hljs-string">'darkred'</span> });
yLabelTop = scrawl.<span class="hljs-title function_">makePhrase</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-y-top`</span>,
<span class="hljs-attr">group</span>: group,
<span class="hljs-attr">order</span>: <span class="hljs-number">1</span>,
<span class="hljs-attr">text</span>: <span class="hljs-string">'0'</span>,
<span class="hljs-attr">startX</span>: <span class="hljs-string">'1%'</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">'12%'</span>,
<span class="hljs-attr">font</span>: <span class="hljs-string">'0.9rem Roboto, Arial, sans-serif'</span>,
<span class="hljs-attr">fillStyle</span>: <span class="hljs-string">'darkred'</span>,
});
yLabelBottom = yLabelTop.<span class="hljs-title function_">clone</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-y-bottom`</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">'92%'</span>,
});
xLabelLeft = yLabelTop.<span class="hljs-title function_">clone</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-x-left`</span>,
<span class="hljs-attr">startX</span>: <span class="hljs-string">'10%'</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">'96%'</span>,
});
xLabelRight = xLabelLeft.<span class="hljs-title function_">clone</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-x-right`</span>,
<span class="hljs-attr">startX</span>: <span class="hljs-string">'89%'</span>,
});
scrawl.<span class="hljs-title function_">makeLine</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-upperline`</span>,
<span class="hljs-attr">group</span>: group,
<span class="hljs-attr">order</span>: <span class="hljs-number">1</span>,
<span class="hljs-attr">startX</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">`<span class="hljs-subst">${graphBottom - graphHeight}</span>%`</span>,
<span class="hljs-attr">endX</span>: <span class="hljs-string">'100%'</span>,
<span class="hljs-attr">endY</span>: <span class="hljs-string">`<span class="hljs-subst">${graphBottom - graphHeight}</span>%`</span>,
<span class="hljs-attr">strokeStyle</span>: <span class="hljs-string">'red'</span>,
<span class="hljs-attr">method</span>: <span class="hljs-string">'draw'</span>,
<span class="hljs-attr">lineWidth</span>: <span class="hljs-number">1</span>,
}).<span class="hljs-title function_">clone</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-lowerline`</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">`<span class="hljs-subst">${graphBottom}</span>%`</span>,
<span class="hljs-attr">endY</span>: <span class="hljs-string">`<span class="hljs-subst">${graphBottom}</span>%`</span>,
}).<span class="hljs-title function_">clone</span>({
<span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${namespace}</span>-leftline`</span>,
<span class="hljs-attr">startX</span>: <span class="hljs-string">`<span class="hljs-subst">${graphLeft}</span>%`</span>,
<span class="hljs-attr">endX</span>: <span class="hljs-string">`<span class="hljs-subst">${graphLeft}</span>%`</span>,
<span class="hljs-attr">startY</span>: <span class="hljs-string">`<span class="hljs-subst">${graphBottom - graphHeight}</span>%`</span>,
<span class="hljs-attr">endY</span>: <span class="hljs-string">`<span class="hljs-subst">${graphBottom}</span>%`</span>,
});
<span class="hljs-title function_">show</span>();
};</pre></div></div>
</li>
<li id="section-5">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-5">§</a>
</div>
<p>Accessibility</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-keyword">const</span> arrowActions = {
<span class="hljs-attr">up</span>: <span class="hljs-function">() =></span> {},
<span class="hljs-attr">right</span>: <span class="hljs-function">() =></span> {},
<span class="hljs-attr">down</span>: <span class="hljs-function">() =></span> {},
<span class="hljs-attr">left</span>: <span class="hljs-function">() =></span> {},
};
<span class="hljs-keyword">const</span> <span class="hljs-title function_">setArrowAction</span> = (<span class="hljs-params">key, action</span>) => {
<span class="hljs-keyword">if</span> (key != <span class="hljs-literal">null</span> && action != <span class="hljs-literal">null</span>) {
arrowActions[key] = action;
}
};
<span class="hljs-keyword">const</span> <span class="hljs-title function_">addArrowNavigation</span> = (<span class="hljs-params">canvas</span>) => {
<span class="hljs-keyword">const</span> <span class="hljs-title function_">entityNavigationKeysDown</span> = (<span class="hljs-params">e</span>) => {
<span class="hljs-keyword">const</span> { key } = e;</pre></div></div>
</li>
<li id="section-6">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-6">§</a>
</div>
<p>Tab, Enter/Return, Esc</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> (<span class="hljs-string">'Tab'</span> === key || <span class="hljs-string">'Escape'</span> === key) {
canvas.<span class="hljs-property">domElement</span>.<span class="hljs-title function_">blur</span>();
<span class="hljs-keyword">return</span>;
}</pre></div></div>
</li>
<li id="section-7">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-7">§</a>
</div>
<p>Prevent various combikey events interfering with navigation functionality</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> (<span class="hljs-string">'Shift'</span> === key || <span class="hljs-string">'Alt'</span> === key || <span class="hljs-string">'Ctrl'</span> === key|| <span class="hljs-string">'Meta'</span> === key) <span class="hljs-keyword">return</span>;
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-string">'ArrowLeft'</span> === key) arrowActions.<span class="hljs-title function_">left</span>();
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-string">'ArrowUp'</span> === key) arrowActions.<span class="hljs-title function_">up</span>();
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-string">'ArrowRight'</span> === key) arrowActions.<span class="hljs-title function_">right</span>();
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-string">'ArrowDown'</span> === key) arrowActions.<span class="hljs-title function_">down</span>();
e.<span class="hljs-title function_">preventDefault</span>();
}
<span class="hljs-keyword">return</span> scrawl.<span class="hljs-title function_">addNativeListener</span>(<span class="hljs-string">'keydown'</span>, entityNavigationKeysDown, canvas.<span class="hljs-property">domElement</span>);
};</pre></div></div>
</li>
<li id="section-8">
<div class="annotation">
<div class="sswrap ">
<a class="ss" href="#section-8">§</a>
</div>
<p>API</p>
</div>
<div class="content"><div class='highlight'><pre><span class="hljs-keyword">const</span> <span class="hljs-title function_">kill</span> = (<span class="hljs-params"></span>) => {
<span class="hljs-keyword">if</span> (group != <span class="hljs-literal">null</span> && navigation != <span class="hljs-literal">null</span>) {
group.<span class="hljs-title function_">kill</span>(<span class="hljs-literal">true</span>);
<span class="hljs-title function_">navigation</span>();
}
}
<span class="hljs-keyword">const</span> <span class="hljs-title function_">hide</span> = (<span class="hljs-params"></span>) => {
<span class="hljs-keyword">if</span> (group != <span class="hljs-literal">null</span>) group.<span class="hljs-title function_">set</span>({
<span class="hljs-attr">visibility</span>: <span class="hljs-literal">false</span>,
});
};
<span class="hljs-keyword">const</span> <span class="hljs-title function_">show</span> = (<span class="hljs-params"></span>) => {
<span class="hljs-keyword">if</span> (group != <span class="hljs-literal">null</span>) group.<span class="hljs-title function_">set</span>({
<span class="hljs-attr">visibility</span>: <span class="hljs-literal">true</span>,
});
};
<span class="hljs-keyword">const</span> updateTextHelper = <span class="hljs-keyword">function</span> (<span class="hljs-params">item, text</span>) {
<span class="hljs-keyword">if</span> (item != <span class="hljs-literal">null</span> && text != <span class="hljs-literal">null</span>) item.<span class="hljs-title function_">set</span>({ text });
};
<span class="hljs-keyword">const</span> <span class="hljs-title function_">updateTitle</span> = (<span class="hljs-params">text</span>) => <span class="hljs-title function_">updateTextHelper</span>(title, text);
<span class="hljs-keyword">const</span> <span class="hljs-title function_">updateSubtitle</span> = (<span class="hljs-params">text</span>) => <span class="hljs-title function_">updateTextHelper</span>(subtitle, text);
<span class="hljs-keyword">const</span> <span class="hljs-title function_">updateYTop</span> = (<span class="hljs-params">text</span>) => <span class="hljs-title function_">updateTextHelper</span>(yLabelTop, text);
<span class="hljs-keyword">const</span> <span class="hljs-title function_">updateYBottom</span> = (<span class="hljs-params">text</span>) => <span class="hljs-title function_">updateTextHelper</span>(yLabelBottom, text);
<span class="hljs-keyword">const</span> <span class="hljs-title function_">updateXLeft</span> = (<span class="hljs-params">text</span>) => <span class="hljs-title function_">updateTextHelper</span>(xLabelLeft, text);
<span class="hljs-keyword">const</span> <span class="hljs-title function_">updateXRight</span> = (<span class="hljs-params">text</span>) => <span class="hljs-title function_">updateTextHelper</span>(xLabelRight, text);
<span class="hljs-keyword">const</span> updateBackground = <span class="hljs-keyword">function</span> (<span class="hljs-params">asset</span>) {
<span class="hljs-keyword">if</span> (background != <span class="hljs-literal">null</span> && asset != <span class="hljs-literal">null</span>) background.<span class="hljs-title function_">set</span>({ asset });
};
<span class="hljs-keyword">export</span> {
graphWidth,
graphHeight,
graphBottom,
graphLeft,
build,
kill,
hide,
show,
updateTitle,
updateSubtitle,
updateYTop,
updateYBottom,
updateXLeft,
updateXRight,
updateBackground,
setArrowAction,
};</pre></div></div>
</li>
</ul>
</div>
</body>
</html>