mirror of
https://github.com/cryptpad/cryptpad.git
synced 2026-09-14 11:05:41 +05:00
Add new admin page
This commit is contained in:
parent
6b1e8ff1f6
commit
6f3fb50745
@ -26,7 +26,7 @@ define(['/customize/application_config.js'], function (AppConfig) {
|
||||
MAX_PREMIUM_TEAMS_SLOTS: Math.max(AppConfig.maxTeamsSlots || 0, AppConfig.maxPremiumTeamsSlots || 0) || 5,
|
||||
MAX_PREMIUM_TEAMS_OWNED: Math.max(AppConfig.maxTeamsOwned || 0, AppConfig.maxPremiumTeamsOwned || 0) || 5,
|
||||
// Apps
|
||||
criticalApps: ['profile', 'settings', 'debug', 'admin', 'support', 'notifications', 'calendar'],
|
||||
criticalApps: ['profile', 'settings', 'debug', 'admin', 'support', 'notifications', 'calendar', 'newadmin'], // XXX
|
||||
earlyAccessApps: ['doc', 'presentation']
|
||||
};
|
||||
});
|
||||
|
||||
@ -24,7 +24,9 @@ define([
|
||||
const Sidebar = {};
|
||||
|
||||
|
||||
Sidebar.create = function (common, app, $leftside, $rightside) {
|
||||
Sidebar.create = function (common, app, $container) {
|
||||
const $leftside = $(h('div#cp-sidebarlayout-leftside')).appendTo($container);
|
||||
const $rightside = $(h('div#cp-sidebarlayout-rightside')).appendTo($container);
|
||||
const sidebar = {};
|
||||
const items = {};
|
||||
|
||||
|
||||
23
www/newadmin/app-admin.less
Normal file
23
www/newadmin/app-admin.less
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
@import (reference) '../../customize/src/less2/include/sidebar-layout.less';
|
||||
@import (reference) "../../customize/src/less2/include/limit-bar.less";
|
||||
@import (reference) "../../customize/src/less2/include/creation.less";
|
||||
@import (reference) '../../customize/src/less2/include/framework.less';
|
||||
@import (reference) '../../customize/src/less2/include/export.less';
|
||||
|
||||
&.cp-app-admin {
|
||||
.framework_min_main();
|
||||
.sidebar-layout_main();
|
||||
.limit-bar_main();
|
||||
.creation_main();
|
||||
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
font: @colortheme_app-font;
|
||||
}
|
||||
|
||||
21
www/newadmin/index.html
Normal file
21
www/newadmin/index.html
Normal file
@ -0,0 +1,21 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>CryptPad</title>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="referrer" content="no-referrer" />
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/components/requirejs/require.js?ver=2.3.5"></script>
|
||||
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<noscript></noscript>
|
||||
<iframe-placeholder>
|
||||
22
www/newadmin/inner.html
Normal file
22
www/newadmin/inner.html
Normal file
@ -0,0 +1,22 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="cp-app-noscroll">
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="/newadmin/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/components/requirejs/require.js?ver=2.3.5"></script>
|
||||
<style>
|
||||
.loading-hidden { display: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="cp-app-admin">
|
||||
<div id="cp-toolbar" class="cp-toolbar-container"></div>
|
||||
<div id="cp-sidebarlayout-container"></div>
|
||||
</body>
|
||||
</html>
|
||||
123
www/newadmin/inner.js
Normal file
123
www/newadmin/inner.js
Normal file
@ -0,0 +1,123 @@
|
||||
// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
define([
|
||||
'jquery',
|
||||
'/common/toolbar.js',
|
||||
'/components/nthen/index.js',
|
||||
'/common/sframe-common.js',
|
||||
'/common/common-interface.js',
|
||||
'/common/common-ui-elements.js',
|
||||
'/common/common-util.js',
|
||||
'/common/common-hash.js',
|
||||
'/common/inner/sidebar-layout.js',
|
||||
'/customize/messages.js',
|
||||
'/common/hyperscript.js',
|
||||
'/customize/application_config.js',
|
||||
'/api/config',
|
||||
|
||||
'css!/components/bootstrap/dist/css/bootstrap.min.css',
|
||||
'css!/components/components-font-awesome/css/font-awesome.min.css',
|
||||
'less!/newadmin/app-admin.less',
|
||||
], function(
|
||||
$,
|
||||
Toolbar,
|
||||
nThen,
|
||||
SFCommon,
|
||||
UI,
|
||||
UIElements,
|
||||
Util,
|
||||
Hash,
|
||||
Sidebar,
|
||||
Messages,
|
||||
h,
|
||||
AppConfig,
|
||||
ApiConfig,
|
||||
) {
|
||||
var APP = window.APP = {};
|
||||
|
||||
var common;
|
||||
var metadataMgr;
|
||||
var privateData;
|
||||
var sframeChan;
|
||||
|
||||
var andThen = function (common, $container) {
|
||||
const sidebar = Sidebar.create(common, 'sidebar', $container);
|
||||
var categories = {
|
||||
'users': {
|
||||
icon: 'fa fa-users',
|
||||
content: [
|
||||
'invitations',
|
||||
'directory'
|
||||
]
|
||||
},
|
||||
'test': {
|
||||
icon: 'fa fa-bell',
|
||||
content: [
|
||||
]
|
||||
},
|
||||
'click': {
|
||||
icon: 'fa fa-file',
|
||||
onClick: () => {
|
||||
common.openUnsafeURL('https://cryptpad.fr');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const blocks = sidebar.blocks;
|
||||
sidebar.addItem('invitations', function (cb) {
|
||||
var input = h('input', {type:'number'});
|
||||
var label = blocks.labelledInput('Test Input label', input);
|
||||
var button = blocks.button('secondary', 'fa-question', "My Button text");
|
||||
var content = blocks.form(label, blocks.nav(button));
|
||||
cb(content);
|
||||
});
|
||||
|
||||
sidebar.makeLeftside(categories);
|
||||
};
|
||||
|
||||
|
||||
var createToolbar = function () {
|
||||
var displayed = ['useradmin', 'newpad', 'limit', 'pageTitle', 'notifications'];
|
||||
var configTb = {
|
||||
displayed: displayed,
|
||||
sfCommon: common,
|
||||
$container: APP.$toolbar,
|
||||
pageTitle: Messages.adminPage || 'Admin',
|
||||
metadataMgr: common.getMetadataMgr(),
|
||||
};
|
||||
APP.toolbar = Toolbar.create(configTb);
|
||||
APP.toolbar.$rightside.hide();
|
||||
};
|
||||
|
||||
nThen(function(waitFor) {
|
||||
$(waitFor(UI.addLoadingScreen));
|
||||
SFCommon.create(waitFor(function(c) { APP.common = common = c; }));
|
||||
}).nThen(function(waitFor) {
|
||||
APP.$container = $('#cp-sidebarlayout-container');
|
||||
APP.$toolbar = $('#cp-toolbar');
|
||||
sframeChan = common.getSframeChannel();
|
||||
sframeChan.onReady(waitFor());
|
||||
}).nThen(function (waitFor) {
|
||||
if (!common.isAdmin()) { return; }
|
||||
//updateStatus(waitFor()); // TODO re-add this
|
||||
}).nThen(function( /*waitFor*/ ) {
|
||||
metadataMgr = common.getMetadataMgr();
|
||||
privateData = metadataMgr.getPrivateData();
|
||||
common.setTabTitle(Messages.adminPage || 'Administration');
|
||||
|
||||
if (!common.isAdmin()) {
|
||||
return void UI.errorLoadingScreen(Messages.admin_authError || '403 Forbidden');
|
||||
}
|
||||
|
||||
// Add toolbar
|
||||
createToolbar();
|
||||
|
||||
// Content
|
||||
andThen(common, APP.$container);
|
||||
|
||||
common.setTabTitle(Messages.settings_title);
|
||||
UI.removeLoadingScreen();
|
||||
});
|
||||
});
|
||||
47
www/newadmin/main.js
Normal file
47
www/newadmin/main.js
Normal file
@ -0,0 +1,47 @@
|
||||
// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
// Load #1, load as little as possible because we are in a race to get the loading screen up.
|
||||
define([
|
||||
'/components/nthen/index.js',
|
||||
'/api/config',
|
||||
'/common/dom-ready.js',
|
||||
'/common/sframe-common-outer.js'
|
||||
], function (nThen, ApiConfig, DomReady, SFCommonO) {
|
||||
|
||||
// Loaded in load #2
|
||||
nThen(function (waitFor) {
|
||||
DomReady.onReady(waitFor());
|
||||
}).nThen(function (waitFor) {
|
||||
SFCommonO.initIframe(waitFor);
|
||||
}).nThen(function (/*waitFor*/) {
|
||||
var addRpc = function (sframeChan, Cryptpad/*, Utils*/) {
|
||||
// Adding a new avatar from the profile: pin it and store it in the object
|
||||
sframeChan.on('Q_ADMIN_MAILBOX', function (data, cb) {
|
||||
Cryptpad.addAdminMailbox(data, cb);
|
||||
});
|
||||
sframeChan.on('Q_ADMIN_RPC', function (data, cb) {
|
||||
Cryptpad.adminRpc(data, cb);
|
||||
});
|
||||
sframeChan.on('Q_UPDATE_LIMIT', function (data, cb) {
|
||||
Cryptpad.updatePinLimit(function (e) {
|
||||
cb({error: e});
|
||||
});
|
||||
});
|
||||
};
|
||||
var category;
|
||||
if (window.location.hash) {
|
||||
category = window.location.hash.slice(1);
|
||||
window.location.hash = '';
|
||||
}
|
||||
var addData = function (obj, Cryptpad, user, Utils) {
|
||||
if (category) { obj.category = category; }
|
||||
};
|
||||
SFCommonO.start({
|
||||
noRealtime: true,
|
||||
addRpc: addRpc,
|
||||
addData: addData
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -42,8 +42,8 @@ define([
|
||||
var privateData;
|
||||
var sframeChan;
|
||||
|
||||
var andThen = function (common, $leftside, $rightside) {
|
||||
const sidebar = Sidebar.create(common, 'sidebar', $leftside, $rightside);
|
||||
var andThen = function (common, $container) {
|
||||
const sidebar = Sidebar.create(common, 'sidebar', $container);
|
||||
var categories = {
|
||||
'users': {
|
||||
icon: 'fa fa-users',
|
||||
@ -84,8 +84,6 @@ define([
|
||||
}).nThen(function(waitFor) {
|
||||
APP.$container = $('#cp-sidebarlayout-container');
|
||||
APP.$toolbar = $('#cp-toolbar');
|
||||
APP.$leftside = $('<div>', { id: 'cp-sidebarlayout-leftside' }).appendTo(APP.$container);
|
||||
APP.$rightside = $('<div>', { id: 'cp-sidebarlayout-rightside' }).appendTo(APP.$container);
|
||||
sframeChan = common.getSframeChannel();
|
||||
sframeChan.onReady(waitFor());
|
||||
}).nThen(function( /*waitFor*/ ) {
|
||||
@ -103,27 +101,9 @@ define([
|
||||
};
|
||||
APP.toolbar = Toolbar.create(configTb);
|
||||
APP.toolbar.$rightside.hide();
|
||||
APP.history = common.makeUniversal('history');
|
||||
|
||||
// Content
|
||||
var $rightside = APP.$rightside;
|
||||
/*
|
||||
var addItem = function(cssClass) {
|
||||
var item = cssClass.slice(12); // remove 'cp-settings-'
|
||||
if (typeof(create[item]) === "function") {
|
||||
$rightside.append(create[item]());
|
||||
}
|
||||
};
|
||||
for (var cat in categories) {
|
||||
if (!Array.isArray(categories[cat])) { continue; }
|
||||
categories[cat].forEach(addItem);
|
||||
}
|
||||
|
||||
|
||||
createLeftside();
|
||||
createUsageButton();
|
||||
*/
|
||||
andThen(common, APP.$leftside, APP.$rightside);
|
||||
andThen(common, APP.$container);
|
||||
|
||||
common.setTabTitle(Messages.settings_title);
|
||||
UI.removeLoadingScreen();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user