UNPKG

skinny-widgets

Version:

skinnable web components widgets collection

488 lines (407 loc) 34.1 kB
<html class="sk-auto-reg"> <head> <link rel="shortcut icon" href="#" /> </head> <body> <script src="/compat/dialog-polyfill.js"></script> <sk-config theme="jquery" base-path="/src" lang="ru" id="configEl" routes='{"page-a": {"PageAConfA": "/page-a-confa.js"}, "page-b": "page-b-confa"}' log-lv="error,debug,info,warn" ></sk-config> <sk-alert closable type="error">Alarm ! Alarm !</sk-alert> <sk-checkbox id="myCheckbox">Checkbox</sk-checkbox> <sk-switch>Yo</sk-switch> <sk-button id="ffButton" button-type="primary">ff</sk-button> <my-view use-shadow-root="false" id="myView"> <sk-button tpl-vars='{"foo": "bar"}' button-type="primary" id="myButton"> Show Dialog <template id="SkButtonTpl"> <link rel="stylesheet" href="{{ themePath }}/theme.css"> <link rel="stylesheet" href="{{ themePath }}/jquery-theme.css"> <button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button" data-foo="{{ foo }}"><span class="ui-button-text"><slot name="label"></slot><slot></slot></span></button> </template> </sk-button> <sk-dialog id="myDialog" title="Some Title" type="confirm" open> <sk-tabs> <sk-tab title="General"> <div> <sk-alert id="myAlert" closable type="error">Alarm ! Alarm !</sk-alert> <sk-button id="clearBtn">Clear</sk-button> <sk-form id="myForm"> <sk-datepicker id="myDatepicker"></sk-datepicker> <sk-input type="text" name="alternativeSelector" value="">alternativeSelector</sk-input> <sk-switch id="mySwitch2" value="barbar"></sk-switch> <sk-checkbox id="myCheckbox" value="fofofo"></sk-checkbox> <sk-select id="mySelect"> <span slot="label">Select</span> <optgroup label="foo"> <option value="default">Default</option> </optgroup> <optgroup label="bar"> <option value="antd">Antd</option> <option value="jquery">Jquery</option> </optgroup> </sk-select> </sk-form> </div> <div> <sk-input type="text" name="alternativeSelectorInsert" value="">alternativeSelectorInsert</sk-input> </div> <div> <sk-input type="text" name="basketBtnSticky" value="">basketBtnSticky</sk-input> </div> <div> <sk-input type="text" name="basketBtnStickyOffset" value="">basketBtnStickyOffset</sk-input> </div> </sk-tab> <sk-tab title="Service"> <div> <sk-input type="text" name="serviceUploadEnabled" value="">serviceUploadEnabled</sk-input> </div> <div> <sk-input type="text" name="serviceType" value="">serviceType</sk-input> </div> <div> <sk-input type="text" name="serviceUrl" value="">serviceUrl</sk-input> </div> <div> <sk-input type="text" name="serviceLogin" value="">serviceLogin</sk-input> </div> <div> <sk-input type="text" name="servicePassword" value="">servicePassword</sk-input> </div> </sk-tab> <sk-tab title="Notifications"> <div> <sk-input type="text" name="notificationEmailEnabled" value="">notificationEmailEnabled</sk-input> </div> <div> <sk-input type="text" name="notificationEmail" value="">notificationEmail</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPHost" value="">notificationEmailSMTPHost</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPPort" value="">notificationEmailSMTPPort</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPFrom" value="">notificationEmailSMTPFrom</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPAuth" value="">notificationEmailSMTPAuth</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSSLEnabled" value="">notificationEmailSSLEnabled</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPDebug" value="">notificationEmailSMTPDebug</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPUser" value="">notificationEmailSMTPUser</sk-input> </div> <div> <sk-input type="password" name="notificationEmailSMTPPassword" value="">notificationEmailSMTPPassword</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPReplyAddress" value="">notificationEmailSMTPReplyAddress</sk-input> </div> <div> <sk-input type="text" name="notificationEmailSMTPReplyPersonal" value="">notificationEmailSMTPReplyPersonal</sk-input> </div> </sk-tab> </sk-tabs> <template id="SkDialogFooterTpl"> <div> <sk-button action="cancel" type="button">Cancel</sk-button> <sk-button action="save" type="button" button-type="primary">Save</sk-button> </div> </template> </sk-dialog> </my-view> <!--<sk-button id="myButton2" button-type="primary"> Show Dialog2 </sk-button>--> <br /> <br /> <sk-input id="myInput1" list="myDataList" placeholder="This is the placeholder"> Input Label </sk-input> <!-- <sk-spinner id="mySpinner"></sk-spinner> <br /> <sk-input id="myInput1" list="myDataList" placeholder="This is the placeholder"> Input Label </sk-input> <sk-button id="toggleButton" button-type="primary"> <span slot="label">Toggle</span> </sk-button> --> <sk-switch id="mySwitch"></sk-switch> <sk-select id="mySelect" value="antddd"> <optgroup label="foo"> <option value="default">Default</option> </optgroup> <optgroup label="bar"> <option value="antd">Antd</option> <option value="jquery">Jquery</option> </optgroup> </sk-select> <sk-select value="foo"> <span slot="label">Select Label</span> <option>foo</option> <option>bar</option> </sk-select> <sk-menu item-tn="cbr-menu-item"> <cbr-menu-item>Foo</cbr-menu-item> <cbr-menu-item>Bar</cbr-menu-item> </sk-menu> <script> fetch('/dist/jquery.templates.html') .then(response => response.text()) .then(text => { document.body.insertAdjacentHTML('beforeend', text); }); </script> <script type="module"> import { SkConfig } from './node_modules/sk-core/src/sk-config.js'; import { SkCheckbox } from './node_modules/sk-checkbox/src/sk-checkbox.js'; import { SkButton } from './node_modules/sk-button/src/sk-button.js'; import { SkDialog } from './node_modules/sk-dialog/src/sk-dialog.js'; import { SkTabs } from './node_modules/sk-tabs/src/sk-tabs.js'; import { SkSelect } from './node_modules/sk-select/src/sk-select.js'; import { SkSpinner } from './node_modules/sk-spinner/src/sk-spinner.js'; import { SkInput } from './node_modules/sk-input/src/sk-input.js'; import { SkForm } from './node_modules/sk-form/src/sk-form.js'; import { SkAlert } from './node_modules/sk-alert/src/sk-alert.js'; import { SkSwitch } from './node_modules/sk-switch/src/sk-switch.js'; import { SkTree } from './node_modules/sk-tree/src/sk-tree.js'; import { SkAccordion } from './node_modules/sk-accordion/src/sk-accordion.js'; import { SkNavbar } from './node_modules/sk-navbar/src/sk-navbar.js'; import { SkApp } from './node_modules/sk-app/src/sk-app.js'; myInput1.plugins = [ { onEventStart: (event) => { console.log('event start hook', event); }, onAttrChange: (name, oldValue, newValue) => { console.log('attr change', name, oldValue, newValue); }, onRenderStart: () => { console.log('render start hook'); }, onRenderEnd: () => { console.log('render end hook'); } } ]; customElements.define('sk-config', SkConfig); customElements.define('sk-checkbox', SkCheckbox); customElements.define('sk-button', SkButton); customElements.define('sk-dialog', SkDialog); customElements.define('sk-tabs', SkTabs); customElements.define('sk-select', SkSelect); customElements.define('sk-spinner', SkSpinner); customElements.define('sk-input', SkInput); customElements.define('sk-form', SkForm); customElements.define('sk-alert', SkAlert); customElements.define('sk-switch', SkSwitch); customElements.define('sk-tree', SkTree); customElements.define('sk-accordion', SkAccordion); customElements.define('sk-navbar', SkNavbar); customElements.define('sk-app', SkApp); myButton.addEventListener('rendered', (event) => { console.log('myButton rendered', myButton.renderTimest); }); myButton.addEventListener('click', (event) => { myDialog.open(); //myInput1.setAttribute('value', '111'); }); /* myButton2.addEventListener('click', (event) => { myDialog2.open(); //myInput1.setAttribute('value', '111'); });*/ /* myDialog.onconfirm = function (event) { console.log('confirmed'); this.close(); };*/ myDialog.addEventListener('confirm', function(event) { console.log('confirmed'); }); myDialog.oncancel = function(event) { console.log('cancelled'); this.close(); }; /* myDialog.addEventListener('click', function(event) { console.log('click'); });*/ /* myDialog2.onconfirm = function (event) { console.log('confirmed'); this.close(); }; myDialog2.oncancel = function (event) { console.log('cancelled'); this.close(); };*/ import { SkElement } from './node_modules/sk-core/src/sk-element.js'; import { SkComponentImpl } from "./node_modules/sk-core/src/impl/sk-component-impl.js"; import { CompRegistry } from "./node_modules/sk-core/src/comp-registry.js"; export class MyView extends SkElement { get impl() { if (! this._impl) { class MyImpl extends SkComponentImpl { } this._impl = new MyImpl(this); } return this._impl; } static get observedAttributes() { return ['open']; } onAttrChanged() { console.log('on attr changed by plugin'); } connectedCallback() { super.connectedCallback(); console.log(this.tr('Hello, {{ username }}', { username: 'John'})) } } window.MyView = MyView; myDialog.plugins = [ { onAttrChange: (name, oldValue, newValue) => { console.log('dialog attr change', name, oldValue, newValue); }, onRenderStart: () => { console.log('render start hook'); }, onRenderEnd: () => { console.log('render end hook'); } } ]; window.registry = new CompRegistry(); registry.wire({ /* SkConfig: { def: SkConfig, is: 'sk-config' }, SkButton: { def: SkButton, is: 'sk-button' }, SkDialog: { def: SkDialog, is: 'sk-dialog' },*/ translations: { val: { 'Hello, {{ username }}': 'Привет, {{ username }}' }}, MyView: { def: MyView, //deps: { i18n: 'translations'}, connections: [ { sourceType: 'attr', source: 'open', to: '#myDialog', targetType: 'method', target: 'open' }, { sourceType: 'prop', source: 'open', to: '#myDialog', targetType: 'method', target: 'open' }, { from: '#myButton', to: '#myDialog', targetType: 'method', target: 'open' } ], plugins: [ { onAttrChange: function(event) { console.log('attr change hook', event); }, onRenderEnd: function(event) { console.log('rendered with plugin'); } } ], is: 'my-view' }, }); </script> <!--<sk-registry> <sk-registry-item key="SkConfig" defName="SkConfig" is="sk-config" full-path="/node_modules/sk-core/src/sk-config.js"></sk-registry-item> <sk-registry-item key="SkButton" defName="SkButton" is="sk-button" full-path="/node_modules/sk-button/src/sk-button.js"></sk-registry-item> <sk-registry-item key="SkInput" defName="SkInput" is="sk-input" full-path="/node_modules/sk-input/src/sk-input.js"></sk-registry-item> <sk-registry-item key="SkAlert" defName="SkAlert" is="sk-alert" full-path="/node_modules/sk-alert/src/sk-alert.js"></sk-registry-item> <sk-registry-item key="SkSelect" defName="SkSelect" is="sk-select" full-path="/node_modules/sk-select/src/sk-select.js"> </sk-registry-item> <sk-registry-item key="SkForm" defName="SkForm" is="sk-form" full-path="/node_modules/sk-form/src/sk-form.js"> </sk-registry-item> <sk-registry-item key="SkSwitch" defName="SkSwitch" is="sk-switch" full-path="/node_modules/sk-switch/src/sk-switch.js"> </sk-registry-item> <sk-registry-item key="SkCheckbox" defName="SkCheckbox" is="sk-checkbox" full-path="/node_modules/sk-checkbox/src/sk-checkbox.js"> </sk-registry-item> <sk-registry-item key="SkDialog" defName="SkDialog" is="sk-dialog" full-path="/node_modules/sk-dialog/src/sk-dialog.js"> <sk-registry-item key="SkMenu" defName="SkMenu" is="sk-menu" full-path="/node_modules/sk-menu/src/sk-menu.js"> </sk-registry-item> <sk-registry-item key="SkTabs" defName="SkTabs" is="sk-tabs" full-path="/node_modules/sk-tabs/src/sk-tabs.js"> <sk-registry-connection from="#clearBtn" to="#myForm" target-type="method" target="reset"></sk-registry-connection> </sk-registry-item> <sk-registry-item key="MyViewCfg" val='{"buttonSl": "#dialogButton", "dialogSl": "#dialog"}'></sk-registry-item> <sk-registry-item key="MyView" defName="MyView" is="my-view" plugins='[{"onAttrChange": "onAttrChanged"}]' deps='{"viewCfg": "MyViewCfg"}'> <sk-registry-connection from="#myButton" to="#myDialog" target-type="method" target="open"></sk-registry-connection> </sk-registry-item> <sk-registry-connection from="#ffButton" to="#myCheckbox" target-type="togglattr" target="checked"></sk-registry-connection> </sk-registry>--> <!--<script type="module"> import { SkRegistry } from "./node_modules/sk-core/src/sk-registry.js"; customElements.define('sk-registry', SkRegistry); </script>--> <!--<script defer src="/node_modules/es-module-shims/dist/es-module-shims.js"></script> <script type="importmap-shim"> { "imports": { "dateutils": "/node_modules/dateutils/src/global.js", "dateutils/": "/node_modules/dateutils/" } } </script> <script type="module-shim"> import { SkDatePicker } from '/src/sk-datepicker.js'; customElements.define('sk-datepicker', SkDatePicker); </script>--> <!-- <sk-navbar id="navbar1" align="left" auto-open panel clength="900px"> Some top Contents Bar <template id="SkNavbarPanelTpl"> <a href="foo">foo</a> <a href="bar">bar</a> </template> </sk-navbar> <sk-navbar id="navbar2" align="bottom" auto-open panel> Some Bottom Contents Bar </sk-navbar> <sk-button id="navBtn">Navbar</sk-button> <script> navBtn.addEventListener('click', () => { if (navbar.hasAttribute('open')) { navbar.removeAttribute('open'); } else { navbar.setAttribute('open', ''); } }) </script> --> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse non tincidunt quam. Pellentesque lacinia dictum placerat. Vestibulum pellentesque, lacus a ornare rhoncus, ipsum nisi posuere arcu, et convallis nibh lacus eu dolor. Fusce pellentesque auctor sodales. Vivamus in convallis purus. Aliquam massa tellus, rhoncus sit amet sem in, sagittis volutpat velit. Aenean eu diam vel lectus aliquet porta. In at enim diam. Maecenas ullamcorper leo sed nisl venenatis blandit. Donec nec diam tortor. Suspendisse potenti. Nunc rutrum justo quis libero lacinia, eget ornare libero lacinia. Aenean vel ipsum nisi. Integer blandit arcu turpis, at consequat dolor dignissim in. Nullam eget euismod purus, sed semper mauris. In blandit libero enim, nec vulputate augue finibus et. Duis vel lorem risus. Vestibulum tristique lorem non neque efficitur maximus. Etiam egestas eros et placerat facilisis. Duis vestibulum, metus in molestie interdum, urna est tincidunt augue, in pellentesque lorem tortor quis quam. Vestibulum a mi sit amet eros dignissim aliquet a ut nunc. Fusce sem ex, rutrum ac feugiat id, consequat eu lacus. Donec in neque id turpis malesuada dignissim et feugiat turpis. Aliquam accumsan orci libero, posuere rutrum risus finibus quis. Phasellus pretium auctor leo vitae tempus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tempor aliquam ligula accumsan cursus. Ut in turpis varius, aliquet justo et, tempus est. Duis hendrerit eu leo eu tempor. Vivamus venenatis tincidunt mi, at pretium mauris bibendum sit amet. Pellentesque dictum tortor in viverra tristique. Vestibulum id est eget elit vestibulum mollis nec at risus. Etiam congue metus at dolor porta, et pharetra sem ultricies. Nam posuere urna a massa sollicitudin consectetur. Curabitur tellus tortor, varius et diam nec, laoreet pulvinar nibh. Integer nec laoreet mauris. Cras bibendum dignissim orci, id auctor sapien finibus sed. Nulla sodales eleifend mauris et lobortis. Morbi mattis non ex eu iaculis. Fusce justo quam, malesuada nec lacinia vitae, porta id dui. Praesent vel congue dui, sit amet malesuada metus. Maecenas ut turpis pulvinar, egestas nisi ut, pretium enim. Donec nec libero vel ex fringilla hendrerit. Proin ornare leo odio, vitae euismod libero dictum eu. Vestibulum cursus sagittis urna quis posuere. Nullam vel porttitor massa, id tincidunt tellus. Nunc eu pellentesque eros, ac pulvinar libero. Quisque gravida sapien eget nibh suscipit elementum. Phasellus euismod ullamcorper mauris ut pulvinar. Integer vulputate turpis libero, quis consectetur metus accumsan vel. Etiam ex sem, gravida volutpat mauris vel, accumsan facilisis diam. Pellentesque vel sollicitudin nisl, at varius metus. Morbi urna lacus, venenatis eu scelerisque vel, viverra in ipsum. Curabitur eu lacus pharetra, ornare augue nec, tincidunt lorem. Phasellus hendrerit, mi nec iaculis ornare, nunc dui congue nisl, vel sodales enim urna vitae nisl. Praesent venenatis arcu ut mollis posuere. Fusce feugiat massa eget posuere vestibulum. Vestibulum viverra odio consequat felis ultrices imperdiet. Pellentesque tempor arcu quis faucibus pulvinar. Ut dapibus, felis eu auctor vehicula, magna sem semper orci, vel euismod erat metus id lorem. Sed lacinia nec nisl sed placerat. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam condimentum ex nec faucibus mattis. Proin bibendum, nisi quis luctus fringilla, diam ipsum sagittis nulla, non rutrum ex arcu et arcu. Aenean nisl justo, euismod eu scelerisque id, euismod non tellus. Pellentesque enim ipsum, condimentum non tristique a, lobortis ac nisi. Ut nisi metus, bibendum non dolor sed, luctus lacinia orci. In interdum urna et pretium accumsan. Maecenas et laoreet mi. Integer vitae consectetur est. Nulla a nunc lacus. Donec facilisis, diam id viverra porttitor, libero risus bibendum eros, id tristique dui magna quis lectus. Praesent elementum laoreet nibh, id maximus quam venenatis in. Aenean vel pharetra elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Ut nunc erat, pulvinar et lacinia rhoncus, dignissim eget lacus. Pellentesque lobortis lorem nec massa commodo, id pellentesque erat ullamcorper. Donec pulvinar nibh ultrices, porttitor nisl vel, luctus ipsum. Etiam molestie id nisi luctus eleifend. Duis accumsan, nisi eu auctor lacinia, nisl nunc sagittis nunc, et consectetur nisi turpis sed sem. Phasellus est purus, lacinia at pharetra ac, blandit non felis. Aenean scelerisque, quam vitae malesuada ullamcorper, tortor tortor ultrices sem, at rhoncus est nulla ut metus. Nam a dignissim dolor, ut scelerisque dolor. In porttitor varius risus ut imperdiet. Cras ac ante lorem. Curabitur accumsan mi quis accumsan tincidunt. Sed dictum lectus nec dolor ultricies mollis. Nulla eget metus ac nisl ultricies convallis id vel urna. Nullam non metus quis justo venenatis commodo a ut neque. Nam posuere nunc vitae ornare ultrices. Etiam arcu nunc, fringilla eget mollis sed, molestie non tellus. Mauris sollicitudin pellentesque odio, id congue justo consectetur quis. Quisque id dolor id diam luctus dapibus ac in elit. Nunc lectus magna, fringilla ac sapien in, aliquet aliquam ante. Mauris non pretium lectus, sed consequat massa. Integer orci sem, imperdiet nec porttitor ut, dapibus sed sem. Pellentesque tempor odio odio, in mattis tortor imperdiet vel. Sed at hendrerit turpis, nec tincidunt sem. Phasellus hendrerit placerat lorem et tincidunt. Ut dui ex, fermentum ut rhoncus quis, iaculis non ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dolor purus, aliquet eu imperdiet non, tincidunt sed tortor. Mauris ligula massa, tempus eu facilisis vel, dignissim non nibh. Morbi et placerat sem. In tortor ex, tristique ut sem vitae, elementum dignissim nibh. Sed quis neque quam. Sed quis euismod purus. Suspendisse quam ex, posuere nec sapien scelerisque, vulputate cursus magna. Phasellus sagittis sem odio, non suscipit mauris venenatis nec. Aliquam a euismod quam. Duis iaculis turpis ut sem egestas, eu venenatis ante suscipit. Suspendisse porttitor interdum ante, at pretium quam sagittis sed. Fusce mattis, nunc et luctus interdum, purus tellus lacinia sapien, sit amet imperdiet nibh diam vel arcu. Vestibulum vitae venenatis sapien. Morbi iaculis, nulla a mattis elementum, sapien quam accumsan mauris, eget efficitur metus velit eu nulla. In vel nisl eget erat volutpat convallis non ac massa. Vivamus eros arcu, tincidunt eu volutpat at, blandit non dui. Donec bibendum, ligula sit amet feugiat lacinia, orci quam volutpat nunc, non vestibulum libero sem id orci. Cras erat sem, dignissim dapibus gravida sit amet, porta ac ligula. Donec ultricies, justo ut cursus consectetur, erat ipsum tristique quam, vitae lacinia odio risus vitae augue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam ac magna accumsan, vestibulum ligula non, convallis nulla. Aliquam erat volutpat. Aliquam quam orci, aliquam nec ultrices et, euismod auctor diam. Donec efficitur mi mi, vel ullamcorper justo ornare semper. Cras vitae lobortis augue, in mollis leo. Quisque non felis ullamcorper sapien efficitur aliquet. Donec quis magna placerat, aliquam tortor a, placerat ex. Curabitur diam tellus, venenatis ac quam et, tincidunt placerat neque. Proin euismod gravida lacus, commodo gravida ex dapibus a. Duis luctus vel nisl non porttitor. Nullam ante tortor, sagittis scelerisque diam a, blandit pellentesque lorem. Vestibulum neque enim, luctus ac dolor bibendum, convallis pellentesque massa. In commodo dolor nibh. Vestibulum nec tellus congue, accumsan turpis posuere, posuere diam. Integer nulla enim, auctor quis nulla at, faucibus luctus enim. Vestibulum imperdiet bibendum odio, quis mattis magna pulvinar vitae. Etiam tristique dui vel felis placerat ultrices eu vitae augue. Pellentesque tristique a arcu vitae tincidunt. Aliquam erat volutpat. Duis luctus elit tellus, id tempor sapien laoreet quis. Nulla a ipsum tincidunt, congue odio eget, iaculis quam. Morbi pellentesque ullamcorper ligula, vel consequat mi aliquet quis. Nullam nunc diam, suscipit eu ultricies in, accumsan nec orci. Duis pulvinar fringilla pellentesque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus at lacus elit. Vivamus semper semper mi laoreet aliquet. Vivamus venenatis semper pulvinar. Nulla malesuada velit viverra tortor tempor, ut pharetra elit auctor. Vestibulum eu bibendum dui. Vivamus eget urna mauris. Donec vehicula felis risus, a finibus lorem efficitur quis. Quisque lectus tellus, ultricies eu mauris lacinia, sodales venenatis ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus posuere iaculis facilisis. Donec non erat eu enim pretium volutpat eget id velit. Nunc cursus porttitor augue. Morbi finibus libero eget semper tincidunt. Mauris dignissim ante erat, ut blandit mi eleifend ullamcorper. Sed posuere euismod urna vel gravida. In hac habitasse platea dictumst. Curabitur libero magna, congue sit amet diam nec, sodales tempor risus. Sed eget lectus nec tellus consequat pretium. Ut varius velit sed sem efficitur bibendum. Quisque at eros non metus tristique ultricies. Curabitur sit amet enim tincidunt, ultrices neque non, posuere velit. Etiam sit amet urna eu sapien consequat fermentum. Quisque venenatis dignissim nisl. Sed auctor et eros id posuere. Etiam cursus feugiat quam, eu rhoncus massa consectetur non. Nam eget finibus magna. Maecenas ac consectetur elit. Pellentesque eu urna lacus. Nam at bibendum libero. Nam dapibus, diam ac venenatis interdum, mauris libero hendrerit dolor, in cursus eros felis quis augue. Aenean pharetra vitae sapien at dapibus. Vivamus non neque sit amet nunc aliquet accumsan at eget urna. Sed vel consequat nisl. Praesent vehicula, eros quis gravida convallis, purus lacus condimentum urna, at varius dui elit ac nisl. Pellentesque eros urna, tincidunt ut porta placerat, semper quis mi. Phasellus eu mi sed arcu rutrum scelerisque. Fusce elit diam, interdum eget molestie vitae, cursus eu mi. Nunc mollis arcu in dolor scelerisque tincidunt. Etiam molestie bibendum turpis, vitae facilisis leo lacinia a. Vestibulum tellus metus, vehicula ac nisi nec, fringilla tristique est. Aenean bibendum enim orci, et accumsan lacus maximus convallis. Sed a neque ut lorem fermentum tincidunt. Phasellus faucibus convallis turpis tempus pulvinar. Phasellus a neque tortor. Pellentesque porttitor sodales erat vitae egestas. Maecenas sapien ex, mattis et tempus a, efficitur et urna. Morbi purus purus, euismod ut mauris eget, pretium pellentesque nulla. Nam hendrerit sagittis metus vel viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam non nisl vehicula, consequat metus a, gravida neque. Aliquam erat volutpat. Proin feugiat pharetra risus. In at pulvinar lorem. Sed quis faucibus lorem, sit amet elementum velit. Nunc semper neque nec mi convallis, in aliquam justo finibus. Nulla laoreet augue in erat suscipit sollicitudin vel eget lacus. Aliquam egestas eros non metus porta lacinia. Quisque feugiat felis est, quis rutrum elit fermentum mattis. Quisque eu purus velit. Mauris tincidunt odio quis lorem accumsan lacinia. Proin cursus arcu eget eros iaculis, id viverra nulla sodales. Cras at placerat sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse a quam sapien. Morbi elit est, semper ac urna ut, viverra egestas ipsum. Vivamus dictum tortor ante, vitae mollis massa efficitur sed. Duis in risus porta, imperdiet urna in, dapibus orci. Nam sit amet massa ut nisi pulvinar porttitor in sit amet libero. Cras sit amet turpis vel turpis lacinia blandit. Pellentesque hendrerit non mi quis dignissim. Etiam lacinia, augue quis pharetra viverra, purus velit pulvinar nunc, id luctus dolor nunc vel mi. Integer suscipit vitae urna sed gravida. Sed tempor diam tortor, eu eleifend eros condimentum sit amet. Vivamus dignissim quam vitae ante tristique, ac rutrum lorem placerat. Aenean urna ex, congue vel egestas sed, imperdiet sed nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas nec velit a neque imperdiet bibendum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque in cursus arcu, eget tempor nisl. Sed elementum, neque posuere molestie elementum, turpis augue ullamcorper eros, nec feugiat turpis massa vitae arcu. Donec vitae elit arcu. Ut pretium massa ac aliquam porta. Maecenas volutpat metus arcu, et suscipit nisi finibus quis. Mauris dignissim lectus vel massa mattis suscipit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer venenatis, ipsum eu consequat malesuada, mi nulla pretium mi, at commodo risus risus in arcu. Aenean in nibh nec tellus vestibulum hendrerit vitae nec justo. Nulla malesuada enim ac aliquet efficitur. Pellentesque vehicula placerat mauris ut molestie. Nulla a consectetur lectus. Vestibulum id efficitur nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. Cras lacinia ex quis tincidunt dapibus. Donec luctus placerat molestie. Donec libero mi, tempor et elementum sed, auctor vitae sem. Maecenas consectetur odio non orci pretium, ac faucibus diam cursus. Sed consequat metus sit amet lacus pretium malesuada. Vestibulum in ligula pharetra, iaculis risus eu, pellentesque est. Aenean id leo quis eros volutpat vestibulum. Fusce ut purus vel libero tincidunt elementum. Integer sapien justo, cursus pharetra porta et, venenatis nec enim. Sed congue tortor nec lacus cursus pretium. Pellentesque vitae est quis ligula pulvinar volutpat quis in tortor. Cras pulvinar eleifend vehicula. Morbi sit amet urna efficitur leo consequat tincidunt. Duis euismod est ut dolor consequat, vestibulum aliquet leo ullamcorper. Suspendisse ante nibh, tempor et cursus in, dictum ut sapien. Cras ut justo ac metus molestie porttitor. Phasellus tincidunt massa sit amet eros egestas ultrices. In bibendum efficitur mauris non venenatis. Praesent consequat nisl nec neque viverra, sit amet imperdiet arcu porttitor. Mauris ipsum nibh, ultrices efficitur hendrerit id, posuere sed est. Quisque viverra pellentesque sem, ut dapibus lacus. Duis euismod metus sit amet sapien rhoncus, eget cursus arcu efficitur. Morbi a turpis quis risus maximus imperdiet. Curabitur pharetra, magna sed pharetra posuere, purus quam congue elit, id sagittis nisi ex nec enim. Ut ac ante lacinia, ultricies diam vitae, elementum felis. Donec lobortis lacus vehicula tellus ornare malesuada. Curabitur laoreet nisl et sapien consequat, ornare porttitor mi sollicitudin. Integer sit amet hendrerit magna. Quisque gravida lobortis nunc semper ullamcorper. Aliquam semper est ac sagittis euismod. Curabitur vestibulum libero vitae erat sodales, placerat gravida justo fringilla. Duis tincidunt erat et cursus condimentum. Proin consectetur mi eu mi congue sollicitudin. Donec elementum vulputate dapibus. Praesent egestas placerat est et pellentesque. Maecenas felis lacus, molestie a porta eget, hendrerit vel purus. Donec auctor efficitur quam nec dictum. Donec sit amet risus risus. Vestibulum sed quam sit amet sem mattis fringilla non id dolor. Curabitur dolor risus, consequat sed lobortis sed, dapibus ac purus. Morbi non commodo purus. Phasellus neque arcu, posuere ut quam et, interdum ultrices eros. Mauris viverra pellentesque pulvinar. Suspendisse ultrices ornare orci, vel vehicula neque faucibus ac. Phasellus et imperdiet augue. Duis feugiat tempor imperdiet. Suspendisse quis pharetra magna. Vestibulum ullamcorper dapibus mauris id tristique. Integer laoreet vel metus in eleifend. Nulla finibus odio sit amet dui pharetra, ac bibendum velit blandit. Maecenas quis cursus turpis, quis pharetra quam. Mauris justo elit, gravida et nisi vel, pulvinar congue est. Mauris neque purus, sagittis euismod condimentum vel, sollicitudin eu ipsum. Mauris porta, nisl bibendum lacinia feugiat, nulla urna congue massa, sed volutpat felis quam consectetur justo. Suspendisse tincidunt commodo elit at semper. Ut tortor tortor, mollis quis porttitor vel, maximus non ante. Nulla dictum semper magna eu fermentum. Suspendisse potenti. Integer condimentum vulputate convallis. Nulla rutrum dolor enim. Cras ut est turpis. Nulla varius risus a libero mollis, a mollis risus dapibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin eget enim leo. Curabitur sit amet sodales nulla, id mattis augue. Vestibulum vitae lacus ut mauris feugiat suscipit. Integer quis eros vitae tellus placerat tempor. Pellentesque velit arcu, malesuada porta arcu sed, efficitur commodo massa. Vestibulum in lectus nisl. Proin hendrerit tellus sit amet libero sagittis, vel bibendum magna tincidunt. Morbi non venenatis leo. Nunc ornare est ut massa hendrerit rutrum. Curabitur erat turpis, cursus non commodo pharetra, posuere ac ligula. Nunc aliquam orci eros, vitae finibus ligula venenatis ut. Nam vel mi molestie, semper nulla eu, ultricies purus. Ut et ipsum interdum, viverra enim ut, placerat nibh. </body> </html>