<?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: Dmitry</title>
    <description>The latest articles on DEV Community by Dmitry (@xshiftx).</description>
    <link>https://dev.to/xshiftx</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%2F108598%2F90f672b3-717d-4aee-90a5-d3d5a675d445.jpeg</url>
      <title>DEV Community: Dmitry</title>
      <link>https://dev.to/xshiftx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xshiftx"/>
    <language>en</language>
    <item>
      <title>Experiment: 100kB limited frontend library RevolveR micro</title>
      <dc:creator>Dmitry</dc:creator>
      <pubDate>Wed, 31 Oct 2018 13:03:33 +0000</pubDate>
      <link>https://dev.to/xshiftx/experiment-100kb-limited-frontend-library-revolver-micro-3pko</link>
      <guid>https://dev.to/xshiftx/experiment-100kb-limited-frontend-library-revolver-micro-3pko</guid>
      <description>&lt;h1&gt;
  
  
  An experiment
&lt;/h1&gt;

&lt;p&gt;For my small &lt;a href="https://dev.to/xshiftx/writing-revolver-cms-just-for-fun-5efo"&gt;CMS RevolveR&lt;/a&gt; I was need a frontend library thats can do Fetch requests and animate 3D CSS with modules for HTML markup editor and HTML form beautifer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jeOIX6C2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nw3k6i6p5k5vlc4sprea.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jeOIX6C2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nw3k6i6p5k5vlc4sprea.PNG" alt="RevolveR frontend interface improvements"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So. I took the mountain of my old snippets and rewrote everything in the same style on ES7.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Revolver
&lt;/h1&gt;

&lt;p&gt;Front-End JavaScript library Revolver micro -- is a simple, powerfull and lightweight(only 95Kb of uncompressed code) solution with no dependencies to work with DOM elements and their properties including a lot of modules to make posible using tabs, slider, modal windows, fetch requests and other things. &lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting a script
&lt;/h2&gt;

&lt;p&gt;Revolver core includes an auto initialization modules. To run library under the document you'll need to connect bootstrap and place a code in #revolver script tag. Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;script src="./app/revolver.js?prod=1.0.8" async id="revolver"&amp;gt;&lt;br&gt;
 // charging weapons with namespace&lt;br&gt;
 const revolver = new Revolver('$');&lt;br&gt;
 // now you cant shout with $&lt;br&gt;
 let element = $.dom('.someclass:first-child');&lt;br&gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can use any namespace for better code style.&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS mobile schema
&lt;/h2&gt;

&lt;p&gt;Revolver automatically connect a bootstrap css from library and listen window size changes to switch it into mobile mode.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;mobile.css: schema for screens less then 320px to 1920px and mobile browser UA;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Variables
&lt;/h2&gt;

&lt;p&gt;library keeps some variables in self namespace:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.isM()&lt;/code&gt; - if mobile browser this code returns true.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.sizes[]&lt;/code&gt; - static window sizes contains [width,height].&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.currentSizes[]&lt;/code&gt; - actual document sizes automatically refreshed in time contains [width,height].&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.curxy&lt;/code&gt; - actual mouse position with x and y statements.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.curOffset&lt;/code&gt; - actual scroll position in offsets x and y.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.startIndex&lt;/code&gt; - first opened page title(used only for correct work of location module)&lt;/p&gt;

&lt;h2&gt;
  
  
  Location API
&lt;/h2&gt;

&lt;p&gt;Revolver provides a correct work with browsers history API using location module. For example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.location('Page Title','http://somedomain.com/index.html', function(){console.log(this)})&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can write you own fetch router using this module to correct switching of page title and url. This module not mean that document will be reloaded it's only provide interface changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Form styler
&lt;/h2&gt;

&lt;p&gt;This module decorates the all defined in core form elements such as selects or labels.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.formStyler();&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Markup editor for textareas
&lt;/h2&gt;

&lt;p&gt;This is a simple HTML markup editor thats should be atomaticaly switched to all textareas in forms uncluding basic markup buttons.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.markupEditor();&lt;/code&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  DOM engine
&lt;/h2&gt;

&lt;p&gt;There are few methods to do something with DOM elements.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom('selector')&lt;/code&gt; returns a stack of suitable HTML elements. Avalible simple selectors like &lt;code&gt;#obj .class tag&lt;/code&gt; and prefixes to finding last and first elements in document - &lt;code&gt;'$.dom('#tabs .tabactive code:first-child')&lt;/code&gt; or &lt;code&gt;$.dom('body p:last-child, ul li:first-child')&lt;/code&gt;; DOM engine supports a multiple selectors.&lt;/p&gt;

&lt;p&gt;To creating new DOM element you can use 'new' instruction with syntax in example: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom('dfn',"new|before|footer:first-child", { html: '&amp;lt;a style="color:#b06400" href="#"&amp;gt;version 0.5 alpha&amp;lt;/a&amp;gt;', attr: { style: "color:#b06400; text-align:center; display:block" }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To deleting an element you can use 'del' instruction: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom('.prost, div', "del");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To instert html or text data into element you can use:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.insert($.dom('h1'),'&amp;lt;b&amp;gt;test&amp;lt;/b&amp;gt;');&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To wrap elements:&lt;br&gt;
&lt;code&gt;$.dom('span', 'wrap', 'section')&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To unwrap elements:&lt;br&gt;
&lt;code&gt;$.dom('section', 'unwrap',)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To replace:&lt;br&gt;
&lt;code&gt;$.dom('span','replace','&amp;lt;div&amp;gt;hey&amp;lt;/div&amp;gt;')&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  DOM Styles and attributes
&lt;/h3&gt;

&lt;p&gt;Revolver can set attributes of html elements or manipulate with style atribute. In example to setting, getting or deleting attributes you'll need to use next syntax:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.attr('h1', {'data-test': 'some value'});&lt;/code&gt; - set attribute or attributes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.attr('h1', {'data-test': null});&lt;/code&gt; - delete the attribute.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.attr('h1', 'data-test, style, etc');&lt;/code&gt; - get attributes values.&lt;/p&gt;

&lt;p&gt;To styling a CSS you can use: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom("html","style",['background:rgba(233,246,255,.8)','color:#111']);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;There are some methods for manipulate with Class attribute:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.addClass('#some','class-test');&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.removeClass('#some', 'class-test');&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.hasClass('#some', 'class1 class2 class3'); //returns true if all classes defined for element #some&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.toggleClass('#some', 'class-test');&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Animations
&lt;/h2&gt;

&lt;p&gt;Animation engine allows to animate some of CSS properties like width, height, colors, margins, padding, font-sizes and CSS3 transforms like rotate, skewX, skewY, translateX, translateY and scale:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom("#mainContents","animate",['border-radius:25px 0px:100:pulse']);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom("a:first-child", "animate", ['transform:rotate(360deg) scale(0.7):2000']);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.dom("h1:first-child", "animate", ['color:brown:3000:pulse'])&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Every propertie have a different duration time and different easings. &lt;/p&gt;

&lt;p&gt;Availible effects: easeIn, easeOut, easeOutQuad, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint, elastic, easeInElastic, easeOutElastic, easeInOutElastic, easeInSin, easeOutSin, easeInOutSin, easeInCirc, easeOutCirc, easeInOutCirc, easeInQuad, easeInExpo, easeOutExpo, easeInOutExpo, easeOutBounce, bouncePast, bounce, radical, harmony, back, expo, easeOutStrong, easeInBack, easeOutBack, swingTo, swingFrom, spring, blink, pulse, wobble, sinusoidal, flicker, mirror.&lt;/p&gt;

&lt;h3&gt;
  
  
  Show and Hide modules
&lt;/h3&gt;

&lt;p&gt;Ещ showing and hiding elements with height animation Revolver contains functions &lt;code&gt;$.hide()&lt;/code&gt; and &lt;code&gt;$.show()&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.show('#elem', 800);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.hide('#elem', 1300);&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tabs module
&lt;/h2&gt;

&lt;p&gt;To styling contents like tabs: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.tabs('#tabs li', '#tabs div', function() { });&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rotate module
&lt;/h2&gt;

&lt;p&gt;Rotate module is a simple slider.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.rotate('#presentation p', function(){}, 1500);&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modal box API
&lt;/h2&gt;

&lt;p&gt;TO creation a modal windows you can use GrayBox API.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.modal('Get FE Revolver Micro','&amp;lt;a target="_blank" style="color:#b06400" href="./app/Revolver.js"&amp;gt;version 1.5&amp;lt;/a&amp;gt;',[500,200]);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Where first argument is title, second argument is content and third argument contain array of sizes [width,height].&lt;/p&gt;

&lt;h2&gt;
  
  
  Hint API
&lt;/h2&gt;

&lt;p&gt;Intended to showing a hints thats contains text from setted attribute. Example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.hint('a', 'data-title');&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FETCH module
&lt;/h2&gt;

&lt;p&gt;Fetch module allow you application to receive content asynchronously with different methods and types of сontent.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.event('input[type="submit"]', 'click', function(e) {&lt;br&gt;
    e.preventDefault();&lt;br&gt;
    let data = new FormData();&lt;br&gt;
    let form = $.dom('#test input[type="text"]');&lt;br&gt;
    for(var j in form) {&lt;br&gt;
        data.append( form[j].name, form[j].value );&lt;br&gt;
    } &lt;br&gt;
    $.fetch('http://test:88/post.php','POST','text', data, function(){&lt;br&gt;
        $.log(this)&lt;br&gt;
    });&lt;br&gt;
});&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetch submit module
&lt;/h2&gt;

&lt;p&gt;This module alows you to submit form data automaticaly using fetch&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.fetchSubmit('form', 'text', function(){&lt;br&gt;
$.modal('Form API test :: sended variables', $.findHTMLByTag('pre', this)[0].outerHTML, [800, 300]);&lt;br&gt;
});&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Avalible methods POST and GET. &lt;br&gt;
Avalible content types text, json.&lt;/p&gt;

&lt;p&gt;Third argument contains POST or GET query variables.&lt;/p&gt;

&lt;h2&gt;
  
  
  findHTMLByTag module
&lt;/h2&gt;

&lt;p&gt;This module allow you to find some HTML content inside some HTML content by using tag or CSS selector.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.findHTMLByTag('#root', rootHTMLElement)&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage module
&lt;/h2&gt;

&lt;p&gt;Storage module provides a simple API to use local storage.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.storage(['Revolver={"js library": "1.0.8"}'],'set');&lt;/code&gt; - set a values.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.storage('data-test', 'get');&lt;/code&gt; - get value.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.storage(['data','testing'], 'del');&lt;/code&gt;- delete values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cookie module
&lt;/h2&gt;

&lt;p&gt;Storage module provides a simple API to use cookies.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.cookie(['Revolver={"js library": "1.0.8"}'],'set');&lt;/code&gt; - set a values.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.cookie('data-test', 'get');&lt;/code&gt; - get value.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.cookie(['data','testing'], 'del');&lt;/code&gt;- delete values.&lt;/p&gt;

&lt;h2&gt;
  
  
  ExternalJS
&lt;/h2&gt;

&lt;p&gt;To connecting external JS file in async mode you can use next API:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.externalJS('http://domain.com');&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scroll
&lt;/h2&gt;

&lt;p&gt;You can use smooth scroll animation to a targen element using api&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.scroll() // sets position to top of page with smooth and opacity animation&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.scroll('#target_element') // set screen position to target element and animate opacity of target&lt;/code&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Events API
&lt;/h2&gt;

&lt;p&gt;Events API supports all registered events for add event listener. An example of click event adding:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.click('aside h3', 'click', function(e){ e.preventDefault(); });&lt;/code&gt; - click event;&lt;/p&gt;

&lt;h2&gt;
  
  
  FireEvents
&lt;/h2&gt;

&lt;p&gt;Events API gives you to simulate events like click or submit using API:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$.fireEvent('aside h3', 'click', function(e){ e.preventDefault() })&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpers
&lt;/h2&gt;

&lt;p&gt;Revolver core contains a lot of helpers to improve and simplify development of your own modules and API. You can see it in plain code.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion and source
&lt;/h1&gt;

&lt;p&gt;So. As an experiment, I was able to tamp everything down with 95kB of code and even a bit more from jQuery and get rid of the UI dependency on the bootstrap.&lt;/p&gt;

&lt;p&gt;Sources: &lt;a href="https://github.com/xShiftx/RevolveR"&gt;RevolveR on GitHub&lt;/a&gt;.&lt;br&gt;
Project site: &lt;a href="https://cyberx.pro/"&gt;CyberX&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>es7</category>
    </item>
    <item>
      <title>Writing RevolveR CMS just for fun</title>
      <dc:creator>Dmitry</dc:creator>
      <pubDate>Thu, 18 Oct 2018 15:36:49 +0000</pubDate>
      <link>https://dev.to/xshiftx/writing-revolver-cms-just-for-fun-5efo</link>
      <guid>https://dev.to/xshiftx/writing-revolver-cms-just-for-fun-5efo</guid>
      <description>&lt;p&gt;RevolveR CMS is a fast, simple and powerfull contents management system based on PHP 7 language with MySQL DataBase used file cache intended to create news sites, blogs and forums writed just for fun at 6 month of coding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hRdNEG4P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/36mmj8l34s3x7jgi6jvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hRdNEG4P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/36mmj8l34s3x7jgi6jvn.png" alt="RevolveR CMS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;RevolveR CMS is secure and mobile friendly system with perfect SEO compability. It have full dynamic load pages support, Google AMP and Yandex Turbo pages solutions.&lt;/p&gt;

&lt;p&gt;In a case I don't like to use any third party components and write all code self( including Data Base Wrapper X and frontend library &lt;a href="https://github.com/xShiftx/RevolveR"&gt;Revolver used ES7 solutions&lt;/a&gt; so this CMS not intended to use with browsers older than IE Edge).&lt;/p&gt;

&lt;p&gt;I was pushed into implementation by slowly Drupal 8 realisation with very hard and dificulty simphony sources. I want to use CMS fast and simple and want to be it payments free for me and other peoples.&lt;/p&gt;

&lt;p&gt;Few days I'am looking at WP and other CMSes and lets write my own condition. That's what happened:&lt;/p&gt;

&lt;p&gt;1). No dependencies and server requirements(minimal PHP modules requirements).&lt;/p&gt;

&lt;p&gt;2). Speedy, lightweight, simple.&lt;/p&gt;

&lt;p&gt;3). Self database engine with structures based queries.&lt;/p&gt;

&lt;p&gt;4). Self frontend library RevolveR coded in ES 7 JavaScript.&lt;/p&gt;

&lt;p&gt;5). Full fetch support of dynamic forms and interfaces.&lt;/p&gt;

&lt;p&gt;6). Support of user accounts.&lt;/p&gt;

&lt;p&gt;7). Support user points.&lt;/p&gt;

&lt;p&gt;8). Full humanity, secure and powerful router(good links for contents).&lt;/p&gt;

&lt;p&gt;9). Self developed very simple captcha secure front-end crypted.&lt;/p&gt;

&lt;p&gt;10). Support of contents creating with range of categories.&lt;/p&gt;

&lt;p&gt;11.) Commenting support.&lt;/p&gt;

&lt;p&gt;12). Uploads support.&lt;/p&gt;

&lt;p&gt;13). SEO friendly.&lt;/p&gt;

&lt;p&gt;14). Self contents editor.&lt;/p&gt;

&lt;p&gt;15). Friendly installer.&lt;/p&gt;

&lt;p&gt;16). Private messages support.&lt;/p&gt;

&lt;p&gt;17). Email notifications support.&lt;/p&gt;

&lt;p&gt;18). Twilio SMS notify support&lt;/p&gt;

&lt;p&gt;19). Simple forum.&lt;/p&gt;

&lt;p&gt;20). Roles support.&lt;/p&gt;

&lt;p&gt;21). Internal SEO statistics and tics counters with detailed information about what pages users like more.&lt;/p&gt;

&lt;p&gt;Performance is a strong side of RevolveR CMS:&lt;/p&gt;

&lt;p&gt;1). 0.5 Mb memory needed with clean website;&lt;br&gt;
2). only one query to DB needed to render cached site;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pH3N_6M5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/81sofsyxyfktc2ujxccw.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pH3N_6M5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/81sofsyxyfktc2ujxccw.PNG" alt="RevolveR CMS preferences"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a winter time I plane to do some reconstruction of core and add an ecommerce shop module.&lt;/p&gt;

&lt;p&gt;Requirements: any Linux Apache, PHP 7, MySQL webhosting. I am not recomend to install it to Windows hosts because all developments was done under Mac OS + MAMP.&lt;/p&gt;

&lt;p&gt;All critics are welcome. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/xShiftx/RevolveR_CMS"&gt;Sources github&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cyberx.pro"&gt;Devel website and demo&lt;/a&gt; &lt;/p&gt;

</description>
      <category>php7</category>
      <category>css3</category>
      <category>es7</category>
      <category>html</category>
    </item>
  </channel>
</rss>
