提交 ffafdf3b 编写于 作者: fxy060608's avatar fxy060608

chore: merge

......@@ -314,7 +314,8 @@ function useEvent(
field &&
state.focus &&
state.selectionStart > -1 &&
state.selectionEnd > -1
state.selectionEnd > -1 &&
field.type !== 'number'
) {
field.selectionStart = state.selectionStart
field.selectionEnd = state.selectionEnd
......@@ -327,7 +328,8 @@ function useEvent(
state.focus &&
state.selectionStart < 0 &&
state.selectionEnd < 0 &&
state.cursor > -1
state.cursor > -1 &&
field.type !== 'number'
) {
field.selectionEnd = field.selectionStart = state.cursor
}
......@@ -370,9 +372,18 @@ function useEvent(
onInput(event, true)
}
state.focus = false
const field = event.target! as HTMLInputElement
let cursor
if (field.type === 'number') {
field.type = 'text'
cursor = field.selectionEnd
field.type = 'number'
} else {
cursor = field.selectionEnd
}
trigger('blur', event, {
value: state.value,
cursor: (event.target as HTMLFieldElement).selectionEnd,
cursor,
})
}
// 避免触发父组件 change 事件
......
......@@ -3040,14 +3040,14 @@ function useAutoFocus(props2, fieldRef) {
function useEvent(fieldRef, state, trigger, triggerInput, beforeInput) {
function checkSelection() {
const field = fieldRef.value;
if (field && state.focus && state.selectionStart > -1 && state.selectionEnd > -1) {
if (field && state.focus && state.selectionStart > -1 && state.selectionEnd > -1 && field.type !== "number") {
field.selectionStart = state.selectionStart;
field.selectionEnd = state.selectionEnd;
}
}
function checkCursor() {
const field = fieldRef.value;
if (field && state.focus && state.selectionStart < 0 && state.selectionEnd < 0 && state.cursor > -1) {
if (field && state.focus && state.selectionStart < 0 && state.selectionEnd < 0 && state.cursor > -1 && field.type !== "number") {
field.selectionEnd = field.selectionStart = state.cursor;
}
}
......@@ -3080,9 +3080,18 @@ function useEvent(fieldRef, state, trigger, triggerInput, beforeInput) {
onInput(event, true);
}
state.focus = false;
const field2 = event.target;
let cursor;
if (field2.type === "number") {
field2.type = "text";
cursor = field2.selectionEnd;
field2.type = "number";
} else {
cursor = field2.selectionEnd;
}
trigger("blur", event, {
value: state.value,
cursor: event.target.selectionEnd
cursor
});
};
field.addEventListener("change", (event) => event.stopPropagation());
......
......@@ -8446,14 +8446,14 @@ function useAutoFocus(props2, fieldRef) {
function useEvent(fieldRef, state2, trigger, triggerInput, beforeInput) {
function checkSelection() {
const field = fieldRef.value;
if (field && state2.focus && state2.selectionStart > -1 && state2.selectionEnd > -1) {
if (field && state2.focus && state2.selectionStart > -1 && state2.selectionEnd > -1 && field.type !== "number") {
field.selectionStart = state2.selectionStart;
field.selectionEnd = state2.selectionEnd;
}
}
function checkCursor() {
const field = fieldRef.value;
if (field && state2.focus && state2.selectionStart < 0 && state2.selectionEnd < 0 && state2.cursor > -1) {
if (field && state2.focus && state2.selectionStart < 0 && state2.selectionEnd < 0 && state2.cursor > -1 && field.type !== "number") {
field.selectionEnd = field.selectionStart = state2.cursor;
}
}
......@@ -8486,9 +8486,18 @@ function useEvent(fieldRef, state2, trigger, triggerInput, beforeInput) {
onInput(event, true);
}
state2.focus = false;
const field2 = event.target;
let cursor;
if (field2.type === "number") {
field2.type = "text";
cursor = field2.selectionEnd;
field2.type = "number";
} else {
cursor = field2.selectionEnd;
}
trigger("blur", event, {
value: state2.value,
cursor: event.target.selectionEnd
cursor
});
};
field.addEventListener("change", (event) => event.stopPropagation());
......
import { assert } from './testUtils'
describe('compiler: transform v-html', () => {
test('basic', () => {
assert(
`<view v-html="html"></view>`,
`<view><rich-text nodes="{{a}}"/></view>`,
`(_ctx, _cache) => {
return { a: _ctx.html }
}`
)
assert(
`<view v-html="'<div/>'"></view>`,
`<view><rich-text nodes="{{'<div/>'}}"/></view>`,
`(_ctx, _cache) => {
return {}
}`
)
})
test('self closing', () => {
assert(
`<view v-html="html"/>`,
`<view><rich-text nodes="{{a}}"/></view>`,
`(_ctx, _cache) => {
return { a: _ctx.html }
}`
)
})
})
......@@ -17,6 +17,7 @@ import { transformComponent } from './transforms/transformComponent'
import { transformSlot } from './transforms/vSlot'
import { transformRoot } from './transforms/transformRoot'
import { transformTag } from './transforms/transformTag'
import { transformHtml } from './transforms/vHtml'
export type TransformPreset = [
NodeTransform[],
......@@ -34,6 +35,7 @@ export function getBaseTransformPreset({
const nodeTransforms = [
transformRoot,
transformTag,
transformHtml,
transformIf,
transformFor,
transformSlot,
......
import {
createBindDirectiveNode,
isElementNode,
} from '@dcloudio/uni-cli-shared'
import {
DirectiveNode,
ElementNode,
ElementTypes,
findDir,
NodeTypes,
PlainElementNode,
} from '@vue/compiler-core'
import { NodeTransform } from '../transform'
export const transformHtml: NodeTransform = (node, _) => {
if (!isElementNode(node)) {
return
}
const dir = findDir(node, 'html')
if (!dir) {
return
}
// remove v-html
node.props.splice(node.props.indexOf(dir), 1)
if (node.tagType !== ElementTypes.ELEMENT) {
return
}
node.isSelfClosing = false
node.children = [createRichText(node, dir)]
}
function createRichText(
node: PlainElementNode,
dir: DirectiveNode
): ElementNode {
return {
tag: 'rich-text',
type: NodeTypes.ELEMENT,
tagType: ElementTypes.ELEMENT,
props: [createBindDirectiveNode('nodes', dir.exp || '')],
isSelfClosing: true,
children: [],
codegenNode: undefined,
ns: node.ns,
loc: node.loc,
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册