Commit 408bbd1c authored by Nikolay Gromov's avatar Nikolay Gromov

Добпилил компоненты диаграмм

parent b1ba9f6e
...@@ -539,6 +539,29 @@ block content ...@@ -539,6 +539,29 @@ block content
+block-lib-code() +block-lib-code()
include:show-code(first-line="//- Pug-файл этого блока:") blocks/pagination/pagination.pug include:show-code(first-line="//- Pug-файл этого блока:") blocks/pagination/pagination.pug
+block-lib('breadcrumbs', 'Хлебные крошки', false)
include:markdown-it(linkify html='true' typographer='true' quotes='«»') blocks/breadcrumbs/readme.md
+breadcrumbs()
+breadcrumbs-item('Главная', '/home')
+breadcrumbs-item('Услуги', '/services')
+breadcrumbs-item('Стриптиз')
+block-lib-code()
include:show-code(first-line="//- Pug-файл этого блока:") blocks/breadcrumbs/breadcrumbs.pug
+block-lib('progress', 'Прогресс', false)
include:markdown-it(linkify html='true' typographer='true' quotes='«»') blocks/progress/readme.md
+progress('30', '30% (без копеек)', 'success')(aria-valuemin='0', aria-valuemax='100')
+progress('10')(style="height:10px")
+block-lib-code()
include:show-code(first-line="//- Pug-файл этого блока:") blocks/progress/progress.pug
+block-lib('pie-chart', 'Круговые и секторные диаграммы', false)
include:markdown-it(linkify html='true' typographer='true' quotes='«»') blocks/pie-chart/readme.md
+pie-chart('30')
+pie-chart('64')(data-size="120" data-border="59.9")
+block-lib-code()
include:show-code(first-line="//- Pug-файл этого блока:") blocks/pie-chart/pie-chart.pug
.burger.blocks-library__menu-toggler(data-toggle="off-canvas") .burger.blocks-library__menu-toggler(data-toggle="off-canvas")
......
<!--DEV
Для использования этого файла как шаблона:
@ @include('blocks/breadcrumbs/breadcrumbs.html')
(Нужно убрать пробел между символами @)
Подробнее: https://www.npmjs.com/package/gulp-file-include
<ul class="breadcrumbs">
<li class="breadcrumbs__item"><a href="" class="breadcrumbs__link">Главная</a></li>
<li class="breadcrumbs__item"><a href="" class="breadcrumbs__link">Каталог</a></li>
<li class="breadcrumbs__item"><a href="" class="breadcrumbs__link">Маркеры</a></li>
</ul>
-->
//- Все примеси в этом файле должны начинаться c имени блока (breadcrumbs)
mixin breadcrumbs(mods)
//- Принимает:
//- mods {string} - список модификаторов
//- Вызов:
+breadcrumbs()
+breadcrumbs-item('Главная', '/home')
+breadcrumbs-item('Услуги', '/services')
+breadcrumbs-item('Стриптиз')
-
// список модификаторов
var allMods = '';
if(typeof(mods) !== 'undefined' && mods) {
var modsList = mods.split(',');
for (var i = 0; i < modsList.length; i++) {
allMods = allMods + ' breadcrumbs--' + modsList[i].trim();
}
}
ul.breadcrumbs(class=allMods, aria-label="Breadcrumb", role="navigation")&attributes(attributes)
block
mixin breadcrumbs-item(text, href, mods)
//- Принимает:
//- text {string} - содержимое пункта
//- href {string} - ссылка этого пункта (если пустая, то это не ссылка, а span)
//- mods {string} - список модификаторов
-
// список модификаторов
var allMods = '';
if(typeof(mods) !== 'undefined' && mods) {
var modsList = mods.split(',');
for (var i = 0; i < modsList.length; i++) {
allMods = allMods + ' breadcrumbs--' + modsList[i].trim();
}
}
li.breadcrumbs__item(class=allMods)&attributes(attributes)
if(typeof(href) !== 'undefined' && href)
a(href=href)!= text
else
span!= text
...@@ -14,6 +14,18 @@ $text-color: hsl(0, 0%, 10%) !default; ...@@ -14,6 +14,18 @@ $text-color: hsl(0, 0%, 10%) !default;
padding: 0; padding: 0;
list-style: none; list-style: none;
margin: $line-height 0; margin: $line-height 0;
color: $text-color;
a {
color: $text-color;
text-decoration: none;
&:hover,
&:focus {
color: $text-color;
text-decoration: none;
}
}
&__item { &__item {
display: inline-block; display: inline-block;
...@@ -27,15 +39,4 @@ $text-color: hsl(0, 0%, 10%) !default; ...@@ -27,15 +39,4 @@ $text-color: hsl(0, 0%, 10%) !default;
color: $gray; color: $gray;
} }
} }
&__link {
color: $text-color;
text-decoration: none;
&:hover,
&:focus {
color: $text-color;
text-decoration: none;
}
}
} }
...@@ -28,20 +28,27 @@ mixin pagination(mods) ...@@ -28,20 +28,27 @@ mixin pagination(mods)
mixin pagination-item(text, href, active) mixin pagination-item(text, href, active, mods)
//- Принимает: //- Принимает:
//- text {string} - содержимое пункта //- text {string} - содержимое пункта
//- href {string} - ссылка этого пункта (если пустая, то это не ссылка, а span) //- href {string} - ссылка этого пункта (если пустая, то это не ссылка, а span)
//- active {bool} - флаг «это активный пункт» //- active {bool} - флаг «это активный пункт»
//- mods {string} - список модификаторов
- -
// список модификаторов // список модификаторов
var activeMod = ''; var allMods = '';
if(typeof(mods) !== 'undefined' && mods) {
var modsList = mods.split(',');
for (var i = 0; i < modsList.length; i++) {
allMods = allMods + ' pagination--' + modsList[i].trim();
}
}
if(typeof(active) !== 'undefined' && active) { if(typeof(active) !== 'undefined' && active) {
activeMod = ' pagination--active'; allMods = allMods + ' pagination--active';
} }
if(typeof(href) !== 'undefined' && href) if(typeof(href) !== 'undefined' && href)
a.pagination__item(class=activeMod, href=href)&attributes(attributes)!= text a.pagination__item(class=allMods, href=href)&attributes(attributes)!= text
else else
span.pagination__item(class=activeMod)&attributes(attributes)!= text span.pagination__item(class=allMods)&attributes(attributes)!= text
<!--DEV
Для использования этого файла как шаблона:
@ @include('blocks/pie-chart/pie-chart.html')
(Нужно убрать пробел между символами @)
Подробнее: https://www.npmjs.com/package/gulp-file-include
<div class="pie-chart">20%</div>
-->
...@@ -8,11 +8,14 @@ document.addEventListener('DOMContentLoaded', function(){ ...@@ -8,11 +8,14 @@ document.addEventListener('DOMContentLoaded', function(){
var charts = $$('.pie-chart'); var charts = $$('.pie-chart');
var options = {
size: 100,
border: 20,
}
for (var i = 0; i < charts.length; i++) { for (var i = 0; i < charts.length; i++) {
var size = charts[i].getAttribute('data-size'); var size = charts[i].getAttribute('data-size') || options.size;
if(!size) size = 100; var border = charts[i].getAttribute('data-border') || options.border;
var border = charts[i].getAttribute('data-border');
if(!border) border = 20;
var radius = (size / 2) - (border / 2); var radius = (size / 2) - (border / 2);
var fullStroke = 2 * 3.141592 * radius; var fullStroke = 2 * 3.141592 * radius;
var percentText = parseFloat(charts[i].textContent); var percentText = parseFloat(charts[i].textContent);
......
//- Все примеси в этом файле должны начинаться c имени блока (pie-chart)
mixin pie-chart(percent, mods)
//- Принимает:
//- percent {string} - процент заполнения
//- mods {string} - список модификаторов
//- Вызов:
+pie-chart('30', 'success')
+pie-chart('30')(data-size="200" data-border="10")
+pie-chart('99', 'radial')(data-size="120" data-border="59.9")
-
// список модификаторов
var allMods = '';
if(typeof(mods) !== 'undefined' && mods) {
var modsList = mods.split(',');
for (var i = 0; i < modsList.length; i++) {
allMods = allMods + ' pie-chart--' + modsList[i].trim();
}
}
if(typeof(attributes['aria-valuemin']) === 'undefined') {
attributes['aria-valuemin'] = 0;
}
if(typeof(attributes['aria-valuemax']) === 'undefined') {
attributes['aria-valuemax'] = 100;
}
span.pie-chart(role='progressbar', class=allMods, aria-valuenow=percent)&attributes(attributes)= percent + '%'
...@@ -8,12 +8,16 @@ $font-size: 14px !default; ...@@ -8,12 +8,16 @@ $font-size: 14px !default;
$gray-light: hsl(0, 0%, 60%) !default; $gray-light: hsl(0, 0%, 60%) !default;
$gray-lighter: hsl(0, 0%, 80%) !default; $gray-lighter: hsl(0, 0%, 80%) !default;
.js .pie-chart { .pie-chart {
$block-name: &; // #{$block-name}__element $block-name: &; // #{$block-name}__element
.js & {
display: inline-block; display: inline-block;
position: relative; position: relative;
min-width: 100px; // соответствуют ширине по умолчанию (указана в pie-chart.js)
min-height: 100px; // соответствуют ширине по умолчанию (указана в pie-chart.js)
&__svg { &__svg {
display: block; display: block;
...@@ -35,4 +39,5 @@ $gray-lighter: hsl(0, 0%, 80%) !default; ...@@ -35,4 +39,5 @@ $gray-lighter: hsl(0, 0%, 80%) !default;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
}
} }
Внутренняя разметка блока (SVG) создаётся JS-ом на основании `data`-атрибутов (значения по умолчанию прописаны в `pie-chart.js`).
Если нужна секторная диаграмма, нужно указать ширину бордюра как `R - 0.1` — спасибо IE (см. пример в коде примеси).
<!--DEV
Для использования этого файла как шаблона:
@ @include('blocks/progress/progress.html')
(Нужно убрать пробел между символами @)
Подробнее: https://www.npmjs.com/package/gulp-file-include
<div class="progress">
<div class="progress__bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%;">
<span class="progress__bartext">80%</span>
</div>
</div>
-->
//- Все примеси в этом файле должны начинаться c имени блока (progress)
mixin progress(percent, text, mods)
//- Принимает:
//- percent {string} - процент заполнения
//- text {string} - текст на заполненной части (если пуст, текстового узда не будет)
//- mods {string} - список модификаторов
//- Вызов:
+progress('30', '30%', 'success')(aria-valuemin='0', aria-valuemax='100')
+progress('10')(style="height: 10px")
-
// список модификаторов
var allMods = '';
if(typeof(mods) !== 'undefined' && mods) {
var modsList = mods.split(',');
for (var i = 0; i < modsList.length; i++) {
allMods = allMods + ' progress--' + modsList[i].trim();
}
}
.progress(class=allMods)
.progress__bar(role='progressbar', style='width: ' + percent + '%;', aria-valuenow=percent)&attributes(attributes)
if(typeof(text) !== 'undefined' && text)
span.progress__bartext!= text
...@@ -24,8 +24,13 @@ $transition-time: 0.3s !default; ...@@ -24,8 +24,13 @@ $transition-time: 0.3s !default;
&__bar { &__bar {
background-color: $gray-lightest; background-color: $gray-lightest;
border-radius: $border-radius; border-radius: $border-radius;
padding: 0.5em;
max-width: 100%; max-width: 100%;
min-height: 1px;
transition: width $transition-time; transition: width $transition-time;
} }
&__bartext {
display: inline-block;
padding: 0.5em;
}
} }
...@@ -20,9 +20,7 @@ $screen-xxl: 1800px !default; ...@@ -20,9 +20,7 @@ $screen-xxl: 1800px !default;
margin-top: $line-height; margin-top: $line-height;
margin-bottom: $line-height; margin-bottom: $line-height;
border-collapse: collapse; border-collapse: collapse;
border: 0; border: 1px solid $border-color;
border-top: 1px solid $border-color;
border-left: 1px solid $border-color;
width: 100%; width: 100%;
caption { caption {
......
...@@ -23,3 +23,6 @@ include ../blocks/loader/loader.pug ...@@ -23,3 +23,6 @@ include ../blocks/loader/loader.pug
include ../blocks/table/table.pug include ../blocks/table/table.pug
include ../blocks/table-responsive/table-responsive.pug include ../blocks/table-responsive/table-responsive.pug
include ../blocks/pagination/pagination.pug include ../blocks/pagination/pagination.pug
include ../blocks/breadcrumbs/breadcrumbs.pug
include ../blocks/progress/progress.pug
include ../blocks/pie-chart/pie-chart.pug
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment