文字編輯器 React 元件
文字編輯器 React 元件代表 文字編輯器 元件。
文字編輯器元件
包含下列元件
TextEditor
文字編輯器屬性
屬性 | 類型 | 預設值 | 說明 |
---|---|---|---|
<TextEditor> 屬性 | |||
value | 字串 | 文字編輯器初始 html 內容值。 | |
placeholder | 字串 | 編輯器 placeholder 內容,在編輯器為空時顯示。預設未指定 | |
resizable | 布林值 | false | 讓編輯器可調整大小(其高度會符合其內容) |
mode | 字串 | 工具列 | 文字編輯器按鈕模式。可以是
|
buttons | 陣列 | 包含編輯器按鈕的陣列,或包含編輯器按鈕的陣列陣列(群組)。預設所有按鈕都已啟用,其預設值為
| |
dividers | 布林值 | true | 在按鈕群組之間加入視覺分隔線 |
imageUrlText | 字串 | 插入圖片 URL | 在圖片 URL 要求上顯示的提示文字 |
linkUrlText | 字串 | 插入連結 URL | 在連結 URL 要求上顯示的提示文字 |
clearFormattingOnPaste | 布林值 | true | 啟用時,會清除從剪貼簿貼上的所有格式 |
customButtons | 物件 | 包含自訂按鈕的物件。物件屬性金鑰是應在 例如,若要指定會加入
` |
文字編輯器事件
事件 | 引數 | 說明 |
---|---|---|
<TextEditor> 事件 | ||
textEditorChange | (值) | 當編輯器值已變更時,會觸發事件 |
textEditorInput | 事件將在編輯器的內容「輸入」事件中觸發 | |
textEditorFocus | 事件將在編輯器的內容焦點中觸發 | |
textEditorBlur | 事件將在編輯器的內容模糊中觸發 | |
textEditorButtonClick | (buttonId) | 事件將在編輯器按鈕點擊中觸發 |
textEditorKeyboardOpen | 事件將在編輯器鍵盤工具列出現時觸發 | |
textEditorKeyboardClose | 事件將在編輯器鍵盤工具列消失時觸發 | |
textEditorPopoverOpen | 事件將在編輯器彈出視窗開啟時觸發 | |
textEditorPopoverClose | 事件將在編輯器彈出視窗關閉時觸發 | |
textEditorBeforeDestroy | 事件將在 Text Editor 執行個體即將被銷毀之前觸發 |
範例
text-editor.jsx
import React, { useState } from 'react';
import {
Page,
Navbar,
BlockTitle,
BlockHeader,
Block,
TextEditor,
List,
ListInput,
} from 'framework7-react';
export default () => {
const customButtons = {
hr: {
content: '<hr>',
onClick() {
document.execCommand('insertHorizontalRule', false);
},
},
};
const [customValue, setCustomValue] =
useState(`<p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Consequatur sunt, sapiente quis eligendi consectetur hic asperiores assumenda quidem dolore quasi iusto tenetur commodi qui ullam sint sed alias! Consequatur, dolor!</p>
<p>Provident reiciendis exercitationem reprehenderit amet repellat laborum, sequi id quam quis quo quos facere veniam ad libero dolorum animi. Nobis, illum culpa explicabo dolorem vitae ut dolor at reprehenderit magnam?</p>
<p>Qui, animi. Dolores dicta, nobis aut expedita enim eum assumenda modi, blanditiis voluptatibus excepturi non pariatur. Facilis fugit facere sequi molestias nemo in, suscipit inventore consequuntur, repellat perferendis, voluptas odit.</p>
<p>Tempora voluptates, doloribus architecto eligendi numquam facilis perspiciatis autem quam voluptas maxime ratione harum laudantium cum deleniti. In, alias deserunt voluptatibus eligendi libero nobis est unde et perspiciatis cumque voluptatum.</p>
<p>Quam error doloribus qui laboriosam eligendi. Aspernatur quam pariatur perspiciatis reprehenderit atque dicta culpa, aut rem? Assumenda, quibusdam? Reprehenderit necessitatibus facere nemo iure maiores porro voluptates accusamus quibusdam. Nesciunt, assumenda?</p>`);
const [listEditorValue, setListEditorValue] = useState('');
return (
<Page>
<Navbar title="Text Editor"></Navbar>
<Block>
<p>
Framework7 comes with a touch-friendly Rich Text Editor component. It is based on modern
"contenteditable" API so it should work everywhere as is.
</p>
<p>
It comes with the basic set of formatting features. But its functionality can be easily
extended and customized to fit any requirements.
</p>
</Block>
<BlockTitle>Default Setup</BlockTitle>
<TextEditor />
<BlockTitle>With Placeholder</BlockTitle>
<TextEditor placeholder="Enter text..." />
<BlockTitle>With Default Value</BlockTitle>
<TextEditor
placeholder="Enter text..."
value={customValue}
onTextEditorChange={(value) => setCustomValue(value)}
/>
<BlockTitle>Specific Buttons</BlockTitle>
<BlockHeader>It is possible to customize which buttons (commands) to show.</BlockHeader>
<TextEditor
placeholder="Enter text..."
buttons={[
['bold', 'italic', 'underline', 'strikeThrough'],
['orderedList', 'unorderedList'],
]}
/>
<BlockTitle>Custom Button</BlockTitle>
<BlockHeader>
It is possible to create custom editor buttons. Here is the custom "hr" button that adds
horizontal rule:
</BlockHeader>
<TextEditor
placeholder="Enter text..."
customButtons={customButtons}
buttons={[['bold', 'italic', 'underline', 'strikeThrough'], 'hr']}
/>
<BlockTitle>Resizable</BlockTitle>
<BlockHeader>Editor will be resized based on its content.</BlockHeader>
<TextEditor
placeholder="Enter text..."
resizable
buttons={['bold', 'italic', 'underline', 'strikeThrough']}
/>
<BlockTitle>Popover Mode</BlockTitle>
<BlockHeader>
In this mode, there is no toolbar with buttons, but they appear as popover when you select
any text in editor.
</BlockHeader>
<TextEditor
placeholder="Enter text..."
mode="popover"
buttons={['bold', 'italic', 'underline', 'strikeThrough']}
style={{ '--f7-text-editor-height': '150px' }}
/>
<BlockTitle>Keyboard Toolbar Mode</BlockTitle>
<BlockHeader>
In this mode, toolbar with buttons will appear on top of virtual keyboard when editor is in
the focus. It is supported only in iOS, Android cordova apps and in Android Chrome. When not
supported it will fallback to "popover" mode.
</BlockHeader>
<TextEditor
placeholder="Enter text..."
mode="keyboard-toolbar"
style={{ '--f7-text-editor-height': '150px' }}
/>
<BlockTitle>As List Input</BlockTitle>
<BlockHeader>
Text editor can be used in list with other inputs. In this example it is enabled with
"keyboard-toolbar"/"popover" type for "About" field.
</BlockHeader>
<List strongIos dividersIos outlineIos>
<ListInput type="text" label="Name" placeholder="Your name" />
<ListInput
type="texteditor"
label="About"
placeholder="About"
resizable
textEditorParams={{
mode: 'popover',
buttons: ['bold', 'italic', 'underline', 'strikeThrough'],
}}
value={listEditorValue}
onTextEditorChange={(value) => setListEditorValue(value)}
/>
</List>
</Page>
);
};