Skip to content
This repository was archived by the owner on Mar 29, 2023. It is now read-only.

Commit e685747

Browse files
committed
1. toolbar.js: add "tabbar-md-no-highlight"
2. router.d.ts: set type of "context" as any 3. range-class.js: rangeChange event only be triggered by manually touching 4. color-picker: add hue-wheel component
1 parent 4d75a8a commit e685747

26 files changed

+445
-27
lines changed

components/color-picker.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/color-picker/color-picker-class.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import moduleRgbSliders from './modules/rgb-sliders';
1515
import moduleSbSpectrum from './modules/sb-spectrum';
1616
import moduleHsSpectrum from './modules/hs-spectrum';
1717
import moduleWheel from './modules/wheel';
18+
import moduleHueWheel from './modules/hue-wheel';
19+
import moduleBrightnessSatuFullSlider from './modules/brightness-satu-full-slider';
20+
1821

1922
class ColorPicker extends Framework7Class {
2023
constructor(app, params = {}) {
@@ -74,7 +77,9 @@ class ColorPicker extends Framework7Class {
7477
'rgb-sliders': moduleRgbSliders,
7578
'sb-spectrum': moduleSbSpectrum,
7679
'hs-spectrum': moduleHsSpectrum,
77-
'wheel': moduleWheel, // eslint-disable-line
80+
'wheel': moduleWheel, // eslint-disable-line,
81+
'hue-wheel': moduleHueWheel, // eslint-disable-line,
82+
'brightness-satu-full-slider': moduleBrightnessSatuFullSlider // eslint-disable-line,
7883
},
7984
});
8085

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import Utils from '../../../utils/utils';
2+
3+
export default {
4+
render(self) {
5+
const { sliderLabel, sliderValue, sliderValueEditable, brightnessLabelText } = self.params;
6+
return `
7+
<div class="color-picker-module color-picker-module-brightness-slider">
8+
<div class="color-picker-slider-wrap">
9+
${sliderLabel ? `
10+
<div class="color-picker-slider-label">${brightnessLabelText}</div>
11+
` : ''}
12+
<div class="range-slider color-picker-slider color-picker-slider-brightness"></div>
13+
${sliderValue ? `
14+
<div class="color-picker-slider-value">
15+
${sliderValueEditable ? `
16+
<input type="number" step="0.1" min="0" max="100" class="color-picker-value-brightness">
17+
` : `
18+
<span class="color-picker-value-brightness"></span>
19+
`}
20+
</div>
21+
` : ''}
22+
</div>
23+
</div>
24+
`;
25+
},
26+
init(self) {
27+
const cnst_saturation = 1.0;
28+
29+
self.brightnessRangeSlider = self.app.range.create({
30+
el: self.$el.find('.color-picker-slider-brightness'),
31+
min: 0,
32+
max: 1,
33+
step: 0.001,
34+
value: 0,
35+
on: {
36+
change(range, value) {
37+
const b = Math.floor(value * 1000) / 1000;
38+
self.setValue({ hsb: [self.value.hsb[0], cnst_saturation , b] });
39+
},
40+
},
41+
});
42+
},
43+
update(self) {
44+
const {
45+
value,
46+
app,
47+
} = self;
48+
const { sliderValue, sliderValueEditable } = self.params;
49+
50+
const { hsb } = value;
51+
52+
self.brightnessRangeSlider.value = hsb[2];
53+
self.brightnessRangeSlider.layout();
54+
55+
const hslCurrent = Utils.colorHsbToHsl(hsb[0], hsb[1], hsb[2]);
56+
const hslLeft = Utils.colorHsbToHsl(hsb[0], hsb[1], 0);
57+
const hslRight = Utils.colorHsbToHsl(hsb[0], hsb[1], 1);
58+
59+
self.brightnessRangeSlider.$el[0].style.setProperty(
60+
'--f7-range-knob-color',
61+
`hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`
62+
);
63+
self.brightnessRangeSlider.$el.find('.range-bar').css(
64+
'background-image',
65+
`linear-gradient(${app.rtl ? 'to left' : 'to right'}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`
66+
);
67+
if (sliderValue && sliderValueEditable) {
68+
self.$el.find('input.color-picker-value-brightness').val(`${hsb[2] * 1000 / 10}`);
69+
} else if (sliderValue) {
70+
self.$el.find('span.color-picker-value-brightness').text(`${hsb[2] * 1000 / 10}`);
71+
}
72+
},
73+
destroy(self) {
74+
if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {
75+
self.brightnessRangeSlider.destroy();
76+
}
77+
delete self.brightnessRangeSlider;
78+
},
79+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import $ from 'dom7';
2+
3+
function svgWheelCircles() {
4+
const total = 256;
5+
let circles = '';
6+
for (let i = total; i > 0; i -= 1) {
7+
const angle = i * Math.PI / (total / 2);
8+
const hue = 360 / total * i;
9+
circles += `<circle cx="${150 - Math.sin(angle) * 125}" cy="${150 - Math.cos(angle) * 125}" r="15" fill="hsl(${hue}, 100%, 50%)"></circle>`;
10+
}
11+
return circles;
12+
}
13+
export default {
14+
render() {
15+
return `
16+
<div class="color-picker-module color-picker-module-wheel">
17+
<div class="color-picker-wheel">
18+
<svg viewBox="0 0 300 300" width="300" height="300">${svgWheelCircles()}</svg>
19+
<div class="color-picker-wheel-handle"></div>
20+
</div>
21+
</div>
22+
`;
23+
},
24+
init(self) {
25+
const { app } = self;
26+
27+
let isTouched;
28+
let isMoved;
29+
let touchStartX;
30+
let touchStartY;
31+
let touchCurrentX;
32+
let touchCurrentY;
33+
34+
let wheelRect;
35+
let wheelIsTouched;
36+
let wheelHandleIsTouched;
37+
38+
const { $el } = self;
39+
40+
function setHueFromWheelCoords(x, y) {
41+
const wheelCenterX = wheelRect.left + wheelRect.width / 2;
42+
const wheelCenterY = wheelRect.top + wheelRect.height / 2;
43+
const angleRad = Math.atan2(y - wheelCenterY, x - wheelCenterX);
44+
let angleDeg = angleRad * 180 / Math.PI + 90;
45+
if (angleDeg < 0) angleDeg += 360;
46+
angleDeg = 360 - angleDeg;
47+
self.setValue({ hue: angleDeg });
48+
}
49+
50+
51+
function handleTouchStart(e) {
52+
if (isMoved || isTouched) return;
53+
touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
54+
touchCurrentX = touchStartX;
55+
touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
56+
touchCurrentY = touchStartY;
57+
const $targetEl = $(e.target);
58+
wheelHandleIsTouched = $targetEl.closest('.color-picker-wheel-handle').length > 0;
59+
wheelIsTouched = $targetEl.closest('circle').length > 0;
60+
if (wheelIsTouched) {
61+
wheelRect = $el.find('.color-picker-wheel')[0].getBoundingClientRect();
62+
setHueFromWheelCoords(touchStartX, touchStartY);
63+
}
64+
}
65+
function handleTouchMove(e) {
66+
if (!(wheelIsTouched || wheelHandleIsTouched)) return;
67+
touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
68+
touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
69+
e.preventDefault();
70+
if (!isMoved) {
71+
// First move
72+
isMoved = true;
73+
if (wheelHandleIsTouched) {
74+
wheelRect = $el.find('.color-picker-wheel')[0].getBoundingClientRect();
75+
}
76+
}
77+
if (wheelIsTouched || wheelHandleIsTouched) {
78+
setHueFromWheelCoords(touchCurrentX, touchCurrentY);
79+
}
80+
}
81+
function handleTouchEnd() {
82+
isMoved = false;
83+
wheelIsTouched = false;
84+
wheelHandleIsTouched = false;
85+
}
86+
87+
function handleResize() {
88+
self.modules.wheel.update(self);
89+
}
90+
91+
const passiveListener = app.touchEvents.start === 'touchstart' && app.support.passiveListener ? { passive: true, capture: false } : false;
92+
93+
self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);
94+
app.on('touchmove:active', handleTouchMove);
95+
app.on('touchend:passive', handleTouchEnd);
96+
app.on('resize', handleResize);
97+
98+
self.destroyWheelEvents = function destroyWheelEvents() {
99+
self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);
100+
app.off('touchmove:active', handleTouchMove);
101+
app.off('touchend:passive', handleTouchEnd);
102+
app.off('resize', handleResize);
103+
};
104+
},
105+
update(self) {
106+
const {
107+
value,
108+
} = self;
109+
110+
const { hsl, hsb } = value;
111+
112+
const wheelSize = self.$el.find('.color-picker-wheel')[0].offsetWidth;
113+
const wheelHalfSize = wheelSize / 2;
114+
const angleRad = value.hue * Math.PI / 180;
115+
const handleSize = wheelSize / 6;
116+
const handleHalfSize = handleSize / 2;
117+
const tX = wheelHalfSize - Math.sin(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;
118+
const tY = wheelHalfSize - Math.cos(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;
119+
self.$el.find('.color-picker-wheel-handle')
120+
.css('background-color', `hsl(${hsl[0]}, 100%, 50%)`)
121+
.transform(`translate(${tX}px, ${tY}px)`);
122+
},
123+
destroy(self) {
124+
if (self.destroyWheelEvents) self.destroyWheelEvents();
125+
delete self.destroyWheelEvents;
126+
},
127+
};

components/range.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/range/range-class.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,11 @@ class Range extends Framework7Class {
521521
range.$el.trigger('range:changed', range, range.value);
522522
range.emit('local::changed rangeChanged', range, range.value);
523523
}
524-
range.emit('local::change rangeChange', range, range.value);
524+
// range.emit('local::change rangeChange', range, range.value);
525+
// paulhsu: range:change event only be triggered by manually touching
526+
if (byTouchMove) {
527+
range.emit('local::change rangeChange', range, range.value);
528+
}
525529
return range;
526530
}
527531

components/toolbar/toolbar.js

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ const Toolbar = {
88

99
const $tabbarEl = $(tabbarEl);
1010

11+
// paulhsu: make all items in md tabbar without any highlight
12+
if ($tabbarEl.hasClass('tabbar-md-no-highlight')) {
13+
return;
14+
}
15+
1116
if ($tabbarEl.length === 0 || !($tabbarEl.hasClass('tabbar') || $tabbarEl.hasClass('tabbar-labels'))) return;
1217

1318
let $highlightEl = $tabbarEl.find('.tab-link-highlight');

css/framework7.bundle.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
/*====================

css/framework7.bundle.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/framework7.bundle.rtl.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
/*====================

css/framework7.bundle.rtl.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/framework7.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
/*====================

css/framework7.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/framework7.rtl.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
/*====================

css/framework7.rtl.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

framework7.bundle.less

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
@import (reference) './less/mixins.less';

framework7.esm.bundle.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
import Template7 from 'template7';

framework7.esm.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
import Template7 from 'template7';

framework7.less

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Released under the MIT License
99
*
10-
* Released on: September 19, 2019
10+
* Released on: September 20, 2019
1111
*/
1212

1313
@import (reference) './less/mixins.less';

0 commit comments

Comments
 (0)