<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juliia Nikitina</title>
    <description>The latest articles on DEV Community by Juliia Nikitina (@juliianikitina).</description>
    <link>https://dev.to/juliianikitina</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F612948%2F08c84d13-333c-4005-af0b-b8a109ea408c.png</url>
      <title>DEV Community: Juliia Nikitina</title>
      <link>https://dev.to/juliianikitina</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juliianikitina"/>
    <language>en</language>
    <item>
      <title>Front-end filtering with #CodePenChallenge and WebDataRocks</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Mon, 10 Jun 2024 08:30:37 +0000</pubDate>
      <link>https://dev.to/juliianikitina/front-end-filtering-with-codepenchallenge-and-webdatarocks-20ko</link>
      <guid>https://dev.to/juliianikitina/front-end-filtering-with-codepenchallenge-and-webdatarocks-20ko</guid>
      <description>&lt;p&gt;Hi folks! &lt;/p&gt;

&lt;p&gt;As the new month approaches, the new CodePen challenge is announced! This time, the tasks will focus on scrolling. &lt;/p&gt;

&lt;p&gt;But in this post, I want to share with you the results of &lt;a href="https://codepen.io/challenges/2024/may"&gt;May's CodePen challenge&lt;/a&gt; - Filter themed!&lt;/p&gt;

&lt;p&gt;So for each week, participants were challenged to try front-end filtering, using techniques from CSS, JavaScript, and SVG.&lt;/p&gt;

&lt;p&gt;And here are our results! As always, we use WebDataRocks as the base and CodePen tasks as an inspiration.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://codepen.io/webdatarocks/pen/VwOarKz"&gt;Week 1 CSS filter&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The CSS filter in this CodePen applies a blur effect to certain cells in the WebDataRocks Pivot Table and turns it off based on user interaction. Let's break down how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CSS Code&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;The CSS code defines a class called "hidden" which applies a &lt;code&gt;filter: blur(2.5px)&lt;/code&gt; property. This property applies a blur effect to elements with this class.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;filter&lt;/code&gt; property in CSS is used to apply visual effects like blur, grayscale, etc., to elements.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#wdr-pivot-view #wdr-grid-view div.hidden {
  filter: blur(2.5px);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript Code&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;The JavaScript code defines an event listener for the "cellclick" event on the pivot table.&lt;/li&gt;
&lt;li&gt;When a cell is clicked, the event listener updates the &lt;code&gt;visibleNumber&lt;/code&gt; object with the index of the clicked cell's row and column.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;pivot.customizeCell()&lt;/code&gt; method is used to customize the appearance of cells in the pivot table.&lt;/li&gt;
&lt;li&gt;Within the &lt;code&gt;customizeCell&lt;/code&gt; function:

&lt;ul&gt;
&lt;li&gt;It checks if the cell type is "value", meaning it contains numerical data.&lt;/li&gt;
&lt;li&gt;It ensures the cell is not a drill-through cell (a cell that can be clicked to view more detailed data).&lt;/li&gt;
&lt;li&gt;It checks if the cell is a grand total column (a total calculated across all rows for a specific column).&lt;/li&gt;
&lt;li&gt;It applies the "hidden" class to cells that are grand total columns and do not match the clicked cell's row and column indexes.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const visibleNumber = {
  rowIndex: undefined,
  columnIndex: undefined
}

pivot.on("cellclick", (cell) =&amp;gt; {
  visibleNumber.rowIndex = cell.rowIndex;
  visibleNumber.columnIndex = cell.columnIndex;
  pivot.refresh();
});

pivot.customizeCell((cellBuilder, cellData) =&amp;gt; {
  if (cellData.type == "value" &amp;amp;&amp;amp;
    !cellData.isDrillThrough &amp;amp;&amp;amp;
    cellData.isGrandTotalColumn &amp;amp;&amp;amp;
    !(cellData.rowIndex == visibleNumber.rowIndex &amp;amp;&amp;amp;
      cellData.columnIndex == visibleNumber.columnIndex)) {
    cellBuilder.addClass("hidden");
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;How it Works&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;When a user clicks on a cell in the pivot table, the event listener captures the row and column indexes of the clicked cell and defines that cell as visible.&lt;/li&gt;
&lt;li&gt;After that, the &lt;code&gt;customizeCell&lt;/code&gt; function iterates through all cells in the pivot table.&lt;/li&gt;
&lt;li&gt;If a cell meets the criteria (being a grand total column and not matching the clicked cell's row and column indexes), it applies the "hidden" class, which in turn applies a blur effect to those cells.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In summary, this implementation allows users to selectively apply and remove a blur effect to certain cells in the WebDataRocks pivot table based on their interactions. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://codepen.io/webdatarocks/pen/BaeKrvE"&gt;Week 2 JavaScript filter&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Here, the JavaScript function customizes the the Toolbar of WebDataRocks by removing a specific tab, the "Connect" tab, from the the Toolbar. Let's break down how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;customizeToolbar&lt;/code&gt; Function&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This function is called to customize the the Toolbar.&lt;/li&gt;
&lt;li&gt;It takes the &lt;code&gt;toolbar&lt;/code&gt; object as a parameter, which represents the the Toolbar of the pivot table.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Get Existing Tabs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;getTabs()&lt;/code&gt; method of the &lt;code&gt;toolbar&lt;/code&gt; object retrieves an array of tabs currently present in the the Toolbar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Filtering Tabs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;filter()&lt;/code&gt; method is called on the array of tabs retrieved from &lt;code&gt;getTabs()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Within the filter function, each tab is checked to see if its id is not equal to "wdr-tab-connect".&lt;/li&gt;
&lt;li&gt;If the tab's id is not "wdr-tab-connect", it is included in the filtered array, effectively removing the "Connect" tab from the toolbar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Return Filtered Tabs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After filtering, the function returns the modified array of tabs, which no longer includes the "Connect" tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Integration with WebDataRocks&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This function needs to be integrated with the WebDataRocks pivot table by assigning it to the &lt;code&gt;beforetoolbarcreated&lt;/code&gt; property of the WebDataRocks configuration object.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebDataRocks&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#wdr-component&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;toolbar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;850&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;beforetoolbarcreated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;customizeToolbar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;report&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{...}});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Week 3 SVG filter
&lt;/h2&gt;

&lt;p&gt;Actually... We didn't come out with a good idea of how to apply this to WebDataRocks, so we just skipped the week(&lt;/p&gt;

&lt;p&gt;But maybe you can help! If you have any ideas on how we could implement an SVG filter with the component - share them in the comments below.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://codepen.io/webdatarocks/pen/ZENBrwr"&gt;Week 4 Filter Fest!&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The challenge is finding a way to combine as many filter types as possible in a single Pen.&lt;/p&gt;

&lt;p&gt;We used this opportunity to create a cute demo explaining all our filters available in WebDataRocks out-of-the-box.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fect1xr72fjdlfoq3j115.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fect1xr72fjdlfoq3j115.png" alt="Image description" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  To sum up...
&lt;/h2&gt;

&lt;p&gt;And that's all the creations of the previous month! You can check and play with all the pens, fork them, and try to build something on them. And I will go drink some filter and take a break) Till next month!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>codepen</category>
      <category>javascript</category>
      <category>css</category>
    </item>
    <item>
      <title>Unraveling the Code: Creating Bubble Text for April #CodePenChallenge</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Tue, 23 Apr 2024 19:13:37 +0000</pubDate>
      <link>https://dev.to/juliianikitina/unraveling-the-code-creating-bubble-text-for-april-codepenchallenge-2fb8</link>
      <guid>https://dev.to/juliianikitina/unraveling-the-code-creating-bubble-text-for-april-codepenchallenge-2fb8</guid>
      <description>&lt;p&gt;Welcome to a behind-the-scenes look at our &lt;strong&gt;#CodePenChallenge demo creation&lt;/strong&gt;! In this tutorial, I'll dissect the code and walk through the process of crafting our bubble text to style our report on the Chocolate Bar Ratings dataset from Kaggle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2nyvcrdhc4pc2jc0cxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2nyvcrdhc4pc2jc0cxx.png" alt="Image description" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is this challenge all about?
&lt;/h2&gt;

&lt;p&gt;CodePen Challenge is a monthly coding event that brings together developers, designers, and creators to showcase their skills and creativity. Each month, a new theme sparks inspiration for creating innovative mini-projects on CodePen. &lt;br&gt;
This April, the theme is &lt;strong&gt;"Bubbles"&lt;/strong&gt;, and the week’s assignment is &lt;strong&gt;to create bubble text&lt;/strong&gt;. So, I invite you to explore playful and bubbly designs.&lt;/p&gt;
&lt;h2&gt;
  
  
  What data to use?
&lt;/h2&gt;

&lt;p&gt;Our journey begins with data from Kaggle — &lt;strong&gt;a Chocolate Bar Ratings dataset&lt;/strong&gt;. This dataset contains information about chocolate makers, bean origins, review dates, ratings, and more. It's a deliciously diverse dataset that inspired this chocolate report demo.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tools of the Trade
&lt;/h2&gt;

&lt;p&gt;To bring our chocolate data to life, we'll leverage the power of &lt;a href="https://www.webdatarocks.com"&gt;WebDataRocks&lt;/a&gt; — a versatile web pivot table component. WebDataRocks allows us to visualize and interact with data dynamically, making it the perfect tool for exploring our chocolate ratings dataset.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code Structure
&lt;/h2&gt;

&lt;p&gt;Before we dive into the chocolatey goodness, let's understand how our CodePen demo is structured:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HTML Structure&lt;/strong&gt;: We start with a &lt;strong&gt;simple HTML structure&lt;/strong&gt; that sets the stage for our crafty adventure. Inside &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; containers, we have placeholders for our pivot grid and the bubbly text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CSS Styling&lt;/strong&gt;: The magic begins with CSS styling that &lt;strong&gt;transforms our text into bubbly aerated chocolate delights&lt;/strong&gt;. We don't stop at default settings — we customize fonts, colors, and grid layouts to create a visually appealing and cohesive design.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JavaScript Interaction&lt;/strong&gt;: To bring our data into play, we use JavaScript to fetch and display the Chocolate Bar Ratings dataset. We leverage WebDataRocks &lt;strong&gt;to visualize and interact with the data dynamically&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Process Breakdown: Creating Bubbles from Chocolate Data
&lt;/h2&gt;
&lt;h3&gt;
  
  
  HTML Structure
&lt;/h3&gt;

&lt;p&gt;We start with &lt;strong&gt;importing the necessary CSS theme and JavaScript libraries&lt;/strong&gt; for WebDataRocks. The &lt;code&gt;wdr-component&lt;/code&gt; div serves as the container for our pivot table component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- WebDataRocks Striped-Blue Theme --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.webdatarocks.com/latest/theme/dark/webdatarocks.min.css"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- WebDataRocks Scripts --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.webdatarocks.com/latest/webdatarocks.toolbar.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.webdatarocks.com/latest/webdatarocks.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"wdr-component"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS Styling
&lt;/h3&gt;

&lt;p&gt;Our CSS styles are the heart of this demo: they define the look and feel of the whole work. We customize the pivot view, pivot the chocolate title, and create the chocolate bar cells to match the concept. &lt;/p&gt;

&lt;p&gt;For our title, we used &lt;strong&gt;Rubik Bubbles font&lt;/strong&gt; and customized it a little to create that aerated chocolate effect. &lt;/p&gt;

&lt;p&gt;To make sense of that, not only after diving into the meaning of data we decided to add another twist to the demo. Using &lt;code&gt;.choco&lt;/code&gt; and &lt;code&gt;.choco::before&lt;/code&gt; selectors, we created &lt;strong&gt;a new look for each grid cell&lt;/strong&gt; that we will further apply with the help of the JS function. &lt;/p&gt;

&lt;p&gt;The overall layout uses grid and radial gradients for a visually appealing backdrop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nf"&gt;#wdr-pivot-view&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.wdr-pivot-title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60px&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Rubik Bubbles"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;uppercase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#6B3A00&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;-webkit-text-stroke&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;#000&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;text-stroke&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;#000&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;#000&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.choco&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;67&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.choco&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;92%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;83%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;outset&lt;/span&gt; &lt;span class="m"&gt;.25em&lt;/span&gt; &lt;span class="m"&gt;#6B3A00&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;.1em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;place-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;249&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;222&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nb"&gt;circle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;249&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;222&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;6%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;129&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;84&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;40%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;67&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;88%&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JavaScript Logic
&lt;/h3&gt;

&lt;p&gt;The JavaScript section brings our demo and data to life. We &lt;strong&gt;initialize WebDataRocks&lt;/strong&gt;, configure the pivot table with data via the &lt;code&gt;getJSONData()&lt;/code&gt; function, customize cell rendering with &lt;code&gt;customizeCellFunction&lt;/code&gt; using the previously created choco styles, and set various formatting options for our chocolate bar ratings data to look more understandable and appealing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;pivot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebDataRocks&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wdr-component&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;customizeCell&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;customizeCellFunction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;report&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;dataSource&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;dataSourceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;getJSONData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;formats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;decimalPlaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="na"&gt;uniqueName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Company Location&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="na"&gt;uniqueName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Review Date&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="na"&gt;uniqueName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Measures&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="na"&gt;uniqueName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;aggregation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;average&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="na"&gt;sorting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
                    &lt;span class="na"&gt;measure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;configuratorButton&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Chocolate Bar Ratings&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;customizeCellFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cellBuilder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cellData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cellData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;value&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;cellBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;choco&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getJSONData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Company Maker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A. Morin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Specific Bean Origin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agua Grande&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;REF&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1876&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Review Date&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2016&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cocoa Percent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;63%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Company Location&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;France&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;Rating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;3.75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bean Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Broad Bean Origin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sao Tome&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="c1"&gt;// Other data entries...&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Feeling inspired? &lt;a href="https://codepen.io/webdatarocks/pen/ExJLdGj"&gt;Dive into our CodePen demo&lt;/a&gt; to explore the magic of bubble text and discover the best chocolate flavor ever! Don't be afraid to experiment, tweak the code, and add your unique touch to the project. After all, #CodePenChallenge is all about embracing your creativity and pushing the boundaries of what's possible!&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>webdev</category>
      <category>analytics</category>
      <category>css</category>
    </item>
    <item>
      <title>CodePen November challenge: WebDataRocks experience</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Mon, 11 Dec 2023 11:47:43 +0000</pubDate>
      <link>https://dev.to/juliianikitina/codepen-november-challenge-webdatarocks-experience-2jff</link>
      <guid>https://dev.to/juliianikitina/codepen-november-challenge-webdatarocks-experience-2jff</guid>
      <description>&lt;p&gt;Greetings, fellow coders! Today, I'm excited to share with you the results of my coworker's adventures in the &lt;a href="https://codepen.io/challenges/2023/november"&gt;November CodePen challenge&lt;/a&gt;. But before we dive into the dashboards, let's explore the essence of this monthly coding riddle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview of the CodePen Challenge
&lt;/h3&gt;

&lt;p&gt;So, picture this: a monthly shindig where you get handed a theme and a task, and you gotta flex your coding muscles to whip up a coding masterpiece. Each week - new task. Each month - new theme. All year round - rendezvous with your own creativity and coding skills. It's like a coding rollercoaster – fast, a little scary, but hella exciting.&lt;/p&gt;

&lt;p&gt;The November theme was Style Trends, and this coding odyssey unfolded through Bento Style, Neo-Brutalism, Y2K Style, and the mystical Gradient Glow😍. Besides the task, you get a list of ideas and resources to read more about the theme and look for inspiration. &lt;/p&gt;

&lt;p&gt;My fearless friend and coworker &lt;a href="https://instagram.com/se7enteen.blue"&gt;Nadia&lt;/a&gt; dove headfirst into the November chaos and tamed each of these styles into a dashboard using the template provided in the task and our free web component - &lt;a href="https://www.webdatarocks.com"&gt;WebDataRocks&lt;/a&gt; - a JavaScript library for creating pivot tables.&lt;/p&gt;

&lt;p&gt;And I'm here to present you the results of her dedicated work and explore these trends with you. So let's start with the week #1!&lt;/p&gt;

&lt;h3&gt;
  
  
  Bento Style
&lt;/h3&gt;

&lt;p&gt;Our journey commences with &lt;a href="https://bootcamp.uxdesign.cc/web-design-trend-bento-box-95814d99ac62"&gt;Bento Style&lt;/a&gt; – an ode to digital minimalism. The dashboard echoes the Japanese art of bento box arrangement, emphasizing simplicity, order, and elegance. It's a good thing to consider when working with reports and data analytics as it structures the information, doesn't look overwhelming, and is also stylish - the perfect combo!&lt;/p&gt;

&lt;p&gt;And my coworker conjured up a dashboard that's cleaner than Marie Kondo's closet! Everything is in its place, no clutter allowed. Each element is meticulously placed, creating a harmonious user experience. It's a testament to the principle that less is often more. &lt;/p&gt;

&lt;p&gt;Immerse yourself in the tranquility of the &lt;a href="https://codepen.io/webdatarocks/pen/abXwRdg"&gt;Bento Style demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy30jp9l1uca50fzv500v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy30jp9l1uca50fzv500v.png" alt="Bento Style dashboard" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Neo-Brutalism
&lt;/h3&gt;

&lt;p&gt;Next in line is &lt;a href="https://www.onething.design/blogs/neo-brutalism-ui-design-trend/"&gt;Neo-Brutalism&lt;/a&gt; – a stylistic rebellion against conventional norms. Characterized by raw, unpolished aesthetics, the dashboard resembles a digital Rubik's Cube. The clash of colors and intersecting lines creates an unconventional yet oddly captivating beauty. &lt;/p&gt;

&lt;p&gt;Emerging in the mid-20th century, Neo-Brutalism challenges the status quo with its raw and authentic expression. Softening all the brutality with a pastel palette, you get a pretty &lt;a href="https://codepen.io/webdatarocks/pen/ZEwXRxM"&gt;motivating sports dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vlmwwmtlepowky468lm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vlmwwmtlepowky468lm.png" alt="Neo-Brutalism dashboard" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Y2K Style
&lt;/h3&gt;

&lt;p&gt;Hold onto your flip phones because we're diving into &lt;a href="https://www.wix.com/studio/blog/y2k-design"&gt;Y2K Style&lt;/a&gt;! Picture my coworker, adorned in butterfly clips and a fluffy hoodie, channeling the spirit of the turn of the millennium. Actually, you don't have to imagine - here it is! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb31qfickac2hf9w5tuun.JPEG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb31qfickac2hf9w5tuun.JPEG" alt="A Y2K styled collage" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nadia was so excited about this theme that she also dressed in Y2K style! What a dedicated person🤯...&lt;/p&gt;

&lt;p&gt;The dashboard pays homage to this era with cute, bright colors, bold fonts and patterns, and a modern twist. Y2K Style emerged as a bridge between the analog and digital worlds, embracing both the nostalgia of the past and the excitement of the future. Dive into this &lt;a href="https://codepen.io/webdatarocks/pen/gOqzPNv"&gt;nostalgia dashboard&lt;/a&gt; yourself on CodePen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbgbniv33uyi47dmvxdxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbgbniv33uyi47dmvxdxa.png" alt="Y2K Styled dashboard" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gradient Glow Style
&lt;/h3&gt;

&lt;p&gt;The grand finale brings us to &lt;a href="https://muffingroup.com/blog/gradient-website-design/"&gt;Gradient Glow Style&lt;/a&gt;, a digital dreamscape illuminated by neon lights and vibrant gradients. The use of gradients and glowing elements has its roots in early web design, evolving into a modern trend that adds depth and vibrancy to digital spaces. &lt;/p&gt;

&lt;p&gt;Nadia's dashboard captures attention with a deep, calm green gradient, and the matcha-colored accents soften the seriousness of the report.&lt;/p&gt;

&lt;p&gt;Immerse yourself in the &lt;a href="https://codepen.io/webdatarocks/pen/rNPqQge"&gt;glow of creativity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffgmormezb75j1o415azz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffgmormezb75j1o415azz.png" alt="Gradient Glow Styled dashboard" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;And there you have it – a month of coding exploration spanning four distinct styles, each revealing the depth of creative possibilities and a nod to the history that shaped them. It's not just about the code; it's about translating ideas into a visual tapestry that echoes the spirit of each stylistic era. &lt;/p&gt;

&lt;p&gt;Kudos to my coworker for turning code into art! I hope you also got inspired by her creations, and until the next coding adventure, happy crafting, fellow devs! 🚀💻&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>javascript</category>
      <category>analytics</category>
      <category>challenge</category>
    </item>
    <item>
      <title>A 3-minute tutorial on how to make a Halloween prank on your colleagues 👻</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Tue, 31 Oct 2023 16:23:44 +0000</pubDate>
      <link>https://dev.to/juliianikitina/a-3-minute-tutorial-on-how-to-make-a-halloween-prank-on-your-colleagues-1flk</link>
      <guid>https://dev.to/juliianikitina/a-3-minute-tutorial-on-how-to-make-a-halloween-prank-on-your-colleagues-1flk</guid>
      <description>&lt;p&gt;Want to surprise your friends at work? Make their working process a little bit more exciting with this small prank! Though, be careful not to scare them too much... &lt;/p&gt;

&lt;p&gt;We will create a Halloween-themed pivot table with horror movie information, styled toolbar icons, alternating background colors, and a tiny, cute spider moving across the pivot table. Just like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qxsr0p9qmtsrmbd8ktj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qxsr0p9qmtsrmbd8ktj.gif" alt="Halloween themed pivot table demo" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a breakdown of the code of the demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Setup HTML Structure
&lt;/h2&gt;

&lt;p&gt;Firstly, you'll need to set up the HTML structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="https://cdn.webdatarocks.com/latest/webdatarocks.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link href="https://cdn.webdatarocks.com/latest/theme/dark/webdatarocks.min.css" rel="stylesheet"/&amp;gt;

&amp;lt;div id="wdr-container"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;img class="spider" src="https://media1.giphy.com/media/JIoVDbuFoZGKjIkYga/giphy.gif"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code snippet consists of references to the WebDataRocks library and &lt;a href="https://www.webdatarocks.com/demos/custom-pivot-table-styles/"&gt;its dark theme styles&lt;/a&gt;. It also sets up a container &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; for the pivot table and includes an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag to display a spider GIF within the document. This code serves as the foundational structure for integrating a WebDataRocks pivot table and displaying the spider GIF in the HTML document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: JavaScript Initialization and Customization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  WebDataRocks Initialization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var pivot = new WebDataRocks({
  container: "#wdr-container",
  customizeCell: customizeCellFunction,
  beforetoolbarcreated: customizeToolbar,
  report: {
    // Data source configuration
    dataSource: {
      filename: "https://cdn.webdatarocks.com/data/movie_profit.csv",
    },
    "slice": {
      // Configuring the structure of rows and columns
      "rows": [{
        "uniqueName": "movie",
        "sort": "unsorted"
      }],
      "columns": [{
          "uniqueName": "genre",
          "filter": {
            // Filtering the 'genre' column for 'Horror' genre
            "type": "top",
            "quantity": 10,
            "measure": "worldwide_gross",
            "members": [
              "genre.Horror"
            ]
          },
          "sort": "unsorted"
        },
        {
          "uniqueName": "Measures"
        }
      ],
      // Measures/aggregations to display in the pivot table
      "measures": [{
          "uniqueName": "worldwide_gross",
          "aggregation": "sum"
        },
        {
          "uniqueName": "production_budget",
          "aggregation": "sum"
        }
      ],
      // Sorting configuration for rows and columns
      "sorting": {
        "row": {
          "type": "desc",
          "tuple": [],
          "measure": "worldwide_gross"
        },
        "column": {
          "type": "desc",
          "tuple": [],
          "measure": "worldwide_gross"
        }
      }
    },
    // Additional options for the pivot table
    "options": {
      "grid": {
        "showTotals": "off",
        "showGrandTotals": "columns"
      }
    },
    // Formatting settings for numbers and currencies
    "formats": [{
      "name": "",
      "thousandsSeparator": " ",
      "decimalSeparator": ".",
      "currencySymbol": "$",
      "currencySymbolAlign": "left",
      "nullValue": "",
      "textAlign": "right",
      "isPercent": false
    }]
  },
  // Set the width and height of the pivot table
  width: "100%",
  height: 430,
  // Enable the toolbar
  toolbar: true
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Configuration: Sets the data source as a CSV file containing movie profit data. It defines the structure of rows, columns, measures, and their aggregations for the pivot table.&lt;/li&gt;
&lt;li&gt;Slice Configuration: Specifies the rows, columns, measures, filtering for the 'Horror' genre, and sorting options.&lt;/li&gt;
&lt;li&gt;Options: Customizes the pivot table by setting options such as hiding totals and displaying grand totals.&lt;/li&gt;
&lt;li&gt;Formats: Defines number formatting such as thousands separator, decimal separator, currency symbol, alignment, and other display configurations.&lt;/li&gt;
&lt;li&gt;Pivot Table Settings: Defines the dimensions (width and height) of the pivot table and enables the toolbar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cell Customization Function
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function customizeCellFunction(cellBuilder, cellData) {
  if (cellData.type == "value") {
    // Alternates cell colors based on rowIndex
    if (cellData.rowIndex % 2 == 0) {
      cellBuilder.addClass("alter1");
    } else {
      cellBuilder.addClass("alter2");
    }
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;customizeCellFunction&lt;/code&gt;: Customizes cell appearance based on cell data.&lt;/li&gt;
&lt;li&gt;Cell Color Alternation: Alternates the cell colors for better visualization by adding classes "alter1" and "alter2" based on the row index.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Toolbar Customization Function
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function customizeToolbar(toolbar) {
  var tabs = toolbar.getTabs();
  toolbar.getTabs = function() {
    for (let i = 0; i &amp;lt; tabs.length; i++) {
      // Modifies toolbar icons based on their positions
      switch (i % 4) {
        case 0:
          tabs[i].icon = `&amp;lt;img width=30 height=30 src="https://cdn-icons-png.flaticon.com/512/6433/6433146.png"/&amp;gt;`;
          break;
        case 1:
          tabs[i].icon = `&amp;lt;img width=30 height=30 src="https://cdn-icons-png.flaticon.com/512/3330/3330533.png "/&amp;gt;`;
          break;
        case 2:
          tabs[i].icon = `&amp;lt;img width=30 height=30 src="https://cdn-icons-png.flaticon.com/512/8490/8490308.png "/&amp;gt;`;
          break;
        case 3:
          tabs[i].icon = `&amp;lt;img width=30 height=30 src="https://cdn-icons-png.flaticon.com/512/3277/3277415.png"/&amp;gt;`;
          break;
      }
    }
    return tabs;
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;customizeToolbar&lt;/code&gt;: Customizes the toolbar icons.&lt;/li&gt;
&lt;li&gt;Toolbar Icon Modification: Changes the icons of different tabs based on their positions (0 to 3) by replacing them with images from provided URLs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Create CSS Styles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Styling for alternating cell colors
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#wdr-pivot-view #wdr-grid-view div.alter1 {
  background-color: #4f983c;
}

#wdr-pivot-view #wdr-grid-view div.alter2 {
  background-color: #7e42d6;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These CSS rules target specific elements within the WebDataRocks pivot table grid to style the alternating cells. &lt;/p&gt;

&lt;p&gt;The classes alter1 and alter2 are applied to cells in the pivot table view to give them different background colors. When rendered, every other cell will have the specified background colors, creating a visually distinctive pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  Styling the Spider Gif
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;html {
  position: relative;
}

img.spider {
  position: absolute;
  bottom: 0;
  right: 0;
  animation: spiderMovement 12s linear infinite;
  transform: scaleX(-1);
  width: 200px;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;html { position: relative; }&lt;/code&gt;: This sets the positioning context for other elements inside the HTML document. It's crucial for correctly positioning the spider gif, as it will be absolutely positioned within this context.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;img.spider { ... }&lt;/code&gt;: This targets the image with the class name "spider".&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;position: absolute;&lt;/code&gt;: Positions the spider gif absolutely within the HTML document.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bottom: 0; right: 0;&lt;/code&gt;: Places the spider at the bottom right corner of the parent element, in this case, the HTML document.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;animation: spiderMovement 12s linear infinite;&lt;/code&gt;: Applies the &lt;code&gt;spiderMovement&lt;/code&gt; animation to the spider gif. It moves the gif from the right edge of the screen (0% progress) to the left edge (100%) over a duration of 12 seconds, using a linear animation timing function, and it loops infinitely.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;transform: scaleX(-1);&lt;/code&gt;: Mirrors the spider gif horizontally (flips it), making it face left.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;width: 200px;&lt;/code&gt;: Sets the width of the spider gif to 200 pixels.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Animation Keyframes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@keyframes spiderMovement {
  0% {
    right: 0;
  }
  100% {
    right: 100%;
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This CSS rule defines the animation sequence named &lt;code&gt;spiderMovement&lt;/code&gt; using keyframes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;0%&lt;/code&gt;: At the beginning (0% progress), the spider gif is positioned at the extreme right edge (right: 0).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;100%&lt;/code&gt;: At the end (100% progress), the spider gif is moved to the extreme left edge (right: 100%).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This animation creates the illusion of the spider crawling across the pivot table from right to left by continuously looping the movement over the defined 12-second duration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You'll need to include this code within an HTML file, making sure to reference the necessary WebDataRocks library and dependencies, and replace any placeholder data sources or file paths with your actual data or URLs. Ensure your data source is accessible and correctly configured in the WebDataRocks initialization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure the spider gif URL is accessible and properly positioned to give the effect of it crawling across the pivot table. Adjust the position by modifying the CSS properties like top, bottom, left, or right within the &lt;code&gt;.spider&lt;/code&gt; class. You can choose another spider gif that is more realistic. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remember, to use this code, you'll need access to the WebDataRocks library and the provided resources (icons and spider gif). &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also, test this in an environment that allows loading external resources and supports the WebDataRocks library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can replace the Halloween-themed icons with your preferred images. Just update the URLs in the &lt;code&gt;customizeToolbar&lt;/code&gt; function.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Congratulations!
&lt;/h2&gt;

&lt;p&gt;You've created a fun and spooky Halloween-themed pivot table with horror movie data. Explore further by customizing the styles, adding more spooky elements, or incorporating additional functionalities to suit your Halloween theme.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://codepen.io/webdatarocks/pen/ExrKmYp"&gt;interactive demo on CodePen&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>halloween</category>
      <category>data</category>
      <category>analytics</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Meet a new technology to display your big data volumes instantly without any waiting time!</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Thu, 17 Nov 2022 11:18:21 +0000</pubDate>
      <link>https://dev.to/juliianikitina/meet-a-new-technology-to-display-your-big-data-volumes-instantly-without-any-waiting-time-242k</link>
      <guid>https://dev.to/juliianikitina/meet-a-new-technology-to-display-your-big-data-volumes-instantly-without-any-waiting-time-242k</guid>
      <description>&lt;p&gt;Hi, guys!&lt;/p&gt;

&lt;p&gt;Happy to see you here and even happier to announce something new we’ve been working on lately!&lt;/p&gt;

&lt;p&gt;I am a part of the Flexmonster team - a company that works on several data visualization pivot grid products such as &lt;a href="https://www.flexmonster.com"&gt;Flexmonster Pivot Table &amp;amp; Charts&lt;/a&gt; and &lt;a href="https://www.webdatarocks.com"&gt;WebDataRocks&lt;/a&gt;. We continue to develop and improve these products, but we cannot stop moving forward with our other ideas and inventions that come to us in the process.&lt;/p&gt;

&lt;p&gt;As you can see, all our work is focused on data and its representation in tabular format. Having broad experience and a large customer base, we started noticing one specific request from our users.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main pain points?
&lt;/h2&gt;

&lt;p&gt;Many companies need to &lt;strong&gt;visualise such a large number of records&lt;/strong&gt; at a time that &lt;strong&gt;the browser sometimes simply cannot cope with&lt;/strong&gt; or it takes hours to process and draw it on the grid.&lt;/p&gt;

&lt;p&gt;And even if eventually everything ends up on the page, any subsequent action, be it filtering or searching for a concrete value, will take a lot of time again. Such software performance does not contribute to work efficiency at all, and even more so – to good results.&lt;/p&gt;

&lt;p&gt;Thus, even the mention of analyzing a large amount of data leads to an instant association with a boring, long, and irritating process.&lt;/p&gt;

&lt;p&gt;Looking back on all our development experience, we decided to enter the game.&lt;/p&gt;

&lt;p&gt;We researched &lt;strong&gt;61 components&lt;/strong&gt; on the market, and &lt;strong&gt;only 28%&lt;/strong&gt; of them wrote something about &lt;strong&gt;working with big amounts of data&lt;/strong&gt;. At the same time, the meaning of the term "&lt;em&gt;large dataset&lt;/em&gt;" is different for everyone - for some, it's 10,000 records, and for others, a million. Similarly, the meaning of the term "&lt;em&gt;fast performance&lt;/em&gt;" is different for everyone. &lt;strong&gt;But none of their "understandings" meet our requirements.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Therefore, it was decided to develop such a solution ourselves - &lt;strong&gt;a super fast and powerful data grid that can work with millions of records instantly&lt;/strong&gt; so you can access all your data without waiting.&lt;/p&gt;

&lt;p&gt;A little additional market research, study of different approaches, development of principles and goals of our product, and some practical experiments - and here we have what to present to you - meet &lt;a href="https://datatable.dev/?r=producthunt&amp;amp;ref=producthunt"&gt;DataTable.dev&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;It's &lt;strong&gt;a grid library&lt;/strong&gt;, but &lt;strong&gt;with that dreamy ideal performance&lt;/strong&gt;. The component reacts so quickly to any actions that the user seems to be directly interacting with the data without a computer as an intermediary. At the same time, it does not matter how much data you upload there - &lt;strong&gt;the demo shows 11 million rows from a 1.6 GB file&lt;/strong&gt;, but the grid can actually handle a lot more than that!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j99ubhel8n7rvjj41bz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j99ubhel8n7rvjj41bz.gif" alt="DataTable.dev demo" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We focused on creating a solution that can rightly be called **the destroyer of the stereotype of slow data analysis **and providing you with an ideal fast and convenient software.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did we achieve it?
&lt;/h2&gt;

&lt;p&gt;We developed &lt;strong&gt;our own approach to our data table operation and functioning.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We reviewed the principle of loading and drawing data in the browser window of our previous products and found several optimizations that could significantly improve and speed up these processes.&lt;/p&gt;

&lt;p&gt;We managed to specify the structure of frames and different behaviours of processes in different situations, defined their execution time and sequence, and managed to optimise free time in frames.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;We are continuing the development of our idea and want to implement such a scheme in our other products. &lt;/p&gt;

&lt;p&gt;But right now, you can check our current progress, give us feedback, and sign up for our newsletter, where we'll be showing you the progress of the component in live. On the website, you can now read more about our product, try playing with a demo and evaluate the scale of data that the table can handle, as well as delve into our approach to understand it better from the inside.&lt;/p&gt;

&lt;p&gt;We have also launched our idea on a &lt;a href="https://www.producthunt.com/posts/datatable-dev"&gt;Product Hunt&lt;/a&gt; and hope to get enough feedback to continue developing and improving our approach and product.&lt;/p&gt;

&lt;p&gt;I'm really excited to finally be able to show you our results and hear your comments and feedback because that's what motivates us to move forward!&lt;/p&gt;

&lt;p&gt;So write in the comments all your thoughts and suggestions - we will be very happy to expand our horizons and get more points of view!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Check out my List Of JavaScript Data Visualisation Libraries!</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Mon, 07 Mar 2022 16:23:31 +0000</pubDate>
      <link>https://dev.to/juliianikitina/check-out-my-list-of-javascript-data-visualisation-libraries-3j7f</link>
      <guid>https://dev.to/juliianikitina/check-out-my-list-of-javascript-data-visualisation-libraries-3j7f</guid>
      <description>&lt;p&gt;I have recently tried many JavaScript libraries for data analysis and visualization and used them in different combinations and on different stacks. Of course, not all of the existing ones, but enough to write a whole list. &lt;/p&gt;

&lt;p&gt;So I decided to do it - to write the &lt;a href="https://github.com/YuliiaNikitina/Complete-list-of-JavaScript-data-visualisation-components/?r=dt5"&gt;Complete List Of JavaScript Data Visualization Components&lt;/a&gt; and share it on &lt;strong&gt;GitHub&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;So that my colleagues would not spend hours looking for the right and suitable component for them. I can't call it &lt;em&gt;"complete"&lt;/em&gt; yet, but if you have experience with a component I didn't mention, but you could recommend it, I'd be happy to get a pool request from you with new items on the list. &lt;/p&gt;

&lt;p&gt;I hope this list will be useful to many of you and make life easier. What do you think? Write your suggestions and ideas in the comments - I will be happy to read them and improve my list. &lt;/p&gt;

&lt;p&gt;Let me know what you think!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>analytics</category>
      <category>100daysofcode</category>
    </item>
    <item>
      <title>New WebDataRocks 1.4 release is out!</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Thu, 23 Sep 2021 15:53:38 +0000</pubDate>
      <link>https://dev.to/juliianikitina/new-webdatarocks-1-4-release-is-out-e0</link>
      <guid>https://dev.to/juliianikitina/new-webdatarocks-1-4-release-is-out-e0</guid>
      <description>&lt;p&gt;Just a short notice about the free javascript data visualization library my team &amp;amp; I are working on. &lt;/p&gt;

&lt;p&gt;We made a few new improvements in &lt;a href="https://www.webdatarocks.com/?r=dt4" rel="noopener noreferrer"&gt;WebDataRocks Pivot Table&lt;/a&gt; release 1.4 that I want to share with the community. &lt;/p&gt;

&lt;p&gt;This time, we added: &lt;/p&gt;

&lt;p&gt;☑️ An easy way to integrate pivot grid with &lt;a href="https://www.webdatarocks.com/doc/integration-with-angular/?r=dt4" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;, &lt;a href="https://www.webdatarocks.com/doc/integration-with-vue/?r=dt4" rel="noopener noreferrer"&gt;Vue&lt;/a&gt; &amp;amp; &lt;a href="https://www.webdatarocks.com/doc/integration-with-react/?r=dt4" rel="noopener noreferrer"&gt;React&lt;/a&gt;, just using npm. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Before starting, make sure that Node.js and npm are installed on your machine as well as the CLI of the corresponding framework&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then just one command and you have the needed module installed:&lt;/p&gt;

&lt;p&gt;⚫ for Vue&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install vue-webdatarocks


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;⚫ for React&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install react-webdatarocks


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;⚫ for Angular&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install ng-webdatarocks


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now you have ready-to-use wrappers for the most popular frameworks to save time and effort on embedding them with our product. But still, our pivot tool can be integrated with any other framework, the &lt;a href="https://www.webdatarocks.com/doc/available-tutorials/?r=dt4" rel="noopener noreferrer"&gt;available tutorials&lt;/a&gt; you can find in our documentation.&lt;/p&gt;

&lt;p&gt;☑️ New predefined pivot grid skins: beautify your report with stylish themes by choosing any of the 8 themes or create your own one with our new &lt;a href="https://www.webdatarocks.com/doc/custom-report-themes/?r=dt4" rel="noopener noreferrer"&gt;custom theme builder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcupolf5e7sccoxddg5bt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcupolf5e7sccoxddg5bt.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There were also a few minor changes we made that you can find in our &lt;a href="https://www.webdatarocks.com/blog/webdatarocks-1-4-release-new-long-awaited-features/?r=dt4" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope that you have already tried or used our free pivot grid component in your project. We made it for developers to save their time, so we hopefully achieve our goal and will value any feedback from the dev community!&lt;/p&gt;

</description>
      <category>vue</category>
      <category>angular</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Simple report app with Blazor in 10 minutes</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Thu, 26 Aug 2021 13:59:39 +0000</pubDate>
      <link>https://dev.to/juliianikitina/simple-report-app-with-blazor-in-10-minutes-5h22</link>
      <guid>https://dev.to/juliianikitina/simple-report-app-with-blazor-in-10-minutes-5h22</guid>
      <description>&lt;p&gt;Recently, I had a task to start working with a new framework - &lt;strong&gt;Blazor&lt;/strong&gt;. This is the first time I have dealt with it, so for a start I decided to search for some additional information on it on some blogs.&lt;/p&gt;

&lt;p&gt;One of the critical features of Blazor, which most developers have mentioned, is the ability to &lt;strong&gt;use both C# and various JavaScript libraries&lt;/strong&gt; when creating an application. In turn, I was very bribed that the whole integration process is simple and even speeds up the work on the project because it adds more mobility.&lt;/p&gt;

&lt;p&gt;In this short tutorial, I'll show you my experience, how using &lt;a href="https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor/?r=dt3" rel="noopener noreferrer"&gt;Blazor&lt;/a&gt; and &lt;a href="https://www.flexmonster.com/?r=dt3" rel="noopener noreferrer"&gt;Flexmonster Pivot Table &amp;amp; Charts library&lt;/a&gt; create the simplest reporting app with a pivot grid in 10 minutes.&lt;/p&gt;

&lt;p&gt;Before we start, check that you have installed the &lt;em&gt;.NET Core 2.1.300 (or later) SDK&lt;/em&gt; and it works properly.&lt;/p&gt;

&lt;h2&gt;
  
  
  №1. Create the simplest Blazor app
&lt;/h2&gt;

&lt;p&gt;So to create the base, you just need to run one command in the terminal (could it be even easier?):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

dotnet new blazorserver -o BlazorApp --no-https


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You will see a new folder BlazorApp with all the files needed in your current location, and on &lt;a href="http://localhost:5000" rel="noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt;, you will find the basic Blazor app template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F720tm2ectnyrdz78446g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F720tm2ectnyrdz78446g.png" alt="Screenshot 2021-08-16 at 10.30.01"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  №2. Add the Flexmonster Pivot to your app
&lt;/h2&gt;

&lt;p&gt;Instead of “ Welcome to your new app“ our task is to add a pivot grid to the main page. &lt;/p&gt;

&lt;p&gt;To do this install the Flexmonster.Blazor package:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

dotnet add package Flexmonster.Blazor


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add it to the project by writing the following line in the import file (&lt;code&gt;_Imports.razor&lt;/code&gt;):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

@using Flexmonster.Blazor


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add the script to the main HTML file (&lt;code&gt;_Host.cshtml&lt;/code&gt;) so it looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;head&amp;gt;
   &amp;lt;!-- Other metadata tags --&amp;gt;
   &amp;lt;link href="css/app.css" rel="stylesheet" /&amp;gt;
   &amp;lt;link href="PivotBlazor.styles.css" rel="stylesheet" /&amp;gt;
   &amp;lt;script src="_content/Flexmonster.Blazor/blazor-flexmonster.js"&amp;gt;&amp;lt;/script&amp;gt;
   &amp;lt;!-- Other metadata tags --&amp;gt;
&amp;lt;/head&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And finally, let's add the table itself to the main page. In &lt;code&gt;Index.razor&lt;/code&gt; file, replace the header and caption with the Flexmonster Pivot Grid caption and the component itself with the parameters you need (enable the Toolbar and define width and height of the pivot):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

@page "/"
&amp;lt;h1&amp;gt;Flexmonster Pivot Grid&amp;lt;/h1&amp;gt;
&amp;lt;FlexmonsterComponent Report="@report"
                     Toolbar="true"
                     Width="100%"
                     Height="600"&amp;gt;
&amp;lt;/FlexmonsterComponent&amp;gt;
@code {
    string report = "https://cdn.flexmonster.com/reports/report.json";
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In the &lt;code&gt;@code&lt;/code&gt; block, we specify the path to the report displayed on the page and pass it to the component as a variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  №3. Run your Blazor report app
&lt;/h2&gt;

&lt;p&gt;That’s all! Simply run your app in the terminal with &lt;code&gt;dotnet run&lt;/code&gt; and open the &lt;a href="http://localhost:5000" rel="noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All these steps will take you about 10 minutes, and you will see the result immediately. All that remains is to take a closer look at the &lt;a href="https://www.flexmonster.com/doc/integration-with-blazor/?r=dt3" rel="noopener noreferrer"&gt;Flexmonster Pivot Grid&lt;/a&gt; and &lt;a href="https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/intro/?r=dt3" rel="noopener noreferrer"&gt;Blazor&lt;/a&gt; documentation to unleash this framework’s capabilities fully!&lt;/p&gt;

&lt;p&gt;If this tutorial were helpful for you, I would be thrilled to hear your feedback and ideas about this integration.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>webdev</category>
      <category>blazor</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Spectacular dashboard with Flexmonster Pivot and amCharts</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Fri, 09 Jul 2021 14:41:27 +0000</pubDate>
      <link>https://dev.to/juliianikitina/spectacular-dashboard-with-flexmonster-pivot-and-amcharts-56db</link>
      <guid>https://dev.to/juliianikitina/spectacular-dashboard-with-flexmonster-pivot-and-amcharts-56db</guid>
      <description>&lt;p&gt;I have always liked something bright and unusual, no matter whether it is clothing, a painting, or an interesting visualization. And when I come across something like that, I immediately want to try to do it myself.&lt;/p&gt;

&lt;p&gt;It happened this time too. When I saw all the examples amCharts have, I immediately knew how I would spend in the near future. That's how this mini-tutorial appeared on how to combine charts and &lt;a href="https://www.flexmonster.com/?r=dt2"&gt;Flexmonster Pivot&lt;/a&gt; and create a cool interactive and at the same time meaningful dashboard.&lt;/p&gt;

&lt;p&gt;So let's get to work!&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 1. Data
&lt;/h1&gt;

&lt;p&gt;Let's start with the data. This time I decided to take information about cheese production from France, Greece and Italy. They are in my JSON array, which I will insert directly into the code and through the function getData() I will get the data for the pivot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function getData() {
  return [
    {
      Date: "2020-01-05",
      id: "GR",
      CountryCode: "gr",
      Country: "Greece",
      Feta: 62,
      Mozzarella: 8,
      "Parmigiano-Reggiano": 8
    },
    {
      Date: "2020-01-12",
      id: "GR",
      CountryCode: "gr",
      Country: "Greece",
      Feta: 62,
      Mozzarella: 11,
      "Parmigiano-Reggiano": 8
    },
…
] }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 2. Pivot
&lt;/h1&gt;

&lt;p&gt;Now let's create the pivot itself and add a reportcompleteevent handler to create charts for the dashboard at the end.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let pivot = new Flexmonster({
  container: "pivot-container",
  licenseFilePath: "https://cdn.flexmonster.com/codepen.key",
  componentFolder: "https://cdn.flexmonster.com/",
  height: 440,
  customizeCell: customizeCell,
  report: {
    dataSource: {
      data: getData(),
      mapping: {
        Date: {
          type: "date"
        },
        Country: {
          type: "string"
        },
        id: {
          type: "string"
        },
        CountryCode: {
          type: "property",
          hierarchy: "Country"
        },
        Feta: {
          type: "number"
        },
        Mozzarella: {
          type: "number"
        },
        "Parmigiano-Reggiano": {
          type: "number"
        }
      }
    },
    slice: {
      rows: [
        {
          uniqueName: "Country"
        },
        {
          uniqueName: "[Measures]"
        }
      ],
      columns: [
        {
          uniqueName: "Date.Month",
          filter: {
            members: [
              "date.month.[january]",
              "date.month.[february]",
              "date.month.[march]",
              "date.month.[april]",
              "date.month.[may]",
              "date.month.[june]"
            ]
          }
        }
      ],
      measures: [
        {
          uniqueName: "Feta",
          aggregation: "sum",
          grandTotalCaption: "Feta"
        },
        {
          uniqueName: "Mozzarella",
          aggregation: "sum",
          grandTotalCaption: "Mozzarella"
        },
        {
          uniqueName: "Parmigiano-Reggiano",
          aggregation: "sum",
          grandTotalCaption: "Parmigiano-Reggiano"
        }
      ]
    },
    options: {
      grid: {
        showHeaders: false,
        showGrandTotals: "rows"
      },
      showAggregationLabels: false
    }
  },
  reportcomplete: function () {
    pivot.off("reportcomplete");
    createPieChart();
    createStackedChart();
    createMapChart();
    createPictorialChart();
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 3. Customization
&lt;/h1&gt;

&lt;p&gt;In order to make the pivot itself more interesting, I suggest adding the flags to the countries. We will do this through the &lt;em&gt;customizeCell&lt;/em&gt; function, and we will set the styles through CSS. Note that we are styling both expanded and collapsed variants.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function customizeCell(cell, data) {
  if (data.hierarchy &amp;amp;&amp;amp; data.type == "header") {
    console.log(data);
    if (
      data.hierarchy.caption == "Country" &amp;amp;&amp;amp;
      data.member &amp;amp;&amp;amp;
      data.member.properties
    ) {
      let name = data.member.properties.CountryCode;
      let flag = `&amp;lt;i class="fm-icon ${
        data.expanded ? "fm-expanded-icon" : "fm-collapsed-icon"
      }" 
        title="${data.expanded ? "Click to collapse" : "Click to expand"}"&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;img class="flag-icon" src="https://cdn.flexmonster.com/i/flags/${name.toLowerCase()}.svg"&amp;gt;`;
      cell.text = `${flag}&amp;lt;span style="margin-left: 2px; line-height: 16px"&amp;gt;${data.member.caption}&amp;lt;/span&amp;gt;`;
      cell.addClass("fm-custom-cell");
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.fm-custom-cell {
  display: flex !important;
  align-items: center !important;
  font-size: 12px !important;
}

.fm-custom-cell .flag-icon {
  width: 21px !important;
  height: 16px !important;
  margin-left: 0 !important;
  margin-right: 2px !important;
}

#fm-pivot-view
  .fm-grid-layout
  .fm-custom-cell.fm-expanded
  .fm-expanded-icon::before,
#fm-pivot-view
  .fm-grid-layout
  .fm-custom-cell.fm-collapsed
  .fm-collapsed-icon::before {
  top: -2px;
  height: 16px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 4. Charts
&lt;/h1&gt;

&lt;p&gt;Now we can get to the charts. &lt;/p&gt;

&lt;p&gt;First, we will declare our charts and choose the colors that we will use in them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let mapChart, pieChart, stackedChart, pictorialChart;
// Apply amCharts theme
am4core.useTheme(am4themes_animated);

const chartColors = [
  am4core.color("#4CBF8B"),
  am4core.color("#FFCD4C"),
  am4core.color("#E8734C"),
  am4core.color("#9875E3"),
  am4core.color("#4C9EFF"),
  am4core.color("#8ACFC3"),
  am4core.color("#CD97E6"),
  am4core.color("#F1D34C"),
  am4core.color("#65D2E7")
];

const cheeseColors = [
  am4core.color("#FFE268"),
  am4core.color("#FFCD4C"),
  am4core.color("#FFB037")
];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The data in charts will be transmitted from the pivot through a special &lt;em&gt;getData&lt;/em&gt; API call. Like here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function createPieChart() {
  pivot.amcharts.getData(
    {
      slice: {
        rows: [
          {
            uniqueName: "Date.Month",
            filter: {
              members: [
                "date.month.[january]",
                "date.month.[february]",
                "date.month.[march]",
                "date.month.[april]",
                "date.month.[may]",
                "date.month.[june]"
              ]
            }
          }
        ],
        measures: [
          {
            uniqueName: "Feta",
            aggregation: "sum"
          }
        ]
      }
    },
    drawPieChart,
    updatePieChart
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the amCharts  demo page you can find a wide variety of charts and graphics and apply them into your project. For this dashboard, I chose a StackedChart, PieChart, MapChart and PictorialChart. &lt;/p&gt;

&lt;p&gt;In this article, I will show using the PictorialChart how to transfer data from the pivot, in the rest of the charts everything works the same way. You can study them in more detail in the source code of the &lt;a href="https://codepen.io/flexmonster/pen/JjNKMKx/?r=dt2"&gt;demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So first we initialize the chart and then add data to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; pictorialChart = am4core.create(
    "amcharts-pictorial-container",
    am4charts.SlicedChart
  );
 pictorialChart.data = chartData.data;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how it should look at the end:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function drawPictorialChart(chartData, rawData) {
  var iconPath =
    "M10.512,156.385l231.164,35.647c-1.779-3.578-2.869-7.554-2.869-11.817c0-14.766,11.962-26.728,26.733-26.728 c14.768,0,26.733,11.962,26.733,26.728c0,7.173-2.861,13.657-7.466,18.466l75.392,11.622c8.752,1.351,12.632-3.979,8.66-11.906 l-35.401-70.833c-4.172,2.687-9.125,4.29-14.459,4.29c-14.768,0-26.726-11.968-26.726-26.733c0-11.491,7.29-21.213,17.473-24.98l-17.429-34.825c-3.955-7.92-13.781-11.547-21.94-8.093L232.122,53.41c5.122,7.019,8.175,15.631,8.175,24.98c0,23.463-19.015,42.477-42.49,42.477c-20.977,0-38.365-15.222-41.804-35.223L9.43,147.683C1.28,151.141,1.759,155.032,10.512,156.385z M125.661,123.215c4.883,0,8.838,3.95,8.838,8.833c0,4.883-3.955,8.833-8.838,8.833c-4.873,0-8.833-3.949-8.833-8.833C116.829,127.165,120.788,123.215,125.661,123.215zM30.294,218.466c17.012,0,30.799,13.793,30.799,30.805c0,16.996-13.788,30.797-30.799,30.797c-6.444,0-12.419-1.987-17.364-5.374l3.048,26.361c1.02,8.812,9.011,16.362,17.859,16.875l189.024,11.157c-0.068-0.754-0.229-1.476-0.229-2.24c0-14.644,11.857-26.497,26.493-26.497c14.643,0,26.497,11.854,26.497,26.497c0,1.815-0.192,3.595-0.529,5.313l59.086,3.486c8.844,0.514,17.34-6.115,18.979-14.827l18.431-98.29L0,162.851l7.598,65.657C13.229,222.353,21.297,218.466,30.294,218.466z M135.451,219.127c10.283,0,18.612,8.331,18.612,18.622c0,10.287-8.337,18.619-18.612,18.619c-10.293,0-18.623-8.332-18.623-18.619C116.829,227.458,125.158,219.127,135.451,219.127zM98.206,271.243c4.885,0,8.844,3.947,8.844,8.829c0,4.885-3.959,8.832-8.844,8.832c-4.871,0-8.831-3.947-8.831-8.832C89.375,275.19,93.335,271.243,98.206,271.243z";

  pictorialChart = am4core.create(
    "amcharts-pictorial-container",
    am4charts.SlicedChart
  );
  pictorialChart.hiddenState.properties.opacity = 0; // this makes initial fade in effect

  pictorialChart.data = chartData.data;

  var series = pictorialChart.series.push(
    new am4charts.PictorialStackedSeries()
  );
  series.colors.list = cheeseColors;

  series.dataFields.value = pivot.amcharts.getMeasureNameByIndex(rawData, 0);
  series.dataFields.category = pivot.amcharts.getCategoryName(rawData);
  series.alignLabels = true;
  series.labels = "disabled";
  series.ticks = "disabled";

  series.maskSprite.path = iconPath;

  pictorialChart.legend = new am4charts.Legend();
  pictorialChart.legend.position = "right";
  let marker = pictorialChart.legend.markers.template.children.getIndex(0);
  pictorialChart.legend.markers.template.width = 20;
  pictorialChart.legend.markers.template.height = 20;
  marker.cornerRadius(20, 20, 20, 20);

  pictorialChart.responsive.enabled = true;
  pictorialChart.responsive.rules.push({
    relevant: function (target) {
      if (target.pixelWidth &amp;lt;= 600) {
        return true;
      }
      return false;
    },
    state: function (target, stateId) {
      if (target instanceof am4charts.PictorialStackedSeries) {
        var state = target.states.create(stateId);

        var labelState = target.labels.template.states.create(stateId);
        labelState.properties.disabled = true;

        var tickState = target.ticks.template.states.create(stateId);
        tickState.properties.disabled = true;
        return state;
      }

      return null;
    }
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, we do not forget about updating the chart so that it remains interactive for us and transforms depending on changes in the pivot data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function updatePictorialChart(chartData, rawData) {
  pictorialChart.dispose();
  drawPictorialChart(chartData, rawData);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 5. Dashboard
&lt;/h1&gt;

&lt;p&gt;Now we can finally start adding all this to the page. First add the libraries themselves.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="https://cdn.flexmonster.com/flexmonster.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://cdn.flexmonster.com/lib/flexmonster.amcharts.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://www.amcharts.com/lib/4/core.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://www.amcharts.com/lib/4/charts.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://www.amcharts.com/lib/4/maps.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://www.amcharts.com/lib/4/themes/animated.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="https://cdn.amcharts.com/lib/4/geodata/worldHigh.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the CSS code, we will pre-specify styles for labels and container for charts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
    Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}

.chart-container {
  height: 450px;
}

.demo-box {
  background-color: #fafafa;
  position: relative;
  padding: 40px 30px 30px 30px;
  border: 1px solid #e9e9e9;
  margin-bottom: 20px;
  margin-top: 40px;
}

.demo-title {
  font-size: 18px;
  margin-bottom: 30px;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  line-height: 24px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we will simply add all the components in a row to the page, signing titles for our charts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div id="pivot-container"&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;div class="demo-box"&amp;gt;
  &amp;lt;div class="demo-title"&amp;gt;&amp;lt;strong&amp;gt;Overall Cheese Interest by Month&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id="amcharts-stacked-container" class="chart-container"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class="demo-box"&amp;gt;
  &amp;lt;div class="demo-title"&amp;gt;&amp;lt;strong&amp;gt;Total Cheese Interest by Country&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id="amcharts-pictorial-container" class="chart-container"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;Icons made by &amp;lt;a href="https://www.freepik.com" title="Freepik"&amp;gt;Freepik&amp;lt;/a&amp;gt; from &amp;lt;a href="https://www.flaticon.com/" title="Flaticon"&amp;gt;www.flaticon.com&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class="demo-box"&amp;gt;
  &amp;lt;div class="demo-title"&amp;gt;&amp;lt;strong&amp;gt;Feta Interest by Month&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id="amcharts-pie-container" class="chart-container"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class="demo-box no-text-before no-text-after"&amp;gt;
  &amp;lt;div class="demo-title"&amp;gt;&amp;lt;strong&amp;gt;Feta Interest by Country&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id="amcharts-map-container" class="chart-container"&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And voila! - our super interactive and modern cheese making dashboard is ready!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxh59fuzu814tpgecptyk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxh59fuzu814tpgecptyk.gif" alt="Alt Text" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Free desktop tool for insightful reporting. Let me know what you think😺</title>
      <dc:creator>Juliia Nikitina</dc:creator>
      <pubDate>Mon, 19 Apr 2021 11:51:31 +0000</pubDate>
      <link>https://dev.to/juliianikitina/flexmonster-desktop-on-product-hunt-4mij</link>
      <guid>https://dev.to/juliianikitina/flexmonster-desktop-on-product-hunt-4mij</guid>
      <description>&lt;p&gt;Hey Dev.to community😸, &lt;br&gt;
I want to share the project my team and I are working on. &lt;/p&gt;

&lt;p&gt;We are developers of JS data visualization library that is used by integrators as a powerful pivot table component for any web project. &lt;/p&gt;

&lt;p&gt;Our team has decided to give &lt;strong&gt;free access to the app to all people&lt;/strong&gt; using pivots in their everyday tasks.&lt;/p&gt;

&lt;p&gt;We have embedded our pivot table into a simple desktop application on the base of our integration with Electron.js.&lt;br&gt;
And now everyone can easily start working with it right after the download. This product is a convenient and simple solution for your fast reporting. And it doesn’t require any extra skills, knowledge or technical specialization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexmonster Pivot Table &amp;amp; Charts for desktop&lt;/strong&gt; is a lightweight reporting tool that provides a rich set of data analysis features: grouping, aggregating, filtering, sorting, pivot charts.&lt;br&gt;
Once you build a pivot grid, emphasize important insights with formatting, customize your report or save results to any format, be it PDF, Excel, HTML, CSV, or PNG.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8olz9bp4sdvx1h0pu463.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8olz9bp4sdvx1h0pu463.gif" alt="Alt Text" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes Flexmonster Desktop an effective reporting tool for anyone is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a super quick start by loading data from desired sources,&lt;/li&gt;
&lt;li&gt;a lot of options to export your result to different formats,&lt;/li&gt;
&lt;li&gt;a simple way to change the view on your data: charts, compact or flat view,&lt;/li&gt;
&lt;li&gt;a convenient drag-and-drop and super friendly UI, that allow you to easily configure your report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;amp; more.&lt;/p&gt;

&lt;p&gt;You can just &lt;a href="https://desktop.flexmonster.com/?r=dt1"&gt;download the app&lt;/a&gt;, run it on your computer and quickly make a customized report to present it to your boss or colleagues in just a few minutes.&lt;/p&gt;

&lt;p&gt;If you find it useful but need more custom scenarios for your own soft or website we have a &lt;a href="https://www.flexmonster.com"&gt;developer's version&lt;/a&gt; of our component that can be embedded in your own project. It is powered by extended API calls and different customization options for any use case. You can also customize the app basing it on our Electron integration&lt;/p&gt;

&lt;p&gt;😼 Today is a very important day for us - we are launching on ProductHunt: &lt;a href="https://www.producthunt.com/posts/flexmonster-desktop"&gt;https://www.producthunt.com/posts/flexmonster-desktop&lt;/a&gt;&lt;br&gt;
So we would greatly appreciate your feedback on the app and support on the platform😻.&lt;/p&gt;

&lt;p&gt;If reporting is something you are familiar with - do give it a try!&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>analytics</category>
      <category>javascript</category>
      <category>report</category>
    </item>
  </channel>
</rss>
