define([ '/bower_components/nthen/index.js', '/customize/messages.js', '/common/sframe-chainpad-netflux-inner.js', '/common/sframe-channel.js', '/common/sframe-common-title.js', '/common/sframe-common-interface.js', '/common/metadata-manager.js', '/common/cryptpad-common.js' ], function (nThen, Messages, CpNfInner, SFrameChannel, Title, UI, MetadataMgr, Cryptpad) { // Chainpad Netflux Inner var funcs = {}; var ctx = {}; funcs.startRealtime = function (options) { if (ctx.cpNfInner) { return ctx.cpNfInner; } options.sframeChan = ctx.sframeChan; options.metadataMgr = ctx.metadataMgr; ctx.cpNfInner = CpNfInner.start(options); ctx.cpNfInner.metadataMgr.onChangeLazy(options.onLocal); return ctx.cpNfInner; }; var isLoggedIn = funcs.isLoggedIn = function () { if (!ctx.cpNfInner) { throw new Error("cpNfInner is not ready!"); } return ctx.cpNfInner.metadataMgr.getPrivateData().accountName; }; var titleUpdated; funcs.updateTitle = function (title, cb) { ctx.metadataMgr.updateTitle(title); titleUpdated = cb; }; // UI funcs.createUserAdminMenu = UI.createUserAdminMenu; funcs.displayAvatar = UI.displayAvatar; // Title module funcs.createTitle = Title.create; funcs.getDefaultTitle = function () { if (!ctx.cpNfInner) { throw new Error("cpNfInner is not ready!"); } return ctx.cpNfInner.metadataMgr.getMetadata().defaultTitle; }; funcs.setDisplayName = function (name, cb) { ctx.sframeChan.query('Q_SETTINGS_SET_DISPLAY_NAME', name, function (err) { if (cb) { cb(err); } }); }; funcs.logout = function (cb) { ctx.sframeChan.query('Q_LOGOUT', null, function (err) { if (cb) { cb(err); } }); }; funcs.setLoginRedirect = function (cb) { ctx.sframeChan.query('Q_SET_LOGIN_REDIRECT', null, function (err) { if (cb) { cb(err); } }); }; funcs.sendAnonRpcMsg = function (msg, content, cb) { ctx.sframeChan.query('Q_ANON_RPC_MESSAGE', { msg: msg, content: content }, function (err, data) { if (cb) { cb(data); } }); }; funcs.isOverPinLimit = function (cb) { ctx.sframeChan.query('Q_GET_PIN_LIMIT_STATUS', null, function (err, data) { cb(data.error, data.overLimit, data.limits); }); }; // TODO funcs.feedback = function () {}; var prepareFeedback = function () {}; // BUTTONS var isStrongestStored = function () { var data = ctx.metadataMgr.getPrivateData(); return !data.readOnly || !data.availableHashes.editHash; }; funcs.createButton = function (type, rightside, data, callback) { var button; var size = "17px"; switch (type) { case 'export': button = $('