Support Forum

This demo shows how to use the card layout and timeline strategy to implement a simple product support forum website.

<p>This demo shows how to use the card layout and timeline strategy to implement a simple product support forum website.</p> <p>Try scrolling through the topics in the grid or change how those topics are displayed using the display button.</p>
<!DOCTYPE html> <html lang="en"> <head> <base href="/dataviewsjs/demos/en/sample/Showcase/SupportForum/purejs/" /> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="keywords" content="card, timeline" /> <meta name="description" content="This demo shows how to use the card layout and timeline strategy to implement a simple product support forum website." /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Support Forum | Showcase | GrapeCity DataViewsJS JavaScript Demos</title> <link href="/dataviewsjs/demos/node_modules/normalize.css/normalize.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/css/base.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/css/bootstrap-snippet.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.core.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.cardlayout.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.grid.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.timeline.min.css" rel="stylesheet" type="text/css" /> <link href="styles.css" rel="stylesheet" type="text/css" /> <!-- Google Tag Manager --> <script> (function(w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-WT462SJ'); </script> <!-- End Google Tag Manager --> <script src="/dataviewsjs/demos/static/js/app-polyfills.min.js" type="text/javascript"></script> <script type="text/javascript"> window.process = { env: { NODE_ENV: 'production', USE_NPM: false, USE_CDN: false, SITE_ROOT: '/dataviewsjs/demos', FRAMEWORK: 'purejs', DVJS_LICENSE_KEY: 'E674186349827489#B0LYWQMpFdP3WSHlVaGdjTFtyLCxUQjdFV5MHey9kTyBnY0pkY6tWcr34caJjSPlEVlR6QpJnZEdjSj9kbkRUZChzMsRFS99mN4ZGO72yK7FXe5tmN59Eai5UM7dEVvgUeYN5MqdUTIpWTpBnSTJEWv24YwoFWr9mWEl6UNVmVMxUd5ckUQdlUNV4MDhENaV5KNNWbJtiSwFUYCVUax4GUuBjZDN7T5dWdDpFNyJjSxJkes3mUt94QrdnMK5mZORGeFZ4QyFTMmdWOWdlMmJ4ZJhTS5MmZatyZ7k5c0JXVB3mWVNke7AFRiojITJCLikjNBNjNzcjI0ICSiwSN8AjN9YjMwUTM0IicfJye35XX3JSWUVVOiojIDJCLiEjdgMlSzdXZpZVY4FGRiojIOJyebpjIkJHUiwiI9MDMykDMggDM8ATOxAjMiojI4J7QiwiIt36YukHdpNWZwFmcn9iKiojIz5GRiwiIj9WSgkHdpNUZwFmcHJiOiEmTDJCLlVnc4pjIsZXRiwiI9gDN7IDO9QzM6gTM4cjNiojIklkI1pjIEJCLi4TPn3UZuJ7cPZTW5hUMtN7MJN6aQFnT5gmd9FEZ4EETlFmW63kU8IGdiRGTJZle5UDbZJHTR34T0JzZoZmbalXQwNmM8EndEFEdSVlMiVnckFmQUJTOahmc7AzRHhlU4I4Vs3kN6lHaHR4LuhWULNIe', SJS_LICENSE_KEY: '*.grapecity.com,E613631884219496#B0qRgJHWSJ7NyBlc8BjNMRHW7g7YldTZXFTQuFnW4hVOCplVSlVV09ERlhEZuVTVKlTazE4Q6VGSw2CdWZUWSVmbjVXbrxmWFVWR8ZzQro7U84WMGdlbuVHb73kS5kjUTN4NvFVdLdXWVR4Nox6Z7UUSysEcXJEMsN6bDN4TxMDVwVmWBRzKxhkTzAXTaJmdD3CRFJTd8R4R6M5RklWa6oUaLlXMwR4R8ZUdtRWVxUUaQh6VXNDdEhlZ7FHR6QXTPJTVvkWcyZnbSdHRtZHcYF6TKN4axYGcZNjTDF7TvFTTr24VqZjVHVjcLd7QkRmdNxkI0IyUiwiI5gDOEF4QGVjI0ICSiwiMzkTO9kTOyMTM0IicfJye35XX3JSSGljQiojIDJCLiITMuYHITpEIkFWZyB7UiojIOJyebpjIkJHUiwiI4MDMyEDMgkDM8ATOxAjMiojI4J7QiwiIt36YukHdpNWZwFmcn9iKiojIz5GRiwiIj9WagkHdpNUZwFmcHJiOiEmTDJCLlVnc4pjIsZXRiwiI6kDN9EjM4gDOxMjNzEjNiojIklkIs4XZzxWYmpjIyNHZisnOiwmbBJye0ICRiwiI34TQ72kNBV6YXpXdGxGWxdHcol4MyUGUHJVbQVHRx44Sw84YxRkS4QnZadDNmhWWxV5QxFlTlZEbBJ5N8gUNQlDb7J6Kl36YHVnb4NGN92UMFdlNORFU8VDSaFlQSVlS4EHTrA5Ohh', }, }; </script> <script src="/dataviewsjs/demos/node_modules/jquery/dist/jquery.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/lodash/lodash.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.common.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.core.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.cardlayout.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.grid.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/dataviews/gc.dataviews.timeline.min.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/static/js/license.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/systemjs/dist/system.js" type="text/javascript"></script> <script src="systemjs.config.js" type="text/javascript"></script> </head> <body class="theme-default"> <!-- Google Tag Manager (noscript) --> <noscript ><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WT462SJ" height="0" width="0" style="display:none;visibility:hidden" ></iframe ></noscript> <!-- End Google Tag Manager (noscript) --> <noscript>You need to enable JavaScript to run this app.</noscript> <template id="topicListTmplCard" style="display: none"> <div class="topic-container-card"> <div class="wrapper"> <div class="idcard" data-column="idcard"></div> <div class="detail"> <div class="title">{{=it.title}}</div> <div class="description">{{=it.description}}</div> <div class="userdetail"> <div class="author">{{=it.user}}</div> <div class="date">{{=it.date}}</div> </div> </div> </div> </div> </template> <template id="topicListTmplList" style="display: none"> <div class="topic-container-list"> <div class="wrapper"> <div class="idcard" data-column="idcard"></div> <div class="detail"> <div class="title">{{=it.title}}</div> <div class="userdetail"> <div class="author">{{=it.user}}</div> <div class="date">{{=it.date}}</div> </div> </div> </div> </div> </template> <template id="topicDetailPostTmpl" style="display: none"> <div class="topic-container"> <div class="wrapper"> <div style="overflow: auto"> <div style="margin: 10px;font-size:15px">{{=it.user}} Say:</div> <div style="margin: 10px;font-size:13px">{{=it.post}}</div> <h5 style="margin-left:10px;">{{=it.date}}</h5> </div> </div> </div> </template> <div id="root"></div> <script type="text/javascript"> System.import('./app.js'); </script> </body> </html>
import DataView, { getControlByElement } from '@grapecity/dataviews.core'; import CardLayout from '@grapecity/dataviews.cardlayout'; import { data } from './data'; import locale from './locale'; import { selectedTopicId, renderTopic } from './topic'; function removeAllHTMLTags(input) { const div = document.createElement('div'); div.innerHTML = input.value; return div.textContent || div.innerText || ''; } const cols = small => { const photoClass = small ? 'employee-photo-small' : 'employee-photo'; return [ { id: 'title', dataField: 'title' }, { id: 'description', dataField: 'description', format: removeAllHTMLTags }, { id: 'idcard', dataField: 'idcard', presenter: `<img class="${photoClass} shadow" src="{{=it.idcard}}"/>`, }, ]; }; const cardCols = cols(false); const listCols = cols(true); const cardOptions = { cardHeight: 130, rowTemplate: '#topicListTmplCard', }; const listOptions = { cardHeight: 80, rowTemplate: '#topicListTmplList', }; const btnClass = (isActive, extra = '') => { const active = isActive ? 'active' : ''; return ['btn', 'btn-default', extra, active].filter(s => !!s).join(' '); }; const layout = new CardLayout(cardOptions); const handleRowClick = e => { const row = e.hitInfo ? e.hitInfo.row : -1; if (row >= 0) { const item = data[row]; window.location.hash = `#/topic/${item.id}`; renderTopic(item.id); } }; window.setView = function setView(view) { $('#disp-cards').removeClass('active'); $('#disp-lists').removeClass('active'); $(view === 'card' ? '#disp-cards' : '#disp-lists').addClass('active'); const dataView = getControlByElement(document.body); _.assign(dataView.options, view === 'card' ? cardOptions : listOptions); dataView.columns = view === 'card' ? cardCols : listCols; dataView.invalidate(); }; function renderApp() { const topicId = selectedTopicId(); if (!isNaN(topicId)) { renderTopic(topicId); return; } let dataView = getControlByElement(document.body); if (dataView) dataView.destroy(); const html = ` <div class="main-container"> <h2>${locale.title}</h2> <div class="topics-container"> <div class="row"> <div class="intro shadow"> <div class="logo"> <img src="${window.process.env.SITE_ROOT}/images/forumlogo.png" /> </div> <div class="content"> <div class="welcome">${locale.welcome}</div> <p class="description">${locale.description}</p> </div> </div> </div> <div class="row"> <div class="sample-options"> <div class="topic">${locale.allTopics}</div> <div class="btn-group"> <div id="disp-cards" class="${btnClass(true)}" onClick="setView('card')"> <span class="demo-icon icon-th" /> </div> <div id="disp-lists" class="${btnClass(false, 'pull-right')}" onClick="setView('list')"> <span class="demo-icon icon-th-list" /> </div> </div> </div> </div> <div class="row gridContainer"> <div id="grid" class="grid shadow"></div> </div> </div> </div>`; const root = document.getElementById('root'); root.innerHTML = html; dataView = new DataView(document.getElementById('grid'), data, cardCols, layout); dataView.rowClick.addHandler(handleRowClick); } renderApp(); $(window).on('popstate', renderApp);
const SITE_ROOT = window.process.env.SITE_ROOT; export const data = [ { id: 1, date: 'January 13,2018 10:05:18', user: 'Peter Lechner', title: 'Scrollbar position – freezed columns/grouped columns', description: '<p>Hello,</p><p>I am having a sheet that has a freeze column and grouped columns.If you collapse/expand the grouped columns the srollbar size and position is not adjusted accordingly.</p> <p>Regards, Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', posts: [ { date: 'January 13,2018 14:00:12', user: 'Peter Lechner', post: '<p>This is also the case if you do not have a freezed column. So collapsing and expanding row/column groups should have an effect on the scrollbar size and position.</p><p>by Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'January 14,2018 16:27:23', user: 'Peter Lechner', post: '<p>Solved myself… you need to set scrollIgnoreHidden(true);</p><p>Regars, Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'January 16,2018 9:35:28', user: 'Reeva', post: '<p>Hello,</p>We are glad to know that your issue is resolved.<p></p><p>Thanks,</p><p>Reeva</p>', idcard: SITE_ROOT + '/images/Reeva.jpg', }, ], }, { id: 2, date: 'July 25,2018 14:05:23', user: 'kudlur', title: 'ExcelIO deployment license', description: '<p>Hello,</p><p>I have a fully licensed SpreadJs 8 with ExcelIO installed locally on my development machine.</p> <p>Now I want to deploy just ExcelIO services to my production server. But when I run“SpreadJS ExcelIO Server Component.exe” on my production server, I get the license manager dialog at the end of installation process, with trial key for 30 days.</p><p>My question is.. Why do I need an other license just to run ExcelIO services on server when I already have a developers license?.</p><p>Than you,<p>Paramesh Kudlur</p>', idcard: SITE_ROOT + '/images/kudlur.jpg', posts: [ { date: 'July 26,2018 12:54:51', user: 'Reeva', post: '<p>Hello Paramesh,</p><p>ExcelIO is part of SpreadJS which could be deployed on a server and yes it needs license for installation of the same on each deployed server, no matter your server or your customer’s server.</p><p>Hence, yes you need another license just to run ExcelIO services on server.</p><p>Thanks,</p><p>Reeva</p>', idcard: SITE_ROOT + '/images/Reeva.jpg', }, { date: 'July 26,2018 16:29:13', user: 'kudlur', post: '<p>Thank You Reeva</p>', idcard: SITE_ROOT + '/images/kudlur.jpg', }, { date: 'July 26,2018 17:12:43', user: 'Reeva', post: '<p>Hello,</p>We are glad to know that your issue is resolved.<p></p><p>Thanks,</p><p>Reeva</p>', idcard: SITE_ROOT + '/images/Reeva.jpg', }, { date: 'October 12,2018 9:12:03', user: 'troy.levissianos', post: ` <p>Hi</p> <p>I’ve got the same issue as Paramesh. I’ve tried to get an answer out of sales since October, but they haven’t responded to my emails. Basically the licensing FAQ atv <a href='https://www.grapecity.com/en/pricing/'>Pricing</a> states that production or test machines don’t require licenses, nor do you need a license when deploying to customer sites. I have SpreadJS integrated into my app, and according to the licensing FAQ, I don’t need a license to deploy it to customer systems. Quoting from licensing FAQ, “The assemblies required to run Spread may be included as part of your product installation at no additional cost”. However I don’t have enough activations to deploy it to my customer’s site.</p><p>How do I deploy it with “at no additional cost” to both my customers and my test/UAT and production machines? </p> <p>Thanks for the help</p><p>Troy</p> `, idcard: SITE_ROOT + '/images/Troy.jpg', }, { date: 'October 13,2018 14:17:26', user: 'Reeva', post: `<p>Hello,</p> <p> Until now, SpreadJS’s Excel Import/Export features required an installed web service till Spread Studio version 8 . From latest Spread Studio version 9, ExcelIO is now a component that enables you to distribute it without license worry and exposes a public API making it easier to work with.</p><p>ExcelIO is not a webservice anymore. It’s a Excel Import and Export component now and is not to be installed on IIS. Please go through this documentation link for the same:-</p> <a href='http://sphelp.grapecity.com/webhelp/SpreadJSWeb/webframe.html#excelservice.html'>Using the Excel Import and Export Component</a> <p>And also please go through installed sample which is ExcelIOSample at this installed location on your machine:- </p> <p>C:\\Program Files (x86)\\GrapeCity\\Spread Studio 9\\SpreadJS\\Javascript\\samples\\ExcelIOSample</p> <p>And also now installing SpreadJS doesn’t require IIS. Please go through this product requirement page for the same:-</p><p>And also now installing SpreadJS doesn’t require IIS. Please go through this product requirement page for the same:-</p> <a href='http://sphelp.grapecity.com/webhelp/SpreadJSWeb/webframe.html#require.html'>Product Requirements</a> <p>Hope it helps.</p><p>Thanks,</p><p>Reeva</p> `, idcard: SITE_ROOT + '/images/Reeva.jpg', }, { date: 'November 16,2018 11:24:52', user: 'troy.levissianos', post: '<p>Hi Reeva</p><p>Sounds good, thanks. Where can I download the non trial version? From my account login I can only get to the trial version.</p><p>Regards</p><p>Troy</p>', idcard: SITE_ROOT + '/images/Troy.jpg', }, { date: 'November 16,2018 16:12:09', user: 'Reeva', post: '<p>Hello Troy,</p><p>You need to mail us.sales@grapecity.com for the licensed version of the same. They will verify if you have license or not and they will then provide with licensed JS files.</p><p>Hope it clarifies.</p><p>Thanks,</p><p>Reeva</p>', idcard: SITE_ROOT + '/images/Reeva.jpg', }, ], }, { id: 3, date: 'May 13,2017 9:19:27', user: 'hlkhan', title: 'Pivot Tables and JSON Document Persistence for SpreadJS', description: '<p>Hi,</p><p>I have couple of questions on SpreadJS here:</p><p>1) Till the latest release of Wijmo-Enterprise.3.20172.48, is there a pivot table support on the SpreadJS.<br />If not, are there any plans to ship it in the next releases?</p><p>2) Is there a recommended (most efficient) way to store .ssjson on the back-end databases, (perhaps in addition XML data-source support would be of extremely helpful in terms of MS-SQL scenarios), although JSON is lightweight but it has its own limitations in terms of XPath / XQuery for cell level updates instead of whole document update (overhead when the size grows exponentially)?</p><p>I have been evaluating the SpreadJS, for a month before I can really propose the widgets for my next big financial excel-like online application.Perhaps, the current legacy system uses technologies like VBA / VSTO, but for online alternate I am quite impressed with SpreadJS, and it is coming out to be overall one of the best excel online widget so far.</p>', idcard: SITE_ROOT + '/images/hlkhan.jpg', posts: [ { date: 'May 14,2017 10:32:01', user: 'manpreetkaur', post: "<p>Hello,</p><p>1. You can create tables in SpreadJS either through code or by using the designer. These tables provide an option to sort and filter the table data. Please refer to the following links which describes the same:</p><a href ='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/tables.html'>HelpCentral Tables</a><br /><a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/spdesigninserttab.html'>HelpCentral Designin Serttab</a><p>You may even refer to the following demo sample which depicts the usage of Tables in SpreadJS.</p><p>2. Currently, SpreadJS does not provides an option to save the SpreadJS to an xml file. You would need to save SpreadJS data and format settings in the ssjson format only. However, we have entered a feature request for the same. It might be implemented in the future releases of SpreadJS if the development team finds it to be feasible.</p><p>Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>", idcard: SITE_ROOT + '/images/manpreetkaur.jpg', }, { date: 'June 4,2017 15:10:39', user: 'MikeCHansen', post: '<p>I will chime in here since I am also evaluating the product and maybe this will be helpful.</p><p>I do not see any “pivot table” support but they do have strong support for the “table” like features of Excel which include filtering and styling. If you have users who want a web based pivot table this is not it. I have not found a good web based pivot so ideally they can add this as a feature down the road.</p><p>As for storage I plan to store the spreadsheet as JSON in the DB probably as just a large string. We are using Oracle and they do have support for a native JSON type but I am not sure I want anyone trying to pull data out of the JSON directly. Instead I am going to be pulling out the meaningful data client side and persisting the “reporting data” as normal DB relational data. In the long run I expect this to be cleaner and less fragile.</p><p>Hope this helps,</p><p>Mike</p>', idcard: SITE_ROOT + '/images/MikeCHansen.jpg', }, { date: 'June 5,2017 10:55:20', user: 'manpreetkaur', post: "<p>Hello,</p><p>We have posted an enhancement request to provide pivot table support in SpreadJS. It might be implemented in the future releases, if the development team finds it to be feasible.</p><p>In the meanwhile, you can even post an enhancement request on our uservoice page (<a href = 'http://wijmo.uservoice.com/'>Wijmo Uservoice</a>) for the same, so that it can be implemented on priority.</p><p>Thanks,</p><p>Manpreet Kaur</p>", idcard: SITE_ROOT + '/images/manpreetkaur.jpg', }, { date: 'August 14,2018 11:37:23', user: 'sandy7564', post: '<p>Hi Manpreet,</p><p>Is pivot table feature is added to the SpredJS? or is there any alternate way to achieve the same, because we have requirement to add pivot table to our application.</p><p>regards, </p><p>Sandy</p>', idcard: SITE_ROOT + '/images/sandy7564.jpg', }, { date: 'August 20,2018 17:01:28', user: 'manpreetkaur', post: '<p>Hello,</p><p>SpreadJS currently does not provides support for the pivot tables. The development team has added the feature request in their todo list. It might be implemented in the future releases of SpreadJS in case they find it to be feasible.</p><p>Unfortunately, we do not have any workaround for this issue currently. We deeply regret the inconvenience caused.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreetkaur.jpg', }, ], }, { id: 4, date: 'September 5,2013 14:27:19', user: 'cvaldes', title: 'SpreadJS Presale Questions', description: '<p>Hi there,</p><p>I have some questions before I purchase SpreadJS.</p><p>1. I need to get the source code of SpreadJS in case I need to make some changes. It will be the main component of my application.I want to host all js in my server. Is this possible?</p><p>2. I need to pass stock prices that come from rest in json format, others from websockets (or similar methods). Is this supported? I need to update live data every 3 seconds with rest and every time there is new data with websockets. Formulas will need to be recalculated with every price update. Is this possible? how?</p><p>3. Is there any integration with highcharts?</p><p>4. I need to create some custom formulas for users so they can do things like =getdata(“Microsoft”,startdate,enddate) or =sum(a1:a5)/4 0r use AND,OR,IF statements. Is this available?</p><p>5. I only need spreadjs – I have no need for the other components. Can I get just spreadjs?Thanks</p>', idcard: SITE_ROOT + '/images/cvaldes.jpg', posts: [ { date: 'September 5,2013 17:12:29', user: 'manpreetkaur', post: ` <p>Hello,</p> <p>Thank you for evaluating SpreadJS. Kindly refer to the responses of your queries below:</p> <p>1. Once you purchase the license for SpreadJS, you can then modify the source code of SpreadJS.</p> <p>2. SpreadJS can load the data in JSON format by using the wijmo.data. Here is the demo sample that binds SpreadJS to live JSON data.</p> <p>3. Currently, SpreadJS does not provides support for HighCharts. But, you can use the HighChart on the same page, on which you are using SpreadJS.</p> <p> Further, you can even display charts in the single cell of SpreadJS with the use of SparkLines. Please refer to the following demo sample that describes the use of Sparklines in SpreadJS. </p> <p> 4. You can easily create custom formulas in SpreadJS with the help of custom functions. Please refer to the following links that describes how you can create custom formulas in SpreadJS:<br/> <a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/formulas.html'> Wijmo Formulas </a><br/> <a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/Spread~$.wijmo.wijspre'> Wijmo Wijspre </a> </p> <p> 5. I would suggest you to contact the sales team, as they would guide you better in such issues. You can contact the sales team at the following email id: sales@wijmo.com. </p> <p>Hope it helps.</p> <p>Thanks,</p> <p>Manpreet Kaur</p> `, idcard: SITE_ROOT + '/images/manpreetkaur.jpg', }, { date: 'September 6,2013 10:29:58', user: 'cvaldes', post: '<p>Thanks. About live data:</p><p>Do you have any examples with websockets or similar?Also, what would be the best way to update the json data every second? I want to show stock prices that are updated every 3-5 seconds so I need to refresh the cells and formulas often.</p><p>I sent emails to sales but they are taking more than a week to answer.</p>', idcard: SITE_ROOT + '/images/cvaldes.jpg', }, { date: 'September 10,2013 16:11:22', user: 'C1_EricP', post: "<p>You may get data from server side every 3-5 seconds by setInterval, and refresh cell value or binding data.</p><a href ='http://jsfiddle.net/ericpeng/EWp6g/'>Jsfiddle</a><p>Hope it help</p>", idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'October 6,2013 14:52:09', user: 'cvaldes', post: '<p>Thanks. Good support. It is a shame your sales people are not as good. I sent a request by email two weeks ago and got no answer. I sent a new one using a different email one week ago and got no answer as well. Not sure I can buy if sales do not reply to my emails</p>', idcard: SITE_ROOT + '/images/cvaldes.jpg', }, { date: 'October 7,2013 12:01:18', user: 'C1_EricP', post: 'Which email addresses did you use? I may help to check if there are some problems.', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, ], }, { id: 5, date: 'February 5,2017 10:12:09', user: 'ulex80', title: 'SpreadJS and charts', description: ` <p> SpreadJS has no Chart in current version, but it is planed in future release.Now SpreadJS has sparkline, it is a simple chart in cell. And SpreadJS also support customize celltype, able to owner draw in cell.Here are some resource you may use as reference: </p> <a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/webframe.html#sparkma'> HelpCentral Spark </a> <a href='http://wijmo.com/demo/spreadjs/samples/ExplorerSample/?widget=Sparkline&sample=Sparkline'> Sparkline Sample </a> <a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/webframe.html#Spread~$.w'> HelpCentral Spread </a> <a href ='http://wijmo.com/demo/spreadjs/samples/ExplorerSample/?widget=CellType&sample=CellType'> CellType Sample </a> <p>Hope it help</p>`, idcard: SITE_ROOT + '/images/ulex80.jpg', posts: [ { date: 'February 6,2017 17:29:11', user: 'C1_EricP', post: "<p>Hello,</p><p>Thank you for evaluating SpreadJS. Kindly refer to the responses of your queries below:</p><p>1. Once you purchase the license for SpreadJS, you can then modify the source code of SpreadJS.</p><p>2. SpreadJS can load the data in JSON format by using the wijmo.data. Here is the demo sample that binds SpreadJS to live JSON data.</p><p>3. Currently, SpreadJS does not provides support for HighCharts. But, you can use the HighChart on the same page, on which you are using SpreadJS.</p><p>Further, you can even display charts in the single cell of SpreadJS with the use of SparkLines. Please refer to the following demo sample that describes the use of Sparklines in SpreadJS.</p><p>4. You can easily create custom formulas in SpreadJS with the help of custom functions. Please refer to the following links that describes how you can create custom formulas in SpreadJS:<br/><a href ='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/formulas.html'>HelpCentral Formulas</a><br/><a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/Spread~$.wijmo.wijspre'>HelpCentral Wijspre</a></p><p>5. I would suggest you to contact the sales team, as they would guide you better in such issues. You can contact the sales team at the following email id: sales@wijmo.com.</p><p>Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>", idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'February 7,2017 10:12:18', user: 'ulex80', post: '<p>Ok, thanks for prompt reply. I’ll play with sparkline and probably will vote for charts with paid license :)</p>', idcard: SITE_ROOT + '/images/ulex80.jpg', }, { date: 'February 7,2017 14:45:29', user: 'ulex80', post: '<p>Sorry, forgot to ask – does spreadjs allow to read charts records from Excel format?</p>', idcard: SITE_ROOT + '/images/ulex80.jpg', }, { date: 'February 7,2017 15:20:23', user: 'C1_EricP', post: '<p>does spreadjs allow to read charts records from Excel format?No, not yet. It will be supported when SpreadJS implement Chart in future.</p>', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'February 9,2017 15:01:39', user: 'rdavi', post: '<p>I also would like to know if there is an ETA on this as it is quite the big deal and selling point to be able to have the charts import and export .</p>', idcard: SITE_ROOT + '/images/rdavi.jpg', }, { date: 'February 11,2017 11:47:21', user: 'C1_EricP', post: 'a probably ETA is at end of this year or beginning of the next year.', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, ], }, { id: 6, date: 'March 10,2018 14:21:14', user: 'Jeb', title: 'Not accepting last zero in decimal value in SpreadJS', description: "<p>While trying to enter a value like '123.020', it is taking only '123.02'it is accepting alpha numeric value like '123ABC.020'.Please help.</p>", idcard: SITE_ROOT + '/images/Jeb.jpg', posts: [ { date: 'March 11,2018 10:19:36', user: 'manpreet', post: '<p>Hello,</p><p>When you enter a numeric value with last digit as zero then it rounds off the value, however in case of alphanumeric value it considers the value as a string and hence does not removes the zero entered at the end.</p><p>You may refer to the attached HTML Page which correctly accepts the last zero in the first cell when the user enters a numeric value. Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'March 11,2018 16:55:21', user: 'Jeb', post: '<p>Hi Manpreet,</p><p>I used the above formatter, cell is allowing only numeric values and if it is not a decimal number, 3 zeros are being added.<br />It is also limiting to 3 decimal values.<br/>I don’t want the limit on decimal values as I may use 4 or 5 decimal values.</p><p>Thanks,</p><p>Surendra.</p>', idcard: SITE_ROOT + '/images/Jeb.jpg', }, { date: 'March 12,2018 14:12:09', user: 'manpreet', post: "<p>Hello,</p><p>The insignificant zeroes at the end of the numeric values are truncated and the value is rounded off. In case you want to display the last zero you would need to set the formatter for the cell. The formatter specified above was a just a sample code. You can create custom formats for the cell and set it as the cell formatter. Please refer to the following links that describes how you can set custom formats to format the cell values:</p><p><a href ='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/webframe.html#cellforma'>HelpCentral Cell Format</a><br/><a href='http://office.microsoft.com/en-us/excel-help/number-format-codes-HP005198679.aspx'>Number Format Codes</a></p><p>You can create and set a custom format string for your cell to achieve the above requirement of displaying 4 or 5 decimal digits along with 0 at the end. Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>", idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'March 12,2018 17:55:58', user: 'Jeb', post: '<p>How to set cell format as a “Text”, which will take numerics as text.</p><p>Thanks,</p><p>Surendra</p>', idcard: SITE_ROOT + '/images/Jeb.jpg', }, { date: 'March 13,2018 10:16:24', user: 'manpreet', post: '<p>Hello,</p><p>I have escalated the issue to the concerned team. I would let you know as soon as I get any information in this regard.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'March 14,2018 15:42:28', user: 'C1_EricP', post: '<p>Same as Excel, use “@”.<br/>sheet.getCell(0, 0).formatter(“@”);</p><p>Hope it helps,</p>', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'March 16,2018 17:10:57', user: 'Jeb', post: '<p>Hi Eric,</p><p>It worked for me.</p><p>Thanks for your help!</p><p>Surendra.</p>', idcard: SITE_ROOT + '/images/Jeb.jpg', }, ], }, { id: 7, date: 'April 10,2018 11:26:59', user: 'luculus', title: 'SpreadJS: dragging cells affects hidden rows (reposting in Customer Support)', description: '<p>Hello,</p><p>On my page I want to use the Wijmo SpreadJS component. My sheet contains filters in the header, so after applying a filter some rows are hidden.</p><p>I have noticed that dragging vertically a cell value accross multiple cells will fill in not only the visible cells, but also the cells that in the hidden rows. This is surprising for a user, because he is assuming that only what is visible will be edited (he might even forgot he applied any filters).<br/>Can this behaviour be disabled in any way?</p><p>Thank you.</p><p>Lucian</p>', idcard: SITE_ROOT + '/images/luculus.jpg', posts: [ { date: 'April 11,2018 16:32:03', user: 'manpreet', post: '<p>Hello,</p><p>I was able to replicate the issue at my end. I have escalated the issue to the concerned team. I would let you know as soon as I get any information in this regard.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'April 14,2018 10:11:34', user: 'luculus', post: '<p>Ok, thank you.</p><p>A quick response from your side will be very appreciated, we’ve spotted this behaviour very late and we need to find a solution as soon as possible.</p>', idcard: SITE_ROOT + '/images/luculus.jpg', }, { date: 'April 16,2018 10:56:23', user: 'manpreet', post: '<p>Hello,</p><p>We apologize for the inconvenience caused. We have already escalated the issue on a high priority to the concerned team. We will get back to you as soon as we hear from the concerned team.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'April 16,2018 15:52:16', user: 'luculus', post: '<p>Not sure if apologises as needed :) . After all, MS Excel does the same. What I hope to find, and hopefully you can help me:<br/>- either a flag in the API to turn the filling of the hidden rows<br/>- either a flag in the API to disable vertical dragging of values (but keep the horizontal ones)<br/>- some code to detect this behaviour and revert back to old values (ideally only of the hidden rows).</p>', idcard: SITE_ROOT + '/images/luculus.jpg', }, { date: 'April 17,2018 10:22:43', user: 'manpreet', post: '<p>Hello,</p><p>I could not observe the same behaviour with MS Excel which was observed with SpreadJS when performing drag fill on a set of filtered rows. When dragging a cell value to the vertically adjacent cells in MS Excel, then the cell value was replaced only in the visible cells and not in the hidden cells. You may refer to the attached video which depicts the same.</p><p>I have requested the concerned team for an update or workaround if possible for this issue. I would let you know as soon as I hear from them.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, ], }, { id: 8, date: 'May 16,2018 14:16:27', user: 'udayab', title: 'json formation', description: '<p>As i am tring to genarate the json string which i want to load to spreadjs manually throught the java code??is this is possible.I getting problem sinece the json string which will be genarated by excelio service or spread designser after calling or saving respectivelly is complex.As i am going to genarate the json string which will be having merge cells ,i need o add spans tags and much other also?my question to you is ,is it possible to genarate json string througth java code for the spread js?if yes please guide me how i can achive this?since i have database data i can not construct the excel sheets out of it and pass it to the excelio service and get the json string which will be the performance issue.so please guide me on this issue.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', posts: [ { date: 'May 16,2018 17:22:34', user: 'udayab', post: '<p>please replay for this issue??</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 17,2018 11:23:45', user: 'manpreet', post: '<p>Hello,</p><p>I would be quite difficult to generate the ssjson string in the format defined by you in the Excel file using the JAVA code. Since, you are merging some of the cells, while applying styles to the other cells, so you would need to manually handle all the tags that SpreadJS uses to design such a layout. Hence, you need to create the ssjson file using Java code, keeping in mind all the styling tags used by SpreadJS.</p><p>You can get an idea of what all tags are used by SpreadJS to generate the ssjson string for a specific layout by loading the sample Excel file into SpreadJS designer and save it to ssjson format.</p><p>The best solution to this issue is to somehow create an Excel file template using the database data, later load it into SpreadJS designer and save the ssjson file. Or if the template for the merged columns remains the same, however only the content of the cells varies depending on the database data, then you can simply create a layout without any data. Later load the layout and put the data in the cells through the javascript code.</p><p>Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'May 19,2018 12:01:22', user: 'udayab', post: '<p>i have tried to generate template using java,but as u said putting data in to indivisual cells using java script code will decrease the performance,broser will not respond in this case.i have tried this also…</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 19,2018 15:22:21', user: 'udayab', post: '<p>if i use 300 t0 400 sheets???</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 19,2018 17:45:39', user: 'manpreet', post: '<p>Hello,</p><p>Could you please share the sample application which you have created above using the java template along with javsacript code and are currently facing the performance issue with.</p><p>It would help us to debug the issue further and guide you ahead so as to overcome the performance issues.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'May 20,2018 10:18:52', user: 'udayab', post: '<p>performance issue will arrive because i will be looping through each and evry cell to put the data.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 20,2018 11:20:19', user: 'udayab', post: '<p>i have constructed the json template in java successfully loaded that json in to spreadjs suceesfully.thanks for your valuable suggetion.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 21,2018 15:29:43', user: 'manpreet', post: '<p>Hello,</p><p>It is good to know that your issue has been resolved. Thank you for sharing your observations with us.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, ], }, { id: 9, date: 'August 7,2017 11:16:39', user: 'udayab', title: 'json object formation as template', description: '<p>I have attached the excel file ,i want to display the data in that format in the spread js sheet.know i am iterating through the json object to display the value in the sheet in the attached file format. but due to lacks of data browser crashes! is there any way in spreadjs so that i can construct the json array as template like attached file and directly set that to the spreadjs sheets like sheet.setDataSource(json)?if its possible please reply for this.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', posts: [ { date: 'August 7,2017 12:01:23', user: 'C1_EricP', post: "<p>You may use SpreadJS Designer to design the document, or even import from the excel file. And then save it as ssjson file, that is a json file, and then you may load the json data into spreadjs by using fromJSON method <br/><a href='http://helpcentral.componentone.com/NetHelp/SpreadHClientUG/webframe.html#json.html'>HelpCentral Json</a><br/>hope it helps,</p>", idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'August 8,2017 11:01:43', user: 'udayab', post: '<p>but to design the excel file here,the problem is the design of the excel file chnges dynamically according to the data i.e DB data in this case how can i do the design for each sheet may be different.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'August 10,2017 16:05:54', user: 'C1_EricP', post: '<p>You just use Designer to design a template, and after load the template into control, you may change any content by using javascript code.</p><p>Hope this help</p>', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'August 10,2017 17:32:12', user: 'udayab', post: '<p>Is it possible to write a code in java like for writing to the spread sheet (MS Excel)using Apache poi to spread designer? this is because i can design the template manualyy since the data changes dynamically each time ,while i have to genarate the spread sheet dynamically???is it possible to create a spreadjs file(ssjsonfile)dynamically by writing to the spread designer sheet?????</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'August 11,2017 12:05:25', user: 'manpreet', post: '<p>Hello,</p><p>As mentioned above Spread designer is a graphical user interface used to design Spread sheets or load Excel files. It would not be possible to use the JAVA code to write something in the Spread designer. You would either need to load the Excel file with all the styles, save it as ssjson and then load it in SpreadJS, to change the content which comes dynamically.</p><p>Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'August 12,2017 14:52:36', user: 'udayab', post: '<p>how to load in to spread designer throgh application means java code???</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'August 12,2017 17:43:32', user: 'manpreet', post: '<p>Hello,</p><p>Your query has been answered at the following link. Kindly refer to the same.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, ], }, { id: 10, data: 'September 5,2017 9:36:17', user: 'john', title: 'spreadjs database interaction', description: '<p>I am using spreadjs spreadsheet in my application. In the user side ui user can change the cell values based on that multiple cells will be updated based on the formula.Upon changes i need to get the address of this each changed cell (row,column) to updated in to the database .Is it possible using event handling?or i need go for any other things?</p>', idcard: SITE_ROOT + '/images/john.jpg', posts: [ { date: 'September 5,2017 14:23:53', user: 'manpreet', post: '<p>Hello,</p><p>As per my understanding you have several cells with different formula and each formula uses the value of one specific cell. Later, when the user changes the value of one cell, the values in all the formula cells are updated as the formulas are recalculated. So, you are looking forward to get the indexes of all the formula cells which are updated.</p><p>Please confirm in case you are referring to the scenario described above as it would help me to escalate the issue to the concerned team for further discussion as there is not a direct way to accomplish the same.</p><p>In case you are referring to a different scenario, then I would request you to elaborate your query further so that I can assist you ahead with this issue.</p><p>Thanks,<br/>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'September 6,2017 16:32:43', user: 'john', post: '<p>Hi ,<br/> Your understanding is correct on the problem,i need to get all the cells indexes which are changed by the formula on the change of the any cell.</p>', idcard: SITE_ROOT + '/images/john.jpg', }, { date: 'September 6,2017 17:43:22', user: 'manpreet', post: '<p>Hello,</p><p>Thank you for the confirmation. I have escalated the issue to the concerned team. I would let you know as soon as I get any information in this regard.</p><p>Thanks,<br/>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'September 7,2017 17:54:39', user: 'john', post: '<p>thank you.</p>', idcard: SITE_ROOT + '/images/john.jpg', }, { date: 'September 9,2017 10:02:34', user: 'manpreet', post: '<p>Hello,</p><p>As per the development team, currently SpreadJS does not provides full dirty cell concept. They are planning to add this ability in the future releases of SpreadJS.</p><p>Currently, as a workaround, you could use getDirtyRows and clearPendingChanges method to simulate the desired behaviour. Please see the sample in SpreadJS product package named MVCSample, it is a simple demo which implement interact with database.</p><p>Hope it helps.</p><p>Thanks,<br/>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, ], }, { id: '11', date: 'November 12,2017 11:01:20', user: 'Peter Lechner', title: 'SpreadJS doesn’t zoom correctly', description: '<p>Hello,</p><p>If you zoom into a worksheet the cell content and the size of the cell do not ajust by the same factor. I have attached screen shots that demostrate the issue.</p><p>Regards, Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', posts: [ { date: 'November 12,2017 14:10:23', user: 'Peter Lechner', post: '<p>The cell content also may exeed the cell space if you zoom in.</p><p>Regards, Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'November 12,2017 16:25:19', user: 'manpreet', post: '<p>Hello,</p><p>I was not able to replicate the issue at my end with the latest version of SpreadJS i.e. 2017v2.13. I would suggest you to test the issue with the latest version of SpreadJS which you can download from the following link.</p><p>Hope it helps. In case the issue still persists, I would request you to provide a sample application which depicts your issue, so that we can replicate and debug the issue further at our end. Please let us know in case you are facing this issue with any specific browser, or any specific machine. Kindly share the machine configuration, if the issue is machine specific.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'November 13,2017 15:17:21', user: 'Peter Lechner', post: "<p>Hello,</p><p>the root cause to this problem is the same as described here:<br/><a href='http://wijmo.com/topic/selected-cells-are-black-after-loading-excel-spreadsheet/page/2/'>Selected Cells Are Black After Loading Excel Spreadsheet</a></p><p>The decimal separator of the DefaultAppUser must be a “.” in the user profile, otherwise the Excel-IO service doesn’t work correctly.</p><p>After changing the decimal separator from “,” to “.” it seems to work now. Anyway I would suggest to fix this issue.</p><p>Regards, Peter</p>", idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'November 15,2017 12:10:46', user: 'Peter Lechner', post: '<p>Hello,</p><p>the root cause to this problem is that the decimal separator of the DefaultAppUser has to be a “.” otherwise the Excel-IO service doesn’t work correctly.</p><p>I have changed the decimal separtor form “,” to “.” and now it seems to work fine. See also the “Black cells” topic which has the same root cause.</p><p>Best Regards,</p><p>Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'November 17,2017 16:02:49', user: 'manpreet', post: '<p>Hello,</p><p>Unfortunately, I am still not able to replicate the issue at my end. I changed the system’s regional settings to French, so that the decimal separator symbol for the default user changes to comma(“,”). I later, installed ExcelIO service on the same machine. However, the zoom functionality of SpreadJS worked without any issues.</p><p>Kindly refer to the attached video which depicts the steps followed and the output observed at my end. I have also attached a screenshot which depicts the decimal separator symbol set on my machine. Please let me know if I missed any of the steps that would help me to replicate the issue at my end and debug it further.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'November 17,2017 17:35:22', user: 'Peter Lechner', post: '<p>Hello,</p><p>it’s not the decimal separator of the default user but the “DefaultAppPool” user. You can change its settings with regedit.</p><p>I have attached a screenshot.</p><p>Best Regards, Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'November 18,2017 09:55:32', user: 'Peter Lechner', post: '<p>You also have to restart the machine to activate the new settings.</p><p>Regards, Peter</p>', idcard: SITE_ROOT + '/images/Peter.jpg', }, { date: 'November 18,2017 16:12:29', user: 'manpreet', post: '<p>Hello,</p><p>Thank you for the information. We are investigating the issue further at our end. We will soon share our observations on the same.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'November 20,2017 16:32:11', user: 'manpreet', post: '<p>Hello,</p><p>I apologize for the delayed response. I have forwarded your observations to the concerned team. I would let you know as soon as I get any information in this regard.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, ], }, { id: '12', date: 'October 22,2018 12:01:05', user: 'nikhilbangar', title: 'Bluring spreadsheet as I zoom in', description: '<p>Hey I just started working on spread.js and my point of concern is that as resolution of browser goes high the spreadsheet and data inside looks like bluring. As I am using retina view it doesn’t seem good, can we overcome it.</p>', idcard: SITE_ROOT + '/images/nikhilbangar.jpg', posts: [ { date: 'October 22,2018 14:02:10', user: 'manpreet', post: '<p>Hello,</p><p>I was not able to replicate the issue at my end with the latest version of SpreadJS i.e. 2017v1.10. I tested the issue on Ubuntu + Chrome(v35.0.1916.153) and Windows7 +Chrome(v35.0.1916.153).</p><p>Could you please provide me the configuration details of the machine or environment in which you are currently facing this issue so that I can replicate and debug the issue further at my end.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'October 22,2018 16:20:21', user: 'nikhilbangar', post: '<p>See the attachment, when I zoom in the entire sheet and it’s data goes bluring, it is not clearly visible(retina display). Can we fix this.</p>', idcard: SITE_ROOT + '/images/nikhilbangar.jpg', }, { date: 'October 22,2018 17:19:58', user: 'nikhilbangar', post: '<p>See the next attachment, this sheet and it’s data is clearly visible no matter further level of zoom-in. Compare these attachments, one is with defect and other is defectless. The one defectless is built using different framework. And I think this is problem of spreadJs.</p>', idcard: SITE_ROOT + '/images/nikhilbangar.jpg', }, { date: 'October 23,2018 11:04:43', user: 'manpreet', post: '<p>Hello,</p><p>Thank you for the screenshots, I was able to observe the difference at my end. But as mentioned earlier, I was not able to replicate the issue at my end on a Windows7 machine using Chrome and on Ubuntu using Chrome.</p><p>So, I would request you to provide me the configuration details of the machine or environment in which you are currently facing this issue so that I can replicate and debug the issue further at my end.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'October 23,2018 14:22:42', user: 'nikhilbangar', post: '<p>Thanks for your worthy response,<br/>My system configuration is :</p>ubuntu 12.04 LTS<br/>OS type : 64 bit<br/>Graphics : Unknown<br/>processor : Intel® Core™ i5-4570T CPU @ 2.90GHz × 4<p></p><p>And Bowsers in use :<br/>1) Chromium Version 34.0.1847.116<br/>2) Firefox 30.0</p>', idcard: SITE_ROOT + '/images/nikhilbangar.jpg', }, { date: 'October 23,2018 15:28:29', user: 'manpreet', post: '<p>Hello,</p><p>Thank you for sharing the system configuration. Here are my further observations on this issue:</p><p>1. FireFox on Ubuntu:</p><p>a) When the focus is on SpreadJS and I zoom in the browser window, the only SpreadJS is zoomed in. However, the column header text does not becomes blurred.</p><p>b) When the focus is not on SpreadJS but somehwere else on the browser window and I zoom in the browser window, then the complete page is zoomed in. However, the column header text does not becomes blurred.</p><p>2. Chrome on Ubuntu:</p><p>a) When the focus is on SpreadJS and I zoom in the browser window, then the complete browser window is zoomed in. And, the column header text becomes blurred.</p><p>b) When the focus is not on SpreadJS but somehwere else on the browser window and I zoom in the browser window, then the complete page is zoomed in. And, the column header text becomes blurred.</p><p>Could you please confirm if you are facing the similar issue. If this is the case then the issue seems to be specific to the Chromium browser on the Ubuntu machine nad not of SpreadJS.</p><p>Thanks,<br/>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'October 23,2018 16:49:51', user: 'nikhilbangar', post: '<p>Thanks for your reply and catching the issue.</p><p>Yeah, I am facing the similar issue as you said. But on Mac machine too I m facing the same kind of problem on retina view. Can we do something for that.</p>', idcard: SITE_ROOT + '/images/nikhilbangar.jpg', }, { date: 'October 23,2018 17:32:36', user: 'manpreet', post: '<p>Hello,</p><p>As per the discussion above, the SpreadJS data gets blurred when the user zooms in the web page or the SpreadJS control in the Chromium browser on an Ubuntu machine.</p><p>However, you mentioned that you are even able to replicate the issue on MacBook with retina display. Unfortunately I am not able to replicate the issue at my end when using the Chrome browser on MacBook Pro10, which supports retina display.</p><p>Could you please share the configuration of the MacBook so that I can try to replicate the issue at my end and accordingly escalate the issue to the concerned team.</p><p>Thanks,<br/>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'October 26,2018 14:35:41', user: 'justforp', post: '<p>Hi There,</p><p>I can confirm this that the spreadsheet on the mac with retina display looks really blurry and awful. We were almost ready to purchase the enterprise edition and the issue reported by my dev team has made us put a hold on the process. Can you give me a timeline when this will get fixed.? Its pretty strange that after 4 month of reporting this is still an issue</p><p>Dennis.</p>', idcard: SITE_ROOT + '/images/justforp.jpg', }, { date: 'October 28,2018 17:32:54', user: 'justforp', post: '<p>Attached find the screenshot. You can clearly see that the while editing the font is nice and crisp but as soon as you move out of the cell the font becomes kind of blurry and seems like bleeding on the edges.</p><p>thanks<br/>Dennis</p>', idcard: SITE_ROOT + '/images/justforp.jpg', }, { date: 'October 29,2018 16:49:37', user: 'manpreet', post: "<p>Hello,</p><p>Your query has been answered at the following forum link:<br/><a href='http://wijmo.com/topic/spreadjs-blurry-ui-on-mac-retina-display-13-and-15/#post-25458'>Spreadjs Blurry UI on Mac Retina Display</a><br/>Kindly refer to the same.</p><p>Thanks,<br/>Manpreet Kaur</p>", idcard: SITE_ROOT + '/images/manpreet.jpg', }, ], }, { id: '13', date: 'August 18,2018 11:01:20', user: 'rgaurava', title: 'Excel Import via Apache POI', description: '<p>As our entire application is on a Linux platform we don’t have an option to host the ExcelIO on a separate Windows box. Would you have a code to support Apache POI as the backend. ?</p>', idcard: SITE_ROOT + '/images/rgaurava.jpg', posts: [ { date: 'August 20,2018 16:20:28', user: 'DeepakSharma14', post: '<p>Hello,</p><p>This has already been reported as a enhancement request. Lets hope that developers find it feasible enough to implement in coming release.</p><p>Thanks,<br/>Deepak Sharma</p>', idcard: SITE_ROOT + '/images/DeepakSharma14.jpg', }, { date: 'August 24,2018 17:54:36', user: 'MikeCHansen', post: '<p>I could not find the Enhancement request to comment directly on it so I am posting this thought here if you can pass it on to the developers.</p><p>The current export that requires a MS server is excellent. It has the most robust export/Import that I have seen including preserving formatting, formulas, etc. For our needs, having some basic Excel and PDF export would go a long way. Even if it is just the data without formatting, etc. And if given a choice, Export will be used far more than import (again, speaking for my team).</p><p>So, my long winded point is do not let the perfect solution drive out the timeline. If some basic exports (other than CSV) can be provided sooner the more advanced import, export could be added in subsequent releases.</p><p>Thanks,<br/>Mike</p>', idcard: SITE_ROOT + '/images/MikeCHansen.jpg', }, { date: 'August 25,2018 11:03:52', user: 'rgaurava', post: '<p>Hi Deepak.</p><p>+1 on Mike’s point. If you can create a basic startup framework working, we can enhance it and submit it back.</p><p>Also I couldn’t fine the Enhancement request. Can you point me to the link so I can include these comments there.</p><p>Thanks,<br/>Rohit</p>', idcard: SITE_ROOT + '/images/rgaurava.jpg', }, { date: 'September 2,2018 16:02:38', user: 'DeepakSharma14', post: "<p>Hello Rohit,</p><p>I have submitted it as an enhancement request for SpreadJS Export service to our system. You may go ahead and add submit it here :</p><a href='http://wijmo.uservoice.com/'>Uservoice.com</a><p>For further consideration. Lets hope that the developers will find it feasible enough to implement.</p><p>Thanks,<br/>Deepak Sharma</p>", idcard: SITE_ROOT + '/images/DeepakSharma14.jpg', }, { date: 'September 3,2018 14:37:22', user: 'rgaurava', post: '<p>Hi Deepak,</p><p>Thanks for the prompt reply. Please update this discussing in case you get any update.</p><p>thanks,<br/>Rohit</p>', idcard: SITE_ROOT + '/images/rgaurava.jpg', }, { date: 'September 6,2018 15:29:59', user: 'rgaurava', post: '<p>Hi Deepak,</p><p>Any update on this ?</p><p>Thanks,<br/>Rohit</p>', idcard: SITE_ROOT + '/images/rgaurava.jpg', }, { date: 'September 10,2018 17:38:31', user: 'DeepakSharma14', post: "<p>Hello,</p><p>We posted this as an enhancement request. Adding this feature to SpreadJS depends on samy factors like : number of customers requested for this feature, time required to implement this feature etc. We have not got any update on this yet. I would suggest you to please vote for this feature here in our UserVoice section so that the concerned team takes it up on higher priority:</p><a href='http://wijmo.uservoice.com/'>wijmo.uservoice.com/</a><p>Thanks,<br/>Deepak Sharma</p>", idcard: SITE_ROOT + '/images/DeepakSharma14.jpg', }, ], }, ];
module.exports = { title: 'Spread Support Forum', welcome: 'Welcome to our SpreadJS support community!', description: 'Ask questions, share feedback and get helps from others', allTopics: 'All topics', localeAuthor: 'Author: ', };
@charset "UTF-8"; @font-face { font-family: "spreadview-demo-icon"; src: url(data:application/font-woff;base64,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) format("woff"); } .demo-icon { font-family: "spreadview-demo-icon"; font-style: normal; display: inline-block; text-align: center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-variant: normal; text-transform: none; } .icon-th:before { content: ""; } /* '' */ .icon-th-list:before { content: ""; } /* '' */ html, body { height: 100%; background-color: #efefef; } a { cursor: pointer; } * { font-family: Arial, sans-serif; } .main-container { display: flex; flex-direction: column; width: 100%; height: 100%; } .main-container h2 { margin-left: 20px; } .main-container .row { flex-grow: 0; flex-shrink: 0; padding: 0 20px; } .main-container topics, .main-container topic { display: block; width: 100%; height: 100%; } .main-container .grid, .main-container #detailGrid { width: 100%; height: 100%; } .topics-container { display: flex; flex-direction: column; width: 100%; height: 100%; flex-grow: 1; flex-shrink: 1; } .gridContainer { width: 100%; height: calc(100% - 30px - 118px - 60px); padding: 0 20px; } .shadow { box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 4px rgba(0, 0, 0, 0.24); } .topic-container-card { overflow: hidden; } .topic-container-card .wrapper { margin: 15px; } .topic-container-list .wrapper { height: 100%; padding: 10px 20px; } .topic-container-list .idcard { display: inline-block; vertical-align: top; width: 40px; } .topic-container-list .detail { display: inline-block; vertical-align: top; width: calc(100% - 40px); } .topic-container-card .idcard { display: inline-block; vertical-align: top; width: 70px; } .topic-container-card .detail { display: inline-block; vertical-align: top; width: calc(100% - 70px); } .wrapper .detail .title { font-size: 17px; font-weight: bold; font-family: Roboto, Arial, sans-serif; } .wrapper .detail .description { font-size: 15px; margin: 16px 0px; color: rgba(0, 0, 0, 0.6); font-family: Roboto, Arial, sans-serif; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .userdetail { font-size: 13px; margin: 8px 0px; color: rgba(0, 0, 0, 0.45); } .userdetail .author { display: inline-block; } .userdetail .date { margin-left: 15px; display: inline-block; } .topic-details-container { background-color: white; padding: 15px; margin: 0 20px; } .topic-details-container .title { font-size: 30px; font-weight: 600; } .topic-conversation-container { margin: 20px; height: calc(100% - 230px); } .intro { width: 100%; background: white; padding: 20px 40px; } .intro .logo { display: inline-block; vertical-align: top; } .sample-options { display: flex; align-items: center; justify-content: space-between; padding: 10px 0; } .sample-options .topic { color: #999; font-size: 13px; } .intro .content { display: inline-block; margin-left: 30px; vertical-align: top; } .intro .content .welcome { font-family: "Trebuchet MS"; font-size: 19px; } .intro .content .description { font-family: "Trebuchet MS"; font-size: 15px; } .card-layout.gc-grid { background: white; } .card-layout .gc-row { border-bottom: 1px solid #e6e6e6; } .card-layout .gc-row:hover { cursor: pointer; } .timeline-leftshape-group { width: 0px; } .timeline-rightshape-group { width: 0px; } .gc-grid { background-color: inherit; border: none; } .employee-photo-small { width: 30px; height: 30px; border-radius: 50%; } .employee-photo { width: 50px; height: 50px; border-radius: 50%; border-bottom: 1px solid #d9d9d9; background-color: white; } .postcard { width: 50px; height: 50px; border-radius: 50%; } .posttitle { color: rgba(0, 0, 0, 0.85); display: inline-block; font-size: 17px; font-weight: 500; } .postuser { font-size: 14px; color: #999; display: inline-block; } .postdate { font-size: 14px; color: #999; display: inline-block; margin-left: 20px; } .postcardcontainer { display: inline-block; width: 80px; vertical-align: top; margin-left: 10px; } .postinfo { display: inline-block; vertical-align: top; } .postdescription { margin-left: 93px; margin-top: 10px; font-size: 13px; overflow: hidden; } .postdescription a { display: inline-block; word-wrap: break-word; word-break: break-all; } .timeline-grouping .timeline-line { border: 3px solid #e7e7e7; } .timeline-grouping .timeline-event { border-left: none; border-top: none; border-right: none; background-color: white; border-bottom: 1px solid #d9d9d9; box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 4px rgba(0, 0, 0, 0.24); } .idcardcontainer { margin-left: 39px; background-color: #efefef; padding-top: 5px; padding-bottom: 8px; display: inline-block; } /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNob3djYXNlL1N1cHBvcnRGb3J1bS9wdXJlanMvc3R5bGVzLmNzcyIsIlNob3djYXNlL1N1cHBvcnRGb3J1bS9wdXJlanMvc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDQWhCO0VBQ0UsbUNBQUE7RUFDQSxtMkxBQUE7QURFRjtBQ0VBO0VBQ0UsbUNBQUE7RUFDQSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQ0FBQTtFQUNBLGtDQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtBREFGOztBQ0dBO0VBQ0UsWUFBQTtBREFGOztBQ0NFLFFBQUE7QUFDRjtFQUNFLFlBQUE7QURFRjs7QUNERSxRQUFBO0FBRUY7O0VBRUUsWUFBQTtFQUNBLHlCQUFBO0FER0Y7O0FDQUE7RUFDRSxlQUFBO0FER0Y7O0FDQUE7RUFDRSw4QkFBQTtBREdGOztBQ0FBO0VBQ0UsYUFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7QURHRjtBQ0RFO0VBQ0UsaUJBQUE7QURHSjtBQ0FFO0VBQ0UsWUFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0FERUo7QUNDRTs7RUFFRSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7QURDSjtBQ0VFOztFQUVFLFdBQUE7RUFDQSxZQUFBO0FEQUo7O0FDSUE7RUFDRSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxjQUFBO0FEREY7O0FDSUE7RUFDRSxXQUFBO0VBQ0Esd0NBQUE7RUFDQSxlQUFBO0FEREY7O0FDSUE7RUFDRSxzRUFBQTtBRERGOztBQ0lBO0VBQ0UsZ0JBQUE7QURERjs7QUNJQTtFQUNFLFlBQUE7QURERjs7QUNJQTtFQUNFLFlBQUE7RUFDQSxrQkFBQTtBRERGOztBQ0lBO0VBQ0UscUJBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7QURERjs7QUNHQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3QkFBQTtBREFGOztBQ0dBO0VBQ0UscUJBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7QURBRjs7QUNFQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3QkFBQTtBRENGOztBQ0NBO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0VBQ0Esc0NBQUE7QURFRjs7QUNBQTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLHlCQUFBO0VBQ0Esc0NBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QURHRjs7QUNBQTtFQUNFLGVBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7QURHRjs7QUNBQTtFQUNFLHFCQUFBO0FER0Y7O0FDQUE7RUFDRSxpQkFBQTtFQUNBLHFCQUFBO0FER0Y7O0FDQUE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxjQUFBO0FER0Y7O0FDQUE7RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QURHRjs7QUNBQTtFQUNFLFlBQUE7RUFDQSwwQkFBQTtBREdGOztBQ0FBO0VBQ0UsV0FBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7QURHRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7QURJRjs7QUNEQTtFQUNFLGFBQUE7RUFDQSxtQkFBQTtFQUNBLDhCQUFBO0VBQ0EsZUFBQTtBRElGO0FDRkU7RUFDRSxXQUFBO0VBQ0EsZUFBQTtBRElKOztBQ0FBO0VBQ0UscUJBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0FER0Y7O0FDQUE7RUFDRSwyQkFBQTtFQUNBLGVBQUE7QURHRjs7QUNBQTtFQUNFLDJCQUFBO0VBQ0EsZUFBQTtBREdGOztBQ0FBO0VBQ0UsaUJBQUE7QURHRjs7QUNBQTtFQUNFLGdDQUFBO0FER0Y7O0FDQUE7RUFDRSxlQUFBO0FER0Y7O0FDQUE7RUFDRSxVQUFBO0FER0Y7O0FDQUE7RUFDRSxVQUFBO0FER0Y7O0FDREE7RUFDRSx5QkFBQTtFQUNBLFlBQUE7QURJRjs7QUNEQTtFQUNFLFdBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7QURJRjs7QUNEQTtFQUNFLFdBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQ0FBQTtFQUNBLHVCQUFBO0FESUY7O0FDREE7RUFDRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0FESUY7O0FDREE7RUFDRSwwQkFBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0FESUY7O0FDREE7RUFDRSxlQUFBO0VBQ0EsV0FBQTtFQUNBLHFCQUFBO0FESUY7O0FDREE7RUFDRSxlQUFBO0VBQ0EsV0FBQTtFQUNBLHFCQUFBO0VBQ0EsaUJBQUE7QURJRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EsV0FBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7QURJRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7QURJRjs7QUNEQTtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7QURJRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EscUJBQUE7RUFDQSxxQkFBQTtBRElGOztBQ0RBO0VBQ0UseUJBQUE7QURJRjs7QUNEQTtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0NBQUE7RUFDQSxzRUFBQTtBRElGOztBQ0RBO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtBRElGIiwiZmlsZSI6IlNob3djYXNlL1N1cHBvcnRGb3J1bS9wdXJlanMvc3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJzcHJlYWR2aWV3LWRlbW8taWNvblwiO1xuICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtiYXNlNjQsZDA5R1JnQUJBQUFBQUJGY0FBOEFBQUFBSGR3QUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJIVTFWQ0FBQUJXQUFBQURNQUFBQkNzUDZ6N1U5VEx6SUFBQUdNQUFBQVF3QUFBRlkrSVVreVkyMWhjQUFBQWRBQUFBQjJBQUFCN2dsUDdRMWpkblFnQUFBQ1NBQUFBQk1BQUFBZ0J0WC9BbVp3WjIwQUFBSmNBQUFGa0FBQUMzQ0trWkJaWjJGemNBQUFCK3dBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFIOUFBQUJtWUFBQW9VTHBxeWxHaGxZV1FBQUE1Y0FBQUFNQUFBQURZSm9xZllhR2hsWVFBQURvd0FBQUFkQUFBQUpBYzlBMTFvYlhSNEFBQU9yQUFBQUJnQUFBQXNKNTBBQUd4dlkyRUFBQTdFQUFBQUdBQUFBQmdOTUE5TWJXRjRjQUFBRHR3QUFBQWdBQUFBSUFFaEREWnVZVzFsQUFBTy9BQUFBWGNBQUFMTnpKMGNIbkJ2YzNRQUFCQjBBQUFBYkFBQUFKQzh0OW1oY0hKbGNBQUFFT0FBQUFCNkFBQUFodVZCSzd4NG5HTmdaR0JnNEdLUVk5QmhZSFJ4OHdsaDRHQmdZWUFBa0F4alRtWjZJbEFNeWdQS3NZQnBEaUJtZzRnQ0FJb2pBMDhBZUp4allHU2V4VGlCZ1pXQmdhbUthUThEQTBNUGhHWjh3R0RJeUFRVVpXQmxac0FLQXRKY1V4Z2NYakM4NEdRTytwL0ZFTVVjeERBZEtNd0lrZ01BOGNnTDBRQjRuTzJSMFEzQ1FBeEQzOUZRNkttajhNbEFmREVMbzJhTDFrazlCcEdlcFZpNSs3Q0JPN0NJbHdnWVh3WTFIN21qL1lYWmZ2RHVteWcvdCtPUVVxbzlXbSs2RGYyNDh1REoxdTlXL3JPMy9yek55dTJpa3pSS2p6VFZTSnJLTmsyMWxVWXBrMFo1azBiSmswWWRxS2tMNWdsM1h4dE5BQUI0bkdOZ1FBTVNFTWdjOUQ4VGhBRVNaZ1BiQUhpY3JWWnBkOU5HRkIxNVNaeUVMQ1VMTFdwaHhNUnBzRVltYk1HQUNVR3lZeUJkbksyVm9Jc1VPK20rOFluZjRGL3paTnB6NkRkK1d1OGJMeVNRdE9kd21wT2pkK2ZOMWN6YlpSSmFrdGdMNjVHVW15L0YxTlltamV3OENlbUdUY3RSZkNnN2V5Rmxpc25mQlZFUXJaYmF0eDJIUkVRaVVMV3VzRVFRK3g1Wm1tUjg2RkZHeTdha1YwM0tMVDNwTGx2alFiMVYzMzRhT3NxeE82R2taak4wYUQyeUpWVVlWYUpJcGoxUzBxWmxxUG9yU1N1OHY4TE1WODFRd29oT0ltbThHY2JRU040Ylo3VEthRFcyNHlpS2JMTGNLRklrbXVGQkZIbVUxUkxuNUlvSkRNb0h6WkR5eXFjUjVjUDhpS3pZbzV4V3NFdTIwL3krTDNtbmR6ay9zVjl2VWJia1FCL0lqdXpnN0hRbFg0UmJXMkhjdEpQdEtGUVJkdGQzUW16WjdGVC9aby95bWtZRHR5c3l2ZENNWUtsOGhSQXJQNkhNL2lGWkxaeFArWkpIbzFxeWtSTkI2MlZPN0VzK2dkYmppQ2x4elJoWjBOM1JDUkhVL1pJekRQYVlQaDc4OGQ0cGxnc1RBbmdjeTNwSEpad0lFeWxoY3pSSjJqQnlZQ1ZsaXlxcDlhNllPT1YxV3NSYnduN3QydEdYem1qalVIZGlQRnNQSFZzNVVjbnhhRktubVV5ZDJrbk5veWtOb3BSMEpuak1yd01vUDZKSlhtMWpOWW1WUjlNNFpzYUVSQ0lDTGR4TFUwRXNPN0drS1FUTm94bTl1UnVtdVhZdFdxVEpBL1hjby9mMDVsYTR1ZE5UMmc3MHMwWi9WcWRpT3RnTDArbHA1Qy94YWRybElrWHArdWtaZmt6aVFkWUNNcEV0TnNPVWd3ZHYvUTdTeTllV0hJWFhCdGp1N2ZNcnFIM1dSUENrQWZzYjBCNVAxU2tKVElXWVZZaFdRR0t0YTFtV3lkV3NGcW5JMUhkRG1sYStyTk1FaW5JY0Y4ZStqSEg5WHpNemxwZ1N2dCtKMDdNakxqMXo3VXNJMHh4OG0zVTltdGVweFhJQmNXWjVUcWRabHUvck5NZnlBNTNtV1o3WDZRaExXNmVqTEQvVWFZSGxSem9kWTNsQkM1cDAzOEdRaXpEa0FnNlFNSVNsQTBOWVhvSWhMQlVNWWJrSVExZ1dZUWpMSlJqQzhtTVl3bklaaHJDOHJHWFYxRk5KNDlxWldBWnNRbUJpamg2NXpFWGxhaXE1VkVLN2FGUnFRNTRTYnBWVUZNK3FmMldnWGp6eWhqbXdGa2lYeUpwZk1jNlZqMGJsK05ZVkxXOGFPMWZBc2Vwdkg0NzJPZkZTMW91RlB3WC8xZFpVSmIxaXpjT1RxL0FiaHA1c0o2bzJxWGgwVFpmUFZUMjYvbDlVVkZnTDlCdEloVmdveXJKc2NHY2loSTg2bllacW9KVkR6R3pNUExUcmRjdWFuOFA5TnpGQ0ZsRDkrRGNVR2d2Y2cwNVpTVm50NEt6VjE5dXkzRHVEY2pnVExFa3hOL1A2VnZnaUk3UFNmcEZaeXA2UGZCNXdCWXhLWmRocUE2MFZ2TmtuTVErWjNpVFBCSEZiVVRaSTJ0ak9CSWtOSFBPQWVmT2RCQ1poNnFvTjVFN2hoZzM0QldGdXdYa25YS0o2b3l5SDdrWHM4eWlrL0Z1bjRrVDJxR2lNd0xQWkcyR3Y3MExLYjNFTUpEVDVwWDRNVkJXaHFSZzFGZEEwVW02b0JsL0cyYnB0UXNZTzlDTXFkc095ck9MRHh4YjNsWkp0R1lSOHBJalZvNk9mMWw2aVRxcmNmbVlVbCsrZHZnWEJJRFV4ZjN2ZmRIR1F5cnRheVRKSGJRTlR0eHFWVTllYVErTlZoK3JtVWZXOTQrd1RPV3VhYnJvbkhucGYwNnJid2NWY0xMRDJiUTdTVWlZWDFQVmhoUTJpeThXbFVPcGxORW52dUFjWUZoalE3MUNLamYrcit0aDhuaXRWaGRGeEpOOU8xTGZSNTJBTS9BL1lmMGYxQTlEM1kraHlEUzdQOTVvVG4yNzA0V3lacnFJWDY2Zm9OekJycmJsWnVnYmMwSFFENGlGSHJZNjR5ZzE4cHdaeGVxUzVIT2toNEdQZEZlSUJ3Q2FBeGVBVDNiV001bE1Bby9tTU9UN0E1OHhoMEdRT2d5M21NTmhtemhyQURuTVk3REtId1I1ekdIekJuSFdBTDVuRElHUU9nNGc1REo0d0p3QjR5aHdHWHpHSHdkZk1ZZkFOYys0RGZNc2NCakZ6R0NUTVliQ3Y2ZFl3ekMxZTBGMmd0a0ZWb0FOVFQxamN3K0pRVTJYSS9vNFhodjI5UWN6K3dTQ20vcWpwOXBENkV5OE05V2VEbVBxTFFVejlWZE9kSWZVM1hoanE3d1l4OVErRG1QcE12eGpMWlFhL2pIeVhDZ2VVWFd3KzUrK0o5dy9ieFVDNUFBRUFBZi8vQUE5NG5LVlZXVzhiMXhVKzU5N1pPQnl1bW9XeXlERTNjV3hTa0Z5dWlxeFNsQmZRa3VrRnRwRFFTYVRRanF5MmtHM0pEZUNnNlBhZ3dMWFJKZ0t5RktoYkJBaXN4d2F0K3RLWEFIMW9uN29BYlg1Q0h3SVpSWkduUHJTSXhqMlhZaFU3aWJxZ1E4Njk1N3Zuek15NTV6dm5YQWdBUFA0NzMrRkJpTUJobUlBWnVBQXZ3UnA4RnpiaFFxc1RDekUxYWpDRnEwb3ZFbUE4ckRHR25QV0NNa01BWEJBelFsZVhHQ0IwM3ZqKzNZM3ZmUFBPSzdkV1YxNWVldUhaeStmUDFnWlhKUzZuU3FPV3FhaTViTUdyVmV0T3BXekhDSHNEM0NDTW45RUxYTUk5ZkJ6MzhCZlpmeG4vdmIzUUMvdWhnVjdndnQ1TjI3OXdYS1RSVGo4aDR2Vjk0TGorVHc3UzRNcW5EejVoOWJUaWlaYy91R0VUdEc3UWExeFVWc1hrckFvTC93OVBhRmgrVmRpTHdmLzkvMnFFMnY0NkFDaGZ5TzEwNjVrZ3FqcjJPUTBnMTdEUHFJeDlRbWtpUGlVVWRINkdRdU8vcFRBejBHY09vR1NnYjJUMktNa05jQ1Z6TUNYc3QybDc5MUVmTWNkeGR4c0g2L0FwOVA4Ri9lbDRVb0FlMytOWDJGOGhCZmxXQmhobmE3U0k2OEFCK0FKd0RsMFNvRk53N0p3a0owclkzNTFqbXhGVXNoNFdxZzJzbHcrandMUlhmaVdmOGwvZHNxeWlkZHp5M3paTnZHRk4yVVhMMnNMN3FUd3V0ZDNpbGpsdGxnWUtYQldXVS9iV0VkajNwVWErdUgxZk9PTnJZblVkcUNEWkFsQ1pkb0dZN2RpakJiUHZpNm1TRXhQa3hBeG1CaldUOFFTcWx4MjBlYzMwMzdHbnJLSnRQL1JmVGVYektiei8wTGFML1ErYk9PV2F3c09pTlcwOUxMcmtHVzVaMHdRdC94Mno3OHYzS005cU1BUmVLNjlUQm1FN2dIQTZTTTZjSXE4UUZvVExYUkdzVHI3QVpMdGtWWnR5cFJiQVdEWXNIenR6cC9mMnhaUDRpdi82eXJVSDg5ZktZOS9ZL1BPYksrVkQwdC84SC9pdm84SGkyVlBYZnRqL3p0ZjREdnMxRkNEWkdoNmh0MkU3aEhCS3ZKZDJEeXY1Ykk3SkZ1MDFqTG1zcDZqMG85UXExQXUweXhsc3Noa2NSNi9hWkpXeWkzem43a2Yzdk9LdHQwYnllcGd6aVhGRENwbXFHVlVqM1dXOCtOb0h5L2MrdW90TFY3ZDYwdFdDSnFHaEk5TWtIcEhEdHBaTURoWExieTdNdmRhYjdHMEo5aDl2OCtmNUpkQ2dDYmZnWEd0K2JyYkJ1WXh0a0NsSlpINFRkQUNtUTQ4c21LeXhKWHBHbGJqYUF3a1VTWG1STmhMb1FpQmc0TnpOMVpYbDBVb3pXZi9TWWFzVXBKSnJWTWRSTWUwbVlyWGc1YXAxajZZd1U1VUloaG5kNk9WaXRCM0pzYW0rYWxXdmlWV3ZYaU9iSmpaTTFiYjI3a0VWRnNSWWk0bGFyRGZxalNacjFFVW95SUJxZDlOTzJ2Um5HMlBKMzlReDJ3aUhUU2ZraG9MaGhHNGJwaDZQcTNZNGFTVFpuYm1UcXl4cTZpazlFRSswUjJRTE03M3paK3BmUFQxcnZKY3FGbE0vTXA5SkowT0duYkNURS9OSFJxNU5QYnNjTVZuaVVJS1plREZWeFBUWDA0MHFSazdNSjBLRldEaWFEZ3pwQnZvL1pvcWlLZXpvWWlRYUtCNkpKNzFRWHNPeVZUNGFOMHNGdzVnc25YLytrT01VVTNqZExZYm1pbTc0Uk1lMjh1ZG5LNU1pdHlpT2dvTno3REYxUFJPR0lROTNXMVRCVEU3WllZbzBHNllDQVM2YW05USsrL1A0eFc3TEkyN2t0YjBpSnRWYVAwOWZWaEFsQ1MvUmhOSnpJS0YwZHFSVitMd2xySDNlOEVvckRwQkpKNXhvSktDUkc0cXBVaTQ2RFUrMUtoWldjMWtxUU11c2xLa0plQTdtYWtodHdHdjBHOEx2eWh1Vk0vaVNJVXYrbjZTUUxPRUVkM2Y4WXp2OG5MbTRzMmdldHplSW9ZM0tkSnNwaHVSL0tOR0k0OUx0SFgvaUVUNUlXWXVQWHJTc0RSc0dQWCtieC9kNy9uRTRDVitCNWRiVjUwNHpSVHVhR1k0RlVLSEcwSlk1STBGQnVDa3hCcW9DNmlxRUlhQ0ZBNzFJaUdtR3poVFVsQ1ZRZzBGMUFWUTEySVdnR3V4Y1g3NjY5TUtWeTVjdWRPYmFzek5tM2l5SUt4ZWxSTVhZWHBidDVWZlpkdjRESG9wbFlxYUwxUFlwdHlzZUpiZENBUk0yc2NHaEVNdjk2N0J1VURaVGloNUdjY2E0dXBiWDlQNncrYW40aHE3dWlhcCt4amMwamVFZm1hYjU5Lzh4SXNuYmlvUi8wYlY2ZGRRL05sckZtckQ3cVJjWW8rTmpUUFBlMTNUOHBmOHJzWWl6WWp4QTlwZFpiUGRqS2dYZFpOZG42YVNVTDlNWGR6OGVQM1ZpbkEzMW5WaTBrdWlhaTNxZmgzZjVKaytKU29jZ1JDa25YWmh2dFVVWDR3aWlBMUJqb0U0Z2c2VEkwcEp1YUZ4UlZXV2hMeWhxTnhpZ0lsYzc4WmliU283WVZtdzRQaHlMeDhRVkRjbkpFbVpxbWYyN1dqYXpvMlU3ak9PczdnakFOei9aNE4vMnQzYy9aT040UWNpZmJLeXZZOExPTXZkWW11VS9XRjluNzYvNzIrdit6OWI4YjAzZXZwMGR5Mk4yUE4yWXZBMy9CTGswcHR3QUFIaWNZMkJrWUdBQTRnYzNFcWJIODl0OFplQm1mZ0VVWWJqc3Uwa0dRZi9QWkg3QkhBVGtjakF3Z1VRQllXNEwxWGljWTJCa1lHQU8rcDhGSkY4d01Qei9EeVNCSWlpQUd3Q0gxQVdnQUFBQWVKeGpmc0hBd0F6RGtWQ016aGNFNGdVTURBQ3k1d2EvQUFBQUFBRHVBWllCM0FJaUFsWUNvZ05rQStnRXJBVUtBQUVBQUFBTEFKQUFDUUFBQUFBQUFnQWtBRFFBY3dBQUFIVUxjQUFBQUFCNG5IV1F5MDdDUUJTRy81R0xDb2thVGR3Nkt3TXhsa3NpQ3hJU0VneHNkRU1NVzFOS2FVdEtoMHdIRWw3RGQvQmhmQW1meFo5Mk1BWmltK2w4NTVzelowNEh3RFcrSVpBL1R4dzVDNXd4eXZrRXAraFpMdEEvV3k2U1h5eVhVTVdiNVRMOXUrVUtIaEJZcnVJR0g2d2dpdWVNRnZpMExIQWxMaTJmNEVMY1dTN1FQMW91a251V1M3Z1ZyNWJMOUo3bENpWWl0VnpGdmZnYXFOVldSMEZvWkcxUWwrMW1xeU9uVzZtb29zU05wYnMyb2RLcDdNdTVTb3dmeDhyeDFITFBZejlZeDY3ZWgvdDU0dXMwVW9sc09jMjlHdm1KcjEzanozYlYwMDNRTm1ZdTUxb3Q1ZEJteUpWV0M5OHpUbWpNcXR0by9EMFBBeWlzc0lWR3hLc0tZU0JSbzYxemJxT0pGanFrS1RNa00vT3NDQWxjeERRdTF0d1JaaXNwNHo3SG5GRkM2ek1qSmp2dytGMGUrVEVwNFA2WVZmVFI2bUU4SWUzT2lESXYyWmZEN2c2elJxUWt5M1F6Ty92dFBjV0dwN1ZwRFhmdHV0UlpWeExEZ3hxUzk3RmJXOUI0OUU1Mks0YTJpd2JmZi83dkIrTnBoRThBZUp4dHhrRU9neUFRQmRENXRJcElyOEtoa0l3T0NWZ0M0NkszYjlKdWZhdEhodjVXdXVkaDhNQVRFMlpZTEhCWTRmRWlvMkpWUXNsRGw4SzdoaTBmcnVkRGZwdUd4TTQydld2bFU1M0tWYmNScmpZM1BsTXVYbnNjRXJnMi9mallOYWZDSVJZbCtnSmZwQjdaZUp4ajhON0JjQ0lvWWlNalkxL2tCc2FkSEF3Y0RNa0ZHeGxZblRZeE1ESm9nUmlidVpnWU9TQXNQZ1l3aTgxcEY5TUJvRFFua00zdXRJdkJBY0ptWm5EWnFNTFlFUml4d2FFallpTnppc3RHTlJCdkYwY0RBeU9MUTBkeVNBUklTU1FRYk9aaFl1VFIyc0g0djNVRFMrOUdKZ1lYQUF4MkkvUUFBQT09KSBmb3JtYXQoXCJ3b2ZmXCIpO1xufVxuLmRlbW8taWNvbiB7XG4gIGZvbnQtZmFtaWx5OiBcInNwcmVhZHZpZXctZGVtby1pY29uXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5pY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi7qCAXCI7XG59XG5cbi8qICfuoIAnICovXG4uaWNvbi10aC1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi7qCBXCI7XG59XG5cbi8qICfuoIEnICovXG5odG1sLFxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcbn1cblxuYSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuKiB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuLm1haW4tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tYWluLWNvbnRhaW5lciBoMiB7XG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xufVxuLm1haW4tY29udGFpbmVyIC5yb3cge1xuICBmbGV4LWdyb3c6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBwYWRkaW5nOiAwIDIwcHg7XG59XG4ubWFpbi1jb250YWluZXIgdG9waWNzLFxuLm1haW4tY29udGFpbmVyIHRvcGljIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubWFpbi1jb250YWluZXIgLmdyaWQsXG4ubWFpbi1jb250YWluZXIgI2RldGFpbEdyaWQge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4udG9waWNzLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1zaHJpbms6IDE7XG59XG5cbi5ncmlkQ29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMzBweCAtIDExOHB4IC0gNjBweCk7XG4gIHBhZGRpbmc6IDAgMjBweDtcbn1cblxuLnNoYWRvdyB7XG4gIGJveC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XG59XG5cbi50b3BpYy1jb250YWluZXItY2FyZCB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi50b3BpYy1jb250YWluZXItY2FyZCAud3JhcHBlciB7XG4gIG1hcmdpbjogMTVweDtcbn1cblxuLnRvcGljLWNvbnRhaW5lci1saXN0IC53cmFwcGVyIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAxMHB4IDIwcHg7XG59XG5cbi50b3BpYy1jb250YWluZXItbGlzdCAuaWRjYXJkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogNDBweDtcbn1cblxuLnRvcGljLWNvbnRhaW5lci1saXN0IC5kZXRhaWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTtcbn1cblxuLnRvcGljLWNvbnRhaW5lci1jYXJkIC5pZGNhcmQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiA3MHB4O1xufVxuXG4udG9waWMtY29udGFpbmVyLWNhcmQgLmRldGFpbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDcwcHgpO1xufVxuXG4ud3JhcHBlciAuZGV0YWlsIC50aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuXG4ud3JhcHBlciAuZGV0YWlsIC5kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbWFyZ2luOiAxNnB4IDBweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4udXNlcmRldGFpbCB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbWFyZ2luOiA4cHggMHB4O1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQ1KTtcbn1cblxuLnVzZXJkZXRhaWwgLmF1dGhvciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnVzZXJkZXRhaWwgLmRhdGUge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4udG9waWMtZGV0YWlscy1jb250YWluZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMTVweDtcbiAgbWFyZ2luOiAwIDIwcHg7XG59XG5cbi50b3BpYy1kZXRhaWxzLWNvbnRhaW5lciAudGl0bGUge1xuICBmb250LXNpemU6IDMwcHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi50b3BpYy1jb252ZXJzYXRpb24tY29udGFpbmVyIHtcbiAgbWFyZ2luOiAyMHB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIzMHB4KTtcbn1cblxuLmludHJvIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBwYWRkaW5nOiAyMHB4IDQwcHg7XG59XG5cbi5pbnRybyAubG9nbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLnNhbXBsZS1vcHRpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAxMHB4IDA7XG59XG4uc2FtcGxlLW9wdGlvbnMgLnRvcGljIHtcbiAgY29sb3I6ICM5OTk7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLmludHJvIC5jb250ZW50IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMzBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLmludHJvIC5jb250ZW50IC53ZWxjb21lIHtcbiAgZm9udC1mYW1pbHk6IFwiVHJlYnVjaGV0IE1TXCI7XG4gIGZvbnQtc2l6ZTogMTlweDtcbn1cblxuLmludHJvIC5jb250ZW50IC5kZXNjcmlwdGlvbiB7XG4gIGZvbnQtZmFtaWx5OiBcIlRyZWJ1Y2hldCBNU1wiO1xuICBmb250LXNpemU6IDE1cHg7XG59XG5cbi5jYXJkLWxheW91dC5nYy1ncmlkIHtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG59XG5cbi5jYXJkLWxheW91dCAuZ2Mtcm93IHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jYXJkLWxheW91dCAuZ2Mtcm93OmhvdmVyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udGltZWxpbmUtbGVmdHNoYXBlLWdyb3VwIHtcbiAgd2lkdGg6IDBweDtcbn1cblxuLnRpbWVsaW5lLXJpZ2h0c2hhcGUtZ3JvdXAge1xuICB3aWR0aDogMHB4O1xufVxuXG4uZ2MtZ3JpZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuLmVtcGxveWVlLXBob3RvLXNtYWxsIHtcbiAgd2lkdGg6IDMwcHg7XG4gIGhlaWdodDogMzBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uZW1wbG95ZWUtcGhvdG8ge1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDlkOWQ5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuLnBvc3RjYXJkIHtcbiAgd2lkdGg6IDUwcHg7XG4gIGhlaWdodDogNTBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4ucG9zdHRpdGxlIHtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44NSk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxN3B4O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ucG9zdHVzZXIge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAjOTk5O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5wb3N0ZGF0ZSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM5OTk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5cbi5wb3N0Y2FyZGNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDgwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4ucG9zdGluZm8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5wb3N0ZGVzY3JpcHRpb24ge1xuICBtYXJnaW4tbGVmdDogOTNweDtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucG9zdGRlc2NyaXB0aW9uIGEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xufVxuXG4udGltZWxpbmUtZ3JvdXBpbmcgLnRpbWVsaW5lLWxpbmUge1xuICBib3JkZXI6IDNweCBzb2xpZCAjZTdlN2U3O1xufVxuXG4udGltZWxpbmUtZ3JvdXBpbmcgLnRpbWVsaW5lLWV2ZW50IHtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIGJvcmRlci1yaWdodDogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDlkOWQ5O1xuICBib3gtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjQpO1xufVxuXG4uaWRjYXJkY29udGFpbmVyIHtcbiAgbWFyZ2luLWxlZnQ6IDM5cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmVmZWY7XG4gIHBhZGRpbmctdG9wOiA1cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn0iLCJAZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdzcHJlYWR2aWV3LWRlbW8taWNvbic7XG4gIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2Jhc2U2NCxkMDlHUmdBQkFBQUFBQkZjQUE4QUFBQUFIZHdBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkhVMVZDQUFBQldBQUFBRE1BQUFCQ3NQNno3VTlUTHpJQUFBR01BQUFBUXdBQUFGWStJVWt5WTIxaGNBQUFBZEFBQUFCMkFBQUI3Z2xQN1ExamRuUWdBQUFDU0FBQUFCTUFBQUFnQnRYL0FtWndaMjBBQUFKY0FBQUZrQUFBQzNDS2taQlpaMkZ6Y0FBQUIrd0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQUg5QUFBQm1ZQUFBb1VMcHF5bEdobFlXUUFBQTVjQUFBQU1BQUFBRFlKb3FmWWFHaGxZUUFBRG93QUFBQWRBQUFBSkFjOUExMW9iWFI0QUFBT3JBQUFBQmdBQUFBc0o1MEFBR3h2WTJFQUFBN0VBQUFBR0FBQUFCZ05NQTlNYldGNGNBQUFEdHdBQUFBZ0FBQUFJQUVoRERadVlXMWxBQUFPL0FBQUFYY0FBQUxOekowY0huQnZjM1FBQUJCMEFBQUFiQUFBQUpDOHQ5bWhjSEpsY0FBQUVPQUFBQUI2QUFBQWh1VkJLN3g0bkdOZ1pHQmc0R0tRWTlCaFlIUng4d2xoNEdCZ1lZQUFrQXhqVG1aNklsQU15Z1BLc1lCcERpQm1nNGdDQUlvakEwOEFlSnhqWUdTZXhUaUJnWldCZ2FtS2FROERBME1QaEdaOHdHREl5QVFVWldCbFpzQUtBdEpjVXhnY1hqQzg0R1FPK3AvRkVNVWN4REFkS013SWtnTUE4Y2dMMFFCNG5PMlIwUTNDUUF4RDM5RlE2S21qOE1sQWZERUxvMmFMMWtrOUJwR2VwVmk1KzdDQk83Q0lsd2dZWHdZMUg3bWovWVhaZnZEdW15Zy90K09RVXFvOVdtKzZEZjI0OHVESjF1OVcvck8zL3J6Tnl1MmlrelJLanpUVlNKcktOazIxbFVZcGswWjVrMGJKazBZZHFLa0w1Z2wzWHh0TkFBQjRuR05nUUFNU0VNZ2M5RDhUaEFFU1pnUGJBSGljclZacGQ5TkdGQjE1U1p5RUxDVUxMV3BoeE1ScHNFWW1iTUdBQ1VHeVl5QmRuSzJWb0lzVU8rbSs4WW5mNEYvelpOcHo2RGQrV3U4Ykx5U1F0T2R3bXBPamQrZk4xY3piWlJKYWt0Z0w2NUdVbXkvRjFOWW1qZXc4Q2VtR1RjdFJmQ2c3ZXlGbGlzbmZCVkVRclpiYXR4MkhSRVFpVUxXdXNFUVEreDVabW1SODZGRkd5N2FrVjAzS0xUM3BMbHZqUWIxVjMzNGFPc3F4TzZHa1pqTjBhRDJ5SlZVWVZhSklwajFTMHFabHFQb3JTU3U4djhMTVY4MVF3b2hPSW1tOEdjYlFTTjRiWjdUS2FEVzI0eWlLYkxMY0tGSWttdUZCRkhtVTFSTG41SW9KRE1vSHpaRHl5cWNSNWNQOGlLellvNXhXc0V1MjAveStMM21uZHprL3NWOXZVYmJrUUIvSWp1emc3SFFsWDRSYlcySGN0SlB0S0ZRUmR0ZDNRbXpaN0ZUL1pvL3lta1lEdHlzeXZkQ01ZS2w4aFJBclA2SE0vaUZaTFp4UCtaSkhvMXF5a1JOQjYyVk83RXMrZ2RiamlDbHh6UmhaME4zUkNSSFUvWkl6RFBhWVBoNzg4ZDRwbGdzVEFuZ2N5M3BISlp3SUV5bGhjelJKMmpCeVlDVmxpeXFwOWE2WU9PVjFXc1Jid243dDJ0R1h6bWpqVUhkaVBGc1BIVnM1VWNueGFGS25tVXlkMmtuTm95a05vcFIwSm5qTXJ3TW9QNkpKWG0xak5ZbVZSOU00WnNhRVJDSUNMZHhMVTBFc083R2tLUVROb3htOXVSdW11WFl0V3FUSkEvWGNvL2YwNWxhNHVkTlQyZzcwczBaL1ZxZGlPdGdMMCtscDVDL3hhZHJsSWtYcCt1a1pma3ppUWRZQ01wRXROc09VZ3dkdi9RN1N5OWVXSElYWEJ0anU3Zk1ycUgzV1JQQ2tBZnNiMEI1UDFTa0pUSVdZVlloV1FHS3RhMW1XeWRXc0ZxbkkxSGREbWxhK3JOTUVpbkljRjhlK2pISDlYek16bHBnU3Z0K0owN01qTGoxejdVc0kweHg4bTNVOW10ZXB4WElCY1daNVRxZFpsdS9yTk1meUE1M21XWjdYNlFoTFc2ZWpMRC9VYVlIbFJ6b2RZM2xCQzVwMDM4R1FpekRrQWc2UU1JU2xBME5ZWG9JaExCVU1ZYmtJUTFnV1lRakxKUmpDOG1NWXduSVpockM4ckdYVjFGTko0OXFaV0Fac1FtQmlqaDY1ekVYbGFpcTVWRUs3YUZScVE1NFNicFZVRk0rcWYyV2dYanp5aGptd0ZraVh5SnBmTWM2VmowYmwrTllWTFc4YU8xZkFzZXB2SDQ3Mk9mRlMxb3VGUHdYLzFkWlVKYjFpemNPVHEvQWJocDVzSjZvMnFYaDBUWmZQVlQyNi9sOVVWRmdMOUJ0SWhWZ295ckpzY0djaWhJODZuWVpxb0pWRHpHek1QTFRyZGN1YW44UDlOekZDRmxEOStEY1VHZ3ZjZzA1WlNWbnQ0S3pWMTl1eTNEdURjamdUTEVreE4vUDZWdmdpSTdQU2ZwRlp5cDZQZkI1d0JZeEtaZGhxQTYwVnZOa25NUStaM2lUUEJIRmJVVFpJMnRqT0JJa05IUE9BZWZPZEJDWmg2cW9ONUU3aGhnMzRCV0Z1d1hrblhLSjZveXlIN2tYczh5aWsvRnVuNGtUMnFHaU13TFBaRzJHdjcwTEtiM0VNSkRUNXBYNE1WQldocVJnMUZkQTBVbTZvQmwvRzJicHRRc1lPOUNNcWRzT3lyT0xEeHhiM2xaSnRHWVI4cElqVm82T2YxbDZpVHFyY2ZtWVVsKytkdmdYQklEVXhmM3ZmZEhHUXlydGF5VEpIYlFOVHR4cVZVOWVhUStOVmgrcm1VZlc5NCt3VE9XdWFicm9uSG5wZjA2cmJ3Y1ZjTExEMmJRN1NVaVlYMVBWaGhRMml5OFdsVU9wbE5FbnZ1QWNZRmhqUTcxQ0tqZityK3RoOG5pdFZoZEZ4Sk45TzFMZlI1MkFNL0EvWWYwZjFBOUQzWStoeURTN1A5NW9UbjI3MDRXeVpycUlYNjZmb056QnJyYmxadWdiYzBIUUQ0aUZIclk2NHlnMThwd1p4ZXFTNUhPa2g0R1BkRmVJQndDYUF4ZUFUM2JXTTVsTUFvL21NT1Q3QTU4eGgwR1FPZ3kzbU1OaG16aHJBRG5NWTdES0h3UjV6R0h6Qm5IV0FMNW5ESUdRT2c0ZzVESjR3SndCNHlod0dYekdId2RmTVlmQU5jKzREZk1zY0JqRnpHQ1RNWWJDdjZkWXd6QzFlMEYyZ3RrRlZvQU5UVDFqY3crSlFVMlhJL280WGh2MjlRY3ord1NDbS9xanA5cEQ2RXk4TTlXZURtUHFMUVV6OVZkT2RJZlUzWGhqcTd3WXg5UStEbVBwTXZ4akxaUWEvakh5WENnZVVYV3crNSsrSjl3L2J4VUM1QUFFQUFmLy9BQTk0bktWVldXOGIxeFUrNTk3Wk9CeXVtb1d5eURFM2NXeFNrRnl1aXF4U2xCZlFrdWtGdHBEUVNhVFFqcXkya0czSkRlQ2c2UGFnd0xYUkpnS3lGS2hiQkFpc3h3YXQrdEtYQUgxb243b0FiWDVDSHdJWlJaR25QclNJeGoyWFloVTdpYnFnUTg2OTU3dm56TXk1NXp2blhBZ0FQUDQ3MytGQmlNQmhtSUFadUFBdndScDhGemJoUXFzVEN6RTFhakNGcTBvdkVtQThyREdHblBXQ01rTUFYQkF6UWxlWEdDQjAzdmorM1kzdmZQUE9LN2RXVjE1ZWV1SFp5K2ZQMWdaWEpTNm5TcU9XcWFpNWJNR3JWZXRPcFd6SENIc0QzQ0NNbjlFTFhNSTlmQnozOEJmWmZ4bi92YjNRQy91aGdWN2d2dDVOMjc5d1hLVFJUajhoNHZWOTRMaitUdzdTNE1xbkR6NWg5YlRpaVpjL3VHRVR0RzdRYTF4VVZzWGtyQW9ML3c5UGFGaCtWZGlMd2YvOS8ycUUydjQ2QUNoZnlPMTA2NWtncWpyMk9RMGcxN0RQcUl4OVFta2lQaVVVZEg2R1F1Ty9wVEF6MEdjT29HU2diMlQyS01rTmNDVnpNQ1hzdDJsNzkxRWZNY2R4ZHhzSDYvQXA5UDhGL2VsNFVvQWUzK05YMkY4aEJmbFdCaGhuYTdTSTY4QUIrQUp3RGwwU29GTnc3SndrSjByWTM1MWpteEZVc2g0V3FnMnNsdytqd0xSWGZpV2Y4bC9kc3F5aWRkenkzelpOdkdGTjJVWEwyc0w3cVR3dXRkM2lsamx0bGdZS1hCV1dVL2JXRWRqM3BVYSt1SDFmT09OclluVWRxQ0RaQWxDWmRvR1k3ZGlqQmJQdmk2bVNFeFBreEF4bUJqV1Q4UVNxbHgyMGVjMzAzN0ducktKdFAvUmZUZVh6S2J6LzBMYUwvUStiT09XYXdzT2lOVzA5TExya0dXNVowd1F0L3gyejc4djNLTTlxTUFSZUs2OVRCbUU3Z0hBNlNNNmNJcThRRm9UTFhSR3NUcjdBWkx0a1ZadHlwUmJBV0RZc0h6dHpwL2YyeFpQNGl2LzZ5clVIODlmS1k5L1kvUE9iSytWRDB0LzhIL2l2bzhIaTJWUFhmdGovenRmNER2czFGQ0RaR2g2aHQyRTdoSEJLdkpkMkR5djViSTdKRnUwMWpMbXNwNmowbzlRcTFBdTB5eGxzc2hrY1I2L2FaSld5aTN6bjdrZjN2T0t0dDBieWVwZ3ppWEZEQ3BtcUdWVWozV1c4K05vSHkvYyt1b3RMVjdkNjB0V0NKcUdoSTlNa0hwSER0cFpNRGhYTGJ5N012ZGFiN0cwSjloOXY4K2Y1SmRDZ0NiZmdYR3QrYnJiQnVZeHRrQ2xKWkg0VGRBQ21RNDhzbUt5eEpYcEdsYmphQXdrVVNYbVJOaExvUWlCZzROek4xWlhsMFVveldmL1NZYXNVcEpKclZNZFJNZTBtWXJYZzVhcDFqNll3VTVVSWhobmQ2T1ZpdEIzSnNhbSthbFd2aVZXdlhpT2JKalpNMWJiMjdrRVZGc1JZaTRsYXJEZnFqU1pyMUVVb3lJQnFkOU5PMnZSbkcyUEozOVF4MndpSFRTZmtob0xoaEc0YnBoNlBxM1k0YVNUWm5ibVRxeXhxNmlrOUVFKzBSMlFMTTczelorcGZQVDFydkpjcUZsTS9NcDlKSjBPR25iQ1RFL05IUnE1TlBic2NNVm5pVUlLWmVERlZ4UFRYMDQwcVJrN01KMEtGV0RpYURnenBCdm8vWm9xaUtlem9ZaVFhS0I2Sko3MVFYc095VlQ0YU4wc0Z3NWdzblgvK2tPTVVVM2pkTFlibWltNzRSTWUyOHVkbks1TWl0eWlPZ29OejdERjFQUk9HSVE5M1cxVEJURTdaWVlvMEc2WUNBUzZhbTlRKysvUDR4VzdMSTI3a3RiMGlKdFZhUDA5ZlZoQWxDUy9SaE5KeklLRjBkcVJWK0x3bHJIM2U4RW9yRHBCSko1eG9KS0NSRzRxcFVpNDZEVSsxS2haV2Mxa3FRTXVzbEtrSmVBN21ha2h0d0d2MEc4THZ5aHVWTS9pU0lVdituNlNRTE9FRWQzZjhZenY4bkxtNHMyZ2V0emVJb1kzS2RKc3BodVIvS05HSTQ5THRIWC9pRVQ1SVdZdVBYclNzRFJzR1BYK2J4L2Q3L25FNENWK0I1ZGJWNTA0elJUdWFHWTRGVUtIRzBKWTVJMEZCdUNreEJxb0M2aXFFSWFDRkE3MUlpR21HemhUVWxDVlFnMEYxQVZRMTJJV2dHdXhjWDc2NjlNS1Z5NWN1ZE9iYXN6Tm0zaXlJS3hlbFJNWFlYcGJ0NVZmWmR2NERIb3BsWXFhTDFQWXB0eXNlSmJkQ0FSTTJzY0doRU12OTY3QnVVRFpUaWg1R2NjYTR1cGJYOVA2dythbjRocTd1aWFwK3hqYzBqZUVmbWFiNTkvOHhJc25iaW9SLzBiVjZkZFEvTmxyRm1yRDdxUmNZbytOalRQUGUxM1Q4cGY4cnNZaXpZanhBOXBkWmJQZGpLZ1hkWk5kbjZhU1VMOU1YZHo4ZVAzVmluQTMxblZpMGt1aWFpM3FmaDNmNUprK0pTb2NnUkNrblhaaHZ0VVVYNHdpaUExQmpvRTRnZzZUSTBwSnVhRnhSVldXaEx5aHFOeGlnSWxjNzhaaWJTbzdZVm13NFBoeUx4OFFWRGNuSkVtWnFtZjI3V2phem8yVTdqT09zN2dqQU56L1o0Ti8ydDNjL1pPTjRRY2lmYkt5dlk4TE9NdmRZbXVVL1dGOW43Ni83Mit2K3o5YjhiMDNldnAwZHkyTjJQTjJZdkEzL0JMazBwdHdBQUhpY1kyQmtZR0FBNGdjM0VxYkg4OXQ4WmVCbWZnRVVZYmpzdTBrR1FmL1BaSDdCSEFUa2NqQXdnVVFCWVc0TDFYaWNZMkJrWUdBTytwOEZKRjh3TVB6L0R5U0JJaWlBR3dDSDFBV2dBQUFBZUp4amZzSEF3QXpEa1ZDTXpoY0U0Z1VNREFDeTV3YS9BQUFBQUFEdUFaWUIzQUlpQWxZQ29nTmtBK2dFckFVS0FBRUFBQUFMQUpBQUNRQUFBQUFBQWdBa0FEUUFjd0FBQUhVTGNBQUFBQUI0bkhXUXkwN0NRQlNHLzVHTENva2FUZHc2S3dNeGxrc2lDeElTRWd4c2RFTU1XMU5LYVV0S2gwd0hFbDdEZC9CaGZBbWZ4WjkyTUFaaW0rbDg1NXN6WjA0SHdEVytJWkEvVHh3NUM1d3h5dmtFcCtoWkx0QS9XeTZTWHl5WFVNV2I1VEw5dStVS0hoQllydUlHSDZ3Z2l1ZU1GdmkwTEhBbExpMmY0RUxjV1M3UVAxb3VrbnVXUzdnVnI1Ykw5SjdsQ2lZaXRWekZ2ZmdhcU5WV1IwRm9aRzFRbCsxbXF5T25XNm1vb3NTTnBiczJvZEtwN011NVNvd2Z4OHJ4MUhMUFl6OVl4NjdlaC90NTR1czBVb2xzT2MyOUd2bUpyMTNqejNiVjAwM1FObVl1NTFvdDVkQm15SlZXQzk4elRtak1xdHRvL0QwUEF5aXNzSVZHeEtzS1lTQlJvNjF6YnFPSkZqcWtLVE1rTS9Pc0NBbGN4RFF1MXR3Ulppc3A0ejdIbkZGQzZ6TWpKanZ3K0YwZStURXA0UDZZVmZUUjZtRThJZTNPaURJdjJaZkQ3ZzZ6UnFRa3kzUXpPL3Z0UGNXR3A3VnBEWGZ0dXRSWlZ4TERneHFTOTdGYlc5QjQ5RTUySzRhMml3YmZmLzd2QitOcGhFOEFlSnh0eGtFT2d5QVFCZEQ1dElwSXI4S2hrSXdPQ1ZnQzQ2SzNiOUp1ZmF0SGh2NVd1dWRoOE1BVEUyWllMSEJZNGZFaW8ySlZRc2xEbDhLN2hpMGZydWREZnB1R3hNNDJ2V3ZsVTUzS1ZiY1JyalkzUGxNdVhuc2NFcmcyL2ZqWU5hZkNJUllsK2dKZnBCN1plSnhqOE43QmNDSW9ZaU1qWTEva0JzYWRIQXdjRE1rRkd4bFluVFl4TURKb2dSaWJ1WmdZT1NBc1BnWXdpODFwRjlNQm9EUW5rTTN1dEl2QkFjSm1abkRacU1MWUVSaXh3YUVqWWlOemlzdEdOUkJ2RjBjREF5T0xRMGR5U0FSSVNTUVFiT1poWXVUUjJzSDR2M1VEUys5R0pnWVhBQXgySS9RQUFBPT0pXG4gICAgZm9ybWF0KCd3b2ZmJyk7XG59XG5cbi5kZW1vLWljb24ge1xuICBmb250LWZhbWlseTogJ3NwcmVhZHZpZXctZGVtby1pY29uJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLmljb24tdGg6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMCc7XG59IC8qICfuoIAnICovXG4uaWNvbi10aC1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MDEnO1xufSAvKiAn7qCBJyAqL1xuXG5odG1sLFxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcbn1cblxuYSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuKiB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuLm1haW4tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcblxuICBoMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gIH1cblxuICAucm93IHtcbiAgICBmbGV4LWdyb3c6IDA7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgcGFkZGluZzogMCAyMHB4O1xuICB9XG5cbiAgdG9waWNzLFxuICB0b3BpYyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgLmdyaWQsXG4gICNkZXRhaWxHcmlkIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuLnRvcGljcy1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtc2hyaW5rOiAxO1xufVxuXG4uZ3JpZENvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDMwcHggLSAxMThweCAtIDYwcHgpO1xuICBwYWRkaW5nOiAwIDIwcHg7XG59XG5cbi5zaGFkb3cge1xuICBib3gtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjQpO1xufVxuXG4udG9waWMtY29udGFpbmVyLWNhcmQge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udG9waWMtY29udGFpbmVyLWNhcmQgLndyYXBwZXIge1xuICBtYXJnaW46IDE1cHg7XG59XG5cbi50b3BpYy1jb250YWluZXItbGlzdCAud3JhcHBlciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xufVxuXG4udG9waWMtY29udGFpbmVyLWxpc3QgLmlkY2FyZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDQwcHg7XG59XG4udG9waWMtY29udGFpbmVyLWxpc3QgLmRldGFpbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpO1xufVxuXG4udG9waWMtY29udGFpbmVyLWNhcmQgLmlkY2FyZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDcwcHg7XG59XG4udG9waWMtY29udGFpbmVyLWNhcmQgLmRldGFpbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDcwcHgpO1xufVxuLndyYXBwZXIgLmRldGFpbCAudGl0bGUge1xuICBmb250LXNpemU6IDE3cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LWZhbWlseTogUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cbi53cmFwcGVyIC5kZXRhaWwgLmRlc2NyaXB0aW9uIHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBtYXJnaW46IDE2cHggMHB4O1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICBmb250LWZhbWlseTogUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi51c2VyZGV0YWlsIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBtYXJnaW46IDhweCAwcHg7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDUpO1xufVxuXG4udXNlcmRldGFpbCAuYXV0aG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4udXNlcmRldGFpbCAuZGF0ZSB7XG4gIG1hcmdpbi1sZWZ0OiAxNXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi50b3BpYy1kZXRhaWxzLWNvbnRhaW5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBwYWRkaW5nOiAxNXB4O1xuICBtYXJnaW46IDAgMjBweDtcbn1cblxuLnRvcGljLWRldGFpbHMtY29udGFpbmVyIC50aXRsZSB7XG4gIGZvbnQtc2l6ZTogMzBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnRvcGljLWNvbnZlcnNhdGlvbi1jb250YWluZXIge1xuICBtYXJnaW46IDIwcHg7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMjMwcHgpO1xufVxuXG4uaW50cm8ge1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHggNDBweDtcbn1cbi5pbnRybyAubG9nbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLnNhbXBsZS1vcHRpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAxMHB4IDA7XG5cbiAgLnRvcGljIHtcbiAgICBjb2xvcjogIzk5OTtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gIH1cbn1cblxuLmludHJvIC5jb250ZW50IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMzBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLmludHJvIC5jb250ZW50IC53ZWxjb21lIHtcbiAgZm9udC1mYW1pbHk6ICdUcmVidWNoZXQgTVMnO1xuICBmb250LXNpemU6IDE5cHg7XG59XG5cbi5pbnRybyAuY29udGVudCAuZGVzY3JpcHRpb24ge1xuICBmb250LWZhbWlseTogJ1RyZWJ1Y2hldCBNUyc7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuLmNhcmQtbGF5b3V0LmdjLWdyaWQge1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbn1cblxuLmNhcmQtbGF5b3V0IC5nYy1yb3cge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNhcmQtbGF5b3V0IC5nYy1yb3c6aG92ZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi50aW1lbGluZS1sZWZ0c2hhcGUtZ3JvdXAge1xuICB3aWR0aDogMHB4O1xufVxuXG4udGltZWxpbmUtcmlnaHRzaGFwZS1ncm91cCB7XG4gIHdpZHRoOiAwcHg7XG59XG4uZ2MtZ3JpZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuLmVtcGxveWVlLXBob3RvLXNtYWxsIHtcbiAgd2lkdGg6IDMwcHg7XG4gIGhlaWdodDogMzBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uZW1wbG95ZWUtcGhvdG8ge1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDlkOWQ5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbn1cblxuLnBvc3RjYXJkIHtcbiAgd2lkdGg6IDUwcHg7XG4gIGhlaWdodDogNTBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4ucG9zdHRpdGxlIHtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44NSk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxN3B4O1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ucG9zdHVzZXIge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAjOTk5O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5wb3N0ZGF0ZSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM5OTk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5cbi5wb3N0Y2FyZGNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDgwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4ucG9zdGluZm8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5wb3N0ZGVzY3JpcHRpb24ge1xuICBtYXJnaW4tbGVmdDogOTNweDtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ucG9zdGRlc2NyaXB0aW9uIGEge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xufVxuXG4udGltZWxpbmUtZ3JvdXBpbmcgLnRpbWVsaW5lLWxpbmUge1xuICBib3JkZXI6IDNweCBzb2xpZCAjZTdlN2U3O1xufVxuXG4udGltZWxpbmUtZ3JvdXBpbmcgLnRpbWVsaW5lLWV2ZW50IHtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIGJvcmRlci1yaWdodDogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDlkOWQ5O1xuICBib3gtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjQpO1xufVxuXG4uaWRjYXJkY29udGFpbmVyIHtcbiAgbWFyZ2luLWxlZnQ6IDM5cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmVmZWY7XG4gIHBhZGRpbmctdG9wOiA1cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbiJdfQ== */
import DataView, { getControlByElement } from '@grapecity/dataviews.core'; import { GridLayout } from '@grapecity/dataviews.grid'; import TimelineGrouping from '@grapecity/dataviews.timeline'; import locale from './locale'; import { data } from './data'; const cols = [ { id: 'date', caption: 'Date', dataField: 'date', format: 'MMMM dd' }, { id: 'user', caption: 'user', dataField: 'user' }, { id: 'post', caption: 'post', dataField: 'post' }, { id: 'idcard', caption: 'idcard', dataField: 'idcard' }, ]; const gHLeftTemplate = ` <div class="idcardcontainer"> <img class="employee-photo shadow" src="{{=it.eval('=first([idcard]')}}"/> </div>`; const nilPost = { posts: [], }; export const selectedTopicId = () => { const hash = window.location.hash.split('/'); return parseInt(hash[hash.length - 1], 10); }; const findPost = id => data.find(t => t.id === id) || nilPost; const getPost = id => { const post = findPost(id); post.posts.forEach(post => { post.date = new Date(post.date); }); return post; }; const timeline = new TimelineGrouping({ axisLocation: 'left', groupHeaderLocation: 'onAxis', gutter: 120, }); const formatter = new GC.DataViews.GeneralFormatter(); const layout = new GridLayout({ grouping: { field: 'date', header: { height: 60, template: gHLeftTemplate, visible: true, }, converter: function(field) { return formatter.format(field); }, }, autoRowHeight: true, rowTemplate: '#topicDetailPostTmpl', groupStrategy: timeline, }); export function renderTopic(topicId) { const dataView = getControlByElement(document.body); if (dataView) dataView.destroy(); const post = getPost(topicId); const html = ` <div class="main-container"> <h2>${locale.title}</h2> <div style="height: 100%"> <div class="topic-details-container shadow"> <div class="wrapper"> <div class="postcardcontainer"> <img class="postcard" src="${post.idcard}" /> </div> <div class="postinfo"> <div class="posttitle">${post.title}</div> <div style="margin-top: 5px"> <div class="postuser"> ${locale.labelAuthor} ${post.user} </div> <div class="postdate">${post.date}</div> </div> </div> <div class="postdescription"> ${post.description} </div> </div> </div> <div class="topic-conversation-container"> <div id="detailGrid"></div> </div> </div> </div>`; const root = document.getElementById('root'); root.innerHTML = html; new DataView(document.getElementById('detailGrid'), post.posts, cols, layout); }
(function () { const IS_PROD = window.process.env.NODE_ENV === 'production'; const USE_NPM = window.process.env.USE_NPM; const USE_CDN = window.process.env.USE_CDN; const SITE_ROOT = window.process.env.SITE_ROOT; const FRAMEWORK = window.process.env.FRAMEWORK; const ext = IS_PROD ? '.min.js' : '.js'; function js(name) { return name + ext; } function npm(t) { if (!t.file) { t.file = IS_PROD ? t.prod : t.dev; } const version = USE_CDN && t.version ? '@' + t.version : ''; const path = t.pkg + version + '/' + t.file; if (USE_CDN) { return 'https://unpkg.com/' + path; } return 'npm:' + path; } function dv(t) { if (USE_CDN || USE_NPM) { t.file = 'dist/' + t.file + '.min.js'; return npm(t); } return SITE_ROOT + '/static/dataviews/' + js(t.file); } const isTypeScript = FRAMEWORK === 'angular'; const babelConfig = { es2015: true, react: true, }; const meta = { js: { babelOptions: babelConfig, }, ts: { typescriptOptions: { tsconfig: true }, }, }; const map = { // gc.dataviews packages '@grapecity/dataviews.common': dv({pkg:'@grapecity/dataviews.common',file:'gc.dataviews.common',version:'1.7.3'}), '@grapecity/dataviews.core': dv({pkg:'@grapecity/dataviews.core',file:'gc.dataviews.core',version:'1.7.3'}), '@grapecity/dataviews.grid': dv({pkg:'@grapecity/dataviews.grid',file:'gc.dataviews.grid',version:'1.7.3'}), '@grapecity/dataviews.cardlayout': dv({pkg:'@grapecity/dataviews.cardlayout',file:'gc.dataviews.cardlayout',version:'1.7.3'}), '@grapecity/dataviews.masonry': dv({pkg:'@grapecity/dataviews.masonry',file:'gc.dataviews.masonry',version:'1.7.3'}), '@grapecity/dataviews.calendar': dv({pkg:'@grapecity/dataviews.calendar',file:'gc.dataviews.calendar',version:'1.7.3'}), '@grapecity/dataviews.timeline': dv({pkg:'@grapecity/dataviews.timeline',file:'gc.dataviews.timeline',version:'1.7.3'}), '@grapecity/dataviews.trellis': dv({pkg:'@grapecity/dataviews.trellis',file:'gc.dataviews.trellis',version:'1.7.3'}), '@grapecity/dataviews.gantt': dv({pkg:'@grapecity/dataviews.gantt',file:'gc.dataviews.gantt',version:'1.7.3'}), '@grapecity/dataviews.searchbox': dv({pkg:'@grapecity/dataviews.searchbox',file:'gc.dataviews.searchbox',version:'1.7.3'}), '@grapecity/dataviews.react': dv({pkg:'@grapecity/dataviews.react',file:'gc.dataviews.react',version:'1.7.3'}), '@grapecity/dataviews.vue': dv({pkg:'@grapecity/dataviews.vue',file:'gc.dataviews.vue',version:'1.7.3'}), '@grapecity/dataviews.angular': dv({pkg:'@grapecity/dataviews.angular',file:'gc.dataviews.angular',version:'1.7.3'}), '@grapecity/dataviews.csvexport': dv({pkg:'@grapecity/dataviews.angular',file:'gc.dataviews.csvexport',version:'1.7.3'}), // third-party libs react: npm({pkg:'react',prod:'umd/react.production.min.js',dev:'umd/react.development.js',version:'16.13.1'}), 'react-dom': npm({pkg:'react-dom',prod:'umd/react-dom.production.min.js',dev:'umd/react-dom.development.js',version:'16.13.1'}), 'react-router-dom': npm({pkg:'react-router-dom',prod:'umd/react-router-dom.min.js',dev:'umd/react-router-dom.js',version:'5.1.2'}), 'vue': npm({pkg:'vue',file:'dist/vue.js',version:'2.6.11'}), 'vue-router': npm({pkg:'vue-router',file:'dist/vue-router.js',version:'3.1.6'}), 'lodash': npm({pkg: 'lodash', file: js('lodash')}), 'zone.js': npm({pkg: 'zone.js', file: js('dist/zone')}), 'rxjs': npm({pkg: 'rxjs', file: js('bundles/rxjs.umd')}), 'rxjs/operators': npm({pkg:'rxjs-operators-bundle',prod:'dist/bundle.min.js',dev:'dist/bundle.js',version:'1.0.2'}), '@angular/core': npm({pkg: '@angular/core', file: js('bundles/core.umd')}), '@angular/common': npm({pkg: '@angular/common', file: js('bundles/common.umd')}), '@angular/compiler': npm({pkg: '@angular/compiler', file: js('bundles/compiler.umd')}), '@angular/platform-browser': npm({pkg: '@angular/platform-browser', file: js('bundles/platform-browser.umd')}), '@angular/platform-browser-dynamic': npm({pkg: '@angular/platform-browser-dynamic', file: js('bundles/platform-browser-dynamic.umd')}), '@angular/http': npm({pkg: '@angular/http', file: js('bundles/http.umd')}), '@angular/common/http': npm({pkg: '@angular/common', file: js('bundles/common-http.umd')}), '@angular/router': npm({pkg: '@angular/router', file: js('bundles/router.umd')}), '@angular/forms': npm({pkg: '@angular/forms', file: js('bundles/forms.umd')}), // systemjs plugins 'systemjs-plugin-json': npm({pkg:'systemjs-plugin-json',file:'json.js',version:'0.3.0'}), 'systemjs-plugin-css': npm({pkg:'systemjs-plugin-css',file:'css.js',version:'0.1.37'}), 'systemjs-plugin-babel': npm({pkg:'systemjs-plugin-babel',file:'plugin-babel.js',version:'0.0.25'}), 'systemjs-babel-build': npm({pkg:'systemjs-plugin-babel',file:'systemjs-babel-browser.js',version:'0.0.25'}), 'plugin-typescript': npm({pkg:'plugin-typescript',file:'lib/plugin.js',version:'8.0.0'}), 'typescript': npm({pkg:'typescript',file:'lib/typescript.js',version:'3.8.3'}), 'systemjs-vue-browser': npm({pkg:'systemjs-vue-browser',file:'index.js',version:'1.0.11'}), }; const config = { defaultJSExtensions: true, transpiler: isTypeScript ? 'plugin-typescript' : 'systemjs-plugin-babel', typescriptOptions: { tsconfig: true }, meta: { '*.json': {loader: 'systemjs-plugin-json'}, '*.css': {loader: 'systemjs-plugin-css'}, '*.vue': {loader: 'systemjs-vue-browser'}, '*.js': meta.js, '*.ts': meta.ts, 'app.js': { format: 'esm', babelOptions: babelConfig, }, 'typescript': { exports: 'ts', }, '@grapecity/dataviews.common': { format: 'amd', }, '@grapecity/dataviews.core': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.grid': { format: 'amd', deps: [ '@grapecity/dataviews.common', '@grapecity/dataviews.core', ], }, '@grapecity/dataviews.cardlayout': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.masonry': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.calendar': { format: 'amd', deps: [ '@grapecity/dataviews.common', '@grapecity/dataviews.core', ], }, '@grapecity/dataviews.timeline': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.trellis': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.gantt': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.searchbox': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.react': { format: 'amd', deps: [ 'react', '@grapecity/dataviews.common', '@grapecity/dataviews.core' ], }, '@grapecity/dataviews.vue': { format: 'amd', deps: [ 'vue', '@grapecity/dataviews.common', '@grapecity/dataviews.core' ], }, '@grapecity/dataviews.angular': { format: 'amd', deps: [ '@angular/core', '@grapecity/dataviews.common', '@grapecity/dataviews.core' ], }, '@grapecity/dataviews.csvexport': { format: 'amd', deps: [ '@grapecity/dataviews.common' ], }, }, paths: { // paths serve as alias 'npm:': SITE_ROOT + '/node_modules/', }, // map tells the System loader where to look for things map: map, // packages tells the System loader how to load when no filename and/or no extension packages: { '.': { defaultExtension: isTypeScript ? 'ts' : 'js' }, node_modules: { defaultExtension: 'js' }, } }; // fast format detection to avoid detection by source code using regexp Object.keys(map).filter(function (key) { return !config.meta[key]; }).forEach(function (key) { const path = map[key]; if (path.indexOf('/umd') >= 0 || path.indexOf('.umd') >= 0) { config.meta[key] = { format: 'amd' }; } if (path.indexOf('/cjs') >= 0) { config.meta[key] = { format: 'cjs' }; } }); System.config(config); })(this);