Support Forum

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

This demo shows how to use the card layout and timeline strategy to implement a simple product support forum website. Try scrolling through the topics in the grid or change how those topics are displayed using the display button.
<!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 | MESCIUS 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" /> <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: 'E348418822993781#B0EWvwY4dNNVQqJHUDpFROVWe5ZWNYFlVQFmRsJWRht4Z6lDO4Vla7YUaXhEWxd7Z5YXMuRnY7tWTQRHSlVnaYlXNhlEOpdkZ0FHWYJ5QKd6VXN5aR3ieGhUav9kZTBXWahkYBhEVutmZ72CbjdlZvV5TVdGdiplQsZXe95kUmNmZVF5cJ3mcypWNyx4UydESE3UblxGZyE7KQ94R4BjbUxUewsiaoREMxRDNllWREV6Voh4Q4dDZPRjWrIzUJl4TERXcQZWMHp4Sp9WaMZzN5o6StJmVDJXcwIVVmR6UMVGOlxUW8RmTxZDZTJWVN5GZqJHZuVDMkVGSW3WdxNzKCdDdSB7TzY7cqlnMU5GVyNzNP9WMyhDRvEEOFdkQORDM4dFVlFFWqFWSyMjNQJiOiMlIsISQyIkQ9YjQxIiOigkIsUTM7YjNxYTM0IicfJye&amp;Qf35VfikFVVljI0IyQiwiIxYHITp4c7VWaWFGdhRkI0IiTis7W0ICZyBlIsIiNxUTN6ADI8EDMxMjMwIjI0ICdyNkIsIyc59yc5l6YzVWbuoCLwpmLzVXajNXZt9iKs2WauMXdpN6cl5mLqwSbvNmLzVXajNXZt9iKsAnau26YuMXdpN6cl5mLqwSbvNmL6VGZ9RXajVGchJ7ZuoCLuNmLt36YukHdpNWZwFmcn9iKs46bj9Se4l6YlBXYydmLqwicr9ybj9Se4l6YlBXYydmLqwCcq9ybj9Se4l6YlBXYydmLqIiOiMXbEJCLiMVVJN4UF5kI0ISYONkIsUWdyRnOiwmdFJCLiEDO7MTO9IjM8gTM4gDNzIiOiQWSisnOiQkIsISP3EkVxBVUHFDMplzLlVUdGd7cI9UeIt4SshESzV7NvY7ZxlDOuNTb5tzLr', SJS_LICENSE_KEY: 'E518585142165236#B0wm4nx4QzdlTHRTSOFzcvVnaJdjSnNEeXdTMUtSUzk6bU94QuVXNwZVZjd4SzYjcadXRIVEMzEXTThkVyR7R85UayoHZZBTYQ5mZyh4Shd6VxFXazF4cBNGRG5WTvUGTsV4T6knQYRzKxxUdk9EarplU7d6VLF6KIR7bPJ5N6ZUMWZWaURGRKRDbLJDN5YjSN5mUoxmaxonSD56LEh7Y7RXenpmTvomevZlV9dkaysCO7hTRQFHcGRWQyc5LI9kQmB7QwR4Z7ZHOR3CSXp6SiFWYzFXeXZUSp94K8VDTkFjdwl4KptSYlRWcDxmNE5kS6kzdrkVcNJXROVGbLJkcTNGRzIER8tmd4YGNhh7dxAnMvIHRv46VtBXS4U5KvJ6dZJ6M5p4TxIjd9I5QSpXTTV6SDZXb7lzaL56ZiojITJCLikTQxUTQFV4NiojIIJCLyETO7UzM7kTO0IicfJye&amp;Qf35VfikkR9IkI0IyQiwiIyEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsISNwkTN6ADI8EDMxMjMwIjI0ICdyNkIsIyc59yc5l6YzVWbuoCLwpmLzVXajNXZt9iKs2WauMXdpN6cl5mLqwSbvNmLzVXajNXZt9iKsAnau26YuMXdpN6cl5mLqwSbvNmL6VGZ9RXajVGchJ7ZuoCLuNmLt36YukHdpNWZwFmcn9iKs46bj9Se4l6YlBXYydmLqwicr9ybj9Se4l6YlBXYydmLqwCcq9ybj9Se4l6YlBXYydmLqIiOiMXbEJCLiMVVJN4UF5kI0ISYONkIsUWdyRnOiwmdFJCLiYzMyUjNxIDNxUDO5gTM5IiOiQWSiwSfdtlOicGbmJCLlNHbhZmOiI7ckJye0ICbuFkI1pjIEJCLi4TPRtGOhtWWEFWd4IDOLRVRvx4SyMGcDhTW6n4ep', }, }; </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"> <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="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; const lastYear = new Date().getFullYear() - 1; const theYearBeforeLast = lastYear - 1; const threeYearsAgo = theYearBeforeLast - 1; export const data = [ { id: 1, date: 'January 13,' + lastYear + ' 10:05:18', user: 'Peter Lechner', title: 'Scrollbar position – frozen 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,' + lastYear + ' 14:00:12', user: 'Peter Lechner', post: '<p>This is also the case if you do not have a frozen 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 14:05:23', user: 'kudlur', title: 'workbookIO deployment license', description: '<p>Hello,</p><p>I have a fully licensed myJSGridControl 8 with workbookIO installed locally on my development machine.</p> <p>Now I want to deploy just workbookIO services to my production server. But when I run“myJSGridControl workbookIO 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 workbookIO 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,' + lastYear + ' 12:54:51', user: 'Reeva', post: '<p>Hello Paramesh,</p><p>workbookIO is part of myJSGridControl 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 workbookIO services on server.</p><p>Thanks,</p><p>Reeva</p>', idcard: SITE_ROOT + '/images/Reeva.jpg', }, { date: 'July 26,' + lastYear + ' 16:29:13', user: 'kudlur', post: '<p>Thank You Reeva</p>', idcard: SITE_ROOT + '/images/kudlur.jpg', }, { date: 'July 26,' + lastYear + ' 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,' + lastYear + ' 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://developer.mescius.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 myJSGridControl 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 myJSGrid 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,' + lastYear + ' 14:17:26', user: 'Reeva', post: `<p>Hello,</p> <p> Until now, myJSGridControl’s Excel Import/Export features required an installed web service till myJSStudioGridControl version 8 . From latest myJSStudioGridControl version 9, workbookIO 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>workbookIO 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>Using the Excel Import and Export Component</a> <p>And also please go through installed sample which is workbookIOSample at this installed location on your machine:- </p> <p>C:\\Program Files (x86)\\MESCIUS\\myJSStudioGridControl 9\\myJSGridControl\\Javascript\\samples\\workbookIOSample</p> <p>And also now installing myJSGridControl doesn’t require IIS. Please go through this product requirement page for the same:-</p><p>And also now installing myJSGridControl doesn’t require IIS. Please go through this product requirement page for the same:-</p> <a>Product Requirements</a> <p>Hope it helps.</p><p>Thanks,</p><p>Reeva</p> `, idcard: SITE_ROOT + '/images/Reeva.jpg', }, { date: 'November 16,' + lastYear + ' 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,' + lastYear + ' 16:12:09', user: 'Reeva', post: '<p>Hello Troy,</p><p>You need to mail us.sales@mescius.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,' + theYearBeforeLast + ' 9:19:27', user: 'hlkhan', title: 'Pivot Tables and JSON Document Persistence for myJSGridControl', description: '<p>Hi,</p><p>I have couple of questions on myJSGridControl here:</p><p>1) Till the latest release of myJSGridControl-Enterprise.3.20172.48, is there a pivot table support on the myJSGridControl.<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 myJSGridControl, 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 myJSGridControl, 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,' + theYearBeforeLast + ' 10:32:01', user: 'manpreetkaur', post: '<p>Hello,</p><p>1. You can create tables in myJSGridControl 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></a><br /><a>HelpCentral Designin Serttab</a><p>You may even refer to the following demo sample which depicts the usage of Tables in myJSGridControl.</p><p>2. Currently, myJSGridControl does not provides an option to save the myJSGridControl to an xml file. You would need to save myJSGridControl 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 myJSGridControl 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,' + theYearBeforeLast + ' 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 myJSGridsheet 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,' + theYearBeforeLast + ' 10:55:20', user: 'manpreetkaur', post: '<p>Hello,</p><p>We have posted an enhancement request to provide pivot table support in myJSGridControl. 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>myJSGridControl 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,' + lastYear + ' 11:37:23', user: 'sandy7564', post: '<p>Hi Manpreet,</p><p>Is pivot table feature is added to the myJSGridControl? 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,' + lastYear + ' 17:01:28', user: 'manpreetkaur', post: '<p>Hello,</p><p>myJSGridControl 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 myJSGridControl 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,' + threeYearsAgo + ' 14:27:19', user: 'cvaldes', title: 'myJSGridControl Presale Questions', description: '<p>Hi there,</p><p>I have some questions before I purchase myJSGridControl.</p><p>1. I need to get the source code of myJSGridControl 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 myJSGridControl – I have no need for the other components. Can I get just myJSGridControl?Thanks</p>', idcard: SITE_ROOT + '/images/cvaldes.jpg', posts: [ { date: 'September 5,' + threeYearsAgo + ' 17:12:29', user: 'manpreetkaur', post: ` <p>Hello,</p> <p>Thank you for evaluating myJSGridControl. Kindly refer to the responses of your queries below:</p> <p>1. Once you purchase the license for myJSGridControl, you can then modify the source code of myJSGridControl.</p> <p>2. myJSGridControl can load the data in JSON format by using the myJSGridControl.data. Here is the demo sample that binds myJSGridControl to live JSON data.</p> <p>3. Currently, myJSGridControl does not provides support for HighCharts. But, you can use the HighChart on the same page, on which you are using myJSGridControl.</p> <p> Further, you can even display charts in the single cell of myJSGridControl with the use of SparkLines. Please refer to the following demo sample that describes the use of Sparklines in myJSGridControl. </p> <p> 4. You can easily create custom formulas in myJSGridControl with the help of custom functions. Please refer to the following links that describes how you can create custom formulas in myJSGridControl:<br/> <a> myJSGridControl Formulas </a><br/> <a> myJSGridControl 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: us.sales@mescius.com. </p> <p>Hope it helps.</p> <p>Thanks,</p> <p>Manpreet Kaur</p> `, idcard: SITE_ROOT + '/images/manpreetkaur.jpg', }, { date: 'September 6,' + threeYearsAgo + ' 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,' + threeYearsAgo + ' 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,' + threeYearsAgo + ' 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,' + threeYearsAgo + ' 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,' + theYearBeforeLast + ' 10:12:09', user: 'ulex80', title: 'myJSGridControl and charts', description: ` <p> myJSGridControl has no Chart in current version, but it is planed in future release.Now myJSGridControl has sparkline, it is a simple chart in cell. And myJSGridControl also support customize celltype, able to owner draw in cell.Here are some resource you may use as reference: </p> <a> HelpCentral Spark </a> <a> Sparkline Sample </a> <a> HelpCentral MyJSGrid </a> <a> CellType Sample </a> <p>Hope it help</p>`, idcard: SITE_ROOT + '/images/ulex80.jpg', posts: [ { date: 'February 6,' + theYearBeforeLast + ' 17:29:11', user: 'C1_EricP', post: '<p>Hello,</p><p>Thank you for evaluating myJSGridControl. Kindly refer to the responses of your queries below:</p><p>1. Once you purchase the license for myJSGridControl, you can then modify the source code of myJSGridControl.</p><p>2. myJSGridControl can load the data in JSON format by using the myJSGridControl.data. Here is the demo sample that binds myJSGridControl to live JSON data.</p><p>3. Currently, myJSGridControl does not provides support for HighCharts. But, you can use the HighChart on the same page, on which you are using myJSGridControl.</p><p>Further, you can even display charts in the single cell of myJSGridControl with the use of SparkLines. Please refer to the following demo sample that describes the use of Sparklines in myJSGridControl.</p><p>4. You can easily create custom formulas in myJSGridControl with the help of custom functions. Please refer to the following links that describes how you can create custom formulas in myJSGridControl:<br/><a>HelpCentral Formulas</a><br/><a>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@myJSGridControl.com.</p><p>Hope it helps.</p><p>Thanks,</p><p>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'February 7,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 14:45:29', user: 'ulex80', post: '<p>Sorry, forgot to ask – does myJSGridControl allow to read charts records from Excel format?</p>', idcard: SITE_ROOT + '/images/ulex80.jpg', }, { date: 'February 7,' + theYearBeforeLast + ' 15:20:23', user: 'C1_EricP', post: '<p>does myJSGridControl allow to read charts records from Excel format?No, not yet. It will be supported when myJSGridControl implement Chart in future.</p>', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'February 9,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + lastYear + ' 14:21:14', user: 'Jeb', title: 'Not accepting last zero in decimal value in myJSGridControl', 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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>HelpCentral Cell Format</a><br/><a>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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 11:26:59', user: 'luculus', title: 'myJSGridControl: dragging cells affects hidden rows (reposting in Customer Support)', description: '<p>Hello,</p><p>On my page I want to use the myJSGridControl myJSGridControl 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 10:22:43', user: 'manpreet', post: '<p>Hello,</p><p>I could not observe the same behaviour with MS Excel which was observed with myJSGridControl 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,' + lastYear + ' 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 myJSGridControl manually throught the java code??is this is possible.I getting problem sinece the json string which will be genarated by workbookIO service or myJSGrid 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 myJSGrid 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 workbookIO 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,' + lastYear + ' 17:22:34', user: 'udayab', post: '<p>please replay for this issue??</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 17,' + lastYear + ' 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 myJSGridControl 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 myJSGridControl.</p><p>You can get an idea of what all tags are used by myJSGridControl to generate the ssjson string for a specific layout by loading the sample Excel file into myJSGridControl 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 myJSGridControl 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,' + lastYear + ' 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,' + lastYear + ' 15:22:21', user: 'udayab', post: '<p>if i use 300 t0 400 sheets???</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 19,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 11:20:19', user: 'udayab', post: '<p>i have constructed the json template in java successfully loaded that json in to myJSGridControl suceesfully.thanks for your valuable suggetion.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'May 21,' + lastYear + ' 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,' + theYearBeforeLast + ' 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 myJSGrid 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 myJSGridControl so that i can construct the json array as template like attached file and directly set that to the myJSGridControl sheets like sheet.setDataSource(json)?if its possible please reply for this.</p>', idcard: SITE_ROOT + '/images/udayab.jpg', posts: [ { date: 'August 7,' + theYearBeforeLast + ' 12:01:23', user: 'C1_EricP', post: '<p>You may use myJSGridControl 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 myJSGridControl by using fromJSON method <br/><a>HelpCentral Json</a><br/>hope it helps,</p>', idcard: SITE_ROOT + '/images/C1_EricP.jpg', }, { date: 'August 8,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 17:32:12', user: 'udayab', post: '<p>Is it possible to write a code in java like for writing to the myJSGrid sheet (MS Excel)using Apache poi to myJSGrid designer? this is because i can design the template manualyy since the data changes dynamically each time ,while i have to genarate the myJSGrid sheet dynamically???is it possible to create a myJSGridControl file(ssjsonfile)dynamically by writing to the myJSGrid designer sheet?????</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'August 11,' + theYearBeforeLast + ' 12:05:25', user: 'manpreet', post: '<p>Hello,</p><p>As mentioned above myJSGrid designer is a graphical user interface used to design myJSGrid sheets or load Excel files. It would not be possible to use the JAVA code to write something in the myJSGrid designer. You would either need to load the Excel file with all the styles, save it as ssjson and then load it in myJSGridControl, 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,' + theYearBeforeLast + ' 14:52:36', user: 'udayab', post: '<p>how to load in to myJSGrid designer throgh application means java code???</p>', idcard: SITE_ROOT + '/images/udayab.jpg', }, { date: 'August 12,' + theYearBeforeLast + ' 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, date: 'September 5,' + theYearBeforeLast + ' 9:36:17', user: 'john', title: 'myJSGridControl database interaction', description: '<p>I am using myJSGridControl myJSGridsheet 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 17:54:39', user: 'john', post: '<p>thank you.</p>', idcard: SITE_ROOT + '/images/john.jpg', }, { date: 'September 9,' + theYearBeforeLast + ' 10:02:34', user: 'manpreet', post: '<p>Hello,</p><p>As per the development team, currently myJSGridControl does not provides full dirty cell concept. They are planning to add this ability in the future releases of myJSGridControl.</p><p>Currently, as a workaround, you could use getDirtyRows and clearPendingChanges method to simulate the desired behaviour. Please see the sample in myJSGridControl 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,' + theYearBeforeLast + ' 11:01:20', user: 'Peter Lechner', title: 'myJSGridControl 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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 myJSGridControl i.e. 2017v2.13. I would suggest you to test the issue with the latest version of myJSGridControl 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,' + theYearBeforeLast + ' 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>Selected Cells Are Black After Loading Excel myJSGridsheet</a></p><p>The decimal separator of the DefaultAppUser must be a “.” in the user profile, otherwise the workbookIO 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,' + theYearBeforeLast + ' 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 workbookIO 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,' + theYearBeforeLast + ' 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 workbookIO service on the same machine. However, the zoom functionality of myJSGridControl 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + theYearBeforeLast + ' 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,' + lastYear + ' 12:01:05', user: 'nikhilbangar', title: 'Bluring myJSGridsheet as I zoom in', description: '<p>Hey I just started working on myJSGrid.js and my point of concern is that as resolution of browser goes high the myJSGridsheet 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,' + lastYear + ' 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 myJSGridControl 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,' + lastYear + ' 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,' + lastYear + ' 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 myJSGridControl.</p>', idcard: SITE_ROOT + '/images/nikhilbangar.jpg', }, { date: 'October 23,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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 myJSGridControl and I zoom in the browser window, the only myJSGridControl is zoomed in. However, the column header text does not becomes blurred.</p><p>b) When the focus is not on myJSGridControl 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 myJSGridControl 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 myJSGridControl 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 myJSGridControl.</p><p>Thanks,<br/>Manpreet Kaur</p>', idcard: SITE_ROOT + '/images/manpreet.jpg', }, { date: 'October 23,' + lastYear + ' 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,' + lastYear + ' 17:32:36', user: 'manpreet', post: '<p>Hello,</p><p>As per the discussion above, the myJSGridControl data gets blurred when the user zooms in the web page or the myJSGridControl 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,' + lastYear + ' 14:35:41', user: 'justforp', post: '<p>Hi There,</p><p>I can confirm this that the myJSGridsheet 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,' + lastYear + ' 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,' + lastYear + ' 16:49:37', user: 'manpreet', post: '<p>Hello,</p><p>Your query has been answered at the following forum link:<br/><a>myJSGridControl 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,' + lastYear + ' 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 workbookIO 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 16:02:38', user: 'DeepakSharma14', post: '<p>Hello Rohit,</p><p>I have submitted it as an enhancement request for myJSGridControl Export service to our system. You may go ahead and add submit it here :</p><a>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,' + lastYear + ' 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,' + lastYear + ' 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,' + lastYear + ' 17:38:31', user: 'DeepakSharma14', post: '<p>Hello,</p><p>We posted this as an enhancement request. Adding this feature to myJSGridControl 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>myJSGridControl.uservoice.com/</a><p>Thanks,<br/>Deepak Sharma</p>', idcard: SITE_ROOT + '/images/DeepakSharma14.jpg', }, ], }, ];
module.exports = { title: 'MyJSGridControl 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 - 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNob3djYXNlL1N1cHBvcnRGb3J1bS9wdXJlanMvc3R5bGVzLmNzcyIsIlNob3djYXNlL1N1cHBvcnRGb3J1bS9wdXJlanMvc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDQWhCO0VBQ0UsbUNBQUE7RUFDQSxtMkxBQUE7QURFRjtBQ0VBO0VBQ0UsbUNBQUE7RUFDQSxrQkFBQTtFQUNBLHFCQUFBO0VBQ0Esa0JBQUE7RUFDQSxtQ0FBQTtFQUNBLGtDQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtBREFGOztBQ0dBO0VBQ0UsWUFBQTtBREFGOztBQ0NFLFFBQUE7QUFDRjtFQUNFLFlBQUE7QURFRjs7QUNERSxRQUFBO0FBRUY7O0VBRUUsWUFBQTtFQUNBLHlCQUFBO0FER0Y7O0FDQUE7RUFDRSxlQUFBO0FER0Y7O0FDQUE7RUFDRSw4QkFBQTtBREdGOztBQ0FBO0VBQ0UsYUFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7QURHRjtBQ0RFO0VBQ0UsaUJBQUE7QURHSjtBQ0FFO0VBQ0UsWUFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0FERUo7QUNDRTs7RUFFRSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7QURDSjtBQ0VFOztFQUVFLFdBQUE7RUFDQSxZQUFBO0FEQUo7O0FDSUE7RUFDRSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxjQUFBO0FEREY7O0FDSUE7RUFDRSxXQUFBO0VBQ0EsZ0NBQUE7RUFDQSxlQUFBO0FEREY7O0FDSUE7RUFDRSxzRUFBQTtBRERGOztBQ0lBO0VBQ0UsZ0JBQUE7QURERjs7QUNJQTtFQUNFLFlBQUE7QURERjs7QUNJQTtFQUNFLFlBQUE7RUFDQSxrQkFBQTtBRERGOztBQ0lBO0VBQ0UscUJBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7QURERjs7QUNHQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3QkFBQTtBREFGOztBQ0dBO0VBQ0UscUJBQUE7RUFDQSxtQkFBQTtFQUNBLFdBQUE7QURBRjs7QUNFQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7RUFDQSx3QkFBQTtBRENGOztBQ0NBO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0VBQ0Esc0NBQUE7QURFRjs7QUNBQTtFQUNFLGVBQUE7RUFDQSxnQkFBQTtFQUNBLHlCQUFBO0VBQ0Esc0NBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QURHRjs7QUNBQTtFQUNFLGVBQUE7RUFDQSxlQUFBO0VBQ0EsMEJBQUE7QURHRjs7QUNBQTtFQUNFLHFCQUFBO0FER0Y7O0FDQUE7RUFDRSxpQkFBQTtFQUNBLHFCQUFBO0FER0Y7O0FDQUE7RUFDRSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxjQUFBO0FER0Y7O0FDQUE7RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7QURHRjs7QUNBQTtFQUNFLFlBQUE7RUFDQSwwQkFBQTtBREdGOztBQ0FBO0VBQ0UsV0FBQTtFQUNBLGlCQUFBO0VBQ0Esa0JBQUE7QURHRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7QURJRjs7QUNEQTtFQUNFLGFBQUE7RUFDQSxtQkFBQTtFQUNBLDhCQUFBO0VBQ0EsZUFBQTtBRElGO0FDRkU7RUFDRSxXQUFBO0VBQ0EsZUFBQTtBRElKOztBQ0FBO0VBQ0UscUJBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0FER0Y7O0FDQUE7RUFDRSwyQkFBQTtFQUNBLGVBQUE7QURHRjs7QUNBQTtFQUNFLDJCQUFBO0VBQ0EsZUFBQTtBREdGOztBQ0FBO0VBQ0UsaUJBQUE7QURHRjs7QUNBQTtFQUNFLGdDQUFBO0FER0Y7O0FDQUE7RUFDRSxlQUFBO0FER0Y7O0FDQUE7RUFDRSxVQUFBO0FER0Y7O0FDQUE7RUFDRSxVQUFBO0FER0Y7O0FDREE7RUFDRSx5QkFBQTtFQUNBLFlBQUE7QURJRjs7QUNEQTtFQUNFLFdBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7QURJRjs7QUNEQTtFQUNFLFdBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQ0FBQTtFQUNBLHVCQUFBO0FESUY7O0FDREE7RUFDRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLGtCQUFBO0FESUY7O0FDREE7RUFDRSwwQkFBQTtFQUNBLHFCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0FESUY7O0FDREE7RUFDRSxlQUFBO0VBQ0EsV0FBQTtFQUNBLHFCQUFBO0FESUY7O0FDREE7RUFDRSxlQUFBO0VBQ0EsV0FBQTtFQUNBLHFCQUFBO0VBQ0EsaUJBQUE7QURJRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EsV0FBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7QURJRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EsbUJBQUE7QURJRjs7QUNEQTtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7QURJRjs7QUNEQTtFQUNFLHFCQUFBO0VBQ0EscUJBQUE7RUFDQSxxQkFBQTtBRElGOztBQ0RBO0VBQ0UseUJBQUE7QURJRjs7QUNEQTtFQUNFLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxrQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0NBQUE7RUFDQSxzRUFBQTtBRElGOztBQ0RBO0VBQ0UsaUJBQUE7RUFDQSx5QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtBRElGIiwiZmlsZSI6IlNob3djYXNlL1N1cHBvcnRGb3J1bS9wdXJlanMvc3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJzcHJlYWR2aWV3LWRlbW8taWNvblwiO1xuICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtiYXNlNjQsZDA5R1JnQUJBQUFBQUJGY0FBOEFBQUFBSGR3QUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJIVTFWQ0FBQUJXQUFBQURNQUFBQkNzUDZ6N1U5VEx6SUFBQUdNQUFBQVF3QUFBRlkrSVVreVkyMWhjQUFBQWRBQUFBQjJBQUFCN2dsUDdRMWpkblFnQUFBQ1NBQUFBQk1BQUFBZ0J0WC9BbVp3WjIwQUFBSmNBQUFGa0FBQUMzQ0trWkJaWjJGemNBQUFCK3dBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFIOUFBQUJtWUFBQW9VTHBxeWxHaGxZV1FBQUE1Y0FBQUFNQUFBQURZSm9xZllhR2hsWVFBQURvd0FBQUFkQUFBQUpBYzlBMTFvYlhSNEFBQU9yQUFBQUJnQUFBQXNKNTBBQUd4dlkyRUFBQTdFQUFBQUdBQUFBQmdOTUE5TWJXRjRjQUFBRHR3QUFBQWdBQUFBSUFFaEREWnVZVzFsQUFBTy9BQUFBWGNBQUFMTnpKMGNIbkJ2YzNRQUFCQjBBQUFBYkFBQUFKQzh0OW1oY0hKbGNBQUFFT0FBQUFCNkFBQUFodVZCSzd4NG5HTmdaR0JnNEdLUVk5QmhZSFJ4OHdsaDRHQmdZWUFBa0F4alRtWjZJbEFNeWdQS3NZQnBEaUJtZzRnQ0FJb2pBMDhBZUp4allHU2V4VGlCZ1pXQmdhbUthUThEQTBNUGhHWjh3R0RJeUFRVVpXQmxac0FLQXRKY1V4Z2NYakM4NEdRTytwL0ZFTVVjeERBZEtNd0lrZ01BOGNnTDBRQjRuTzJSMFEzQ1FBeEQzOUZRNkttajhNbEFmREVMbzJhTDFrazlCcEdlcFZpNSs3Q0JPN0NJbHdnWVh3WTFIN21qL1lYWmZ2RHVteWcvdCtPUVVxbzlXbSs2RGYyNDh1REoxdTlXL3JPMy9yek55dTJpa3pSS2p6VFZTSnJLTmsyMWxVWXBrMFo1azBiSmswWWRxS2tMNWdsM1h4dE5BQUI0bkdOZ1FBTVNFTWdjOUQ4VGhBRVNaZ1BiQUhpY3JWWnBkOU5HRkIxNVNaeUVMQ1VMTFdwaHhNUnBzRVltYk1HQUNVR3lZeUJkbksyVm9Jc1VPK20rOFluZjRGL3paTnB6NkRkK1d1OGJMeVNRdE9kd21wT2pkK2ZOMWN6YlpSSmFrdGdMNjVHVW15L0YxTlltamV3OENlbUdUY3RSZkNnN2V5Rmxpc25mQlZFUXJaYmF0eDJIUkVRaVVMV3VzRVFRK3g1Wm1tUjg2RkZHeTdha1YwM0tMVDNwTGx2alFiMVYzMzRhT3NxeE82R2taak4wYUQyeUpWVVlWYUpJcGoxUzBxWmxxUG9yU1N1OHY4TE1WODFRd29oT0ltbThHY2JRU040Ylo3VEthRFcyNHlpS2JMTGNLRklrbXVGQkZIbVUxUkxuNUlvSkRNb0h6WkR5eXFjUjVjUDhpS3pZbzV4V3NFdTIwL3krTDNtbmR6ay9zVjl2VWJia1FCL0lqdXpnN0hRbFg0UmJXMkhjdEpQdEtGUVJkdGQzUW16WjdGVC9aby95bWtZRHR5c3l2ZENNWUtsOGhSQXJQNkhNL2lGWkxaeFArWkpIbzFxeWtSTkI2MlZPN0VzK2dkYmppQ2x4elJoWjBOM1JDUkhVL1pJekRQYVlQaDc4OGQ0cGxnc1RBbmdjeTNwSEpad0lFeWxoY3pSSjJqQnlZQ1ZsaXlxcDlhNllPT1YxV3NSYnduN3QydEdYem1qalVIZGlQRnNQSFZzNVVjbnhhRktubVV5ZDJrbk5veWtOb3BSMEpuak1yd01vUDZKSlhtMWpOWW1WUjlNNFpzYUVSQ0lDTGR4TFUwRXNPN0drS1FUTm94bTl1UnVtdVhZdFdxVEpBL1hjby9mMDVsYTR1ZE5UMmc3MHMwWi9WcWRpT3RnTDArbHA1Qy94YWRybElrWHArdWtaZmt6aVFkWUNNcEV0TnNPVWd3ZHYvUTdTeTllV0hJWFhCdGp1N2ZNcnFIM1dSUENrQWZzYjBCNVAxU2tKVElXWVZZaFdRR0t0YTFtV3lkV3NGcW5JMUhkRG1sYStyTk1FaW5JY0Y4ZStqSEg5WHpNemxwZ1N2dCtKMDdNakxqMXo3VXNJMHh4OG0zVTltdGVweFhJQmNXWjVUcWRabHUvck5NZnlBNTNtV1o3WDZRaExXNmVqTEQvVWFZSGxSem9kWTNsQkM1cDAzOEdRaXpEa0FnNlFNSVNsQTBOWVhvSWhMQlVNWWJrSVExZ1dZUWpMSlJqQzhtTVl3bklaaHJDOHJHWFYxRk5KNDlxWldBWnNRbUJpamg2NXpFWGxhaXE1VkVLN2FGUnFRNTRTYnBWVUZNK3FmMldnWGp6eWhqbXdGa2lYeUpwZk1jNlZqMGJsK05ZVkxXOGFPMWZBc2Vwdkg0NzJPZkZTMW91RlB3WC8xZFpVSmIxaXpjT1RxL0FiaHA1c0o2bzJxWGgwVFpmUFZUMjYvbDlVVkZnTDlCdEloVmdveXJKc2NHY2loSTg2bllacW9KVkR6R3pNUExUcmRjdWFuOFA5TnpGQ0ZsRDkrRGNVR2d2Y2cwNVpTVm50NEt6VjE5dXkzRHVEY2pnVExFa3hOL1A2VnZnaUk3UFNmcEZaeXA2UGZCNXdCWXhLWmRocUE2MFZ2TmtuTVErWjNpVFBCSEZiVVRaSTJ0ak9CSWtOSFBPQWVmT2RCQ1poNnFvTjVFN2hoZzM0QldGdXdYa25YS0o2b3l5SDdrWHM4eWlrL0Z1bjRrVDJxR2lNd0xQWkcyR3Y3MExLYjNFTUpEVDVwWDRNVkJXaHFSZzFGZEEwVW02b0JsL0cyYnB0UXNZTzlDTXFkc095ck9MRHh4YjNsWkp0R1lSOHBJalZvNk9mMWw2aVRxcmNmbVlVbCsrZHZnWEJJRFV4ZjN2ZmRIR1F5cnRheVRKSGJRTlR0eHFWVTllYVErTlZoK3JtVWZXOTQrd1RPV3VhYnJvbkhucGYwNnJid2NWY0xMRDJiUTdTVWlZWDFQVmhoUTJpeThXbFVPcGxORW52dUFjWUZoalE3MUNLamYrcit0aDhuaXRWaGRGeEpOOU8xTGZSNTJBTS9BL1lmMGYxQTlEM1kraHlEUzdQOTVvVG4yNzA0V3lacnFJWDY2Zm9OekJycmJsWnVnYmMwSFFENGlGSHJZNjR5ZzE4cHdaeGVxUzVIT2toNEdQZEZlSUJ3Q2FBeGVBVDNiV001bE1Bby9tTU9UN0E1OHhoMEdRT2d5M21NTmhtemhyQURuTVk3REtId1I1ekdIekJuSFdBTDVuRElHUU9nNGc1REo0d0p3QjR5aHdHWHpHSHdkZk1ZZkFOYys0RGZNc2NCakZ6R0NUTVliQ3Y2ZFl3ekMxZTBGMmd0a0ZWb0FOVFQxamN3K0pRVTJYSS9vNFhodjI5UWN6K3dTQ20vcWpwOXBENkV5OE05V2VEbVBxTFFVejlWZE9kSWZVM1hoanE3d1l4OVErRG1QcE12eGpMWlFhL2pIeVhDZ2VVWFd3KzUrK0o5dy9ieFVDNUFBRUFBZi8vQUE5NG5LVlZXVzhiMXhVKzU5N1pPQnl1bW9XeXlERTNjV3hTa0Z5dWlxeFNsQmZRa3VrRnRwRFFTYVRRanF5MmtHM0pEZUNnNlBhZ3dMWFJKZ0t5RktoYkJBaXN4d2F0K3RLWEFIMW9uN29BYlg1Q0h3SVpSWkduUHJTSXhqMlhZaFU3aWJxZ1E4Njk1N3Zuek15NTV6dm5YQWdBUFA0NzMrRkJpTUJobUlBWnVBQXZ3UnA4RnpiaFFxc1RDekUxYWpDRnEwb3ZFbUE4ckRHR25QV0NNa01BWEJBelFsZVhHQ0IwM3ZqKzNZM3ZmUFBPSzdkV1YxNWVldUhaeStmUDFnWlhKUzZuU3FPV3FhaTViTUdyVmV0T3BXekhDSHNEM0NDTW45RUxYTUk5ZkJ6MzhCZlpmeG4vdmIzUUMvdWhnVjdndnQ1TjI3OXdYS1RSVGo4aDR2Vjk0TGorVHc3UzRNcW5EejVoOWJUaWlaYy91R0VUdEc3UWExeFVWc1hrckFvTC93OVBhRmgrVmRpTHdmLzkvMnFFMnY0NkFDaGZ5TzEwNjVrZ3FqcjJPUTBnMTdEUHFJeDlRbWtpUGlVVWRINkdRdU8vcFRBejBHY09vR1NnYjJUMktNa05jQ1Z6TUNYc3QybDc5MUVmTWNkeGR4c0g2L0FwOVA4Ri9lbDRVb0FlMytOWDJGOGhCZmxXQmhobmE3U0k2OEFCK0FKd0RsMFNvRk53N0p3a0owclkzNTFqbXhGVXNoNFdxZzJzbHcrandMUlhmaVdmOGwvZHNxeWlkZHp5M3paTnZHRk4yVVhMMnNMN3FUd3V0ZDNpbGpsdGxnWUtYQldXVS9iV0VkajNwVWErdUgxZk9PTnJZblVkcUNEWkFsQ1pkb0dZN2RpakJiUHZpNm1TRXhQa3hBeG1CaldUOFFTcWx4MjBlYzMwMzdHbnJLSnRQL1JmVGVYektiei8wTGFML1ErYk9PV2F3c09pTlcwOUxMcmtHVzVaMHdRdC94Mno3OHYzS005cU1BUmVLNjlUQm1FN2dIQTZTTTZjSXE4UUZvVExYUkdzVHI3QVpMdGtWWnR5cFJiQVdEWXNIenR6cC9mMnhaUDRpdi82eXJVSDg5ZktZOS9ZL1BPYksrVkQwdC84SC9pdm84SGkyVlBYZnRqL3p0ZjREdnMxRkNEWkdoNmh0MkU3aEhCS3ZKZDJEeXY1Ykk3SkZ1MDFqTG1zcDZqMG85UXExQXUweXhsc3Noa2NSNi9hWkpXeWkzem43a2Yzdk9LdHQwYnllcGd6aVhGRENwbXFHVlVqM1dXOCtOb0h5L2MrdW90TFY3ZDYwdFdDSnFHaEk5TWtIcEhEdHBaTURoWExieTdNdmRhYjdHMEo5aDl2OCtmNUpkQ2dDYmZnWEd0K2JyYkJ1WXh0a0NsSlpINFRkQUNtUTQ4c21LeXhKWHBHbGJqYUF3a1VTWG1STmhMb1FpQmc0TnpOMVpYbDBVb3pXZi9TWWFzVXBKSnJWTWRSTWUwbVlyWGc1YXAxajZZd1U1VUloaG5kNk9WaXRCM0pzYW0rYWxXdmlWV3ZYaU9iSmpaTTFiYjI3a0VWRnNSWWk0bGFyRGZxalNacjFFVW95SUJxZDlOTzJ2Um5HMlBKMzlReDJ3aUhUU2ZraG9MaGhHNGJwaDZQcTNZNGFTVFpuYm1UcXl4cTZpazlFRSswUjJRTE03M3paK3BmUFQxcnZKY3FGbE0vTXA5SkowT0duYkNURS9OSFJxNU5QYnNjTVZuaVVJS1plREZWeFBUWDA0MHFSazdNSjBLRldEaWFEZ3pwQnZvL1pvcWlLZXpvWWlRYUtCNkpKNzFRWHNPeVZUNGFOMHNGdzVnc25YLytrT01VVTNqZExZYm1pbTc0Uk1lMjh1ZG5LNU1pdHlpT2dvTno3REYxUFJPR0lROTNXMVRCVEU3WllZbzBHNllDQVM2YW05USsrL1A0eFc3TEkyN2t0YjBpSnRWYVAwOWZWaEFsQ1MvUmhOSnpJS0YwZHFSVitMd2xySDNlOEVvckRwQkpKNXhvSktDUkc0cXBVaTQ2RFUrMUtoWldjMWtxUU11c2xLa0plQTdtYWtodHdHdjBHOEx2eWh1Vk0vaVNJVXYrbjZTUUxPRUVkM2Y4WXp2OG5MbTRzMmdldHplSW9ZM0tkSnNwaHVSL0tOR0k0OUx0SFgvaUVUNUlXWXVQWHJTc0RSc0dQWCtieC9kNy9uRTRDVitCNWRiVjUwNHpSVHVhR1k0RlVLSEcwSlk1STBGQnVDa3hCcW9DNmlxRUlhQ0ZBNzFJaUdtR3poVFVsQ1ZRZzBGMUFWUTEySVdnR3V4Y1g3NjY5TUtWeTVjdWRPYmFzek5tM2l5SUt4ZWxSTVhZWHBidDVWZlpkdjRESG9wbFlxYUwxUFlwdHlzZUpiZENBUk0yc2NHaEVNdjk2N0J1VURaVGloNUdjY2E0dXBiWDlQNncrYW40aHE3dWlhcCt4amMwamVFZm1hYjU5Lzh4SXNuYmlvUi8wYlY2ZGRRL05sckZtckQ3cVJjWW8rTmpUUFBlMTNUOHBmOHJzWWl6WWp4QTlwZFpiUGRqS2dYZFpOZG42YVNVTDlNWGR6OGVQM1ZpbkEzMW5WaTBrdWlhaTNxZmgzZjVKaytKU29jZ1JDa25YWmh2dFVVWDR3aWlBMUJqb0U0Z2c2VEkwcEp1YUZ4UlZXV2hMeWhxTnhpZ0lsYzc4WmliU283WVZtdzRQaHlMeDhRVkRjbkpFbVpxbWYyN1dqYXpvMlU3ak9PczdnakFOei9aNE4vMnQzYy9aT040UWNpZmJLeXZZOExPTXZkWW11VS9XRjluNzYvNzIrdit6OWI4YjAzZXZwMGR5Mk4yUE4yWXZBMy9CTGswcHR3QUFIaWNZMkJrWUdBQTRnYzNFcWJIODl0OFplQm1mZ0VVWWJqc3Uwa0dRZi9QWkg3QkhBVGtjakF3Z1VRQllXNEwxWGljWTJCa1lHQU8rcDhGSkY4d01Qei9EeVNCSWlpQUd3Q0gxQVdnQUFBQWVKeGpmc0hBd0F6RGtWQ016aGNFNGdVTURBQ3k1d2EvQUFBQUFBRHVBWllCM0FJaUFsWUNvZ05rQStnRXJBVUtBQUVBQUFBTEFKQUFDUUFBQUFBQUFnQWtBRFFBY3dBQUFIVUxjQUFBQUFCNG5IV1F5MDdDUUJTRy81R0xDb2thVGR3Nkt3TXhsa3NpQ3hJU0VneHNkRU1NVzFOS2FVdEtoMHdIRWw3RGQvQmhmQW1meFo5Mk1BWmltK2w4NTVzelowNEh3RFcrSVpBL1R4dzVDNXd4eXZrRXAraFpMdEEvV3k2U1h5eVhVTVdiNVRMOXUrVUtIaEJZcnVJR0g2d2dpdWVNRnZpMExIQWxMaTJmNEVMY1dTN1FQMW91a251V1M3Z1ZyNWJMOUo3bENpWWl0VnpGdmZnYXFOVldSMEZvWkcxUWwrMW1xeU9uVzZtb29zU05wYnMyb2RLcDdNdTVTb3dmeDhyeDFITFBZejlZeDY3ZWgvdDU0dXMwVW9sc09jMjlHdm1KcjEzanozYlYwMDNRTm1ZdTUxb3Q1ZEJteUpWV0M5OHpUbWpNcXR0by9EMFBBeWlzc0lWR3hLc0tZU0JSbzYxemJxT0pGanFrS1RNa00vT3NDQWxjeERRdTF0d1JaaXNwNHo3SG5GRkM2ek1qSmp2dytGMGUrVEVwNFA2WVZmVFI2bUU4SWUzT2lESXYyWmZEN2c2elJxUWt5M1F6Ty92dFBjV0dwN1ZwRFhmdHV0UlpWeExEZ3hxUzk3RmJXOUI0OUU1Mks0YTJpd2JmZi83dkIrTnBoRThBZUp4dHhrRU9neUFRQmRENXRJcElyOEtoa0l3T0NWZ0M0NkszYjlKdWZhdEhodjVXdXVkaDhNQVRFMlpZTEhCWTRmRWlvMkpWUXNsRGw4SzdoaTBmcnVkRGZwdUd4TTQydld2bFU1M0tWYmNScmpZM1BsTXVYbnNjRXJnMi9mallOYWZDSVJZbCtnSmZwQjdaZUp4ajhON0JjQ0lvWWlNalkxL2tCc2FkSEF3Y0RNa0ZHeGxZblRZeE1ESm9nUmlidVpnWU9TQXNQZ1l3aTgxcEY5TUJvRFFua00zdXRJdkJBY0ptWm5EWnFNTFlFUml4d2FFallpTnppc3RHTlJCdkYwY0RBeU9MUTBkeVNBUklTU1FRYk9aaFl1VFIyc0g0djNVRFMrOUdKZ1lYQUF4MkkvUUFBQT09KSBmb3JtYXQoXCJ3b2ZmXCIpO1xufVxuLmRlbW8taWNvbiB7XG4gIGZvbnQtZmFtaWx5OiBcInNwcmVhZHZpZXctZGVtby1pY29uXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5pY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi7qCAXCI7XG59XG5cbi8qICfuoIAnICovXG4uaWNvbi10aC1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi7qCBXCI7XG59XG5cbi8qICfuoIEnICovXG5odG1sLFxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcbn1cblxuYSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuKiB7XG4gIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuLm1haW4tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5tYWluLWNvbnRhaW5lciBoMiB7XG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xufVxuLm1haW4tY29udGFpbmVyIC5yb3cge1xuICBmbGV4LWdyb3c6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBwYWRkaW5nOiAwIDIwcHg7XG59XG4ubWFpbi1jb250YWluZXIgdG9waWNzLFxuLm1haW4tY29udGFpbmVyIHRvcGljIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubWFpbi1jb250YWluZXIgLmdyaWQsXG4ubWFpbi1jb250YWluZXIgI2RldGFpbEdyaWQge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4udG9waWNzLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZmxleC1zaHJpbms6IDE7XG59XG5cbi5ncmlkQ29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMzBweCAtIDYwcHgpO1xuICBwYWRkaW5nOiAwIDIwcHg7XG59XG5cbi5zaGFkb3cge1xuICBib3gtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMjQpO1xufVxuXG4udG9waWMtY29udGFpbmVyLWNhcmQge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udG9waWMtY29udGFpbmVyLWNhcmQgLndyYXBwZXIge1xuICBtYXJnaW46IDE1cHg7XG59XG5cbi50b3BpYy1jb250YWluZXItbGlzdCAud3JhcHBlciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xufVxuXG4udG9waWMtY29udGFpbmVyLWxpc3QgLmlkY2FyZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDQwcHg7XG59XG5cbi50b3BpYy1jb250YWluZXItbGlzdCAuZGV0YWlsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7XG59XG5cbi50b3BpYy1jb250YWluZXItY2FyZCAuaWRjYXJkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogNzBweDtcbn1cblxuLnRvcGljLWNvbnRhaW5lci1jYXJkIC5kZXRhaWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA3MHB4KTtcbn1cblxuLndyYXBwZXIgLmRldGFpbCAudGl0bGUge1xuICBmb250LXNpemU6IDE3cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LWZhbWlseTogUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuLndyYXBwZXIgLmRldGFpbCAuZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDE1cHg7XG4gIG1hcmdpbjogMTZweCAwcHg7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLnVzZXJkZXRhaWwge1xuICBmb250LXNpemU6IDEzcHg7XG4gIG1hcmdpbjogOHB4IDBweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40NSk7XG59XG5cbi51c2VyZGV0YWlsIC5hdXRob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi51c2VyZGV0YWlsIC5kYXRlIHtcbiAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnRvcGljLWRldGFpbHMtY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIG1hcmdpbjogMCAyMHB4O1xufVxuXG4udG9waWMtZGV0YWlscy1jb250YWluZXIgLnRpdGxlIHtcbiAgZm9udC1zaXplOiAzMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4udG9waWMtY29udmVyc2F0aW9uLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMjBweDtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMzBweCk7XG59XG5cbi5pbnRybyB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMjBweCA0MHB4O1xufVxuXG4uaW50cm8gLmxvZ28ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5zYW1wbGUtb3B0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMTBweCAwO1xufVxuLnNhbXBsZS1vcHRpb25zIC50b3BpYyB7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDEzcHg7XG59XG5cbi5pbnRybyAuY29udGVudCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDMwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5pbnRybyAuY29udGVudCAud2VsY29tZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlRyZWJ1Y2hldCBNU1wiO1xuICBmb250LXNpemU6IDE5cHg7XG59XG5cbi5pbnRybyAuY29udGVudCAuZGVzY3JpcHRpb24ge1xuICBmb250LWZhbWlseTogXCJUcmVidWNoZXQgTVNcIjtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG4uY2FyZC1sYXlvdXQuZ2MtZ3JpZCB7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4uY2FyZC1sYXlvdXQgLmdjLXJvdyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2FyZC1sYXlvdXQgLmdjLXJvdzpob3ZlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnRpbWVsaW5lLWxlZnRzaGFwZS1ncm91cCB7XG4gIHdpZHRoOiAwcHg7XG59XG5cbi50aW1lbGluZS1yaWdodHNoYXBlLWdyb3VwIHtcbiAgd2lkdGg6IDBweDtcbn1cblxuLmdjLWdyaWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBib3JkZXI6IG5vbmU7XG59XG5cbi5lbXBsb3llZS1waG90by1zbWFsbCB7XG4gIHdpZHRoOiAzMHB4O1xuICBoZWlnaHQ6IDMwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLmVtcGxveWVlLXBob3RvIHtcbiAgd2lkdGg6IDUwcHg7XG4gIGhlaWdodDogNTBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG59XG5cbi5wb3N0Y2FyZCB7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLnBvc3R0aXRsZSB7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuODUpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLnBvc3R1c2VyIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzk5OTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ucG9zdGRhdGUge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiAjOTk5O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xufVxuXG4ucG9zdGNhcmRjb250YWluZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiA4MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLnBvc3RpbmZvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4ucG9zdGRlc2NyaXB0aW9uIHtcbiAgbWFyZ2luLWxlZnQ6IDkzcHg7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnBvc3RkZXNjcmlwdGlvbiBhIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbn1cblxuLnRpbWVsaW5lLWdyb3VwaW5nIC50aW1lbGluZS1saW5lIHtcbiAgYm9yZGVyOiAzcHggc29saWQgI2U3ZTdlNztcbn1cblxuLnRpbWVsaW5lLWdyb3VwaW5nIC50aW1lbGluZS1ldmVudCB7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xuICBib3JkZXItdG9wOiBub25lO1xuICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgYm94LXNoYWRvdzogMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTtcbn1cblxuLmlkY2FyZGNvbnRhaW5lciB7XG4gIG1hcmdpbi1sZWZ0OiAzOXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmO1xuICBwYWRkaW5nLXRvcDogNXB4O1xuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59IiwiQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnc3ByZWFkdmlldy1kZW1vLWljb24nO1xuICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtiYXNlNjQsZDA5R1JnQUJBQUFBQUJGY0FBOEFBQUFBSGR3QUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJIVTFWQ0FBQUJXQUFBQURNQUFBQkNzUDZ6N1U5VEx6SUFBQUdNQUFBQVF3QUFBRlkrSVVreVkyMWhjQUFBQWRBQUFBQjJBQUFCN2dsUDdRMWpkblFnQUFBQ1NBQUFBQk1BQUFBZ0J0WC9BbVp3WjIwQUFBSmNBQUFGa0FBQUMzQ0trWkJaWjJGemNBQUFCK3dBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFIOUFBQUJtWUFBQW9VTHBxeWxHaGxZV1FBQUE1Y0FBQUFNQUFBQURZSm9xZllhR2hsWVFBQURvd0FBQUFkQUFBQUpBYzlBMTFvYlhSNEFBQU9yQUFBQUJnQUFBQXNKNTBBQUd4dlkyRUFBQTdFQUFBQUdBQUFBQmdOTUE5TWJXRjRjQUFBRHR3QUFBQWdBQUFBSUFFaEREWnVZVzFsQUFBTy9BQUFBWGNBQUFMTnpKMGNIbkJ2YzNRQUFCQjBBQUFBYkFBQUFKQzh0OW1oY0hKbGNBQUFFT0FBQUFCNkFBQUFodVZCSzd4NG5HTmdaR0JnNEdLUVk5QmhZSFJ4OHdsaDRHQmdZWUFBa0F4alRtWjZJbEFNeWdQS3NZQnBEaUJtZzRnQ0FJb2pBMDhBZUp4allHU2V4VGlCZ1pXQmdhbUthUThEQTBNUGhHWjh3R0RJeUFRVVpXQmxac0FLQXRKY1V4Z2NYakM4NEdRTytwL0ZFTVVjeERBZEtNd0lrZ01BOGNnTDBRQjRuTzJSMFEzQ1FBeEQzOUZRNkttajhNbEFmREVMbzJhTDFrazlCcEdlcFZpNSs3Q0JPN0NJbHdnWVh3WTFIN21qL1lYWmZ2RHVteWcvdCtPUVVxbzlXbSs2RGYyNDh1REoxdTlXL3JPMy9yek55dTJpa3pSS2p6VFZTSnJLTmsyMWxVWXBrMFo1azBiSmswWWRxS2tMNWdsM1h4dE5BQUI0bkdOZ1FBTVNFTWdjOUQ4VGhBRVNaZ1BiQUhpY3JWWnBkOU5HRkIxNVNaeUVMQ1VMTFdwaHhNUnBzRVltYk1HQUNVR3lZeUJkbksyVm9Jc1VPK20rOFluZjRGL3paTnB6NkRkK1d1OGJMeVNRdE9kd21wT2pkK2ZOMWN6YlpSSmFrdGdMNjVHVW15L0YxTlltamV3OENlbUdUY3RSZkNnN2V5Rmxpc25mQlZFUXJaYmF0eDJIUkVRaVVMV3VzRVFRK3g1Wm1tUjg2RkZHeTdha1YwM0tMVDNwTGx2alFiMVYzMzRhT3NxeE82R2taak4wYUQyeUpWVVlWYUpJcGoxUzBxWmxxUG9yU1N1OHY4TE1WODFRd29oT0ltbThHY2JRU040Ylo3VEthRFcyNHlpS2JMTGNLRklrbXVGQkZIbVUxUkxuNUlvSkRNb0h6WkR5eXFjUjVjUDhpS3pZbzV4V3NFdTIwL3krTDNtbmR6ay9zVjl2VWJia1FCL0lqdXpnN0hRbFg0UmJXMkhjdEpQdEtGUVJkdGQzUW16WjdGVC9aby95bWtZRHR5c3l2ZENNWUtsOGhSQXJQNkhNL2lGWkxaeFArWkpIbzFxeWtSTkI2MlZPN0VzK2dkYmppQ2x4elJoWjBOM1JDUkhVL1pJekRQYVlQaDc4OGQ0cGxnc1RBbmdjeTNwSEpad0lFeWxoY3pSSjJqQnlZQ1ZsaXlxcDlhNllPT1YxV3NSYnduN3QydEdYem1qalVIZGlQRnNQSFZzNVVjbnhhRktubVV5ZDJrbk5veWtOb3BSMEpuak1yd01vUDZKSlhtMWpOWW1WUjlNNFpzYUVSQ0lDTGR4TFUwRXNPN0drS1FUTm94bTl1UnVtdVhZdFdxVEpBL1hjby9mMDVsYTR1ZE5UMmc3MHMwWi9WcWRpT3RnTDArbHA1Qy94YWRybElrWHArdWtaZmt6aVFkWUNNcEV0TnNPVWd3ZHYvUTdTeTllV0hJWFhCdGp1N2ZNcnFIM1dSUENrQWZzYjBCNVAxU2tKVElXWVZZaFdRR0t0YTFtV3lkV3NGcW5JMUhkRG1sYStyTk1FaW5JY0Y4ZStqSEg5WHpNemxwZ1N2dCtKMDdNakxqMXo3VXNJMHh4OG0zVTltdGVweFhJQmNXWjVUcWRabHUvck5NZnlBNTNtV1o3WDZRaExXNmVqTEQvVWFZSGxSem9kWTNsQkM1cDAzOEdRaXpEa0FnNlFNSVNsQTBOWVhvSWhMQlVNWWJrSVExZ1dZUWpMSlJqQzhtTVl3bklaaHJDOHJHWFYxRk5KNDlxWldBWnNRbUJpamg2NXpFWGxhaXE1VkVLN2FGUnFRNTRTYnBWVUZNK3FmMldnWGp6eWhqbXdGa2lYeUpwZk1jNlZqMGJsK05ZVkxXOGFPMWZBc2Vwdkg0NzJPZkZTMW91RlB3WC8xZFpVSmIxaXpjT1RxL0FiaHA1c0o2bzJxWGgwVFpmUFZUMjYvbDlVVkZnTDlCdEloVmdveXJKc2NHY2loSTg2bllacW9KVkR6R3pNUExUcmRjdWFuOFA5TnpGQ0ZsRDkrRGNVR2d2Y2cwNVpTVm50NEt6VjE5dXkzRHVEY2pnVExFa3hOL1A2VnZnaUk3UFNmcEZaeXA2UGZCNXdCWXhLWmRocUE2MFZ2TmtuTVErWjNpVFBCSEZiVVRaSTJ0ak9CSWtOSFBPQWVmT2RCQ1poNnFvTjVFN2hoZzM0QldGdXdYa25YS0o2b3l5SDdrWHM4eWlrL0Z1bjRrVDJxR2lNd0xQWkcyR3Y3MExLYjNFTUpEVDVwWDRNVkJXaHFSZzFGZEEwVW02b0JsL0cyYnB0UXNZTzlDTXFkc095ck9MRHh4YjNsWkp0R1lSOHBJalZvNk9mMWw2aVRxcmNmbVlVbCsrZHZnWEJJRFV4ZjN2ZmRIR1F5cnRheVRKSGJRTlR0eHFWVTllYVErTlZoK3JtVWZXOTQrd1RPV3VhYnJvbkhucGYwNnJid2NWY0xMRDJiUTdTVWlZWDFQVmhoUTJpeThXbFVPcGxORW52dUFjWUZoalE3MUNLamYrcit0aDhuaXRWaGRGeEpOOU8xTGZSNTJBTS9BL1lmMGYxQTlEM1kraHlEUzdQOTVvVG4yNzA0V3lacnFJWDY2Zm9OekJycmJsWnVnYmMwSFFENGlGSHJZNjR5ZzE4cHdaeGVxUzVIT2toNEdQZEZlSUJ3Q2FBeGVBVDNiV001bE1Bby9tTU9UN0E1OHhoMEdRT2d5M21NTmhtemhyQURuTVk3REtId1I1ekdIekJuSFdBTDVuRElHUU9nNGc1REo0d0p3QjR5aHdHWHpHSHdkZk1ZZkFOYys0RGZNc2NCakZ6R0NUTVliQ3Y2ZFl3ekMxZTBGMmd0a0ZWb0FOVFQxamN3K0pRVTJYSS9vNFhodjI5UWN6K3dTQ20vcWpwOXBENkV5OE05V2VEbVBxTFFVejlWZE9kSWZVM1hoanE3d1l4OVErRG1QcE12eGpMWlFhL2pIeVhDZ2VVWFd3KzUrK0o5dy9ieFVDNUFBRUFBZi8vQUE5NG5LVlZXVzhiMXhVKzU5N1pPQnl1bW9XeXlERTNjV3hTa0Z5dWlxeFNsQmZRa3VrRnRwRFFTYVRRanF5MmtHM0pEZUNnNlBhZ3dMWFJKZ0t5RktoYkJBaXN4d2F0K3RLWEFIMW9uN29BYlg1Q0h3SVpSWkduUHJTSXhqMlhZaFU3aWJxZ1E4Njk1N3Zuek15NTV6dm5YQWdBUFA0NzMrRkJpTUJobUlBWnVBQXZ3UnA4RnpiaFFxc1RDekUxYWpDRnEwb3ZFbUE4ckRHR25QV0NNa01BWEJBelFsZVhHQ0IwM3ZqKzNZM3ZmUFBPSzdkV1YxNWVldUhaeStmUDFnWlhKUzZuU3FPV3FhaTViTUdyVmV0T3BXekhDSHNEM0NDTW45RUxYTUk5ZkJ6MzhCZlpmeG4vdmIzUUMvdWhnVjdndnQ1TjI3OXdYS1RSVGo4aDR2Vjk0TGorVHc3UzRNcW5EejVoOWJUaWlaYy91R0VUdEc3UWExeFVWc1hrckFvTC93OVBhRmgrVmRpTHdmLzkvMnFFMnY0NkFDaGZ5TzEwNjVrZ3FqcjJPUTBnMTdEUHFJeDlRbWtpUGlVVWRINkdRdU8vcFRBejBHY09vR1NnYjJUMktNa05jQ1Z6TUNYc3QybDc5MUVmTWNkeGR4c0g2L0FwOVA4Ri9lbDRVb0FlMytOWDJGOGhCZmxXQmhobmE3U0k2OEFCK0FKd0RsMFNvRk53N0p3a0owclkzNTFqbXhGVXNoNFdxZzJzbHcrandMUlhmaVdmOGwvZHNxeWlkZHp5M3paTnZHRk4yVVhMMnNMN3FUd3V0ZDNpbGpsdGxnWUtYQldXVS9iV0VkajNwVWErdUgxZk9PTnJZblVkcUNEWkFsQ1pkb0dZN2RpakJiUHZpNm1TRXhQa3hBeG1CaldUOFFTcWx4MjBlYzMwMzdHbnJLSnRQL1JmVGVYektiei8wTGFML1ErYk9PV2F3c09pTlcwOUxMcmtHVzVaMHdRdC94Mno3OHYzS005cU1BUmVLNjlUQm1FN2dIQTZTTTZjSXE4UUZvVExYUkdzVHI3QVpMdGtWWnR5cFJiQVdEWXNIenR6cC9mMnhaUDRpdi82eXJVSDg5ZktZOS9ZL1BPYksrVkQwdC84SC9pdm84SGkyVlBYZnRqL3p0ZjREdnMxRkNEWkdoNmh0MkU3aEhCS3ZKZDJEeXY1Ykk3SkZ1MDFqTG1zcDZqMG85UXExQXUweXhsc3Noa2NSNi9hWkpXeWkzem43a2Yzdk9LdHQwYnllcGd6aVhGRENwbXFHVlVqM1dXOCtOb0h5L2MrdW90TFY3ZDYwdFdDSnFHaEk5TWtIcEhEdHBaTURoWExieTdNdmRhYjdHMEo5aDl2OCtmNUpkQ2dDYmZnWEd0K2JyYkJ1WXh0a0NsSlpINFRkQUNtUTQ4c21LeXhKWHBHbGJqYUF3a1VTWG1STmhMb1FpQmc0TnpOMVpYbDBVb3pXZi9TWWFzVXBKSnJWTWRSTWUwbVlyWGc1YXAxajZZd1U1VUloaG5kNk9WaXRCM0pzYW0rYWxXdmlWV3ZYaU9iSmpaTTFiYjI3a0VWRnNSWWk0bGFyRGZxalNacjFFVW95SUJxZDlOTzJ2Um5HMlBKMzlReDJ3aUhUU2ZraG9MaGhHNGJwaDZQcTNZNGFTVFpuYm1UcXl4cTZpazlFRSswUjJRTE03M3paK3BmUFQxcnZKY3FGbE0vTXA5SkowT0duYkNURS9OSFJxNU5QYnNjTVZuaVVJS1plREZWeFBUWDA0MHFSazdNSjBLRldEaWFEZ3pwQnZvL1pvcWlLZXpvWWlRYUtCNkpKNzFRWHNPeVZUNGFOMHNGdzVnc25YLytrT01VVTNqZExZYm1pbTc0Uk1lMjh1ZG5LNU1pdHlpT2dvTno3REYxUFJPR0lROTNXMVRCVEU3WllZbzBHNllDQVM2YW05USsrL1A0eFc3TEkyN2t0YjBpSnRWYVAwOWZWaEFsQ1MvUmhOSnpJS0YwZHFSVitMd2xySDNlOEVvckRwQkpKNXhvSktDUkc0cXBVaTQ2RFUrMUtoWldjMWtxUU11c2xLa0plQTdtYWtodHdHdjBHOEx2eWh1Vk0vaVNJVXYrbjZTUUxPRUVkM2Y4WXp2OG5MbTRzMmdldHplSW9ZM0tkSnNwaHVSL0tOR0k0OUx0SFgvaUVUNUlXWXVQWHJTc0RSc0dQWCtieC9kNy9uRTRDVitCNWRiVjUwNHpSVHVhR1k0RlVLSEcwSlk1STBGQnVDa3hCcW9DNmlxRUlhQ0ZBNzFJaUdtR3poVFVsQ1ZRZzBGMUFWUTEySVdnR3V4Y1g3NjY5TUtWeTVjdWRPYmFzek5tM2l5SUt4ZWxSTVhZWHBidDVWZlpkdjRESG9wbFlxYUwxUFlwdHlzZUpiZENBUk0yc2NHaEVNdjk2N0J1VURaVGloNUdjY2E0dXBiWDlQNncrYW40aHE3dWlhcCt4amMwamVFZm1hYjU5Lzh4SXNuYmlvUi8wYlY2ZGRRL05sckZtckQ3cVJjWW8rTmpUUFBlMTNUOHBmOHJzWWl6WWp4QTlwZFpiUGRqS2dYZFpOZG42YVNVTDlNWGR6OGVQM1ZpbkEzMW5WaTBrdWlhaTNxZmgzZjVKaytKU29jZ1JDa25YWmh2dFVVWDR3aWlBMUJqb0U0Z2c2VEkwcEp1YUZ4UlZXV2hMeWhxTnhpZ0lsYzc4WmliU283WVZtdzRQaHlMeDhRVkRjbkpFbVpxbWYyN1dqYXpvMlU3ak9PczdnakFOei9aNE4vMnQzYy9aT040UWNpZmJLeXZZOExPTXZkWW11VS9XRjluNzYvNzIrdit6OWI4YjAzZXZwMGR5Mk4yUE4yWXZBMy9CTGswcHR3QUFIaWNZMkJrWUdBQTRnYzNFcWJIODl0OFplQm1mZ0VVWWJqc3Uwa0dRZi9QWkg3QkhBVGtjakF3Z1VRQllXNEwxWGljWTJCa1lHQU8rcDhGSkY4d01Qei9EeVNCSWlpQUd3Q0gxQVdnQUFBQWVKeGpmc0hBd0F6RGtWQ016aGNFNGdVTURBQ3k1d2EvQUFBQUFBRHVBWllCM0FJaUFsWUNvZ05rQStnRXJBVUtBQUVBQUFBTEFKQUFDUUFBQUFBQUFnQWtBRFFBY3dBQUFIVUxjQUFBQUFCNG5IV1F5MDdDUUJTRy81R0xDb2thVGR3Nkt3TXhsa3NpQ3hJU0VneHNkRU1NVzFOS2FVdEtoMHdIRWw3RGQvQmhmQW1meFo5Mk1BWmltK2w4NTVzelowNEh3RFcrSVpBL1R4dzVDNXd4eXZrRXAraFpMdEEvV3k2U1h5eVhVTVdiNVRMOXUrVUtIaEJZcnVJR0g2d2dpdWVNRnZpMExIQWxMaTJmNEVMY1dTN1FQMW91a251V1M3Z1ZyNWJMOUo3bENpWWl0VnpGdmZnYXFOVldSMEZvWkcxUWwrMW1xeU9uVzZtb29zU05wYnMyb2RLcDdNdTVTb3dmeDhyeDFITFBZejlZeDY3ZWgvdDU0dXMwVW9sc09jMjlHdm1KcjEzanozYlYwMDNRTm1ZdTUxb3Q1ZEJteUpWV0M5OHpUbWpNcXR0by9EMFBBeWlzc0lWR3hLc0tZU0JSbzYxemJxT0pGanFrS1RNa00vT3NDQWxjeERRdTF0d1JaaXNwNHo3SG5GRkM2ek1qSmp2dytGMGUrVEVwNFA2WVZmVFI2bUU4SWUzT2lESXYyWmZEN2c2elJxUWt5M1F6Ty92dFBjV0dwN1ZwRFhmdHV0UlpWeExEZ3hxUzk3RmJXOUI0OUU1Mks0YTJpd2JmZi83dkIrTnBoRThBZUp4dHhrRU9neUFRQmRENXRJcElyOEtoa0l3T0NWZ0M0NkszYjlKdWZhdEhodjVXdXVkaDhNQVRFMlpZTEhCWTRmRWlvMkpWUXNsRGw4SzdoaTBmcnVkRGZwdUd4TTQydld2bFU1M0tWYmNScmpZM1BsTXVYbnNjRXJnMi9mallOYWZDSVJZbCtnSmZwQjdaZUp4ajhON0JjQ0lvWWlNalkxL2tCc2FkSEF3Y0RNa0ZHeGxZblRZeE1ESm9nUmlidVpnWU9TQXNQZ1l3aTgxcEY5TUJvRFFua00zdXRJdkJBY0ptWm5EWnFNTFlFUml4d2FFallpTnppc3RHTlJCdkYwY0RBeU9MUTBkeVNBUklTU1FRYk9aaFl1VFIyc0g0djNVRFMrOUdKZ1lYQUF4MkkvUUFBQT09KVxuICAgIGZvcm1hdCgnd29mZicpO1xufVxuXG4uZGVtby1pY29uIHtcbiAgZm9udC1mYW1pbHk6ICdzcHJlYWR2aWV3LWRlbW8taWNvbic7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbi5pY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MDAnO1xufSAvKiAn7qCAJyAqL1xuLmljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODAxJztcbn0gLyogJ+6ggScgKi9cblxuaHRtbCxcbmJvZHkge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZmVmZWY7XG59XG5cbmEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbioge1xuICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7XG59XG5cbi5tYWluLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG5cbiAgaDIge1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICB9XG5cbiAgLnJvdyB7XG4gICAgZmxleC1ncm93OiAwO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgfVxuXG4gIHRvcGljcyxcbiAgdG9waWMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC5ncmlkLFxuICAjZGV0YWlsR3JpZCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG59XG5cbi50b3BpY3MtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LXNocmluazogMTtcbn1cblxuLmdyaWRDb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAzMHB4IC0gNjBweCk7XG4gIHBhZGRpbmc6IDAgMjBweDtcbn1cblxuLnNoYWRvdyB7XG4gIGJveC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XG59XG5cbi50b3BpYy1jb250YWluZXItY2FyZCB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi50b3BpYy1jb250YWluZXItY2FyZCAud3JhcHBlciB7XG4gIG1hcmdpbjogMTVweDtcbn1cblxuLnRvcGljLWNvbnRhaW5lci1saXN0IC53cmFwcGVyIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAxMHB4IDIwcHg7XG59XG5cbi50b3BpYy1jb250YWluZXItbGlzdCAuaWRjYXJkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogNDBweDtcbn1cbi50b3BpYy1jb250YWluZXItbGlzdCAuZGV0YWlsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7XG59XG5cbi50b3BpYy1jb250YWluZXItY2FyZCAuaWRjYXJkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogNzBweDtcbn1cbi50b3BpYy1jb250YWluZXItY2FyZCAuZGV0YWlsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogY2FsYygxMDAlIC0gNzBweCk7XG59XG4ud3JhcHBlciAuZGV0YWlsIC50aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLndyYXBwZXIgLmRldGFpbCAuZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDE1cHg7XG4gIG1hcmdpbjogMTZweCAwcHg7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLnVzZXJkZXRhaWwge1xuICBmb250LXNpemU6IDEzcHg7XG4gIG1hcmdpbjogOHB4IDBweDtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40NSk7XG59XG5cbi51c2VyZGV0YWlsIC5hdXRob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi51c2VyZGV0YWlsIC5kYXRlIHtcbiAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnRvcGljLWRldGFpbHMtY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIG1hcmdpbjogMCAyMHB4O1xufVxuXG4udG9waWMtZGV0YWlscy1jb250YWluZXIgLnRpdGxlIHtcbiAgZm9udC1zaXplOiAzMHB4O1xuICBmb250LXdlaWdodDogNjAwO1xufVxuXG4udG9waWMtY29udmVyc2F0aW9uLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMjBweDtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMzBweCk7XG59XG5cbi5pbnRybyB7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgcGFkZGluZzogMjBweCA0MHB4O1xufVxuLmludHJvIC5sb2dvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4uc2FtcGxlLW9wdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDEwcHggMDtcblxuICAudG9waWMge1xuICAgIGNvbG9yOiAjOTk5O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgfVxufVxuXG4uaW50cm8gLmNvbnRlbnQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiAzMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4uaW50cm8gLmNvbnRlbnQgLndlbGNvbWUge1xuICBmb250LWZhbWlseTogJ1RyZWJ1Y2hldCBNUyc7XG4gIGZvbnQtc2l6ZTogMTlweDtcbn1cblxuLmludHJvIC5jb250ZW50IC5kZXNjcmlwdGlvbiB7XG4gIGZvbnQtZmFtaWx5OiAnVHJlYnVjaGV0IE1TJztcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG4uY2FyZC1sYXlvdXQuZ2MtZ3JpZCB7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4uY2FyZC1sYXlvdXQgLmdjLXJvdyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2FyZC1sYXlvdXQgLmdjLXJvdzpob3ZlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnRpbWVsaW5lLWxlZnRzaGFwZS1ncm91cCB7XG4gIHdpZHRoOiAwcHg7XG59XG5cbi50aW1lbGluZS1yaWdodHNoYXBlLWdyb3VwIHtcbiAgd2lkdGg6IDBweDtcbn1cbi5nYy1ncmlkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4uZW1wbG95ZWUtcGhvdG8tc21hbGwge1xuICB3aWR0aDogMzBweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5lbXBsb3llZS1waG90byB7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG4ucG9zdGNhcmQge1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5wb3N0dGl0bGUge1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjg1KTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5wb3N0dXNlciB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICM5OTk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLnBvc3RkYXRlIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogIzk5OTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLnBvc3RjYXJkY29udGFpbmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogODBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbi5wb3N0aW5mbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLnBvc3RkZXNjcmlwdGlvbiB7XG4gIG1hcmdpbi1sZWZ0OiA5M3B4O1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5wb3N0ZGVzY3JpcHRpb24gYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG5cbi50aW1lbGluZS1ncm91cGluZyAudGltZWxpbmUtbGluZSB7XG4gIGJvcmRlcjogM3B4IHNvbGlkICNlN2U3ZTc7XG59XG5cbi50aW1lbGluZS1ncm91cGluZyAudGltZWxpbmUtZXZlbnQge1xuICBib3JkZXItbGVmdDogbm9uZTtcbiAgYm9yZGVyLXRvcDogbm9uZTtcbiAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gIGJveC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XG59XG5cbi5pZGNhcmRjb250YWluZXIge1xuICBtYXJnaW4tbGVmdDogMzlweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZjtcbiAgcGFkZGluZy10b3A6IDVweDtcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuIl19 */
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.8.17'}), '@grapecity/dataviews.core': dv({pkg:'@grapecity/dataviews.core',file:'gc.dataviews.core',version:'1.8.17'}), '@grapecity/dataviews.grid': dv({pkg:'@grapecity/dataviews.grid',file:'gc.dataviews.grid',version:'1.8.17'}), '@grapecity/dataviews.cardlayout': dv({pkg:'@grapecity/dataviews.cardlayout',file:'gc.dataviews.cardlayout',version:'1.8.17'}), '@grapecity/dataviews.masonry': dv({pkg:'@grapecity/dataviews.masonry',file:'gc.dataviews.masonry',version:'1.8.17'}), '@grapecity/dataviews.calendar': dv({pkg:'@grapecity/dataviews.calendar',file:'gc.dataviews.calendar',version:'1.8.17'}), '@grapecity/dataviews.timeline': dv({pkg:'@grapecity/dataviews.timeline',file:'gc.dataviews.timeline',version:'1.8.17'}), '@grapecity/dataviews.trellis': dv({pkg:'@grapecity/dataviews.trellis',file:'gc.dataviews.trellis',version:'1.8.17'}), '@grapecity/dataviews.gantt': dv({pkg:'@grapecity/dataviews.gantt',file:'gc.dataviews.gantt',version:'1.8.17'}), '@grapecity/dataviews.searchbox': dv({pkg:'@grapecity/dataviews.searchbox',file:'gc.dataviews.searchbox',version:'1.8.17'}), '@grapecity/dataviews.react': dv({pkg:'@grapecity/dataviews.react',file:'gc.dataviews.react',version:'1.8.17'}), '@grapecity/dataviews.vue': dv({pkg:'@grapecity/dataviews.vue',file:'gc.dataviews.vue',version:'1.8.17'}), '@grapecity/dataviews.angular': dv({pkg:'@grapecity/dataviews.angular',file:'gc.dataviews.angular',version:'1.8.17'}), '@grapecity/dataviews.csvexport': dv({pkg:'@grapecity/dataviews.angular',file:'gc.dataviews.csvexport',version:'1.8.17'}), // 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.2.0'}), 'vue': npm({pkg:'vue',file:'dist/vue.js',version:'2.6.12'}), 'vue-router': npm({pkg:'vue-router',file:'dist/vue-router.js',version:'3.4.3'}), '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:'4.0.2'}), '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);