提交 5d56184c 编写于 作者: Q qiang

chore: Merge branch 'next' of github.com:dcloudio/uni-app into next

import { ComponentPublicInstance } from 'vue'
import { findElmById, invokeVmMethod, invokeVmMethodWithoutArgs } from '../util'
import { getPageById } from '../../framework/page/getCurrentPages'
type Methords = Record<string, (ctx: any, args: any) => void>
......@@ -64,7 +65,7 @@ export function operateMap(
data?: unknown,
operateMapCallback?: (res: any) => void
) {
const page = getCurrentPages().find((page) => page.$page.id === pageId)
const page = getPageById(pageId)
if (page?.$page.meta.isNVue) {
const pageVm = (page as any).$vm as ComponentPublicInstance
return METHODS[type as keyof typeof METHODS](
......
import { ComponentPublicInstance } from 'vue'
import { findElmById, invokeVmMethod, invokeVmMethodWithoutArgs } from '../util'
import { getPageById } from '../../framework/page/getCurrentPages'
const METHODS = {
play(ctx: any) {
......@@ -43,7 +44,7 @@ export function operateVideoPlayer(
type: string,
data?: unknown
) {
const page = getCurrentPages().find((page) => page.$page.id === pageId)
const page = getPageById(pageId)
if (page?.$page.meta.isNVue) {
const pageVm = (page as any).$vm as ComponentPublicInstance
return METHODS[type as keyof typeof METHODS](
......
......@@ -7,10 +7,10 @@ import {
SetClipboardDataProtocol,
defineAsyncApi,
} from '@dcloudio/uni-api'
import { showModal } from '../../api/ui/popup/showModal'
// import { showModal } from '../../api/ui/popup/showModal'
import {
useI18n,
initI18nSetClipboardDataMsgsOnce,
// initI18nSetClipboardDataMsgsOnce,
initI18nGetClipboardDataMsgsOnce,
} from '@dcloudio/uni-core'
......@@ -23,7 +23,9 @@ export const getClipboardData = defineAsyncApi<API_TYPE_GET_CLIPBOARD_DATA>(
const data = await navigator.clipboard.readText()
resolve({ data })
} catch (error: any) {
reject(`${error} ${t('uni.getClipboardData.fail')}`)
_getClipboardData(resolve, () => {
reject(`${error} ${t('uni.getClipboardData.fail')}`)
})
}
}
)
......@@ -31,20 +33,44 @@ export const getClipboardData = defineAsyncApi<API_TYPE_GET_CLIPBOARD_DATA>(
export const setClipboardData = defineAsyncApi<API_TYPE_SET_CLIPBOARD_DATA>(
API_SET_CLIPBOARD_DATA,
async ({ data }, { resolve, reject }) => {
initI18nSetClipboardDataMsgsOnce()
const { t } = useI18n()
try {
await navigator.clipboard.writeText(data)
resolve()
} catch (error) {
reject()
showModal({
title: t('uni.setClipboardData.fail'),
content: data,
editable: true,
})
_setClipboardData(data, resolve, reject)
}
},
SetClipboardDataProtocol,
SetClipboardDataOptions
)
function _getClipboardData(resolve: Function, reject: Function) {
const pasteText = document.getElementById('#clipboard') as HTMLInputElement
const data = pasteText ? pasteText.value : undefined
if (data) {
resolve({ data })
} else {
reject()
}
}
function _setClipboardData(data: string, resolve: Function, reject: Function) {
const pasteText = document.getElementById('#clipboard')
pasteText && pasteText.remove()
const textarea = document.createElement('textarea')
textarea.id = '#clipboard'
textarea.style.position = 'fixed'
textarea.style.top = '-9999px'
textarea.style.zIndex = '-9999'
document.body.appendChild(textarea)
textarea.value = data
textarea.select()
textarea.setSelectionRange(0, textarea.value.length)
const result = document.execCommand('Copy', false)
textarea.blur()
if (result) {
resolve()
} else {
reject()
}
}
......@@ -39,15 +39,26 @@ describe('mp-kuaishou: transform v-on', () => {
return { a: _j({ 'click': _o(_ctx.click) }) }
}`
)
}),
test(`multi custom event`, () => {
assert(
`<custom @unmount="unmount" @custom-mount="mount();created();"/>`,
`<custom bindunmount="__e" bindcustomMount="__e" u-i="2a9ec0b0-0" bind:__l="__l" eO="{{a}}"/>`,
`(_ctx, _cache) => {
})
test(`multi custom event`, () => {
assert(
`<custom @unmount="unmount" @custom-mount="mount();created();"/>`,
`<custom bindunmount="__e" bindcustomMount="__e" u-i="2a9ec0b0-0" bind:__l="__l" eO="{{a}}"/>`,
`(_ctx, _cache) => {
return { a: _j({ 'unmount': _o(_ctx.unmount), 'customMount': _o($event => { _ctx.mount(); _ctx.created(); }) }) }
}`
)
})
)
})
})
describe('event', () => {
test(`getphonenumber`, () => {
assert(
`<button open-type="getPhoneNumber" @getphonenumber="getInfo"></button>`,
`<button open-type="getPhoneNumber" bindgetphonenumber="__e" data-e-o="{{a}}"></button>`,
`(_ctx, _cache) => {
return { a: { 'getphonenumber': _o(_ctx.getInfo) } }
}`
)
})
})
})
......@@ -5,6 +5,7 @@ import { transformOn as baseTransformOn } from '@dcloudio/uni-mp-compiler'
*/
export const transformOn = createTransformOn(baseTransformOn, {
match: (name, node, context) => {
if (name === 'getphonenumber') return true
if (name === 'input' && (node.tag === 'input' || node.tag === 'textarea')) {
return true
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册