Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_43355755
engine
提交
bf6d7b4e
E
engine
项目概览
weixin_43355755
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
bf6d7b4e
编写于
8月 18, 2020
作者:
M
Mouad Debbar
提交者:
GitHub
8月 18, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[web] Prepare for read-only input fields (#20520)
上级
e03d1395
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
58 addition
and
65 deletion
+58
-65
lib/web_ui/lib/src/engine/text_editing/text_capitalization.dart
...b_ui/lib/src/engine/text_editing/text_capitalization.dart
+1
-1
lib/web_ui/lib/src/engine/text_editing/text_editing.dart
lib/web_ui/lib/src/engine/text_editing/text_editing.dart
+30
-17
lib/web_ui/test/text_editing_test.dart
lib/web_ui/test/text_editing_test.dart
+27
-47
未找到文件。
lib/web_ui/lib/src/engine/text_editing/text_capitalization.dart
浏览文件 @
bf6d7b4e
...
...
@@ -37,7 +37,7 @@ class TextCapitalizationConfig {
const
TextCapitalizationConfig
.
defaultCapitalization
()
:
textCapitalization
=
TextCapitalization
.
none
;
TextCapitalizationConfig
.
fromInputConfiguration
(
String
inputConfiguration
)
const
TextCapitalizationConfig
.
fromInputConfiguration
(
String
inputConfiguration
)
:
this
.
textCapitalization
=
inputConfiguration
==
'TextCapitalization.words'
?
TextCapitalization
.
words
...
...
lib/web_ui/lib/src/engine/text_editing/text_editing.dart
浏览文件 @
bf6d7b4e
...
...
@@ -180,9 +180,9 @@ class EngineAutofillForm {
// Add a seperator between element identifiers.
for
(
final
String
id
in
ids
)
{
if
(
idBuffer
.
length
>
0
)
{
idBuffer
.
write
(
'*'
);
}
idBuffer
.
write
(
id
);
idBuffer
.
write
(
'*'
);
}
idBuffer
.
write
(
id
);
}
final
String
formIdentifier
=
idBuffer
.
toString
();
...
...
@@ -490,11 +490,13 @@ class EditingState {
/// This corresponds to Flutter's [TextInputConfiguration].
class
InputConfiguration
{
InputConfiguration
({
required
this
.
inputType
,
required
this
.
inputAction
,
required
this
.
obscureText
,
required
this
.
autocorrect
,
required
this
.
textCapitalization
,
this
.
inputType
=
EngineInputType
.
text
,
this
.
inputAction
=
'TextInputAction.done'
,
this
.
obscureText
=
false
,
this
.
readOnly
=
false
,
this
.
autocorrect
=
true
,
this
.
textCapitalization
=
const
TextCapitalizationConfig
.
defaultCapitalization
(),
this
.
autofill
,
this
.
autofillGroup
,
});
...
...
@@ -502,14 +504,17 @@ class InputConfiguration {
InputConfiguration
.
fromFrameworkMessage
(
Map
<
String
,
dynamic
>
flutterInputConfiguration
)
:
inputType
=
EngineInputType
.
fromName
(
flutterInputConfiguration
[
'inputType'
][
'name'
],
isDecimal:
flutterInputConfiguration
[
'inputType'
][
'decimal'
]
??
false
),
inputAction
=
flutterInputConfiguration
[
'inputAction'
],
obscureText
=
flutterInputConfiguration
[
'obscureText'
],
autocorrect
=
flutterInputConfiguration
[
'autocorrect'
],
flutterInputConfiguration
[
'inputType'
][
'name'
],
isDecimal:
flutterInputConfiguration
[
'inputType'
][
'decimal'
]
??
false
,
),
inputAction
=
flutterInputConfiguration
[
'inputAction'
]
??
'TextInputAction.done'
,
obscureText
=
flutterInputConfiguration
[
'obscureText'
]
??
false
,
readOnly
=
flutterInputConfiguration
[
'readOnly'
]
??
false
,
autocorrect
=
flutterInputConfiguration
[
'autocorrect'
]
??
true
,
textCapitalization
=
TextCapitalizationConfig
.
fromInputConfiguration
(
flutterInputConfiguration
[
'textCapitalization'
]),
flutterInputConfiguration
[
'textCapitalization'
],
),
autofill
=
flutterInputConfiguration
.
containsKey
(
'autofill'
)
?
AutofillInfo
.
fromFrameworkMessage
(
flutterInputConfiguration
[
'autofill'
])
...
...
@@ -522,7 +527,12 @@ class InputConfiguration {
final
EngineInputType
inputType
;
/// The default action for the input field.
final
String
?
inputAction
;
final
String
inputAction
;
/// Whether the text field can be edited or not.
///
/// Defaults to false.
final
bool
readOnly
;
/// Whether to hide the text being edited.
final
bool
?
obscureText
;
...
...
@@ -534,7 +544,7 @@ class InputConfiguration {
///
/// For future manual tests, note that autocorrect is an attribute only
/// supported by Safari.
final
bool
?
autocorrect
;
final
bool
autocorrect
;
final
AutofillInfo
?
autofill
;
...
...
@@ -742,6 +752,9 @@ abstract class DefaultTextEditingStrategy implements TextEditingStrategy {
this
.
_inputConfiguration
=
inputConfig
;
_domElement
=
inputConfig
.
inputType
.
createDomElement
();
if
(
inputConfig
.
readOnly
)
{
domElement
.
setAttribute
(
'readonly'
,
'readonly'
);
}
if
(
inputConfig
.
obscureText
!)
{
domElement
.
setAttribute
(
'type'
,
'password'
);
}
...
...
lib/web_ui/test/text_editing_test.dart
浏览文件 @
bf6d7b4e
...
...
@@ -30,22 +30,14 @@ String lastInputAction;
final
InputConfiguration
singlelineConfig
=
InputConfiguration
(
inputType:
EngineInputType
.
text
,
obscureText:
false
,
inputAction:
'TextInputAction.done'
,
autocorrect:
true
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
),
);
final
Map
<
String
,
dynamic
>
flutterSinglelineConfig
=
createFlutterConfig
(
'text'
);
final
InputConfiguration
multilineConfig
=
InputConfiguration
(
inputType:
EngineInputType
.
multiline
,
obscureText:
false
,
inputAction:
'TextInputAction.newline'
,
autocorrect:
true
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
));
inputType:
EngineInputType
.
multiline
,
inputAction:
'TextInputAction.newline'
,
);
final
Map
<
String
,
dynamic
>
flutterMultilineConfig
=
createFlutterConfig
(
'multiline'
);
...
...
@@ -115,14 +107,23 @@ void testMain() {
expect
(
document
.
activeElement
,
document
.
body
);
});
test
(
'Respects read-only config'
,
()
{
final
InputConfiguration
config
=
InputConfiguration
(
readOnly:
true
);
editingElement
.
enable
(
config
,
onChange:
trackEditingState
,
onAction:
trackInputAction
,
);
expect
(
document
.
getElementsByTagName
(
'input'
),
hasLength
(
1
));
final
InputElement
input
=
document
.
getElementsByTagName
(
'input'
)[
0
];
expect
(
editingElement
.
domElement
,
input
);
expect
(
input
.
getAttribute
(
'readonly'
),
'readonly'
);
editingElement
.
disable
();
});
test
(
'Knows how to create password fields'
,
()
{
final
InputConfiguration
config
=
InputConfiguration
(
inputType:
EngineInputType
.
text
,
inputAction:
'TextInputAction.done'
,
obscureText:
true
,
autocorrect:
true
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
));
final
InputConfiguration
config
=
InputConfiguration
(
obscureText:
true
);
editingElement
.
enable
(
config
,
onChange:
trackEditingState
,
...
...
@@ -137,13 +138,7 @@ void testMain() {
});
test
(
'Knows to turn autocorrect off'
,
()
{
final
InputConfiguration
config
=
InputConfiguration
(
inputType:
EngineInputType
.
text
,
inputAction:
'TextInputAction.done'
,
obscureText:
false
,
autocorrect:
false
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
));
final
InputConfiguration
config
=
InputConfiguration
(
autocorrect:
false
);
editingElement
.
enable
(
config
,
onChange:
trackEditingState
,
...
...
@@ -158,13 +153,7 @@ void testMain() {
});
test
(
'Knows to turn autocorrect on'
,
()
{
final
InputConfiguration
config
=
InputConfiguration
(
inputType:
EngineInputType
.
text
,
inputAction:
'TextInputAction.done'
,
obscureText:
false
,
autocorrect:
true
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
));
final
InputConfiguration
config
=
InputConfiguration
(
autocorrect:
true
);
editingElement
.
enable
(
config
,
onChange:
trackEditingState
,
...
...
@@ -298,13 +287,7 @@ void testMain() {
});
test
(
'Triggers input action'
,
()
{
final
InputConfiguration
config
=
InputConfiguration
(
inputType:
EngineInputType
.
text
,
obscureText:
false
,
inputAction:
'TextInputAction.done'
,
autocorrect:
true
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
));
final
InputConfiguration
config
=
InputConfiguration
(
inputAction:
'TextInputAction.done'
);
editingElement
.
enable
(
config
,
onChange:
trackEditingState
,
...
...
@@ -326,12 +309,9 @@ void testMain() {
test
(
'Does not trigger input action in multi-line mode'
,
()
{
final
InputConfiguration
config
=
InputConfiguration
(
inputType:
EngineInputType
.
multiline
,
obscureText:
false
,
inputAction:
'TextInputAction.done'
,
autocorrect:
true
,
textCapitalization:
TextCapitalizationConfig
.
fromInputConfiguration
(
'TextCapitalization.none'
));
inputType:
EngineInputType
.
multiline
,
inputAction:
'TextInputAction.done'
,
);
editingElement
.
enable
(
config
,
onChange:
trackEditingState
,
...
...
@@ -1693,7 +1673,8 @@ void testMain() {
// Autofill value is applied to the element.
expect
(
firstElement
.
name
,
BrowserAutofillHints
.
instance
.
flutterToEngine
(
'password'
));
expect
(
firstElement
.
id
,
BrowserAutofillHints
.
instance
.
flutterToEngine
(
'password'
));
expect
(
firstElement
.
id
,
BrowserAutofillHints
.
instance
.
flutterToEngine
(
'password'
));
expect
(
firstElement
.
type
,
'password'
);
if
(
browserEngine
==
BrowserEngine
.
firefox
)
{
expect
(
firstElement
.
name
,
...
...
@@ -1722,7 +1703,6 @@ void testMain() {
EngineAutofillForm
.
fromFrameworkMessage
(
createAutofillInfo
(
'username'
,
'field1'
),
fields
);
expect
(
autofillForm
.
formIdentifier
,
'aabbcc*jjkkll*zzyyxx'
);
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录