diff --git a/apps/spreadsheeteditor/mobile/locale/en.json b/apps/spreadsheeteditor/mobile/locale/en.json index 266f24b3e..beffa0415 100644 --- a/apps/spreadsheeteditor/mobile/locale/en.json +++ b/apps/spreadsheeteditor/mobile/locale/en.json @@ -242,7 +242,21 @@ "textTop": "Top", "textRight": "Right", "textCustomSize": "Custom Size", - "textSpreadsheetFormats": "Spreadsheet Formats" + "textSpreadsheetFormats": "Spreadsheet Formats", + "textDownloadAs": "Download As", + "warnDownloadAs": "If you continue saving in this format all features except the text will be lost.
Are you sure you want to continue?", + "notcriticalErrorTitle": "Warning", + "txtEncoding": "Encoding", + "txtDelimiter": "Delimiter", + "txtSpace": "Space", + "txtTab": "Tab", + "advCSVOptions": "Choose CSV Options", + "advDRMOptions": "Protected File", + "advDRMEnterPassword": "You password please:", + "advDRMPassword": "Password", + "closeButtonText": "Close File", + "txtProtected": "Once you enter the password and open the file, the current password to the file will be reset", + "textCancel": "Cancel" } }, "Common": { diff --git a/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx b/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx new file mode 100644 index 000000000..2ee98c31d --- /dev/null +++ b/apps/spreadsheeteditor/mobile/src/controller/settings/Download.jsx @@ -0,0 +1,168 @@ +import React, { Component } from "react"; +import Download from "../../view/settings/Download"; +import { Device } from '../../../../../common/mobile/utils/device'; +import { withTranslation, useTranslation } from 'react-i18next'; +import { f7 } from 'framework7-react'; + +class DownloadController extends Component { + constructor(props) { + super(props); + this.onSaveFormat = this.onSaveFormat.bind(this); + } + + closeModal() { + if (Device.phone) { + f7.sheet.close('.settings-popup', true); + } else { + f7.popover.close('#settings-popover'); + } + } + + onSaveFormat(format) { + const api = Common.EditorApi.get(); + const { t } = this.props; + const _t = t("View.Settings", {returnObjects: true}); + + this.closeModal(); + + if (format) { + if (format == Asc.c_oAscFileType.CSV) { + f7.dialog.confirm( + _t.warnDownloadAs, + _t.notcriticalErrorTitle, + function () { + onAdvancedOptions(Asc.c_oAscAdvancedOptionsID.CSV, api.asc_getAdvancedOptions(), 2, new Asc.asc_CDownloadOptions(format), _t) + } + ) + } else { + api.asc_DownloadAs(new Asc.asc_CDownloadOptions(format)); + } + } + } + + render() { + return ( + + ); + } +} + +const DownloadWithTranslation = withTranslation()(DownloadController); + +const onAdvancedOptions = (type, advOptions, mode, formatOptions, _t, canRequestClose) => { + const api = Common.EditorApi.get(); + + if (type == Asc.c_oAscAdvancedOptionsID.CSV) { + let picker; + const pages = []; + const pagesName = []; + + for (let page of advOptions.asc_getCodePages()) { + pages.push(page.asc_getCodePage()); + pagesName.push(page.asc_getCodePageName()); + } + + // me.onLongActionEnd(Asc.c_oAscAsyncActionType.BlockInteraction, LoadingDocument); + + const buttons = []; + + if (mode === 2) { + buttons.push({ + text: _t.textCancel + }); + } + + buttons.push({ + text: 'OK', + bold: true, + onClick: function() { + let encoding = picker.cols[0].value, + delimiter = picker.cols[1].value; + + if (mode == 2) { + formatOptions && formatOptions.asc_setAdvancedOptions(new Asc.asc_CTextOptions(encoding, delimiter)); + api.asc_DownloadAs(formatOptions); + } else { + api.asc_setAdvancedOptions(type, new Asc.asc_CTextOptions(encoding, delimiter)); + } + + //if (!me._isDocReady) { + //me.onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); + //} + } + }); + + const dialog = f7.dialog.create({ + title: _t.advCSVOptions, + text: '', + content: + '
' + + '
' + + '
' + _t.txtEncoding + '
' + + '
' + _t.txtDelimiter + '
' + + '
' + + '
' + + '
', + buttons: buttons + }).open(); + + const recommendedSettings = advOptions.asc_getRecommendedSettings(); + + dialog.on('opened', () => { + picker = f7.picker.create({ + containerEl: document.getElementById('txt-encoding'), + cols: [{ + textAlign: 'left', + values: pages, + displayValues: pagesName + },{ + textAlign: 'right', + width: 120, + values: [4, 2, 3, 1, 5], + displayValues: [',', ';', ':', _t.txtTab, _t.txtSpace] + }], + toolbar: false, + rotateEffect: true, + value: [ + recommendedSettings && recommendedSettings.asc_getCodePage(), + (recommendedSettings && recommendedSettings.asc_getDelimiter()) ? recommendedSettings.asc_getDelimiter() : 4 + ], + }); + }); + + } else if (type == Asc.c_oAscAdvancedOptionsID.DRM) { + //me.onLongActionEnd(Asc.c_oAscAsyncActionType.BlockInteraction, LoadingDocument); + const buttons = [{ + text: 'OK', + bold: true, + onClick: function () { + const password = document.getElementById('modal-password').value; + api.asc_setAdvancedOptions(type, new Asc.asc_CDRMAdvancedOptions(password)); + //if (!me._isDocReady) { + //me.onLongActionBegin(Asc.c_oAscAsyncActionType['BlockInteraction'], LoadingDocument); + //} + } + }]; + + if (canRequestClose) + buttons.push({ + text: _t.closeButtonText, + onClick: function () { + Common.Gateway.requestClose(); + } + }); + + f7.dialog.create({ + title: _t.advDRMOptions, + text: _t.txtProtected, + content: + '
', + buttons: buttons + }).open(); + } +}; + +export { + DownloadWithTranslation, + onAdvancedOptions +} \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetSettings.jsx b/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetSettings.jsx index 3ac59f0d2..b1030ab10 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetSettings.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/settings/SpreadsheetSettings.jsx @@ -35,10 +35,10 @@ class SpreadsheetSettingsController extends Component { this.localMarginProps = props.asc_getPageMargins(); - let left = parseFloat(Common.Utils.Metric.fnRecalcFromMM(this.localMarginProps.asc_getLeft()).toFixed(2)), - top = parseFloat(Common.Utils.Metric.fnRecalcFromMM(this.localMarginProps.asc_getTop()).toFixed(2)), - right = parseFloat(Common.Utils.Metric.fnRecalcFromMM(this.localMarginProps.asc_getRight()).toFixed(2)), - bottom = parseFloat(Common.Utils.Metric.fnRecalcFromMM(this.localMarginProps.asc_getBottom()).toFixed(2)); + let left = this.localMarginProps.asc_getLeft(), + top = this.localMarginProps.asc_getTop(), + right = this.localMarginProps.asc_getRight(), + bottom = this.localMarginProps.asc_getBottom(); return {left, top, right, bottom}; } @@ -60,7 +60,6 @@ class SpreadsheetSettingsController extends Component { } api.asc_changePageMargins(changeProps.asc_getLeft(), changeProps.asc_getRight(), changeProps.asc_getTop(), changeProps.asc_getBottom(), api.asc_getActiveWorksheetIndex()); - // this.initSpreadsheetMargins(); } onOrientationChange(value) { diff --git a/apps/spreadsheeteditor/mobile/src/view/settings/Download.jsx b/apps/spreadsheeteditor/mobile/src/view/settings/Download.jsx new file mode 100644 index 000000000..19e114966 --- /dev/null +++ b/apps/spreadsheeteditor/mobile/src/view/settings/Download.jsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { Page, Navbar, List, ListItem, BlockTitle, Icon } from "framework7-react"; +import { useTranslation } from "react-i18next"; + +const Download = props => { + const { t } = useTranslation(); + const _t = t("View.Settings", { returnObjects: true }); + + return ( + + + {_t.textDownloadAs} + + props.onSaveFormat(Asc.c_oAscFileType.XLSX)}> + + + props.onSaveFormat(Asc.c_oAscFileType.PDF)}> + + + props.onSaveFormat(Asc.c_oAscFileType.PDFA)}> + + + props.onSaveFormat(Asc.c_oAscFileType.ODS)}> + + + props.onSaveFormat(Asc.c_oAscFileType.CSV)}> + + + props.onSaveFormat(Asc.c_oAscFileType.XLTX)}> + + + props.onSaveFormat(Asc.c_oAscFileType.OTS)}> + + + + + ) +} + +export default Download; \ No newline at end of file diff --git a/apps/spreadsheeteditor/mobile/src/view/settings/Settings.jsx b/apps/spreadsheeteditor/mobile/src/view/settings/Settings.jsx index d0940cae1..7b25b93cf 100644 --- a/apps/spreadsheeteditor/mobile/src/view/settings/Settings.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/settings/Settings.jsx @@ -4,6 +4,7 @@ import { withTranslation } from 'react-i18next'; import {f7} from 'framework7-react'; import {Device} from '../../../../../common/mobile/utils/device'; import SpreadsheetSettingsController from '../../controller/settings/SpreadsheetSettings.jsx'; +import {DownloadWithTranslation} from '../../controller/settings/Download.jsx'; import {SpreadsheetColorSchemes, SpreadsheetFormats, SpreadsheetMargins} from './SpreadsheetSettings.jsx'; const routes = [ @@ -26,6 +27,10 @@ const routes = [ { path: '/margins/', component: SpreadsheetMargins + }, + { + path: '/download/', + component: DownloadWithTranslation } ]; @@ -42,6 +47,40 @@ const SettingsList = withTranslation()(props => { props.onOptionClick(page) }; + const closeModal = () => { + if (Device.phone) { + f7.sheet.close('.settings-popup', true); + } else { + f7.popover.close('#settings-popover'); + } + }; + + const onPrint = () => { + closeModal(); + const api = Common.EditorApi.get(); + api.asc_Print(); + }; + + const showHelp = () => { + // let url = '{{HELP_URL}}'; + let url = 'https://helpcenter.onlyoffice.com'; + + if (url.charAt(url.length-1) !== '/') { + url += '/'; + } + + if (Device.sailfish || Device.android) { + url+='mobile-applications/documents/mobile-web-editors/android/index.aspx'; + } + else { + url+='mobile-applications/documents/mobile-web-editors/ios/index.aspx'; + } + + closeModal(); + window.open(url, "_blank"); + }; + + return ( @@ -58,16 +97,16 @@ const SettingsList = withTranslation()(props => { - + - + - + diff --git a/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx b/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx index 461b37081..a39e95f2b 100644 --- a/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx +++ b/apps/spreadsheeteditor/mobile/src/view/settings/SpreadsheetSettings.jsx @@ -85,7 +85,6 @@ const PageSpreadsheetMargins = props => { const _t = t('View.Settings', {returnObjects: true}); const metricText = Common.Utils.Metric.getMetricName(Common.Utils.Metric.getCurrentMetric()); const margins = props.initSpreadsheetMargins(); - console.log(margins); const [stateTop, setTop] = useState(margins.top); const [stateBottom, setBottom] = useState(margins.bottom); @@ -128,13 +127,13 @@ const PageSpreadsheetMargins = props => { - {!isAndroid &&
{parseFloat(stateTop.toFixed(2)) + ' ' + metricText}
} + {!isAndroid &&
{parseFloat(Common.Utils.Metric.fnRecalcFromMM(stateTop).toFixed(2)) + ' ' + metricText}
}
- {isAndroid && } + {isAndroid && } @@ -142,13 +141,13 @@ const PageSpreadsheetMargins = props => {
- {!isAndroid &&
{parseFloat(stateBottom.toFixed(2)) + ' ' + metricText}
} + {!isAndroid &&
{parseFloat(Common.Utils.Metric.fnRecalcFromMM(stateBottom).toFixed(2)) + ' ' + metricText}
}
- {isAndroid && } + {isAndroid && } @@ -156,13 +155,13 @@ const PageSpreadsheetMargins = props => {
- {!isAndroid &&
{parseFloat(stateLeft.toFixed(2)) + ' ' + metricText}
} + {!isAndroid &&
{parseFloat(Common.Utils.Metric.fnRecalcFromMM(stateLeft).toFixed(2)) + ' ' + metricText}
}
- {isAndroid && } + {isAndroid && } @@ -170,13 +169,13 @@ const PageSpreadsheetMargins = props => {
- {!isAndroid &&
{parseFloat(stateRight.toFixed(2)) + ' ' + metricText}
} + {!isAndroid &&
{parseFloat(Common.Utils.Metric.fnRecalcFromMM(stateRight).toFixed(2)) + ' ' + metricText}
}
- {isAndroid && } + {isAndroid && }