Skip to content

Commit 2c149e9

Browse files
committed
add readme file
1 parent 996c336 commit 2c149e9

File tree

4 files changed

+168
-0
lines changed

4 files changed

+168
-0
lines changed

README.md

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,169 @@
11
# MetaLamp four task
22
fourth test task from MetaLamp.
3+
4+
Range Slider Fox is an easy and simple range slider written in TypeScript as JQUERY plugin
5+
6+
***
7+
8+
* Version: 1.0
9+
* <a href="https://plugins.su/">Demo page</a>
10+
* <a href="https://plugins.su/RangeSliderFox.zip">Download ZIP</a>
11+
12+
You can configure range slider as you need in the demonstration Panel and copy the configuration code from the column "Config code" by clicking "Copy code" button.
13+
Just don't forget to change the value inside еру parenthesis $(...).
14+
15+
16+
## Description:
17+
18+
* Adaptive and accessible design.
19+
* Possibility of keyboard and touch control.
20+
* Skin support (you can fully change appearance of the slider using css).
21+
* Has 4 built-in themes.
22+
* High performance because of thoughtful architecture.
23+
* Cross-browser.
24+
* Vertical view is supported.
25+
26+
## Key features:
27+
28+
* Any amount of the sliders in the same page without conflicts and significant performance issues.
29+
* Negative and fractional values are supported.
30+
* Possibility to set custom step or jump from value to value of the grid.
31+
* Possibility to switch off the elements of user interface.
32+
* Postfixes and prefixes for you values.
33+
* Dot sets its value in the value property if the slider is initialized on an input element.
34+
* Configuration and manipulation via data-attributes is supported.
35+
* You can block work of the slider.
36+
* You can subscribe and unsubscribe events of the slider using its API (onStart, onChange, onReset, onUpdate).
37+
* The slider supports external methods (renew, reset, destroy).
38+
* The grid view is adapted on change of the slider width, which makes it fully adaptive.
39+
* You can change the view of the slider any time: vertical or horizontal.
40+
* Code of the plugin is compatible with ES5.
41+
42+
## Dependencies:
43+
* <a href="http://jquery.com/" target="_blank">jQuery 1.2.x+</a>
44+
45+
46+
## Usage:
47+
48+
Add the following libraries to the page:
49+
* jQuery
50+
* rangeSliderFox.js
51+
52+
Add the following stylesheets to the page:
53+
* rangeSliderFox.css
54+
55+
56+
## Initialisation:
57+
58+
```html
59+
<input class="rslider__fox" value="">
60+
```
61+
62+
```javascript
63+
$('.rslider__fox').RangeSliderFox({
64+
type: 'double',
65+
theme: 'fox',
66+
min: -120,
67+
max: 800,
68+
to: 500,
69+
from: 200,
70+
bar: true,
71+
tipMinMax: true,
72+
tipFromTo: true,
73+
grid: true,
74+
gridSnap: false,
75+
gridNum: 40,
76+
})
77+
```
78+
79+
## Usage API:
80+
81+
```javascript
82+
const obj = $(dom).RangeSliderFox({}).data('RangeSliderFox');
83+
84+
obj.update({
85+
min:0,
86+
max:600,
87+
from:350
88+
})
89+
90+
// This piece of code will change range values and set the dot on position 350.
91+
92+
obj.reset()
93+
94+
// reset - will reset all the setup to the values which were
95+
// passed on initialization or will take default values
96+
97+
obj.destroy()
98+
99+
// destroy - will destroy slider instance, DOM-elements and all related events.
100+
101+
```
102+
103+
## Settings:
104+
105+
| Option | Data-Attr | Default value (possible values) | Type | Description |
106+
| --- | --- | --- | --- | --- |
107+
| type | data-type | 'single' ('double') | string | Dot type (single or double) |
108+
| orientation | data-orientation | 'horizontal' ('vertical') | string | slider orientation (vertical or horizontal) |
109+
| theme | data-theme | 'base' ('fox' , 'dark', 'classic') | string | Pass the name of the theme. CSS-selector should have name like .rs-[name] (e.g. .rs-base) |
110+
| min | data-min | 0 (-n, n.n..) | number | Minimal value of the range |
111+
| max | data-max | 10 (-n, n.n..) | number | Maximal value of the range |
112+
| to | data-to | 2 (-n, n.n..) | number | Second dot position |
113+
| from | data-from | 1 (-n, n.n..) | number | First dot position |
114+
| step | data-step | 0 (0-max) | number | Step of the dot mooving |
115+
| keyStepOne | data-key-step-one | 0(0-max) | number | Step of the dot mooving on keyboard key single pressing |
116+
| keyStepHold | data-key-step-hold | 0(0-max) | number | Step of the dot mooving on keyboard key holding |
117+
| bar | data-bar | false | boolean | Progrees-bar view (shown or hidden) |
118+
| tipPrefix | data-tip-prefix | '' (char…) | string | Prefix for hints (15 characters maximum) |
119+
| tipPostfix | data-tip-postfix | '' (char…) | string | Postfix for hints (15 characters maximum) |
120+
| tipMinMax | data-tip-min-max | true | boolean | MinMax hints view (on or off) |
121+
| tipFromTo | data-tip-from-to | true | boolean | FromTo hints view (on or off) |
122+
| grid | data-grid | false | boolean | Scale view (on or off) |
123+
| gridSnap | data-grid-snap | false | boolean | Dot can stop between scale marks (yes or no) |
124+
| gridNum | data-grid-num | 0 (n, n.n..) | number | Amount of intervals the scale is split into |
125+
| gridStep | data-grid-step | 0 (n, n.n..) | number | Amount of steps in the interval |
126+
| gridRound | data-grid-round | 0 (n) | number | Fractional rounding |
127+
| disabled | data-disabled | false | boolean | Slider enabled or disabled |
128+
| onStart | - | (data) => data | Function | Call a callback function after the first start of the plugin and pass an object of current configuration data as an argument |
129+
| onChange | - | (data) => data | Function | Call a callback function after each user’s interaction with the slider and pass an object of current configuration data as an argument |
130+
| onUpdate | - | (data) => data | Function | Call a callback function after “update” method calling and pass an object of current configuration data as an argument |
131+
| onReset | - | (data) => data | Function | Call a callback function after “reset” method calling and pass an object of current configuration data as an argument |
132+
133+
134+
## Setup and Scripts ( build the project, start, testing, production)
135+
136+
* Install dependencies:
137+
```
138+
npm i
139+
```
140+
* Start dev server:
141+
```
142+
npm start
143+
go to http://localhost:8080/
144+
```
145+
146+
* On the production server create the bundle files
147+
```
148+
npm run build
149+
```
150+
151+
* Building only the plugin
152+
```
153+
npm run plugin
154+
```
155+
156+
* Plugin testing:
157+
```
158+
npm run test
159+
```
160+
161+
162+
## Plugin Architecture:
163+
164+
* Architecture is based on MVC using Observer pattern.
165+
166+
* UML class diagram:
167+
![readme](_tmp/UML.png)
168+
* <a href="https://plugins.su/UML.png">UML full-size image view </a>
169+
* <a href="https://github.com/coder1x/readme/blob/master/_tmp/UML.drawio">UML class diagram (drawio)</a>

_tmp/UML.drawio

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<mxfile host="ca5665d5-e6b7-4e6a-bb5a-66a17e5fd6d4" modified="2021-12-15T08:24:25.199Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.63.0 Chrome/91.0.4472.164 Electron/13.5.2 Safari/537.36" etag="s8vazmjGfoV-iCQcEZ6t" version="12.2.4" pages="1"><diagram name="Page-1" id="c4acf3e9-155e-7222-9cf6-157b1a14988f">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</diagram></mxfile>

_tmp/UML.png

171 KB
Loading
171 KB
Loading

0 commit comments

Comments
 (0)