').append($shareIcon).html(),
+ options: options,
+ feedback: 'SHARE_MENU',
+ };
+ var $shareBlock = Cryptpad.createDropdown(dropdownConfigShare);
+ $shareBlock.find('.dropdown-bar-content').addClass(SHARE_CLS).addClass(EDITSHARE_CLS).addClass(VIEWSHARE_CLS);
+ $shareBlock.addClass('shareButton');
+ $shareBlock.find('button').attr('title', Messages.shareButton);
- if (hashes.editHash) {
- $shareBlock.find('a.editShare').click(function () {
- var url = window.location.origin + window.location.pathname + '#' + hashes.editHash;
- var success = Cryptpad.Clipboard.copy(url);
- if (success) { Cryptpad.log(Messages.shareSuccess); }
+ if (hashes.editHash) {
+ $shareBlock.find('a.editShare').click(function () {
+ Common.storeLinkToClipboard(false, function (err) {
+ if (!err) { Cryptpad.log(Messages.shareSuccess); }
});
- }
- if (hashes.viewHash) {
- $shareBlock.find('a.viewShare').click(function () {
- var url = window.location.origin + window.location.pathname + '#' + hashes.viewHash ;
- var success = Cryptpad.Clipboard.copy(url);
- if (success) { Cryptpad.log(Messages.shareSuccess); }
+ });
+ }
+ if (hashes.viewHash) {
+ $shareBlock.find('a.viewShare').click(function () {
+ Common.storeLinkToClipboard(true, function (err) {
+ if (!err) { Cryptpad.log(Messages.shareSuccess); }
});
- }
- if (hashes.fileHash) {
- $shareBlock.find('a.fileShare').click(function () {
- var url = window.location.origin + window.location.pathname + '#' + hashes.fileHash ;
- var success = Cryptpad.Clipboard.copy(url);
- if (success) { Cryptpad.log(Messages.shareSuccess); }
- });
- }
+ });
+ }
- toolbar.$leftside.append($shareBlock);
- toolbar.share = $shareBlock;
- });
+ toolbar.$leftside.append($shareBlock);
+ toolbar.share = $shareBlock;
return "Loading share button";
};
@@ -738,12 +702,11 @@ define([
return $limit;
};
- var createNewPad = function (toolbar) {
- /*var $newPad = $('
', {
- 'class': NEWPAD_CLS + " dropdown-bar"
- }).appendTo(toolbar.$top);*/
+ var createNewPad = function (toolbar, config) {
var $newPad = toolbar.$top.find('.'+NEWPAD_CLS).show();
+ var origin = config.metadataMgr.getPrivateData().origin;
+
var pads_options = [];
Config.availablePadTypes.forEach(function (p) {
if (p === 'drive') { return; }
@@ -753,7 +716,7 @@ define([
tag: 'a',
attributes: {
'target': '_blank',
- 'href': '/' + p + '/',
+ 'href': origin + '/' + p + '/',
},
content: $('').append(Cryptpad.getIcon(p)).html() + Messages.type[p]
});
@@ -777,10 +740,11 @@ define([
throw new Error("You must provide a `metadataMgr` to display the user menu");
}
var metadataMgr = config.metadataMgr;
- var myData = metadataMgr.getMetadata().users[metadataMgr.getNetfluxId()];
var $userAdmin = toolbar.$userAdmin.find('.'+USERADMIN_CLS).show();
var userMenuCfg = {
- $initBlock: $userAdmin
+ $initBlock: $userAdmin,
+ metadataMgr: metadataMgr,
+ Common: Common
};
if (!config.hideDisplayName) {
$.extend(true, userMenuCfg, {
@@ -792,44 +756,29 @@ define([
userMenuCfg.displayName = 1;
userMenuCfg.displayChangeName = 1;
}
- Cryptpad.createUserAdminMenu(userMenuCfg);
+ Common.createUserAdminMenu(userMenuCfg);
$userAdmin.find('button').attr('title', Messages.userAccountButton);
- // TODO iframe
var $userButton = toolbar.$userNameButton = $userAdmin.find('a.' + USERBUTTON_CLS);
$userButton.click(function (e) {
e.preventDefault();
e.stopPropagation();
- var lastName = myData.displayName;
- //Cryptpad.getLastName(function (err, lastName) {
- //if (err) { return void console.error("Cannot get last name", err); }
- Cryptpad.prompt(Messages.changeNamePrompt, lastName || '', function (newName) {
- if (newName === null && typeof(lastName) === "string") { return; }
- if (newName === null) { newName = ''; }
- else { Common.feedback('NAME_CHANGED'); }
- Common.setDisplayName(newName, function (err) {
- if (err) {
- console.log("Couldn't set username");
- console.error(err);
- return;
- }
- //Cryptpad.changeDisplayName(newName, true); Already done?
- });
+ var myData = metadataMgr.getMetadata().users[metadataMgr.getNetfluxId()];
+ var lastName = myData.name;
+ Cryptpad.prompt(Messages.changeNamePrompt, lastName || '', function (newName) {
+ if (newName === null && typeof(lastName) === "string") { return; }
+ if (newName === null) { newName = ''; }
+ else { Common.feedback('NAME_CHANGED'); }
+ Common.setDisplayName(newName, function (err) {
+ if (err) {
+ console.log("Couldn't set username");
+ console.error(err);
+ return;
+ }
+ //Cryptpad.changeDisplayName(newName, true); Already done?
});
- //});
+ });
});
- Cryptpad.onDisplayNameChanged(function () {
- window.setTimeout(function () {
- Cryptpad.findCancelButton().click();
- if (config.metadataMgr) {
- updateUserList(toolbar, config);
- return;
- }
- updateDisplayName(toolbar, config);
- }, 0);
- });
-
- updateDisplayName(toolbar, config);
return $userAdmin;
};
@@ -886,7 +835,7 @@ define([
Cryptpad.log(Messages._getKey("notifyJoined", [name]));
break;
case 0:
- oldname = (oldname === "") ? Messages.anonymous : oldname;
+ oldname = (!oldname) ? Messages.anonymous : oldname;
Cryptpad.log(Messages._getKey("notifyRenamed", [oldname, name]));
break;
case -1:
@@ -988,14 +937,14 @@ define([
// Create the subelements
var tb = {};
tb['userlist'] = createUserList;
- tb['share'] = createShare;
- tb['fileshare'] = createFileShare;
+ tb['share'] = createShare; //TODO
+ tb['fileshare'] = createFileShare;//TODO
tb['title'] = createTitle;
- tb['pageTitle'] = createPageTitle;
+ tb['pageTitle'] = createPageTitle;//TODO
tb['lag'] = $.noop;
tb['spinner'] = createSpinner;
tb['state'] = $.noop;
- tb['limit'] = createLimit;
+ tb['limit'] = createLimit; // TODO
tb['upgrade'] = $.noop;
tb['newpad'] = createNewPad;
tb['useradmin'] = createUserAdmin;
diff --git a/www/pad2/main.js b/www/pad2/main.js
index 65cebc166..fe8fbf603 100644
--- a/www/pad2/main.js
+++ b/www/pad2/main.js
@@ -471,7 +471,7 @@ define([
var titleCfg = { getHeadingText: getHeadingText };
Title = common.createTitle(titleCfg, realtimeOptions.onLocal, common, cpNfInner.metadataMgr);
var configTb = {
- displayed: ['userlist', 'title', 'useradmin'],
+ displayed: ['userlist', 'title', 'useradmin', 'spinner', 'newpad', 'share'],
title: Title.getTitleConfig(),
metadataMgr: cpNfInner.metadataMgr,
readOnly: readOnly,
diff --git a/www/pad2/outer.js b/www/pad2/outer.js
index 017736025..5d88b765d 100644
--- a/www/pad2/outer.js
+++ b/www/pad2/outer.js
@@ -10,6 +10,7 @@ define([
], function (ApiConfig, SFrameChannel, $, CpNfOuter, nThen, Cryptpad, Crypto) {
console.log('xxx');
var sframeChan;
+ var hashes;
nThen(function (waitFor) {
$(waitFor());
}).nThen(function (waitFor) {
@@ -20,11 +21,16 @@ define([
console.log('sframe initialized');
}));
Cryptpad.ready(waitFor());
+ }).nThen(function (waitFor) {
+ Cryptpad.getShareHashes(function (err, h) {
+ hashes = h;
+ waitFor()();
+ });
}).nThen(function (waitFor) {
var secret = Cryptpad.getSecrets();
var readOnly = secret.keys && !secret.keys.editKeyStr;
if (!secret.keys) { secret.keys = secret.key; }
-
+
var parsed = Cryptpad.parsePadUrl(window.location.href);
parsed.type = parsed.type.replace('pad2', 'pad');
if (!parsed.type) { throw new Error(); }
@@ -52,7 +58,10 @@ define([
netfluxId: Cryptpad.getNetwork().webChannels[0].myID,
},
priv: {
- accountName: Cryptpad.getAccountName()
+ accountName: Cryptpad.getAccountName(),
+ origin: window.location.origin,
+ readOnly: readOnly,
+ availableHashes: Object.keys(hashes)
}
});
});
@@ -87,6 +96,29 @@ define([
});
});
+ sframeChan.on('Q_LOGOUT', function (data, cb) {
+ Cryptpad.logout(cb);
+ });
+
+ sframeChan.on('Q_SET_LOGIN_REDIRECT', function (data, cb) {
+ sessionStorage.redirectTo = window.location.href;
+ cb();
+ });
+
+ sframeChan.on('Q_STORE_LINK_TO_CLIPBOARD', function (readOnly, cb) {
+ if (readOnly) {
+ if (!hashes.viewHash) { return void cb('E_INVALID_HASH'); }
+ var url = window.location.origin + window.location.pathname + '#' + hashes.viewHash;
+ var success = Cryptpad.Clipboard.copy(url);
+ cb(!success);
+ return;
+ }
+ if (!hashes.editHash) { return void cb('E_INVALID_HASH'); }
+ var eUrl = window.location.origin + window.location.pathname + '#' + hashes.editHash;
+ var eSuccess = Cryptpad.Clipboard.copy(eUrl);
+ cb(!eSuccess);
+ });
+
CpNfOuter.start({
sframeChan: sframeChan,
channel: secret.channel,