import React, {Fragment, useEffect, useState } from 'react'; import {observer, inject} from "mobx-react"; import {f7, Swiper, View, SwiperSlide, List, ListItem, Icon, Row, Button, Page, Navbar, NavRight, Segmented, BlockTitle, Link} 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'; import HighlightColorPalette from '../../../../../common/mobile/lib/component/HighlightColorPalette.jsx'; import { LocalStorage } from '../../../../../common/mobile/utils/LocalStorage'; const PageFonts = props => { const isAndroid = Device.android; const { t } = useTranslation(); const storeTextSettings = props.storeTextSettings; const size = storeTextSettings.fontSize; const displaySize = typeof size === 'undefined' ? t('Edit.textAuto') : size + ' ' + t('Edit.textPt'); const curFontName = storeTextSettings.fontName; const fonts = storeTextSettings.fontsArray; const iconWidth = storeTextSettings.iconWidth; const iconHeight = storeTextSettings.iconHeight; const thumbs = storeTextSettings.thumbs; const thumbIdx = storeTextSettings.thumbIdx; const thumbCanvas = storeTextSettings.thumbCanvas; const thumbContext = storeTextSettings.thumbContext; const spriteCols = storeTextSettings.spriteCols; const spriteThumbs = storeTextSettings.spriteThumbs; const arrayRecentFonts = storeTextSettings.arrayRecentFonts; const addRecentStorage = () => { setRecent(getImageUri(arrayRecentFonts)); LocalStorage.setItem('dde-settings-recent-fonts', JSON.stringify(arrayRecentFonts)); }; const getImageUri = fonts => { return fonts.map(font => { thumbContext.clearRect(0, 0, thumbs[thumbIdx].width, thumbs[thumbIdx].height); thumbContext.drawImage(spriteThumbs, 0, -thumbs[thumbIdx].height * Math.floor(font.imgidx / spriteCols)); return thumbCanvas.toDataURL(); }); }; const [stateRecent, setRecent] = useState(() => getImageUri(arrayRecentFonts)); 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); let images = getImageUri(fonts); return {vlData: { items: fonts, images, }} }); }; return ( {Device.phone && } {!isAndroid &&
{displaySize}
}
{isAndroid && }
{t('Edit.textFonts')} {!!arrayRecentFonts.length && {arrayRecentFonts.map((item, index) => ( { storeTextSettings.changeFontFamily(item.name); props.changeFontFamily(item.name); }}> ))} }
) }; const PageAdditionalFormatting = props => { const isAndroid = Device.android; const { t } = useTranslation(); const storeTextSettings = props.storeTextSettings; const storeFocusObjects = props.storeFocusObjects; const paragraph = storeFocusObjects.paragraphObject; let isStrikeout, isDStrikeout, isSmallCaps, isAllCaps, letterSpacing; if (paragraph) { isStrikeout = paragraph.get_Strikeout(); isDStrikeout = paragraph.get_DStrikeout(); isSmallCaps = paragraph.get_SmallCaps(); isAllCaps = paragraph.get_AllCaps(); letterSpacing = Common.Utils.Metric.fnRecalcFromMM(paragraph.get_TextSpacing()); } const isSuperscript = storeTextSettings.isSuperscript; const isSubscript = storeTextSettings.isSubscript; if (!paragraph && Device.phone) { $$('.sheet-modal.modal-in').length > 0 && f7.sheet.close(); return null; } return( {Device.phone && } {props.onAdditionalStrikethrough('strikeout', !isStrikeout)}}/> {props.onAdditionalStrikethrough('dbStrikeout', !isDStrikeout)}}/> {props.onAdditionalScript('superscript', !isSuperscript)}}/> {props.onAdditionalScript('subscript', !isSubscript)}}/> {props.onAdditionalCaps('small', !isSmallCaps)}}/> {props.onAdditionalCaps('all', !isAllCaps)}}/> {!isAndroid &&
{(Number.isInteger(letterSpacing) ? letterSpacing : letterSpacing.toFixed(2)) + ' ' + Common.Utils.Metric.getCurrentMetricName()}
}
{isAndroid && }
) }; const PageBullets = observer(props => { const { t } = useTranslation(); 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) => ( {bullets.map((bullet) => ( { if (bullet.type === -1) { storeTextSettings.resetBullets(-1); } else { storeTextSettings.resetBullets(bullet.type); } props.onBullet(bullet.type); }}> {bullet.thumb.length < 1 ? : } ))} ))} ) }); const PageNumbers = observer(props => { const { t } = useTranslation(); 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) => ( {numbers.map((number) => ( { if (number.type === -1) { storeTextSettings.resetNumbers(-1); } else { storeTextSettings.resetNumbers(number.type); } props.onNumber(number.type); }}> {number.thumb.length < 1 ? : } ))} ))} ) }); const PageMultiLevel = observer(props => { const { t } = useTranslation(); const arrayMultiLevel = [ {type: -1, thumb: ''}, {type: 1, thumb: 'multi-bracket.png'}, {type: 2, thumb: 'multi-dot.png'}, {type: 3, thumb: 'multi-bullets.png'}, ]; const storeTextSettings = props.storeTextSettings; const typeMultiLevel = storeTextSettings.typeMultiLevel; return( {arrayMultiLevel.map((item) => ( { item.type === -1 ? storeTextSettings.resetMultiLevel(-1) : storeTextSettings.resetMultiLevel(null); props.onMultiLevelList(item.type); }}> {item.thumb.length < 1 ? : } ))} ) }); const PageBulletsAndNumbers = props => { const { t } = useTranslation(); const storeTextSettings = props.storeTextSettings; return ( {Device.phone && } ) } const PageLineSpacing = props => { const { t } = useTranslation(); const storeTextSettings = props.storeTextSettings; const lineSpacing = storeTextSettings.lineSpacing; return( {Device.phone && } {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 PageCustomFontColor = props => { const { t } = useTranslation(); const _t = t('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( {Device.phone && } ) }; const PageFontColor = props => { const { t } = useTranslation(); const _t = t('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/', {props: {onTextColor: props.onTextColor}}); } }; return( {Device.phone && } { props.onTextColorAuto(); }}>
) }; const PageCustomBackColor = props => { const { t } = useTranslation(); const _t = t('Edit', {returnObjects: true}); let backgroundColor = props.storeTextSettings.backgroundColor; if (typeof backgroundColor === 'object') { backgroundColor = backgroundColor.color; } const onAddNewColor = (colors, color) => { props.storePalette.changeCustomColors(colors); props.onBackgroundColor(color); props.f7router.back(); }; return( {Device.phone && } ) }; const PageHighlightColor = props => { const { t } = useTranslation(); const _t = t('Edit', {returnObjects: true}); const highlightColor = props.storeTextSettings.highlightColor; const changeColor = (color, effectId) => { if (color !== 'empty') { if (effectId !== undefined ) { props.onHighlightColor({color: color, effectId: effectId}); } else { props.onHighlightColor(color); } } }; return ( {Device.phone && } ) }; const EditText = props => { const isAndroid = Device.android; const { t } = useTranslation(); const storeTextSettings = props.storeTextSettings; const fontName = storeTextSettings.fontName || t('Edit.textFonts'); const fontSize = storeTextSettings.fontSize; const fontColor = storeTextSettings.textColor; const highlightColor = storeTextSettings.highlightColor; const displaySize = typeof fontSize === 'undefined' ? t('Edit.textAuto') : fontSize + ' ' + t('Edit.textPt'); const isBold = storeTextSettings.isBold; const isItalic = storeTextSettings.isItalic; const isUnderline = storeTextSettings.isUnderline; const isStrikethrough = storeTextSettings.isStrikethrough; const paragraphAlign = storeTextSettings.paragraphAlign; let previewList; switch(storeTextSettings.listType) { case -1: previewList = ''; break; case 0: previewList = t('Edit.textBullets'); break; case 1: previewList = t('Edit.textNumbers'); break; } const fontColorPreview = fontColor !== 'auto' ? : ; const highlightColorPreview = highlightColor !== 'transparent' ? : ; 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 ? {highlightColorPreview} : highlightColorPreview } {!isAndroid && } {props.onParagraphAlign('left')}}> {props.onParagraphAlign('center')}}> {props.onParagraphAlign('right')}}> {props.onParagraphAlign('just')}}> {props.onParagraphMove(true)}}> {props.onParagraphMove(false)}}>
{previewList}
{!isAndroid && }
{!isAndroid && }
) }; const EditTextContainer = inject("storeTextSettings", "storeFocusObjects")(observer(EditText)); const PageTextFonts = inject("storeTextSettings", "storeFocusObjects")(observer(PageFonts)); const PageTextAddFormatting = inject("storeTextSettings", "storeFocusObjects")(observer(PageAdditionalFormatting)); const PageTextBulletsAndNumbers = inject("storeTextSettings")(observer(PageBulletsAndNumbers)); const PageTextLineSpacing = inject("storeTextSettings")(observer(PageLineSpacing)); const PageTextFontColor = inject("storeTextSettings", "storePalette")(observer(PageFontColor)); const PageTextCustomFontColor = inject("storeTextSettings", "storePalette")(observer(PageCustomFontColor)); const PageTextHighlightColor = inject("storeTextSettings")(observer(PageHighlightColor)); export { EditTextContainer as EditText, PageTextFonts, PageTextAddFormatting, PageTextBulletsAndNumbers, PageTextLineSpacing, PageTextFontColor, PageTextCustomFontColor, PageTextHighlightColor, // PageTextCustomBackColor };