@andreyshpigunov/x 0.3.89 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yml +1 -1
- package/README.md +1 -1
- package/assets/css/app.css +1 -0
- package/assets/img/github-mark-white.png +0 -0
- package/assets/img/github-mark.png +0 -0
- package/assets/js/app.js +1 -0
- package/cheatsheet.html +427 -0
- package/dist/x.css +1 -1
- package/dist/x.js +1 -3
- package/index.html +34 -38
- package/package.json +52 -47
- package/postcss.config.cjs +0 -2
- package/src/components/x/animate.js +39 -45
- package/src/components/x/appear.js +19 -26
- package/src/components/x/autocomplete.js +22 -10
- package/src/components/x/buttons.css +38 -16
- package/src/components/x/colors.css +47 -41
- package/src/components/x/debug.css +2 -2
- package/src/components/x/device.js +39 -33
- package/src/components/x/dropdown.css +2 -3
- package/src/components/x/dropdown.js +16 -9
- package/src/components/x/flex.css +146 -109
- package/src/components/x/flow.css +12 -6
- package/src/components/x/form.css +3 -3
- package/src/components/x/form.js +12 -9
- package/src/components/x/grid.css +78 -42
- package/src/components/x/helpers.css +601 -438
- package/src/components/x/hover.js +20 -9
- package/src/components/x/icons.css +12 -12
- package/src/components/x/lazyload.js +17 -8
- package/src/components/x/lib.js +15 -1
- package/src/components/x/links.css +2 -6
- package/src/components/x/loadmore.js +17 -5
- package/src/components/x/modal.css +4 -22
- package/src/components/x/modal.js +14 -5
- package/src/components/x/reset.css +1 -15
- package/src/components/x/scroll.css +4 -9
- package/src/components/x/scroll.js +14 -1
- package/src/components/x/sheets.css +0 -3
- package/src/components/x/sheets.js +157 -37
- package/src/components/x/slider.css +10 -1
- package/src/components/x/slider.js +15 -0
- package/src/components/x/space.css +22 -2
- package/src/components/x/sticky.css +10 -15
- package/src/components/x/sticky.js +21 -4
- package/src/components/x/typo.css +14 -40
- package/src/css/app.css +92 -93
- package/src/css/x.css +191 -213
- package/src/js/app.js +9 -9
- package/src/js/x.js +37 -41
- package/assets/github-mark-white.png +0 -0
- package/assets/github-mark.png +0 -0
- package/assets/logo-inverse.png +0 -0
- package/babel.config.cjs +0 -4
- package/dist/app.css +0 -1
- package/dist/app.js +0 -1
- package/dist/index.html +0 -2182
- package/dist/logo.png +0 -0
- package/jest.config.mjs +0 -7
- package/jsdoc.json +0 -11
- package/vite.config.js +0 -31
- /package/assets/{alpha.png → img/alpha.png} +0 -0
- /package/assets/{apple-touch-icon.png → img/apple-touch-icon.png} +0 -0
- /package/assets/{logo.png → img/logo.png} +0 -0
- /package/assets/{logo.svg → img/logo.svg} +0 -0
package/dist/index.html
DELETED
|
@@ -1,2182 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en" class="noTransitions antialiased">
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="utf-8">
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
-
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
8
|
-
<title>X — Javascript library with interesting features</title>
|
|
9
|
-
<meta name="description" content="Small and simple Javascript library with interesting features">
|
|
10
|
-
<link rel="shortcut icon" href="https://andreyshpigunov.github.io/x/favicon.ico">
|
|
11
|
-
<link rel="icon" href="https://andreyshpigunov.github.io/x/favicon.svg" type="image/svg+xml">
|
|
12
|
-
<link rel="apple-touch-icon" href="https://andreyshpigunov.github.io/x/assets/apple-touch-icon.png">
|
|
13
|
-
<script type="module" crossorigin src="./app.js"></script>
|
|
14
|
-
<link rel="modulepreload" crossorigin href="./x.js">
|
|
15
|
-
<link rel="stylesheet" crossorigin href="./app.css">
|
|
16
|
-
</head>
|
|
17
|
-
|
|
18
|
-
<body id="top" x-animate='{
|
|
19
|
-
"start": "0px",
|
|
20
|
-
"end": "-50vh",
|
|
21
|
-
"functionName": "headerAnimation"
|
|
22
|
-
}'>
|
|
23
|
-
<header class="header flex aic sticky px5 m:px6 l:px8 unselectable">
|
|
24
|
-
<div class="header-version nowrap">0.3.88</div>
|
|
25
|
-
<div class="header-logo mxa">
|
|
26
|
-
<a role="button" x-scrollto="#top">
|
|
27
|
-
<img src="./logo.png" alt="x" />
|
|
28
|
-
</a>
|
|
29
|
-
</div>
|
|
30
|
-
<div class="header-github">
|
|
31
|
-
<a href="https://github.com/andreyshpigunov/x" target="_blank"></a>
|
|
32
|
-
</div>
|
|
33
|
-
</header>
|
|
34
|
-
|
|
35
|
-
<div class="element3" x-animate='{
|
|
36
|
-
"start": "50vh",
|
|
37
|
-
"end": "-100px",
|
|
38
|
-
"functionName": "element3",
|
|
39
|
-
"class": "active",
|
|
40
|
-
"classRemove": true
|
|
41
|
-
}'>
|
|
42
|
-
<div class="element3-figure"></div>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
<section class="section-header mt8 px5 m:px6 l:px8" x-appear>
|
|
46
|
-
<h1 class="mxa ac max800">Small and simple CSS & JavaScript library with interesting features</h1>
|
|
47
|
-
|
|
48
|
-
<div class="flex">
|
|
49
|
-
<div class="mt4">
|
|
50
|
-
<button x-dropdown-open class="button button--dropdown" tabindex="1">Menu left</button>
|
|
51
|
-
<ul x-dropdown>
|
|
52
|
-
<li><a href="/admin/settings/profile/">Профильное образование в педагогическом</a></li>
|
|
53
|
-
<li><a href="/logout/">Выйти</a></li>
|
|
54
|
-
<li class="divider"></li>
|
|
55
|
-
<li><span class="op4">Version 0.5</span></li>
|
|
56
|
-
</ul>
|
|
57
|
-
</div>
|
|
58
|
-
<div class="mt4 mxa">
|
|
59
|
-
<input x-dropdown-open type="text" tabindex="2"/>
|
|
60
|
-
<ul x-dropdown id="test">
|
|
61
|
-
<li><a onclick="alert('It works!')">Test it!</a></li>
|
|
62
|
-
<li><a onclick="alert('It works!')">Test it!</a></li>
|
|
63
|
-
<li><a onclick="alert('It works!')">Test it!</a></li>
|
|
64
|
-
<li><a onclick="alert('It works!')">Test it!</a></li>
|
|
65
|
-
<li><span class="op4">Начните вводить название города</span></li>
|
|
66
|
-
<li><span class="op4">Загрузка...</span></li>
|
|
67
|
-
</ul>
|
|
68
|
-
</div>
|
|
69
|
-
<div class="mt4">
|
|
70
|
-
<button x-dropdown-open class="button button--dropdown" tabindex="3">Menu right</button>
|
|
71
|
-
<ul x-dropdown>
|
|
72
|
-
<li><a href="/admin/settings/profile/">Профиль</a></li>
|
|
73
|
-
<li><a href="/logout/">Выйти</a></li>
|
|
74
|
-
<li class="divider"></li>
|
|
75
|
-
<li><span class="op4">Version 0.5</span></li>
|
|
76
|
-
</ul>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</section>
|
|
80
|
-
|
|
81
|
-
<div class="element2" x-animate='{
|
|
82
|
-
"start": "70vh",
|
|
83
|
-
"end": "-100px",
|
|
84
|
-
"functionName": "element1",
|
|
85
|
-
"class": "active",
|
|
86
|
-
"classRemove": true
|
|
87
|
-
}'>
|
|
88
|
-
<div class="element2-figure"></div>
|
|
89
|
-
</div>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
<section class="section-header mt6 px5 m:px6 l:px8">
|
|
93
|
-
<h2 class="ac">JS plugins</h2>
|
|
94
|
-
</section>
|
|
95
|
-
|
|
96
|
-
<section class="section-content mt7 px5 m:px6 l:px8">
|
|
97
|
-
<div class="container">
|
|
98
|
-
<div class="grid g1 m:g2 l:g3 xl:g4 gap6">
|
|
99
|
-
<div class="c1">
|
|
100
|
-
<h3><a class="link" x-modal-open="modalAnimate">Animate</a></h3>
|
|
101
|
-
<div x-animate='{
|
|
102
|
-
"trigger": ".jsAnimateExample",
|
|
103
|
-
"start": "80vh",
|
|
104
|
-
"end": "20vh",
|
|
105
|
-
"functionName": "animateExample",
|
|
106
|
-
"class": "active",
|
|
107
|
-
"classRemove": true
|
|
108
|
-
}'></div>
|
|
109
|
-
<div class="jsAnimateExample breakWord"></div>
|
|
110
|
-
<progress id="progress" value="0" max="1"></progress>
|
|
111
|
-
<canvas class="block" id="canvas" width="200" height="200"></canvas>
|
|
112
|
-
|
|
113
|
-
<script>
|
|
114
|
-
let canvas = document.querySelector('#canvas');
|
|
115
|
-
let context = canvas.getContext('2d');
|
|
116
|
-
let centerx = context.canvas.width / 2;
|
|
117
|
-
let centery = context.canvas.height / 2;
|
|
118
|
-
|
|
119
|
-
function animateExample(params) {
|
|
120
|
-
let el = document.querySelector('.jsAnimateExample');
|
|
121
|
-
let progress = document.querySelector('#progress');
|
|
122
|
-
el.innerHTML = 'Progress: ' + params.progress + ' (' + Math.round(params.progress * 100) + '%)';
|
|
123
|
-
progress.value = params.progress;
|
|
124
|
-
|
|
125
|
-
let a = 2;
|
|
126
|
-
let b = 2;
|
|
127
|
-
let deg = params.progress * 360;
|
|
128
|
-
|
|
129
|
-
context.clearRect(0, 0, 200, 200);
|
|
130
|
-
context.moveTo(centerx, centery);
|
|
131
|
-
context.beginPath();
|
|
132
|
-
for (i = 0; i < deg; i++) {
|
|
133
|
-
let angle = 0.1 * i;
|
|
134
|
-
let x = centerx + (a + b * angle) * Math.cos(angle);
|
|
135
|
-
let y = centery + (a + b * angle) * Math.sin(angle);
|
|
136
|
-
context.lineTo(x, y);
|
|
137
|
-
}
|
|
138
|
-
context.strokeStyle = '#aaa';
|
|
139
|
-
context.stroke();
|
|
140
|
-
}
|
|
141
|
-
</script>
|
|
142
|
-
</div>
|
|
143
|
-
|
|
144
|
-
<div class="c1">
|
|
145
|
-
<h3><a class="link" x-modal-open="modalAppear">Appear</a></h3>
|
|
146
|
-
<style>.exampleAppear1,.exampleAppear2{opacity:0;will-change:opacity;transition:opacity 1s ease-out .4s}.exampleAppear2{transition-delay:1s}.exampleAppear1.appeared,.exampleAppear2.visible{opacity:1;background:var(--color-grey)}</style>
|
|
147
|
-
<div class="exampleAppear1 flex jcc py5 r3" x-appear>Appeared</div>
|
|
148
|
-
<div class="exampleAppear2 flex jcc py5 mt2 r3" x-appear>Visible</div>
|
|
149
|
-
</div>
|
|
150
|
-
|
|
151
|
-
<div class="c1">
|
|
152
|
-
<h3><a class="link" x-modal-open="modalDevice">Device</a></h3>
|
|
153
|
-
<div class="jsDeviceExample breakWord"></div>
|
|
154
|
-
|
|
155
|
-
<script>
|
|
156
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
157
|
-
if (x.device) {
|
|
158
|
-
|
|
159
|
-
function renderDevice() {
|
|
160
|
-
setTimeout(() => {
|
|
161
|
-
let content = '';
|
|
162
|
-
Object.keys(x.device)
|
|
163
|
-
.filter(key => !(typeof key === 'string' && key.charAt(0) === '_'))
|
|
164
|
-
.forEach(key => {
|
|
165
|
-
let val = x.device[key];
|
|
166
|
-
if (typeof val === 'object') {
|
|
167
|
-
val = JSON.stringify(val);
|
|
168
|
-
}
|
|
169
|
-
content += key + ': ' + val + '<br>'
|
|
170
|
-
})
|
|
171
|
-
x.lib.render('.jsDeviceExample', content)
|
|
172
|
-
}, 200)
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
renderDevice(x.device);
|
|
176
|
-
|
|
177
|
-
const debouncedRenderDevice = x.lib.debounce(renderDevice, 200);
|
|
178
|
-
window.addEventListener('resize', debouncedRenderDevice)
|
|
179
|
-
}
|
|
180
|
-
})
|
|
181
|
-
|
|
182
|
-
</script>
|
|
183
|
-
</div>
|
|
184
|
-
|
|
185
|
-
<div class="c1">
|
|
186
|
-
<h3><a class="link" x-modal-open="modalForm">Form</a></h3>
|
|
187
|
-
<div>Form fields binding.</div>
|
|
188
|
-
<div class="flex aic gap2 my2">
|
|
189
|
-
<input class="max160" type="text" name="exampleText" placeholder="Type something" />
|
|
190
|
-
<span class="jsExampleTextValue m2">...</span>
|
|
191
|
-
</div>
|
|
192
|
-
<div>Simple calculator</div>
|
|
193
|
-
<div class="my2">
|
|
194
|
-
<input class="max40 ac" name="exampleVal1" type="text" value="2" maxlength="1" pattern="[0-9]{1}" /> +
|
|
195
|
-
<input class="max40 ac" name="exampleVal2" type="text" value="2" maxlength="1" pattern="[0-9]{1}" /> =
|
|
196
|
-
<input class="max40 ac" name="exampleSum" type="text" pattern="[0-9]{1}" readonly />
|
|
197
|
-
</div>
|
|
198
|
-
<div>Custom logic</div>
|
|
199
|
-
<div class="my2">
|
|
200
|
-
<select class="max80" name="exampleSelect">
|
|
201
|
-
<option value="1">One</option>
|
|
202
|
-
<option value="2">Two</option>
|
|
203
|
-
<option value="3">Three</option>
|
|
204
|
-
</select> →
|
|
205
|
-
<input class="max60" type="text" name="exampleSelectValue" />
|
|
206
|
-
</div>
|
|
207
|
-
<div class="flex aic gap2">
|
|
208
|
-
<label><input id="radio1" type="radio" name="exampleSelectRadio" value="1" /> 1</label>
|
|
209
|
-
<label><input id="radio2" type="radio" name="exampleSelectRadio" value="2" /> 2</label>
|
|
210
|
-
<label><input id="radio3" type="radio" name="exampleSelectRadio" value="3" /> 3</label>
|
|
211
|
-
</div>
|
|
212
|
-
|
|
213
|
-
<script>
|
|
214
|
-
document.addEventListener('DOMContentLoaded', function() {
|
|
215
|
-
x.form.onUpdate('[name=exampleText]', (el) => {
|
|
216
|
-
!el.value ? value = '...' : value = el.value;
|
|
217
|
-
x.lib.render('.jsExampleTextValue', value);
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
x.form.onUpdate('[name=exampleSelect]', (el) => {
|
|
221
|
-
qs('[name=exampleSelectValue]').value = el.value;
|
|
222
|
-
qs('#radio' + el.value).checked = true;
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
x.form.onUpdate('[name=exampleSelectValue]', (el) => {
|
|
226
|
-
var val = ['', '1', '2', '3'].includes(el.value) ? el.value : 1;
|
|
227
|
-
el.value = val;
|
|
228
|
-
qs('[name=exampleSelect]').value = val;
|
|
229
|
-
// Reset radio buttons
|
|
230
|
-
let radio = qsa('[name=exampleSelectRadio]');
|
|
231
|
-
for (let rad of radio) rad.checked = false;
|
|
232
|
-
// Select radio button
|
|
233
|
-
if (el.value != '') qs('#radio' + el.value).checked = true;
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
let radio = qsa('[name=exampleSelectRadio]');
|
|
237
|
-
for (let rad of radio) {
|
|
238
|
-
x.form.onUpdate(rad, (el) => {
|
|
239
|
-
let val = qs('[name=exampleSelectRadio]:checked').value;
|
|
240
|
-
qs('[name=exampleSelect]').value = el.value;
|
|
241
|
-
qs('[name=exampleSelectValue]').value = el.value;
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
let upd = ['[name=exampleSelect]', '[name=exampleSelectValue]']
|
|
246
|
-
x.form.update(upd);
|
|
247
|
-
|
|
248
|
-
let fields = ['[name=exampleVal1]', '[name=exampleVal2]']
|
|
249
|
-
x.form.onUpdate(fields, calc);
|
|
250
|
-
|
|
251
|
-
function calc() {
|
|
252
|
-
let val1 = qs('[name=exampleVal1]').value || 0;
|
|
253
|
-
let val2 = qs('[name=exampleVal2]').value || 0;
|
|
254
|
-
let sum = parseInt(val1) + parseInt(val2);
|
|
255
|
-
x.form.setValue('[name=exampleSum]', sum);
|
|
256
|
-
}
|
|
257
|
-
calc();
|
|
258
|
-
})
|
|
259
|
-
</script>
|
|
260
|
-
|
|
261
|
-
<div x-modal="modalForm" class="modal--hash" data-window-class="max1000">
|
|
262
|
-
<h2>Form</h2>
|
|
263
|
-
|
|
264
|
-
<p>Useful utilities for forms interactivity.</p>
|
|
265
|
-
<p>They add the ability to set the values of the input, textarea and select fields, triggering events that can then be processed. In this way, you can link form fields with the necessary functions. For example, the dynamic calculation of the amount entered in the fields and others.</p>
|
|
266
|
-
|
|
267
|
-
<h3>Methods</h3>
|
|
268
|
-
<div class="scroll">
|
|
269
|
-
<table class="dataTable">
|
|
270
|
-
<tr>
|
|
271
|
-
<th width="50%">Method</th>
|
|
272
|
-
<th width="50%">Desdription</th>
|
|
273
|
-
</tr>
|
|
274
|
-
<tr>
|
|
275
|
-
<td><code>x.form.setChecked(element, checked = false)</code></td>
|
|
276
|
-
<td>Analog for element.checked = bool</td>
|
|
277
|
-
</tr>
|
|
278
|
-
<tr>
|
|
279
|
-
<td><code>x.form.setValue(element, value)</code></td>
|
|
280
|
-
<td>Analog for element.value = string</td>
|
|
281
|
-
</tr>
|
|
282
|
-
<tr>
|
|
283
|
-
<td><code>x.form.onUpdate([elements], callback)</code></td>
|
|
284
|
-
<td>
|
|
285
|
-
Listen events on elements from array.<br>
|
|
286
|
-
<code>[elements]</code> — selectors array<br>
|
|
287
|
-
<code>callback</code> — callback function
|
|
288
|
-
</td>
|
|
289
|
-
</tr>
|
|
290
|
-
<tr>
|
|
291
|
-
<td><code>x.form.update([elements], callback)</code></td>
|
|
292
|
-
<td>
|
|
293
|
-
Manually dispatch update event for elements from array.<br>
|
|
294
|
-
<code>[elements]</code> — selectors array<br>
|
|
295
|
-
<code>callback</code> — callback function
|
|
296
|
-
</td>
|
|
297
|
-
</tr>
|
|
298
|
-
</table>
|
|
299
|
-
</div>
|
|
300
|
-
</div>
|
|
301
|
-
</div>
|
|
302
|
-
|
|
303
|
-
<div class="c1">
|
|
304
|
-
<h3><a class="link" x-modal-open="modalHover">Hover</a></h3>
|
|
305
|
-
<div>
|
|
306
|
-
<a href="#1" onclick="return false" x-hover>Link</a>
|
|
307
|
-
<a href="#1" onclick="return false" x-hover>Link</a>
|
|
308
|
-
<a href="#1" onclick="return false" x-hover>Link</a>
|
|
309
|
-
...
|
|
310
|
-
<a href="#1" onclick="return false" x-hover>Link</a>
|
|
311
|
-
</div>
|
|
312
|
-
<div class="mt2">
|
|
313
|
-
<a href="#2" onclick="return false" x-hover>
|
|
314
|
-
<img class="r3" src="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0476.jpg" width="800" height="600" />
|
|
315
|
-
</a>
|
|
316
|
-
<a href="#2" onclick="return false" x-hover>Photo link</a>
|
|
317
|
-
</div>
|
|
318
|
-
</div>
|
|
319
|
-
|
|
320
|
-
<div class="c1">
|
|
321
|
-
<h3><a class="link" x-modal-open="modalLazyload">Lazyload</a></h3>
|
|
322
|
-
<div>Image loaded lazy.</div>
|
|
323
|
-
<div class="mt2">
|
|
324
|
-
<img class="r3" src="https://seosecret.id/placeholder/800x600/ffffff/584959/Loading.../png" x-lazyload data-src="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0426.jpg" data-srcset="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0426.jpg 1x" width="800" height="600" />
|
|
325
|
-
</div>
|
|
326
|
-
</div>
|
|
327
|
-
|
|
328
|
-
<div class="c1">
|
|
329
|
-
<h3><a class="link" x-modal-open="modalLib">Lib</a></h3>
|
|
330
|
-
<div class="jsLibExample">
|
|
331
|
-
x.lib.random(1000, 100000) → <span class="jsLibRandom"></span><br>
|
|
332
|
-
x.lib.number(<span class="jsLibRandom"></span>) → <span class="jsLibNumber"></span><br>
|
|
333
|
-
x.lib.numberDecline(<span class="jsLibRandom"></span>, 'item', 'items', 'items') →
|
|
334
|
-
<span class="jsLibNumberDecline"></span><br>
|
|
335
|
-
x.lib.isEmail('hello@mail.dev') → <span class="jsLibIsEmailTrue"></span><br>
|
|
336
|
-
x.lib.isEmail('hello@mail') → <span class="jsLibIsEmailFalse"></span><br>
|
|
337
|
-
x.lib.makePassword(8) → <code class="jsLibMakePassword"></code><br>
|
|
338
|
-
</div>
|
|
339
|
-
<div class="flex gap3 aic mt1">
|
|
340
|
-
<span class="jsLibExampleUpdate pointer unselectable">↺</span>
|
|
341
|
-
<a class="link link--dashed fs14" x-modal-open="modalLib">Show all methods</a>
|
|
342
|
-
</div>
|
|
343
|
-
<script>
|
|
344
|
-
document.addEventListener('DOMContentLoaded', function() {
|
|
345
|
-
|
|
346
|
-
function libExample() {
|
|
347
|
-
let random = x.lib.random(1000, 100000);
|
|
348
|
-
x.lib.render('.jsLibRandom', random);
|
|
349
|
-
x.lib.render('.jsLibNumber', x.lib.number(random));
|
|
350
|
-
x.lib.render('.jsLibNumberDecline', random + ' ' + x.lib.numberDecline(random, 'item', 'items', 'items'));
|
|
351
|
-
x.lib.render('.jsLibIsEmailTrue', x.lib.isEmail('hello@mail.dev') ? 'true' : 'false');
|
|
352
|
-
x.lib.render('.jsLibIsEmailFalse', x.lib.isEmail('hello@mail') ? 'true' : 'false');
|
|
353
|
-
x.lib.render('.jsLibMakePassword', x.lib.makePassword(8))
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
libExample();
|
|
357
|
-
qs('.jsLibExampleUpdate').addEventListener('click', libExample);
|
|
358
|
-
})
|
|
359
|
-
</script>
|
|
360
|
-
</div>
|
|
361
|
-
|
|
362
|
-
<div class="c1">
|
|
363
|
-
<h3><a class="link" x-modal-open="modalLoadmore">Loadmore</a></h3>
|
|
364
|
-
<div>Load new data on content scrolling.</div>
|
|
365
|
-
<div class="flex fw gap3 mt2">
|
|
366
|
-
<a role="button" class="button" x-modal-open="modalExampleLoadmore">Show example posts</a>
|
|
367
|
-
</div>
|
|
368
|
-
<div x-modal="modalExampleLoadmore">
|
|
369
|
-
<div id="posts">
|
|
370
|
-
<h2>Posts</h2>
|
|
371
|
-
</div>
|
|
372
|
-
<div id="postsLoader" class="flex jcc py5">
|
|
373
|
-
<div class="max100">
|
|
374
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"><circle fill="none" stroke-opacity="1" stroke="#888888" stroke-width=".5" cx="100" cy="100" r="0"><animate attributeName="r" calcMode="spline" dur="2" values="1;80" keyTimes="0;1" keySplines="0 .2 .5 1" repeatCount="indefinite"></animate><animate attributeName="stroke-width" calcMode="spline" dur="2" values="0;25" keyTimes="0;1" keySplines="0 .2 .5 1" repeatCount="indefinite"></animate><animate attributeName="stroke-opacity" calcMode="spline" dur="2" values="1;0" keyTimes="0;1" keySplines="0 .2 .5 1" repeatCount="indefinite"></animate></circle></svg>
|
|
375
|
-
</div>
|
|
376
|
-
</div>
|
|
377
|
-
<div x-loadmore='{"functionName": "loadPosts"}'></div>
|
|
378
|
-
</div>
|
|
379
|
-
|
|
380
|
-
<script>
|
|
381
|
-
document.addEventListener('DOMContentLoaded', function() {
|
|
382
|
-
class Posts {
|
|
383
|
-
constructor() {
|
|
384
|
-
this.all = false
|
|
385
|
-
}
|
|
386
|
-
async load(page) {
|
|
387
|
-
if (!this.all) {
|
|
388
|
-
x.lib.show('#postsLoader');
|
|
389
|
-
let skip = (page - 1) * 50;
|
|
390
|
-
let response = await fetch('https://dummyjson.com/posts/?limit=50&skip=' + skip);
|
|
391
|
-
let data = await response.json();
|
|
392
|
-
x.lib.hide('#postsLoader');
|
|
393
|
-
x.lib.render('#posts', () => {
|
|
394
|
-
let result = `<h3>Page ${page}</h3>`;
|
|
395
|
-
if (data.posts.length) {
|
|
396
|
-
for (let post of data.posts) {
|
|
397
|
-
result += `<p>${post.title}</p>`
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
return result;
|
|
401
|
-
}, 'beforeend');
|
|
402
|
-
if (data.limit < 50) this.all = true
|
|
403
|
-
return true
|
|
404
|
-
} else {
|
|
405
|
-
return false
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
const posts = new Posts();
|
|
410
|
-
window.loadPosts = posts.load.bind(posts);
|
|
411
|
-
})
|
|
412
|
-
</script>
|
|
413
|
-
</div>
|
|
414
|
-
|
|
415
|
-
<div class="c1">
|
|
416
|
-
<h3><a class="link" x-modal-open="modalModal">Modal</a></h3>
|
|
417
|
-
|
|
418
|
-
<div class="flex fw gap3">
|
|
419
|
-
<a role="button" class="button" x-modal-open="modalExampleTest">Test modal</a>
|
|
420
|
-
<a role="button" class="button" x-modal-open="modalExampleUniq">Unique modal</a>
|
|
421
|
-
<a role="button" class="button" x-modal-open="modalExampleStory">Modal with long story</a>
|
|
422
|
-
</div>
|
|
423
|
-
<h6>API call:</h6>
|
|
424
|
-
<a class="link link--dashed" onclick="x.modal.show('modalExampleTest')">x.modal.show('modalExampleTest')</a>
|
|
425
|
-
|
|
426
|
-
<div x-modal="modalExampleTest">
|
|
427
|
-
<h2>Test modal</h2>
|
|
428
|
-
<p>John was a young man who lived in a small town. He had always dreamed of traveling the world and seeing new places. One day, he decided to pack his bags and go on a journey.</p>
|
|
429
|
-
<p>He first went to Europe, where he visited many countries. He saw the Eiffel Tower in Paris, the Coliseum in Rome, and the canals of Venice. He also tried local food and drinks, which were very delicious.</p>
|
|
430
|
-
<p>After Europe, John went to Asia. There he explored the temples of India, the Great Wall of China, and the rice fields of Japan. He learned about different cultures and religions, which made him more open-minded.</p>
|
|
431
|
-
<p>Finally, John came back home, but he knew that he would soon go on another adventure. His travels had given him a lot of new experiences and knowledge, and he was ready for more.</p>
|
|
432
|
-
<div class="flex gap3 mt6">
|
|
433
|
-
<a role="button" class="button modal-close">Close</a>
|
|
434
|
-
<a role="button" class="button" x-modal-open="modalExampleInModal">Modal in modal</a>
|
|
435
|
-
<a role="button" class="button" x-modal-open="modalExampleUniq">Unique modal</a>
|
|
436
|
-
</div>
|
|
437
|
-
</div>
|
|
438
|
-
|
|
439
|
-
<div x-modal="modalExampleInModal">
|
|
440
|
-
<h2>Modal in modal</h2>
|
|
441
|
-
<p>Opening this window, you are not closed all the other windows on the page.</p>
|
|
442
|
-
</div>
|
|
443
|
-
|
|
444
|
-
<div x-modal="modalExampleUniq" class="modal--uniq">
|
|
445
|
-
<h2>Unique modal</h2>
|
|
446
|
-
<p>Opening this window, you are closed all the other windows on the page.</p>
|
|
447
|
-
</div>
|
|
448
|
-
|
|
449
|
-
<div x-modal="modalExampleStory" class="modal--hash">
|
|
450
|
-
|
|
451
|
-
<div class="fs20">
|
|
452
|
-
<h1>Font size 20px</h1>
|
|
453
|
-
<h2>Header 2</h2>
|
|
454
|
-
<p>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</p>
|
|
455
|
-
<p>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</p>
|
|
456
|
-
<h3>Header 3</h3>
|
|
457
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
458
|
-
<h4>Header 4</h4>
|
|
459
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
460
|
-
<h5>Header 5</h5>
|
|
461
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
462
|
-
</div>
|
|
463
|
-
|
|
464
|
-
<div class="fs16 mt7">
|
|
465
|
-
<h1>Font size 16px</h1>
|
|
466
|
-
<h2>Header 2</h2>
|
|
467
|
-
<p>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</p>
|
|
468
|
-
<p>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</p>
|
|
469
|
-
<h3>Header 3</h3>
|
|
470
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
471
|
-
<h4>Header 4</h4>
|
|
472
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
473
|
-
<h5>Header 5</h5>
|
|
474
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
475
|
-
</div>
|
|
476
|
-
|
|
477
|
-
<div class="fs14 mt7">
|
|
478
|
-
<h1>Font size 14px</h1>
|
|
479
|
-
<h2>Header 2</h2>
|
|
480
|
-
<p>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</p>
|
|
481
|
-
<p>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</p>
|
|
482
|
-
<h3>Header 3</h3>
|
|
483
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
484
|
-
<h4>Header 4</h4>
|
|
485
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
486
|
-
<h5>Header 5</h5>
|
|
487
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
488
|
-
</div>
|
|
489
|
-
|
|
490
|
-
<div class="fs12 mt7">
|
|
491
|
-
<h1>Font size 12px</h1>
|
|
492
|
-
<h2>Header 2</h2>
|
|
493
|
-
<p>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</p>
|
|
494
|
-
<p>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</p>
|
|
495
|
-
<h3>Header 3</h3>
|
|
496
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
497
|
-
<h4>Header 4</h4>
|
|
498
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
499
|
-
<h5>Header 5</h5>
|
|
500
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
501
|
-
</div>
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
<div class="fs20 mt7">
|
|
506
|
-
<p class="fs20">Headers test 20px</p>
|
|
507
|
-
<hr />
|
|
508
|
-
<h1>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</h1>
|
|
509
|
-
<h2>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</h2>
|
|
510
|
-
<h3>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</h3>
|
|
511
|
-
<h4>When he reached the beach, Jack stepped onto the sand and took a deep breath. The salty air filled his lungs, and he felt alive. He looked up at the sky and saw the sun shining brightly above him. It was a perfect day to begin his exploration.</h4>
|
|
512
|
-
</div>
|
|
513
|
-
|
|
514
|
-
<div class="fs16 mt7">
|
|
515
|
-
<p class="fs20">Headers test 16px</p>
|
|
516
|
-
<hr />
|
|
517
|
-
<h1>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</h1>
|
|
518
|
-
<h2>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</h2>
|
|
519
|
-
<h3>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</h3>
|
|
520
|
-
<h4>When he reached the beach, Jack stepped onto the sand and took a deep breath. The salty air filled his lungs, and he felt alive. He looked up at the sky and saw the sun shining brightly above him. It was a perfect day to begin his exploration.</h4>
|
|
521
|
-
</div>
|
|
522
|
-
|
|
523
|
-
<div class="fs14 mt7">
|
|
524
|
-
<p class="fs20">Headers test 14px</p>
|
|
525
|
-
<hr />
|
|
526
|
-
<h1>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</h1>
|
|
527
|
-
<h2>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</h2>
|
|
528
|
-
<h3>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</h3>
|
|
529
|
-
<h4>When he reached the beach, Jack stepped onto the sand and took a deep breath. The salty air filled his lungs, and he felt alive. He looked up at the sky and saw the sun shining brightly above him. It was a perfect day to begin his exploration.</h4>
|
|
530
|
-
</div>
|
|
531
|
-
|
|
532
|
-
<div class="fs12 mt7">
|
|
533
|
-
<p class="fs20">Headers test 12px</p>
|
|
534
|
-
<hr />
|
|
535
|
-
<h1>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</h1>
|
|
536
|
-
<h2>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</h2>
|
|
537
|
-
<h3>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</h3>
|
|
538
|
-
<h4>When he reached the beach, Jack stepped onto the sand and took a deep breath. The salty air filled his lungs, and he felt alive. He looked up at the sky and saw the sun shining brightly above him. It was a perfect day to begin his exploration.</h4>
|
|
539
|
-
</div>
|
|
540
|
-
|
|
541
|
-
<h2>The Sea: A Story of Adventure and Discovery</h2>
|
|
542
|
-
<p>In a faraway land, there was a beautiful sea that stretched as far as the eye could see. The sea was known for its mysterious depths and powerful waves, which had been explored by many brave sailors over the years. One day, a young man named Jack decided to set out on a journey to explore the sea and discover its secrets.</p>
|
|
543
|
-
<p>Jack had always been fascinated by the stories he had heard about the sea, and he wanted to see it for himself. He packed his bags with all the necessary supplies and set off on his journey. As he sailed across the open waters, he felt a sense of excitement and anticipation. He knew that he was about to embark on an adventure that would change his life forever.</p>
|
|
544
|
-
<p>As he approached the sea, Jack saw how vast and majestic it was. The waves were rolling in, creating a symphony of sound that filled the air. Jack felt a deep connection to the sea, as if it were calling him to come closer. He lowered his sails and let the boat drift towards the shore.</p>
|
|
545
|
-
<p>When he reached the beach, Jack stepped onto the sand and took a deep breath. The salty air filled his lungs, and he felt alive. He looked up at the sky and saw the sun shining brightly above him. It was a perfect day to begin his exploration.</p>
|
|
546
|
-
<p>Jack began walking along the shore, taking in the beauty of the sea. He watched the waves crashing against the rocks, creating a spray of water that shimmered in the sunlight. He listened to the seagulls flying overhead, their cries echoing across the horizon.</p>
|
|
547
|
-
<figure>
|
|
548
|
-
<img src="https://anapa-surfing.ru/data/articles/photos/412/24958842-1985911258085644-8924492843955900298-o.jpg" alt="" />
|
|
549
|
-
<figcaption>Ivan backloop</figcaption>
|
|
550
|
-
</figure>
|
|
551
|
-
<p>After walking for some time, Jack came upon a small fishing village. The villagers were friendly and welcoming, and they invited Jack to stay for a while. Jack accepted their offer and spent several days learning about their way of life. He helped them with their fishing and learned about the local customs and traditions.</p>
|
|
552
|
-
<p>One day, while sitting on the dock, Jack noticed something strange in the distance. There was a dark cloud on the horizon, moving towards them. The villagers became worried, and Jack realized that a storm was approaching.</p>
|
|
553
|
-
<p>The storm hit the village with full force, bringing strong winds and heavy rain. Jack huddled in a corner, trying to stay dry. When the storm finally passed, Jack emerged from his hiding place and looked around.</p>
|
|
554
|
-
<blockquote>Jack began walking along the shore, taking in the beauty of the sea. He watched the waves crashing against the rocks, creating a spray of water that shimmered in the sunlight. He listened to the seagulls flying overhead, their cries echoing across the horizon.</blockquote>
|
|
555
|
-
|
|
556
|
-
<h2>Waves</h2>
|
|
557
|
-
<p>The waves were always there, crashing against the shore. They were a constant reminder of the power and beauty of nature. The waves came in all shapes and sizes, from gentle ripples to towering breakers.</p>
|
|
558
|
-
<p>Some people feared the waves, seeing them as a threat. But others saw them as something to be admired and respected. The waves could be calm and peaceful, or they could be wild and unpredictable.</p>
|
|
559
|
-
<p>One day, I decided to go to the beach and watch the waves. I sat on the sand and watched as they rolled in, one after another. I listened to their rhythmic sound and felt the spray of water on my face.</p>
|
|
560
|
-
<p>I watched as the sun set over the horizon, casting a golden glow over the waves. It was a beautiful sight, and I knew that I would never forget it.</p>
|
|
561
|
-
<p>As I walked back home, I thought about the waves and what they meant to me. They were more than just water moving up and down. They were symbols of life's ups and downs, of its beauty and its power.</p>
|
|
562
|
-
|
|
563
|
-
<h2>Table demo</h2>
|
|
564
|
-
|
|
565
|
-
<table class="maxw">
|
|
566
|
-
<tr>
|
|
567
|
-
<th class="w40">#</th>
|
|
568
|
-
<th>Name</th>
|
|
569
|
-
<th class="w80">Age</th>
|
|
570
|
-
<th>City</th>
|
|
571
|
-
</tr>
|
|
572
|
-
<tr>
|
|
573
|
-
<th>1</th>
|
|
574
|
-
<td>Andrey</td>
|
|
575
|
-
<td>38</td>
|
|
576
|
-
<td>Anapa</td>
|
|
577
|
-
</tr>
|
|
578
|
-
<tr>
|
|
579
|
-
<th>2</th>
|
|
580
|
-
<td>Anna</td>
|
|
581
|
-
<td>35</td>
|
|
582
|
-
<td>Krasnodar</td>
|
|
583
|
-
</tr>
|
|
584
|
-
<tr>
|
|
585
|
-
<th>3</th>
|
|
586
|
-
<td>Viktor</td>
|
|
587
|
-
<td>29</td>
|
|
588
|
-
<td>Moscow</td>
|
|
589
|
-
</tr>
|
|
590
|
-
</table>
|
|
591
|
-
|
|
592
|
-
<h2>Lists demo</h2>
|
|
593
|
-
|
|
594
|
-
<h3>Unordered list</h3>
|
|
595
|
-
<ul>
|
|
596
|
-
<li>One</li>
|
|
597
|
-
<li>Two</li>
|
|
598
|
-
<ul>
|
|
599
|
-
<li>One</li>
|
|
600
|
-
<li>Two</li>
|
|
601
|
-
<ul>
|
|
602
|
-
<li>One</li>
|
|
603
|
-
<li>Two</li>
|
|
604
|
-
<li>Three</li>
|
|
605
|
-
</ul>
|
|
606
|
-
<li>Three</li>
|
|
607
|
-
</ul>
|
|
608
|
-
<li>Three</li>
|
|
609
|
-
</ul>
|
|
610
|
-
|
|
611
|
-
<h3>Ordered list</h3>
|
|
612
|
-
<ol>
|
|
613
|
-
<li>One</li>
|
|
614
|
-
<li>Two</li>
|
|
615
|
-
<ol>
|
|
616
|
-
<li>One</li>
|
|
617
|
-
<li>Two</li>
|
|
618
|
-
<ol>
|
|
619
|
-
<li>One</li>
|
|
620
|
-
<li>Two</li>
|
|
621
|
-
<li>Three</li>
|
|
622
|
-
</ol>
|
|
623
|
-
<li>Three</li>
|
|
624
|
-
</ol>
|
|
625
|
-
<li>Three</li>
|
|
626
|
-
</ol>
|
|
627
|
-
|
|
628
|
-
<h3>Definition list</h3>
|
|
629
|
-
<dl>
|
|
630
|
-
<dt>One</dt>
|
|
631
|
-
<dd>The firts number</dd>
|
|
632
|
-
<dt>Two</dt>
|
|
633
|
-
<dd>The second number</dd>
|
|
634
|
-
<dt>Three</dt>
|
|
635
|
-
<dd>The third number</dd>
|
|
636
|
-
</dl>
|
|
637
|
-
</div>
|
|
638
|
-
</div>
|
|
639
|
-
|
|
640
|
-
<div class="c1">
|
|
641
|
-
<h3><a class="link" x-modal-open="modalScroll">Scroll</a></h3>
|
|
642
|
-
</div>
|
|
643
|
-
|
|
644
|
-
<div class="c1">
|
|
645
|
-
<h3><a class="link" x-modal-open="modalSheets">Sheets</a></h3>
|
|
646
|
-
<div x-sheets class="sheets-example unselectable">
|
|
647
|
-
<div class="button--tabs">
|
|
648
|
-
<a class="button hidden" x-sheet-open="sheet0">First</a>
|
|
649
|
-
<a class="button active" x-sheet-open="sheetA">Bird</a>
|
|
650
|
-
<a class="button" x-sheet-open="sheetB">Sea</a>
|
|
651
|
-
<a class="button hidden" x-sheet-open="sheetC">Last</a>
|
|
652
|
-
</div>
|
|
653
|
-
<div class="mt3">
|
|
654
|
-
<div x-sheet="sheetA">Once I saw a little bird outside my window. It was chirping happily and looking for food. I put some seeds on the windowsill, and it ate them right away.</div>
|
|
655
|
-
<div x-sheet="sheetB">Once I saw a ship on the sea. It was sailing smoothly and leaving a trail in the water. The sun was setting, making the scene even more beautiful.
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
<div x-sheets class="sheets-example mt3">
|
|
659
|
-
<div class="button--tabs">
|
|
660
|
-
<a class="button" x-sheet-open="sheetA1">Bird</a>
|
|
661
|
-
<a class="button" x-sheet-open="sheetB1">Sea</a>
|
|
662
|
-
</div>
|
|
663
|
-
<div class="mt3">
|
|
664
|
-
<div x-sheet="sheetA1">Once I saw a little bird outside my window. It was chirping happily and looking for food. I put some seeds on the windowsill, and it ate them right away.</div>
|
|
665
|
-
<div x-sheet="sheetB1">Once I saw a ship on the sea. It was sailing smoothly and leaving a trail in the water. The sun was setting, making the scene even more beautiful.</div>
|
|
666
|
-
</div>
|
|
667
|
-
</div>
|
|
668
|
-
</div>
|
|
669
|
-
</div>
|
|
670
|
-
</div>
|
|
671
|
-
<div x-sheets class="mt3 flex aic gap2 sheets-example">
|
|
672
|
-
<div class="button--tabs">
|
|
673
|
-
<a class="button active" x-sheet-open="sheetHappy">Happy</a>
|
|
674
|
-
<a class="button" x-sheet-open="sheetSad">Sad</a>
|
|
675
|
-
</div>
|
|
676
|
-
<div class="fs30">
|
|
677
|
-
<div x-sheet="sheetHappy">🙂</div>
|
|
678
|
-
<div x-sheet="sheetSad">😕</div>
|
|
679
|
-
</div>
|
|
680
|
-
</div>
|
|
681
|
-
</div>
|
|
682
|
-
|
|
683
|
-
<div class="c1">
|
|
684
|
-
<h3><a class="link" x-modal-open="modalSlider">Slider</a></h3>
|
|
685
|
-
<style>.slider .slider-item:first-child img{border-radius:var(--space-3)0 0 var(--space-3)}.slider .slider-item:last-child img{border-radius:0 var(--space-3)var(--space-3)0}</style>
|
|
686
|
-
<div x-slider='{"gap":2}' class="ratio4x3 r3">
|
|
687
|
-
<div><img data-srcset="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0430.jpg 2x" alt=""></div>
|
|
688
|
-
<div><img data-src="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0320.jpg" alt=""></div>
|
|
689
|
-
<div><img data-src="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0401.jpg" alt=""></div>
|
|
690
|
-
<div><img data-src="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0450.jpg" alt=""></div>
|
|
691
|
-
<div><img data-src="https://anapa-surfing.ru/-/data/articles/photos/416/800x600q80c/img-0405.jpg" alt=""></div>
|
|
692
|
-
</div>
|
|
693
|
-
<div class="mt2 touch-hide">Move cursor on photo.</div>
|
|
694
|
-
<div class="mt2 touch-show">Drag left or right</div>
|
|
695
|
-
|
|
696
|
-
<div x-modal="modalSlider">
|
|
697
|
-
<div class="h1">Slider</div>
|
|
698
|
-
<p>Hover and mouseover photos slider.</p>
|
|
699
|
-
<p>Working only on desktops.</p>
|
|
700
|
-
<p><code>✍🏻 Documentation in progress</code></p>
|
|
701
|
-
</div>
|
|
702
|
-
</div>
|
|
703
|
-
</div>
|
|
704
|
-
</div>
|
|
705
|
-
</section>
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
<section class="mt7 px5 m:px6 l:px8">
|
|
709
|
-
<div class="container max1000">
|
|
710
|
-
<div class="grid g1 m:g2 gap6">
|
|
711
|
-
<div class="c1 ac">
|
|
712
|
-
<h2>CSS</h2>
|
|
713
|
-
<ul class="reset fs18 flow s1" style="column-count:2">
|
|
714
|
-
<li><a class="link" x-modal-open="modalBreakpoints">Breakpoints</a></li>
|
|
715
|
-
<li><a class="link" x-modal-open="modalReset">Reset</a></li>
|
|
716
|
-
<li><a class="link" x-modal-open="modalSpaces">Spaces</a></li>
|
|
717
|
-
<li><a class="link" x-modal-open="modalLinks">Links</a></li>
|
|
718
|
-
<li><a class="link" x-modal-open="modalTypo">Typo</a></li>
|
|
719
|
-
<li><a class="link" x-modal-open="modalForms">Forms</a></li>
|
|
720
|
-
<li><a class="link" x-modal-open="modalHelpers">Helpers</a></li>
|
|
721
|
-
<li><a class="link" x-modal-open="modalButtons">Buttons</a></li>
|
|
722
|
-
<li><a class="link" x-modal-open="modalGrid">Grid</a></li>
|
|
723
|
-
<li><a class="link" x-modal-open="modalFlex">Flex</a></li>
|
|
724
|
-
<li><a class="link" x-modal-open="modalFlow">Flow</a></li>
|
|
725
|
-
<li><a class="link" x-modal-open="modalIcons">Icons</a></li>
|
|
726
|
-
<li><a class="link" x-modal-open="modalColors">Colors</a></li>
|
|
727
|
-
</ul>
|
|
728
|
-
</div>
|
|
729
|
-
<div class="c1 ac">
|
|
730
|
-
<h2>JS</h2>
|
|
731
|
-
<ul class="reset fs18 flow s1" style="column-count:2">
|
|
732
|
-
<li><a class="link" x-modal-open="modalAnimate">Animate</a></li>
|
|
733
|
-
<li><a class="link" x-modal-open="modalAppear">Appear</a></li>
|
|
734
|
-
<li><a class="link" x-modal-open="modalDevice">Device</a></li>
|
|
735
|
-
<li><a class="link" x-modal-open="modalForm">Form</a></li>
|
|
736
|
-
<li><a class="link" x-modal-open="modalHover">Hover</a></li>
|
|
737
|
-
<li><a class="link" x-modal-open="modalLazyload">Lazyload</a></li>
|
|
738
|
-
<li><a class="link" x-modal-open="modalLib">Lib</a></li>
|
|
739
|
-
<li><a class="link" x-modal-open="modalLoadmore">Loadmore</a></li>
|
|
740
|
-
<li><a class="link" x-modal-open="modalModal">Modal</a></li>
|
|
741
|
-
<li><a class="link" x-modal-open="modalScroll">Scroll</a></li>
|
|
742
|
-
<li><a class="link" x-modal-open="modalSheets">Sheets</a></li>
|
|
743
|
-
<li><a class="link" x-modal-open="modalSlider">Slider</a></li>
|
|
744
|
-
<li><a class="link" x-modal-open="modalSticky">Sticky</a></li>
|
|
745
|
-
</ul>
|
|
746
|
-
</div>
|
|
747
|
-
<div class="c1 m:c2 ac fw600 flex fc m:fr jcc gap2">
|
|
748
|
-
<div>⚠️</div>
|
|
749
|
-
<div>Documentation in progress, read details in code</div>
|
|
750
|
-
<div>⚠️</div>
|
|
751
|
-
</div>
|
|
752
|
-
</div>
|
|
753
|
-
</div>
|
|
754
|
-
</section>
|
|
755
|
-
|
|
756
|
-
<section class="section-header mt8 px5 m:px6 l:px8">
|
|
757
|
-
<h2 class="ac">Start usage</h2>
|
|
758
|
-
</section>
|
|
759
|
-
|
|
760
|
-
<div class="element1" x-animate='{
|
|
761
|
-
"start": "100vh",
|
|
762
|
-
"end": "-100px",
|
|
763
|
-
"functionName": "element1",
|
|
764
|
-
"class": "active",
|
|
765
|
-
"classRemove": true
|
|
766
|
-
}'>
|
|
767
|
-
<div class="element1-figure"></div>
|
|
768
|
-
</div>
|
|
769
|
-
|
|
770
|
-
<section class="section-content mt7 px5 m:px6 l:px8">
|
|
771
|
-
<div class="container max700">
|
|
772
|
-
|
|
773
|
-
<h3>HTML</h3>
|
|
774
|
-
<p>Manually download <a class="button button--label" href="https://cdn.jsdelivr.net/gh/andreyshpigunov/x@latest/dist/x.js">x.js</a> and <a class="button button--label" href="https://cdn.jsdelivr.net/gh/andreyshpigunov/x@latest/dist/x.css">x.css</a> and connect them in HTML.</p>
|
|
775
|
-
<p>In the <code><head></code> tag, as first style.</p>
|
|
776
|
-
<div class="codeBlock">
|
|
777
|
-
<code><link rel="stylesheet" href="x.css"/></code>
|
|
778
|
-
</div>
|
|
779
|
-
<p>At the end of page, before <code></body></code> tag, as first script.</p>
|
|
780
|
-
<div class="codeBlock">
|
|
781
|
-
<code><script src="x.js"></script></code>
|
|
782
|
-
<code><script>x.init();</script></code>
|
|
783
|
-
</div>
|
|
784
|
-
|
|
785
|
-
<hr class="my7" />
|
|
786
|
-
<h3>NPM</h3>
|
|
787
|
-
<p>Install package in project folder:</p>
|
|
788
|
-
<div class="codeBlock">
|
|
789
|
-
<code>$ npm i @andreyshpigunov/x</code>
|
|
790
|
-
</div>
|
|
791
|
-
<p>Import module in app.js:</p>
|
|
792
|
-
<div class="codeBlock">
|
|
793
|
-
<code>import { x } from '@andreyshpigunov/x';</code>
|
|
794
|
-
<code>x.init();</code>
|
|
795
|
-
</div>
|
|
796
|
-
<p>Best way to connect styles, download them from CDN and import manually in app.css:</p>
|
|
797
|
-
<div class="codeBlock">
|
|
798
|
-
<code>@import "../components/x.css";</code>
|
|
799
|
-
</div>
|
|
800
|
-
|
|
801
|
-
<hr class="my7" />
|
|
802
|
-
<h3>CDN links</h3>
|
|
803
|
-
<p class="breakWord">
|
|
804
|
-
Latest release:<br>
|
|
805
|
-
<a href="https://cdn.jsdelivr.net/gh/andreyshpigunov/x@1.0.0/dist/x.css">https://cdn.jsdelivr.net/gh/andreyshpigunov/x@1.0.0/dist/x.css</a><br>
|
|
806
|
-
<a href="https://cdn.jsdelivr.net/gh/andreyshpigunov/x@1.0.0/dist/x.js">https://cdn.jsdelivr.net/gh/andreyshpigunov/x@1.0.0/dist/x.js</a>
|
|
807
|
-
</p>
|
|
808
|
-
<p class="breakWord">
|
|
809
|
-
Latest build:<br>
|
|
810
|
-
<a href="https://cdn.jsdelivr.net/gh/andreyshpigunov/x@latest/dist/x.css">https://cdn.jsdelivr.net/gh/andreyshpigunov/x@latest/dist/x.css</a><br>
|
|
811
|
-
<a href="https://cdn.jsdelivr.net/gh/andreyshpigunov/x@latest/dist/x.js">https://cdn.jsdelivr.net/gh/andreyshpigunov/x@latest/dist/x.js</a>
|
|
812
|
-
</p>
|
|
813
|
-
|
|
814
|
-
<hr class="my7" />
|
|
815
|
-
<h3>Project on GitHub</h3>
|
|
816
|
-
<p><a href="https://github.com/andreyshpigunov/x">https://github.com/andreyshpigunov/x</a></p>
|
|
817
|
-
<hr class="my7" />
|
|
818
|
-
</div>
|
|
819
|
-
</section>
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
<div x-modal="modalBreakpoints" class="modal--hash" data-window-class="max1000">
|
|
823
|
-
<h2>Breakpoints</h2>
|
|
824
|
-
<p>Mobile first breakpoints</p>
|
|
825
|
-
<p>
|
|
826
|
-
<code>s</code>, <code>m</code>, <code>l</code>, <code>xl</code> use <code>min-size</code>
|
|
827
|
-
</p>
|
|
828
|
-
<pre class="fs14 mono">
|
|
829
|
-
---------------------------
|
|
830
|
-
| s | m | l | xl |
|
|
831
|
-
---------------------------
|
|
832
|
-
| 0 | 600 | 1000 | 1400 |
|
|
833
|
-
---------------------------</pre>
|
|
834
|
-
|
|
835
|
-
<p>
|
|
836
|
-
<code>s</code> - default size, not using prefix <code>s:</code><br>
|
|
837
|
-
<code>m</code> - medium size<br>
|
|
838
|
-
<code>l</code> - large size<br>
|
|
839
|
-
<code>xl</code> - xlarge size
|
|
840
|
-
</p>
|
|
841
|
-
|
|
842
|
-
<h3>Custom media</h3>
|
|
843
|
-
<p>X use <a href="https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-custom-media" target="_blank">PostCSS custom media plugin</a> for compiling styles.</p>
|
|
844
|
-
|
|
845
|
-
<pre class="fs14 mono">
|
|
846
|
-
<span class="op4">/* Setting for PostCSS custom media plugin */</span>
|
|
847
|
-
@custom-media --small (min-width: 0px);
|
|
848
|
-
@custom-media --medium (min-width: 600px);
|
|
849
|
-
@custom-media --large (min-width: 1000px);
|
|
850
|
-
@custom-media --xlarge (min-width: 1400px);
|
|
851
|
-
@custom-media --dark (prefers-color-scheme: dark);</pre>
|
|
852
|
-
</div>
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
<div x-modal="modalReset" class="modal--hash" data-window-class="max1000">
|
|
856
|
-
<h2>Reset</h2>
|
|
857
|
-
<p>Global styles reset and base variables.</p>
|
|
858
|
-
|
|
859
|
-
<h3>Variables</h3>
|
|
860
|
-
<pre class="fs14 mono">
|
|
861
|
-
--line-height: 1.5;
|
|
862
|
-
--font-color: #000;
|
|
863
|
-
--font-size-coeff: 62.5%;
|
|
864
|
-
--font-size: 1.6rem;
|
|
865
|
-
--font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
|
|
866
|
-
--font-family-mono: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
|
|
867
|
-
--background-color: #fff;</pre>
|
|
868
|
-
</div>
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
<div x-modal="modalSpaces" class="modal--hash" data-window-class="max1000">
|
|
872
|
-
<h2>Spaces</h2>
|
|
873
|
-
<p>Global spaces.</p>
|
|
874
|
-
<p class="fs12">
|
|
875
|
-
1rem = 10px by default (16px * var(--font-size-coeff)<br>
|
|
876
|
-
16px - default font size in most browsers
|
|
877
|
-
</p>
|
|
878
|
-
|
|
879
|
-
<h3>Variables</h3>
|
|
880
|
-
<pre class="fs14 mono">
|
|
881
|
-
--space-0: 0;
|
|
882
|
-
--space-1: 0.4rem;
|
|
883
|
-
--space-2: 0.8rem;
|
|
884
|
-
--space-3: 1.2rem;
|
|
885
|
-
--space-4: 1.6rem;
|
|
886
|
-
--space-5: 2.4rem;
|
|
887
|
-
--space-6: 3.2rem;
|
|
888
|
-
--space-7: 4.8rem;
|
|
889
|
-
--space-8: 6.4rem;
|
|
890
|
-
--space-9: 9.6rem;
|
|
891
|
-
--space-10: 12.8rem;</pre>
|
|
892
|
-
</div>
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
<div x-modal="modalLinks" class="modal--hash" data-window-class="max1000">
|
|
896
|
-
<h2>Links</h2>
|
|
897
|
-
<p>Links styling.</p>
|
|
898
|
-
|
|
899
|
-
<h3>Elements</h3>
|
|
900
|
-
<pre class="fs14 mono">
|
|
901
|
-
a
|
|
902
|
-
a.link
|
|
903
|
-
a.hover
|
|
904
|
-
a.active
|
|
905
|
-
a.link--noline
|
|
906
|
-
a.link--underline
|
|
907
|
-
a.link--dashed
|
|
908
|
-
a.link--dotted
|
|
909
|
-
a.link--wavy</pre>
|
|
910
|
-
|
|
911
|
-
<h3>Example</h3>
|
|
912
|
-
<div class="flex gap4 m:gap6 fs20 m:fs24">
|
|
913
|
-
<a class="link link--noline">noline</a>
|
|
914
|
-
<a class="link link--underline">underline</a>
|
|
915
|
-
<a class="link link--dashed">dashed</a>
|
|
916
|
-
<a class="link link--dotted">dotted</a>
|
|
917
|
-
<a class="link link--wavy">wavy</a>
|
|
918
|
-
</div>
|
|
919
|
-
|
|
920
|
-
<h3>Variables</h3>
|
|
921
|
-
<pre class="fs14 mono">
|
|
922
|
-
--link-color: #0060bb;
|
|
923
|
-
--link-decoration-line: underline;
|
|
924
|
-
--link-decoration-style: solid;
|
|
925
|
-
|
|
926
|
-
<span class="op4">/* Additional variables and their default values: */</span>
|
|
927
|
-
--link-color-hover: var(--link-color);
|
|
928
|
-
--link-color-visited: var(--link-color);
|
|
929
|
-
--link-decoration-line-hover: var(--link-decoration-line-hover, var(--link-decoration-line));
|
|
930
|
-
--link-decoration-style-hover: var(--link-decoration-style-hover, var(--link-decoration-style));
|
|
931
|
-
--link-decoration-thickness: .06em;
|
|
932
|
-
--link-decoration-color: color-mix(in srgb, currentcolor, transparent 75%);
|
|
933
|
-
--link-decoration-color-hover: currentcolor;
|
|
934
|
-
--link-decoration-color-visited: currentcolor;
|
|
935
|
-
--link-underline-offset: .25em;
|
|
936
|
-
--link-transition: all .1s ease-out;</pre>
|
|
937
|
-
</div>
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
<div x-modal="modalIcons" class="modal--hash" data-window-class="max1000">
|
|
941
|
-
<h2>Icons</h2>
|
|
942
|
-
<div class="mt6">
|
|
943
|
-
<pre class="fs14 mono">.icon - icon with default size 1em
|
|
944
|
-
.icon--[10-60] step 2 (m,l) - modifier with size in px</pre>
|
|
945
|
-
</div>
|
|
946
|
-
</div>
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
<div x-modal="modalColors" class="modal--hash" data-window-class="max1000">
|
|
950
|
-
<h2>Colors</h2>
|
|
951
|
-
<div class="mt6">
|
|
952
|
-
<pre class="fs14 mono"><span class="textPrimary">.colorPrimary</span>
|
|
953
|
-
<span class="textSuccess">.colorSuccess</span>
|
|
954
|
-
<span class="textWarning">.colorWarning</span>
|
|
955
|
-
<span class="textDanger">.colorDanger</span>
|
|
956
|
-
|
|
957
|
-
<span class="bgPrimary textWhite button button--label">.bgPrimary</span>
|
|
958
|
-
<span class="bgSuccess textWhite button button--label">.bgSuccess</span>
|
|
959
|
-
<span class="bgWarning textWhite button button--label">.bgWarning</span>
|
|
960
|
-
<span class="bgDanger textWhite button button--label">.bgDanger</span>
|
|
961
|
-
<span class="bgGrey textWhite button button--label">.bgGrey</span>
|
|
962
|
-
|
|
963
|
-
.color[ColorName] (d) - text color
|
|
964
|
-
.bg[ColorName] (d) — background color</pre>
|
|
965
|
-
</div>
|
|
966
|
-
<div class="mt6">All color names here: <a class="button button--label bgBeige" href="https://147colors.com" target="_blank"><div class="strike fw700 mr1">147</div> Colors →</a></div>
|
|
967
|
-
<div class="mt2">Colors by tones: <a class="button button--label" href="https://colorscheme.ru/html-colors.html" target="_blank">colorscheme.ru</a></div>
|
|
968
|
-
</div>
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
<div x-modal="modalTypo" class="modal--hash" data-window-class="max1000">
|
|
972
|
-
<h2>Typo</h2>
|
|
973
|
-
|
|
974
|
-
<h3>Elements</h3>
|
|
975
|
-
<pre class="fs14 mono">
|
|
976
|
-
.h[1-6]
|
|
977
|
-
.mono
|
|
978
|
-
.italic
|
|
979
|
-
.strike
|
|
980
|
-
.fs[10-19] step 1 (m,l,xl) - size in rem - 1.0, 1.1, 1.2, ..., 1.9
|
|
981
|
-
.fs[20-80] step 2 (m,l,xl) - size in rem - 2.0, 2.2, 2.4, ..., 8.0
|
|
982
|
-
.fw[100-900] step 100 (m,l,xl)
|
|
983
|
-
.ls[0-4] (m,l,xl)
|
|
984
|
-
.lh[0-9] (m,l,xl) - values: 1.0-1.9</pre>
|
|
985
|
-
|
|
986
|
-
<h3>Variables</h3>
|
|
987
|
-
<pre class="fs14 mono">
|
|
988
|
-
--headers-margin-top: 1em;
|
|
989
|
-
--headers-margin-bottom: .75em;
|
|
990
|
-
--headers-font-family: var(--font-family);
|
|
991
|
-
--headers-font-weight: 700;
|
|
992
|
-
--headers-font-color: var(--font-color);
|
|
993
|
-
|
|
994
|
-
--h1-font-size: 3.2rem;
|
|
995
|
-
--h2-font-size: 2.4rem;
|
|
996
|
-
--h3-font-size: 2.0rem;
|
|
997
|
-
--h4-font-size: 1.6rem;
|
|
998
|
-
--h5-font-size: 1.4rem;
|
|
999
|
-
--h6-font-size: 1.2rem;
|
|
1000
|
-
|
|
1001
|
-
--h1-line-height: 1.3;
|
|
1002
|
-
--h2-line-height: 1.4;
|
|
1003
|
-
|
|
1004
|
-
--paragraph-margin: 1em;
|
|
1005
|
-
|
|
1006
|
-
--figure-margin: 2.5em auto 2em;
|
|
1007
|
-
--figcaption-margin-top: .5em;
|
|
1008
|
-
--figcaption-font-size: var(--font-size);
|
|
1009
|
-
--figcaption-color: #999;
|
|
1010
|
-
|
|
1011
|
-
--blockquote-margin: 2em 0;
|
|
1012
|
-
--blockquote-padding: 1em 2em;
|
|
1013
|
-
--blockquote-border: solid .2em var(--font-color);
|
|
1014
|
-
|
|
1015
|
-
--table-padding: .5em .75em;
|
|
1016
|
-
--table-border: 1px solid #ccc;
|
|
1017
|
-
--table-header-font-weight: 700;</pre>
|
|
1018
|
-
</div>
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
<div x-modal="modalForms" class="modal--hash" data-window-class="max1000">
|
|
1022
|
-
<h2>Forms</h2>
|
|
1023
|
-
<p>Form elements.</p>
|
|
1024
|
-
|
|
1025
|
-
<h3>Modifiers</h3>
|
|
1026
|
-
<pre class="fs14 mono">
|
|
1027
|
-
.error</pre>
|
|
1028
|
-
|
|
1029
|
-
<h3>Variables</h3>
|
|
1030
|
-
<pre class="fs14 mono">
|
|
1031
|
-
--forms-width: 400px;
|
|
1032
|
-
--forms-height: 4rem;
|
|
1033
|
-
--forms-side-padding: 1rem;
|
|
1034
|
-
|
|
1035
|
-
--forms-font-size: var(--font-size);
|
|
1036
|
-
--forms-font-color: #000;
|
|
1037
|
-
--forms-font-color-readonly: #000;
|
|
1038
|
-
--forms-font-color-disabled: #666;
|
|
1039
|
-
--forms-font-color-placeholder: #ccc;
|
|
1040
|
-
|
|
1041
|
-
--forms-border-width: .16rem;
|
|
1042
|
-
--forms-border-radius: .8rem;
|
|
1043
|
-
--forms-border-color: #ddd;
|
|
1044
|
-
--forms-border-color-focused: #8cf;
|
|
1045
|
-
--forms-border-color-error: #f00;
|
|
1046
|
-
--forms-border-color-readonly: #ddd;
|
|
1047
|
-
--forms-border-color-disabled: #ddd;
|
|
1048
|
-
|
|
1049
|
-
--forms-background-color: #fff;
|
|
1050
|
-
--forms-background-color-readonly: #fafafa;
|
|
1051
|
-
--forms-background-color-disabled: #f6f6f6;</pre>
|
|
1052
|
-
</div>
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
<div x-modal="modalButtons" class="modal--hash" data-window-class="max1000">
|
|
1056
|
-
<h2>Buttons</h2>
|
|
1057
|
-
|
|
1058
|
-
<div class="flow s4">
|
|
1059
|
-
<div class="flex fw gap4">
|
|
1060
|
-
<button class="button button--label">Label</button>
|
|
1061
|
-
<button class="button button--label button--primary">Label</button>
|
|
1062
|
-
<button class="button button--label button--success">Label</button>
|
|
1063
|
-
<button class="button button--label button--danger">Label</button>
|
|
1064
|
-
<button class="button button--label button--warning">Label</button>
|
|
1065
|
-
<button class="button button--label button--white">Label</button>
|
|
1066
|
-
<button class="button button--label button--black">Label</button>
|
|
1067
|
-
<button class="button button--label button--clear">Label</button>
|
|
1068
|
-
</div>
|
|
1069
|
-
<div class="flex fw gap4">
|
|
1070
|
-
<button class="button fs12">Button</button>
|
|
1071
|
-
<button class="button fs12 button--primary">Button</button>
|
|
1072
|
-
<button class="button fs12 button--success">Button</button>
|
|
1073
|
-
<button class="button fs12 button--danger">Button</button>
|
|
1074
|
-
<button class="button fs12 button--warning">Button</button>
|
|
1075
|
-
<button class="button fs12 button--white">Button</button>
|
|
1076
|
-
<button class="button fs12 button--black">Button</button>
|
|
1077
|
-
<button class="button fs12 button--clear">Button</button>
|
|
1078
|
-
</div>
|
|
1079
|
-
<div class="flex fw gap4">
|
|
1080
|
-
<button class="button">Button</button>
|
|
1081
|
-
<button class="button button--primary">Button</button>
|
|
1082
|
-
<button class="button button--success">Button</button>
|
|
1083
|
-
<button class="button button--danger">Button</button>
|
|
1084
|
-
<button class="button button--warning">Button</button>
|
|
1085
|
-
<button class="button button--white">Button</button>
|
|
1086
|
-
<button class="button button--black">Button</button>
|
|
1087
|
-
<button class="button button--clear">Button</button>
|
|
1088
|
-
</div>
|
|
1089
|
-
<div class="flex fw gap4">
|
|
1090
|
-
<button class="button fs20">Button</button>
|
|
1091
|
-
<button class="button fs20 button--primary">Button</button>
|
|
1092
|
-
<button class="button fs20 button--success">Button</button>
|
|
1093
|
-
<button class="button fs20 button--danger">Button</button>
|
|
1094
|
-
<button class="button fs20 button--warning">Button</button>
|
|
1095
|
-
<button class="button fs20 button--white">Button</button>
|
|
1096
|
-
<button class="button fs20 button--black">Button</button>
|
|
1097
|
-
<button class="button fs20 button--clear">Button</button>
|
|
1098
|
-
</div>
|
|
1099
|
-
<div class="flex fw gap4">
|
|
1100
|
-
<button class="button fs24">Button</button>
|
|
1101
|
-
<button class="button fs24 button--primary">Button</button>
|
|
1102
|
-
<button class="button fs24 button--success">Button</button>
|
|
1103
|
-
<button class="button fs24 button--danger">Button</button>
|
|
1104
|
-
<button class="button fs24 button--warning">Button</button>
|
|
1105
|
-
<button class="button fs24 button--white">Button</button>
|
|
1106
|
-
<button class="button fs24 button--black">Button</button>
|
|
1107
|
-
<button class="button fs24 button--clear">Button</button>
|
|
1108
|
-
</div>
|
|
1109
|
-
</div>
|
|
1110
|
-
|
|
1111
|
-
<h3>Elements</h3>
|
|
1112
|
-
<pre class="fs14 mono">
|
|
1113
|
-
.button
|
|
1114
|
-
|
|
1115
|
-
.button--label
|
|
1116
|
-
.button--primary
|
|
1117
|
-
.button--success
|
|
1118
|
-
.button--warning
|
|
1119
|
-
.button--danger
|
|
1120
|
-
.button--white
|
|
1121
|
-
.button--black
|
|
1122
|
-
.button--clear</pre>
|
|
1123
|
-
|
|
1124
|
-
<h3>Variables</h3>
|
|
1125
|
-
<pre class="fs14 mono"><span class="op4">/* Required variables */</span>
|
|
1126
|
-
--button-height-coeff: 2.5;
|
|
1127
|
-
--button-side-padding-coeff: 1.25;
|
|
1128
|
-
--button-color: var(--color-grey);
|
|
1129
|
-
--button-font-color: #000;
|
|
1130
|
-
--button-transition: all .1s ease-out;
|
|
1131
|
-
--button-font-size: var(--font-size);
|
|
1132
|
-
--button-transform: scale(1);
|
|
1133
|
-
--button-transform-hover: scale(1);
|
|
1134
|
-
--button-transform-active: scale(.98);
|
|
1135
|
-
--button-transform-origin: center;
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
<span class="op4">/* Additional variables and their default values: */
|
|
1139
|
-
--button-height: 4rem;
|
|
1140
|
-
--button-side-padding: 2rem;
|
|
1141
|
-
--button-font-family: var(--font-family);
|
|
1142
|
-
--button-font-weight: 400;
|
|
1143
|
-
--button-disabled-opacity: .5;
|
|
1144
|
-
--button-border-radius: calc(var(--button-font-size) * 0.6);
|
|
1145
|
-
--button-color-hover: auto;
|
|
1146
|
-
--button-color-active: auto;
|
|
1147
|
-
--button-font-color-hover: auto;
|
|
1148
|
-
--button-font-color-active: auto;</span></pre>
|
|
1149
|
-
</div>
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
<div x-modal="modalFlex" class="modal--hash" data-window-class="max1000">
|
|
1153
|
-
<h2>Flex</h2>
|
|
1154
|
-
<p>Flexbox.</p>
|
|
1155
|
-
|
|
1156
|
-
<h3>Elements</h3>
|
|
1157
|
-
<pre class="fs14 mono">
|
|
1158
|
-
.flex
|
|
1159
|
-
|
|
1160
|
-
.flex.fr (m,l,xl) - flex row
|
|
1161
|
-
.flex.fc (m,l,xl) - flex column
|
|
1162
|
-
.flex.fw (m,l,xl) - flex wrap
|
|
1163
|
-
.flex.fnw (m,l,xl) - flex nowrap
|
|
1164
|
-
|
|
1165
|
-
<span class="op4">/* Align items */</span>
|
|
1166
|
-
.flex.ais (m,l,xl) - stretch
|
|
1167
|
-
.flex.aifs (m,l,xl) - flex start
|
|
1168
|
-
.flex.aic (m,l,xl) - center
|
|
1169
|
-
.flex.aife (m,l,xl) - flex end
|
|
1170
|
-
|
|
1171
|
-
<span class="op4">/* Justify content */</span>
|
|
1172
|
-
.flex.jcfs (m,l,xl) - flex start
|
|
1173
|
-
.flex.jcc (m,l,xl) - center
|
|
1174
|
-
.flex.jcfe (m,l,xl) - flex end
|
|
1175
|
-
.flex.jcsb (m,l,xl) - space between
|
|
1176
|
-
.flex.jcsa (m,l,xl) - space around
|
|
1177
|
-
.flex.jcse (m,l,xl) - space evenly
|
|
1178
|
-
|
|
1179
|
-
.flex > .c[1-12]/[1-12] (m,l,xl) - column width "column/columns"</pre>
|
|
1180
|
-
</div>
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
<div x-modal="modalGrid" class="modal--hash" data-window-class="max1000">
|
|
1184
|
-
<h2>Grid</h2>
|
|
1185
|
-
<p>Multicolumn adaptive grid (1–12 columns).</p>
|
|
1186
|
-
|
|
1187
|
-
<h3>Elements</h3>
|
|
1188
|
-
<pre class="fs14 mono">
|
|
1189
|
-
.grid
|
|
1190
|
-
.grid.g[1-12] (m,l,xl) - columns limit in grid
|
|
1191
|
-
.grid > .c[1-12] (m,l,xl) - column width
|
|
1192
|
-
.grid > .c[1-12]/[1-12] (m,l,xl) - columns range for content</pre>
|
|
1193
|
-
</div>
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
<div x-modal="modalFlow" class="modal--hash" data-window-class="max1000">
|
|
1197
|
-
<h2>Flow</h2>
|
|
1198
|
-
<p>Vertical flow of elements with equal spaces between them.</p>
|
|
1199
|
-
|
|
1200
|
-
<h3>Elements</h3>
|
|
1201
|
-
<pre class="fs14 mono">
|
|
1202
|
-
.flow
|
|
1203
|
-
.flow.s[0-10] (m,l,xl) - vertical space</pre>
|
|
1204
|
-
</div>
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
<div x-modal="modalHelpers" class="modal--hash" data-window-class="max1000">
|
|
1210
|
-
<h2>Helpers</h2>
|
|
1211
|
-
<p>Helper classes.</p>
|
|
1212
|
-
|
|
1213
|
-
<h3>Elements</h3>
|
|
1214
|
-
<pre class="fs14 mono">
|
|
1215
|
-
.container
|
|
1216
|
-
.unselectable
|
|
1217
|
-
.unclickable
|
|
1218
|
-
.upper
|
|
1219
|
-
.lower
|
|
1220
|
-
.capitalize
|
|
1221
|
-
.nowrap
|
|
1222
|
-
.hyphens
|
|
1223
|
-
.pointer | cursor pointer
|
|
1224
|
-
.toe | text overflow ellipsis
|
|
1225
|
-
.toe2 | toe 2 lines
|
|
1226
|
-
.toe3 | toe 3 lines
|
|
1227
|
-
.oh | overflow hidden
|
|
1228
|
-
.touch-show | show on touch devices
|
|
1229
|
-
.touch-hide | hide on touch devices
|
|
1230
|
-
.rel | position relative
|
|
1231
|
-
.abs | position absolute
|
|
1232
|
-
.ins | position absolute inset 0
|
|
1233
|
-
|
|
1234
|
-
.fit-none (m,l,xl) | object fit none
|
|
1235
|
-
.fit-cover (m,l,xl) | object fit cover
|
|
1236
|
-
.fit-contain (m,l,xl) | object fit containt
|
|
1237
|
-
|
|
1238
|
-
.t[0-10] (m,l,xl) | top
|
|
1239
|
-
.b[0-10] (m,l,xl) | bottom
|
|
1240
|
-
.z[0-10] (m,l,xl) | z-index
|
|
1241
|
-
.op[0-10] (m,l,xl) | opacity
|
|
1242
|
-
|
|
1243
|
-
.ratio1x1 (m,l,xl)
|
|
1244
|
-
.ratio2x1 (m,l,xl)
|
|
1245
|
-
.ratio3x1 (m,l,xl)
|
|
1246
|
-
.ratio4x1 (m,l,xl)
|
|
1247
|
-
.ratio3x2 (m,l,xl)
|
|
1248
|
-
.ratio4x3 (m,l,xl)
|
|
1249
|
-
.ratio16x9 (m,l,xl)
|
|
1250
|
-
.ratio1x2 (m,l,xl)
|
|
1251
|
-
.ratio1x3 (m,l,xl)
|
|
1252
|
-
.ratio1x4 (m,l,xl)
|
|
1253
|
-
.ratio2x3 (m,l,xl)
|
|
1254
|
-
.ratio3x4 (m,l,xl)
|
|
1255
|
-
.ratio9x16 (m,l,xl)
|
|
1256
|
-
|
|
1257
|
-
.breakWord
|
|
1258
|
-
.visuallyHidden
|
|
1259
|
-
.invisible
|
|
1260
|
-
.scrollResponsive
|
|
1261
|
-
|
|
1262
|
-
.hidden =(s,m,l-xl)
|
|
1263
|
-
.hiddenNext =(s,m,l-xl)
|
|
1264
|
-
|
|
1265
|
-
.fulscreen | min width and min height 100vw/vh
|
|
1266
|
-
|
|
1267
|
-
.max (m,l,xl) | max width 100%
|
|
1268
|
-
|
|
1269
|
-
.w[10-190] step 10 (m,l,xl) | width
|
|
1270
|
-
.w[200-380] step 20 (m,l,xl)
|
|
1271
|
-
.w[400-1600] step 100 (m,l,xl)
|
|
1272
|
-
|
|
1273
|
-
.max[10-190] step 10 (m,l,xl) | max width
|
|
1274
|
-
.max[200-380] step 20 (m,l,xl)
|
|
1275
|
-
.max[400-1600] step 100 (m,l,xl)
|
|
1276
|
-
|
|
1277
|
-
.min[10-190] step 10 (m,l,xl) | min width
|
|
1278
|
-
.min[200-380] step 20 (m,l,xl)
|
|
1279
|
-
.min[400-1600] step 100 (m,l,xl)
|
|
1280
|
-
|
|
1281
|
-
.block (m,l,xl)
|
|
1282
|
-
.inline (m,l,xl)
|
|
1283
|
-
.inlineBlock (m,l,xl)
|
|
1284
|
-
|
|
1285
|
-
.al (m,l,xl) | aligh left
|
|
1286
|
-
.ar (m,l,xl) | align right
|
|
1287
|
-
.ac (m,l,xl) | align center
|
|
1288
|
-
.aj (m,l,xl) | align justify
|
|
1289
|
-
|
|
1290
|
-
.m[0-10] (m,l,xl) | margin
|
|
1291
|
-
.mx[0-10] (m,l,xl) | margin x
|
|
1292
|
-
.my[0-10] (m,l,xl) | margin y
|
|
1293
|
-
.mt[0-10] (m,l,xl) | margin top
|
|
1294
|
-
.mb[0-10] (m,l,xl) | margin bottom
|
|
1295
|
-
.ml[0-10] (m,l,xl) | margin left
|
|
1296
|
-
.mr[0-10] (m,l,xl) | margin right
|
|
1297
|
-
|
|
1298
|
-
.ma (m,l,xl) | margin auto
|
|
1299
|
-
.mxa (m,l,xl)
|
|
1300
|
-
.mya (m,l,xl)
|
|
1301
|
-
.mta (m,l,xl)
|
|
1302
|
-
.mba (m,l,xl)
|
|
1303
|
-
.mla (m,l,xl)
|
|
1304
|
-
.mra (m,l,xl)
|
|
1305
|
-
|
|
1306
|
-
.p[0-10] (m,l,xl) | padding
|
|
1307
|
-
.px[0-10] (m,l,xl) | padding x
|
|
1308
|
-
.py[0-10] (m,l,xl) | padding y
|
|
1309
|
-
.pt[0-10] (m,l,xl) | padding top
|
|
1310
|
-
.pb[0-10] (m,l,xl) | padding bottom
|
|
1311
|
-
.pl[0-10] (m,l,xl) | padding left
|
|
1312
|
-
.pr[0-10] (m,l,xl) | padding right
|
|
1313
|
-
|
|
1314
|
-
.gap[0-10] (m,l,xl)
|
|
1315
|
-
.gapx[0-10] (m,l,xl)
|
|
1316
|
-
.gapy[0-10] (m,l,xl)
|
|
1317
|
-
|
|
1318
|
-
.r[0-10] (m,l,xl) | radius
|
|
1319
|
-
.r100 (m,l,xl) | radius 100%
|
|
1320
|
-
|
|
1321
|
-
.sh[0-10] (m,l) | shadow
|
|
1322
|
-
|
|
1323
|
-
.o[0-12] (m,l,xl) | order
|
|
1324
|
-
.noPrint</pre>
|
|
1325
|
-
|
|
1326
|
-
<h3>Variables</h3>
|
|
1327
|
-
<pre class="fs14 mono">
|
|
1328
|
-
--container-max-width: 1600px;
|
|
1329
|
-
|
|
1330
|
-
--shadow-1: 0 2px 4px #00000018;
|
|
1331
|
-
--shadow-2: 0 4px 8px #00000018;
|
|
1332
|
-
--shadow-3: 0 6px 12px #00000018;
|
|
1333
|
-
--shadow-4: 0 8px 16px #00000018;
|
|
1334
|
-
--shadow-5: 0 10px 20px #00000018;
|
|
1335
|
-
--shadow-6: 0 12px 24px #00000018;
|
|
1336
|
-
--shadow-7: 0 14px 28px #00000018;
|
|
1337
|
-
--shadow-8: 0 16px 32px #00000018;
|
|
1338
|
-
--shadow-9: 0 18px 36px #00000018;
|
|
1339
|
-
--shadow-10: 0 20px 40px #00000018;</pre>
|
|
1340
|
-
|
|
1341
|
-
<h3>Shadows</h3>
|
|
1342
|
-
<div class="grid g1 m:g2 l:g3 gap6">
|
|
1343
|
-
<div class="c1 p6 r4 sh1">
|
|
1344
|
-
--shadow-1
|
|
1345
|
-
</div>
|
|
1346
|
-
<div class="c1 p6 r4 sh2">
|
|
1347
|
-
--shadow-2
|
|
1348
|
-
</div>
|
|
1349
|
-
<div class="c1 p6 r4 sh3">
|
|
1350
|
-
--shadow-3
|
|
1351
|
-
</div>
|
|
1352
|
-
<div class="c1 p6 r4 sh4">
|
|
1353
|
-
--shadow-4
|
|
1354
|
-
</div>
|
|
1355
|
-
<div class="c1 p6 r4 sh5">
|
|
1356
|
-
--shadow-5
|
|
1357
|
-
</div>
|
|
1358
|
-
<div class="c1 p6 r4 sh6">
|
|
1359
|
-
--shadow-6
|
|
1360
|
-
</div>
|
|
1361
|
-
<div class="c1 p6 r4 sh7">
|
|
1362
|
-
--shadow-7
|
|
1363
|
-
</div>
|
|
1364
|
-
<div class="c1 p6 r4 sh8">
|
|
1365
|
-
--shadow-8
|
|
1366
|
-
</div>
|
|
1367
|
-
<div class="c1 p6 r4 sh9">
|
|
1368
|
-
--shadow-9
|
|
1369
|
-
</div>
|
|
1370
|
-
<div class="c1 p6 r4 sh10">
|
|
1371
|
-
--shadow-10
|
|
1372
|
-
</div>
|
|
1373
|
-
</div>
|
|
1374
|
-
</div>
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
<div x-modal="modalModal" class="modal--hash" data-window-class="max1000">
|
|
1379
|
-
<h2>Modals</h2>
|
|
1380
|
-
|
|
1381
|
-
<nav class="modalNavigation sticky unselectable">
|
|
1382
|
-
<div class="modalNavigation-inner">
|
|
1383
|
-
<a x-scrollto='{"parent": "#modalModal .modal-outer", "target": "#modalModalMain", "offset": 100}'>Описание</a>
|
|
1384
|
-
<a x-scrollto='{"parent": "#modalModal .modal-outer", "target": "#modalModalApi", "offset": 100}'>API</a>
|
|
1385
|
-
<a x-scrollto='{"parent": "#modalModal .modal-outer", "target": "#modalModalEvents", "offset": 100}'>События</a>
|
|
1386
|
-
<a x-scrollto='{"parent": "#modalModal .modal-outer", "target": "#modalModalCss", "offset": 100}'>CSS</a>
|
|
1387
|
-
<a x-scrollto='{"parent": "#modalModal .modal-outer", "target": "#modalModalExamples", "offset": 100}'>Примеры</a>
|
|
1388
|
-
</div>
|
|
1389
|
-
</nav>
|
|
1390
|
-
|
|
1391
|
-
<div id="modalModalMain">
|
|
1392
|
-
<p>Универсальные модальные окна.</p>
|
|
1393
|
-
<p>Вызов модального окна:</p>
|
|
1394
|
-
<div class="codeBlock">
|
|
1395
|
-
<code><a x-modal-open="myModal">Open modal</a></code>
|
|
1396
|
-
</div>
|
|
1397
|
-
<p>Шаблон модального окна:</p>
|
|
1398
|
-
<div class="codeBlock">
|
|
1399
|
-
<code><div x-modal="myModal" class="[custom-classes]"</code>
|
|
1400
|
-
<code> data-window-class="[modal-window-classes]"></code>
|
|
1401
|
-
<code> <p>Hello modal!</p></code>
|
|
1402
|
-
<code> <p><a class="button modal-close">Close</a></p> — optional</code>
|
|
1403
|
-
<code></div></code>
|
|
1404
|
-
</div>
|
|
1405
|
-
<p>
|
|
1406
|
-
<code>[custom-classes]</code> — классы, которые будут добавлены элементу .modal после генерации модального окна на основе шаблона.<br>
|
|
1407
|
-
<code>[modal-window-classes]</code> — классы, которые будут добавлены элементу .modal-window после генерации модального окна на основе шаблона.<br>
|
|
1408
|
-
<code>.uniq</code> — класс, закрывающий все открытые окна при открытии данного окна, добавляется в <code>[custom-classes]</code>.<br>
|
|
1409
|
-
<code>.hash</code> — если класс добавлен в <code>[custom-classes]</code>, окна, открываясь, будут добавлять хэш в конец адресной строки. Также при загрузке страницы с хэшем модального окна, оно автоматически будет открываться.
|
|
1410
|
-
</p>
|
|
1411
|
-
<p>Эффекты в <code>[custom-classes]</code>:</p>
|
|
1412
|
-
<div class="codeBlock">
|
|
1413
|
-
<code>.effectIn</code>
|
|
1414
|
-
<code>.effectOut</code>
|
|
1415
|
-
<code>.effectUp</code>
|
|
1416
|
-
<code>.effectDown</code>
|
|
1417
|
-
<code>.effectLeft</code>
|
|
1418
|
-
<code>.effectRight</code>
|
|
1419
|
-
</div>
|
|
1420
|
-
<p>
|
|
1421
|
-
После инициализации, шаблон модального окна преобразуется в готовый код, который добавляется в конце страницы перед <code></body></code>. Если это поведение необходимо изменить, добавьте класс <code>.modal-here</code> элементу, в который вы хотите инициализировать модальные окна.
|
|
1422
|
-
</p>
|
|
1423
|
-
<p>Код инициализированного модального окна:</p>
|
|
1424
|
-
<div class="codeBlock">
|
|
1425
|
-
<code><div id="myModal" class="modal [custom-classes]"></code>
|
|
1426
|
-
<code> <div class="modal-overlay"></div></code>
|
|
1427
|
-
<code> <div class="modal-outer"></code>
|
|
1428
|
-
<code> <div class="modal-inner"></code>
|
|
1429
|
-
<code> <div class="modal-window [modal-window-classes]"></code>
|
|
1430
|
-
<code> ...</code>
|
|
1431
|
-
<code> Содержимое, которое было внутри</code>
|
|
1432
|
-
<code> тега с классом .modal-content</code>
|
|
1433
|
-
<code> ...</code>
|
|
1434
|
-
<code> <div class="modal-rail"></code>
|
|
1435
|
-
<code> <a role="button" class="modal-close"></a></code>
|
|
1436
|
-
<code> </div></code>
|
|
1437
|
-
<code> </div></code>
|
|
1438
|
-
<code> </div></code>
|
|
1439
|
-
<code> </div></code>
|
|
1440
|
-
<code></div></code>
|
|
1441
|
-
</div>
|
|
1442
|
-
</div>
|
|
1443
|
-
|
|
1444
|
-
<div id="modalModalApi" class="mt5">
|
|
1445
|
-
<h3>API</h3>
|
|
1446
|
-
<table class="dataTable">
|
|
1447
|
-
<tr>
|
|
1448
|
-
<th width="40%">Метод</th>
|
|
1449
|
-
<th width="60%">Описание</th>
|
|
1450
|
-
</tr>
|
|
1451
|
-
<tr>
|
|
1452
|
-
<td><code>x.modal.show(id)</code></td>
|
|
1453
|
-
<td>Показывает модальное окно</td>
|
|
1454
|
-
</tr>
|
|
1455
|
-
<tr>
|
|
1456
|
-
<td><code>x.modal.hide(id)</code></td>
|
|
1457
|
-
<td>Скрывает модальное окно</td>
|
|
1458
|
-
</tr>
|
|
1459
|
-
<tr>
|
|
1460
|
-
<td><code>x.modal.hideAll()</code></td>
|
|
1461
|
-
<td>Скрывает все модальные окна</td>
|
|
1462
|
-
</tr>
|
|
1463
|
-
<tr>
|
|
1464
|
-
<td><code>x.modal.isActive(id)</code></td>
|
|
1465
|
-
<td>Проверяет активность модального окна</td>
|
|
1466
|
-
</tr>
|
|
1467
|
-
</table>
|
|
1468
|
-
</div>
|
|
1469
|
-
|
|
1470
|
-
<div id="modalModalEvents" class="mt5">
|
|
1471
|
-
<h3>События</h3>
|
|
1472
|
-
<table class="dataTable">
|
|
1473
|
-
<tr>
|
|
1474
|
-
<th width="40%">Событие</th>
|
|
1475
|
-
<th width="60%">Описание</th>
|
|
1476
|
-
</tr>
|
|
1477
|
-
<tr>
|
|
1478
|
-
<td><code>modal:ready</code></td>
|
|
1479
|
-
<td>Модальное окно открыто, но еще не показано</td>
|
|
1480
|
-
</tr>
|
|
1481
|
-
<tr>
|
|
1482
|
-
<td><code>modal:open</code></td>
|
|
1483
|
-
<td>Модальное окно открыто и показано</td>
|
|
1484
|
-
</tr>
|
|
1485
|
-
<tr>
|
|
1486
|
-
<td><code>modal:close</code></td>
|
|
1487
|
-
<td>Модальное окно закрыть</td>
|
|
1488
|
-
</tr>
|
|
1489
|
-
</table>
|
|
1490
|
-
|
|
1491
|
-
<p>Пример обработки:</p>
|
|
1492
|
-
<div class="codeBlock">
|
|
1493
|
-
<code>let modal = document.getElementById('modal-test')</code>
|
|
1494
|
-
<code>modal.addEventListener('modal:ready', (event) => { ... })</code>
|
|
1495
|
-
<code>modal.addEventListener('modal:open', (event) => { ... })</code>
|
|
1496
|
-
<code>modal.addEventListener('modal:close', (event) => { ... })</code>
|
|
1497
|
-
</div>
|
|
1498
|
-
</div>
|
|
1499
|
-
|
|
1500
|
-
<div id="modalModalCss" class="mt5">
|
|
1501
|
-
<h3>CSS</h3>
|
|
1502
|
-
<table class="dataTable">
|
|
1503
|
-
<tr>
|
|
1504
|
-
<th width="40%">Переменная</th>
|
|
1505
|
-
<th width="60%">Значение по умолчанию</th>
|
|
1506
|
-
</tr>
|
|
1507
|
-
<tr>
|
|
1508
|
-
<td><code>--modal-margin-top</code></td>
|
|
1509
|
-
<td><code>3vw</code></td>
|
|
1510
|
-
</tr>
|
|
1511
|
-
<tr>
|
|
1512
|
-
<td><code>--modal-margin-bottom</code></td>
|
|
1513
|
-
<td><code>3vw</code></td>
|
|
1514
|
-
</tr>
|
|
1515
|
-
<tr>
|
|
1516
|
-
<td><code>--modal-margin-left</code></td>
|
|
1517
|
-
<td><code>3vw</code></td>
|
|
1518
|
-
</tr>
|
|
1519
|
-
<tr>
|
|
1520
|
-
<td><code>--modal-margin-right</code></td>
|
|
1521
|
-
<td><code>3vw</code></td>
|
|
1522
|
-
</tr>
|
|
1523
|
-
<tr>
|
|
1524
|
-
<td><code>--modal-padding-top</code></td>
|
|
1525
|
-
<td><code>clamp(2.5rem, 4vw, 5rem)</code></td>
|
|
1526
|
-
</tr>
|
|
1527
|
-
<tr>
|
|
1528
|
-
<td><code>--modal-padding-bottom</code></td>
|
|
1529
|
-
<td><code>clamp(2.5rem, 4vw, 5rem)</code></td>
|
|
1530
|
-
</tr>
|
|
1531
|
-
<tr>
|
|
1532
|
-
<td><code>--modal-padding-left</code></td>
|
|
1533
|
-
<td><code>clamp(4rem, 4vw, 5rem)</code></td>
|
|
1534
|
-
</tr>
|
|
1535
|
-
<tr>
|
|
1536
|
-
<td><code>--modal-padding-right</code></td>
|
|
1537
|
-
<td><code>clamp(4rem, 4vw, 5rem)</code></td>
|
|
1538
|
-
</tr>
|
|
1539
|
-
<tr>
|
|
1540
|
-
<td><code>--modal-background</code></td>
|
|
1541
|
-
<td><code>#fff</code></td>
|
|
1542
|
-
</tr>
|
|
1543
|
-
<tr>
|
|
1544
|
-
<td><code>--modal-box-shadow</code></td>
|
|
1545
|
-
<td><code>0 10px 40px #00000044</code></td>
|
|
1546
|
-
</tr>
|
|
1547
|
-
<tr>
|
|
1548
|
-
<td><code>--modal-border-radius</code></td>
|
|
1549
|
-
<td><code>1.6rem</code></td>
|
|
1550
|
-
</tr>
|
|
1551
|
-
<tr>
|
|
1552
|
-
<td><code>--modal-closer-area</code></td>
|
|
1553
|
-
<td><code>4rem</code></td>
|
|
1554
|
-
</tr>
|
|
1555
|
-
<tr>
|
|
1556
|
-
<td><code>--modal-closer-size</code></td>
|
|
1557
|
-
<td><code>2.6rem</code></td>
|
|
1558
|
-
</tr>
|
|
1559
|
-
<tr>
|
|
1560
|
-
<td><code>--modal-closer-width</code></td>
|
|
1561
|
-
<td><code>0.2rem</code></td>
|
|
1562
|
-
</tr>
|
|
1563
|
-
<tr>
|
|
1564
|
-
<td><code>--modal-closer-color</code></td>
|
|
1565
|
-
<td><code>#ccc</code></td>
|
|
1566
|
-
</tr>
|
|
1567
|
-
<tr>
|
|
1568
|
-
<td><code>--modal-closer-color-hover</code></td>
|
|
1569
|
-
<td><code>#f00</code></td>
|
|
1570
|
-
</tr>
|
|
1571
|
-
<tr>
|
|
1572
|
-
<td><code>--modal-overlay-background-color</code></td>
|
|
1573
|
-
<td><code>#00000066</code></td>
|
|
1574
|
-
</tr>
|
|
1575
|
-
</table>
|
|
1576
|
-
</div>
|
|
1577
|
-
|
|
1578
|
-
<div id="modalModalExamples" class="mt5">
|
|
1579
|
-
<h3>Примеры</h3>
|
|
1580
|
-
<p class="flex gap3">
|
|
1581
|
-
<a role="button" class="button" x-modal-open="modalTest">Тестовое окошко</a>
|
|
1582
|
-
<a role="button" class="button" onclick="x.modal.show('modalTest')"><code>x.modal.show('modalTest')</code></a>
|
|
1583
|
-
<a role="button" class="button" x-modal-open="modalUniq">Уникальное окно</a>
|
|
1584
|
-
</p>
|
|
1585
|
-
|
|
1586
|
-
<iframe height="720" style="width: 100%;" scrolling="no" title="Auto / Modal init" src="https://codepen.io/andreyshpigunov/embed/vYXZGpm?height=700&theme-id=dark&default-tab=html" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"></iframe>
|
|
1587
|
-
<br>
|
|
1588
|
-
<br>
|
|
1589
|
-
<iframe height="800" style="width: 100%;" scrolling="no" title="Auto / Modals examples" src="https://codepen.io/andreyshpigunov/embed/KKgqzBE?height=800&theme-id=dark&default-tab=html" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"></iframe>
|
|
1590
|
-
</div>
|
|
1591
|
-
</div>
|
|
1592
|
-
|
|
1593
|
-
<div x-modal="modalTest" class="">
|
|
1594
|
-
<h2>Тестовое окошко</h2>
|
|
1595
|
-
<p>Вот так просто оно выглядит. Данная страница тоже показана в модальном окне.</p>
|
|
1596
|
-
<a class="button modal-close">Закрыть</a>
|
|
1597
|
-
</div>
|
|
1598
|
-
|
|
1599
|
-
<div x-modal="modalUniq" class="modal--uniq">
|
|
1600
|
-
<h2>Уникальное окно</h2>
|
|
1601
|
-
<p>Открыв это окно, вы закрыли все остальные окна на странице. Включая окно со страницей документации.</p>
|
|
1602
|
-
</div>
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
<div x-modal="modalScroll" class="modal--hash" data-window-class="max1000">
|
|
1606
|
-
<h2>Scroll</h2>
|
|
1607
|
-
|
|
1608
|
-
<nav class="modalNavigation sticky unselectable">
|
|
1609
|
-
<div class="modalNavigation-inner">
|
|
1610
|
-
<a x-scrollto='{"parent": "#modalScroll .modal-outer", "target": "#modalScrollMain", "offset": 100}'>Описание</a>
|
|
1611
|
-
<a x-scrollto='{"parent": "#modalScroll .modal-outer", "target": "#modalScrollApi", "offset": 100}'>API</a>
|
|
1612
|
-
<a x-scrollto='{"parent": "#modalScroll .modal-outer", "target": "#modalScrollParams", "offset": 100}'>Параметры</a>
|
|
1613
|
-
</div>
|
|
1614
|
-
</nav>
|
|
1615
|
-
|
|
1616
|
-
<div id="modalScrollMain">
|
|
1617
|
-
<p>Прокрутка страницы к указанному элементу.</p>
|
|
1618
|
-
<p>Краткий вызов:</p>
|
|
1619
|
-
<div class="codeBlock">
|
|
1620
|
-
<code><div id="top" class="top"></div></code>
|
|
1621
|
-
<code><a x-scrollto="top">Наверх</a></code>
|
|
1622
|
-
<code><a x-scrollto="#top">Наверх</a></code>
|
|
1623
|
-
</div>
|
|
1624
|
-
<p>Вызов с <a class="link link--dashed" x-scrollto='{"parent": "#modalScroll .modal-outer", "target": "#modalScrollParams"}'>параметрами</a> в формате JSON:</p>
|
|
1625
|
-
<div class="codeBlock">
|
|
1626
|
-
<code><a x-scrollto='{</code>
|
|
1627
|
-
<code> "parent": window,</code>
|
|
1628
|
-
<code> "target": "#top",</code>
|
|
1629
|
-
<code> "duration": 400,</code>
|
|
1630
|
-
<code> "offset": 0,</code>
|
|
1631
|
-
<code> "classActive": "active",</code>
|
|
1632
|
-
<code> "hash": false</code>
|
|
1633
|
-
<code>}'>Наверх</a></code>
|
|
1634
|
-
</div>
|
|
1635
|
-
</div>
|
|
1636
|
-
|
|
1637
|
-
<div id="modalScrollApi" class="mt5">
|
|
1638
|
-
<h3>API</h3>
|
|
1639
|
-
<p>Варианты вызовов:</p>
|
|
1640
|
-
<div class="codeBlock">
|
|
1641
|
-
<code>x.scroll.to('top')</code>
|
|
1642
|
-
<code>x.scroll.to('#top')</code>
|
|
1643
|
-
<code>let top = document.getElementById('top')</code>
|
|
1644
|
-
<code>x.scroll.to(top)</code>
|
|
1645
|
-
<code>x.scroll.to({</code>
|
|
1646
|
-
<code> parent: window,</code>
|
|
1647
|
-
<code> target: "#top",</code>
|
|
1648
|
-
<code> duration: 400,</code>
|
|
1649
|
-
<code> offset: 0,</code>
|
|
1650
|
-
<code> classActive: "active",</code>
|
|
1651
|
-
<code> hash: false</code>
|
|
1652
|
-
<code>})</code>
|
|
1653
|
-
</div>
|
|
1654
|
-
<p>Метод поддерживает асинхронный вызов:</p>
|
|
1655
|
-
<div class="codeBlock">
|
|
1656
|
-
<code>x.scroll.to(element).then((e) => { alert('Готово!') })</code>
|
|
1657
|
-
</div>
|
|
1658
|
-
</div>
|
|
1659
|
-
|
|
1660
|
-
<div id="modalScrollParams" class="mt5">
|
|
1661
|
-
<h3>Параметры вызова</h3>
|
|
1662
|
-
<table class="dataTable">
|
|
1663
|
-
<tr>
|
|
1664
|
-
<th width="20%">Параметр</th>
|
|
1665
|
-
<th width="20%">Формат</th>
|
|
1666
|
-
<th width="20%">По умолчанию</th>
|
|
1667
|
-
<th width="40%">Описание</th>
|
|
1668
|
-
</tr>
|
|
1669
|
-
<tr>
|
|
1670
|
-
<td><code>parent</code></td>
|
|
1671
|
-
<td><code>string, element</code></td>
|
|
1672
|
-
<td><code>window</code></td>
|
|
1673
|
-
<td><code>id</code>, селектор или элемент.</td>
|
|
1674
|
-
</tr>
|
|
1675
|
-
<tr>
|
|
1676
|
-
<td><code>target</code></td>
|
|
1677
|
-
<td><code>string, element</code></td>
|
|
1678
|
-
<td><code></code></td>
|
|
1679
|
-
<td>
|
|
1680
|
-
<code>id</code>, селектор или элемент, к которому нужно совершить прокрутку.<br>
|
|
1681
|
-
<b>Обязательный</b>
|
|
1682
|
-
</td>
|
|
1683
|
-
</tr>
|
|
1684
|
-
<tr>
|
|
1685
|
-
<td><code>duration</code></td>
|
|
1686
|
-
<td><code>int</code></td>
|
|
1687
|
-
<td><code>400</code></td>
|
|
1688
|
-
<td>Продолжительность в мс.</td>
|
|
1689
|
-
</tr>
|
|
1690
|
-
<tr>
|
|
1691
|
-
<td><code>offset</code></td>
|
|
1692
|
-
<td><code>int</code></td>
|
|
1693
|
-
<td><code>0</code></td>
|
|
1694
|
-
<td>Отступ от верха окна при окончании прокрутки в px.</td>
|
|
1695
|
-
</tr>
|
|
1696
|
-
<tr>
|
|
1697
|
-
<td><code>classActive</code></td>
|
|
1698
|
-
<td><code>string</code></td>
|
|
1699
|
-
<td><code>"active"</code></td>
|
|
1700
|
-
<td>Класс, добавляемый к элементу, когда цель прокрутки находится в зоне видимости.</td>
|
|
1701
|
-
</tr>
|
|
1702
|
-
<tr>
|
|
1703
|
-
<td><code>hash</code></td>
|
|
1704
|
-
<td><code>bool</code></td>
|
|
1705
|
-
<td><code>false</code></td>
|
|
1706
|
-
<td>Добавлять хэш в адресной строке после прокрутки или нет.</td>
|
|
1707
|
-
</tr>
|
|
1708
|
-
</table>
|
|
1709
|
-
</div>
|
|
1710
|
-
</div>
|
|
1711
|
-
|
|
1712
|
-
<div x-modal="modalAnimate" class="modal--hash" data-window-class="max1000">
|
|
1713
|
-
<h2>Animate</h2>
|
|
1714
|
-
|
|
1715
|
-
<nav class="modalNavigation sticky unselectable">
|
|
1716
|
-
<div class="modalNavigation-inner">
|
|
1717
|
-
<a x-scrollto='{"parent": "#modalAnimate .modal-outer", "target": "#modalAnimateMain", "offset": 100}'>About</a>
|
|
1718
|
-
<a x-scrollto='{"parent": "#modalAnimate .modal-outer", "target": "#modalAnimateParams", "offset": 100}'>Params</a>
|
|
1719
|
-
<a x-scrollto='{"parent": "#modalAnimate .modal-outer", "target": "#modalAnimateExamples", "offset": 100}'>Example</a>
|
|
1720
|
-
</div>
|
|
1721
|
-
</nav>
|
|
1722
|
-
|
|
1723
|
-
<div id="modalAnimateMain" class="mt5">
|
|
1724
|
-
<p>Animating elements when scrolling the page.</p>
|
|
1725
|
-
<p>Example of use with a trigger:</p>
|
|
1726
|
-
<div class="codeBlock">
|
|
1727
|
-
<code><div id="trigger"></div></code>
|
|
1728
|
-
<code><div class="element" x-animate='{</code>
|
|
1729
|
-
<code> "parent": window,</code>
|
|
1730
|
-
<code> "trigger": "#trigger",</code>
|
|
1731
|
-
<code> "start": "120vh",</code>
|
|
1732
|
-
<code> "end": "0vh",</code>
|
|
1733
|
-
<code> "functionName": "coverOut",</code>
|
|
1734
|
-
<code> "class": "fixed",</code>
|
|
1735
|
-
<code> "classRemove": true</code>
|
|
1736
|
-
<code>}'>...</div></code>
|
|
1737
|
-
</div>
|
|
1738
|
-
</div>
|
|
1739
|
-
|
|
1740
|
-
<div id="modalAnimateParams" class="mt5">
|
|
1741
|
-
<h3>Params</h3>
|
|
1742
|
-
<table class="dataTable">
|
|
1743
|
-
<tr>
|
|
1744
|
-
<th width="25%">Param</th>
|
|
1745
|
-
<th width="25%">Type</th>
|
|
1746
|
-
<th width="50%">Description</th>
|
|
1747
|
-
</tr>
|
|
1748
|
-
<tr>
|
|
1749
|
-
<td><code>parent</code></td>
|
|
1750
|
-
<td><code>string</code></td>
|
|
1751
|
-
<td>Scrolled parent element selector Default: <code>window</code>.</td>
|
|
1752
|
-
</tr>
|
|
1753
|
-
<tr>
|
|
1754
|
-
<td><code>trigger</code></td>
|
|
1755
|
-
<td><code>string</code></td>
|
|
1756
|
-
<td>The element selector, whose position we are tracking when scrolling. If there is no <code>trigger</code>, the trigger is the animated element itself.</td>
|
|
1757
|
-
</tr>
|
|
1758
|
-
<tr>
|
|
1759
|
-
<td><code>start</code></td>
|
|
1760
|
-
<td><code>string</code></td>
|
|
1761
|
-
<td>
|
|
1762
|
-
The starting point of the animation (the distance from the top of the window in px, vh or %).<br>
|
|
1763
|
-
<b>Required</b>
|
|
1764
|
-
</td>
|
|
1765
|
-
</tr>
|
|
1766
|
-
<tr>
|
|
1767
|
-
<td><code>end</code></td>
|
|
1768
|
-
<td><code>string</code></td>
|
|
1769
|
-
<td>
|
|
1770
|
-
Animation end point (distance from the top of the window in px, vh or %).<br>
|
|
1771
|
-
<b>Required</b>
|
|
1772
|
-
</td>
|
|
1773
|
-
</tr>
|
|
1774
|
-
<tr>
|
|
1775
|
-
<td><code>functionName</code></td>
|
|
1776
|
-
<td><code>string</code></td>
|
|
1777
|
-
<td>
|
|
1778
|
-
The name of the global function that is performed when the tracked element is moved between the start and end points of the animation. The function receives an object with the <code>progress</code> parameter, which varies from 0 to 1.<br>
|
|
1779
|
-
<b>Required</b>
|
|
1780
|
-
</td>
|
|
1781
|
-
</tr>
|
|
1782
|
-
<tr>
|
|
1783
|
-
<td><code>class</code></td>
|
|
1784
|
-
<td><code>string</code></td>
|
|
1785
|
-
<td>A class that is added to an animated element when it is in the process of being animated.</td>
|
|
1786
|
-
</tr>
|
|
1787
|
-
<tr>
|
|
1788
|
-
<td><code>classRemove</code></td>
|
|
1789
|
-
<td><code>bool = false</code></td>
|
|
1790
|
-
<td>To delete or not the class set by the previous parameter after the end of the animation.</td>
|
|
1791
|
-
</tr>
|
|
1792
|
-
</table>
|
|
1793
|
-
<p>If the animation is performed in a separate scrollable element, you need to add the <code>.animate-scrollarea</code> class to this element.</p>
|
|
1794
|
-
</div>
|
|
1795
|
-
|
|
1796
|
-
<div id="modalAnimateExamples" class="mt5">
|
|
1797
|
-
<h3>Example</h3>
|
|
1798
|
-
<iframe height="400" style="width: 100%;" scrolling="no" title="Auto / Animation example" src="https://codepen.io/andreyshpigunov/embed/jOMwrGE?height=400&theme-id=dark&default-tab=result" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"></iframe>
|
|
1799
|
-
</div>
|
|
1800
|
-
</div>
|
|
1801
|
-
|
|
1802
|
-
<div x-modal="modalSheets" class="modal--hash" data-window-class="max1000">
|
|
1803
|
-
<h2>Sheets</h2>
|
|
1804
|
-
|
|
1805
|
-
<nav class="modalNavigation sticky unselectable">
|
|
1806
|
-
<div class="modalNavigation-inner">
|
|
1807
|
-
<a x-scrollto='{"parent": "#modalSheets .modal-outer", "target": "#modalSheetsMain", "offset": 100}'>Описание</a>
|
|
1808
|
-
<a x-scrollto='{"parent": "#modalSheets .modal-outer", "target": "#modalSheetsApi", "offset": 100}'>API</a>
|
|
1809
|
-
<a x-scrollto='{"parent": "#modalSheets .modal-outer", "target": "#modalSheetsExamples", "offset": 100}'>Примеры</a>
|
|
1810
|
-
</div>
|
|
1811
|
-
</nav>
|
|
1812
|
-
|
|
1813
|
-
<div id="modalSheetsMain">
|
|
1814
|
-
<p>Создает табы с содержимым.</p>
|
|
1815
|
-
<p>Шаблон:</p>
|
|
1816
|
-
<div class="codeBlock">
|
|
1817
|
-
<code><div x-sheets></code>
|
|
1818
|
-
<code> <a x-sheet-open="sheetA" class="active">Sheet</a></code>
|
|
1819
|
-
<code> <a x-sheet-open="sheetB">Sheet</a></code>
|
|
1820
|
-
<code> <div x-sheet="sheetA">Sheet content</div></code>
|
|
1821
|
-
<code> <div x-sheet="sheetB">Sheet content</div></code>
|
|
1822
|
-
<code></div></code>
|
|
1823
|
-
</div>
|
|
1824
|
-
<p>Первый таб в шаблоне активен по умолчанию, для этого добавлен класс <code>.active</code>.</p>
|
|
1825
|
-
<p>Табы и их содержимое можно свободно вкладывать в другие теги в пределах <code>x-sheets</code>.</p>
|
|
1826
|
-
</div>
|
|
1827
|
-
|
|
1828
|
-
<div id="modalSheetsApi" class="mt5">
|
|
1829
|
-
<h3>API</h3>
|
|
1830
|
-
<table class="dataTable">
|
|
1831
|
-
<tr>
|
|
1832
|
-
<th width="40%">Метод</th>
|
|
1833
|
-
<th width="60%">Описание</th>
|
|
1834
|
-
</tr>
|
|
1835
|
-
<tr>
|
|
1836
|
-
<td><code>x.sheets.show(x-sheet)</code></td>
|
|
1837
|
-
<td>Показывает нужный таб</td>
|
|
1838
|
-
</tr>
|
|
1839
|
-
</table>
|
|
1840
|
-
</div>
|
|
1841
|
-
|
|
1842
|
-
<div id="modalSheetsExamples" class="mt5">
|
|
1843
|
-
<h3>Примеры</h3>
|
|
1844
|
-
<iframe height="300" style="width: 100%;" scrolling="no" title="Auto / Tab sheets" src="https://codepen.io/andreyshpigunov/embed/qBpJaeO?theme-id=dark&default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true"></iframe>
|
|
1845
|
-
<br>
|
|
1846
|
-
<br>
|
|
1847
|
-
<div class="sheets">
|
|
1848
|
-
<div>
|
|
1849
|
-
<a role="button" class="sheets-tab button" data-sheet="sheet1">Tab 1</a>
|
|
1850
|
-
<a role="button" class="sheets-tab button" data-sheet="sheet2">Tab 2</a>
|
|
1851
|
-
<a role="button" class="sheets-tab button" data-sheet="sheet3">Tab 3</a>
|
|
1852
|
-
</div>
|
|
1853
|
-
<div class="p2">
|
|
1854
|
-
<div id="sheet1" class="sheets-body">Body 1</div>
|
|
1855
|
-
<div id="sheet2" class="sheets-body">Body 2</div>
|
|
1856
|
-
<div id="sheet3" class="sheets-body">Body 3</div>
|
|
1857
|
-
</div>
|
|
1858
|
-
</div>
|
|
1859
|
-
</div>
|
|
1860
|
-
|
|
1861
|
-
</div>
|
|
1862
|
-
|
|
1863
|
-
<div x-modal="modalLoadmore" class="modal--hash" data-window-class="max1000">
|
|
1864
|
-
<h2>Loadmore</h2>
|
|
1865
|
-
|
|
1866
|
-
<nav class="modalNavigation sticky unselectable">
|
|
1867
|
-
<div class="modalNavigation-inner">
|
|
1868
|
-
<a x-scrollto='{"parent": "#modalLoadmore .modal-outer", "target": "#modalLoadmoreMain", "offset": 100}'>Описание</a>
|
|
1869
|
-
<a x-scrollto='{"parent": "#modalLoadmore .modal-outer", "target": "#modalLoadmoreParams", "offset": 100}'>Параметры</a>
|
|
1870
|
-
</div>
|
|
1871
|
-
</nav>
|
|
1872
|
-
|
|
1873
|
-
<div id="modalLoadmoreMain">
|
|
1874
|
-
<p>Загрузка данных при прокрутке до элемента. Можно использовать как бесконечную прокрутку, добавив элемент в конце списка и подгружая в него данные, по мере его появления.</p>
|
|
1875
|
-
<p>Пример использования с триггером:</p>
|
|
1876
|
-
<div class="codeBlock">
|
|
1877
|
-
<code><div data-loadmore='{</code>
|
|
1878
|
-
<code> "functionName": "load",</code>
|
|
1879
|
-
<code> "offset": 100</code>
|
|
1880
|
-
<code>}'></div></code>
|
|
1881
|
-
<code><script></code>
|
|
1882
|
-
<code> function load(page) { ... }</code>
|
|
1883
|
-
<code></script></code>
|
|
1884
|
-
</div>
|
|
1885
|
-
|
|
1886
|
-
<p>При появлении блока с data-loadmore в границах экрана, будет выполнена функция, имя который указано в functionName. Функции будет передан параметр page, значение которого увеличивается с каждым вызовом.</p>
|
|
1887
|
-
|
|
1888
|
-
<p>Остановить выполнение функции можно методом:</p>
|
|
1889
|
-
<div class="codeBlock">
|
|
1890
|
-
<code>x.loadmore.unwatch()</code>
|
|
1891
|
-
</div>
|
|
1892
|
-
</div>
|
|
1893
|
-
|
|
1894
|
-
<div id="modalLoadmoreParams" class="mt5">
|
|
1895
|
-
<h3>Параметры вызова</h3>
|
|
1896
|
-
<table class="dataTable">
|
|
1897
|
-
<tr>
|
|
1898
|
-
<th width="20%">Параметр</th>
|
|
1899
|
-
<th width="20%">Формат</th>
|
|
1900
|
-
<th width="20%">По умолчанию</th>
|
|
1901
|
-
<th width="40%">Описание</th>
|
|
1902
|
-
</tr>
|
|
1903
|
-
<tr>
|
|
1904
|
-
<td><code>functionName</code></td>
|
|
1905
|
-
<td><code>string</code></td>
|
|
1906
|
-
<td></td>
|
|
1907
|
-
<td>
|
|
1908
|
-
Имя функции, которую нужно выполнить.<br>
|
|
1909
|
-
<b>Обязательный</b>
|
|
1910
|
-
</td>
|
|
1911
|
-
</tr>
|
|
1912
|
-
<tr>
|
|
1913
|
-
<td><code>offset</code></td>
|
|
1914
|
-
<td><code>int</code></td>
|
|
1915
|
-
<td><code>0</code></td>
|
|
1916
|
-
<td>Смещение выполнения за границу экрана. Например, если указать 100, то функция выполнится, когда до появления элемента на экране останется 100 и менее пикселей.</td>
|
|
1917
|
-
</tr>
|
|
1918
|
-
</table>
|
|
1919
|
-
<p>Если анимация производится в отдельном прокручиваемом элементе, нужно добавить этому элементу класс <code>.animate-scrollarea</code>.</p>
|
|
1920
|
-
</div>
|
|
1921
|
-
</div>
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
<div x-modal="modalLazyload" class="modal--hash" data-window-class="max1000">
|
|
1925
|
-
<h2>Lazyload</h2>
|
|
1926
|
-
|
|
1927
|
-
<p>Отложенная загрузка изображений.</p>
|
|
1928
|
-
|
|
1929
|
-
<p>В настоящее время большинство браузеров поддерживает нативную «ленивую загрузку» <code>loading="lazy"</code>, используйте данный плагин только в случае крайней необходимости. Например, иногда нужно отследить загрузилось ли изображение.</p>
|
|
1930
|
-
|
|
1931
|
-
<p>Пример нативного кода:</p>
|
|
1932
|
-
<div class="codeBlock">
|
|
1933
|
-
<code><img src="image.jpg" data-srcset="..." alt="" loading="lazy"/></code>
|
|
1934
|
-
</div>
|
|
1935
|
-
|
|
1936
|
-
<p>Пример использования плагина:</p>
|
|
1937
|
-
<div class="codeBlock">
|
|
1938
|
-
<code><img class="lazyload" src="alpha.png" data-src="image.jpg" data-srcset="..." alt=""/></code>
|
|
1939
|
-
</div>
|
|
1940
|
-
|
|
1941
|
-
<p>После загрузки изображения с классом <code>.lazyload</code>, к нему добавится класс <code>.loaded</code>.</p>
|
|
1942
|
-
</div>
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
<div x-modal="modalAppear" class="modal--hash" data-window-class="max1000">
|
|
1946
|
-
<h2>Appear</h2>
|
|
1947
|
-
|
|
1948
|
-
<p>Добавляет классы <code>.appeared</code> и <code>.visible</code> на элементе, появившемся в зоне видимости.</p>
|
|
1949
|
-
|
|
1950
|
-
<p>Пример использования:</p>
|
|
1951
|
-
<div class="codeBlock">
|
|
1952
|
-
<code><div x-appear>...</div></code>
|
|
1953
|
-
</div>
|
|
1954
|
-
|
|
1955
|
-
<p>Когда элемент появится в зоне видимости, к нему добавятся 2 класса, <code>.appeared</code> и <code>.visible</code>. Класс <code>.appeared</code> останется навсегда, а класс <code>.visible</code> удалится при исчезновении элемента из зоны видимости.</p>
|
|
1956
|
-
</div>
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
<div x-modal="modalHover" class="modal--hash" data-window-class="max1000">
|
|
1960
|
-
<h2>Hover</h2>
|
|
1961
|
-
|
|
1962
|
-
<p>Синхронизирует наведение <code>.hover</code> у отдельно расположенных элементов, имеющих общую ссылку. Для активации элементам нужно добавить класс <code>.syncHover</code>.</p>
|
|
1963
|
-
|
|
1964
|
-
<p>Пример использования:</p>
|
|
1965
|
-
<div class="codeBlock">
|
|
1966
|
-
<code><div class="product"></code>
|
|
1967
|
-
<code> <div class="product-photo"></code>
|
|
1968
|
-
<code> <a href="/product/" class="syncHover"></code>
|
|
1969
|
-
<code> <img src="product.jpg" alt=""/></code>
|
|
1970
|
-
<code> </a></code>
|
|
1971
|
-
<code> <div></code>
|
|
1972
|
-
<code> <div class="product-title"></code>
|
|
1973
|
-
<code> <a href="/product/" class="syncHover">Товар</a></code>
|
|
1974
|
-
<code> </div></code>
|
|
1975
|
-
<code></div></code>
|
|
1976
|
-
</div>
|
|
1977
|
-
|
|
1978
|
-
<p>В данном примере при наведении на фото или название товара, обоим элементам <code><a></code> добавится класс <code>.hover</code>, так как у них одинаковая ссылка. Данный метод часто позволяет избежать нарушений в семантике, не оборачивая весь блок в тег <code><a></code>.</p>
|
|
1979
|
-
</div>
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
<div x-modal="modalDevice" class="modal--hash" data-window-class="max1000">
|
|
1983
|
-
<h2>Device</h2>
|
|
1984
|
-
|
|
1985
|
-
<p>Определяет устройство и браузер пользователя.</p>
|
|
1986
|
-
|
|
1987
|
-
<p>Использование:</p>
|
|
1988
|
-
<div class="codeBlock">
|
|
1989
|
-
<code>if (x.device.[name]) { ... }</code>
|
|
1990
|
-
</div>
|
|
1991
|
-
|
|
1992
|
-
<p>
|
|
1993
|
-
<code>name</code> — значения для проверки.<br>
|
|
1994
|
-
Браузеры: <code>ie</code>, <code>firefox</code>, <code>safari</code>, <code>webkit</code>, <code>chrome</code>, <code>opera</code><br>
|
|
1995
|
-
ОС и устройства: <code>windows</code>, <code>macos</code>, <code>linux</code>, <code>ios</code>, <code>ipad</code>, <code>ipod</code>, <code>iphone</code>, <code>android</code><br>
|
|
1996
|
-
Мобильность: <code>mobile</code>, <code>desktop</code><br>
|
|
1997
|
-
Поддержка js: <code>js</code>
|
|
1998
|
-
</p>
|
|
1999
|
-
|
|
2000
|
-
<p>Примеры:</p>
|
|
2001
|
-
<div class="codeBlock">
|
|
2002
|
-
<code>if (x.device.ie) { ... }</code>
|
|
2003
|
-
<code>if (x.device.windows) { ... }</code>
|
|
2004
|
-
<code>if (x.device.iphone) { ... }</code>
|
|
2005
|
-
<code>if (x.device.mobile) { ... }</code>
|
|
2006
|
-
<code>if (x.device.js) { ... }</code>
|
|
2007
|
-
</div>
|
|
2008
|
-
|
|
2009
|
-
<p>Определение размеров экрана:</p>
|
|
2010
|
-
<div class="codeBlock">
|
|
2011
|
-
<code>let width = x.device.width</code>
|
|
2012
|
-
<code>let height = x.device.height</code>
|
|
2013
|
-
</div>
|
|
2014
|
-
</div>
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
<div x-modal="modalLib" class="modal--hash" data-window-class="max1000">
|
|
2018
|
-
|
|
2019
|
-
<h2>Lib</h2>
|
|
2020
|
-
|
|
2021
|
-
<p>Набор полезных методов.</p>
|
|
2022
|
-
|
|
2023
|
-
<h3>Шорткаты</h3>
|
|
2024
|
-
|
|
2025
|
-
<div class="codeBlock">
|
|
2026
|
-
<code>qs: (s, o = document) => o.querySelector(s)</code>
|
|
2027
|
-
<code>qsa: (s, o = document) => o.querySelectorAll(s)</code>
|
|
2028
|
-
</div>
|
|
2029
|
-
|
|
2030
|
-
<p>Пример использования:</p>
|
|
2031
|
-
<div class="codeBlock">
|
|
2032
|
-
<code>x.lib.qs('.product-name')</code>
|
|
2033
|
-
<code>x.lib.qsa('.product-item')</code>
|
|
2034
|
-
</div>
|
|
2035
|
-
|
|
2036
|
-
<h3>Функции</h3>
|
|
2037
|
-
|
|
2038
|
-
<h4><code class="fs16">x.lib.hide(element)</code></h4>
|
|
2039
|
-
<p>
|
|
2040
|
-
Скрывает элемент, добавляя класс <code>.hidden</code>.<br>
|
|
2041
|
-
<code>element</code> — селектор или элемент.
|
|
2042
|
-
</p>
|
|
2043
|
-
|
|
2044
|
-
<h4><code class="fs16">x.lib.show(element)</code></h4>
|
|
2045
|
-
<p>
|
|
2046
|
-
Показывает элемент, убирая класс <code>.hidden</code>.<br>
|
|
2047
|
-
<code>element</code> — селектор или элемент.
|
|
2048
|
-
</p>
|
|
2049
|
-
|
|
2050
|
-
<h4><code class="fs16">x.lib.reload()</code></h4>
|
|
2051
|
-
<p>Перезагружает страницу.</p>
|
|
2052
|
-
|
|
2053
|
-
<h4><code class="fs16">x.lib.reloadWithHash(hash)</code></h4>
|
|
2054
|
-
<p>Перезагружает страницу, добавляя к ней указанный хэш.</p>
|
|
2055
|
-
|
|
2056
|
-
<h4><code class="fs16">x.lib.redirectTo(url)</code></h4>
|
|
2057
|
-
<p>Перенаправляет на URL.</p>
|
|
2058
|
-
|
|
2059
|
-
<h4><code class="fs16">x.lib.updateURL(url, title)</code></h4>
|
|
2060
|
-
<p>
|
|
2061
|
-
Обновляет title и URL страницы без перезагрузки.<br>
|
|
2062
|
-
Поддерживает добавлени хэша: <code>x.lib.updateURL('#ok')</code>
|
|
2063
|
-
</p>
|
|
2064
|
-
|
|
2065
|
-
<h4><code class="fs16">x.lib.random(a, b)</code></h4>
|
|
2066
|
-
<p>Создает произвольное число, больше <code>a</code> и меньше <code>b</code>.</p>
|
|
2067
|
-
|
|
2068
|
-
<h4><code class="fs16">x.lib.price(price)</code></h4>
|
|
2069
|
-
<p>Форматирует цену в вид: <code>9 999 999.99</code></p>
|
|
2070
|
-
|
|
2071
|
-
<h4><code class="fs16">x.lib.number(a)</code></h4>
|
|
2072
|
-
<p>Форматирует число.</p>
|
|
2073
|
-
|
|
2074
|
-
<h4><code class="fs16">x.lib.numberDecline(a, b, c, d)</code></h4>
|
|
2075
|
-
<p>Склонение числительных.</p>
|
|
2076
|
-
|
|
2077
|
-
<p>Пример:</p>
|
|
2078
|
-
<div class="codeBlock">
|
|
2079
|
-
<code>x.lib.numberDecline(10, 'час', 'часа', 'часов') -> 10 часов</code>
|
|
2080
|
-
</div>
|
|
2081
|
-
|
|
2082
|
-
<h4><code class="fs16">x.lib.addClass(element, readyClass = 'ready', activeClass = 'active', delay = 50)
|
|
2083
|
-
</code></h4>
|
|
2084
|
-
<p>Последовательное добавление класса. Иногда удобно использовать, когда требуется задержка, пока не завершится анимация.</p>
|
|
2085
|
-
<p>Пример:</p>
|
|
2086
|
-
<div class="codeBlock">
|
|
2087
|
-
<code>x.lib.addClass('.product-info', 'ready', 'show')</code>
|
|
2088
|
-
</div>
|
|
2089
|
-
<p>Добавляет элементу <code>.product-info</code> сначала класс <code>.ready</code>, а через 50 мс (по умолчанию) класс <code>.show</code>.</p>
|
|
2090
|
-
|
|
2091
|
-
<h4><code class="fs16">x.lib.removeClass(element, readyClass = 'ready', activeClass = 'active', delay = 200)
|
|
2092
|
-
</code></h4>
|
|
2093
|
-
<p>Последовательное удаление класса. Иногда удобно использовать, когда требуется задержка, пока не завершится анимация.</p>
|
|
2094
|
-
<p>Пример:</p>
|
|
2095
|
-
<div class="codeBlock">
|
|
2096
|
-
<code>x.lib.removeClass('.product-info', 'ready', 'show')</code>
|
|
2097
|
-
</div>
|
|
2098
|
-
<p>У элемента <code>.product-info</code> сначала убирает класс <code>.show</code>, а через 50 мс (по умолчанию) класс <code>.ready</code>.</p>
|
|
2099
|
-
|
|
2100
|
-
<h4><code class="fs16">x.lib.toggleClass(element, readyClass, activeClass, delayAdd, delayRemove)
|
|
2101
|
-
</code></h4>
|
|
2102
|
-
<p>Последовательное переключение классов. Иногда удобно использовать, когда требуется задержка, пока не завершится анимация. По очереди запускает <code>addClass</code> и <code>removeClass</code>.</p>
|
|
2103
|
-
|
|
2104
|
-
<h4><code class="fs16">x.lib.makePassword(length, selector)
|
|
2105
|
-
</code></h4>
|
|
2106
|
-
<p>Создает пароль указанной длины (по умолчанию — 8).</p>
|
|
2107
|
-
<p>Если созданный пароль сразу нужно вставить в поле input или textarea, вы можете указать выражение для querySelector этого поля в переменной selector.</p>
|
|
2108
|
-
<p><a class="button small" onclick="alert(x.lib.makePassword())">Придумать пароль!</a></p>
|
|
2109
|
-
|
|
2110
|
-
<h4><code class="fs16">x.lib.loadScript(path, callback, type = 'async|defer')</code></h4>
|
|
2111
|
-
<p>Загружает скрипт и добавляет его в конец перед <code></body></code>. После успешной загрузки выполняется <code>callback</code>.</p>
|
|
2112
|
-
<p>Пример:</p>
|
|
2113
|
-
<div class="codeBlock">
|
|
2114
|
-
<code>x.lib.loadScript(</code>
|
|
2115
|
-
<code> '/path/to/file.js',</code>
|
|
2116
|
-
<code> () => { Callback function... },</code>
|
|
2117
|
-
<code> 'async'</code>
|
|
2118
|
-
<code>)</code>
|
|
2119
|
-
</div>
|
|
2120
|
-
|
|
2121
|
-
<h4><code class="fs16">x.lib.deffered(code, delay = 10000)</code></h4>
|
|
2122
|
-
<p>Отложенное выполнение кода. Анонимная функция с кодом <code>() => { code }</code> будет запущена через время <code>delay</code> (по умолчанию 10 с), либо по наступлении одного из событий: <code>scroll</code>, <code>resize</code>, <code>click</code>, <code>keydown</code>, <code>mouseover</code>, <code>touchmove</code>.</p>
|
|
2123
|
-
<p>Пример:</p>
|
|
2124
|
-
<div class="codeBlock">
|
|
2125
|
-
<code>x.lib.deffered(</code>
|
|
2126
|
-
<code> () => { Code... },</code>
|
|
2127
|
-
<code> 10000</code>
|
|
2128
|
-
<code>)</code>
|
|
2129
|
-
</div>
|
|
2130
|
-
|
|
2131
|
-
<h4><code class="fs16">x.lib.runOnAppear(selector, callback, options)</code></h4>
|
|
2132
|
-
<p>Выполнение кода при его появлении во Viewport (по умолчанию ближе чем за 100px за Viewport). Анонимная функция с кодом <code>() => { code }</code> будет запущена при приближении указанного блока к Viewport.</p>
|
|
2133
|
-
<p>Пример:</p>
|
|
2134
|
-
<div class="codeBlock">
|
|
2135
|
-
<code>x.lib.runOnAppear(</code>
|
|
2136
|
-
<code> '.css_selector',</code>
|
|
2137
|
-
<code> () => { Code... },</code>
|
|
2138
|
-
<code> options (не обязательно)</code>
|
|
2139
|
-
<code>)</code>
|
|
2140
|
-
</div>
|
|
2141
|
-
|
|
2142
|
-
<h4><code class="fs16">x.lib.isEmail(email)</code></h4>
|
|
2143
|
-
<p>Определяет валидность адреса электропочты.</p>
|
|
2144
|
-
|
|
2145
|
-
<h4><code class="fs16">x.lib.alertErrors(data)</code></h4>
|
|
2146
|
-
<p>
|
|
2147
|
-
Показывает алерт с ошибками.<br>
|
|
2148
|
-
<code>data</code> — объект (ключ: значение), массив или строка.<br>
|
|
2149
|
-
Каждая ошибка будет выведена с новой строки (разделены <code>\n</code>).
|
|
2150
|
-
</p>
|
|
2151
|
-
|
|
2152
|
-
<h4><code class="fs16">x.lib.printErrors(data)</code></h4>
|
|
2153
|
-
<p>
|
|
2154
|
-
Печатает ошибки.<br>
|
|
2155
|
-
<code>data</code> — объект (ключ: значение), массив или строка.<br>
|
|
2156
|
-
Каждая ошибка будет выведена с новой строки (разделены <code><br/></code>).
|
|
2157
|
-
</p>
|
|
2158
|
-
<h4><code class="fs16">async render(selector, data, placement = null)</code></h4>
|
|
2159
|
-
<h4><code class="fs16">[x-render] | Render JavaScript in 'x-render' attribute</code></h4>
|
|
2160
|
-
</div>
|
|
2161
|
-
|
|
2162
|
-
<footer class="p6 ac fs14">
|
|
2163
|
-
<a href="mailto:andrey@shpigunov.ru">andrey@shpigunov.ru</a>
|
|
2164
|
-
<div class="mt1" x-render="new Date().getFullYear()"></div>
|
|
2165
|
-
</footer>
|
|
2166
|
-
|
|
2167
|
-
<div class="flex aic jcse m4">
|
|
2168
|
-
<div>
|
|
2169
|
-
<button x-dropdown-open class="button button--dropdown" tabindex="4">Bottom menu</button>
|
|
2170
|
-
<ul x-dropdown role="menu" tabindex="-1">
|
|
2171
|
-
<li><a href="/admin/settings/profile/">Профиль</a></li>
|
|
2172
|
-
<li><a href="/logout/">Выйти</a></li>
|
|
2173
|
-
<li><a href="/admin/settings/profile/">Профиль</a></li>
|
|
2174
|
-
<li><a href="/logout/">Выйти</a></li>
|
|
2175
|
-
<li class="divider"></li>
|
|
2176
|
-
<li><span class="op4">Version 0.5</span></li>
|
|
2177
|
-
</ul>
|
|
2178
|
-
</div>
|
|
2179
|
-
</div>
|
|
2180
|
-
</body>
|
|
2181
|
-
|
|
2182
|
-
</html>
|