import React, {Fragment, useState} from 'react'; import {observer, inject} from "mobx-react"; import {f7, List, ListItem, Icon, Row, Button, Page, Navbar, Segmented, BlockTitle} from 'framework7-react'; import { useTranslation } from 'react-i18next'; import {Device} from '../../../../../common/mobile/utils/device'; import { ThemeColorPalette, CustomColorPicker } from '../../../../../common/mobile/lib/component/ThemeColorPalette.jsx'; const EditText = props => { const isAndroid = Device.android; const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const metricText = Common.Utils.Metric.getCurrentMetricName(); const storeTextSettings = props.storeTextSettings; const storeFocusObjects = props.storeFocusObjects; const fontName = storeTextSettings.fontName || _t.textFonts; const fontSize = storeTextSettings.fontSize; const fontColor = storeTextSettings.textColor; const displaySize = typeof fontSize === 'undefined' ? _t.textAuto : fontSize + ' ' + _t.textPt; const isBold = storeTextSettings.isBold; const isItalic = storeTextSettings.isItalic; const isUnderline = storeTextSettings.isUnderline; const isStrikethrough = storeTextSettings.isStrikethrough; const paragraphAlign = storeTextSettings.paragraphAlign; const paragraphValign = storeTextSettings.paragraphValign; const canIncreaseIndent = storeTextSettings.canIncreaseIndent; const canDecreaseIndent = storeTextSettings.canDecreaseIndent; const paragraphObj = storeFocusObjects.paragraphObject; let spaceBefore; let spaceAfter; if(paragraphObj) { spaceBefore = paragraphObj.get_Spacing().get_Before() < 0 ? paragraphObj.get_Spacing().get_Before() : Common.Utils.Metric.fnRecalcFromMM(paragraphObj.get_Spacing().get_Before()); spaceAfter = paragraphObj.get_Spacing().get_After() < 0 ? paragraphObj.get_Spacing().get_After() : Common.Utils.Metric.fnRecalcFromMM(paragraphObj.get_Spacing().get_After()); } const displayBefore = spaceBefore && spaceBefore < 0 ? _t.textAuto : spaceBefore + ' ' + metricText; const displayAfter = spaceAfter && spaceAfter < 0 ? _t.textAuto : spaceAfter + ' ' + metricText; const fontColorPreview = fontColor !== 'auto' ? : ; return ( { props.toggleBold(!isBold)}}>B {props.toggleItalic(!isItalic)}}>I {props.toggleUnderline(!isUnderline)}} style={{textDecoration: "underline"}}>U {props.toggleStrikethrough(!isStrikethrough)}} style={{textDecoration: "line-through"}}>S {!isAndroid ? {fontColorPreview} : fontColorPreview } {!isAndroid && } {paragraphObj ? ( {props.onParagraphAlign('left')}}> {props.onParagraphAlign('center')}}> {props.onParagraphAlign('right')}}> {props.onParagraphAlign('just')}}> {props.onParagraphValign('top')}}> {props.onParagraphValign('center')}}> {props.onParagraphValign('bottom')}}> {props.onParagraphMove('left')}}> {props.onParagraphMove('right')}}> {!isAndroid && } {!isAndroid && } {!isAndroid && } {_t.textDistanceFromText} {!isAndroid &&
{displayBefore}
}
{isAndroid && }
{!isAndroid &&
{displayAfter}
}
{isAndroid && }
) : null}
); }; const PageFonts = props => { const isAndroid = Device.android; const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const storeTextSettings = props.storeTextSettings; const size = storeTextSettings.fontSize; const displaySize = typeof size === 'undefined' ? _t.textAuto : size + ' ' + _t.textPt; const curFontName = storeTextSettings.fontName; const fonts = storeTextSettings.fontsArray; const [vlFonts, setVlFonts] = useState({ vlData: { items: [], } }); const renderExternal = (vl, vlData) => { setVlFonts((prevState) => { let fonts = [...prevState.vlData.items]; fonts.splice(vlData.fromIndex, vlData.toIndex, ...vlData.items); return {vlData: { items: fonts, }}; }); }; return ( {!isAndroid &&
{displaySize}
}
{isAndroid && }
{_t.textFonts}
    {vlFonts.vlData.items.map((item, index) => ( {props.changeFontFamily(item.name)}} > ))}
); }; const PageFontColor = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const textColor = props.storeTextSettings.textColor; const customColors = props.storePalette.customColors; const changeColor = (color, effectId) => { if (color !== 'empty') { if (effectId !== undefined ) { props.onTextColor({color: color, effectId: effectId}); } else { props.onTextColor(color); } } else { // open custom color menu props.f7router.navigate('/edit-text-custom-font-color/'); } }; return ( ); }; const PageCustomFontColor = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const store = props.storeTextSettings; let textColor = store.textColor; if (typeof textColor === 'object') { textColor = textColor.color; } const autoColor = textColor === 'auto' ? window.getComputedStyle(document.getElementById('font-color-auto')).backgroundColor : null; const onAddNewColor = (colors, color) => { props.storePalette.changeCustomColors(colors); props.onTextColor(color); props.f7router.back(); }; return( ) }; const PageAdditionalFormatting = props => { const isAndroid = Device.android; const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const storeTextSettings = props.storeTextSettings; const storeFocusObjects = props.storeFocusObjects; const paragraphObj = storeFocusObjects.paragraphObject; const isSuperscript = storeTextSettings.isSuperscript; const isSubscript = storeTextSettings.isSubscript; let isStrikeout = false; let isDStrikeout = false; let isSmallCaps = false; let isAllCaps = false; let letterSpacing = 0; if(paragraphObj) { isStrikeout = paragraphObj.get_Strikeout(); isDStrikeout = paragraphObj.get_DStrikeout(); isSmallCaps = paragraphObj.get_SmallCaps(); isAllCaps = paragraphObj.get_AllCaps(); letterSpacing = (paragraphObj.get_TextSpacing() === null || paragraphObj.get_TextSpacing() === undefined) ? paragraphObj.get_TextSpacing() : Common.Utils.Metric.fnRecalcFromMM(paragraphObj.get_TextSpacing()); } return ( {props.onAdditionalStrikethrough('strikethrough', !isStrikeout)}}/> {props.onAdditionalStrikethrough('dbStrikethrough', !isDStrikeout)}}/> {props.onAdditionalScript('superscript', !isSuperscript)}}/> {props.onAdditionalScript('subscript', !isSubscript)}}/> {props.onAdditionalCaps('small', !isSmallCaps)}}/> {props.onAdditionalCaps('all', !isAllCaps)}}/> {!isAndroid &&
{letterSpacing + ' ' + Common.Utils.Metric.getCurrentMetricName()}
}
{isAndroid && }
) }; const PageBullets = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const bulletArrays = [ [ {type: -1, thumb: ''}, {type: 1, thumb: 'bullet-01.png'}, {type: 2, thumb: 'bullet-02.png'}, {type: 3, thumb: 'bullet-03.png'} ], [ {type: 4, thumb: 'bullet-04.png'}, {type: 5, thumb: 'bullet-05.png'}, {type: 6, thumb: 'bullet-06.png'}, {type: 7, thumb: 'bullet-07.png'} ] ]; const storeTextSettings = props.storeTextSettings; const typeBullets = storeTextSettings.typeBullets; return ( {bulletArrays.map((bullets, index) => ( ))} ) }; const PageNumbers = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const numberArrays = [ [ {type: -1, thumb: ''}, {type: 4, thumb: 'number-01.png'}, {type: 5, thumb: 'number-02.png'}, {type: 6, thumb: 'number-03.png'} ], [ {type: 1, thumb: 'number-04.png'}, {type: 2, thumb: 'number-05.png'}, {type: 3, thumb: 'number-06.png'}, {type: 7, thumb: 'number-07.png'} ] ]; const storeTextSettings = props.storeTextSettings; const typeNumbers = storeTextSettings.typeNumbers; return ( {numberArrays.map((numbers, index) => ( ))} ) }; const PageLineSpacing = props => { const { t } = useTranslation(); const _t = t('View.Edit', {returnObjects: true}); const storeTextSettings = props.storeTextSettings; const lineSpacing = storeTextSettings.lineSpacing; return ( {props.onLineSpacing(1.0)}}> {props.onLineSpacing(1.15)}}> {props.onLineSpacing(1.5)}}> {props.onLineSpacing(2.0)}}> {props.onLineSpacing(2.5)}}> {props.onLineSpacing(3.0)}}> ) }; const EditTextContainer = inject("storeTextSettings", "storeFocusObjects")(observer(EditText)); const PageTextFonts = inject("storeTextSettings", "storeFocusObjects")(observer(PageFonts)); const PageTextFontColor = inject("storeTextSettings", "storePalette")(observer(PageFontColor)); const PageTextCustomFontColor = inject("storeTextSettings", "storePalette")(observer(PageCustomFontColor)); const PageTextAddFormatting = inject("storeTextSettings", "storeFocusObjects")(observer(PageAdditionalFormatting)); const PageTextBullets = inject("storeTextSettings")(observer(PageBullets)); const PageTextNumbers = inject("storeTextSettings")(observer(PageNumbers)); const PageTextLineSpacing = inject("storeTextSettings")(observer(PageLineSpacing)); export { EditTextContainer as EditText, PageTextFonts, PageTextFontColor, PageTextCustomFontColor, PageTextAddFormatting, PageTextBullets, PageTextNumbers, PageTextLineSpacing };