{
  "file": "addon/components/fountainhead-header.js",
  "content": "<pre class=\"language-javascript line-numbers\"><code class=\"language-javascript}\"><span aria-hidden=\"true\" role=\"presentation\" class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span><span class=\"token keyword\">import</span> Component <span class=\"token keyword\">from</span> <span class=\"token string\">'ember-component'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> inject <span class=\"token keyword\">from</span> <span class=\"token string\">'ember-service/inject'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> next <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'ember-runloop'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> hbs <span class=\"token keyword\">from</span> <span class=\"token string\">'htmlbars-inline-precompile'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\" spellcheck=\"true\">/**\n * This component is used for any header that should include a click-to-copy scroll target.\n * For any header in a Fountainhead Guide or Docblock, the\n * {{c-l class='parseMarkdown'}} method automatically handles creating instances\n *  by adding new render\n * rules for the `heading_open` and `heading_close` tokens generated by `markdown-it`.\n *\n * This automatically creates headers with fragment ids and\n * click to copy targets for grabbing the anchor for any header in your documentation!\n *\n * The `heading_open` token contains the HTML tag element for each header, it is\n * passed in as the `tagName` property, which creates the correct header element.\n *\n * The {{c-l class='FountainheadCopyableLinkTo'}} component returns a text value\n * matching the href to copy, and is invoked differently depending on if the consuming\n * app is using hash routing or not. If not, we use hash fragment ids like a normal\n * web page. If they are, a query param `id` is used. The\n * {{c-l class='Fountainhead'}} service handles checking which target to use when\n * scrolling to ids on page 'load' _(which is actually any page component's\n * `didInsertElement` hook)_.\n * @class FounatianheadHeader\n * @constructor\n * @extends Ember.Component\n */</span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Component<span class=\"token punctuation\">.</span><span class=\"token function\">extend</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  fountainhead<span class=\"token punctuation\">:</span> <span class=\"token function\">inject</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Passed Properties</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ---------------------------------------------------------------------------</span>\n  <span class=\"token comment\" spellcheck=\"true\">/**\n   * Specific element id is passed to click-to-copy elements in the template.\n   * @property elementId\n   * @type {string}\n   */</span>\n  elementId<span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span>\n  <span class=\"token comment\" spellcheck=\"true\">/**\n   * The `tagName` is passed to specify header size.\n   * @property tagName\n   * @type {string}\n   */</span>\n  tagName<span class=\"token punctuation\">:</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Properties</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ---------------------------------------------------------------------------</span>\n  <span class=\"token comment\" spellcheck=\"true\">/**\n   * @property classNames\n   * @type {string}\n   * @default 'fh-header'\n   */</span>\n  classNames<span class=\"token punctuation\">:</span> <span class=\"token string\">'fh-header'</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Method</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ---------------------------------------------------------------------------</span>\n  <span class=\"token comment\" spellcheck=\"true\">/**\n   * Copies the current url to the clipboard by updating the value of the off-screen\n   * input to the url, selecting it and then calling exec copy.\n   * @method _copyToClipboard\n   */</span>\n  <span class=\"token function\">_copyToClipboard</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> copyInput <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">$</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token string\">`#</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'elementId'</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">-input`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    copyInput<span class=\"token punctuation\">.</span><span class=\"token function\">val</span><span class=\"token punctuation\">(</span>location<span class=\"token punctuation\">.</span>href<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    copyInput<span class=\"token punctuation\">.</span><span class=\"token function\">select</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    document<span class=\"token punctuation\">.</span><span class=\"token function\">execCommand</span><span class=\"token punctuation\">(</span><span class=\"token string\">'copy'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\" spellcheck=\"true\">// Show the copied message and hide after 1.5s</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">set</span><span class=\"token punctuation\">(</span><span class=\"token string\">'_active'</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'isDestroyed'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">set</span><span class=\"token punctuation\">(</span><span class=\"token string\">'_active'</span><span class=\"token punctuation\">,</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1500</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Actions</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ---------------------------------------------------------------------------</span>\n  actions<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\" spellcheck=\"true\">/**\n     * Copy to clipboard method must run in next event loop so that the anchor click\n     * can bubble and the browser can update the url before we grab it and copy it.\n     * @method handleCopy\n     * @action\n     */</span>\n    <span class=\"token function\">handleCopy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">next</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'_copyToClipboard'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\" spellcheck=\"true\">// Layout</span>\n  <span class=\"token comment\" spellcheck=\"true\">// ---------------------------------------------------------------------------</span>\n  layout<span class=\"token punctuation\">:</span> hbs<span class=\"token template-string\"><span class=\"token string\">`\n    &lt;div class='fh-header-anchor'>\n      {{! Anchor to copy url id }}\n      {{#if fountainhead.meta.hashRouting}}\n        {{! For Hash Location consumers, a link-to with just a query-params creates\n            a link to this page with the correct &amp;id= query param }}\n        {{#link-to (query-params id=elementId) click=(action 'handleCopy')}}\n          {{fountainhead-svg svgId='link'}}\n        {{/link-to}}\n      {{else}}\n        &lt;a href={{concat '#' elementId}} onclick={{action 'handleCopy'}}>\n          {{fountainhead-svg svgId='link'}}\n        &lt;/a>\n      {{/if}}\n      {{! 'Copied' message that is shown after clicking anchor copy button }}\n      &lt;div class='fh-header-copied{{if _active ' active'}}'>\n        Copied\n      &lt;/div>\n      {{! Off screen input with injected copy value }}\n      &lt;input type='text' class='fh-header-copy-target' value='' id='{{elementId}}-input' />\n    &lt;/div>\n    {{! Header Text }}\n    {{yield}}\n  `</span></span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code></pre>"
}