clean up share modal

- share access rights buttons between all tabs
- handle present mode when available
- general clean up of code to be more readable
This commit is contained in:
David Benqué
2019-11-20 13:14:25 +00:00
parent 598ce5a329
commit b8753f1fd7
2 changed files with 68 additions and 69 deletions

View File

@@ -1034,46 +1034,28 @@ define([
if (!hashes || (!hashes.editHash && !hashes.viewHash)) { return; }
var rights = h('div', [
var parsed = Hash.parsePadUrl(pathname);
var canPresent = ['code', 'slide'].indexOf(parsed.type) !== -1;
var rights = h('div.msg', [
h('label', Messages.share_linkAccess),
h('br'),
UI.createRadio('accessRights', 'cp-share-editable-false',
Messages.share_linkView, true, { mark: {tabindex:1} }),
UI.createRadio('accessRights', 'cp-share-present',
Messages.share_linkPresent, false, { mark: {tabindex:1} }), // XXX only show this if code or slide pad
canPresent ? UI.createRadio('accessRights', 'cp-share-present',
Messages.share_linkPresent, false, { mark: {tabindex:1} }) : undefined,
UI.createRadio('accessRights', 'cp-share-editable-true',
Messages.share_linkEdit, false, { mark: {tabindex:1} }),
h('br'),
]);
// Share link tab
var content = [];
var sfContent = [
h('label', Messages.sharedFolders_share),
h('br'),
];
var padContent = [
UI.createCheckbox('cp-share-embed', Messages.share_linkEmbed, false, { mark: {tabindex:1} }),
h('br'),
];
if (config.sharedFolder) { Array.prototype.push.apply(content, sfContent); }
Array.prototype.push.apply(content);
if (!config.sharedFolder) { Array.prototype.push.apply(content, padContent); }
content.push(UI.dialog.selectable('', { id: 'cp-share-link-preview', tabindex: 1 }));
// XXX remove LESS code for cp-share-columns if not using anymore
//var mainShareColumn = h('div.cp-share-column.contains-nav', content);
var link = h('div.cp-share-modal', content);
var saveValue = function () {
var edit = Util.isChecked($(rights).find('#cp-share-editable-true'));
var embed = Util.isChecked($(link).find('#cp-share-embed'));
var present = Util.isChecked($(rights).find('#cp-share-present'));
common.setAttribute(['general', 'share'], {
edit: edit,
embed: embed,
present: present
});
};
@@ -1081,7 +1063,7 @@ define([
var getLinkValue = function (initValue) {
var val = initValue || {};
var edit = val.edit !== undefined ? val.edit : Util.isChecked($(rights).find('#cp-share-editable-true'));
var embed = val.embed !== undefined ? val.embed : Util.isChecked($(link).find('#cp-share-embed'));
var embed = val.embed;
var present = val.present !== undefined ? val.present : Util.isChecked($(rights).find('#cp-share-present'));
var hash = (!hashes.viewHash || (edit && hashes.editHash)) ? hashes.editHash : hashes.viewHash;
var href = origin + pathname + '#' + hash;
@@ -1096,6 +1078,18 @@ define([
keys: [27]};
};
// Share link tab
var linkContent = config.sharedFolder ? [
h('label', Messages.sharedFolders_share),
h('br'),
] : [
UI.createCheckbox('cp-share-embed', Messages.share_linkEmbed, false, { mark: {tabindex:1} }),
h('br'),
];
linkContent.push(UI.dialog.selectable('', { id: 'cp-share-link-preview', tabindex: 1 }));
var link = h('div.cp-share-modal', linkContent);
var linkButtons = [
makeCancelButton(),
!config.sharedFolder && {
@@ -1103,7 +1097,9 @@ define([
name: Messages.share_linkOpen,
onClick: function () {
saveValue();
var v = getLinkValue();
var v = getLinkValue({
embed: Util.isChecked($(link).find('#cp-share-embed'))
});
window.open(v);
},
keys: [[13, 'ctrl']]
@@ -1113,7 +1109,9 @@ define([
name: Messages.share_linkCopy,
onClick: function () {
saveValue();
var v = getLinkValue();
var v = getLinkValue({
embed: Util.isChecked($(link).find('#cp-share-embed'))
});
var success = Clipboard.copy(v);
if (success) { UI.log(Messages.shareSuccess); }
},
@@ -1121,23 +1119,14 @@ define([
}
];
// disable edit share options if you don't have edit rights
if (!hashes.editHash) {
$(rights).find('#cp-share-editable-false').attr('checked', true);
$(rights).find('#cp-share-editable-true').removeAttr('checked').attr('disabled', true);
} else if (!hashes.viewHash) {
$(rights).find('#cp-share-editable-false').removeAttr('checked').attr('disabled', true);
$(rights).find('#cp-share-present').removeAttr('checked').attr('disabled', true);
$(rights).find('#cp-share-editable-true').attr('checked', true);
}
// update values for link preview when radio btns change
$(link).find('#cp-share-link-preview').val(getLinkValue());
$(link).find('input[type="radio"], input[type="checkbox"]').on('change', function () {
$(rights).find('input[type="radio"]').on('change', function () {
$(link).find('#cp-share-link-preview').val(getLinkValue());
});
$(link).find('input[type="checkbox"]').on('change', function () {
$(link).find('#cp-share-link-preview').val(getLinkValue());
});
// $link.append(UI.dialog.getButtons(shareButtons, config.onClose));
var frameLink = UI.dialog.customModal(link, {
buttons: linkButtons,
@@ -1149,39 +1138,34 @@ define([
var hasFriends = Object.keys(config.friends || {}).length !== 0;
var onFriendShare = Util.mkEvent();
var friendsObject = hasFriends ? createShareWithFriends(config, onFriendShare) : {
content: h('p', Messages.share_noContacts)
content: h('p', Messages.share_noContacts),
button: {}
};
var friendsList = friendsObject.content;
onFriendShare.reg(saveValue);
// XXX Don't display access rights if no contacts
/// var contactsAccessRights = hasFriends ? createAccessRights('contact-rights') : '';
var contacts = h('div.cp-share-modal');
var $contacts = $(contacts);
$(friendsList).appendTo($contacts);
var contactsContent = h('div.cp-share-modal');
$(contactsContent).append(friendsList);
var contactButtons = [makeCancelButton(),
friendsObject.button];
var frameContacts = UI.dialog.customModal(contacts, {
var frameContacts = UI.dialog.customModal(contactsContent, {
buttons: contactButtons,
onClose: config.onClose,
});
// Embed tab
var getEmbedValue = function () {
var hash = hashes.viewHash || hashes.editHash;
var href = origin + pathname + '#' + hash;
var parsed = Hash.parsePadUrl(href);
var url = origin + parsed.getUrl({embed: true, present: true});
var url = getLinkValue({
embed: true
});
return '<iframe src="' + url + '"></iframe>';
};
var embed = h('div.cp-share-modal', [
var embedContent = h('div.cp-share-modal', [
h('p', Messages.viewEmbedTag),
h('br'),
UI.dialog.selectable(getEmbedValue())
@@ -1191,15 +1175,13 @@ define([
className: 'primary',
name: Messages.share_linkCopy,
onClick: function () {
var v = getLinkValue({
embed: true
});
var v = getEmbedValue();
var success = Clipboard.copy(v);
if (success) { UI.log(Messages.shareSuccess); }
},
keys: [13]
}];
var frameEmbed = UI.dialog.customModal(embed, {
var frameEmbed = UI.dialog.customModal(embedContent, {
buttons: embedButtons,
onClose: config.onClose,
});
@@ -1224,19 +1206,36 @@ define([
}
var modal = UI.dialog.tabs(tabs);
$(modal).find('.alertify-tabs-titles').after(rights);
// XXX
// disable edit share options if you don't have edit rights
if (!hashes.editHash) {
$(rights).find('#cp-share-editable-false').attr('checked', true);
$(rights).find('#cp-share-editable-true').removeAttr('checked').attr('disabled', true);
} else if (!hashes.viewHash) {
$(rights).find('#cp-share-editable-false').removeAttr('checked').attr('disabled', true);
$(rights).find('#cp-share-present').removeAttr('checked').attr('disabled', true);
$(rights).find('#cp-share-editable-true').attr('checked', true);
}
common.getAttribute(['general', 'share'], function (err, val) {
val = val || {};
if ((val.edit === false && hashes.viewHash) || !hashes.editHash) {
$(link).find('#cp-share-editable-false').prop('checked', true);
$(link).find('#cp-share-editable-true').prop('checked', false);
if (val.present && canPresent) {
$(rights).find('#cp-share-editable-false').prop('checked', false);
$(rights).find('#cp-share-editable-true').prop('checked', false);
$(rights).find('#cp-share-present').prop('checked', true);
} else if ((val.edit === false && hashes.viewHash) || !hashes.editHash) {
$(rights).find('#cp-share-editable-false').prop('checked', true);
$(rights).find('#cp-share-editable-true').prop('checked', false);
$(rights).find('#cp-share-present').prop('checked', false);
} else {
$(link).find('#cp-share-editable-true').prop('checked', true);
$(link).find('#cp-share-editable-false').prop('checked', false);
$(rights).find('#cp-share-editable-true').prop('checked', true);
$(rights).find('#cp-share-editable-false').prop('checked', false);
$(rights).find('#cp-share-present').prop('checked', false);
}
if (val.embed) { $(link).find('#cp-share-embed').prop('checked', true); }
if (val.present) { $(link).find('#cp-share-present').prop('checked', true); }
if (config.sharedFolder) {
delete val.embed;
delete val.embed;
if (!canPresent) {
delete val.present;
}
$(link).find('#cp-share-link-preview').val(getLinkValue(val));