[SE mobile] Edit hyperlink

This commit is contained in:
Alexander Yuzhin 2016-12-20 14:33:24 +03:00
parent a02226f03f
commit 34b58a505f
15 changed files with 433 additions and 43 deletions

View file

@ -26,7 +26,7 @@
input.field {
color: @themeColor;
&::-webkit-input-placeholder {
&.placeholder-color::-webkit-input-placeholder {
color: @themeColor;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -129,7 +129,7 @@ require([
,'EditImage'
,'EditShape'
,'EditChart'
// ,'EditHyperlink'
,'EditHyperlink'
,'AddContainer'
,'AddChart'
,'AddFunction'
@ -200,7 +200,7 @@ require([
,'spreadsheeteditor/mobile/app/controller/edit/EditImage'
,'spreadsheeteditor/mobile/app/controller/edit/EditShape'
,'spreadsheeteditor/mobile/app/controller/edit/EditChart'
// ,'spreadsheeteditor/mobile/app/controller/edit/EditHyperlink'
,'spreadsheeteditor/mobile/app/controller/edit/EditHyperlink'
,'spreadsheeteditor/mobile/app/controller/add/AddContainer'
,'spreadsheeteditor/mobile/app/controller/add/AddChart'
,'spreadsheeteditor/mobile/app/controller/add/AddFunction'

View file

@ -571,6 +571,10 @@ define([
_settings.push('image');
} else {
_settings.push('cell');
if (cellInfo.asc_getHyperlink()) {
_settings.push('hyperlink');
}
}
},

View file

@ -0,0 +1,226 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2016
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
/**
* EditHyperlink.js
* Spreadsheet Editor
*
* Created by Alexander Yuzhin on 12/20/16
* Copyright (c) 2016 Ascensio System SIA. All rights reserved.
*
*/
define([
'core',
'spreadsheeteditor/mobile/app/view/edit/EditHyperlink',
'jquery',
'underscore',
'backbone'
], function (core, view, $, _, Backbone) {
'use strict';
SSE.Controllers.EditHyperlink = Backbone.Controller.extend(_.extend((function() {
return {
models: [],
collections: [],
views: [
'EditHyperlink'
],
initialize: function () {
Common.NotificationCenter.on('editcontainer:show', _.bind(this.initEvents, this));
},
setApi: function (api) {
var me = this;
me.api = api;
},
onLaunch: function () {
this.createView('EditHyperlink').render();
},
initEvents: function () {
if ($('#edit-link').length < 1) {
return;
}
uiApp.addView('#edit-link');
var me = this;
me.initSettings();
},
initSettings: function () {
var me = this,
cellInfo = me.api.asc_getCellInfo(),
linkInfo = cellInfo.asc_getHyperlink(),
sheetCount = me.api.asc_getWorksheetsCount(),
isLock = cellInfo.asc_getFlags().asc_getLockText(),
i = -1,
sheets = [];
while (++i < sheetCount) {
if (!me.api.asc_isWorksheetHidden(i)) {
sheets.push(Common.Utils.String.format('<option value="{0}">{1}</option>', me.api.asc_getWorksheetName(i), me.api.asc_getWorksheetName(i)));
}
}
$('#edit-link-sheet select').html(sheets.join(''));
$('#edit-link-type select').val(linkInfo.asc_getType());
$('#edit-link-type .item-after').text((linkInfo.asc_getType() == Asc.c_oAscHyperlinkType.RangeLink) ? 'Internal Data Range' : 'External Link');
$('#edit-link-sheet, #edit-link-range').css('display', (linkInfo.asc_getType() == Asc.c_oAscHyperlinkType.RangeLink) ? 'block' : 'none');
$('#edit-link-link').css('display', (linkInfo.asc_getType() != Asc.c_oAscHyperlinkType.RangeLink) ? 'block' : 'none');
var currentSheet = me.api.asc_getWorksheetName(me.api.asc_getActiveWorksheetIndex());
$('#edit-link-sheet select').val((linkInfo.asc_getType() == Asc.c_oAscHyperlinkType.RangeLink) ? linkInfo.asc_getSheet(): currentSheet);
$('#edit-link-sheet .item-after').text((linkInfo.asc_getType() == Asc.c_oAscHyperlinkType.RangeLink) ? linkInfo.asc_getSheet(): currentSheet);
$('#edit-link-range input').val(linkInfo.asc_getRange());
$('#edit-link-link input').val(linkInfo.asc_getHyperlinkUrl() ? linkInfo.asc_getHyperlinkUrl().replace(new RegExp(" ",'g'), "%20") : '');
$('#edit-link-display input').val(isLock ? me.textDefault : linkInfo.asc_getText());
$('#edit-link-display input').toggleClass('disabled', isLock);
$('#edit-link-tip input').val(linkInfo.asc_getTooltip());
var focusInput = ((linkInfo.asc_getType() == Asc.c_oAscHyperlinkType.RangeLink) ? $('#edit-link-range input') : $('#edit-link-link input'));
$('#edit-link-edit').toggleClass('disabled', _.isEmpty(focusInput.val()));
$('#edit-link-link input, #edit-link-range input').single('input', _.bind(function(e) {
$('#edit-link-edit').toggleClass('disabled', _.isEmpty($(e.currentTarget).val()));
}, me));
$('#edit-link-edit').single('click', _.bind(me.onEdit, me));
$('#edit-link-remove').single('click', _.bind(me.onRemove, me));
$('#edit-link-type select').single('change', _.bind(me.onTypeChange, me));
},
// Handlers
onTypeChange: function (e) {
var val = parseInt($(e.currentTarget).val());
$('#edit-link-sheet, #edit-link-range').css('display', (val == Asc.c_oAscHyperlinkType.RangeLink) ? 'block' : 'none');
$('#edit-link-link').css('display', (val != Asc.c_oAscHyperlinkType.RangeLink) ? 'block' : 'none');
var requireInput = (val == Asc.c_oAscHyperlinkType.RangeLink) ? $('#edit-link-range input') : $('#edit-link-link input');
$('#edit-link-edit').toggleClass('disabled', _.isEmpty(requireInput.val()));
},
onEdit: function () {
var me = this,
linkProps = new Asc.asc_CHyperlink(),
defaultDisplay = "",
$type = $('#edit-link-type select'),
$sheet = $('#edit-link-sheet select'),
$range = $('#edit-link-range input'),
$link = $('#edit-link-link input'),
$display = $('#edit-link-display input'),
$tip = $('#edit-link-tip input'),
type = parseInt($type.val());
linkProps.asc_setType(type);
if (type == Asc.c_oAscHyperlinkType.RangeLink) {
var range = $.trim($range.val()),
isValidRange = /^[A-Z]+[1-9]\d*:[A-Z]+[1-9]\d*$/.test(range);
if (!isValidRange)
isValidRange = /^[A-Z]+[1-9]\d*$/.test(range);
if (!isValidRange) {
uiApp.alert(me.textInvalidRange);
return;
}
linkProps.asc_setSheet($sheet.val());
linkProps.asc_setRange(range);
defaultDisplay = $sheet.val() + '!' + range;
} else {
var url = $link.val().replace(/^\s+|\s+$/g,'');
if (! /(((^https?)|(^ftp)):\/\/)|(^mailto:)/i.test(url)) {
var urlType = me.api.asc_getUrlType($.trim(url));
if (urlType < 1) {
uiApp.alert(me.txtNotUrl);
return;
}
url = ( (urlType==2) ? 'mailto:' : 'http://' ) + url;
}
url = url.replace(new RegExp("%20",'g')," ");
linkProps.asc_setHyperlinkUrl(url);
defaultDisplay = url;
}
if ($display.hasClass('disabled')) {
linkProps.asc_setText(null);
} else {
if (_.isEmpty($display.val())) {
$display.val(defaultDisplay);
}
linkProps.asc_setText($display.val());
}
linkProps.asc_setTooltip($tip.val());
me.api.asc_insertHyperlink(linkProps);
SSE.getController('EditContainer').hideModal();
},
onRemove: function () {
this.api && this.api.asc_removeHyperlink();
SSE.getController('EditContainer').hideModal();
},
textDefault: 'Selected range',
textInvalidRange: 'Invalid cells range',
textEmptyImgUrl: 'You need to specify image URL.',
txtNotUrl: 'This field should be a URL in the format \"http://www.example.com\"'
}
})(), SSE.Controllers.EditHyperlink || {}))
});

View file

@ -385,7 +385,7 @@
<div class="item-title">Minimum Value</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="number" placeholder="Auto">
<input class="field right placeholder-color" type="number" placeholder="Auto">
</div>
</div>
</div>
@ -397,7 +397,7 @@
<div class="item-title">Maximum Value</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="number" placeholder="Auto">
<input class="field right placeholder-color" type="number" placeholder="Auto">
</div>
</div>
</div>
@ -424,7 +424,7 @@
<div class="item-title">Crosses Value</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="number" placeholder="0">
<input class="field right placeholder-color" type="number" placeholder="0">
</div>
</div>
</div>
@ -540,7 +540,7 @@
<div class="item-title">Crosses Value</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="number" placeholder="0">
<input class="field right placeholder-color" type="number" placeholder="0">
</div>
</div>
</div>

View file

@ -3,31 +3,74 @@
<div class="list-block">
<ul>
<li>
<div id="edit-link-url" class="item-content">
<a id="edit-link-type" class="item-link smart-select" data-back-on-select="true">
<select name="edit-link-type">
<option value="1" selected>External Link</option>
<option value="2">Internal Data Range</option>
</select>
<div class="item-content">
<div class="item-inner">
<div class="item-title">Link Type</div>
<div class="item-after">External Link</div>
</div>
</div>
</a>
</li>
<li>
<a id="edit-link-sheet" class="item-link smart-select" data-back-on-select="true">
<select name="edit-link-sheet"></select>
<div class="item-content">
<div class="item-inner">
<div class="item-title">Sheet</div>
<div class="item-after"></div>
</div>
</div>
</a>
</li>
<li id="edit-link-range">
<div class="item-content">
<div class="item-inner">
<div class="item-title label">Link</div>
<div class="item-input">
<input type="url" placeholder="Link">
<div class="item-title">Range</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="text" placeholder="Required">
</div>
</div>
</div>
</div>
</li>
<li>
<div id="edit-link-display" class="item-content">
<li id="edit-link-link">
<div class="item-content">
<div class="item-inner">
<div class="item-title label">Display</div>
<div class="item-input">
<input type="text" placeholder="Display">
<div class="item-title">Link</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="url" placeholder="Required">
</div>
</div>
</div>
</div>
</li>
<li>
<div id="edit-link-tip" class="item-content">
<li id="edit-link-display">
<div class="item-content">
<div class="item-inner">
<div class="item-title label">Screen Tip</div>
<div class="item-input">
<input type="text" placeholder="Screen Tip">
<div class="item-title">Display</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="text" placeholder="Display">
</div>
</div>
</div>
</div>
</li>
<li id="edit-link-tip">
<div class="item-content">
<div class="item-inner">
<div class="item-title">Screen Tip</div>
<div class="item-after">
<div class="item-input">
<input class="field right" type="text" placeholder="Screen Tip">
</div>
</div>
</div>
</div>

View file

@ -40,7 +40,6 @@
*
*/
define([
'text!spreadsheeteditor/mobile/app/template/EditCell.template',
'jquery',
@ -154,11 +153,15 @@ define([
},
updateItemHandlers: function () {
if ($('#edit-cell').length < 1) {
return;
}
var selectorsDynamicPage = [
'#edit-cell',
'.page[data-page=edit-border-style]',
'.page[data-page=edit-cell-format]'
].map(function (selector) {
return selector + ' a.item-link[data-page]';
}).join(', ');
$('.container-edit a.item-link[data-page]').single('click', _.buffered(this.onItemClick, 100, this));
$(selectorsDynamicPage).single('click', _.bind(this.onItemClick, this));
},
showPage: function (templateId, suspendEvent) {

View file

@ -169,11 +169,14 @@ define([
},
updateItemHandlers: function () {
if ($('#edit-chart').length < 1) {
return;
}
var selectorsDynamicPage = [
'#edit-chart',
'.page[data-page=edit-chart-style]'
].map(function (selector) {
return selector + ' a.item-link[data-page]';
}).join(', ');
$('.container-edit a.item-link[data-page]').single('click', _.buffered(this.onItemClick, 100, this));
$(selectorsDynamicPage).single('click', _.bind(this.onItemClick, this));
$('.edit-chart-style.subnavbar.categories a').single('click', function () {
$('.page[data-page=edit-chart-style]').find('.list-block.inputs-list').removeClass('inputs-list');

View file

@ -0,0 +1,103 @@
/*
*
* (c) Copyright Ascensio System Limited 2010-2016
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
/**
* EditHyperlink.js
* Spreadsheet Editor
*
* Created by Alexander Yuzhin on 12/20/16
* Copyright (c) 2016 Ascensio System SIA. All rights reserved.
*
*/
define([
'text!spreadsheeteditor/mobile/app/template/EditHyperlink.template',
'jquery',
'underscore',
'backbone'
], function (editTemplate, $, _, Backbone) {
'use strict';
SSE.Views.EditHyperlink = Backbone.View.extend(_.extend((function() {
// private
var _editCellController;
return {
// el: '.view-main',
template: _.template(editTemplate),
events: {
},
initialize: function () {
_editCellController = SSE.getController('EditHyperlink');
Common.NotificationCenter.on('editcontainer:show', _.bind(this.initEvents, this));
},
initEvents: function () {
var me = this;
me.initControls();
},
// Render layout
render: function () {
this.layout = $('<div/>').append(this.template({
android : Common.SharedSettings.get('android'),
phone : Common.SharedSettings.get('phone'),
scope : this
}));
return this;
},
rootLayout: function () {
if (this.layout) {
return this.layout
.find('#edit-link-root')
.html();
}
return '';
},
initControls: function () {
//
},
textBack: 'Back'
}
})(), SSE.Views.EditHyperlink || {}))
});

View file

@ -104,11 +104,14 @@ define([
},
updateItemHandlers: function () {
if ($('#edit-image').length < 1) {
return;
}
var selectorsDynamicPage = [
'#edit-image',
'.page[data-page=edit-image-replace-view]'
].map(function (selector) {
return selector + ' a.item-link[data-page]';
}).join(', ');
$('.container-edit a.item-link[data-page]').single('click', _.buffered(this.onItemClick, 100, this));
$(selectorsDynamicPage).single('click', _.bind(this.onItemClick, this));
},
showPage: function (templateId, suspendEvent) {

View file

@ -107,11 +107,14 @@ define([
},
updateItemHandlers: function () {
if ($('#edit-shape').length < 1) {
return;
}
var selectorsDynamicPage = [
'#edit-shape',
'.page[data-page=edit-shape-style]'
].map(function (selector) {
return selector + ' a.item-link[data-page]';
}).join(', ');
$('.container-edit a.item-link[data-page]').single('click', _.buffered(this.onItemClick, 100, this));
$(selectorsDynamicPage).single('click', _.bind(this.onItemClick, this));
},
showPage: function (templateId, suspendEvent) {

File diff suppressed because one or more lines are too long