@litejs/ui 25.1.0 → 25.10.0
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/bin/extract-lang.js +56 -0
- package/css/anim.css +5 -12
- package/css/base.css +19 -155
- package/css/global.css +99 -0
- package/el/Slider.ui +229 -0
- package/extract-lang.js +33 -0
- package/load.js +51 -42
- package/package.json +6 -3
- package/shim.js +41 -16
- package/ui.js +324 -347
- package/el/Slider.tpl +0 -269
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
//-
|
|
3
|
+
//- Usage
|
|
4
|
+
//- lj-extract-lang [FILE..]
|
|
5
|
+
//-
|
|
6
|
+
//- Options
|
|
7
|
+
//- --pretty, -p Pretty print json output
|
|
8
|
+
//-
|
|
9
|
+
//- Examples
|
|
10
|
+
//- lj-extract-translations translations.json
|
|
11
|
+
//-
|
|
12
|
+
|
|
13
|
+
var fs = require("fs")
|
|
14
|
+
, path = require("path")
|
|
15
|
+
, opts = require("@litejs/cli/opts.js").opts({
|
|
16
|
+
pretty: false,
|
|
17
|
+
version: false
|
|
18
|
+
})
|
|
19
|
+
, extractLang = require("../extract-lang.js").extractLang
|
|
20
|
+
, package = require("../package.json")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if (opts._unknown[0]) {
|
|
24
|
+
console.error("\nError: Unknown option: " + opts._unknown)
|
|
25
|
+
usage(true)
|
|
26
|
+
process.exit(1)
|
|
27
|
+
} else if (opts._[0]) {
|
|
28
|
+
readJson(opts._[0])
|
|
29
|
+
} else {
|
|
30
|
+
usage()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function usage(err) {
|
|
34
|
+
if (!err && opts.version) console.log("%s v%s", package.name, package.version)
|
|
35
|
+
var helpFile = module.filename
|
|
36
|
+
console.log(fs.readFileSync(helpFile, "utf8").match(/^\/\/-.*/gm).join("\n").replace(/^.../gm, ""))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function readJson(file) {
|
|
40
|
+
var lang
|
|
41
|
+
, all = require(path.resolve(file))
|
|
42
|
+
, i = 0
|
|
43
|
+
, locales = Object.keys(all.locales)
|
|
44
|
+
|
|
45
|
+
console.log("Extract translations: " + locales)
|
|
46
|
+
|
|
47
|
+
for (; lang = locales[i++]; ) {
|
|
48
|
+
writeJson(lang + ".json", extractLang(all, lang))
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function writeJson(file, data) {
|
|
53
|
+
fs.writeFileSync(path.resolve(file), JSON.stringify(data, null, opts.pretty ? 2 : null) + "\n", "utf8")
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
package/css/anim.css
CHANGED
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
|
|
2
|
-
/**
|
|
3
|
-
* 1. Trigger GPU acceleration.
|
|
4
|
-
* Remove first flicker on iphone.
|
|
5
|
-
*/
|
|
6
2
|
|
|
7
3
|
.anim,
|
|
8
4
|
.anim:after,
|
|
9
5
|
.anim:before {
|
|
10
|
-
|
|
11
|
-
-moz-transition: all .2s cubic-bezier(0, 0, .2, 1) 0s;
|
|
12
|
-
-o-transition: all .2s cubic-bezier(0, 0, .2, 1) 0s;
|
|
13
|
-
transition: all .2s cubic-bezier(0, 0, .2, 1) 0s;
|
|
6
|
+
transition: all .2s;
|
|
14
7
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
/* Trigger GPU acceleration. Remove first flicker on iphone. */
|
|
9
|
+
transform: translate3d(0, 0, 0);
|
|
10
|
+
|
|
11
|
+
perspective: 1000;
|
|
19
12
|
}
|
|
20
13
|
|
package/css/base.css
CHANGED
|
@@ -1,40 +1,21 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
|
-
* 1. Do not adjusts the text size automatically.
|
|
4
|
-
* IE Phone note - If the viewport is set using <meta> element,
|
|
5
|
-
* the value of the CSS text-size-adjust property is ignored.
|
|
6
|
-
* Webkit bug - If -webkit-text-size-adjust is explicitely set to none,
|
|
7
|
-
* Webkit-based desktop browsers, like Chrome or Safari,
|
|
8
|
-
* instead of ignoring the property, will prevent the user to zoom in or out the Web page.
|
|
9
|
-
* See Bug 56543, Bug 163359, and Bug 84186.
|
|
10
|
-
* 2. IE for Windows Phone 8.1 supports "-webkit-text-size-adjust" as an alias for "-ms-text-size-adjust".
|
|
11
|
-
* 3. Firefox<29, iOS<4, Android<4 need vendor prefixes.
|
|
12
|
-
* 4. Disable double-tap gestures to remove 350 millisecond delay before single taps.
|
|
13
|
-
* 5. Improve scroll performance by stop the paint on scroll.
|
|
14
|
-
* Fix position: fixed in most Android 2.2–2.3 browsers
|
|
15
|
-
* http://benfrain.com/easy-css-fix-fixed-positioning-android-2-2-2-3/
|
|
16
|
-
*/
|
|
2
|
+
|
|
17
3
|
|
|
18
4
|
*, *:before, *:after {
|
|
19
5
|
color: inherit;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
box-sizing: inherit;
|
|
23
|
-
-webkit-backface-visibility: inherit;
|
|
24
|
-
backface-visibility: inherit;
|
|
6
|
+
box-sizing: inherit;
|
|
7
|
+
backface-visibility: inherit;
|
|
25
8
|
}
|
|
26
9
|
|
|
27
10
|
html {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
backface-visibility: hidden;
|
|
37
|
-
text-rendering: optimizeLegibility;
|
|
11
|
+
/* 62.5% sets 1em = 10px (16px × 0.625) */
|
|
12
|
+
font-size: 62.5%;
|
|
13
|
+
|
|
14
|
+
/* Use IE4 superior box model */
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
|
|
17
|
+
/* Improve scroll performance by stop the paint on scroll */
|
|
18
|
+
backface-visibility: hidden;
|
|
38
19
|
}
|
|
39
20
|
|
|
40
21
|
html,
|
|
@@ -64,16 +45,10 @@ label,
|
|
|
64
45
|
pointer-events: none;
|
|
65
46
|
}
|
|
66
47
|
|
|
67
|
-
button {
|
|
68
|
-
/* Fix extra padding issue in IE6/7 */
|
|
69
|
-
width: auto;
|
|
70
|
-
overflow: visible;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
48
|
b,
|
|
74
49
|
strong,
|
|
75
50
|
th {
|
|
76
|
-
/* Firefox default
|
|
51
|
+
/* Firefox's default 'bolder' looks bad with some fonts (Helvetica Neue on macs). */
|
|
77
52
|
font-weight: bold;
|
|
78
53
|
}
|
|
79
54
|
|
|
@@ -89,142 +64,31 @@ video {
|
|
|
89
64
|
vertical-align: top;
|
|
90
65
|
}
|
|
91
66
|
|
|
92
|
-
/**
|
|
93
|
-
* 1. tables still need cellspacing="0" in the markup
|
|
94
|
-
* 2. Restores the normal text size
|
|
95
|
-
* @see http://code.stephenmorley.org/html-and-css/fixing-browsers-broken-monospace-font-handling/
|
|
96
|
-
*/
|
|
97
67
|
|
|
98
68
|
table {
|
|
69
|
+
/* tables still need cellspacing="0" in the markup */
|
|
99
70
|
border-collapse: collapse;
|
|
100
|
-
border-spacing: 0;
|
|
71
|
+
border-spacing: 0;
|
|
101
72
|
}
|
|
102
73
|
|
|
103
74
|
code,
|
|
104
75
|
kbd,
|
|
105
76
|
pre,
|
|
106
77
|
samp {
|
|
107
|
-
|
|
78
|
+
/* Fix monospace bug in browsers that may ignore first one */
|
|
79
|
+
font-family: monospace, monospace;
|
|
108
80
|
font-size: 1em;
|
|
109
81
|
}
|
|
110
82
|
|
|
111
83
|
textarea {
|
|
112
|
-
resize:
|
|
84
|
+
resize: both;
|
|
113
85
|
}
|
|
114
86
|
|
|
115
87
|
button,
|
|
116
|
-
[draggable=true],
|
|
117
88
|
.btn,
|
|
118
|
-
.no-select
|
|
119
|
-
-webkit-user-select: none;
|
|
120
|
-
-khtml-user-select: none;
|
|
121
|
-
-moz-user-select: none;
|
|
122
|
-
-ms-user-select: none;
|
|
123
|
-
-o-user-select: none;
|
|
124
|
-
user-select: none;
|
|
125
|
-
}
|
|
126
|
-
|
|
89
|
+
.no-select,
|
|
127
90
|
[draggable=true] {
|
|
128
|
-
|
|
129
|
-
-khtml-user-drag: element;
|
|
130
|
-
user-drag: element;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Global Classes
|
|
136
|
-
* --------------
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
.max-height {
|
|
140
|
-
height: auto !important;
|
|
141
|
-
height: 100%;
|
|
142
|
-
min-height: 100%;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.sm .sm-hide,
|
|
146
|
-
.md .md-hide,
|
|
147
|
-
.lg .lg-hide,
|
|
148
|
-
.hide-empty:empty,
|
|
149
|
-
.hide {
|
|
150
|
-
display: none !important;
|
|
151
|
-
visibility: hidden;
|
|
152
|
-
}
|
|
153
|
-
.transparent {
|
|
154
|
-
opacity: 0 !important;
|
|
155
|
-
filter: alpha(opacity=0) !important;
|
|
156
|
-
}
|
|
157
|
-
.abs {
|
|
158
|
-
position: absolute;
|
|
159
|
-
}
|
|
160
|
-
.absr {
|
|
161
|
-
position: absolute;
|
|
162
|
-
top: 0px;
|
|
163
|
-
right: 0px;
|
|
164
|
-
}
|
|
165
|
-
.fix {
|
|
166
|
-
position: absolute;
|
|
167
|
-
position: fixed;
|
|
168
|
-
}
|
|
169
|
-
.rel {
|
|
170
|
-
position: relative;
|
|
171
|
-
height: 100%;
|
|
172
|
-
}
|
|
173
|
-
.max {
|
|
174
|
-
top: 0px;
|
|
175
|
-
left: 0px;
|
|
176
|
-
width: 100%;
|
|
177
|
-
height: 100%;
|
|
178
|
-
overflow: hidden;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
/* establishes a new block formatting context */
|
|
183
|
-
.block {
|
|
184
|
-
overflow: hidden;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.btn,
|
|
188
|
-
.no-wrap,
|
|
189
|
-
.ellipsis {
|
|
190
|
-
text-overflow: ellipsis;
|
|
191
|
-
white-space: nowrap;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
.sm .sm-left,
|
|
195
|
-
.md .md-left,
|
|
196
|
-
.lg .lg-left,
|
|
197
|
-
.left {
|
|
198
|
-
float: left;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
.sm .sm-right,
|
|
202
|
-
.md .md-right,
|
|
203
|
-
.lg .lg-right,
|
|
204
|
-
.right {
|
|
205
|
-
float: right !important;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
.sm .sm-t-left,
|
|
209
|
-
.md .md-t-left,
|
|
210
|
-
.lg .md-t-left,
|
|
211
|
-
.lg .lg-t-left,
|
|
212
|
-
.t-left {
|
|
213
|
-
text-align: left;
|
|
214
|
-
}
|
|
215
|
-
.sm .sm-t-center,
|
|
216
|
-
.md .md-t-center,
|
|
217
|
-
.lg .md-t-center,
|
|
218
|
-
.lg .lg-t-center,
|
|
219
|
-
.t-center {
|
|
220
|
-
text-align: center;
|
|
221
|
-
}
|
|
222
|
-
.sm .sm-t-right,
|
|
223
|
-
.md .md-t-right,
|
|
224
|
-
.lg .md-t-right,
|
|
225
|
-
.lg .lg-t-right,
|
|
226
|
-
.t-right {
|
|
227
|
-
text-align: right;
|
|
91
|
+
user-select: none;
|
|
228
92
|
}
|
|
229
93
|
|
|
230
94
|
|
package/css/global.css
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Global Classes
|
|
5
|
+
* --------------
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.max-height {
|
|
9
|
+
height: auto !important;
|
|
10
|
+
height: 100%;
|
|
11
|
+
min-height: 100%;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.sm .sm-hide,
|
|
15
|
+
.md .md-hide,
|
|
16
|
+
.lg .lg-hide,
|
|
17
|
+
.hide-empty:empty,
|
|
18
|
+
.hide {
|
|
19
|
+
display: none !important;
|
|
20
|
+
visibility: hidden;
|
|
21
|
+
}
|
|
22
|
+
.transparent {
|
|
23
|
+
opacity: 0 !important;
|
|
24
|
+
filter: alpha(opacity=0) !important;
|
|
25
|
+
}
|
|
26
|
+
.abs {
|
|
27
|
+
position: absolute;
|
|
28
|
+
}
|
|
29
|
+
.absr {
|
|
30
|
+
position: absolute;
|
|
31
|
+
top: 0px;
|
|
32
|
+
right: 0px;
|
|
33
|
+
}
|
|
34
|
+
.fix {
|
|
35
|
+
position: absolute;
|
|
36
|
+
position: fixed;
|
|
37
|
+
}
|
|
38
|
+
.rel {
|
|
39
|
+
position: relative;
|
|
40
|
+
height: 100%;
|
|
41
|
+
}
|
|
42
|
+
.max {
|
|
43
|
+
top: 0px;
|
|
44
|
+
left: 0px;
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 100%;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
/* establishes a new block formatting context */
|
|
52
|
+
.block {
|
|
53
|
+
overflow: hidden;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.btn,
|
|
57
|
+
.no-wrap,
|
|
58
|
+
.ellipsis {
|
|
59
|
+
text-overflow: ellipsis;
|
|
60
|
+
white-space: nowrap;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.sm .sm-left,
|
|
64
|
+
.md .md-left,
|
|
65
|
+
.lg .lg-left,
|
|
66
|
+
.left {
|
|
67
|
+
float: left;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.sm .sm-right,
|
|
71
|
+
.md .md-right,
|
|
72
|
+
.lg .lg-right,
|
|
73
|
+
.right {
|
|
74
|
+
float: right !important;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.sm .sm-t-left,
|
|
78
|
+
.md .md-t-left,
|
|
79
|
+
.lg .md-t-left,
|
|
80
|
+
.lg .lg-t-left,
|
|
81
|
+
.t-left {
|
|
82
|
+
text-align: left;
|
|
83
|
+
}
|
|
84
|
+
.sm .sm-t-center,
|
|
85
|
+
.md .md-t-center,
|
|
86
|
+
.lg .md-t-center,
|
|
87
|
+
.lg .lg-t-center,
|
|
88
|
+
.t-center {
|
|
89
|
+
text-align: center;
|
|
90
|
+
}
|
|
91
|
+
.sm .sm-t-right,
|
|
92
|
+
.md .md-t-right,
|
|
93
|
+
.lg .md-t-right,
|
|
94
|
+
.lg .lg-t-right,
|
|
95
|
+
.t-right {
|
|
96
|
+
text-align: right;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
package/el/Slider.ui
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
|
|
2
|
+
%css
|
|
3
|
+
.Slider,
|
|
4
|
+
.Toggle {
|
|
5
|
+
background: none;
|
|
6
|
+
height: 32px;
|
|
7
|
+
position: relative;
|
|
8
|
+
touch-action: none;
|
|
9
|
+
width: 200px;
|
|
10
|
+
color: #000;
|
|
11
|
+
font-size: 14px;
|
|
12
|
+
line-height: 32px;
|
|
13
|
+
}
|
|
14
|
+
.Slider-fill,
|
|
15
|
+
.Slider:before,
|
|
16
|
+
.Toggle:before {
|
|
17
|
+
background: rgba(0, 0, 0, .5);
|
|
18
|
+
border-radius: 2px;
|
|
19
|
+
height: 4px;
|
|
20
|
+
position: absolute;
|
|
21
|
+
top: 14px;
|
|
22
|
+
transition: inherit;
|
|
23
|
+
}
|
|
24
|
+
.Slider:before,
|
|
25
|
+
.Toggle:before {
|
|
26
|
+
background: #ccc;
|
|
27
|
+
content: "";
|
|
28
|
+
display: block;
|
|
29
|
+
width: 100%;
|
|
30
|
+
}
|
|
31
|
+
.Slider-knob,
|
|
32
|
+
.Toggle-knob {
|
|
33
|
+
border-radius: 50%;
|
|
34
|
+
box-shadow: 0 0 0 0 rgb(0, 0, 0, .2), 0 1px 4px rgba(0, 0, 0, .2);
|
|
35
|
+
height: 20px;
|
|
36
|
+
position: relative; /* for IE6 overflow:visible bug */
|
|
37
|
+
transition: inherit;
|
|
38
|
+
width: 20px;
|
|
39
|
+
}
|
|
40
|
+
.Slider-knob {
|
|
41
|
+
float: right;
|
|
42
|
+
margin: -8px -10px 0 0;
|
|
43
|
+
outline: none;
|
|
44
|
+
background: #f5f5f5;
|
|
45
|
+
}
|
|
46
|
+
:hover > * > .Slider-knob,
|
|
47
|
+
:focus > * > .Slider-knob {
|
|
48
|
+
box-shadow: 0 0 0 8px rgb(0, 0, 0, .2), 0 1px 4px rgba(0, 0, 0, .3);
|
|
49
|
+
}
|
|
50
|
+
.Slider-knob.is-active {
|
|
51
|
+
box-shadow: 0 0 0 12px rgb(0, 0, 0, .2), 0 1px 5px 5px rgba(0, 0, 0, .3);
|
|
52
|
+
}
|
|
53
|
+
/* value bubble */
|
|
54
|
+
.Slider-knob:before,
|
|
55
|
+
.Slider-knob:after {
|
|
56
|
+
background: inherit;
|
|
57
|
+
border-radius: 16px;
|
|
58
|
+
content: "";
|
|
59
|
+
height: 32px;
|
|
60
|
+
left: -6px;
|
|
61
|
+
min-width: 32px;
|
|
62
|
+
opacity: 0;
|
|
63
|
+
pointer-events: none;
|
|
64
|
+
position: absolute;
|
|
65
|
+
top: 0px;
|
|
66
|
+
transform: rotate(45deg);
|
|
67
|
+
transition: inherit;
|
|
68
|
+
}
|
|
69
|
+
.Slider-knob:after {
|
|
70
|
+
content: attr(data-val);
|
|
71
|
+
left: 10px;
|
|
72
|
+
padding: 0 4px;
|
|
73
|
+
transform: translate(-50%, 0);
|
|
74
|
+
}
|
|
75
|
+
:focus > * > .Slider-knob:before,
|
|
76
|
+
:hover > * > .Slider-knob:before,
|
|
77
|
+
.Slider-knob.is-active:before {
|
|
78
|
+
border-radius: 50% 50% 0 50%;
|
|
79
|
+
box-shadow: 3px 3px 3px 1px rgba(0, 0, 0, .3);
|
|
80
|
+
opacity: 1;
|
|
81
|
+
top: -43px;
|
|
82
|
+
}
|
|
83
|
+
:focus > * > .Slider-knob:after,
|
|
84
|
+
:hover > * > .Slider-knob:after,
|
|
85
|
+
.Slider-knob.is-active:after {
|
|
86
|
+
box-shadow: -4px -3px 3px -2px rgba(0, 0, 0, .15), 4px -3px 3px -2px rgba(0, 0, 0, .15);
|
|
87
|
+
opacity: 1;
|
|
88
|
+
top: -43px;
|
|
89
|
+
}
|
|
90
|
+
input:checked + .Toggle-knob {
|
|
91
|
+
background-color: #00a651;
|
|
92
|
+
left: 16px;
|
|
93
|
+
}
|
|
94
|
+
.Slider.color .Slider-fill {
|
|
95
|
+
background: red;
|
|
96
|
+
}
|
|
97
|
+
.Slider.color .Slider-fill+.Slider-fill {
|
|
98
|
+
background: green;
|
|
99
|
+
}
|
|
100
|
+
.Slider.color .Slider-fill+.Slider-fill+.Slider-fill {
|
|
101
|
+
background: blue;
|
|
102
|
+
}
|
|
103
|
+
.Slider.no-first > .Slider-fill:last-child {
|
|
104
|
+
background: #ccc;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
%js
|
|
108
|
+
var elOn = El.on
|
|
109
|
+
, elOff = El.off
|
|
110
|
+
, elCls = El.cls
|
|
111
|
+
, elGet = El.get
|
|
112
|
+
El.$b.SliderInit = function(el, range) {
|
|
113
|
+
range = (range || elGet(el, "range") || "").split(/[^+\-\d.]/) // min:max:step:margin
|
|
114
|
+
var knobLen, offset, px, drag, min, max, minPx, maxPx, value
|
|
115
|
+
//, vert = El.hasClass(el, "is-vertical")
|
|
116
|
+
, vert = false
|
|
117
|
+
, attr = vert ? "offsetHeight" : "offsetWidth"
|
|
118
|
+
, fill = el.firstChild
|
|
119
|
+
, knob = fill.lastChild
|
|
120
|
+
, emit = El.rate(El.emit.bind(el, el, "change"), 500)
|
|
121
|
+
elOn(window, "blur", stop)
|
|
122
|
+
setTimeout(el.val = set, 10, value||0)
|
|
123
|
+
function load() {
|
|
124
|
+
min = +(range[0] || 0)
|
|
125
|
+
max = +(range[1] || 100)
|
|
126
|
+
knobLen = knob[attr]>>1
|
|
127
|
+
minPx = 0
|
|
128
|
+
maxPx = el[attr] - knobLen - knobLen
|
|
129
|
+
px = maxPx / (max - min)
|
|
130
|
+
}
|
|
131
|
+
elOn(el, "pointerdown", function(e) {
|
|
132
|
+
drag = true
|
|
133
|
+
load()
|
|
134
|
+
var tmp = el.getBoundingClientRect()
|
|
135
|
+
offset = (vert ? tmp.top + maxPx + El.scrollTop() + knobLen : tmp.left + El.scrollLeft()) + knobLen
|
|
136
|
+
tmp = offset - e.clientX + (value-min||0)*px
|
|
137
|
+
if (tmp < knobLen && tmp > -knobLen) offset -= tmp
|
|
138
|
+
if (el.childNodes.length > 1) {
|
|
139
|
+
var next
|
|
140
|
+
, x = maxPx
|
|
141
|
+
, diff = vert ? offset - e.pageY : e.pageX - offset
|
|
142
|
+
for (tmp = fill = el.firstChild; tmp; tmp = tmp.nextSibling) {
|
|
143
|
+
next = diff - tmp[attr] + knobLen
|
|
144
|
+
if (next < 0 ? -next <= x : next < x) {
|
|
145
|
+
fill = tmp
|
|
146
|
+
knob = tmp.firstChild
|
|
147
|
+
x = next < 0 ? -next : next
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (fill.previousSibling) {
|
|
151
|
+
maxPx = fill.previousSibling[attr] - knobLen
|
|
152
|
+
if (range[3]) maxPx -= px * range[3]
|
|
153
|
+
}
|
|
154
|
+
if (fill.nextSibling) {
|
|
155
|
+
minPx = fill.nextSibling[attr] - knobLen
|
|
156
|
+
if (range[3]) minPx += px * range[3]
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
move(e)
|
|
160
|
+
listen(elOn)
|
|
161
|
+
})
|
|
162
|
+
function move(e) {
|
|
163
|
+
var diff = vert ? offset - e.pageY : e.pageX - offset
|
|
164
|
+
diff = (diff > maxPx ? maxPx : (diff < minPx ? minPx : diff))
|
|
165
|
+
set((diff / px) + min, e, diff)
|
|
166
|
+
return El.stop(e)
|
|
167
|
+
}
|
|
168
|
+
function stop(e) {
|
|
169
|
+
if (drag) {
|
|
170
|
+
drag = false
|
|
171
|
+
listen(elOff)
|
|
172
|
+
set(value)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function listen(onOff) {
|
|
176
|
+
elCls(el, "anim", !drag)
|
|
177
|
+
elCls(knob, "is-active", drag)
|
|
178
|
+
onOff(document, "pointerup", stop)
|
|
179
|
+
onOff(document, "pointermove", move)
|
|
180
|
+
}
|
|
181
|
+
function set(val, e, pos) {
|
|
182
|
+
load()
|
|
183
|
+
val = El.step(val < min ? min : val > max ? max : val || 0, +(range[2] || 1))
|
|
184
|
+
if (value !== void 0 && (!drag || pos !== void 0)) {
|
|
185
|
+
El.css(fill, vert ? "height" : "width", ((pos || (val-min)*px)+knobLen) + "px", 0)
|
|
186
|
+
}
|
|
187
|
+
if (value !== val) {
|
|
188
|
+
el.value = value = val
|
|
189
|
+
if (drag && e) emit(e)
|
|
190
|
+
var format = elGet(el, "format")
|
|
191
|
+
El.set(knob, "data-val", format ? $d._(format, {val:val}) : val)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
%el Slider
|
|
197
|
+
button.Slider.anim.reset ;SliderInit!
|
|
198
|
+
.Slider-fill
|
|
199
|
+
.Slider-knob[tabindex=0]
|
|
200
|
+
|
|
201
|
+
%el Slider2
|
|
202
|
+
button.Slider.anim.reset ;SliderInit!
|
|
203
|
+
.Slider-fill
|
|
204
|
+
.Slider-knob[tabindex=0]
|
|
205
|
+
.Slider-fill
|
|
206
|
+
.Slider-knob[tabindex=0]
|
|
207
|
+
|
|
208
|
+
%el Slider3
|
|
209
|
+
button.Slider.reset ;SliderInit!
|
|
210
|
+
.Slider-fill
|
|
211
|
+
.Slider-knob[tabindex=0]
|
|
212
|
+
.Slider-fill
|
|
213
|
+
.Slider-knob[tabindex=0]
|
|
214
|
+
.Slider-fill
|
|
215
|
+
.Slider-knob[tabindex=0]
|
|
216
|
+
|
|
217
|
+
%el Toggle
|
|
218
|
+
button.Toggle.reset ;SliderInit! "0:1"
|
|
219
|
+
;css: "width","36px"
|
|
220
|
+
.Slider-fill.anim
|
|
221
|
+
.Slider-knob.anim[tabindex=0]
|
|
222
|
+
|
|
223
|
+
%el Togglea
|
|
224
|
+
label.Toggle.reset[tabindex=0]
|
|
225
|
+
input[type=checkbox].hide
|
|
226
|
+
;readonly! row && !row.write
|
|
227
|
+
;checked! model && (row && row.opts ? row.opts === model.get(row.path) : !!model.get(row.path))
|
|
228
|
+
.Toggle-knob.anim
|
|
229
|
+
|
package/extract-lang.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
!function(exports) {
|
|
3
|
+
exports.extractLang = extractLang
|
|
4
|
+
|
|
5
|
+
function extractLang(translations, lang) {
|
|
6
|
+
var missing = []
|
|
7
|
+
, out = extract(translations, "")
|
|
8
|
+
if (missing[0]) {
|
|
9
|
+
console.error("WARNING! Missing '%s' translations: %s [%s]", lang, missing.length, missing+"")
|
|
10
|
+
}
|
|
11
|
+
return out
|
|
12
|
+
|
|
13
|
+
function extract(map, path) {
|
|
14
|
+
var key
|
|
15
|
+
, out = {}
|
|
16
|
+
, translations = map.translations
|
|
17
|
+
if (!translations) return map[lang]
|
|
18
|
+
for (key in translations) {
|
|
19
|
+
out[key] = extract(translations[key], path + key + ".")
|
|
20
|
+
if (
|
|
21
|
+
out[key] === key ||
|
|
22
|
+
out[key] === void 0 && missing.push(path + key) ||
|
|
23
|
+
isObject(out[key]) && Object.keys(out[key]).length < 1
|
|
24
|
+
) delete out[key]
|
|
25
|
+
}
|
|
26
|
+
return out
|
|
27
|
+
}
|
|
28
|
+
function isObject(obj) {
|
|
29
|
+
return obj && obj.constructor === Object
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}(this) // jshint ignore:line
|
|
33
|
+
|