aboutsummaryrefslogtreecommitdiffstats
path: root/trunk
diff options
context:
space:
mode:
Diffstat (limited to 'trunk')
-rw-r--r--trunk/README.hooks24
-rw-r--r--trunk/etherpad/src/etherpad/admin/plugins.js247
-rw-r--r--trunk/etherpad/src/etherpad/control/admin/pluginmanager.js65
-rw-r--r--trunk/etherpad/src/plugins/kafoo/main.js16
-rw-r--r--trunk/etherpad/src/plugins/testplugin/controllers/testplugin.js57
-rw-r--r--trunk/etherpad/src/plugins/testplugin/hooks.js15
-rw-r--r--trunk/etherpad/src/plugins/testplugin/main.js23
-rw-r--r--trunk/etherpad/src/plugins/testplugin/static/js/main.js11
-rw-r--r--trunk/etherpad/src/plugins/testplugin/static/js/test.js1
-rw-r--r--trunk/etherpad/src/plugins/testplugin/templates/testplugin.ejs29
-rw-r--r--trunk/etherpad/src/static/js/plugins.js19
-rw-r--r--trunk/etherpad/src/templates/admin/pluginmanager.ejs126
12 files changed, 0 insertions, 633 deletions
diff --git a/trunk/README.hooks b/trunk/README.hooks
deleted file mode 100644
index d15949c..0000000
--- a/trunk/README.hooks
+++ /dev/null
@@ -1,24 +0,0 @@
-Hooks that plugins can provide
-
-All hooks must return either undefined/null or a list of return values. This might be an empty list or a list of just one value.
-
-handlePath
- Registers new urls to serve
- Parameters: None
- Returns: Parameter suitable for Dispatcher
-renderPageBodyPre
- Adds extra html before the body of a page
- Parameters: bodyFileName, data, plugin
- Returns: String(s) of html
-renderPageBodyPost
- Adds extra html after the body of a page
- Parameters: bodyFileName, data, plugin
- Returns: String(s) of html
-serverStartup
- Run right after server startup
- Parameters: None
- Returns: None
-serverShutdown
- Run before server shutdown
- Parameters: None
- Returns: None
diff --git a/trunk/etherpad/src/etherpad/admin/plugins.js b/trunk/etherpad/src/etherpad/admin/plugins.js
deleted file mode 100644
index 41482fc..0000000
--- a/trunk/etherpad/src/etherpad/admin/plugins.js
+++ /dev/null
@@ -1,247 +0,0 @@
-/**
- * Copyright 2009 RedHog, Egil Möller <egil.moller@piratpartiet.se>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import("faststatic");
-import("dispatch.{Dispatcher,PrefixMatcher,forward}");
-
-import("etherpad.utils.*");
-import("etherpad.collab.server_utils");
-import("etherpad.globals.*");
-import("etherpad.log");
-import("etherpad.pad.padusers");
-import("etherpad.pro.pro_utils");
-import("etherpad.helpers");
-import("etherpad.pro.pro_accounts.getSessionProAccount");
-import("sqlbase.sqlbase");
-import("sqlbase.sqlcommon");
-import("sqlbase.sqlobj");
-import("exceptionutils");
-import("execution");
-
-jimport("java.io.File",
- "java.io.DataInputStream",
- "java.io.FileInputStream",
- "java.lang.Byte",
- "java.io.FileReader",
- "java.io.BufferedReader",
- "net.appjet.oui.JarVirtualFile");
-
-pluginsLoaded = false;
-pluginModules = {};
-plugins = {};
-hooks = {};
-clientHooks = {};
-
-function loadAvailablePlugin(pluginName) {
- if (plugins[pluginName] != undefined)
- return plugins[pluginName];
-
- var pluginsDir = new Packages.java.io.File("src/plugins");
-
- var pluginFile = new Packages.java.io.File(pluginsDir, pluginName + '/main.js');
- if (pluginFile.exists()) {
- var pluginModulePath = pluginFile.getPath().replace(new RegExp("src/\(.*\)\.js"), "$1").replace("/", ".", "g");
- var importStmt = "import('" + pluginModulePath + "')";
- try {
- var res = execution.fancyAssEval(importStmt, "main;");
- res = new res.init();
- return res;
- } catch (e) {
- log.info({errorLoadingPlugin:exceptionutils.getStackTracePlain(e)});
- }
- }
- return null;
-}
-
-function loadAvailablePlugins() {
- var pluginsDir = new Packages.java.io.File("src/plugins");
-
- var pluginNames = pluginsDir.list();
-
- for (i = 0; i < pluginNames.length; i++) {
- var plugin = loadAvailablePlugin(pluginNames[i]);
- if (plugin != null)
- pluginModules[pluginNames[i]] = plugin
- }
-}
-
-function loadPluginHooks(pluginName) {
- function registerHookNames(hookSet, type) {
- return function (hook) {
- var row = {hook:hook, type:type, plugin:pluginName};
- if (hookSet[hook] == undefined) hookSet[hook] = [];
- hookSet[hook].push(row);
- return row;
- }
- }
- plugins[pluginName] = pluginModules[pluginName].hooks.map(registerHookNames(hooks, 'server'));
- if (pluginModules[pluginName].client != undefined && pluginModules[pluginName].client.hooks != undefined)
- plugins[pluginName] = plugins[pluginName].concat(pluginModules[pluginName].client.hooks.map(registerHookNames(clientHooks, 'client')));
-}
-
-function unloadPluginHooks(pluginName) {
- for (var hookSet in [hooks, clientHooks])
- for (var hookName in hookSet) {
- var hook = hookSet[hookName];
- for (i = hook.length - 1; i >= 0; i--)
- if (hook[i].plugin == pluginName)
- hook.splice(i, 1);
- }
- delete plugins[pluginName];
-}
-
-function loadInstalledHooks() {
- var sql = '' +
- 'select ' +
- ' hook.name as hook, ' +
- ' hook_type.name as type, ' +
- ' plugin.name as plugin, ' +
- ' plugin_hook.original_name as original ' +
- 'from ' +
- ' plugin ' +
- ' left outer join plugin_hook on ' +
- ' plugin.id = plugin_hook.plugin_id ' +
- ' left outer join hook on ' +
- ' plugin_hook.hook_id = hook.id ' +
- ' left outer join hook_type on ' +
- ' hook.type_id = hook_type.id ' +
- 'order by hook.name, plugin.name';
-
- var rows = sqlobj.executeRaw(sql, {});
- for (var i = 0; i < rows.length; i++) {
- var row = rows[i];
-
- if (plugins[row.plugin] == undefined)
- plugins[row.plugin] = [];
- plugins[row.plugin].push(row);
-
- var hookSet;
-
- if (row.type == 'server')
- hookSet = hooks;
- else if (row.type == 'client')
- hookSet = clientHooks;
-
- if (hookSet[row.hook] == undefined)
- hookSet[row.hook] = [];
- if (row.hook != 'null')
- hookSet[row.hook].push(row);
- }
-}
-
-function selectOrInsert(table, columns) {
- var res = sqlobj.selectSingle(table, columns);
- if (res !== null)
- return res;
- sqlobj.insert(table, columns);
- return sqlobj.selectSingle(table, columns);
-}
-
-function saveInstalledHooks(pluginName) {
- var plugin = sqlobj.selectSingle('plugin', {name:pluginName});
-
- if (plugin !== null) {
- sqlobj.deleteRows('plugin_hook', {plugin_id:plugin.id});
- if (plugins[pluginName] === undefined)
- sqlobj.deleteRows('plugin', {name:pluginName});
- }
-
- if (plugins[pluginName] !== undefined) {
- if (plugin === null)
- plugin = selectOrInsert('plugin', {name:pluginName});
-
- for (var i = 0; i < plugins[pluginName].length; i++) {
- var row = plugins[pluginName][i];
-
- var hook_type = selectOrInsert('hook_type', {name:row.type});
- var hook = selectOrInsert('hook', {name:row.hook, type_id:hook_type.id});
-
- sqlobj.insert("plugin_hook", {plugin_id:plugin.id, hook_id:hook.id});
- }
- }
-}
-
-
-function loadPlugins() {
- if (pluginsLoaded) return;
- pluginsLoaded = true;
- loadAvailablePlugins();
- loadInstalledHooks();
-}
-
-
-/* User API */
-function enablePlugin(pluginName) {
- loadPlugins();
- loadPluginHooks(pluginName);
- saveInstalledHooks(pluginName);
- try {
- pluginModules[pluginName].install();
- } catch (e) {
- unloadPluginHooks(pluginName);
- saveInstalledHooks(pluginName);
- throw e;
- }
- log.info({PLUGINS:plugins, HOOKS:hooks});
-}
-
-function disablePlugin(pluginName) {
- loadPlugins();
- try {
- pluginModules[pluginName].uninstall();
- } catch (e) {
- log.info({errorUninstallingPlugin:exceptionutils.getStackTracePlain(e)});
- }
- unloadPluginHooks(pluginName);
- saveInstalledHooks(pluginName);
- log.info({PLUGINS:plugins, HOOKS:hooks});
-}
-
-function registerClientHandlerJS() {
- loadPlugins();
- for (pluginName in plugins) {
- var plugin = pluginModules[pluginName];
- if (plugin.client !== undefined) {
- helpers.includeJs("plugins/" + pluginName + "/main.js");
- if (plugin.client.modules != undefined)
- for (j = 0; j < client.modules.length; j++)
- helpers.includeJs("plugins/" + pluginName + "/" + plugin.client.modules[j] + ".js");
- }
- }
- helpers.addClientVars({hooks:clientHooks});
- helpers.includeJs("plugins.js");
-}
-
-function callHook(hookName, args) {
- loadPlugins();
- if (hooks[hookName] === undefined)
- return [];
- var res = [];
- for (i = 0; i < hooks[hookName].length; i++) {
- var plugin = hooks[hookName][i];
- var pluginRes = pluginModules[plugin.plugin][plugin.original || hookName](args);
- if (pluginRes != undefined && pluginRes != null)
- res = res.concat(pluginRes);
- }
- return res;
-}
-
-function callHookStr(hookName, args, sep, pre, post) {
- if (sep == undefined) sep = '';
- if (pre == undefined) pre = '';
- if (post == undefined) post = '';
- return callHook(hookName, args).map(function (x) { return pre + x + post}).join(sep || "");
-}
diff --git a/trunk/etherpad/src/etherpad/control/admin/pluginmanager.js b/trunk/etherpad/src/etherpad/control/admin/pluginmanager.js
deleted file mode 100644
index 3fb017c..0000000
--- a/trunk/etherpad/src/etherpad/control/admin/pluginmanager.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright 2009 RedHog, Egil Möller <egil.moller@piratpartiet.se>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import("faststatic");
-import("dispatch.{Dispatcher,PrefixMatcher,forward}");
-
-import("etherpad.utils.*");
-import("etherpad.collab.server_utils");
-import("etherpad.globals.*");
-import("etherpad.log");
-import("etherpad.pad.padusers");
-import("etherpad.pro.pro_utils");
-import("etherpad.helpers");
-import("etherpad.pro.pro_accounts.getSessionProAccount");
-import("etherpad.admin.plugins");
-
-
-function onRequest() {
- plugins.loadPlugins();
-
- if (request.params.action == 'install') {
- plugins.enablePlugin(request.params.plugin);
- } else if (request.params.action == 'uninstall') {
- plugins.disablePlugin(request.params.plugin);
- } else if (request.params.action == 'reinstall') {
- plugins.disablePlugin(request.params.plugin);
- plugins.enablePlugin(request.params.plugin);
- }
-
- helpers.addClientVars({
- userAgent: request.headers["User-Agent"],
- debugEnabled: request.params.djs,
- clientIp: request.clientAddr,
- colorPalette: COLOR_PALETTE,
- serverTimestamp: +(new Date),
- isProPad: pro_utils.isProDomainRequest(),
- userIsGuest: padusers.isGuest(padusers.getUserId()),
- userId: padusers.getUserId(),
- });
-
- renderHtml("admin/pluginmanager.ejs",
- {
- pluginModules: plugins.pluginModules,
- plugins: plugins.plugins,
- config: appjet.config,
- bodyClass: 'nonpropad',
- isPro: pro_utils.isProDomainRequest(),
- isProAccountHolder: pro_utils.isProDomainRequest() && ! padusers.isGuest(padusers.getUserId()),
- account: getSessionProAccount(), // may be falsy
- });
- return true;
-}
diff --git a/trunk/etherpad/src/plugins/kafoo/main.js b/trunk/etherpad/src/plugins/kafoo/main.js
deleted file mode 100644
index f645576..0000000
--- a/trunk/etherpad/src/plugins/kafoo/main.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import("etherpad.log");
-
-function init() {
- this.hooks = [];
- this.description = 'KaBar plugin';
- this.install = install;
- this.uninstall = uninstall;
-}
-
-function install() {
- log.info("Installing testplugin");
-}
-
-function uninstall() {
- log.info("Uninstalling testplugin");
-}
diff --git a/trunk/etherpad/src/plugins/testplugin/controllers/testplugin.js b/trunk/etherpad/src/plugins/testplugin/controllers/testplugin.js
deleted file mode 100644
index 0c79e06..0000000
--- a/trunk/etherpad/src/plugins/testplugin/controllers/testplugin.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Copyright 2009 RedHog, Egil Möller <egil.moller@piratpartiet.se>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS-IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import("faststatic");
-import("dispatch.{Dispatcher,PrefixMatcher,forward}");
-
-import("etherpad.utils.*");
-import("etherpad.collab.server_utils");
-import("etherpad.globals.*");
-import("etherpad.log");
-import("etherpad.pad.padusers");
-import("etherpad.pro.pro_utils");
-import("etherpad.helpers");
-import("etherpad.pro.pro_accounts.getSessionProAccount");
-import("sqlbase.sqlbase");
-import("sqlbase.sqlcommon");
-import("sqlbase.sqlobj");
-
-
-function onRequest() {
- var isPro = pro_utils.isProDomainRequest();
- var userId = padusers.getUserId();
-
- helpers.addClientVars({
- userAgent: request.headers["User-Agent"],
- debugEnabled: request.params.djs,
- clientIp: request.clientAddr,
- colorPalette: COLOR_PALETTE,
- serverTimestamp: +(new Date),
- isProPad: isPro,
- userIsGuest: padusers.isGuest(userId),
- userId: userId,
- });
-
- var isProUser = (isPro && ! padusers.isGuest(userId));
-
- renderHtml("testplugin.ejs",
- {
- isPro: isPro,
- isProAccountHolder: isProUser,
- account: getSessionProAccount(), // may be falsy
- }, 'testplugin');
- return true;
-}
diff --git a/trunk/etherpad/src/plugins/testplugin/hooks.js b/trunk/etherpad/src/plugins/testplugin/hooks.js
deleted file mode 100644
index 493a2c2..0000000
--- a/trunk/etherpad/src/plugins/testplugin/hooks.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import("etherpad.log");
-import("dispatch.{Dispatcher,PrefixMatcher,forward}");
-import("plugins.testplugin.controllers.testplugin");
-
-function serverStartup() {
- log.info("Server startup for testplugin");
-}
-
-function serverShutdown() {
- log.info("Server shutdown for testplugin");
-}
-
-function handlePath() {
- return [[PrefixMatcher('/ep/testplugin/'), forward(testplugin)]];
-}
diff --git a/trunk/etherpad/src/plugins/testplugin/main.js b/trunk/etherpad/src/plugins/testplugin/main.js
deleted file mode 100644
index 49b447c..0000000
--- a/trunk/etherpad/src/plugins/testplugin/main.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import("etherpad.log");
-import("plugins.testplugin.hooks");
-import("plugins.testplugin.static.js.main");
-
-function init() {
- this.hooks = ['serverStartup', 'serverShutdown', 'handlePath'];
- this.client = new main.init();
- this.description = 'Test Plugin';
- this.serverStartup = hooks.serverStartup;
- this.serverShutdown = hooks.serverShutdown;
- this.handlePath = hooks.handlePath;
- this.install = install;
- this.uninstall = uninstall;
-}
-
-function install() {
- log.info("Installing testplugin");
-}
-
-function uninstall() {
- log.info("Uninstalling testplugin");
-}
-
diff --git a/trunk/etherpad/src/plugins/testplugin/static/js/main.js b/trunk/etherpad/src/plugins/testplugin/static/js/main.js
deleted file mode 100644
index f08b8f7..0000000
--- a/trunk/etherpad/src/plugins/testplugin/static/js/main.js
+++ /dev/null
@@ -1,11 +0,0 @@
-function init() {
- this.hooks = ['kafoo'];
- this.kafoo = kafoo;
-}
-
-function kafoo() {
- alert('hej');
-}
-
-/* used on the client side only */
-testplugin = new init();
diff --git a/trunk/etherpad/src/plugins/testplugin/static/js/test.js b/trunk/etherpad/src/plugins/testplugin/static/js/test.js
deleted file mode 100644
index 0f30cd9..0000000
--- a/trunk/etherpad/src/plugins/testplugin/static/js/test.js
+++ /dev/null
@@ -1 +0,0 @@
-callHook("kafoo");
diff --git a/trunk/etherpad/src/plugins/testplugin/templates/testplugin.ejs b/trunk/etherpad/src/plugins/testplugin/templates/testplugin.ejs
deleted file mode 100644
index f70ca8d..0000000
--- a/trunk/etherpad/src/plugins/testplugin/templates/testplugin.ejs
+++ /dev/null
@@ -1,29 +0,0 @@
-<% /* Copyright 2009 Google Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS-IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License. */ %>
-<%
- helpers.setHtmlTitle("Test plugin");
- helpers.setBodyId("padbody");
- helpers.addBodyClass("limwidth nonpropad nonprouser");
- helpers.includeCss("pad2_ejs.css");
- helpers.setRobotsPolicy({index: false, follow: false})
- helpers.includeJQuery();
- helpers.includeCometJs();
- helpers.includeJs("json2.js");
- helpers.includeJs("plugins/testplugin/test.js");
- helpers.addToHead('\n<style type="text/css" title="dynamicsyntax"></style>\n');
-%>
-
-<div id="padpage">
- Welcome to the test plugin
-</div>
diff --git a/trunk/etherpad/src/static/js/plugins.js b/trunk/etherpad/src/static/js/plugins.js
deleted file mode 100644
index 6d8804e..0000000
--- a/trunk/etherpad/src/static/js/plugins.js
+++ /dev/null
@@ -1,19 +0,0 @@
-function callHook(hookName, args) {
- if (clientVars.hooks[hookName] === undefined)
- return [];
- var res = [];
- for (i = 0; i < clientVars.hooks[hookName].length; i++) {
- var plugin = clientVars.hooks[hookName][i];
- var pluginRes = eval(plugin.plugin)[plugin.original || hookName](args);
- if (pluginRes != undefined && pluginRes != null)
- res = res.concat(pluginRes);
- }
- return res;
-}
-
-function callHookStr(hookName, args, sep, pre, post) {
- if (sep == undefined) sep = '';
- if (pre == undefined) pre = '';
- if (post == undefined) post = '';
- return callHook(hookName, args).map(function (x) { return pre + x + post}).join(sep || "");
-}
diff --git a/trunk/etherpad/src/templates/admin/pluginmanager.ejs b/trunk/etherpad/src/templates/admin/pluginmanager.ejs
deleted file mode 100644
index 4e08fc9..0000000
--- a/trunk/etherpad/src/templates/admin/pluginmanager.ejs
+++ /dev/null
@@ -1,126 +0,0 @@
-<% /* Copyright 2009 Google Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS-IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License. */ %>
-<%
- helpers.setHtmlTitle("Browse tags");
- helpers.setBodyId("padbody");
- helpers.addBodyClass("limwidth nonpropad nonprouser");
- helpers.includeCss("pad2_ejs.css");
- helpers.setRobotsPolicy({index: false, follow: false})
- helpers.includeJQuery();
- helpers.includeCometJs();
- helpers.includeJs("json2.js");
- helpers.addToHead('\n<style type="text/css" title="dynamicsyntax"></style>\n');
-
- function inArray(item, arr) {
- for (var i = 0; i < arr.length; i++)
- if (arr[i] == item)
- return true;
- return false;
- }
-%>
-
-<div id="padpage">
- <div id="padtop">
- <div id="topbar" style="margin: 7px; margin-top: 0px;">
- <div id="topbarleft"><!-- --></div>
- <div id="topbarright"><!-- --></div>
- <div id="topbarcenter"><a href="/" id="topbaretherpad">EtherPad</a></div>
- <% if (isProAccountHolder) { %>
- <div id="accountnav"><%= toHTML(account.email) %><a href="/ep/account/sign-out">(sign out)</a></div>
- <% } else if (isPro) { %>
- <div id="accountnav"><a href="<%= signinUrl %>">sign in</a></div>
- <% } %>
- </div>
- </div>
- <div id="docbar" class="docbar-public">
- <div id="docbarleft"><!-- --></div>
- <div title="Browse pads by tag" id="docbarpadtitle"><span>Browse tags</span></div>
-
- <div id="docbaroptions-outer"><a href="javascript:void(0)" id="docbaroptions">Pad Options</a></div>
- <div id="docbarsavedrevs-outer"><a href="javascript:void(0)" id="docbarsavedrevs">Saved revisions</a></div>
- <div id="docbarimpexp-outer"><a href="javascript:void(0)" id="docbarimpexp">Import/Export</a></div>
- <div id="docbarslider-outer"><a target="_blank" href="/ep/pad/view/xx/latest" id="docbarslider">Time Slider</a></div>
-
- </div>
- </div>
- <div id="padmain">
-
- <div id="padsidebar">
- <div id="padusers">
- </div>
-
- <div id="hdraggie"><!-- --></div>
-
- <div id="padchat"></div>
- </div> <!-- /padsidebar -->
-
- <div id="padeditor">
- <div id="editbar" class="enabledtoolbar">
- <div id="editbarleft"><!-- --></div>
- <div id="editbarright"><!-- --></div>
-
- <div id="editbarinner">
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('bold'));" class="editbarbutton bold" title="Bold (ctrl-B)">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('italic'));" class="editbarbutton italic" title="Italics (ctrl-I)">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('underline'));" class="editbarbutton underline" title="Underline (ctrl-U)">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('strikethrough'));" class="editbarbutton strikethrough" title="Strikethrough">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('clearauthorship'));" class="editbarbutton clearauthorship" title="Clear Authorship Colors">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('undo'));" class="editbarbutton undo" title="Undo (ctrl-Z)">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('redo'));" class="editbarbutton redo" title="Redo (ctrl-Y)">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('insertunorderedlist'));" class="editbarbutton insertunorderedlist" title="Toggle Bullet List">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('indent'));" class="editbarbutton indent" title="Indent List">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('outdent'));" class="editbarbutton outdent" title="Unindent List">&nbsp;</a>
- <a unselectable="on" href="javascript:void (window.pad&amp;&amp;pad.editbarClick('save'));" class="editbarbutton save" title="Save Revision">&nbsp;</a>
- </div>
- </div>
- <div style="height: 268px;" id="editorcontainerbox">
- <div id="editorcontainer" style="padding:5pt; height: 600pt;">
- <h1>Plugin manager</h1>
- <table>
- <tr>
- <th>Module name</th>
- <th>Status</th>
- <th></th>
- </tr>
- <% for (var plugin in pluginModules) { %>
- <tr>
- <td><%= pluginModules[plugin].description %></td>
- <td>
- <% if (plugins[plugin] !== undefined) { %>
- Installed
- <% } else { %>
- Not installed
- <% } %>
- </td>
- <td>
- <% if (plugins[plugin] !== undefined) { %>
- <a href="/ep/admin/pluginmanager/?plugin=<%= plugin %>&action=uninstall">Uninstall</a>
- <a href="/ep/admin/pluginmanager/?plugin=<%= plugin %>&action=reinstall">Reinstall</a>
- <% } else { %>
- <a href="/ep/admin/pluginmanager/?plugin=<%= plugin %>&action=install">Install</a>
- <% } %>
- </td>
- </tr>
- <% } %>
- </table>
- </div>
- </div>
- </div><!-- /padeditor -->
-
- <div id="bottomarea">
- <div id="widthprefcheck" class="widthprefunchecked"><!-- --></div>
- <div id="sidebarcheck" class="sidebarchecked"><!-- --></div>
- </div>
- </div>
-</div>