diff --git a/lib/apis.js b/lib/apis.js index 0ac63a6a105010cbcc1b4028f80a89dee218b68d..2c22441e47e02e7b4a496733d841db9bfe74364f 100644 --- a/lib/apis.js +++ b/lib/apis.js @@ -109,8 +109,8 @@ const device = [ 'getBLEDeviceServices', 'getBLEDeviceCharacteristics', 'createBLEConnection', - 'closeBLEConnection', - 'setBLEMTU', + 'closeBLEConnection', + 'setBLEMTU', 'getBLEDeviceRSSI', 'onBeaconServiceChange', 'onBeaconUpdate', @@ -119,14 +119,15 @@ const device = [ 'stopBeaconDiscovery', 'checkIsSupportSoterAuthentication', 'checkIsSoterEnrolledInDevice', - 'startSoterAuthentication', + 'startSoterAuthentication', 'onThemeChange', 'onUIStyleChange' ] const keyboard = [ 'hideKeyboard', - 'onKeyboardHeightChange' + 'onKeyboardHeightChange', + 'getSelectedTextRange' ] const ui = [ diff --git a/src/core/service/api/keyboard/get-selected-text-range.js b/src/core/service/api/keyboard/get-selected-text-range.js new file mode 100644 index 0000000000000000000000000000000000000000..363f3a40e8b9393fb8aa901a3ef83f05d77c5294 --- /dev/null +++ b/src/core/service/api/keyboard/get-selected-text-range.js @@ -0,0 +1,30 @@ +import createCallbacks from 'uni-helpers/callbacks' +import { + getCurrentPageId +} from '../../platform' +import { + invoke +} from '../../bridge' + +const getSelectedTextRangeEventCallbacks = createCallbacks('getSelectedTextRangeEvent') + +UniServiceJSBridge.subscribe('onGetSelectedTextRange', ({ + callbackId, + data +}) => { + console.log('onGetSelectedTextRange') + const callback = getSelectedTextRangeEventCallbacks.pop(callbackId) + if (callback) { + callback(data) + } +}) + +export function getSelectedTextRange (_, callbackId) { + const pageId = getCurrentPageId() + UniServiceJSBridge.publishHandler('getSelectedTextRange', { + pageId, + callbackId: getSelectedTextRangeEventCallbacks.push(function (res) { + invoke(callbackId, res) + }) + }, pageId) +} diff --git a/src/core/service/api/ui/keyboard.js b/src/core/service/api/keyboard/keyboard.js similarity index 100% rename from src/core/service/api/ui/keyboard.js rename to src/core/service/api/keyboard/keyboard.js diff --git a/src/core/view/mixins/base-input.js b/src/core/view/mixins/base-input.js index d24b46783918d8bcb77a92ff054dadc47185d89d..08a6f7f1510b2d91a3168e5c90a504a51cf56972 100644 --- a/src/core/view/mixins/base-input.js +++ b/src/core/view/mixins/base-input.js @@ -5,6 +5,24 @@ import { import emitter from './emitter' import keyboard from './keyboard' +UniViewJSBridge.subscribe('getSelectedTextRange', function ({ pageId, callbackId }) { + const activeElement = document.activeElement + const tagName = activeElement.tagName.toLowerCase() + const tagNames = ['input', 'textarea'] + const data = {} + if (tagNames.includes(tagName)) { + data.errMsg = 'getSelectedTextRange:ok' + data.start = activeElement.selectionStart + data.end = activeElement.selectionEnd + } else { + data.errMsg = 'getSelectedTextRange:fail:no focused' + } + UniViewJSBridge.publishHandler('onGetSelectedTextRange', { + callbackId, + data + }, pageId) +}) + export default { name: 'BaseInput', mixins: [emitter, keyboard], diff --git a/src/platforms/app-plus/service/api/index.js b/src/platforms/app-plus/service/api/index.js index f48708576482e174103663aeb77c16ffcc7c5b86..85f31c1b9e67138f8d0eaec3970daf7434077e76 100644 --- a/src/platforms/app-plus/service/api/index.js +++ b/src/platforms/app-plus/service/api/index.js @@ -62,7 +62,7 @@ export * from './route/preload-page' export * from './storage/storage' -export * from './ui/keyboard' +export * from './keyboard/keyboard' export * from './ui/navigation-bar' export * from './ui/popup' diff --git a/src/platforms/app-plus/service/api/ui/keyboard.js b/src/platforms/app-plus/service/api/keyboard/keyboard.js similarity index 100% rename from src/platforms/app-plus/service/api/ui/keyboard.js rename to src/platforms/app-plus/service/api/keyboard/keyboard.js diff --git a/src/platforms/h5/service/api/device/hide-keyboard.js b/src/platforms/h5/service/api/keyboard/keyboard.js similarity index 100% rename from src/platforms/h5/service/api/device/hide-keyboard.js rename to src/platforms/h5/service/api/keyboard/keyboard.js