All files / stories location-element.stories.js

100% Statements 81/81
100% Branches 2/2
100% Functions 1/1
100% Lines 81/81

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 821x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import '../src/custom-element.js';
import '../src/location-element.js';
 
export default
{   title: 'location-element', component: 'location-element', argTypes:
    {        title: { control: 'text', defaultValue: 'page load time' }
    ,          tag: { control: 'text', defaultValue: 'ls-test-component' }
    // location-element props
    ,        src: { control: 'text', type: { name: 'string', required: false }, defaultValue: `` }
    ,        slice: { control: 'text', type: { name: 'string', required: true }, defaultValue: `window-url` }
    ,         live: { control: 'boolean', type: { name: 'boolean', required: true }, defaultValue: false, description: 'update when window.location changes' }
    }
,   parameters: { controls: { sort: 'requiredFirst' } },
};
 
function Template( { title, tag, src, slice, live } )
{
    return `
        <fieldset>
            <legend>${ title }</legend>
            <h4>Change the URL by one of the methods bellow</h4>
            <div>
                <a href="#a1" target="_self">#a1</a>
                <a href="#a2" target="_self">#a2</a>
 
                <button id="pushstate" onclick="history.pushState( {},'', 'location.html?pushstate')"
                        >history.pushState</button>
                <button id="replacestate" onclick="history.replaceState( {},'', 'location.html?replaceState#a3')"
                        >history.replaceState</button>
            </div>
            <hr/>
            <custom-element
                tag="${ tag }"
                hidden
                >
                <template>
                    <location-element slice="${ slice }" ${live?'live':''} ${src?'src="https://my.example/?a=1&b=2#3"':''}></location-element>
                    <html:table xmlns:html="http://www.w3.org/1999/xhtml">
                        <xsl:for-each select="//slice/${slice}/@*">
                            <html:tr>
                                <html:th><xsl:value-of select="name()"/></html:th>
                                <html:td><xsl:value-of select="."/></html:td>
                            </html:tr>
                        </xsl:for-each>
                        <html:tr>
                            <html:th><u>params</u></html:th>
                            <html:th></html:th>
                        </html:tr>
                        <xsl:for-each select="//slice/${slice}/params/*">
                            <html:tr>
                                <html:th><xsl:value-of select="name()"/></html:th>
                                <html:td><xsl:value-of select="."/></html:td>
                            </html:tr>
                        </xsl:for-each>
                    </html:table>
                </template>
            </custom-element>
            <${ tag }></${ tag }>
      </fieldset>
  `;
}
 
export const LocationElementLoad = Template.bind( {} );
LocationElementLoad.args =
{
};
 
export const LocationElementLive = Template.bind( {} );
LocationElementLive.args =
{   title: 'Live update',
     live: true,
      tag: 'ls-live-component',
};
 
export const LocationElementSrc = Template.bind( {} );
LocationElementSrc.args =
{   title: 'SCR attribute',
     live: true,
      tag: 'location-src-component',
      src: 'https://my.example?a=1&b=2#3',
};