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

feat(h5): add loader

上级 72ea5fa3
...@@ -257,163 +257,167 @@ function useQuill( ...@@ -257,163 +257,167 @@ function useQuill(
}) })
}) })
const id = useContextInfo() const id = useContextInfo()
useSubscribe((type: string, data: any) => { useSubscribe(
const { options, callbackId } = data (type: string, data: any) => {
let res const { options, callbackId } = data
let range: RangeStatic | undefined let res
let errMsg let range: RangeStatic | undefined
if (quillReady) { let errMsg
const Quill = (window as WindowExt).Quill as typeof QuillClass if (quillReady) {
switch (type) { const Quill = (window as WindowExt).Quill as typeof QuillClass
case 'format': switch (type) {
{ case 'format':
let { name = '', value = false } = options {
range = quill.getSelection(true) let { name = '', value = false } = options
let format = quill.getFormat(range)[name] || false range = quill.getSelection(true)
if ( let format = quill.getFormat(range)[name] || false
['bold', 'italic', 'underline', 'strike', 'ins'].includes(name) if (
) { ['bold', 'italic', 'underline', 'strike', 'ins'].includes(name)
value = !format ) {
} else if (name === 'direction') { value = !format
value = value === 'rtl' && format ? false : value } else if (name === 'direction') {
const align = quill.getFormat(range).align value = value === 'rtl' && format ? false : value
if (value === 'rtl' && !align) { const align = quill.getFormat(range).align
quill.format('align', 'right', 'user') if (value === 'rtl' && !align) {
} else if (!value && align === 'right') { quill.format('align', 'right', 'user')
quill.format('align', false, 'user') } else if (!value && align === 'right') {
} quill.format('align', false, 'user')
} else if (name === 'indent') { }
const rtl = quill.getFormat(range).direction === 'rtl' } else if (name === 'indent') {
value = value === '+1' const rtl = quill.getFormat(range).direction === 'rtl'
if (rtl) { value = value === '+1'
value = !value if (rtl) {
} value = !value
value = value ? '+1' : '-1' }
} else { value = value ? '+1' : '-1'
if (name === 'list') { } else {
value = value === 'check' ? 'unchecked' : value if (name === 'list') {
format = format === 'checked' ? 'unchecked' : format value = value === 'check' ? 'unchecked' : value
format = format === 'checked' ? 'unchecked' : format
}
value =
(format && format !== (value || false)) || (!format && value)
? value
: !format
} }
value = quill.format(name, value, 'user')
(format && format !== (value || false)) || (!format && value)
? value
: !format
} }
quill.format(name, value, 'user') break
} case 'insertDivider':
break
case 'insertDivider':
range = quill.getSelection(true)
quill.insertText(range.index, '\n', 'user')
quill.insertEmbed(range.index + 1, 'divider', true, 'user')
quill.setSelection(range.index + 2, 0, 'silent')
break
case 'insertImage':
{
range = quill.getSelection(true) range = quill.getSelection(true)
const { quill.insertText(range.index, '\n', 'user')
src = '', quill.insertEmbed(range.index + 1, 'divider', true, 'user')
alt = '', quill.setSelection(range.index + 2, 0, 'silent')
width = '', break
height = '', case 'insertImage':
extClass = '', {
data = {}, range = quill.getSelection(true)
} = options const {
const path = getRealPath(src) src = '',
quill.insertEmbed(range.index, 'image', path, 'user') alt = '',
const local = /^(file|blob):/.test(path) ? path : false width = '',
quill.formatText(range.index, 1, 'data-local', local) height = '',
quill.formatText(range.index, 1, 'alt', alt) extClass = '',
quill.formatText(range.index, 1, 'width', width) data = {},
quill.formatText(range.index, 1, 'height', height) } = options
quill.formatText(range.index, 1, 'class', extClass) const path = getRealPath(src)
quill.formatText( quill.insertEmbed(range.index, 'image', path, 'user')
range.index, const local = /^(file|blob):/.test(path) ? path : false
1, quill.formatText(range.index, 1, 'data-local', local)
'data-custom', quill.formatText(range.index, 1, 'alt', alt)
Object.keys(data) quill.formatText(range.index, 1, 'width', width)
.map((key) => `${key}=${data[key]}`) quill.formatText(range.index, 1, 'height', height)
.join('&') quill.formatText(range.index, 1, 'class', extClass)
) quill.formatText(
quill.setSelection(range.index + 1, 0, 'silent') range.index,
} 1,
break 'data-custom',
case 'insertText': Object.keys(data)
{ .map((key) => `${key}=${data[key]}`)
range = quill.getSelection(true) .join('&')
const { text = '' } = options )
quill.insertText(range.index, text, 'user') quill.setSelection(range.index + 1, 0, 'silent')
quill.setSelection(range.index + text.length, 0, 'silent')
}
break
case 'setContents':
{
const { delta, html } = options
if (typeof delta === 'object') {
quill.setContents(delta, 'silent')
} else if (typeof html === 'string') {
quill.setContents(html2delta(html), 'silent')
} else {
errMsg = 'contents is missing'
} }
} break
break case 'insertText':
case 'getContents': {
res = getContents() range = quill.getSelection(true)
break const { text = '' } = options
case 'clear': quill.insertText(range.index, text, 'user')
quill.setText('') quill.setSelection(range.index + text.length, 0, 'silent')
break
case 'removeFormat':
{
range = quill.getSelection(true)
const parchment = Quill.import('parchment')
if (range.length) {
quill.removeFormat(range.index, range.length, 'user')
} else {
Object.keys(quill.getFormat(range)).forEach((key) => {
if (parchment.query(key, parchment.Scope.INLINE)) {
quill.format(key, false)
}
})
} }
} break
break case 'setContents':
case 'undo': {
quill.history.undo() const { delta, html } = options
break if (typeof delta === 'object') {
case 'redo': quill.setContents(delta, 'silent')
quill.history.redo() } else if (typeof html === 'string') {
break quill.setContents(html2delta(html), 'silent')
case 'blur': } else {
quill.blur() errMsg = 'contents is missing'
break }
case 'getSelectionText': }
range = quill.selection.savedRange break
res = { text: '' } case 'getContents':
if (range && range.length !== 0) { res = getContents()
res.text = quill.getText(range.index, range.length) break
} case 'clear':
break quill.setText('')
case 'scrollIntoView': break
quill.scrollIntoView() case 'removeFormat':
break {
default: range = quill.getSelection(true)
break const parchment = Quill.import('parchment')
if (range.length) {
quill.removeFormat(range.index, range.length, 'user')
} else {
Object.keys(quill.getFormat(range)).forEach((key) => {
if (parchment.query(key, parchment.Scope.INLINE)) {
quill.format(key, false)
}
})
}
}
break
case 'undo':
quill.history.undo()
break
case 'redo':
quill.history.redo()
break
case 'blur':
quill.blur()
break
case 'getSelectionText':
range = quill.selection.savedRange
res = { text: '' }
if (range && range.length !== 0) {
res.text = quill.getText(range.index, range.length)
}
break
case 'scrollIntoView':
quill.scrollIntoView()
break
default:
break
}
updateStatus(range)
} else {
errMsg = 'not ready'
} }
updateStatus(range) if (callbackId) {
} else { UniViewJSBridge.publishHandler('onEditorMethodCallback', {
errMsg = 'not ready' callbackId,
} data: Object.assign({}, res, {
if (callbackId) { errMsg: `${type}:${errMsg ? 'fail ' + errMsg : 'ok'}`,
UniViewJSBridge.publishHandler('onEditorMethodCallback', { }),
callbackId, })
data: Object.assign({}, res, { }
errMsg: `${type}:${errMsg ? 'fail ' + errMsg : 'ok'}`, },
}), id,
}) true
} )
}, id, true)
} }
const props = /*#__PURE__*/ Object.assign({}, keyboardProps, { const props = /*#__PURE__*/ Object.assign({}, keyboardProps, {
......
import { import { onMounted, getCurrentInstance } from 'vue'
onMounted,
getCurrentInstance,
} from 'vue'
import { useCurrentPageId } from '@dcloudio/uni-core' import { useCurrentPageId } from '@dcloudio/uni-core'
type ContextType = 'canvas' | 'map' | 'video' | 'editor' type ContextType = 'canvas' | 'map' | 'video' | 'editor'
export interface ContextInfo { export interface ContextInfo {
id: string, id: string
type: ContextType type: ContextType
page: number page: number
} }
...@@ -27,11 +24,11 @@ export function useContextInfo() { ...@@ -27,11 +24,11 @@ export function useContextInfo() {
el.__uniContextInfo = { el.__uniContextInfo = {
id, id,
type, type,
page page,
} }
}) })
return `${page}.${type}.${id}` return `${page}.${type}.${id}`
} }
export function getContextInfo(el: HTMLElement | HTMLElementWithContextInfo) { export function getContextInfo(el: HTMLElement | HTMLElementWithContextInfo) {
return (el as HTMLElementWithContextInfo).__uniContextInfo return (el as HTMLElementWithContextInfo).__uniContextInfo
} }
\ No newline at end of file
...@@ -594,7 +594,7 @@ var safeAreaInsets = { ...@@ -594,7 +594,7 @@ var safeAreaInsets = {
onChange, onChange,
offChange offChange
}; };
var D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out = safeAreaInsets; var out = safeAreaInsets;
const onEventPrevent = /* @__PURE__ */ withModifiers(() => { const onEventPrevent = /* @__PURE__ */ withModifiers(() => {
}, ["prevent"]); }, ["prevent"]);
const onEventStop = /* @__PURE__ */ withModifiers(() => { const onEventStop = /* @__PURE__ */ withModifiers(() => {
...@@ -606,10 +606,10 @@ function getWindowOffset() { ...@@ -606,10 +606,10 @@ function getWindowOffset() {
const left = parseInt(style.getPropertyValue("--window-left")); const left = parseInt(style.getPropertyValue("--window-left"));
const right = parseInt(style.getPropertyValue("--window-right")); const right = parseInt(style.getPropertyValue("--window-right"));
return { return {
top: top ? top + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top : 0, top: top ? top + out.top : 0,
bottom: bottom ? bottom + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom : 0, bottom: bottom ? bottom + out.bottom : 0,
left: left ? left + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left : 0, left: left ? left + out.left : 0,
right: right ? right + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right : 0 right: right ? right + out.right : 0
}; };
} }
function updateCssVar(cssVars) { function updateCssVar(cssVars) {
...@@ -1292,7 +1292,7 @@ function normalizePageMeta(pageMeta) { ...@@ -1292,7 +1292,7 @@ function normalizePageMeta(pageMeta) {
let offset = rpx2px(refreshOptions.offset); let offset = rpx2px(refreshOptions.offset);
const {type} = navigationBar; const {type} = navigationBar;
if (type !== "transparent" && type !== "none") { if (type !== "transparent" && type !== "none") {
offset += NAVBAR_HEIGHT + D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top; offset += NAVBAR_HEIGHT + out.top;
} }
refreshOptions.offset = offset; refreshOptions.offset = offset;
refreshOptions.height = rpx2px(refreshOptions.height); refreshOptions.height = rpx2px(refreshOptions.height);
...@@ -14870,7 +14870,7 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", () ...@@ -14870,7 +14870,7 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", ()
const windowWidth = getWindowWidth(screenWidth); const windowWidth = getWindowWidth(screenWidth);
let windowHeight = window.innerHeight; let windowHeight = window.innerHeight;
const language = navigator.language; const language = navigator.language;
const statusBarHeight = D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top; const statusBarHeight = out.top;
let osname; let osname;
let osversion; let osversion;
let model; let model;
...@@ -14983,12 +14983,12 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", () ...@@ -14983,12 +14983,12 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", ()
const system = `${osname} ${osversion}`; const system = `${osname} ${osversion}`;
const platform = osname.toLocaleLowerCase(); const platform = osname.toLocaleLowerCase();
const safeArea = { const safeArea = {
left: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left, left: out.left,
right: windowWidth - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right, right: windowWidth - out.right,
top: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top, top: out.top,
bottom: windowHeight - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom, bottom: windowHeight - out.bottom,
width: windowWidth - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right, width: windowWidth - out.left - out.right,
height: windowHeight - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top - D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom height: windowHeight - out.top - out.bottom
}; };
const {top: windowTop, bottom: windowBottom} = getWindowOffset(); const {top: windowTop, bottom: windowBottom} = getWindowOffset();
windowHeight -= windowTop; windowHeight -= windowTop;
...@@ -15008,10 +15008,10 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", () ...@@ -15008,10 +15008,10 @@ const getSystemInfoSync = /* @__PURE__ */ defineSyncApi("getSystemInfoSync", ()
model, model,
safeArea, safeArea,
safeAreaInsets: { safeAreaInsets: {
top: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.top, top: out.top,
right: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.right, right: out.right,
bottom: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.bottom, bottom: out.bottom,
left: D__DCloud_local_git_uniAppNext_node_modules_safeAreaInsets_out.left left: out.left
} }
}; };
}); });
......
...@@ -685,23 +685,27 @@ function useContext( ...@@ -685,23 +685,27 @@ function useContext(
exitFullScreen, exitFullScreen,
} }
const id = useContextInfo() const id = useContextInfo()
useSubscribe((type: string, data: any) => { useSubscribe(
let options (type: string, data: any) => {
switch (type) { let options
case 'seek': switch (type) {
options = data.position case 'seek':
break options = data.position
case 'sendDanmu': break
options = data case 'sendDanmu':
break options = data
case 'playbackRate': break
options = data.rate case 'playbackRate':
break options = data.rate
} break
if (type in methods) { }
methods[type as keyof typeof methods](options) if (type in methods) {
} methods[type as keyof typeof methods](options)
}, id, true) }
},
id,
true
)
} }
const props = { const props = {
......
...@@ -160,11 +160,9 @@ function generateCssCode( ...@@ -160,11 +160,9 @@ function generateCssCode(
} }
function generatePageDefineCode(pageOptions: UniApp.PagesJsonPageOptions) { function generatePageDefineCode(pageOptions: UniApp.PagesJsonPageOptions) {
return `const ${normalizePageIdentifier( const pageIdent = normalizePageIdentifier(pageOptions.path)
pageOptions.path return `const ${pageIdent}Loader = ()=>import('./${pageOptions.path}?mpType=page')
)} = defineAsyncComponent(extend({loader:()=>import('./${ const ${pageIdent} = defineAsyncComponent(extend({loader:${pageIdent}Loader},AsyncComponentOptions))`
pageOptions.path
}?mpType=page')},AsyncComponentOptions))`
} }
function generatePagesDefineCode( function generatePagesDefineCode(
...@@ -230,6 +228,7 @@ function generatePageRoute({ name, path, meta }: PageRouteOptions) { ...@@ -230,6 +228,7 @@ function generatePageRoute({ name, path, meta }: PageRouteOptions) {
return `{ return `{
path:'/${isEntry ? '' : path}',${alias} path:'/${isEntry ? '' : path}',${alias}
component:{render(){return renderPage(${name})}}, component:{render(){return renderPage(${name})}},
loader: ${normalizePageIdentifier(path)}Loader,
meta: ${JSON.stringify(meta)} meta: ${JSON.stringify(meta)}
}` }`
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册