188 lines
6.4 KiB
JavaScript
188 lines
6.4 KiB
JavaScript
import React, { Component } from 'react';
|
|
import { f7 } from 'framework7-react';
|
|
import { Device } from '../../../../../common/mobile/utils/device';
|
|
import {observer, inject} from "mobx-react";
|
|
import { withTranslation } from 'react-i18next';
|
|
|
|
import { EditLink } from '../../view/edit/EditLink';
|
|
|
|
class EditLinkController extends Component {
|
|
constructor (props) {
|
|
super(props);
|
|
|
|
const api = Common.EditorApi.get();
|
|
|
|
this.onEditLink = this.onEditLink.bind(this);
|
|
this.onRemoveLink = this.onRemoveLink.bind(this);
|
|
this.initLink = this.initLink.bind(this);
|
|
this.slidesCount = api.getCountPages();
|
|
this.initLink();
|
|
}
|
|
|
|
closeModal () {
|
|
if ( Device.phone ) {
|
|
f7.sheet.close('#edit-sheet', true);
|
|
} else {
|
|
f7.popover.close('#edit-popover');
|
|
}
|
|
}
|
|
|
|
initLink() {
|
|
const api = Common.EditorApi.get();
|
|
const linkObject = this.props.storeFocusObjects.linkObject;
|
|
const url = linkObject.get_Value();
|
|
const tooltip = linkObject.get_ToolTip();
|
|
const display = linkObject.get_Text();
|
|
|
|
this.url = url;
|
|
this.tooltip = tooltip;
|
|
this.display = display;
|
|
this.slideLink = 0;
|
|
this.slideNum = 0;
|
|
|
|
let indAction;
|
|
let slidesCount;
|
|
let slideNum;
|
|
|
|
if(url === null || url === undefined || url === '') {
|
|
this.typeLink = 1;
|
|
}
|
|
else {
|
|
indAction = url.indexOf("ppaction://hlink");
|
|
if(0 == indAction) {
|
|
if (url == "ppaction://hlinkshowjump?jump=firstslide") {
|
|
this.slideLink = 2;
|
|
} else if (url == "ppaction://hlinkshowjump?jump=lastslide") {
|
|
this.slideLink = 3;
|
|
}
|
|
else if (url == "ppaction://hlinkshowjump?jump=nextslide") {
|
|
this.slideLink = 0;
|
|
}
|
|
else if (url == "ppaction://hlinkshowjump?jump=previousslide") {
|
|
this.slideLink = 1;
|
|
}
|
|
else {
|
|
this.slideLink = 4;
|
|
slidesCount = api.getCountPages();
|
|
let mask = "ppaction://hlinksldjumpslide",
|
|
indSlide = url.indexOf(mask);
|
|
if (0 == indSlide) {
|
|
this.slideNum = parseInt(url.substring(mask.length));
|
|
if (slideNum < 0) this.slideNum = 0;
|
|
if (slideNum >= slidesCount) this.slideNum = slidesCount - 1;
|
|
} else this.slideNum = 0;
|
|
}
|
|
this.typeLink = 0
|
|
} else {
|
|
this.typeLink = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
onEditLink(type, linkInfo) {
|
|
const api = Common.EditorApi.get();
|
|
const { t } = this.props;
|
|
const _t = t("View.Edit", { returnObjects: true });
|
|
|
|
const c_oHyperlinkType = {
|
|
InternalLink: 0,
|
|
WebLink: 1
|
|
};
|
|
|
|
const display = linkInfo.display;
|
|
const tip = linkInfo.tip;
|
|
const props = new Asc.CHyperlinkProperty();
|
|
let def_display = '';
|
|
|
|
if (type == c_oHyperlinkType.WebLink) {
|
|
let url = linkInfo.url;
|
|
const urltype = api.asc_getUrlType(url.trim());
|
|
if (urltype===AscCommon.c_oAscUrlType.Invalid) {
|
|
f7.dialog.create({
|
|
title: t('View.Edit.notcriticalErrorTitle'),
|
|
text: t('View.Edit.textNotUrl'),
|
|
buttons: [
|
|
{
|
|
text: t('View.Edit.textOk')
|
|
}
|
|
]
|
|
}).open();
|
|
|
|
return;
|
|
}
|
|
|
|
url = url.replace(/^\s+|\s+$/g, '');
|
|
if (urltype!==AscCommon.c_oAscUrlType.Unsafe && !/(((^https?)|(^ftp)):\/\/)|(^mailto:)/i.test(url))
|
|
url = (urltype===AscCommon.c_oAscUrlType.Email ? 'mailto:' : 'http://' ) + url;
|
|
url = url.replace(new RegExp("%20", 'g'), " ");
|
|
|
|
props.put_Value(url);
|
|
props.put_ToolTip(tip);
|
|
def_display = url;
|
|
} else {
|
|
let url = "ppaction://hlink";
|
|
let slidetip = '';
|
|
switch (linkInfo.linkTo) {
|
|
case 0:
|
|
url = url + "showjump?jump=nextslide";
|
|
slidetip = _t.textNextSlide;
|
|
break;
|
|
case 1:
|
|
url = url + "showjump?jump=previousslide";
|
|
slidetip = _t.textPreviousSlide;
|
|
break;
|
|
case 2:
|
|
url = url + "showjump?jump=firstslide";
|
|
slidetip = _t.textFirstSlide;
|
|
break;
|
|
case 3:
|
|
url = url + "showjump?jump=lastslide";
|
|
slidetip = _t.textLastSlide;
|
|
break;
|
|
case 4:
|
|
url = url + "sldjumpslide" + linkInfo.numberTo;
|
|
slidetip = _t.textSlide + ' ' + (linkInfo.numberTo + 1);
|
|
break;
|
|
}
|
|
props.put_Value(url);
|
|
props.put_ToolTip(tip === '' ? slidetip : tip);
|
|
def_display = slidetip;
|
|
}
|
|
|
|
if (!linkInfo.displayDisabled) {
|
|
props.put_Text(display === '' ? def_display : display);
|
|
} else
|
|
props.put_Text(null);
|
|
|
|
api.change_Hyperlink(props);
|
|
|
|
this.closeModal();
|
|
}
|
|
|
|
onRemoveLink() {
|
|
const api = Common.EditorApi.get();
|
|
api.remove_Hyperlink();
|
|
this.closeModal();
|
|
}
|
|
|
|
render () {
|
|
return (
|
|
<EditLink
|
|
initLink={this.initLink}
|
|
typeLink={this.typeLink}
|
|
url={this.url}
|
|
display={this.display}
|
|
tooltip={this.tooltip}
|
|
slideLink={this.slideLink}
|
|
slideNum={this.slideNum}
|
|
onEditLink={this.onEditLink}
|
|
onRemoveLink={this.onRemoveLink}
|
|
slidesCount={this.slidesCount}
|
|
/>
|
|
)
|
|
}
|
|
}
|
|
|
|
const EditLinkWithTranslation = inject("storeFocusObjects")(observer(withTranslation()(EditLinkController)));
|
|
|
|
export {EditLinkWithTranslation as EditLinkController}; |