Merge branch 'staging' into ooPassword
This commit is contained in:
@@ -127,6 +127,18 @@ define([
|
||||
return input;
|
||||
};
|
||||
|
||||
dialog.selectableArea = function (value, opt) {
|
||||
var attrs = merge({
|
||||
readonly: 'readonly',
|
||||
}, opt);
|
||||
|
||||
var input = h('textarea', attrs);
|
||||
$(input).val(value).click(function () {
|
||||
input.select();
|
||||
});
|
||||
return input;
|
||||
};
|
||||
|
||||
dialog.okButton = function (content, classString) {
|
||||
var sel = typeof(classString) === 'string'? 'button.ok.' + classString:'button.ok.primary';
|
||||
return h(sel, { tabindex: '2', }, content || Messages.okButton);
|
||||
@@ -187,7 +199,8 @@ define([
|
||||
dialog.tabs = function (tabs) {
|
||||
var contents = [];
|
||||
var titles = [];
|
||||
tabs.forEach(function (tab) {
|
||||
var active = 0;
|
||||
tabs.forEach(function (tab, i) {
|
||||
if (!tab.content || !tab.title) { return; }
|
||||
var content = h('div.alertify-tabs-content', tab.content);
|
||||
var title = h('span.alertify-tabs-title', tab.title);
|
||||
@@ -203,10 +216,11 @@ define([
|
||||
});
|
||||
titles.push(title);
|
||||
contents.push(content);
|
||||
if (tab.active) { active = i; }
|
||||
});
|
||||
if (contents.length) {
|
||||
$(contents[0]).addClass('alertify-tabs-content-active');
|
||||
$(titles[0]).addClass('alertify-tabs-active');
|
||||
$(contents[active]).addClass('alertify-tabs-content-active');
|
||||
$(titles[active]).addClass('alertify-tabs-active');
|
||||
}
|
||||
return h('div.alertify-tabs', [
|
||||
h('div.alertify-tabs-titles', titles),
|
||||
|
||||
@@ -147,6 +147,7 @@ define([
|
||||
: Messages.owner_removeText;
|
||||
var removeCol = UIElements.getUserGrid(msg, {
|
||||
common: common,
|
||||
large: true,
|
||||
data: _owners,
|
||||
noFilter: true
|
||||
}, function () {
|
||||
@@ -238,6 +239,7 @@ define([
|
||||
});
|
||||
var addCol = UIElements.getUserGrid(Messages.owner_addText, {
|
||||
common: common,
|
||||
large: true,
|
||||
data: _friends
|
||||
}, function () {
|
||||
//console.log(arguments);
|
||||
@@ -254,6 +256,7 @@ define([
|
||||
});
|
||||
var teamsList = UIElements.getUserGrid(Messages.owner_addTeamText, {
|
||||
common: common,
|
||||
large: true,
|
||||
noFilter: true,
|
||||
data: teamsData
|
||||
}, function () {});
|
||||
@@ -739,12 +742,22 @@ define([
|
||||
UIElements.getProperties = function (common, data, cb) {
|
||||
var c1;
|
||||
var c2;
|
||||
var button = [{
|
||||
className: 'primary',
|
||||
name: Messages.okButton,
|
||||
onClick: function () {},
|
||||
keys: [13]
|
||||
}];
|
||||
NThen(function (waitFor) {
|
||||
getPadProperties(common, data, waitFor(function (e, c) {
|
||||
c1 = c[0];
|
||||
c1 = UI.dialog.customModal(c[0], {
|
||||
buttons: button
|
||||
});
|
||||
}));
|
||||
getRightsProperties(common, data, waitFor(function (e, c) {
|
||||
c2 = c[0];
|
||||
c2 = UI.dialog.customModal(c[0], {
|
||||
buttons: button
|
||||
});
|
||||
}));
|
||||
}).nThen(function () {
|
||||
var tabs = UI.dialog.tabs([{
|
||||
@@ -784,8 +797,6 @@ define([
|
||||
|
||||
var noOthers = icons.length === 0 ? '.cp-usergrid-empty' : '';
|
||||
|
||||
var buttonSelect = h('button', Messages.share_selectAll);
|
||||
var buttonDeselect = h('button', Messages.share_deselectAll);
|
||||
var inputFilter = h('input', {
|
||||
placeholder: Messages.share_filterFriend
|
||||
});
|
||||
@@ -793,9 +804,7 @@ define([
|
||||
var div = h('div.cp-usergrid-container' + noOthers + (config.large?'.large':''), [
|
||||
label ? h('label', label) : undefined,
|
||||
h('div.cp-usergrid-filter', (config.noFilter || config.noSelect) ? undefined : [
|
||||
inputFilter,
|
||||
buttonSelect,
|
||||
buttonDeselect
|
||||
inputFilter
|
||||
]),
|
||||
]);
|
||||
var $div = $(div);
|
||||
@@ -808,23 +817,8 @@ define([
|
||||
$div.find('.cp-usergrid-user:not(.cp-selected):not([data-name*="'+name+'"])').hide();
|
||||
}
|
||||
};
|
||||
|
||||
$(inputFilter).on('keydown keyup change', redraw);
|
||||
|
||||
$(buttonSelect).click(function () {
|
||||
$div.find('.cp-usergrid-user:not(.cp-selected):visible').addClass('cp-selected');
|
||||
onSelect();
|
||||
});
|
||||
$(buttonDeselect).click(function () {
|
||||
$div.find('.cp-usergrid-user.cp-selected').removeClass('cp-selected').each(function (i, el) {
|
||||
var order = $(el).attr('data-order');
|
||||
if (!order) { return; }
|
||||
$(el).attr('style', 'order:'+order);
|
||||
});
|
||||
redraw();
|
||||
onSelect();
|
||||
});
|
||||
|
||||
$(div).append(h('div.cp-usergrid-grid', icons));
|
||||
if (!config.noSelect) {
|
||||
$div.on('click', '.cp-usergrid-user', function () {
|
||||
@@ -885,7 +879,8 @@ define([
|
||||
var friendsList = UIElements.getUserGrid(null, {
|
||||
common: common,
|
||||
data: friends,
|
||||
noFilter: false
|
||||
noFilter: false,
|
||||
large: true
|
||||
}, refreshButtons);
|
||||
var friendDiv = friendsList.div;
|
||||
$div.append(friendDiv);
|
||||
@@ -911,6 +906,7 @@ define([
|
||||
var teamsList = UIElements.getUserGrid(Messages.share_linkTeam, {
|
||||
common: common,
|
||||
noFilter: true,
|
||||
large: true,
|
||||
data: teams
|
||||
}, refreshButtons);
|
||||
$div.append(teamsList.div);
|
||||
@@ -1016,12 +1012,29 @@ define([
|
||||
|
||||
if (!hashes || (!hashes.editHash && !hashes.viewHash)) { return; }
|
||||
|
||||
// check if the pad is password protected
|
||||
var hash = hashes.editHash || hashes.viewHash;
|
||||
var href = origin + pathname + '#' + hash;
|
||||
var parsedHref = Hash.parsePadUrl(href);
|
||||
var hasPassword = parsedHref.hashData.password;
|
||||
|
||||
var makeFaqLink = function () {
|
||||
var link = h('span', [
|
||||
h('i.fa.fa-question-circle'),
|
||||
h('a', {href: '#'}, Messages.passwordFaqLink)
|
||||
]);
|
||||
$(link).click(function () {
|
||||
common.openURL(config.origin + "/faq.html#security-pad_password");
|
||||
});
|
||||
return link;
|
||||
};
|
||||
|
||||
|
||||
var parsed = Hash.parsePadUrl(pathname);
|
||||
var canPresent = ['code', 'slide'].indexOf(parsed.type) !== -1;
|
||||
|
||||
var rights = h('div.msg.cp-inline-radio-group', [
|
||||
h('label', Messages.share_linkAccess),
|
||||
h('br'),
|
||||
h('div.radio-group',[
|
||||
UI.createRadio('accessRights', 'cp-share-editable-false',
|
||||
Messages.share_linkView, true, { mark: {tabindex:1} }),
|
||||
@@ -1068,9 +1081,42 @@ define([
|
||||
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 }));
|
||||
linkContent.push(h('div.cp-spacer'));
|
||||
linkContent.push(UI.dialog.selectableArea('', { id: 'cp-share-link-preview', tabindex: 1, rows:3}));
|
||||
|
||||
// Show alert if the pad is password protected
|
||||
if (hasPassword) {
|
||||
linkContent.push(h('div.alert.alert-primary', [
|
||||
h('i.fa.fa-lock'),
|
||||
Messages.share_linkPasswordAlert, h('br'),
|
||||
makeFaqLink()
|
||||
]));
|
||||
}
|
||||
|
||||
// warning about sharing links
|
||||
var localStore = window.cryptpadStore;
|
||||
var dismissButton = h('span.fa.fa-times');
|
||||
var shareLinkWarning = h('div.alert.alert-warning.dismissable',
|
||||
{ style: 'display: none;' },
|
||||
[
|
||||
h('span.cp-inline-alert-text', Messages.share_linkWarning),
|
||||
dismissButton
|
||||
]);
|
||||
linkContent.push(shareLinkWarning);
|
||||
|
||||
localStore.get('hide-alert-shareLinkWarning', function (val) {
|
||||
if (val === '1') { return; }
|
||||
$(shareLinkWarning).show();
|
||||
|
||||
$(dismissButton).on('click', function () {
|
||||
localStore.put('hide-alert-shareLinkWarning', '1');
|
||||
$(shareLinkWarning).remove();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
var link = h('div.cp-share-modal', linkContent);
|
||||
var $link = $(link);
|
||||
@@ -1137,7 +1183,19 @@ define([
|
||||
|
||||
// XXX Don't display access rights if no contacts
|
||||
var contactsContent = h('div.cp-share-modal');
|
||||
$(contactsContent).append(friendsList);
|
||||
var $contactsContent = $(contactsContent);
|
||||
|
||||
$contactsContent.append(friendsList);
|
||||
|
||||
// Show alert if the pad is password protected
|
||||
if (hasPassword) {
|
||||
$contactsContent.append(h('div.alert.alert-primary', [
|
||||
h('i.fa.fa-unlock'),
|
||||
Messages.share_contactPasswordAlert, h('br'),
|
||||
makeFaqLink()
|
||||
]));
|
||||
}
|
||||
|
||||
|
||||
var contactButtons = [makeCancelButton(),
|
||||
friendsObject.button];
|
||||
@@ -1156,9 +1214,18 @@ define([
|
||||
};
|
||||
var embedContent = [
|
||||
h('p', Messages.viewEmbedTag),
|
||||
h('br'),
|
||||
UI.dialog.selectable(getEmbedValue(), { id: 'cp-embed-link-preview', tabindex: 1 })
|
||||
UI.dialog.selectableArea(getEmbedValue(), { id: 'cp-embed-link-preview', tabindex: 1, rows: 3})
|
||||
];
|
||||
|
||||
// Show alert if the pad is password protected
|
||||
if (hasPassword) {
|
||||
embedContent.push(h('div.alert.alert-primary', [
|
||||
h('i.fa.fa-lock'), ' ',
|
||||
Messages.share_embedPasswordAlert, h('br'),
|
||||
makeFaqLink()
|
||||
]));
|
||||
}
|
||||
|
||||
var embedButtons = [
|
||||
makeCancelButton(), {
|
||||
className: 'primary',
|
||||
@@ -1187,13 +1254,15 @@ define([
|
||||
|
||||
// Create modal
|
||||
var tabs = [{
|
||||
title: Messages.share_linkCategory,
|
||||
icon: "fa fa-link",
|
||||
content: frameLink
|
||||
}, {
|
||||
title: Messages.share_contactCategory,
|
||||
icon: "fa fa-address-book",
|
||||
content: frameContacts
|
||||
content: frameContacts,
|
||||
active: hasFriends
|
||||
}, {
|
||||
title: Messages.share_linkCategory,
|
||||
icon: "fa fa-link",
|
||||
content: frameLink,
|
||||
active: !hasFriends
|
||||
}, {
|
||||
title: Messages.share_embedCategory,
|
||||
icon: "fa fa-code",
|
||||
@@ -1261,6 +1330,21 @@ define([
|
||||
if (!hashes.fileHash) { throw new Error("You must provide a file hash"); }
|
||||
var url = origin + pathname + '#' + hashes.fileHash;
|
||||
|
||||
// check if the file is password protected
|
||||
var parsedHref = Hash.parsePadUrl(url);
|
||||
var hasPassword = parsedHref.hashData.password;
|
||||
|
||||
var makeFaqLink = function () {
|
||||
var link = h('span', [
|
||||
h('i.fa.fa-question-circle'),
|
||||
h('a', {href: '#'}, Messages.passwordFaqLink)
|
||||
]);
|
||||
$(link).click(function () {
|
||||
common.openURL(config.origin + "/faq.html#security-pad_password");
|
||||
});
|
||||
return link;
|
||||
};
|
||||
|
||||
var getLinkValue = function () { return url; };
|
||||
|
||||
var makeCancelButton = function() {
|
||||
@@ -1272,9 +1356,40 @@ define([
|
||||
|
||||
// Share link tab
|
||||
var linkContent = [
|
||||
UI.dialog.selectable(getLinkValue(), { id: 'cp-share-link-preview', tabindex: 1 })
|
||||
UI.dialog.selectableArea(getLinkValue(), { id: 'cp-share-link-preview', tabindex: 1, rows:2 })
|
||||
];
|
||||
|
||||
// Show alert if the pad is password protected
|
||||
if (hasPassword) {
|
||||
linkContent.push(h('div.alert.alert-primary', [
|
||||
h('i.fa.fa-lock'),
|
||||
Messages.share_linkPasswordAlert, h('br'),
|
||||
makeFaqLink()
|
||||
]));
|
||||
}
|
||||
|
||||
// warning about sharing links
|
||||
var localStore = window.cryptpadStore;
|
||||
var dismissButton = h('span.fa.fa-times');
|
||||
var shareLinkWarning = h('div.alert.alert-warning.dismissable',
|
||||
{ style: 'display: none;' },
|
||||
[
|
||||
h('span.cp-inline-alert-text', Messages.share_linkWarning),
|
||||
dismissButton
|
||||
]);
|
||||
linkContent.push(shareLinkWarning);
|
||||
|
||||
localStore.get('hide-alert-shareLinkWarning', function (val) {
|
||||
if (val === '1') { return; }
|
||||
$(shareLinkWarning).show();
|
||||
|
||||
$(dismissButton).on('click', function () {
|
||||
localStore.put('hide-alert-shareLinkWarning', '1');
|
||||
$(shareLinkWarning).remove();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
var link = h('div.cp-share-modal', linkContent);
|
||||
|
||||
var linkButtons = [
|
||||
@@ -1307,7 +1422,17 @@ define([
|
||||
var friendsList = friendsObject.content;
|
||||
|
||||
var contactsContent = h('div.cp-share-modal');
|
||||
$(contactsContent).append(friendsList);
|
||||
var $contactsContent = $(contactsContent);
|
||||
$contactsContent.append(friendsList);
|
||||
|
||||
// Show alert if the pad is password protected
|
||||
if (hasPassword) {
|
||||
$contactsContent.append(h('div.alert.alert-primary', [
|
||||
h('i.fa.fa-unlock'),
|
||||
Messages.share_contactPasswordAlert, h('br'),
|
||||
makeFaqLink()
|
||||
]));
|
||||
}
|
||||
|
||||
var contactButtons = [makeCancelButton(),
|
||||
friendsObject.button];
|
||||
@@ -1321,12 +1446,20 @@ define([
|
||||
// Embed tab
|
||||
var embed = h('div.cp-share-modal', [
|
||||
h('p', Messages.fileEmbedScript),
|
||||
h('br'),
|
||||
UI.dialog.selectable(common.getMediatagScript()),
|
||||
h('p', Messages.fileEmbedTag),
|
||||
h('br'),
|
||||
UI.dialog.selectable(common.getMediatagFromHref(fileData)),
|
||||
]);
|
||||
|
||||
// Show alert if the pad is password protected
|
||||
if (hasPassword) {
|
||||
embed.append(h('div.alert.alert-primary', [
|
||||
h('i.fa.fa-lock'), ' ',
|
||||
Messages.share_embedPasswordAlert, h('br'),
|
||||
makeFaqLink()
|
||||
]));
|
||||
}
|
||||
|
||||
var embedButtons = [{
|
||||
className: 'cancel',
|
||||
name: Messages.cancel,
|
||||
@@ -1349,13 +1482,15 @@ define([
|
||||
|
||||
// Create modal
|
||||
var tabs = [{
|
||||
title: Messages.share_linkCategory,
|
||||
icon: "fa fa-link",
|
||||
content: frameLink
|
||||
}, {
|
||||
title: Messages.share_contactCategory,
|
||||
icon: "fa fa-address-book",
|
||||
content: frameContacts
|
||||
content: frameContacts,
|
||||
active: hasFriends,
|
||||
}, {
|
||||
title: Messages.share_linkCategory,
|
||||
icon: "fa fa-link",
|
||||
content: frameLink,
|
||||
active: !hasFriends
|
||||
}, {
|
||||
title: Messages.share_embedCategory,
|
||||
icon: "fa fa-code",
|
||||
@@ -1759,7 +1894,7 @@ define([
|
||||
if (e) { return void console.error(e); }
|
||||
UIElements.getProperties(common, data, function (e, $prop) {
|
||||
if (e) { return void console.error(e); }
|
||||
UI.alert($prop[0], undefined, true);
|
||||
UI.openCustomModal($prop[0]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -84,7 +84,7 @@ define([
|
||||
|
||||
var defaultCode = renderer.code;
|
||||
renderer.code = function (code, language) {
|
||||
if (language === 'mermaid' && (code.match(/^sequenceDiagram/) || code.match(/^graph/))) {
|
||||
if (language === 'mermaid' && code.match(/^(graph|pie|gantt|sequenceDiagram|classDiagram|gitGraph)/)) {
|
||||
return '<pre class="mermaid">'+code+'</pre>';
|
||||
} else {
|
||||
return defaultCode.apply(renderer, arguments);
|
||||
@@ -197,7 +197,6 @@ define([
|
||||
'APPLET',
|
||||
'VIDEO', // privacy implications of videos are the same as images
|
||||
'AUDIO', // same with audio
|
||||
'SVG'
|
||||
];
|
||||
var unsafeTag = function (info) {
|
||||
/*if (info.node && $(info.node).parents('media-tag').length) {
|
||||
@@ -307,8 +306,39 @@ define([
|
||||
|
||||
var Dom = domFromHTML($('<div>').append($div).html());
|
||||
$content[0].normalize();
|
||||
$content.find('pre.mermaid[data-processed="true"]').remove();
|
||||
|
||||
var mermaid_source = [];
|
||||
var mermaid_cache = {};
|
||||
|
||||
// iterate over the unrendered mermaid inputs, caching their source as you go
|
||||
$(newDomFixed).find('pre.mermaid').each(function (index, el) {
|
||||
if (el.childNodes.length === 1 && el.childNodes[0].nodeType === 3) {
|
||||
var src = el.childNodes[0].wholeText;
|
||||
el.setAttribute('mermaid-source', src);
|
||||
mermaid_source[index] = src;
|
||||
}
|
||||
});
|
||||
|
||||
// iterate over rendered mermaid charts
|
||||
$content.find('pre.mermaid:not([processed="true"])').each(function (index, el) {
|
||||
// retrieve the attached source code which it was drawn
|
||||
var src = el.getAttribute('mermaid-source');
|
||||
|
||||
// check if that source exists in the set of charts which are about to be rendered
|
||||
if (mermaid_source.indexOf(src) === -1) {
|
||||
// if it's not, then you can remove it
|
||||
if (el.parentNode && el.parentNode.children.length) {
|
||||
el.parentNode.removeChild(el);
|
||||
}
|
||||
} else if (el.childNodes.length === 1 && el.childNodes[0].nodeType !== 3) {
|
||||
// otherwise, confirm that the content of the rendered chart is not a text node
|
||||
// and keep a copy of it
|
||||
mermaid_cache[src] = el.childNodes[0];
|
||||
}
|
||||
});
|
||||
|
||||
var oldDom = domFromHTML($content[0].outerHTML);
|
||||
|
||||
var patch = makeDiff(oldDom, Dom, id);
|
||||
if (typeof(patch) === 'string') {
|
||||
throw new Error(patch);
|
||||
@@ -348,8 +378,32 @@ define([
|
||||
var target = document.getElementById($a.attr('data-href'));
|
||||
if (target) { target.scrollIntoView(); }
|
||||
});
|
||||
|
||||
// loop over mermaid elements in the rendered content
|
||||
$content.find('pre.mermaid').each(function (index, el) {
|
||||
// since you've simply drawn the content that was supplied via markdown
|
||||
// you can assume that the index of your rendered charts matches that
|
||||
// of those in the markdown source.
|
||||
var src = mermaid_source[index];
|
||||
el.setAttribute('mermaid-source', src);
|
||||
var cached = mermaid_cache[src];
|
||||
|
||||
// check if you had cached a pre-rendered instance of the supplied source
|
||||
if (typeof(cached) !== 'object') { return; }
|
||||
|
||||
// if there's a cached rendering, empty out the contained source code
|
||||
// which would otherwise be drawn again.
|
||||
// apparently this is the fastest way to empty out an element
|
||||
while (el.firstChild) { el.removeChild(el.firstChild); } //el.innerHTML = '';
|
||||
// insert the cached graph
|
||||
el.appendChild(cached);
|
||||
// and set a flag indicating that this graph need not be reprocessed
|
||||
el.setAttribute('data-processed', true);
|
||||
});
|
||||
|
||||
try {
|
||||
Mermaid.init();
|
||||
// finally, draw any graphs which have changed and were thus not cached
|
||||
Mermaid.init(undefined, $content.find('pre.mermaid:not([data-processed="true"])'));
|
||||
} catch (e) { console.error(e); }
|
||||
}
|
||||
};
|
||||
|
||||
@@ -79,7 +79,7 @@ define([
|
||||
var faColor = 'cptools-palette';
|
||||
var faTrash = 'fa-trash';
|
||||
var faDelete = 'fa-eraser';
|
||||
var faProperties = 'fa-database';
|
||||
var faProperties = 'fa-info-circle';
|
||||
var faTags = 'fa-hashtag';
|
||||
var faUploadFiles = 'cptools-file-upload';
|
||||
var faUploadFolder = 'cptools-folder-upload';
|
||||
@@ -4187,7 +4187,7 @@ define([
|
||||
}
|
||||
getProperties(el, function (e, $prop) {
|
||||
if (e) { return void logError(e); }
|
||||
UI.alert($prop[0], undefined, true);
|
||||
UI.openCustomModal($prop[0]);
|
||||
});
|
||||
}
|
||||
else if ($this.hasClass("cp-app-drive-context-hashtag")) {
|
||||
|
||||
@@ -43,7 +43,7 @@ define([
|
||||
MessengerUI.create = function ($container, common, toolbar) {
|
||||
var metadataMgr = common.getMetadataMgr();
|
||||
var origin = metadataMgr.getPrivateData().origin;
|
||||
var readOnly = metadataMgr.getPrivateData().readOnly || toolbar.readOnly;
|
||||
var readOnly = metadataMgr.getPrivateData().readOnly || (toolbar && toolbar.readOnly);
|
||||
|
||||
var isApp = typeof(toolbar) !== "undefined";
|
||||
|
||||
|
||||
@@ -769,18 +769,18 @@ define([
|
||||
continue;
|
||||
}
|
||||
|
||||
var href;
|
||||
var decryptedHref;
|
||||
try {
|
||||
href = el.href && ((el.href.indexOf('#') !== -1) ? el.href : exp.cryptor.decrypt(el.href));
|
||||
decryptedHref = el.href && ((el.href.indexOf('#') !== -1) ? el.href : exp.cryptor.decrypt(el.href));
|
||||
} catch (e) {}
|
||||
|
||||
if (href && href.indexOf('#') === -1) {
|
||||
if (decryptedHref && decryptedHref.indexOf('#') === -1) {
|
||||
// If we can't decrypt the href, it means we don't have the correct secondaryKey and we're in readOnly mode:
|
||||
// abort now, we won't be able to fix anything anyway
|
||||
continue;
|
||||
}
|
||||
|
||||
var parsed = Hash.parsePadUrl(href || el.roHref);
|
||||
var parsed = Hash.parsePadUrl(decryptedHref || el.roHref);
|
||||
var secret;
|
||||
|
||||
// Clean invalid hash
|
||||
@@ -797,9 +797,9 @@ define([
|
||||
}
|
||||
|
||||
// If we have an edit link, check the view link
|
||||
if (href && parsed.hashData.type === "pad" && parsed.hashData.version) {
|
||||
if (decryptedHref && parsed.hashData.type === "pad" && parsed.hashData.version) {
|
||||
if (parsed.hashData.mode === "view") {
|
||||
el.roHref = href;
|
||||
el.roHref = decryptedHref;
|
||||
delete el.href;
|
||||
} else if (!el.roHref) {
|
||||
secret = Hash.getSecrets(parsed.type, parsed.hash, el.password);
|
||||
@@ -818,7 +818,9 @@ define([
|
||||
}
|
||||
|
||||
// Fix href
|
||||
if (href && href.slice(0,1) !== '/') { el.href = exp.cryptor.encrypt(Hash.getRelativeHref(el.href)); }
|
||||
if (decryptedHref && decryptedHref.slice(0,1) !== '/') {
|
||||
el.href = exp.cryptor.encrypt(Hash.getRelativeHref(decryptedHref));
|
||||
}
|
||||
// Fix creation time
|
||||
if (!el.ctime) { el.ctime = el.atime; }
|
||||
// Fix title
|
||||
|
||||
@@ -488,6 +488,20 @@ define([
|
||||
Cryptpad.storeInTeam(data, cb);
|
||||
});
|
||||
|
||||
sframeChan.on('EV_GOTO_URL', function (url) {
|
||||
if (url) {
|
||||
window.location.href = url;
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
|
||||
sframeChan.on('EV_OPEN_URL', function (url) {
|
||||
if (url) {
|
||||
window.open(url);
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
addCommonRpc(sframeChan);
|
||||
|
||||
@@ -956,20 +970,6 @@ define([
|
||||
});
|
||||
});
|
||||
|
||||
sframeChan.on('EV_GOTO_URL', function (url) {
|
||||
if (url) {
|
||||
window.location.href = url;
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
|
||||
sframeChan.on('EV_OPEN_URL', function (url) {
|
||||
if (url) {
|
||||
window.open(url);
|
||||
}
|
||||
});
|
||||
|
||||
sframeChan.on('Q_PIN_GET_USAGE', function (teamId, cb) {
|
||||
Cryptpad.isOverPinLimit(teamId, function (err, overLimit, data) {
|
||||
cb({
|
||||
|
||||
@@ -533,7 +533,7 @@ MessengerUI, Messages) {
|
||||
Common.getSframeChannel().event('EV_SHARE_OPEN', {
|
||||
hidden: true
|
||||
});
|
||||
$shareBlock.click(function () {
|
||||
$shareBlock.click(function () {
|
||||
var title = (config.title && config.title.getTitle && config.title.getTitle())
|
||||
|| (config.title && config.title.defaultName)
|
||||
|| "";
|
||||
|
||||
2
www/common/translations/messages.fi.json
Normal file
2
www/common/translations/messages.fi.json
Normal file
@@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user