feffery_utils_components 0.2.0-rc11 → 0.2.0-rc13
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/DESCRIPTION +1 -1
- package/NAMESPACE +2 -0
- package/Project.toml +1 -1
- package/README.md +1 -1
- package/assets/demo.jpg +0 -0
- package/feffery_utils_components/FefferySetFavicon.py +45 -0
- package/feffery_utils_components/FefferySetTitle.py +7 -4
- package/feffery_utils_components/FefferySliderCaptcha.py +109 -0
- package/feffery_utils_components/__init__.py +2 -1
- package/feffery_utils_components/_imports_.py +4 -0
- package/feffery_utils_components/async-feffery_animated_3d_background_p5.js +1 -1
- package/feffery_utils_components/async-feffery_animated_3d_background_three.js +2 -2
- package/feffery_utils_components/async-feffery_animated_image.js +1 -1
- package/feffery_utils_components/async-feffery_aplayer.js +1 -1
- package/feffery_utils_components/async-feffery_auto_animate.js +1 -1
- package/feffery_utils_components/async-feffery_auto_fit.js +1 -1
- package/feffery_utils_components/async-feffery_captcha.js +1 -1
- package/feffery_utils_components/async-feffery_color_pickers.js +1 -1
- package/feffery_utils_components/async-feffery_dom2image.js +1 -1
- package/feffery_utils_components/async-feffery_dplayer.js +1 -1
- package/feffery_utils_components/async-feffery_emoji_picker.js +1 -1
- package/feffery_utils_components/async-feffery_excel_preview.js +1 -1
- package/feffery_utils_components/async-feffery_extra_spinner.js +1 -1
- package/feffery_utils_components/async-feffery_fancy_button.js +1 -1
- package/feffery_utils_components/async-feffery_grid.js +1 -1
- package/feffery_utils_components/async-feffery_image_cropper.js +1 -1
- package/feffery_utils_components/async-feffery_json_viewer.js +1 -1
- package/feffery_utils_components/async-feffery_local_large_storage.js +1 -1
- package/feffery_utils_components/async-feffery_markdown_editor.js +2 -2
- package/feffery_utils_components/async-feffery_motion.js +1 -1
- package/feffery_utils_components/async-feffery_music_player.js +1 -1
- package/feffery_utils_components/async-feffery_photo_sphere_viewer.js +1 -1
- package/feffery_utils_components/async-feffery_resizable.js +1 -1
- package/feffery_utils_components/async-feffery_rich_text_editor.js +2 -2
- package/feffery_utils_components/async-feffery_rnd.js +1 -1
- package/feffery_utils_components/async-feffery_seamless_scroll.js +1 -1
- package/feffery_utils_components/async-feffery_shortcut_panel.js +1 -1
- package/feffery_utils_components/async-feffery_slider_captcha.js +1 -0
- package/feffery_utils_components/async-feffery_slider_captcha.js.LICENSE.txt +1 -0
- package/feffery_utils_components/async-feffery_sortable.js +1 -1
- package/feffery_utils_components/async-feffery_word_preview.js +1 -1
- package/feffery_utils_components/async-fuc-shared.js +2 -2
- package/feffery_utils_components/feffery_utils_components.min.js +2 -2
- package/feffery_utils_components/metadata.json +298 -1
- package/feffery_utils_components/package-info.json +3 -1
- package/package.json +3 -1
- package/src/lib/components/FefferySetFavicon.react.js +58 -0
- package/src/lib/components/FefferySetTitle.react.js +21 -6
- package/src/lib/components/FefferySliderCaptcha.react.js +160 -0
- package/src/lib/fragments/FefferySliderCaptcha.react.js +102 -0
- package/src/lib/index.js +5 -1
- package/usage.py +20 -48
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import React, { useRef, useEffect } from 'react';
|
|
2
|
+
import SliderCaptcha from 'rc-slider-captcha';
|
|
3
|
+
import createPuzzle from 'create-puzzle';
|
|
4
|
+
import { propTypes, defaultProps } from '../components/FefferySliderCaptcha.react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 滑块验证码组件FefferySliderCaptcha
|
|
8
|
+
*/
|
|
9
|
+
const FefferySliderCaptcha = (props) => {
|
|
10
|
+
let {
|
|
11
|
+
id,
|
|
12
|
+
style,
|
|
13
|
+
className,
|
|
14
|
+
imgSrc,
|
|
15
|
+
xOffset,
|
|
16
|
+
imgWidth,
|
|
17
|
+
mode,
|
|
18
|
+
tipText,
|
|
19
|
+
showRefreshIcon,
|
|
20
|
+
autoRefreshOnError,
|
|
21
|
+
errorHoldDuration,
|
|
22
|
+
placement,
|
|
23
|
+
refresh,
|
|
24
|
+
setProps,
|
|
25
|
+
loading_state
|
|
26
|
+
} = props;
|
|
27
|
+
|
|
28
|
+
// 记录x轴动态偏移量
|
|
29
|
+
const offsetXRef = useRef(0);
|
|
30
|
+
// 手动刷新用
|
|
31
|
+
const actionRef = useRef();
|
|
32
|
+
|
|
33
|
+
// 手动刷新
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (refresh) {
|
|
36
|
+
actionRef.current?.refresh()
|
|
37
|
+
setProps({ refresh: false })
|
|
38
|
+
}
|
|
39
|
+
}, [refresh])
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<SliderCaptcha
|
|
43
|
+
id={id}
|
|
44
|
+
style={style}
|
|
45
|
+
className={className}
|
|
46
|
+
actionRef={actionRef}
|
|
47
|
+
request={
|
|
48
|
+
() => createPuzzle(
|
|
49
|
+
imgSrc,
|
|
50
|
+
{
|
|
51
|
+
format: 'blob'
|
|
52
|
+
}
|
|
53
|
+
).then((res) => {
|
|
54
|
+
// 更新x轴动态偏移量
|
|
55
|
+
offsetXRef.current = res.x;
|
|
56
|
+
return {
|
|
57
|
+
bgUrl: res.bgUrl,
|
|
58
|
+
puzzleUrl: res.puzzleUrl
|
|
59
|
+
};
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
onVerify={
|
|
63
|
+
async (data) => {
|
|
64
|
+
if (data.x >= offsetXRef.current - xOffset && data.x < offsetXRef.current + xOffset) {
|
|
65
|
+
// 验证成功
|
|
66
|
+
setProps({
|
|
67
|
+
verifyResult: {
|
|
68
|
+
status: 'success',
|
|
69
|
+
timestamp: Date.now()
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
}
|
|
74
|
+
// 验证失败
|
|
75
|
+
setProps({
|
|
76
|
+
verifyResult: {
|
|
77
|
+
status: 'error',
|
|
78
|
+
timestamp: Date.now()
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
return Promise.reject();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
bgSize={{
|
|
85
|
+
width: imgWidth
|
|
86
|
+
}}
|
|
87
|
+
mode={mode}
|
|
88
|
+
tipText={tipText}
|
|
89
|
+
showRefreshIcon={showRefreshIcon}
|
|
90
|
+
autoRefreshOnError={autoRefreshOnError}
|
|
91
|
+
errorHoldDuration={errorHoldDuration}
|
|
92
|
+
placement={placement}
|
|
93
|
+
data-dash-is-loading={
|
|
94
|
+
(loading_state && loading_state.is_loading) || undefined
|
|
95
|
+
} />
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export default FefferySliderCaptcha;
|
|
100
|
+
|
|
101
|
+
FefferySliderCaptcha.defaultProps = defaultProps;
|
|
102
|
+
FefferySliderCaptcha.propTypes = propTypes;
|
package/src/lib/index.js
CHANGED
|
@@ -103,6 +103,8 @@ import FefferySortable from "./components/sortable/FefferySortable.react";
|
|
|
103
103
|
import FefferyAnimatedImage from "./components/FefferyAnimatedImage.react";
|
|
104
104
|
import FefferyDebugGuardian from "./components/security/FefferyDebugGuardian.react";
|
|
105
105
|
import FefferyDom2Image from "./components/FefferyDom2Image.react";
|
|
106
|
+
import FefferySetFavicon from "./components/FefferySetFavicon.react";
|
|
107
|
+
import FefferySliderCaptcha from "./components/FefferySliderCaptcha.react";
|
|
106
108
|
import './components/styles.css';
|
|
107
109
|
|
|
108
110
|
// 自定义sessionStorage事件监听
|
|
@@ -230,5 +232,7 @@ export {
|
|
|
230
232
|
FefferySortable,
|
|
231
233
|
FefferyAnimatedImage,
|
|
232
234
|
FefferyDebugGuardian,
|
|
233
|
-
FefferyDom2Image
|
|
235
|
+
FefferyDom2Image,
|
|
236
|
+
FefferySetFavicon,
|
|
237
|
+
FefferySliderCaptcha
|
|
234
238
|
};
|
package/usage.py
CHANGED
|
@@ -8,70 +8,42 @@ app = dash.Dash(__name__)
|
|
|
8
8
|
|
|
9
9
|
app.layout = html.Div(
|
|
10
10
|
[
|
|
11
|
-
# 测试元素
|
|
12
|
-
fuc.FefferyDiv(
|
|
13
|
-
'测试内容',
|
|
14
|
-
id='demo-target',
|
|
15
|
-
shadow='always-shadow-light',
|
|
16
|
-
style={
|
|
17
|
-
'width': 300,
|
|
18
|
-
'height': 200,
|
|
19
|
-
'display': 'flex',
|
|
20
|
-
'justifyContent': 'center',
|
|
21
|
-
'alignItems': 'center',
|
|
22
|
-
'fontSize': 18,
|
|
23
|
-
'fontWeight': 'bold',
|
|
24
|
-
'color': 'white',
|
|
25
|
-
'background': 'linear-gradient(135deg,#17ead9,#6078ea)'
|
|
26
|
-
}
|
|
27
|
-
),
|
|
28
|
-
# 测试激活元素转图片
|
|
29
11
|
html.Button(
|
|
30
|
-
'
|
|
31
|
-
id='
|
|
12
|
+
'手动刷新',
|
|
13
|
+
id='manual-refresh'
|
|
32
14
|
),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
15
|
+
fuc.FefferySliderCaptcha(
|
|
16
|
+
id='demo-slider-captcha',
|
|
17
|
+
imgSrc='/assets/demo.jpg',
|
|
18
|
+
imgWidth=360
|
|
37
19
|
),
|
|
38
|
-
html.
|
|
20
|
+
html.Pre(id='demo-output')
|
|
39
21
|
],
|
|
40
22
|
style={
|
|
41
|
-
'padding': '
|
|
23
|
+
'padding': '300px 100px'
|
|
42
24
|
}
|
|
43
25
|
)
|
|
44
26
|
|
|
45
27
|
|
|
46
28
|
@app.callback(
|
|
47
|
-
Output('demo-
|
|
48
|
-
Input('
|
|
29
|
+
Output('demo-slider-captcha', 'refresh'),
|
|
30
|
+
Input('manual-refresh', 'n_clicks'),
|
|
49
31
|
prevent_initial_call=True
|
|
50
32
|
)
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
return '#demo-target'
|
|
33
|
+
def manual_refresh(n_clicks):
|
|
34
|
+
return True
|
|
54
35
|
|
|
55
36
|
|
|
56
37
|
@app.callback(
|
|
57
|
-
Output('demo-
|
|
58
|
-
Input('demo-
|
|
59
|
-
prevent_initial_call=True
|
|
38
|
+
Output('demo-output', 'children'),
|
|
39
|
+
Input('demo-slider-captcha', 'verifyResult')
|
|
60
40
|
)
|
|
61
|
-
def
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
ensure_ascii=False,
|
|
68
|
-
indent=4
|
|
69
|
-
)
|
|
70
|
-
),
|
|
71
|
-
html.Img(
|
|
72
|
-
src=screenshotResult['dataUrl']
|
|
73
|
-
)
|
|
74
|
-
]
|
|
41
|
+
def update_output(verifyResult):
|
|
42
|
+
return json.dumps(
|
|
43
|
+
verifyResult,
|
|
44
|
+
indent=4,
|
|
45
|
+
ensure_ascii=False
|
|
46
|
+
)
|
|
75
47
|
|
|
76
48
|
|
|
77
49
|
if __name__ == '__main__':
|