Commit 11f29e9f by Рамис

add lang(ru), add upload options

parent c2c9d3d2
...@@ -6,9 +6,16 @@ import 'react-ag-qeditor/dist/index.css' ...@@ -6,9 +6,16 @@ import 'react-ag-qeditor/dist/index.css'
const App = () => { const App = () => {
return <div style={{padding:40}}> return <div style={{padding:40}}>
<QEditor value={'<span style="font-size: 20px;">asds</span>'} onChange={(value)=>{ <QEditor
console.log('sads', value); value={'<span style="font-size: 20px;">asds</span>'}
}} /> onChange={(value)=>{
console.log('sads', value);
}}
uploadOptions={{
url: 'https://cdn.atmaguru.online/upload/?sid=test&md5=UN8SUwWR8m5XUm9v8uDtew&expires=1652081782',
errorMessage: 'Загрузка временно невозможна'
}}
/>
</div> </div>
} }
......
{ {
"name": "react-ag-qeditor", "name": "react-ag-qeditor",
"version": "0.0.3", "version": "0.0.4",
"description": "WYSIWYG html editor", "description": "WYSIWYG html editor",
"author": "atma", "author": "atma",
"license": "MIT", "license": "MIT",
......
...@@ -91,7 +91,7 @@ export default class QEditor extends React.Component { ...@@ -91,7 +91,7 @@ export default class QEditor extends React.Component {
<div className={'atma-editor-modal-action'}> <div className={'atma-editor-modal-action'}>
{ {
buttons.map((btn, i) => ( buttons.map((btn, i) => (
<button type={'button'} key={'mAction' + i} className={'atma-editor-btn' + btn.className} <button disabled={ btn.disabled } type={'button'} key={'mAction' + i} className={'atma-editor-btn' + btn.className}
onClick={btn.onClick}>{btn.title}</button> onClick={btn.onClick}>{btn.title}</button>
)) ))
} }
...@@ -112,7 +112,7 @@ export default class QEditor extends React.Component { ...@@ -112,7 +112,7 @@ export default class QEditor extends React.Component {
<ul className={'atma-editor-soc-video'}> <ul className={'atma-editor-soc-video'}>
<li className={'youtube'}/> <li className={'youtube'}/>
<li className={'vimeo'}/> <li className={'vimeo'}/>
<li className={'vk'}/> {/* <li className={'vk'}/> */}
<li className={'ok'}/> <li className={'ok'}/>
</ul> </ul>
</Fragment> </Fragment>
...@@ -123,7 +123,8 @@ export default class QEditor extends React.Component { ...@@ -123,7 +123,8 @@ export default class QEditor extends React.Component {
<Uploader <Uploader
key={this.state.uploaderUid} key={this.state.uploaderUid}
accept={'video/*'} accept={'video/*'}
action={'https://cdn.atmaguru.online/upload/?sid=test&md5=UN8SUwWR8m5XUm9v8uDtew&expires=1652081782'} action={ this.props.uploadOptions.url }
errorMessage={ this.props.uploadOptions.errorMessage }
onSuccess={(file) => { onSuccess={(file) => {
let uploadedPaths = this.state.uploadedPaths; let uploadedPaths = this.state.uploadedPaths;
...@@ -140,7 +141,8 @@ export default class QEditor extends React.Component { ...@@ -140,7 +141,8 @@ export default class QEditor extends React.Component {
<Uploader <Uploader
key={this.state.uploaderUid} key={this.state.uploaderUid}
accept={'image/*'} accept={'image/*'}
action={'https://cdn.atmaguru.online/upload/?sid=test&md5=UN8SUwWR8m5XUm9v8uDtew&expires=1652081782'} action={ this.props.uploadOptions.url }
errorMessage={ this.props.uploadOptions.errorMessage }
onSuccess={(file) => { onSuccess={(file) => {
let uploadedPaths = this.state.uploadedPaths; let uploadedPaths = this.state.uploadedPaths;
...@@ -194,7 +196,7 @@ export default class QEditor extends React.Component { ...@@ -194,7 +196,7 @@ export default class QEditor extends React.Component {
return ( return (
<Fragment> <Fragment>
<div className="atma-editor-wrap" style={{maxWidth}}> <div className="atma-editor-wrap" style={{maxWidth}}>
<div className={'atma-editor'}> <div className={'atma-editor'} data-lang={ this.props.lang ? this.props.lang : 'ru' }>
<ReactQuill <ReactQuill
ref={ref => this.quillRef = ref} ref={ref => this.quillRef = ref}
defaultValue={value} defaultValue={value}
...@@ -230,7 +232,8 @@ export default class QEditor extends React.Component { ...@@ -230,7 +232,8 @@ export default class QEditor extends React.Component {
{ {
title: 'Вставить', title: 'Вставить',
className: ' atma-editor-complete', className: ' atma-editor-complete',
onClick: () => this.quillInsert() onClick: () => this.quillInsert(),
disabled: (this.props.uploadOptions.url === null && (innerModalType === 'videoLocal' || innerModalType === 'image'))
} }
]) ])
} }
...@@ -245,5 +248,9 @@ QEditor.defaultProps = { ...@@ -245,5 +248,9 @@ QEditor.defaultProps = {
maxWidth: 'auto', maxWidth: 'auto',
maxHeight: 1000, maxHeight: 1000,
onChange: ()=>{}, onChange: ()=>{},
lang: 'ru' lang: 'ru',
uploadOptions: {
url: null,
errorMessage: null
}
} }
...@@ -69,6 +69,10 @@ export default class Uploader extends React.Component { ...@@ -69,6 +69,10 @@ export default class Uploader extends React.Component {
return this.props.onSuccess; return this.props.onSuccess;
} }
get errorMessage () {
return this.props.errorMessage;
}
mediaItem(){ mediaItem(){
} }
...@@ -76,6 +80,10 @@ export default class Uploader extends React.Component { ...@@ -76,6 +80,10 @@ export default class Uploader extends React.Component {
render () { render () {
let {disabledFileUpload, isUpload, progress, dropFiles} = this.state; let {disabledFileUpload, isUpload, progress, dropFiles} = this.state;
if(this.action === null){
return <div style={{ textAlign: 'left' }}>{ this.errorMessage }</div>
}
return ( return (
<Fragment> <Fragment>
<div className={'atma-editor-uploader-uitems'}> <div className={'atma-editor-uploader-uitems'}>
...@@ -159,5 +167,6 @@ Uploader.defaultProps = { ...@@ -159,5 +167,6 @@ Uploader.defaultProps = {
multiple: false, multiple: false,
accept: '*', accept: '*',
type: '', type: '',
onSuccess: ()=>{} onSuccess: ()=>{},
errorMessage: null,
}; };
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
*{ *{
box-sizing: border-box; box-sizing: border-box;
color: #434A53;
} }
} }
...@@ -181,12 +180,19 @@ ...@@ -181,12 +180,19 @@
border: none; border: none;
background: none; background: none;
padding: 16px 24px; padding: 16px 24px;
line-height: 16px;
&:hover{ &:hover{
cursor: pointer; cursor: pointer;
opacity: 0.7; opacity: 0.7;
} }
&[disabled]{
opacity: 0.3 !important;
cursor: default !important;
}
&.atma-editor-complete{ &.atma-editor-complete{
background-color: #1790FF; background-color: #1790FF;
border-radius: 24px; border-radius: 24px;
...@@ -234,6 +240,57 @@ ...@@ -234,6 +240,57 @@
} }
} }
} }
}
//lang RU
&[data-lang="ru"]{
.ql-snow{
.ql-picker.ql-header .ql-picker-label,
.ql-picker.ql-header .ql-picker-item{
&::before{
content: 'Обычный';
}
&[data-value="2"]::before{
content: 'H2';
}
&[data-value="3"]::before{
content: 'H3'
}
&[data-value="4"]::before{
content: 'H4'
}
}
.ql-tooltip{
&::before{
content: 'Ссылка';
}
&[data-mode=formula]::before{
content: 'Вставка формулы:'
}
&[data-mode=link]::before{
content: 'Вставка ссылки:'
}
a.ql-action::after{
content: 'Изменить';
}
&.ql-editing a.ql-action::after{
content: 'Сохранить';
}
a.ql-remove::before{
content: 'Удалить';
}
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment