").appendTo(e),s=e.uniqueId().attr("id");return this._addClass(i,"ui-tooltip-content"),this._addClass(e,"ui-tooltip","ui-widget ui-widget-content"),e.appendTo(this._appendTo(t)),this.tooltips[s]={element:t,tooltip:e}},_find:function(t){t=t.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){t=t.closest(".ui-front, dialog");return t=!t.length?this.document[0].body:t},_destroy:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur"),e=e.element;i.target=i.currentTarget=e[0],s.close(i,!0),V("#"+t).remove(),e.data("ui-tooltip-title")&&(e.attr("title")||e.attr("title",e.data("ui-tooltip-title")),e.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==V.uiBackCompat&&V.widget("ui.tooltip",V.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}});V.ui.tooltip});
diff --git a/public/javascripts/jstoolbar/common_mark.js b/public/javascripts/jstoolbar/common_mark.js
deleted file mode 100644
index f9e5ba7cd..000000000
--- a/public/javascripts/jstoolbar/common_mark.js
+++ /dev/null
@@ -1,234 +0,0 @@
-/**
- * This file is part of DotClear.
- * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All rights reserved.
- * This code is released under the GNU General Public License.
- *
- * Modified by JP LANG for common_mark formatting
- */
-
-// strong
-jsToolBar.prototype.elements.strong = {
- type: 'button',
- title: 'Strong',
- shortcut: 'b',
- fn: {
- wiki: function() { this.singleTag('**') }
- }
-}
-
-// em
-jsToolBar.prototype.elements.em = {
- type: 'button',
- title: 'Italic',
- shortcut: 'i',
- fn: {
- wiki: function() { this.singleTag("*") }
- }
-}
-
-// del
-jsToolBar.prototype.elements.del = {
- type: 'button',
- title: 'Deleted',
- fn: {
- wiki: function() { this.singleTag('~~') }
- }
-}
-
-// code
-jsToolBar.prototype.elements.code = {
- type: 'button',
- title: 'Code',
- fn: {
- wiki: function() { this.singleTag('`') }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space1 = {type: 'space'}
-
-// headings
-jsToolBar.prototype.elements.h1 = {
- type: 'button',
- title: 'Heading 1',
- fn: {
- wiki: function() {
- this.encloseLineSelection('# ', '',function(str) {
- str = str.replace(/^#+\s+/, '')
- return str;
- });
- }
- }
-}
-jsToolBar.prototype.elements.h2 = {
- type: 'button',
- title: 'Heading 2',
- fn: {
- wiki: function() {
- this.encloseLineSelection('## ', '',function(str) {
- str = str.replace(/^#+\s+/, '')
- return str;
- });
- }
- }
-}
-jsToolBar.prototype.elements.h3 = {
- type: 'button',
- title: 'Heading 3',
- fn: {
- wiki: function() {
- this.encloseLineSelection('### ', '',function(str) {
- str = str.replace(/^#+\s+/, '')
- return str;
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space2 = {type: 'space'}
-
-// ul
-jsToolBar.prototype.elements.ul = {
- type: 'button',
- title: 'Unordered list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[#-]?\s*/g,"$1* ");
- });
- }
- }
-}
-
-// ol
-jsToolBar.prototype.elements.ol = {
- type: 'button',
- title: 'Ordered list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[*-]?\s*/g,"$11. ");
- });
- }
- }
-}
-
-// tl
-jsToolBar.prototype.elements.tl = {
- type: 'button',
- title: 'Task list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[*-]?\s*/g,"$1* [ ] ");
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space3 = {type: 'space'}
-
-// bq
-jsToolBar.prototype.elements.bq = {
- type: 'button',
- title: 'Quote',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)( *)([^\n]*)/g,"$1> $2$3");
- });
- }
- }
-}
-
-// unbq
-jsToolBar.prototype.elements.unbq = {
- type: 'button',
- title: 'Unquote',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^) *(> ?)?( *)([^\n]*)/g,"$1$3$4");
- });
- }
- }
-}
-
-// table
-jsToolBar.prototype.elements.table = {
- type: 'button',
- title: 'Table',
- fn: {
- wiki: function() {
- var This = this;
- this.tableMenu(function(cols, rowCount){
- This.encloseLineSelection(
- '|'+cols.join(' |')+' |\n' + // header
- Array(cols.length+1).join('|--')+'|\n' + // second line
- Array(rowCount+1).join(Array(cols.length+1).join('| ')+'|\n') // cells
- );
- });
- }
- }
-}
-
-// pre
-jsToolBar.prototype.elements.pre = {
- type: 'button',
- title: 'Preformatted text',
- fn: {
- wiki: function() { this.encloseLineSelection('```\n', '\n```') }
- }
-}
-
-// Code highlighting
-jsToolBar.prototype.elements.precode = {
- type: 'button',
- title: 'Highlighted code',
- fn: {
- wiki: function() {
- var This = this;
- this.precodeMenu(function(lang){
- This.encloseLineSelection('``` ' + lang + '\n', '\n```\n');
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space4 = {type: 'space'}
-
-// wiki page
-jsToolBar.prototype.elements.link = {
- type: 'button',
- title: 'Wiki link',
- fn: {
- wiki: function() { this.encloseSelection("[[", "]]") }
- }
-}
-// image
-jsToolBar.prototype.elements.img = {
- type: 'button',
- title: 'Image',
- fn: {
- wiki: function() { this.encloseSelection("") }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space5 = {type: 'space'}
-// help
-jsToolBar.prototype.elements.help = {
- type: 'button',
- title: 'Help',
- fn: {
- wiki: function() { window.open(this.help_link, '', 'resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes') }
- }
-}
diff --git a/public/javascripts/jstoolbar/jstoolbar.js b/public/javascripts/jstoolbar/jstoolbar.js
deleted file mode 100644
index 3353a7581..000000000
--- a/public/javascripts/jstoolbar/jstoolbar.js
+++ /dev/null
@@ -1,569 +0,0 @@
-/**
- * This file is part of DotClear.
- * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All rights reserved.
- * This code is released under the GNU General Public License.
- *
- * Modified by JP LANG for multiple text formatting
- */
-
-let lastJstPreviewed = null;
-const isMac = Boolean(navigator.platform.toLowerCase().match(/mac/));
-
-function jsToolBar(textarea) {
- if (!document.createElement) { return; }
-
- if (!textarea) { return; }
-
- if ((typeof(document["selection"]) == "undefined")
- && (typeof(textarea["setSelectionRange"]) == "undefined")) {
- return;
- }
-
- this.textarea = textarea;
-
- this.toolbarBlock = document.createElement('div');
- this.toolbarBlock.className = 'jstBlock';
- this.textarea.parentNode.insertBefore(this.toolbarBlock, this.textarea);
-
- this.editor = document.createElement('div');
- this.editor.className = 'jstEditor';
-
- this.preview = document.createElement('div');
- this.preview.className = 'wiki wiki-preview hidden';
- this.preview.setAttribute('id', 'preview_' + textarea.getAttribute('id'));
-
- this.editor.appendChild(this.textarea);
- this.editor.appendChild(this.preview);
-
- this.tabsBlock = document.createElement('div');
- this.tabsBlock.className = 'jstTabs tabs';
-
- var This = this;
-
- this.textarea.onkeydown = function(event) { This.keyboardShortcuts.call(This, event); };
-
- this.editTab = new jsTab('Edit', true);
- this.editTab.onclick = function(event) { This.hidePreview.call(This, event); return false; };
-
- this.previewTab = new jsTab('Preview');
- this.previewTab.onclick = function(event) { This.showPreview.call(This, event); return false; };
-
- var elementsTab = document.createElement('li');
- elementsTab.classList = 'tab-elements';
-
- var tabs = document.createElement('ul');
- tabs.appendChild(this.editTab);
- tabs.appendChild(this.previewTab);
- tabs.appendChild(elementsTab);
- this.tabsBlock.appendChild(tabs);
-
- this.toolbar = document.createElement("div");
- this.toolbar.className = 'jstElements';
- elementsTab.appendChild(this.toolbar);
-
- this.toolbarBlock.appendChild(this.tabsBlock);
- this.toolbarBlock.appendChild(this.editor);
-
- // Dragable resizing
- if (this.editor.addEventListener && navigator.appVersion.match(/\bMSIE\b/))
- {
- this.handle = document.createElement('div');
- this.handle.className = 'jstHandle';
- var dragStart = this.resizeDragStart;
- var This = this;
- this.handle.addEventListener('mousedown',function(event) { dragStart.call(This,event); },false);
- // fix memory leak in Firefox (bug #241518)
- window.addEventListener('unload',function() {
- var del = This.handle.parentNode.removeChild(This.handle);
- delete(This.handle);
- },false);
-
- this.editor.parentNode.insertBefore(this.handle,this.editor.nextSibling);
- }
-
- this.context = null;
- this.toolNodes = {}; // lorsque la toolbar est dessinée , cet objet est garni
- // de raccourcis vers les éléments DOM correspondants aux outils.
-}
-
-function jsTab(name, selected) {
- selected = selected || false;
- if(typeof jsToolBar.strings == 'undefined') {
- var tabName = name || null;
- } else {
- var tabName = jsToolBar.strings[name] || name || null;
- }
-
- var tab = document.createElement('li');
- var link = document.createElement('a');
- link.setAttribute('href', '#');
- link.innerText = tabName;
- link.className = 'tab-' + name.toLowerCase();
-
- if (selected == true) {
- link.classList.add('selected');
- }
- tab.appendChild(link)
-
- return tab;
-}
-function jsButton(title, fn, scope, className) {
- if(typeof jsToolBar.strings == 'undefined') {
- this.title = title || null;
- } else {
- this.title = jsToolBar.strings[title] || title || null;
- }
- this.fn = fn || function(){};
- this.scope = scope || null;
- this.className = className || null;
-}
-jsButton.prototype.draw = function() {
- if (!this.scope) return null;
-
- var button = document.createElement('button');
- button.setAttribute('type','button');
- button.tabIndex = 200;
- if (this.className) button.className = this.className;
- button.title = this.title;
- var span = document.createElement('span');
- span.appendChild(document.createTextNode(this.title));
- button.appendChild(span);
-
- if (this.icon != undefined) {
- button.style.backgroundImage = 'url('+this.icon+')';
- }
-
- if (typeof(this.fn) == 'function') {
- var This = this;
- button.onclick = function() { try { This.fn.apply(This.scope, arguments) } catch (e) {} return false; };
- }
- return button;
-}
-
-function jsSpace(id) {
- this.id = id || null;
- this.width = null;
-}
-jsSpace.prototype.draw = function() {
- var span = document.createElement('span');
- if (this.id) span.id = this.id;
- span.appendChild(document.createTextNode(String.fromCharCode(160)));
- span.className = 'jstSpacer';
- if (this.width) span.style.marginRight = this.width+'px';
-
- return span;
-}
-
-function jsCombo(title, options, scope, fn, className) {
- this.title = title || null;
- this.options = options || null;
- this.scope = scope || null;
- this.fn = fn || function(){};
- this.className = className || null;
-}
-jsCombo.prototype.draw = function() {
- if (!this.scope || !this.options) return null;
-
- var select = document.createElement('select');
- if (this.className) select.className = className;
- select.title = this.title;
-
- for (var o in this.options) {
- //var opt = this.options[o];
- var option = document.createElement('option');
- option.value = o;
- option.appendChild(document.createTextNode(this.options[o]));
- select.appendChild(option);
- }
-
- var This = this;
- select.onchange = function() {
- try {
- This.fn.call(This.scope, this.value);
- } catch (e) { alert(e); }
-
- return false;
- }
-
- return select;
-}
-
-
-jsToolBar.prototype = {
- base_url: '',
- mode: 'wiki',
- elements: {},
- help_link: '',
- shortcuts: {},
-
- getMode: function() {
- return this.mode;
- },
-
- setMode: function(mode) {
- this.mode = mode || 'wiki';
- },
-
- switchMode: function(mode) {
- mode = mode || 'wiki';
- this.draw(mode);
- },
-
- setHelpLink: function(link) {
- this.help_link = link;
- },
-
- setPreviewUrl: function(url) {
- this.previewTab.firstChild.setAttribute('data-url', url);
- },
-
- button: function(toolName) {
- var tool = this.elements[toolName];
- if (typeof tool.fn[this.mode] != 'function') return null;
-
- const className = 'jstb_' + toolName;
- let title = tool.title
-
- if (tool.hasOwnProperty('shortcut')) {
- this.shortcuts[tool.shortcut] = className;
- title = this.buttonTitleWithShortcut(tool.title, tool.shortcut)
- }
-
- var b = new jsButton(title, tool.fn[this.mode], this, className);
- if (tool.icon != undefined) b.icon = tool.icon;
-
- return b;
- },
- buttonTitleWithShortcut: function(title, shortcutKey) {
- if(typeof jsToolBar.strings == 'undefined') {
- var i18nTitle = title || null;
- } else {
- var i18nTitle = jsToolBar.strings[title] || title || null;
- }
-
- if (isMac) {
- return i18nTitle + " (⌘" + shortcutKey.toUpperCase() + ")";
- } else {
- return i18nTitle + " (Ctrl+" + shortcutKey.toUpperCase() + ")";
- }
- },
- space: function(toolName) {
- var tool = new jsSpace(toolName)
- if (this.elements[toolName].width !== undefined)
- tool.width = this.elements[toolName].width;
- return tool;
- },
- combo: function(toolName) {
- var tool = this.elements[toolName];
- var length = tool[this.mode].list.length;
-
- if (typeof tool[this.mode].fn != 'function' || length == 0) {
- return null;
- } else {
- var options = {};
- for (var i=0; i < length; i++) {
- var opt = tool[this.mode].list[i];
- options[opt] = tool.options[opt];
- }
- return new jsCombo(tool.title, options, this, tool[this.mode].fn);
- }
- },
- draw: function(mode) {
- this.setMode(mode);
-
- // Empty toolbar
- while (this.toolbar.hasChildNodes()) {
- this.toolbar.removeChild(this.toolbar.firstChild)
- }
- this.toolNodes = {}; // vide les raccourcis DOM/**/
-
- // Draw toolbar elements
- var b, tool, newTool;
-
- for (var i in this.elements) {
- b = this.elements[i];
-
- var disabled =
- b.type == undefined || b.type == ''
- || (b.disabled != undefined && b.disabled)
- || (b.context != undefined && b.context != null && b.context != this.context);
-
- if (!disabled && typeof this[b.type] == 'function') {
- tool = this[b.type](i);
- if (tool) newTool = tool.draw();
- if (newTool) {
- this.toolNodes[i] = newTool; //mémorise l'accès DOM pour usage éventuel ultérieur
- this.toolbar.appendChild(newTool);
- }
- }
- }
- },
-
- singleTag: function(stag,etag) {
- stag = stag || null;
- etag = etag || stag;
-
- if (!stag || !etag) { return; }
-
- this.encloseSelection(stag,etag);
- },
-
- encloseLineSelection: function(prefix, suffix, fn) {
- this.textarea.focus();
-
- prefix = prefix || '';
- suffix = suffix || '';
-
- var start, end, sel, scrollPos, subst, res;
-
- if (typeof(document["selection"]) != "undefined") {
- sel = document.selection.createRange().text;
- } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
- start = this.textarea.selectionStart;
- end = this.textarea.selectionEnd;
- scrollPos = this.textarea.scrollTop;
- // go to the start of the line
- start = this.textarea.value.substring(0, start).replace(/[^\r\n]*$/g,'').length;
- // go to the end of the line
- end = this.textarea.value.length - this.textarea.value.substring(end, this.textarea.value.length).replace(/^[^\r\n]*/, '').length;
- sel = this.textarea.value.substring(start, end);
- }
-
- if (sel.match(/ $/)) { // exclude ending space char, if any
- sel = sel.substring(0, sel.length - 1);
- suffix = suffix + " ";
- }
-
- if (typeof(fn) == 'function') {
- res = (sel) ? fn.call(this,sel) : fn('');
- } else {
- res = (sel) ? sel : '';
- }
-
- subst = prefix + res + suffix;
-
- if (typeof(document["selection"]) != "undefined") {
- document.selection.createRange().text = subst;
- var range = this.textarea.createTextRange();
- range.collapse(false);
- range.move('character', -suffix.length);
- range.select();
- } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
- this.textarea.value = this.textarea.value.substring(0, start) + subst +
- this.textarea.value.substring(end);
- if (sel || (!prefix && start === end)) {
- this.textarea.setSelectionRange(start + subst.length, start + subst.length);
- } else {
- this.textarea.setSelectionRange(start + prefix.length, start + prefix.length);
- }
- this.textarea.scrollTop = scrollPos;
- }
- },
-
- encloseSelection: function(prefix, suffix, fn) {
- this.textarea.focus();
- prefix = prefix || '';
- suffix = suffix || '';
-
- var start, end, sel, scrollPos, subst, res;
-
- if (typeof(document["selection"]) != "undefined") {
- sel = document.selection.createRange().text;
- } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
- start = this.textarea.selectionStart;
- end = this.textarea.selectionEnd;
- scrollPos = this.textarea.scrollTop;
- sel = this.textarea.value.substring(start, end);
- if (start > 0 && this.textarea.value.substr(start-1, 1).match(/\S/)) {
- prefix = ' ' + prefix;
- }
- if (this.textarea.value.substr(end, 1).match(/\S/)) {
- suffix = suffix + ' ';
- }
- }
- if (sel.match(/ $/)) { // exclude ending space char, if any
- sel = sel.substring(0, sel.length - 1);
- suffix = suffix + " ";
- }
-
- if (typeof(fn) == 'function') {
- res = (sel) ? fn.call(this,sel) : fn('');
- } else {
- res = (sel) ? sel : '';
- }
-
- subst = prefix + res + suffix;
-
- if (typeof(document["selection"]) != "undefined") {
- document.selection.createRange().text = subst;
- var range = this.textarea.createTextRange();
- range.collapse(false);
- range.move('character', -suffix.length);
- range.select();
-// this.textarea.caretPos -= suffix.length;
- } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
- this.textarea.value = this.textarea.value.substring(0, start) + subst +
- this.textarea.value.substring(end);
- if (sel) {
- this.textarea.setSelectionRange(start + subst.length, start + subst.length);
- } else {
- this.textarea.setSelectionRange(start + prefix.length, start + prefix.length);
- }
- this.textarea.scrollTop = scrollPos;
- }
- },
- showPreview: function(event) {
- if (event.target.classList.contains('selected')) { return; }
- lastJstPreviewed = this.toolbarBlock;
- this.preview.setAttribute('style', 'min-height: ' + this.textarea.clientHeight + 'px;')
- this.toolbar.classList.add('hidden');
- this.textarea.classList.add('hidden');
- this.preview.classList.remove('hidden');
- this.tabsBlock.querySelector('.tab-edit').classList.remove('selected');
- event.target.classList.add('selected');
- },
- hidePreview: function(event) {
- if (event.target.classList.contains('selected')) { return; }
- this.toolbar.classList.remove('hidden');
- this.textarea.classList.remove('hidden');
- this.textarea.focus();
- this.preview.classList.add('hidden');
- this.tabsBlock.querySelector('.tab-preview').classList.remove('selected');
- event.target.classList.add('selected');
- },
- keyboardShortcuts: function(e) {
- let stop = false;
- if (isToogleEditPreviewShortcut(e)) {
- // Switch to preview only if Edit tab is selected when the event triggers.
- if (this.tabsBlock.querySelector('.tab-edit.selected')) {
- stop = true
- this.tabsBlock.querySelector('.tab-preview').click();
- }
- }
- if (isModifierKey(e) && this.shortcuts.hasOwnProperty(e.key.toLowerCase())) {
- stop = true
- this.toolbar.querySelector("." + this.shortcuts[e.key.toLowerCase()]).click();
- }
- if (stop) {
- e.stopPropagation();
- e.preventDefault();
- }
- },
- stripBaseURL: function(url) {
- if (this.base_url != '') {
- var pos = url.indexOf(this.base_url);
- if (pos == 0) {
- url = url.substr(this.base_url.length);
- }
- }
-
- return url;
- }
-};
-
-/** Resizer
--------------------------------------------------------- */
-jsToolBar.prototype.resizeSetStartH = function() {
- this.dragStartH = this.textarea.offsetHeight + 0;
-};
-jsToolBar.prototype.resizeDragStart = function(event) {
- var This = this;
- this.dragStartY = event.clientY;
- this.resizeSetStartH();
- document.addEventListener('mousemove', this.dragMoveHdlr=function(event){This.resizeDragMove(event);}, false);
- document.addEventListener('mouseup', this.dragStopHdlr=function(event){This.resizeDragStop(event);}, false);
-};
-
-jsToolBar.prototype.resizeDragMove = function(event) {
- this.textarea.style.height = (this.dragStartH+event.clientY-this.dragStartY)+'px';
-};
-
-jsToolBar.prototype.resizeDragStop = function(event) {
- document.removeEventListener('mousemove', this.dragMoveHdlr, false);
- document.removeEventListener('mouseup', this.dragStopHdlr, false);
-};
-
-/* Code highlighting menu */
-jsToolBar.prototype.precodeMenu = function(fn){
- var hlLanguages = window.userHlLanguages;
- var menu = $("
");
- for (var i = 0; i < hlLanguages.length; i++) {
- var langItem = $('
').text(hlLanguages[i]);
- $("
").html(langItem).appendTo(menu).mousedown(function(){
- fn($(this).text());
- });
- }
- $("body").append(menu);
- menu.menu().width(150).position({
- my: "left top",
- at: "left bottom",
- of: this.toolNodes['precode']
- });
- $(document).on("mousedown", function() {
- menu.remove();
- });
- return false;
-};
-
-/* Table generator */
-jsToolBar.prototype.tableMenu = function(fn){
- var alphabets = "ABCDEFGHIJ".split('');
- var menu = $("
");
-
- for (var r = 1; r <= 5; r++) {
- var row = $("
|
").appendTo(menu);
- for (var c = 1; c <= 10; c++) {
- $("
| ").mousedown(function(){
- fn(alphabets.slice(0, $(this).data('col')), $(this).data('row'));
- }).hover(function(){
- var hoverRow = $(this).data('row');
- var hoverCol = $(this).data('col');
- $(this).closest('table').find('td').each(function(_index, element){
- if ($(element).data('row') <= hoverRow && $(element).data('col') <= hoverCol){
- $(element).addClass('selected-cell');
- } else {
- $(element).removeClass('selected-cell');
- }
- });
- }).appendTo(row);
- }
- }
- $("body").append(menu);
- menu.position({
- my: "left top",
- at: "left bottom",
- of: this.toolNodes['table']
- });
- $(document).on("mousedown", function() {
- menu.remove();
- });
- return false;
-};
-
-$(document).keydown(function(e) {
- if (isToogleEditPreviewShortcut(e)) {
- if (lastJstPreviewed !== null) {
- e.preventDefault();
- e.stopPropagation();
- lastJstPreviewed.querySelector('.tab-edit').click();
- lastJstPreviewed = null;
- }
- }
-});
-
-function isToogleEditPreviewShortcut(e) {
- if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key.toLowerCase() === 'p') {
- return true;
- } else {
- return false;
- }
-}
-function isModifierKey(e) {
- if (isMac && e.metaKey) {
- return true;
- } else if (!isMac && e.ctrlKey) {
- return true;
- } else {
- return false;
- }
-}
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ar.js b/public/javascripts/jstoolbar/lang/jstoolbar-ar.js
deleted file mode 100644
index 4a88b6b3e..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ar.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'قوي';
-jsToolBar.strings['Italic'] = 'مائل';
-jsToolBar.strings['Underline'] = 'تسطير';
-jsToolBar.strings['Deleted'] = 'محذوف';
-jsToolBar.strings['Code'] = 'رمز ضمني';
-jsToolBar.strings['Heading 1'] = 'عنوان 1';
-jsToolBar.strings['Heading 2'] = 'عنوان 2';
-jsToolBar.strings['Heading 3'] = 'عنوان 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'قائمة غير مرتبة';
-jsToolBar.strings['Ordered list'] = 'قائمة مرتبة';
-jsToolBar.strings['Quote'] = 'اقتباس';
-jsToolBar.strings['Unquote'] = 'إزالة الاقتباس';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'نص مسبق التنسيق';
-jsToolBar.strings['Wiki link'] = 'رابط الى صفحة ويكي';
-jsToolBar.strings['Image'] = 'صورة';
-jsToolBar.strings['Edit'] = 'تعديل';
-jsToolBar.strings['Preview'] = 'معاينة';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-az.js b/public/javascripts/jstoolbar/lang/jstoolbar-az.js
deleted file mode 100644
index a100460ab..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-az.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Strong';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Underline';
-jsToolBar.strings['Deleted'] = 'Deleted';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unordered list';
-jsToolBar.strings['Ordered list'] = 'Ordered list';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
-jsToolBar.strings['Image'] = 'Image';
-jsToolBar.strings['Edit'] = 'Redaktə etmək';
-jsToolBar.strings['Preview'] = 'İlkin baxış';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-bg.js b/public/javascripts/jstoolbar/lang/jstoolbar-bg.js
deleted file mode 100644
index 913295286..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-bg.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Получер';
-jsToolBar.strings['Italic'] = 'Курсив';
-jsToolBar.strings['Underline'] = 'Подчертан';
-jsToolBar.strings['Deleted'] = 'Изтрит';
-jsToolBar.strings['Code'] = 'Вграден код';
-jsToolBar.strings['Heading 1'] = 'Заглавие 1';
-jsToolBar.strings['Heading 2'] = 'Заглавие 2';
-jsToolBar.strings['Heading 3'] = 'Заглавие 3';
-jsToolBar.strings['Highlighted code'] = 'Вграден код';
-jsToolBar.strings['Unordered list'] = 'Неподреден списък';
-jsToolBar.strings['Ordered list'] = 'Подреден списък';
-jsToolBar.strings['Quote'] = 'Цитат';
-jsToolBar.strings['Unquote'] = 'Премахване на цитат';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Форматиран текст';
-jsToolBar.strings['Wiki link'] = 'Връзка до Wiki страница';
-jsToolBar.strings['Image'] = 'Изображение';
-jsToolBar.strings['Edit'] = 'Редакция';
-jsToolBar.strings['Preview'] = 'Преглед';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-bs.js b/public/javascripts/jstoolbar/lang/jstoolbar-bs.js
deleted file mode 100644
index 08f4fef9a..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-bs.js
+++ /dev/null
@@ -1,18 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Strong';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Underline';
-jsToolBar.strings['Deleted'] = 'Deleted';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unordered list';
-jsToolBar.strings['Ordered list'] = 'Ordered list';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Link na Wiki stranicu';
-jsToolBar.strings['Image'] = 'Slika';
-jsToolBar.strings['Edit'] = 'Ispravka';
-jsToolBar.strings['Preview'] = 'Pregled';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ca.js b/public/javascripts/jstoolbar/lang/jstoolbar-ca.js
deleted file mode 100644
index abd543b10..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ca.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Negreta';
-jsToolBar.strings['Italic'] = 'Cursiva';
-jsToolBar.strings['Underline'] = 'Subratllat';
-jsToolBar.strings['Deleted'] = 'Barrat';
-jsToolBar.strings['Code'] = 'Codi en línia';
-jsToolBar.strings['Heading 1'] = 'Encapçalament 1';
-jsToolBar.strings['Heading 2'] = 'Encapçalament 2';
-jsToolBar.strings['Heading 3'] = 'Encapçalament 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Llista sense ordre';
-jsToolBar.strings['Ordered list'] = 'Llista ordenada';
-jsToolBar.strings['Quote'] = 'Cometes';
-jsToolBar.strings['Unquote'] = 'Sense cometes';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Text formatat';
-jsToolBar.strings['Wiki link'] = 'Enllaça a una pàgina Wiki';
-jsToolBar.strings['Image'] = 'Imatge';
-jsToolBar.strings['Edit'] = 'Editar';
-jsToolBar.strings['Preview'] = 'Previsualitzar';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-cs.js b/public/javascripts/jstoolbar/lang/jstoolbar-cs.js
deleted file mode 100644
index 7df24289d..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-cs.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Tučné';
-jsToolBar.strings['Italic'] = 'Kurzíva';
-jsToolBar.strings['Underline'] = 'Podtržené';
-jsToolBar.strings['Deleted'] = 'Přeškrtnuté ';
-jsToolBar.strings['Code'] = 'Vnořený kód';
-jsToolBar.strings['Heading 1'] = 'Nadpis 1';
-jsToolBar.strings['Heading 2'] = 'Nadpis 2';
-jsToolBar.strings['Heading 3'] = 'Nadpis 3';
-jsToolBar.strings['Highlighted code'] = 'Zvýrazněný kód';
-jsToolBar.strings['Unordered list'] = 'Seznam';
-jsToolBar.strings['Ordered list'] = 'Uspořádaný seznam';
-jsToolBar.strings['Quote'] = 'Citace';
-jsToolBar.strings['Unquote'] = 'Odstranit citaci';
-jsToolBar.strings['Table'] = 'Tabulka';
-jsToolBar.strings['Preformatted text'] = 'Předformátovaný text';
-jsToolBar.strings['Wiki link'] = 'Vložit odkaz na Wiki stránku';
-jsToolBar.strings['Image'] = 'Vložit obrázek';
-jsToolBar.strings['Edit'] = 'Upravit';
-jsToolBar.strings['Preview'] = 'Náhled';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-da.js b/public/javascripts/jstoolbar/lang/jstoolbar-da.js
deleted file mode 100644
index f4a848d44..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-da.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Fed';
-jsToolBar.strings['Italic'] = 'Kursiv';
-jsToolBar.strings['Underline'] = 'Understreget';
-jsToolBar.strings['Deleted'] = 'Slettet';
-jsToolBar.strings['Code'] = 'Inline-kode';
-jsToolBar.strings['Heading 1'] = 'Overskrift 1';
-jsToolBar.strings['Heading 2'] = 'Overskrift 2';
-jsToolBar.strings['Heading 3'] = 'Overskrift 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unummereret liste';
-jsToolBar.strings['Ordered list'] = 'Nummereret liste';
-jsToolBar.strings['Quote'] = 'Citér';
-jsToolBar.strings['Unquote'] = 'Fjern citér';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Præformateret tekst';
-jsToolBar.strings['Wiki link'] = 'Link til en wiki-side';
-jsToolBar.strings['Image'] = 'Billede';
-jsToolBar.strings['Edit'] = 'Ret';
-jsToolBar.strings['Preview'] = 'Forhåndsvisning';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-de.js b/public/javascripts/jstoolbar/lang/jstoolbar-de.js
deleted file mode 100644
index fe15f060c..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-de.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Fett';
-jsToolBar.strings['Italic'] = 'Kursiv';
-jsToolBar.strings['Underline'] = 'Unterstrichen';
-jsToolBar.strings['Deleted'] = 'Durchgestrichen';
-jsToolBar.strings['Code'] = 'Quelltext';
-jsToolBar.strings['Heading 1'] = 'Überschrift 1. Ordnung';
-jsToolBar.strings['Heading 2'] = 'Überschrift 2. Ordnung';
-jsToolBar.strings['Heading 3'] = 'Überschrift 3. Ordnung';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Aufzählungsliste';
-jsToolBar.strings['Ordered list'] = 'Nummerierte Liste';
-jsToolBar.strings['Quote'] = 'Zitat';
-jsToolBar.strings['Unquote'] = 'Zitat entfernen';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Präformatierter Text';
-jsToolBar.strings['Wiki link'] = 'Verweis (Link) zu einer Wiki-Seite';
-jsToolBar.strings['Image'] = 'Grafik';
-jsToolBar.strings['Edit'] = 'Bearbeiten';
-jsToolBar.strings['Preview'] = 'Vorschau';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-en-gb.js b/public/javascripts/jstoolbar/lang/jstoolbar-en-gb.js
deleted file mode 100644
index e4b456a45..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-en-gb.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Strong';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Underline';
-jsToolBar.strings['Deleted'] = 'Deleted';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unordered list';
-jsToolBar.strings['Ordered list'] = 'Ordered list';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
-jsToolBar.strings['Image'] = 'Image';
-jsToolBar.strings['Edit'] = 'Edit';
-jsToolBar.strings['Preview'] = 'Preview';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-en.js b/public/javascripts/jstoolbar/lang/jstoolbar-en.js
deleted file mode 100644
index e4b456a45..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-en.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Strong';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Underline';
-jsToolBar.strings['Deleted'] = 'Deleted';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unordered list';
-jsToolBar.strings['Ordered list'] = 'Ordered list';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
-jsToolBar.strings['Image'] = 'Image';
-jsToolBar.strings['Edit'] = 'Edit';
-jsToolBar.strings['Preview'] = 'Preview';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-es-pa.js b/public/javascripts/jstoolbar/lang/jstoolbar-es-pa.js
deleted file mode 100644
index 50c55c98c..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-es-pa.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Negrita';
-jsToolBar.strings['Italic'] = 'Itálica';
-jsToolBar.strings['Underline'] = 'Subrayado';
-jsToolBar.strings['Deleted'] = 'Tachado';
-jsToolBar.strings['Code'] = 'Código fuente';
-jsToolBar.strings['Heading 1'] = 'Encabezado 1';
-jsToolBar.strings['Heading 2'] = 'Encabezado 2';
-jsToolBar.strings['Heading 3'] = 'Encabezado 3';
-jsToolBar.strings['Highlighted code'] = 'Código resaltado';
-jsToolBar.strings['Unordered list'] = 'Lista sin ordenar';
-jsToolBar.strings['Ordered list'] = 'Lista ordenada';
-jsToolBar.strings['Quote'] = 'Citar';
-jsToolBar.strings['Unquote'] = 'Quitar cita';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Texto con formato';
-jsToolBar.strings['Wiki link'] = 'Enlace a página Wiki';
-jsToolBar.strings['Image'] = 'Imagen';
-jsToolBar.strings['Edit'] = 'Modificar';
-jsToolBar.strings['Preview'] = 'Previsualizar';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-es.js b/public/javascripts/jstoolbar/lang/jstoolbar-es.js
deleted file mode 100644
index 50c55c98c..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-es.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Negrita';
-jsToolBar.strings['Italic'] = 'Itálica';
-jsToolBar.strings['Underline'] = 'Subrayado';
-jsToolBar.strings['Deleted'] = 'Tachado';
-jsToolBar.strings['Code'] = 'Código fuente';
-jsToolBar.strings['Heading 1'] = 'Encabezado 1';
-jsToolBar.strings['Heading 2'] = 'Encabezado 2';
-jsToolBar.strings['Heading 3'] = 'Encabezado 3';
-jsToolBar.strings['Highlighted code'] = 'Código resaltado';
-jsToolBar.strings['Unordered list'] = 'Lista sin ordenar';
-jsToolBar.strings['Ordered list'] = 'Lista ordenada';
-jsToolBar.strings['Quote'] = 'Citar';
-jsToolBar.strings['Unquote'] = 'Quitar cita';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Texto con formato';
-jsToolBar.strings['Wiki link'] = 'Enlace a página Wiki';
-jsToolBar.strings['Image'] = 'Imagen';
-jsToolBar.strings['Edit'] = 'Modificar';
-jsToolBar.strings['Preview'] = 'Previsualizar';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-et.js b/public/javascripts/jstoolbar/lang/jstoolbar-et.js
deleted file mode 100644
index b71c4c06b..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-et.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- Copyright (C) 2012 Kaitseministeerium
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Rõhutatult';
-jsToolBar.strings['Italic'] = 'Kaldkirjas';
-jsToolBar.strings['Underline'] = 'Allakriipsutatult';
-jsToolBar.strings['Deleted'] = 'Läbikriipsutatult';
-jsToolBar.strings['Code'] = 'Koodiblokk';
-jsToolBar.strings['Heading 1'] = '1. taseme pealkiri';
-jsToolBar.strings['Heading 2'] = '2. taseme pealkiri';
-jsToolBar.strings['Heading 3'] = '3. taseme pealkiri';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Täpitud nimekiri';
-jsToolBar.strings['Ordered list'] = 'Nummerdatud nimekiri';
-jsToolBar.strings['Quote'] = 'Tsitaat: aste juurde';
-jsToolBar.strings['Unquote'] = 'Tsitaat: aste madalamaks';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Eelvormindatud tekst';
-jsToolBar.strings['Wiki link'] = 'Vikilehe link';
-jsToolBar.strings['Image'] = 'Pilt';
-jsToolBar.strings['Edit'] = 'Muuda';
-jsToolBar.strings['Preview'] = 'Eelvaade';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-eu.js b/public/javascripts/jstoolbar/lang/jstoolbar-eu.js
deleted file mode 100644
index 52e7877b9..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-eu.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// jsToolBar EU language
-// Author: Ales Zabala Alava (Shagi),
-// 2010-01-25
-// Distributed under the same terms as the jsToolBar itself.
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Lodia';
-jsToolBar.strings['Italic'] = 'Etzana';
-jsToolBar.strings['Underline'] = 'Azpimarra';
-jsToolBar.strings['Deleted'] = 'Ezabatuta';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = '1 Goiburua';
-jsToolBar.strings['Heading 2'] = '2 Goiburua';
-jsToolBar.strings['Heading 3'] = '3 Goiburua';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Ordenatu gabeko zerrenda';
-jsToolBar.strings['Ordered list'] = 'Ordenatutako zerrenda';
-jsToolBar.strings['Quote'] = 'Aipamena';
-jsToolBar.strings['Unquote'] = 'Aipamena kendu';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Aurrez formateatutako testua';
-jsToolBar.strings['Wiki link'] = 'Wiki orri baterako esteka';
-jsToolBar.strings['Image'] = 'Irudia';
-jsToolBar.strings['Edit'] = 'Editatu';
-jsToolBar.strings['Preview'] = 'Aurreikusi';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-fa.js b/public/javascripts/jstoolbar/lang/jstoolbar-fa.js
deleted file mode 100644
index 92fb7d105..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-fa.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'پررنگ';
-jsToolBar.strings['Italic'] = 'کج';
-jsToolBar.strings['Underline'] = 'زیرخط';
-jsToolBar.strings['Deleted'] = 'برداشته شده';
-jsToolBar.strings['Code'] = 'کد درون خطی';
-jsToolBar.strings['Heading 1'] = 'سربرگ ۱';
-jsToolBar.strings['Heading 2'] = 'سربرگ ۲';
-jsToolBar.strings['Heading 3'] = 'سربرگ ۳';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'فهرست بدون شماره';
-jsToolBar.strings['Ordered list'] = 'فهرست با شماره';
-jsToolBar.strings['Quote'] = 'تو بردن';
-jsToolBar.strings['Unquote'] = 'بیرون آوردن';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'نوشته قالب بندی شده';
-jsToolBar.strings['Wiki link'] = 'پیوند به برگ ویکی';
-jsToolBar.strings['Image'] = 'عکس';
-jsToolBar.strings['Edit'] = 'ویرایش';
-jsToolBar.strings['Preview'] = 'پیشنمایش';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-fi.js b/public/javascripts/jstoolbar/lang/jstoolbar-fi.js
deleted file mode 100644
index ed421a287..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-fi.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Lihavoitu';
-jsToolBar.strings['Italic'] = 'Kursivoitu';
-jsToolBar.strings['Underline'] = 'Alleviivattu';
-jsToolBar.strings['Deleted'] = 'Yliviivattu';
-jsToolBar.strings['Code'] = 'Koodi näkymä';
-jsToolBar.strings['Heading 1'] = 'Otsikko 1';
-jsToolBar.strings['Heading 2'] = 'Otsikko 2';
-jsToolBar.strings['Heading 3'] = 'Otsikko 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Järjestämätön lista';
-jsToolBar.strings['Ordered list'] = 'Järjestetty lista';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Ennaltamuotoiltu teksti';
-jsToolBar.strings['Wiki link'] = 'Linkki Wiki sivulle';
-jsToolBar.strings['Image'] = 'Kuva';
-jsToolBar.strings['Edit'] = 'Muokkaa';
-jsToolBar.strings['Preview'] = 'Esikatselu';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-fr.js b/public/javascripts/jstoolbar/lang/jstoolbar-fr.js
deleted file mode 100644
index 996f55cd6..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-fr.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Gras';
-jsToolBar.strings['Italic'] = 'Italique';
-jsToolBar.strings['Underline'] = 'Souligné';
-jsToolBar.strings['Deleted'] = 'Rayé';
-jsToolBar.strings['Code'] = 'Code en ligne';
-jsToolBar.strings['Heading 1'] = 'Titre niveau 1';
-jsToolBar.strings['Heading 2'] = 'Titre niveau 2';
-jsToolBar.strings['Heading 3'] = 'Titre niveau 3';
-jsToolBar.strings['Highlighted code'] = 'Code colorisé';
-jsToolBar.strings['Unordered list'] = 'Liste à puces';
-jsToolBar.strings['Ordered list'] = 'Liste numérotée';
-jsToolBar.strings['Quote'] = 'Indenté';
-jsToolBar.strings['Unquote'] = 'Supprimer indentation';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Texte préformaté';
-jsToolBar.strings['Wiki link'] = 'Lien vers une page Wiki';
-jsToolBar.strings['Image'] = 'Image';
-jsToolBar.strings['Edit'] = 'Modifier';
-jsToolBar.strings['Preview'] = 'Prévisualiser';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-gl.js b/public/javascripts/jstoolbar/lang/jstoolbar-gl.js
deleted file mode 100644
index 4e11cb1ed..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-gl.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Negriña';
-jsToolBar.strings['Italic'] = 'Itálica';
-jsToolBar.strings['Underline'] = 'Subliñado';
-jsToolBar.strings['Deleted'] = 'Tachado';
-jsToolBar.strings['Code'] = 'Código fonte';
-jsToolBar.strings['Heading 1'] = 'Encabezado 1';
-jsToolBar.strings['Heading 2'] = 'Encabezado 2';
-jsToolBar.strings['Heading 3'] = 'Encabezado 3';
-jsToolBar.strings['Highlighted code'] = 'Código resaltado';
-jsToolBar.strings['Unordered list'] = 'Lista sen ordenar';
-jsToolBar.strings['Ordered list'] = 'Lista ordenada';
-jsToolBar.strings['Quote'] = 'Citar';
-jsToolBar.strings['Unquote'] = 'Quitar cita';
-jsToolBar.strings['Table'] = 'Táboa';
-jsToolBar.strings['Preformatted text'] = 'Texto con formato';
-jsToolBar.strings['Wiki link'] = 'Ligazón a páxina Wiki';
-jsToolBar.strings['Image'] = 'Imaxe';
-jsToolBar.strings['Edit'] = 'Modificar';
-jsToolBar.strings['Preview'] = 'Vista previa';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-he.js b/public/javascripts/jstoolbar/lang/jstoolbar-he.js
deleted file mode 100644
index 72d4b8db6..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-he.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Strong';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Underline';
-jsToolBar.strings['Deleted'] = 'Deleted';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unordered list';
-jsToolBar.strings['Ordered list'] = 'Ordered list';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
-jsToolBar.strings['Image'] = 'Image';
-jsToolBar.strings['Edit'] = 'ערוך';
-jsToolBar.strings['Preview'] = 'תצוגה מקדימה';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-hr.js b/public/javascripts/jstoolbar/lang/jstoolbar-hr.js
deleted file mode 100644
index 8a864f4aa..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-hr.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Podebljano';
-jsToolBar.strings['Italic'] = 'Kurziv';
-jsToolBar.strings['Underline'] = 'Podcrtano';
-jsToolBar.strings['Deleted'] = 'Obrisano';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Naslov 1';
-jsToolBar.strings['Heading 2'] = 'Naslov 2';
-jsToolBar.strings['Heading 3'] = 'Naslov 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Graficke oznake';
-jsToolBar.strings['Ordered list'] = 'Numeriranje';
-jsToolBar.strings['Quote'] = 'Citat';
-jsToolBar.strings['Unquote'] = 'Ukloni citat';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Izveden tekst';
-jsToolBar.strings['Wiki link'] = 'Link na Wiki stranicu';
-jsToolBar.strings['Image'] = 'Slika';
-jsToolBar.strings['Edit'] = 'Uredi';
-jsToolBar.strings['Preview'] = 'Brzi pregled';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-hu.js b/public/javascripts/jstoolbar/lang/jstoolbar-hu.js
deleted file mode 100644
index aec1e653e..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-hu.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Félkövér';
-jsToolBar.strings['Italic'] = 'Dőlt';
-jsToolBar.strings['Underline'] = 'Aláhúzott';
-jsToolBar.strings['Deleted'] = 'Törölt';
-jsToolBar.strings['Code'] = 'Kód sorok';
-jsToolBar.strings['Heading 1'] = 'Fejléc 1';
-jsToolBar.strings['Heading 2'] = 'Fejléc 2';
-jsToolBar.strings['Heading 3'] = 'Fejléc 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Felsorolás';
-jsToolBar.strings['Ordered list'] = 'Számozott lista';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Idézet eltávolítása';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Előreformázott szöveg';
-jsToolBar.strings['Wiki link'] = 'Link egy Wiki oldalra';
-jsToolBar.strings['Image'] = 'Kép';
-jsToolBar.strings['Edit'] = 'Szerkeszt';
-jsToolBar.strings['Preview'] = 'Előnézet';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-id.js b/public/javascripts/jstoolbar/lang/jstoolbar-id.js
deleted file mode 100644
index ca5c71167..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-id.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Tebal';
-jsToolBar.strings['Italic'] = 'Miring';
-jsToolBar.strings['Underline'] = 'Garis bawah';
-jsToolBar.strings['Deleted'] = 'Dihapus';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Judul 1';
-jsToolBar.strings['Heading 2'] = 'Judul 2';
-jsToolBar.strings['Heading 3'] = 'Judul 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Daftar tak terurut';
-jsToolBar.strings['Ordered list'] = 'Daftar terurut';
-jsToolBar.strings['Quote'] = 'Kutipan';
-jsToolBar.strings['Unquote'] = 'Hapus kutipan';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Teks terformat';
-jsToolBar.strings['Wiki link'] = 'Tautkan ke halaman wiki';
-jsToolBar.strings['Image'] = 'Gambar';
-jsToolBar.strings['Edit'] = 'Sunting';
-jsToolBar.strings['Preview'] = 'Tinjauan';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-it.js b/public/javascripts/jstoolbar/lang/jstoolbar-it.js
deleted file mode 100644
index 13ade13b2..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-it.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Italian translation
-// by Diego Pierotto (ita.translations@tiscali.it)
-
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Grassetto';
-jsToolBar.strings['Italic'] = 'Corsivo';
-jsToolBar.strings['Underline'] = 'Sottolineato';
-jsToolBar.strings['Deleted'] = 'Barrato';
-jsToolBar.strings['Code'] = 'Codice sorgente';
-jsToolBar.strings['Heading 1'] = 'Titolo 1';
-jsToolBar.strings['Heading 2'] = 'Titolo 2';
-jsToolBar.strings['Heading 3'] = 'Titolo 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Elenco puntato';
-jsToolBar.strings['Ordered list'] = 'Elenco numerato';
-jsToolBar.strings['Quote'] = 'Aumenta rientro';
-jsToolBar.strings['Unquote'] = 'Riduci rientro';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Testo preformattato';
-jsToolBar.strings['Wiki link'] = 'Collegamento a pagina Wiki';
-jsToolBar.strings['Image'] = 'Immagine';
-jsToolBar.strings['Edit'] = 'Modifica';
-jsToolBar.strings['Preview'] = 'Anteprima';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ja.js b/public/javascripts/jstoolbar/lang/jstoolbar-ja.js
deleted file mode 100644
index 71a9c4313..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ja.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = '強調';
-jsToolBar.strings['Italic'] = '斜体';
-jsToolBar.strings['Underline'] = '下線';
-jsToolBar.strings['Deleted'] = '取り消し線';
-jsToolBar.strings['Code'] = 'コード';
-jsToolBar.strings['Heading 1'] = '見出し 1';
-jsToolBar.strings['Heading 2'] = '見出し 2';
-jsToolBar.strings['Heading 3'] = '見出し 3';
-jsToolBar.strings['Highlighted code'] = 'コードハイライト';
-jsToolBar.strings['Unordered list'] = '順不同リスト';
-jsToolBar.strings['Ordered list'] = '番号つきリスト';
-jsToolBar.strings['Quote'] = '引用';
-jsToolBar.strings['Unquote'] = '引用解除';
-jsToolBar.strings['Table'] = 'テーブル';
-jsToolBar.strings['Preformatted text'] = '整形済みテキスト';
-jsToolBar.strings['Wiki link'] = 'Wikiページへのリンク';
-jsToolBar.strings['Image'] = '画像';
-jsToolBar.strings['Edit'] = '編集';
-jsToolBar.strings['Preview'] = 'プレビュー';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ko.js b/public/javascripts/jstoolbar/lang/jstoolbar-ko.js
deleted file mode 100644
index 601a83a84..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ko.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = '굵게';
-jsToolBar.strings['Italic'] = '기울임';
-jsToolBar.strings['Underline'] = '밑줄';
-jsToolBar.strings['Deleted'] = '취소선';
-jsToolBar.strings['Code'] = '코드';
-jsToolBar.strings['Heading 1'] = '제목 1';
-jsToolBar.strings['Heading 2'] = '제목 2';
-jsToolBar.strings['Heading 3'] = '제목 3';
-jsToolBar.strings['Highlighted code'] = '색상화한 코드';
-jsToolBar.strings['Unordered list'] = '글머리 기호';
-jsToolBar.strings['Ordered list'] = '번호 매기기';
-jsToolBar.strings['Quote'] = '인용';
-jsToolBar.strings['Unquote'] = '인용 취소';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = '있는 그대로 표현 (Preformatted text)';
-jsToolBar.strings['Wiki link'] = 'Wiki 페이지에 연결';
-jsToolBar.strings['Image'] = '그림';
-jsToolBar.strings['Edit'] = '편집';
-jsToolBar.strings['Preview'] = '미리보기';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-lt.js b/public/javascripts/jstoolbar/lang/jstoolbar-lt.js
deleted file mode 100644
index d77b7ea08..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-lt.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Pastorinti';
-jsToolBar.strings['Italic'] = 'Kursyvu';
-jsToolBar.strings['Underline'] = 'Pabraukti';
-jsToolBar.strings['Deleted'] = 'Užbraukti';
-jsToolBar.strings['Code'] = 'Kodas';
-jsToolBar.strings['Heading 1'] = 'Antraštė 1';
-jsToolBar.strings['Heading 2'] = 'Antraštė 2';
-jsToolBar.strings['Heading 3'] = 'Antraštė 3';
-jsToolBar.strings['Highlighted code'] = 'Paryškintas kodas';
-jsToolBar.strings['Unordered list'] = 'Nenumeruotas sąrašas';
-jsToolBar.strings['Ordered list'] = 'Numeruotas sąrašas';
-jsToolBar.strings['Quote'] = 'Cituoti';
-jsToolBar.strings['Unquote'] = 'Pašalinti citavimą';
-jsToolBar.strings['Table'] = 'Lentelė';
-jsToolBar.strings['Preformatted text'] = 'Preformatuotas tekstas';
-jsToolBar.strings['Wiki link'] = 'Nuoroda į Wiki puslapį';
-jsToolBar.strings['Image'] = 'Paveikslėlis';
-jsToolBar.strings['Edit'] = 'Redaguoti';
-jsToolBar.strings['Preview'] = 'Peržiūra';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-lv.js b/public/javascripts/jstoolbar/lang/jstoolbar-lv.js
deleted file mode 100644
index 5e43d128a..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-lv.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// translated by Dzintars Bergs (dzintars.bergs@gmail.com)
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Treknraksts';
-jsToolBar.strings['Italic'] = 'Slīpraksts';
-jsToolBar.strings['Underline'] = 'Pasvītrojums';
-jsToolBar.strings['Deleted'] = 'Dzēsts';
-jsToolBar.strings['Code'] = 'Iekļauts kods';
-jsToolBar.strings['Heading 1'] = 'Virsraksts 1';
-jsToolBar.strings['Heading 2'] = 'Virsraksts 2';
-jsToolBar.strings['Heading 3'] = 'Virsraksts 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Nesakārtots saraksts';
-jsToolBar.strings['Ordered list'] = 'Sakārtots saraksts';
-jsToolBar.strings['Quote'] = 'Citēt';
-jsToolBar.strings['Unquote'] = 'Noņemt citātu';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Iepriekš formatēts teksts';
-jsToolBar.strings['Wiki link'] = 'Saite uz Wiki lapu';
-jsToolBar.strings['Image'] = 'Attēls';
-jsToolBar.strings['Edit'] = 'Labot';
-jsToolBar.strings['Preview'] = 'Priekšskatījums';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-mk.js b/public/javascripts/jstoolbar/lang/jstoolbar-mk.js
deleted file mode 100644
index 01e8b7a51..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-mk.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Задебелен';
-jsToolBar.strings['Italic'] = 'Закосен';
-jsToolBar.strings['Underline'] = 'Подвлечен';
-jsToolBar.strings['Deleted'] = 'Прецртан';
-jsToolBar.strings['Code'] = 'Код';
-jsToolBar.strings['Heading 1'] = 'Заглавје 1';
-jsToolBar.strings['Heading 2'] = 'Заглавје 2';
-jsToolBar.strings['Heading 3'] = 'Заглавје 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Неподредена листа';
-jsToolBar.strings['Ordered list'] = 'Подредена листа';
-jsToolBar.strings['Quote'] = 'Цитат';
-jsToolBar.strings['Unquote'] = 'Отстрани цитат';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Форматиран текст';
-jsToolBar.strings['Wiki link'] = 'Врска до вики страна';
-jsToolBar.strings['Image'] = 'Слика';
-jsToolBar.strings['Edit'] = 'Уреди';
-jsToolBar.strings['Preview'] = 'Preview';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-mn.js b/public/javascripts/jstoolbar/lang/jstoolbar-mn.js
deleted file mode 100644
index 82e80439b..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-mn.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Бүдүүн';
-jsToolBar.strings['Italic'] = 'Налуу';
-jsToolBar.strings['Underline'] = 'Доогуур зураас';
-jsToolBar.strings['Deleted'] = 'Устгагдсан';
-jsToolBar.strings['Code'] = 'Програмын код';
-jsToolBar.strings['Heading 1'] = 'Гарчиг 1';
-jsToolBar.strings['Heading 2'] = 'Гарчиг 2';
-jsToolBar.strings['Heading 3'] = 'Гарчиг 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Эрэмбэгүй жагсаалт';
-jsToolBar.strings['Ordered list'] = 'Эрэмбэтэй жагсаалт';
-jsToolBar.strings['Quote'] = 'Ишлэл';
-jsToolBar.strings['Unquote'] = 'Ишлэлийг устгах';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Өмнө нь хэлбэржсэн текст';
-jsToolBar.strings['Wiki link'] = 'Вики хуудас руу холбох';
-jsToolBar.strings['Image'] = 'Зураг';
-jsToolBar.strings['Edit'] = 'Засварлах';
-jsToolBar.strings['Preview'] = 'Ямар харагдахыг шалгах';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-nl.js b/public/javascripts/jstoolbar/lang/jstoolbar-nl.js
deleted file mode 100644
index e28e8a144..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-nl.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Vetgedrukt';
-jsToolBar.strings['Italic'] = 'Cursief';
-jsToolBar.strings['Underline'] = 'Onderstreept';
-jsToolBar.strings['Deleted'] = 'Verwijderd';
-jsToolBar.strings['Code'] = 'Computercode';
-jsToolBar.strings['Heading 1'] = 'Hoofding 1';
-jsToolBar.strings['Heading 2'] = 'Hoofding 2';
-jsToolBar.strings['Heading 3'] = 'Hoofding 3';
-jsToolBar.strings['Highlighted code'] = 'Gemarkeerde code';
-jsToolBar.strings['Unordered list'] = 'Ongeordende lijst';
-jsToolBar.strings['Ordered list'] = 'Geordende lijst';
-jsToolBar.strings['Quote'] = 'Citaat';
-jsToolBar.strings['Unquote'] = 'Citaat verwijderen';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Vooropgemaakte tekst';
-jsToolBar.strings['Wiki link'] = 'Link naar een Wikipagina';
-jsToolBar.strings['Image'] = 'Afbeelding';
-jsToolBar.strings['Edit'] = 'Bewerken';
-jsToolBar.strings['Preview'] = 'Voorbeeldweergave';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-no.js b/public/javascripts/jstoolbar/lang/jstoolbar-no.js
deleted file mode 100644
index 14f587922..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-no.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Fet';
-jsToolBar.strings['Italic'] = 'Kursiv';
-jsToolBar.strings['Underline'] = 'Understreking';
-jsToolBar.strings['Deleted'] = 'Slettet';
-jsToolBar.strings['Code'] = 'Kode';
-jsToolBar.strings['Heading 1'] = 'Overskrift 1';
-jsToolBar.strings['Heading 2'] = 'Overskrift 2';
-jsToolBar.strings['Heading 3'] = 'Overskrift 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Punktliste';
-jsToolBar.strings['Ordered list'] = 'Nummerert liste';
-jsToolBar.strings['Quote'] = 'Sitat';
-jsToolBar.strings['Unquote'] = 'Avslutt sitat';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatert tekst';
-jsToolBar.strings['Wiki link'] = 'Lenke til Wiki-side';
-jsToolBar.strings['Image'] = 'Bilde';
-jsToolBar.strings['Edit'] = 'Endre';
-jsToolBar.strings['Preview'] = 'Forhåndsvis';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-pl.js b/public/javascripts/jstoolbar/lang/jstoolbar-pl.js
deleted file mode 100644
index 28ecce816..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-pl.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Keep this line in order to avoid problems with Windows Notepad UTF-8 EF-BB-BF idea...
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Pogrubienie';
-jsToolBar.strings['Italic'] = 'Kursywa';
-jsToolBar.strings['Underline'] = 'Podkreślenie';
-jsToolBar.strings['Deleted'] = 'Usunięte';
-jsToolBar.strings['Code'] = 'Kod';
-jsToolBar.strings['Heading 1'] = 'Nagłowek 1';
-jsToolBar.strings['Heading 2'] = 'Nagłówek 2';
-jsToolBar.strings['Heading 3'] = 'Nagłówek 3';
-jsToolBar.strings['Highlighted code'] = 'Kod z podświetlaniem składni';
-jsToolBar.strings['Unordered list'] = 'Nieposortowana lista';
-jsToolBar.strings['Ordered list'] = 'Posortowana lista';
-jsToolBar.strings['Quote'] = 'Cytat';
-jsToolBar.strings['Unquote'] = 'Usuń cytat';
-jsToolBar.strings['Table'] = 'Tabela';
-jsToolBar.strings['Preformatted text'] = 'Sformatowany tekst';
-jsToolBar.strings['Wiki link'] = 'Odnośnik do strony Wiki';
-jsToolBar.strings['Image'] = 'Obraz';
-jsToolBar.strings['Edit'] = 'Edytuj';
-jsToolBar.strings['Preview'] = 'Podgląd';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-pt-br.js b/public/javascripts/jstoolbar/lang/jstoolbar-pt-br.js
deleted file mode 100644
index 8320f1de7..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-pt-br.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// Translated by: Alexandre da Silva
-
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Negrito';
-jsToolBar.strings['Italic'] = 'Itálico';
-jsToolBar.strings['Underline'] = 'Sublinhado';
-jsToolBar.strings['Deleted'] = 'Excluído';
-jsToolBar.strings['Code'] = 'Código Inline';
-jsToolBar.strings['Heading 1'] = 'Cabeçalho 1';
-jsToolBar.strings['Heading 2'] = 'Cabeçalho 2';
-jsToolBar.strings['Heading 3'] = 'Cabeçalho 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Lista não ordenada';
-jsToolBar.strings['Ordered list'] = 'Lista ordenada';
-jsToolBar.strings['Quote'] = 'Identar';
-jsToolBar.strings['Unquote'] = 'Remover identação';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Texto pré-formatado';
-jsToolBar.strings['Wiki link'] = 'Link para uma página Wiki';
-jsToolBar.strings['Image'] = 'Imagem';
-jsToolBar.strings['Edit'] = 'Editar';
-jsToolBar.strings['Preview'] = 'Pré-visualizar';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-pt.js b/public/javascripts/jstoolbar/lang/jstoolbar-pt.js
deleted file mode 100644
index e296c8367..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-pt.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Translated by: Pedro Araújo
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Negrito';
-jsToolBar.strings['Italic'] = 'Itálico';
-jsToolBar.strings['Underline'] = 'Sublinhado';
-jsToolBar.strings['Deleted'] = 'Apagado';
-jsToolBar.strings['Code'] = 'Código Inline';
-jsToolBar.strings['Heading 1'] = 'Cabeçalho 1';
-jsToolBar.strings['Heading 2'] = 'Cabeçalho 2';
-jsToolBar.strings['Heading 3'] = 'Cabeçalho 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Lista não ordenada';
-jsToolBar.strings['Ordered list'] = 'Lista ordenada';
-jsToolBar.strings['Quote'] = 'Citação';
-jsToolBar.strings['Unquote'] = 'Remover citação';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Texto pré-formatado';
-jsToolBar.strings['Wiki link'] = 'Link para uma página da Wiki';
-jsToolBar.strings['Image'] = 'Imagem';
-jsToolBar.strings['Edit'] = 'Editar';
-jsToolBar.strings['Preview'] = 'Pré-visualizar';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ro.js b/public/javascripts/jstoolbar/lang/jstoolbar-ro.js
deleted file mode 100644
index 8cdcad11d..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ro.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Bold';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Subliniat';
-jsToolBar.strings['Deleted'] = 'Șters';
-jsToolBar.strings['Code'] = 'Fragment de cod';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Listă pe puncte';
-jsToolBar.strings['Ordered list'] = 'Listă ordonată';
-jsToolBar.strings['Quote'] = 'Citează';
-jsToolBar.strings['Unquote'] = 'Fără citat';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Text preformatat';
-jsToolBar.strings['Wiki link'] = 'Trimitere către o pagină wiki';
-jsToolBar.strings['Image'] = 'Imagine';
-jsToolBar.strings['Edit'] = 'Editează';
-jsToolBar.strings['Preview'] = 'Previzualizare';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ru.js b/public/javascripts/jstoolbar/lang/jstoolbar-ru.js
deleted file mode 100644
index 8a6ef02a4..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ru.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Жирный';
-jsToolBar.strings['Italic'] = 'Курсив';
-jsToolBar.strings['Underline'] = 'Подчеркнутый';
-jsToolBar.strings['Deleted'] = 'Зачеркнутый';
-jsToolBar.strings['Code'] = 'Вставка кода';
-jsToolBar.strings['Heading 1'] = 'Заголовок 1';
-jsToolBar.strings['Heading 2'] = 'Заголовок 2';
-jsToolBar.strings['Heading 3'] = 'Заголовок 3';
-jsToolBar.strings['Highlighted code'] = 'Подсветка кода';
-jsToolBar.strings['Unordered list'] = 'Маркированный список';
-jsToolBar.strings['Ordered list'] = 'Нумерованный список';
-jsToolBar.strings['Quote'] = 'Цитата';
-jsToolBar.strings['Unquote'] = 'Удалить цитату';
-jsToolBar.strings['Table'] = 'Таблица';
-jsToolBar.strings['Preformatted text'] = 'Заранее форматированный текст';
-jsToolBar.strings['Wiki link'] = 'Ссылка на страницу в Wiki';
-jsToolBar.strings['Image'] = 'Вставка изображения';
-jsToolBar.strings['Edit'] = 'Редактирование';
-jsToolBar.strings['Preview'] = 'Предпросмотр';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-sk.js b/public/javascripts/jstoolbar/lang/jstoolbar-sk.js
deleted file mode 100644
index 25b1c1e2a..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-sk.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Tučné';
-jsToolBar.strings['Italic'] = 'Kurzíva';
-jsToolBar.strings['Underline'] = 'Podčiarknuté';
-jsToolBar.strings['Deleted'] = 'Preškrtnuté';
-jsToolBar.strings['Code'] = 'Zobrazenie kódu';
-jsToolBar.strings['Heading 1'] = 'Nadpis 1';
-jsToolBar.strings['Heading 2'] = 'Nadpis 2';
-jsToolBar.strings['Heading 3'] = 'Nadpis 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Odrážkový zoznam';
-jsToolBar.strings['Ordered list'] = 'Číslovaný zoznam';
-jsToolBar.strings['Quote'] = 'Odsadenie';
-jsToolBar.strings['Unquote'] = 'Zrušiť odsadenie';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Predformátovaný text';
-jsToolBar.strings['Wiki link'] = 'Odkaz na wikistránku';
-jsToolBar.strings['Image'] = 'Obrázok';
-jsToolBar.strings['Edit'] = 'Upraviť';
-jsToolBar.strings['Preview'] = 'Náhľad';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-sl.js b/public/javascripts/jstoolbar/lang/jstoolbar-sl.js
deleted file mode 100644
index 090a55a9f..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-sl.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Krepko';
-jsToolBar.strings['Italic'] = 'Poševno';
-jsToolBar.strings['Underline'] = 'Podčrtano';
-jsToolBar.strings['Deleted'] = 'Izbrisano';
-jsToolBar.strings['Code'] = 'Koda med vrsticami';
-jsToolBar.strings['Heading 1'] = 'Naslov 1';
-jsToolBar.strings['Heading 2'] = 'Naslov 2';
-jsToolBar.strings['Heading 3'] = 'Naslov 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Neurejen seznam';
-jsToolBar.strings['Ordered list'] = 'Urejen seznam';
-jsToolBar.strings['Quote'] = 'Citat';
-jsToolBar.strings['Unquote'] = 'Odstrani citat';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Predoblikovano besedilo';
-jsToolBar.strings['Wiki link'] = 'Povezava na Wiki stran';
-jsToolBar.strings['Image'] = 'Slika';
-jsToolBar.strings['Edit'] = 'Uredi';
-jsToolBar.strings['Preview'] = 'Predogled';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-sq.js b/public/javascripts/jstoolbar/lang/jstoolbar-sq.js
deleted file mode 100644
index e4b456a45..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-sq.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Strong';
-jsToolBar.strings['Italic'] = 'Italic';
-jsToolBar.strings['Underline'] = 'Underline';
-jsToolBar.strings['Deleted'] = 'Deleted';
-jsToolBar.strings['Code'] = 'Inline Code';
-jsToolBar.strings['Heading 1'] = 'Heading 1';
-jsToolBar.strings['Heading 2'] = 'Heading 2';
-jsToolBar.strings['Heading 3'] = 'Heading 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Unordered list';
-jsToolBar.strings['Ordered list'] = 'Ordered list';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
-jsToolBar.strings['Image'] = 'Image';
-jsToolBar.strings['Edit'] = 'Edit';
-jsToolBar.strings['Preview'] = 'Preview';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-sr-yu.js b/public/javascripts/jstoolbar/lang/jstoolbar-sr-yu.js
deleted file mode 100644
index 94d993d5a..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-sr-yu.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Podebljano';
-jsToolBar.strings['Italic'] = 'Kurziv';
-jsToolBar.strings['Underline'] = 'Podvučeno';
-jsToolBar.strings['Deleted'] = 'Obrisano';
-jsToolBar.strings['Code'] = 'Ugrađeni kôd';
-jsToolBar.strings['Heading 1'] = 'Naslov 1';
-jsToolBar.strings['Heading 2'] = 'Naslov 2';
-jsToolBar.strings['Heading 3'] = 'Naslov 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Lista nabrajanja';
-jsToolBar.strings['Ordered list'] = 'Uređena lista';
-jsToolBar.strings['Quote'] = 'Pod navodnicima';
-jsToolBar.strings['Unquote'] = 'Ukloni navodnike';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Prethodno formatiran tekst';
-jsToolBar.strings['Wiki link'] = 'Veza prema Wiki strani';
-jsToolBar.strings['Image'] = 'Slika';
-jsToolBar.strings['Edit'] = 'Izmeni';
-jsToolBar.strings['Preview'] = 'Pregled';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-sr.js b/public/javascripts/jstoolbar/lang/jstoolbar-sr.js
deleted file mode 100644
index ab4ae0245..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-sr.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Подебљано';
-jsToolBar.strings['Italic'] = 'Курзив';
-jsToolBar.strings['Underline'] = 'Подвучено';
-jsToolBar.strings['Deleted'] = 'Обрисано';
-jsToolBar.strings['Code'] = 'Уграђени кôд';
-jsToolBar.strings['Heading 1'] = 'Наслов 1';
-jsToolBar.strings['Heading 2'] = 'Наслов 2';
-jsToolBar.strings['Heading 3'] = 'Наслов 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Листа набрајања';
-jsToolBar.strings['Ordered list'] = 'Уређена листа';
-jsToolBar.strings['Quote'] = 'Под наводницима';
-jsToolBar.strings['Unquote'] = 'Уклони наводнике';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Претходно форматиран текст';
-jsToolBar.strings['Wiki link'] = 'Веза према Wiki страни';
-jsToolBar.strings['Image'] = 'Слика';
-jsToolBar.strings['Edit'] = 'Измени';
-jsToolBar.strings['Preview'] = 'Преглед';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-sv.js b/public/javascripts/jstoolbar/lang/jstoolbar-sv.js
deleted file mode 100644
index 7ef6c75cd..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-sv.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Fet';
-jsToolBar.strings['Italic'] = 'Kursiv';
-jsToolBar.strings['Underline'] = 'Understruken';
-jsToolBar.strings['Deleted'] = 'Genomstruken';
-jsToolBar.strings['Code'] = 'Kod';
-jsToolBar.strings['Heading 1'] = 'Rubrik 1';
-jsToolBar.strings['Heading 2'] = 'Rubrik 2';
-jsToolBar.strings['Heading 3'] = 'Rubrik 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Osorterad lista';
-jsToolBar.strings['Ordered list'] = 'Sorterad lista';
-jsToolBar.strings['Quote'] = 'Citat';
-jsToolBar.strings['Unquote'] = 'Ta bort citat';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Förformaterad text';
-jsToolBar.strings['Wiki link'] = 'Länk till en wikisida';
-jsToolBar.strings['Image'] = 'Bild';
-jsToolBar.strings['Edit'] = 'Ändra';
-jsToolBar.strings['Preview'] = 'Förhandsgranska';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-ta-in.js b/public/javascripts/jstoolbar/lang/jstoolbar-ta-in.js
deleted file mode 100644
index 533586a00..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-ta-in.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'வலுவான';
-jsToolBar.strings['Italic'] = 'சாய்வு';
-jsToolBar.strings['Underline'] = 'அடிக்கோடிட்டு';
-jsToolBar.strings['Deleted'] = 'நீக்கப்பட்டது';
-jsToolBar.strings['Code'] = 'இன்லைன் குறியீடு';
-jsToolBar.strings['Heading 1'] = 'தலைப்பு 1';
-jsToolBar.strings['Heading 2'] = 'தலைப்பு 2';
-jsToolBar.strings['Heading 3'] = 'தலைப்பு 3';
-jsToolBar.strings['Highlighted code'] = 'சிறப்பம்சமாக குறியீடு';
-jsToolBar.strings['Unordered list'] = 'வரிசைப்படுத்தப்படாத பட்டியல்';
-jsToolBar.strings['Ordered list'] = 'வரிசைப்படுத்தப்பட்ட பட்டியல்';
-jsToolBar.strings['Quote'] = 'மேற்கோள்';
-jsToolBar.strings['Unquote'] = 'மேற்கோளை அகற்று';
-jsToolBar.strings['Table'] = 'அட்டவணை';
-jsToolBar.strings['Preformatted text'] = 'முன்பே வடிவமைக்கப்பட்ட உரை';
-jsToolBar.strings['Wiki link'] = 'விக்கி பக்கத்துடன் இணைக்கவும்';
-jsToolBar.strings['Image'] = 'படம்';
-jsToolBar.strings['Edit'] = 'திருத்து';
-jsToolBar.strings['Preview'] = 'முன்னோட்டம்';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-th.js b/public/javascripts/jstoolbar/lang/jstoolbar-th.js
deleted file mode 100644
index 1969ce0c4..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-th.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'หนา';
-jsToolBar.strings['Italic'] = 'เอียง';
-jsToolBar.strings['Underline'] = 'ขีดเส้นใต้';
-jsToolBar.strings['Deleted'] = 'ขีดฆ่า';
-jsToolBar.strings['Code'] = 'โค๊ดโปรแกรม';
-jsToolBar.strings['Heading 1'] = 'หัวข้อ 1';
-jsToolBar.strings['Heading 2'] = 'หัวข้อ 2';
-jsToolBar.strings['Heading 3'] = 'หัวข้อ 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'รายการ';
-jsToolBar.strings['Ordered list'] = 'ลำดับเลข';
-jsToolBar.strings['Quote'] = 'Quote';
-jsToolBar.strings['Unquote'] = 'Remove Quote';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'รูปแบบข้อความคงที่';
-jsToolBar.strings['Wiki link'] = 'เชื่อมโยงไปหน้า Wiki อื่น';
-jsToolBar.strings['Image'] = 'รูปภาพ';
-jsToolBar.strings['Edit'] = 'แก้ไข';
-jsToolBar.strings['Preview'] = 'ตัวอย่างก่อนจัดเก็บ';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-tr.js b/public/javascripts/jstoolbar/lang/jstoolbar-tr.js
deleted file mode 100644
index 6d15a9c3e..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-tr.js
+++ /dev/null
@@ -1,18 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Kalın';
-jsToolBar.strings['Italic'] = 'İtalik';
-jsToolBar.strings['Underline'] = 'Altı çizgili';
-jsToolBar.strings['Deleted'] = 'Silinmiş';
-jsToolBar.strings['Code'] = 'Satır içi kod';
-jsToolBar.strings['Heading 1'] = 'Başlık 1';
-jsToolBar.strings['Heading 2'] = 'Başlık 2';
-jsToolBar.strings['Heading 3'] = 'Başlık 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Sırasız liste';
-jsToolBar.strings['Ordered list'] = 'Sıralı liste';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Preformatted text';
-jsToolBar.strings['Wiki link'] = 'Wiki sayfasına bağlantı';
-jsToolBar.strings['Image'] = 'Resim';
-jsToolBar.strings['Edit'] = 'Düzenle';
-jsToolBar.strings['Preview'] = 'Önizleme';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-uk.js b/public/javascripts/jstoolbar/lang/jstoolbar-uk.js
deleted file mode 100644
index 55ca7c568..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-uk.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Жирний';
-jsToolBar.strings['Italic'] = 'Курсив';
-jsToolBar.strings['Underline'] = 'Підкреслений';
-jsToolBar.strings['Deleted'] = 'Закреслений';
-jsToolBar.strings['Code'] = 'Інлайн код';
-jsToolBar.strings['Heading 1'] = 'Заголовок 1';
-jsToolBar.strings['Heading 2'] = 'Заголовок 2';
-jsToolBar.strings['Heading 3'] = 'Заголовок 3';
-jsToolBar.strings['Highlighted code'] = 'Виділений код';
-jsToolBar.strings['Unordered list'] = 'Ненумерованний список';
-jsToolBar.strings['Ordered list'] = 'Нумерований список';
-jsToolBar.strings['Quote'] = 'Цитування';
-jsToolBar.strings['Unquote'] = 'Видалити цитування';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Попередньо відформатований текст';
-jsToolBar.strings['Wiki link'] = 'Посилання на сторінку Wiki';
-jsToolBar.strings['Image'] = 'Зображення';
-jsToolBar.strings['Edit'] = 'Редагувати';
-jsToolBar.strings['Preview'] = 'Попередній перегляд';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-vi.js b/public/javascripts/jstoolbar/lang/jstoolbar-vi.js
deleted file mode 100644
index 30f74b69d..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-vi.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = 'Đậm';
-jsToolBar.strings['Italic'] = 'Nghiêng';
-jsToolBar.strings['Underline'] = 'Gạch chân';
-jsToolBar.strings['Deleted'] = 'Xóa';
-jsToolBar.strings['Code'] = 'Mã chung dòng';
-jsToolBar.strings['Heading 1'] = 'Tiêu đề 1';
-jsToolBar.strings['Heading 2'] = 'Tiêu đề 2';
-jsToolBar.strings['Heading 3'] = 'Tiêu đề 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = 'Danh sách không thứ tự';
-jsToolBar.strings['Ordered list'] = 'Danh sách có thứ tự';
-jsToolBar.strings['Quote'] = 'Trích dẫn';
-jsToolBar.strings['Unquote'] = 'Bỏ trích dẫn';
-jsToolBar.strings['Table'] = 'Table';
-jsToolBar.strings['Preformatted text'] = 'Mã nguồn';
-jsToolBar.strings['Wiki link'] = 'Liên kết đến trang wiki';
-jsToolBar.strings['Image'] = 'Ảnh';
-jsToolBar.strings['Edit'] = 'Sửa';
-jsToolBar.strings['Preview'] = 'Xem trước';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-zh-tw.js b/public/javascripts/jstoolbar/lang/jstoolbar-zh-tw.js
deleted file mode 100644
index 98bde9219..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-zh-tw.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = '粗體';
-jsToolBar.strings['Italic'] = '斜體';
-jsToolBar.strings['Underline'] = '底線';
-jsToolBar.strings['Deleted'] = '刪除線';
-jsToolBar.strings['Code'] = '程式碼';
-jsToolBar.strings['Heading 1'] = '標題 1';
-jsToolBar.strings['Heading 2'] = '標題 2';
-jsToolBar.strings['Heading 3'] = '標題 3';
-jsToolBar.strings['Highlighted code'] = '反白程式碼';
-jsToolBar.strings['Unordered list'] = '項目清單';
-jsToolBar.strings['Ordered list'] = '編號清單';
-jsToolBar.strings['Quote'] = '引文';
-jsToolBar.strings['Unquote'] = '取消引文';
-jsToolBar.strings['Table'] = '表格';
-jsToolBar.strings['Preformatted text'] = '已格式文字';
-jsToolBar.strings['Wiki link'] = '連結至 Wiki 頁面';
-jsToolBar.strings['Image'] = '圖片';
-jsToolBar.strings['Edit'] = '編輯';
-jsToolBar.strings['Preview'] = '預覽';
diff --git a/public/javascripts/jstoolbar/lang/jstoolbar-zh.js b/public/javascripts/jstoolbar/lang/jstoolbar-zh.js
deleted file mode 100644
index 335270480..000000000
--- a/public/javascripts/jstoolbar/lang/jstoolbar-zh.js
+++ /dev/null
@@ -1,20 +0,0 @@
-jsToolBar.strings = {};
-jsToolBar.strings['Strong'] = '粗体';
-jsToolBar.strings['Italic'] = '斜体';
-jsToolBar.strings['Underline'] = '下划线';
-jsToolBar.strings['Deleted'] = '删除线';
-jsToolBar.strings['Code'] = '程序代码';
-jsToolBar.strings['Heading 1'] = '标题 1';
-jsToolBar.strings['Heading 2'] = '标题 2';
-jsToolBar.strings['Heading 3'] = '标题 3';
-jsToolBar.strings['Highlighted code'] = 'Highlighted code';
-jsToolBar.strings['Unordered list'] = '无序列表';
-jsToolBar.strings['Ordered list'] = '排序列表';
-jsToolBar.strings['Quote'] = '引用';
-jsToolBar.strings['Unquote'] = '删除引用';
-jsToolBar.strings['Table'] = '表格';
-jsToolBar.strings['Preformatted text'] = '格式化文本';
-jsToolBar.strings['Wiki link'] = '连接到 Wiki 页面';
-jsToolBar.strings['Image'] = '图片';
-jsToolBar.strings['Edit'] = '编辑';
-jsToolBar.strings['Preview'] = '预览';
diff --git a/public/javascripts/jstoolbar/markdown.js b/public/javascripts/jstoolbar/markdown.js
deleted file mode 100644
index 62ad4674a..000000000
--- a/public/javascripts/jstoolbar/markdown.js
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * This file is part of DotClear.
- * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All rights reserved.
- * This code is released under the GNU General Public License.
- *
- * Modified by JP LANG for markdown formatting
- */
-
-// strong
-jsToolBar.prototype.elements.strong = {
- type: 'button',
- title: 'Strong',
- shortcut: 'b',
- fn: {
- wiki: function() { this.singleTag('**') }
- }
-}
-
-// em
-jsToolBar.prototype.elements.em = {
- type: 'button',
- title: 'Italic',
- shortcut: 'i',
- fn: {
- wiki: function() { this.singleTag("*") }
- }
-}
-
-// ins
-jsToolBar.prototype.elements.ins = {
- type: 'button',
- title: 'Underline',
- shortcut: 'u',
- fn: {
- wiki: function() { this.singleTag('_') }
- }
-}
-
-// del
-jsToolBar.prototype.elements.del = {
- type: 'button',
- title: 'Deleted',
- fn: {
- wiki: function() { this.singleTag('~~') }
- }
-}
-
-// code
-jsToolBar.prototype.elements.code = {
- type: 'button',
- title: 'Code',
- fn: {
- wiki: function() { this.singleTag('`') }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space1 = {type: 'space'}
-
-// headings
-jsToolBar.prototype.elements.h1 = {
- type: 'button',
- title: 'Heading 1',
- fn: {
- wiki: function() {
- this.encloseLineSelection('# ', '',function(str) {
- str = str.replace(/^#+\s+/, '')
- return str;
- });
- }
- }
-}
-jsToolBar.prototype.elements.h2 = {
- type: 'button',
- title: 'Heading 2',
- fn: {
- wiki: function() {
- this.encloseLineSelection('## ', '',function(str) {
- str = str.replace(/^#+\s+/, '')
- return str;
- });
- }
- }
-}
-jsToolBar.prototype.elements.h3 = {
- type: 'button',
- title: 'Heading 3',
- fn: {
- wiki: function() {
- this.encloseLineSelection('### ', '',function(str) {
- str = str.replace(/^#+\s+/, '')
- return str;
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space2 = {type: 'space'}
-
-// ul
-jsToolBar.prototype.elements.ul = {
- type: 'button',
- title: 'Unordered list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[#-]?\s*/g,"$1* ");
- });
- }
- }
-}
-
-// ol
-jsToolBar.prototype.elements.ol = {
- type: 'button',
- title: 'Ordered list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[*-]?\s*/g,"$11. ");
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space3 = {type: 'space'}
-
-// bq
-jsToolBar.prototype.elements.bq = {
- type: 'button',
- title: 'Quote',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)( *)([^\n]*)/g,"$1> $2$3");
- });
- }
- }
-}
-
-// unbq
-jsToolBar.prototype.elements.unbq = {
- type: 'button',
- title: 'Unquote',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^) *(> ?)?( *)([^\n]*)/g,"$1$3$4");
- });
- }
- }
-}
-
-// table
-jsToolBar.prototype.elements.table = {
- type: 'button',
- title: 'Table',
- fn: {
- wiki: function() {
- var This = this;
- this.tableMenu(function(cols, rowCount){
- This.encloseLineSelection(
- '|'+cols.join(' |')+' |\n' + // header
- Array(cols.length+1).join('|--')+'|\n' + // second line
- Array(rowCount+1).join(Array(cols.length+1).join('| ')+'|\n') // cells
- );
- });
- }
- }
-}
-
-// pre
-jsToolBar.prototype.elements.pre = {
- type: 'button',
- title: 'Preformatted text',
- fn: {
- wiki: function() { this.encloseLineSelection('```\n', '\n```') }
- }
-}
-
-// Code highlighting
-jsToolBar.prototype.elements.precode = {
- type: 'button',
- title: 'Highlighted code',
- fn: {
- wiki: function() {
- var This = this;
- this.precodeMenu(function(lang){
- This.encloseLineSelection('``` ' + lang + '\n', '\n```\n');
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space4 = {type: 'space'}
-
-// wiki page
-jsToolBar.prototype.elements.link = {
- type: 'button',
- title: 'Wiki link',
- fn: {
- wiki: function() { this.encloseSelection("[[", "]]") }
- }
-}
-// image
-jsToolBar.prototype.elements.img = {
- type: 'button',
- title: 'Image',
- fn: {
- wiki: function() { this.encloseSelection("") }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space5 = {type: 'space'}
-// help
-jsToolBar.prototype.elements.help = {
- type: 'button',
- title: 'Help',
- fn: {
- wiki: function() { window.open(this.help_link, '', 'resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes') }
- }
-}
diff --git a/public/javascripts/jstoolbar/textile.js b/public/javascripts/jstoolbar/textile.js
deleted file mode 100644
index 6bc68382c..000000000
--- a/public/javascripts/jstoolbar/textile.js
+++ /dev/null
@@ -1,229 +0,0 @@
-/**
- * This file is part of DotClear.
- * Copyright (c) 2005 Nicolas Martin & Olivier Meunier and contributors. All rights reserved.
- * This code is released under the GNU General Public License.
- *
- * Modified by JP LANG for textile formatting
- */
-
-// strong
-jsToolBar.prototype.elements.strong = {
- type: 'button',
- title: 'Strong',
- shortcut: 'b',
- fn: {
- wiki: function() { this.singleTag('*') }
- }
-}
-
-// em
-jsToolBar.prototype.elements.em = {
- type: 'button',
- title: 'Italic',
- shortcut: 'i',
- fn: {
- wiki: function() { this.singleTag("_") }
- }
-}
-
-// ins
-jsToolBar.prototype.elements.ins = {
- type: 'button',
- title: 'Underline',
- shortcut: 'u',
- fn: {
- wiki: function() { this.singleTag('+') }
- }
-}
-
-// del
-jsToolBar.prototype.elements.del = {
- type: 'button',
- title: 'Deleted',
- fn: {
- wiki: function() { this.singleTag('-') }
- }
-}
-
-// code
-jsToolBar.prototype.elements.code = {
- type: 'button',
- title: 'Code',
- fn: {
- wiki: function() { this.singleTag('@') }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space1 = {type: 'space'}
-
-// headings
-jsToolBar.prototype.elements.h1 = {
- type: 'button',
- title: 'Heading 1',
- fn: {
- wiki: function() {
- this.encloseLineSelection('h1. ', '',function(str) {
- str = str.replace(/^h\d+\.\s+/, '')
- return str;
- });
- }
- }
-}
-jsToolBar.prototype.elements.h2 = {
- type: 'button',
- title: 'Heading 2',
- fn: {
- wiki: function() {
- this.encloseLineSelection('h2. ', '',function(str) {
- str = str.replace(/^h\d+\.\s+/, '')
- return str;
- });
- }
- }
-}
-jsToolBar.prototype.elements.h3 = {
- type: 'button',
- title: 'Heading 3',
- fn: {
- wiki: function() {
- this.encloseLineSelection('h3. ', '',function(str) {
- str = str.replace(/^h\d+\.\s+/, '')
- return str;
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space2 = {type: 'space'}
-
-// ul
-jsToolBar.prototype.elements.ul = {
- type: 'button',
- title: 'Unordered list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[#-]?\s*/g,"$1* ");
- });
- }
- }
-}
-
-// ol
-jsToolBar.prototype.elements.ol = {
- type: 'button',
- title: 'Ordered list',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)[*-]?\s*/g,"$1# ");
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space3 = {type: 'space'}
-
-// bq
-jsToolBar.prototype.elements.bq = {
- type: 'button',
- title: 'Quote',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^)( *)([^\n]*)/g,"$1> $2$3");
- });
- }
- }
-}
-
-// unbq
-jsToolBar.prototype.elements.unbq = {
- type: 'button',
- title: 'Unquote',
- fn: {
- wiki: function() {
- this.encloseLineSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return str.replace(/(\n|^) *(> ?)?( *)([^\n]*)/g,"$1$3$4");
- });
- }
- }
-}
-
-// table
-jsToolBar.prototype.elements.table = {
- type: 'button',
- title: 'Table',
- fn: {
- wiki: function() {
- var This = this;
- this.tableMenu(function(cols, rowCount){
- This.encloseLineSelection(
- '|_.'+cols.join('|_.')+'|\n' + // header
- Array(rowCount+1).join(Array(cols.length+1).join('| ')+'|\n') // cells
- );
- });
- }
- }
-}
-
-// pre
-jsToolBar.prototype.elements.pre = {
- type: 'button',
- title: 'Preformatted text',
- fn: {
- wiki: function() { this.encloseLineSelection('\n', '\n
') }
- }
-}
-
-// Code highlighting
-jsToolBar.prototype.elements.precode = {
- type: 'button',
- title: 'Highlighted code',
- fn: {
- wiki: function() {
- var This = this;
- this.precodeMenu(function(lang){
- This.encloseLineSelection('\n', '\n
\n');
- });
- }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space4 = {type: 'space'}
-
-// wiki page
-jsToolBar.prototype.elements.link = {
- type: 'button',
- title: 'Wiki link',
- fn: {
- wiki: function() { this.encloseSelection("[[", "]]") }
- }
-}
-// image
-jsToolBar.prototype.elements.img = {
- type: 'button',
- title: 'Image',
- fn: {
- wiki: function() { this.encloseSelection("!", "!") }
- }
-}
-
-// spacer
-jsToolBar.prototype.elements.space5 = {type: 'space'}
-// help
-jsToolBar.prototype.elements.help = {
- type: 'button',
- title: 'Help',
- fn: {
- wiki: function() { window.open(this.help_link, '', 'resizable=yes, location=no, width=300, height=640, menubar=no, status=no, scrollbars=yes') }
- }
-}
diff --git a/public/javascripts/project_identifier.js b/public/javascripts/project_identifier.js
deleted file mode 100644
index 4bf7ad133..000000000
--- a/public/javascripts/project_identifier.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-// Automatic project identifier generation
-
-function generateProjectIdentifier(identifier, maxlength) {
- var diacriticsMap = [
- {'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
- {'base':'aa','letters':/[\uA733\uA732]/g},
- {'base':'ae','letters':/[\u00E4\u00E6\u01FD\u01E3\u00C4\u00C6\u01FC\u01E2]/g},
- {'base':'ao','letters':/[\uA735\uA734]/g},
- {'base':'au','letters':/[\uA737\uA736]/g},
- {'base':'av','letters':/[\uA739\uA73B\uA738\uA73A]/g},
- {'base':'ay','letters':/[\uA73D\uA73C]/g},
- {'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
- {'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
- {'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
- {'base':'dz','letters':/[\u01F3\u01C6\u01F1\u01C4\u01F2\u01C5]/g},
- {'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
- {'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
- {'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
- {'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
- {'base':'hv','letters':/[\u0195]/g},
- {'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
- {'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249\u004A\u24BF\uFF2A\u0134\u0248]/g},
- {'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
- {'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
- {'base':'lj','letters':/[\u01C9\u01C7\u01C8]/g},
- {'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
- {'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
- {'base':'nj','letters':/[\u01CC\u01CA\u01CB]/g},
- {'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
- {'base':'oe','letters': /[\u00F6\u0153\u00D6\u0152]/g},
- {'base':'oi','letters':/[\u01A3\u01A2]/g},
- {'base':'ou','letters':/[\u0223\u0222]/g},
- {'base':'oo','letters':/[\uA74F\uA74E]/g},
- {'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
- {'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
- {'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
- {'base':'s','letters':/[\u0073\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
- {'base':'ss','letters':/[\u00DF]/g},
- {'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
- {'base':'tz','letters':/[\uA729\uA728]/g},
- {'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
- {'base':'ue','letters':/[\u00FC\u00DC]/g},
- {'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
- {'base':'vy','letters':/[\uA761\uA760]/g},
- {'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
- {'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
- {'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
- {'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g}
- ];
-
- for(var i=0; i hyphen
- identifier = identifier.replace(/^[-_\d]*|[-_]*$/g, ''); // remove hyphens/underscores and numbers at beginning and hyphens/underscores at end
- identifier = identifier.toLowerCase(); // to lower
- identifier = identifier.substr(0, maxlength); // max characters
- return identifier;
-}
-
-function autoFillProjectIdentifier() {
- var locked = ($('#project_identifier').val() != '');
- var maxlength = parseInt($('#project_identifier').attr('maxlength'));
-
- $('#project_name').keyup(function(){
- if(!locked) {
- $('#project_identifier').val(generateProjectIdentifier($('#project_name').val(), maxlength));
- }
- });
-
- $('#project_identifier').keyup(function(){
- locked = ($('#project_identifier').val() != '' && $('#project_identifier').val() != generateProjectIdentifier($('#project_name').val(), maxlength));
- });
-}
-
-$(document).ready(function(){
- autoFillProjectIdentifier();
-});
diff --git a/public/javascripts/raphael.js b/public/javascripts/raphael.js
deleted file mode 100644
index be15ce600..000000000
--- a/public/javascripts/raphael.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Raphael=e():t.Raphael=e()}(window,function(){return function(t){var e={};function r(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,i){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(i,n,function(e){return t[e]}.bind(null,n));return i},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=1)}([function(t,e,r){var i,n;i=[r(2)],void 0===(n=function(t){function e(i){if(e.is(i,"function"))return r?i():t.on("raphael.DOMload",i);if(e.is(i,A))return e._engine.create[c](e,i.splice(0,3+e.is(i[0],T))).add(i);var n=Array.prototype.slice.call(arguments,0);if(e.is(n[n.length-1],"function")){var a=n.pop();return r?a.call(e._engine.create[c](e,n)):t.on("raphael.DOMload",function(){a.call(e._engine.create[c](e,n))})}return e._engine.create[c](e,arguments)}e.version="2.3.0",e.eve=t;var r,i,n=/[, ]+/,a={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},s=/\{(\d+)\}/g,o="hasOwnProperty",l={doc:document,win:window},h={was:Object.prototype[o].call(l.win,"Raphael"),is:l.win.Raphael},u=function(){this.ca=this.customAttributes={}},c="apply",f="concat",p="ontouchstart"in window||window.TouchEvent||window.DocumentTouch&&document instanceof DocumentTouch,d="",g=" ",x=String,v="split",y="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[v](g),m={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},b=x.prototype.toLowerCase,_=Math,w=_.max,k=_.min,B=_.abs,C=_.pow,S=_.PI,T="number",A="array",M=Object.prototype.toString,E=(e._ISURL=/^url\(['"]?(.+?)['"]?\)$/i,/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i),N={NaN:1,Infinity:1,"-Infinity":1},L=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,P=_.round,z=parseFloat,F=parseInt,R=x.prototype.toUpperCase,j=e._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/","letter-spacing":0,opacity:1,path:"M0,0",r:0,rx:0,ry:0,src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",transform:"",width:0,x:0,y:0,class:""},I=e._availableAnimAttrs={blur:T,"clip-rect":"csv",cx:T,cy:T,fill:"colour","fill-opacity":T,"font-size":T,height:T,opacity:T,path:"path",r:T,rx:T,ry:T,stroke:"colour","stroke-opacity":T,"stroke-width":T,transform:"transform",width:T,x:T,y:T},D=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,q={hs:1,rg:1},O=/,?([achlmqrstvxz]),?/gi,V=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,W=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,Y=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi,G=(e._radial_gradient=/^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,{}),H=function(t,e){return z(t)-z(e)},X=function(t){return t},U=e._rectPath=function(t,e,r,i,n){return n?[["M",t+n,e],["l",r-2*n,0],["a",n,n,0,0,1,n,n],["l",0,i-2*n],["a",n,n,0,0,1,-n,n],["l",2*n-r,0],["a",n,n,0,0,1,-n,-n],["l",0,2*n-i],["a",n,n,0,0,1,n,-n],["z"]]:[["M",t,e],["l",r,0],["l",0,i],["l",-r,0],["z"]]},$=function(t,e,r,i){return null==i&&(i=r),[["M",t,e],["m",0,-i],["a",r,i,0,1,1,0,2*i],["a",r,i,0,1,1,0,-2*i],["z"]]},Z=e._getPath={path:function(t){return t.attr("path")},circle:function(t){var e=t.attrs;return $(e.cx,e.cy,e.r)},ellipse:function(t){var e=t.attrs;return $(e.cx,e.cy,e.rx,e.ry)},rect:function(t){var e=t.attrs;return U(e.x,e.y,e.width,e.height,e.r)},image:function(t){var e=t.attrs;return U(e.x,e.y,e.width,e.height)},text:function(t){var e=t._getBBox();return U(e.x,e.y,e.width,e.height)},set:function(t){var e=t._getBBox();return U(e.x,e.y,e.width,e.height)}},Q=e.mapPath=function(t,e){if(!e)return t;var r,i,n,a,s,o,l;for(n=0,s=(t=Tt(t)).length;n',(J=K.firstChild).style.behavior="url(#default#VML)",!J||"object"!=typeof J.adj)return e.type=d;K=null}function tt(t){if("function"==typeof t||Object(t)!==t)return t;var e=new t.constructor;for(var r in t)t[o](r)&&(e[r]=tt(t[r]));return e}e.svg=!(e.vml="VML"==e.type),e._Paper=u,e.fn=i=u.prototype=e.prototype,e._id=0,e.is=function(t,e){return"finite"==(e=b.call(e))?!N[o](+t):"array"==e?t instanceof Array:"null"==e&&null===t||e==typeof t&&null!==t||"object"==e&&t===Object(t)||"array"==e&&Array.isArray&&Array.isArray(t)||M.call(t).slice(8,-1).toLowerCase()==e},e.angle=function(t,r,i,n,a,s){if(null==a){var o=t-i,l=r-n;return o||l?(180+180*_.atan2(-l,-o)/S+360)%360:0}return e.angle(t,r,a,s)-e.angle(i,n,a,s)},e.rad=function(t){return t%360*S/180},e.deg=function(t){return Math.round(180*t/S%360*1e3)/1e3},e.snapTo=function(t,r,i){if(i=e.is(i,"finite")?i:10,e.is(t,A)){for(var n=t.length;n--;)if(B(t[n]-r)<=i)return t[n]}else{var a=r%(t=+t);if(at-i)return r-a+t}return r};var et,rt;e.createUUID=(et=/[xy]/g,rt=function(t){var e=16*_.random()|0;return("x"==t?e:3&e|8).toString(16)},function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(et,rt).toUpperCase()});e.setWindow=function(r){t("raphael.setWindow",e,l.win,r),l.win=r,l.doc=l.win.document,e._engine.initWin&&e._engine.initWin(l.win)};var it=function(t){if(e.vml){var r,i=/^\s+|\s+$/g;try{var n=new ActiveXObject("htmlfile");n.write(""),n.close(),r=n.body}catch(t){r=createPopup().document.body}var a=r.createTextRange();it=ht(function(t){try{r.style.color=x(t).replace(i,d);var e=a.queryCommandValue("ForeColor");return"#"+("000000"+(e=(255&e)<<16|65280&e|(16711680&e)>>>16).toString(16)).slice(-6)}catch(t){return"none"}})}else{var s=l.doc.createElement("i");s.title="Raphaël Colour Picker",s.style.display="none",l.doc.body.appendChild(s),it=ht(function(t){return s.style.color=t,l.doc.defaultView.getComputedStyle(s,d).getPropertyValue("color")})}return it(t)},nt=function(){return"hsb("+[this.h,this.s,this.b]+")"},at=function(){return"hsl("+[this.h,this.s,this.l]+")"},st=function(){return this.hex},ot=function(t,r,i){if(null==r&&e.is(t,"object")&&"r"in t&&"g"in t&&"b"in t&&(i=t.b,r=t.g,t=t.r),null==r&&e.is(t,"string")){var n=e.getRGB(t);t=n.r,r=n.g,i=n.b}return(t>1||r>1||i>1)&&(t/=255,r/=255,i/=255),[t,r,i]},lt=function(t,r,i,n){var a={r:t*=255,g:r*=255,b:i*=255,hex:e.rgb(t,r,i),toString:st};return e.is(n,"finite")&&(a.opacity=n),a};function ht(t,e,r){return function i(){var n=Array.prototype.slice.call(arguments,0),a=n.join("␀"),s=i.cache=i.cache||{},l=i.count=i.count||[];return s[o](a)?(function(t,e){for(var r=0,i=t.length;r=1e3&&delete s[l.shift()],l.push(a),s[a]=t[c](e,n),r?r(s[a]):s[a])}}e.color=function(t){var r;return e.is(t,"object")&&"h"in t&&"s"in t&&"b"in t?(r=e.hsb2rgb(t),t.r=r.r,t.g=r.g,t.b=r.b,t.hex=r.hex):e.is(t,"object")&&"h"in t&&"s"in t&&"l"in t?(r=e.hsl2rgb(t),t.r=r.r,t.g=r.g,t.b=r.b,t.hex=r.hex):(e.is(t,"string")&&(t=e.getRGB(t)),e.is(t,"object")&&"r"in t&&"g"in t&&"b"in t?(r=e.rgb2hsl(t),t.h=r.h,t.s=r.s,t.l=r.l,r=e.rgb2hsb(t),t.v=r.b):(t={hex:"none"}).r=t.g=t.b=t.h=t.s=t.v=t.l=-1),t.toString=st,t},e.hsb2rgb=function(t,e,r,i){var n,a,s,o,l;return this.is(t,"object")&&"h"in t&&"s"in t&&"b"in t&&(r=t.b,e=t.s,i=t.o,t=t.h),o=(l=r*e)*(1-B((t=(t*=360)%360/60)%2-1)),n=a=s=r-l,lt(n+=[l,o,0,0,o,l][t=~~t],a+=[o,l,l,o,0,0][t],s+=[0,0,o,l,l,o][t],i)},e.hsl2rgb=function(t,e,r,i){var n,a,s,o,l;return this.is(t,"object")&&"h"in t&&"s"in t&&"l"in t&&(r=t.l,e=t.s,t=t.h),(t>1||e>1||r>1)&&(t/=360,e/=100,r/=100),o=(l=2*e*(r<.5?r:1-r))*(1-B((t=(t*=360)%360/60)%2-1)),n=a=s=r-l/2,lt(n+=[l,o,0,0,o,l][t=~~t],a+=[o,l,l,o,0,0][t],s+=[0,0,o,l,l,o][t],i)},e.rgb2hsb=function(t,e,r){var i,n;return t=(r=ot(t,e,r))[0],e=r[1],r=r[2],{h:((0==(n=(i=w(t,e,r))-k(t,e,r))?null:i==t?(e-r)/n:i==e?(r-t)/n+2:(t-e)/n+4)+360)%6*60/360,s:0==n?0:n/i,b:i,toString:nt}},e.rgb2hsl=function(t,e,r){var i,n,a,s;return t=(r=ot(t,e,r))[0],e=r[1],r=r[2],i=((n=w(t,e,r))+(a=k(t,e,r)))/2,{h:((0==(s=n-a)?null:n==t?(e-r)/s:n==e?(r-t)/s+2:(t-e)/s+4)+360)%6*60/360,s:0==s?0:i<.5?s/(2*i):s/(2-2*i),l:i,toString:at}},e._path2string=function(){return this.join(",").replace(O,"$1")};e._preload=function(t,e){var r=l.doc.createElement("img");r.style.cssText="position:absolute;left:-9999em;top:-9999em",r.onload=function(){e.call(this),this.onload=null,l.doc.body.removeChild(this)},r.onerror=function(){l.doc.body.removeChild(this)},l.doc.body.appendChild(r),r.src=t};function ut(){return this.hex}function ct(t,e){for(var r=[],i=0,n=t.length;n-2*!e>i;i+=2){var a=[{x:+t[i-2],y:+t[i-1]},{x:+t[i],y:+t[i+1]},{x:+t[i+2],y:+t[i+3]},{x:+t[i+4],y:+t[i+5]}];e?i?n-4==i?a[3]={x:+t[0],y:+t[1]}:n-2==i&&(a[2]={x:+t[0],y:+t[1]},a[3]={x:+t[2],y:+t[3]}):a[0]={x:+t[n-2],y:+t[n-1]}:n-4==i?a[3]=a[2]:i||(a[0]={x:+t[i],y:+t[i+1]}),r.push(["C",(-a[0].x+6*a[1].x+a[2].x)/6,(-a[0].y+6*a[1].y+a[2].y)/6,(a[1].x+6*a[2].x-a[3].x)/6,(a[1].y+6*a[2].y-a[3].y)/6,a[2].x,a[2].y])}return r}e.getRGB=ht(function(t){if(!t||(t=x(t)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ut};if("none"==t)return{r:-1,g:-1,b:-1,hex:"none",toString:ut};!q[o](t.toLowerCase().substring(0,2))&&"#"!=t.charAt()&&(t=it(t));var r,i,n,a,s,l,h=t.match(E);return h?(h[2]&&(n=F(h[2].substring(5),16),i=F(h[2].substring(3,5),16),r=F(h[2].substring(1,3),16)),h[3]&&(n=F((s=h[3].charAt(3))+s,16),i=F((s=h[3].charAt(2))+s,16),r=F((s=h[3].charAt(1))+s,16)),h[4]&&(l=h[4][v](D),r=z(l[0]),"%"==l[0].slice(-1)&&(r*=2.55),i=z(l[1]),"%"==l[1].slice(-1)&&(i*=2.55),n=z(l[2]),"%"==l[2].slice(-1)&&(n*=2.55),"rgba"==h[1].toLowerCase().slice(0,4)&&(a=z(l[3])),l[3]&&"%"==l[3].slice(-1)&&(a/=100)),h[5]?(l=h[5][v](D),r=z(l[0]),"%"==l[0].slice(-1)&&(r*=2.55),i=z(l[1]),"%"==l[1].slice(-1)&&(i*=2.55),n=z(l[2]),"%"==l[2].slice(-1)&&(n*=2.55),("deg"==l[0].slice(-3)||"°"==l[0].slice(-1))&&(r/=360),"hsba"==h[1].toLowerCase().slice(0,4)&&(a=z(l[3])),l[3]&&"%"==l[3].slice(-1)&&(a/=100),e.hsb2rgb(r,i,n,a)):h[6]?(l=h[6][v](D),r=z(l[0]),"%"==l[0].slice(-1)&&(r*=2.55),i=z(l[1]),"%"==l[1].slice(-1)&&(i*=2.55),n=z(l[2]),"%"==l[2].slice(-1)&&(n*=2.55),("deg"==l[0].slice(-3)||"°"==l[0].slice(-1))&&(r/=360),"hsla"==h[1].toLowerCase().slice(0,4)&&(a=z(l[3])),l[3]&&"%"==l[3].slice(-1)&&(a/=100),e.hsl2rgb(r,i,n,a)):((h={r:r,g:i,b:n,toString:ut}).hex="#"+(16777216|n|i<<8|r<<16).toString(16).slice(1),e.is(a,"finite")&&(h.opacity=a),h)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:ut}},e),e.hsb=ht(function(t,r,i){return e.hsb2rgb(t,r,i).hex}),e.hsl=ht(function(t,r,i){return e.hsl2rgb(t,r,i).hex}),e.rgb=ht(function(t,e,r){function i(t){return t+.5|0}return"#"+(16777216|i(r)|i(e)<<8|i(t)<<16).toString(16).slice(1)}),e.getColor=function(t){var e=this.getColor.start=this.getColor.start||{h:0,s:1,b:t||.75},r=this.hsb2rgb(e.h,e.s,e.b);return e.h+=.075,e.h>1&&(e.h=0,e.s-=.2,e.s<=0&&(this.getColor.start={h:0,s:1,b:e.b})),r.hex},e.getColor.reset=function(){delete this.start},e.parsePathString=function(t){if(!t)return null;var r=ft(t);if(r.arr)return mt(r.arr);var i={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},n=[];return e.is(t,A)&&e.is(t[0],A)&&(n=mt(t)),n.length||x(t).replace(V,function(t,e,r){var a=[],s=e.toLowerCase();if(r.replace(Y,function(t,e){e&&a.push(+e)}),"m"==s&&a.length>2&&(n.push([e][f](a.splice(0,2))),s="l",e="m"==e?"l":"L"),"r"==s)n.push([e][f](a));else for(;a.length>=i[s]&&(n.push([e][f](a.splice(0,i[s]))),i[s]););}),n.toString=e._path2string,r.arr=mt(n),n},e.parseTransformString=ht(function(t){if(!t)return null;var r=[];return e.is(t,A)&&e.is(t[0],A)&&(r=mt(t)),r.length||x(t).replace(W,function(t,e,i){var n=[];b.call(e);i.replace(Y,function(t,e){e&&n.push(+e)}),r.push([e][f](n))}),r.toString=e._path2string,r},this,function(t){if(!t)return t;for(var e=[],r=0;r1?1:l<0?0:l)/2,u=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],c=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],f=0,p=0;p<12;p++){var d=h*u[p]+h,g=pt(d,t,r,n,s),x=pt(d,e,i,a,o),v=g*g+x*x;f+=c[p]*_.sqrt(v)}return h*f}function gt(t,e,r,i,n,a,s,o){if(!(w(t,r)w(n,s)||w(e,i)w(a,o))){var l=(t-r)*(a-o)-(e-i)*(n-s);if(l){var h=((t*i-e*r)*(n-s)-(t-r)*(n*o-a*s))/l,u=((t*i-e*r)*(a-o)-(e-i)*(n*o-a*s))/l,c=+h.toFixed(2),f=+u.toFixed(2);if(!(c<+k(t,r).toFixed(2)||c>+w(t,r).toFixed(2)||c<+k(n,s).toFixed(2)||c>+w(n,s).toFixed(2)||f<+k(e,i).toFixed(2)||f>+w(e,i).toFixed(2)||f<+k(a,o).toFixed(2)||f>+w(a,o).toFixed(2)))return{x:h,y:u}}}}function xt(t,r,i){var n=e.bezierBBox(t),a=e.bezierBBox(r);if(!e.isBBoxIntersect(n,a))return i?0:[];for(var s=dt.apply(0,t),o=dt.apply(0,r),l=w(~~(s/5),1),h=w(~~(o/5),1),u=[],c=[],f={},p=i?0:[],d=0;d=0&&T<=1.001&&A>=0&&A<=1.001&&(i?p++:p.push({x:S.x,y:S.y,t1:k(T,1),t2:k(A,1)}))}}return p}function vt(t,r,i){t=e._path2curve(t),r=e._path2curve(r);for(var n,a,s,o,l,h,u,c,f,p,d=i?0:[],g=0,x=t.length;gy||v=t.x&&e<=t.x2&&r>=t.y&&r<=t.y2},e.isBBoxIntersect=function(t,r){var i=e.isPointInsideBBox;return i(r,t.x,t.y)||i(r,t.x2,t.y)||i(r,t.x,t.y2)||i(r,t.x2,t.y2)||i(t,r.x,r.y)||i(t,r.x2,r.y)||i(t,r.x,r.y2)||i(t,r.x2,r.y2)||(t.xr.x||r.xt.x)&&(t.yr.y||r.yt.y)},e.pathIntersection=function(t,e){return vt(t,e)},e.pathIntersectionNumber=function(t,e){return vt(t,e,1)},e.isPointInsidePath=function(t,r,i){var n=e.pathBBox(t);return e.isPointInsideBBox(n,r,i)&&vt(t,[["M",r,i],["H",n.x2+10]],1)%2==1},e._removedFactory=function(e){return function(){t("raphael.log",null,"Raphaël: you are calling to method “"+e+"” of removed object",e)}};var yt=e.pathBBox=function(t){var e=ft(t);if(e.bbox)return tt(e.bbox);if(!t)return{x:0,y:0,width:0,height:0,x2:0,y2:0};for(var r,i=0,n=0,a=[],s=[],o=0,l=(t=Tt(t)).length;o1&&(r*=m=_.sqrt(m),i*=m);var b=r*r,w=i*i,k=(a==s?-1:1)*_.sqrt(B((b*w-b*y*y-w*x*x)/(b*y*y+w*x*x))),C=k*r*y/i+(t+o)/2,T=k*-i*x/r+(e+l)/2,A=_.asin(((e-T)/i).toFixed(9)),M=_.asin(((l-T)/i).toFixed(9));(A=tM&&(A-=2*S),!s&&M>A&&(M-=2*S)}var E=M-A;if(B(E)>c){var N=M,L=o,P=l;M=A+c*(s&&M>A?1:-1),o=C+r*_.cos(M),l=T+i*_.sin(M),d=Bt(o,l,r,i,n,0,s,L,P,[M,N,C,T])}E=M-A;var z=_.cos(A),F=_.sin(A),R=_.cos(M),j=_.sin(M),I=_.tan(E/4),D=4/3*r*I,q=4/3*i*I,O=[t,e],V=[t+D*F,e-q*z],W=[o+D*j,l-q*R],Y=[o,l];if(V[0]=2*O[0]-V[0],V[1]=2*O[1]-V[1],h)return[V,W,Y][f](d);for(var G=[],H=0,X=(d=[V,W,Y][f](d).join()[v](",")).length;H"1e12"&&(p=.5),B(d)>"1e12"&&(d=.5),p>0&&p<1&&(l=Ct(t,e,r,i,n,a,s,o,p),x.push(l.x),g.push(l.y)),d>0&&d<1&&(l=Ct(t,e,r,i,n,a,s,o,d),x.push(l.x),g.push(l.y)),h=a-2*i+e-(o-2*a+i),f=e-i,p=(-(u=2*(i-e)-2*(a-i))+_.sqrt(u*u-4*h*f))/2/h,d=(-u-_.sqrt(u*u-4*h*f))/2/h,B(p)>"1e12"&&(p=.5),B(d)>"1e12"&&(d=.5),p>0&&p<1&&(l=Ct(t,e,r,i,n,a,s,o,p),x.push(l.x),g.push(l.y)),d>0&&d<1&&(l=Ct(t,e,r,i,n,a,s,o,d),x.push(l.x),g.push(l.y)),{min:{x:k[c](0,x),y:k[c](0,g)},max:{x:w[c](0,x),y:w[c](0,g)}}}),Tt=e._path2curve=ht(function(t,e){var r=!e&&ft(t);if(!e&&r.curve)return mt(r.curve);for(var i=_t(t),n=e&&_t(e),a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},s={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},o=function(t,e,r){var i,n;if(!t)return["C",e.x,e.y,e.x,e.y,e.x,e.y];switch(!(t[0]in{T:1,Q:1})&&(e.qx=e.qy=null),t[0]){case"M":e.X=t[1],e.Y=t[2];break;case"A":t=["C"][f](Bt[c](0,[e.x,e.y][f](t.slice(1))));break;case"S":"C"==r||"S"==r?(i=2*e.x-e.bx,n=2*e.y-e.by):(i=e.x,n=e.y),t=["C",i,n][f](t.slice(1));break;case"T":"Q"==r||"T"==r?(e.qx=2*e.x-e.qx,e.qy=2*e.y-e.qy):(e.qx=e.x,e.qy=e.y),t=["C"][f](kt(e.x,e.y,e.qx,e.qy,t[1],t[2]));break;case"Q":e.qx=t[1],e.qy=t[2],t=["C"][f](kt(e.x,e.y,t[1],t[2],t[3],t[4]));break;case"L":t=["C"][f](wt(e.x,e.y,t[1],t[2]));break;case"H":t=["C"][f](wt(e.x,e.y,t[1],e.y));break;case"V":t=["C"][f](wt(e.x,e.y,e.x,t[1]));break;case"Z":t=["C"][f](wt(e.x,e.y,e.X,e.Y))}return t},l=function(t,e){if(t[e].length>7){t[e].shift();for(var r=t[e];r.length;)u[e]="A",n&&(p[e]="A"),t.splice(e++,0,["C"][f](r.splice(0,6)));t.splice(e,1),v=w(i.length,n&&n.length||0)}},h=function(t,e,r,a,s){t&&e&&"M"==t[s][0]&&"M"!=e[s][0]&&(e.splice(s,0,["M",a.x,a.y]),r.bx=0,r.by=0,r.x=t[s][1],r.y=t[s][2],v=w(i.length,n&&n.length||0))},u=[],p=[],d="",g="",x=0,v=w(i.length,n&&n.length||0);x.01;)h=dt(t,e,r,i,n,a,s,o,c+=(hn){if(r&&!f.start){if(c+=["C"+(u=Xt(s,o,l[1],l[2],l[3],l[4],l[5],l[6],n-p)).start.x,u.start.y,u.m.x,u.m.y,u.x,u.y],a)return c;f.start=c,c=["M"+u.x,u.y+"C"+u.n.x,u.n.y,u.end.x,u.end.y,l[5],l[6]].join(),p+=h,s=+l[5],o=+l[6];continue}if(!t&&!r)return{x:(u=Xt(s,o,l[1],l[2],l[3],l[4],l[5],l[6],n-p)).x,y:u.y,alpha:u.alpha}}p+=h,s=+l[5],o=+l[6]}c+=l.shift()+l}return f.end=c,(u=t?p:r?f:e.findDotsAtSegment(s,o,l[0],l[1],l[2],l[3],l[4],l[5],1)).alpha&&(u={x:u.x,y:u.y,alpha:u.alpha}),u}},$t=Ut(1),Zt=Ut(),Qt=Ut(0,1);e.getTotalLength=$t,e.getPointAtLength=Zt,e.getSubpath=function(t,e,r){if(this.getTotalLength(t)-r<1e-6)return Qt(t,e).end;var i=Qt(t,r,1);return e?Qt(i,e).end:i},Wt.getTotalLength=function(){var t=this.getPath();if(t)return this.node.getTotalLength?this.node.getTotalLength():$t(t)},Wt.getPointAtLength=function(t){var e=this.getPath();if(e)return Zt(e,t)},Wt.getPath=function(){var t,r=e._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return r&&(t=r(this)),t},Wt.getSubpath=function(t,r){var i=this.getPath();if(i)return e.getSubpath(i,t,r)};var Jt=e.easing_formulas={linear:function(t){return t},"<":function(t){return C(t,1.7)},">":function(t){return C(t,.48)},"<>":function(t){var e=.48-t/1.04,r=_.sqrt(.1734+e*e),i=r-e,n=-r-e,a=C(B(i),1/3)*(i<0?-1:1)+C(B(n),1/3)*(n<0?-1:1)+.5;return 3*(1-a)*a*a+a*a*a},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},elastic:function(t){return t==!!t?t:C(2,-10*t)*_.sin(2*S*(t-.075)/.3)+1},bounce:function(t){var e=7.5625,r=2.75;return t<1/r?e*t*t:t<2/r?e*(t-=1.5/r)*t+.75:t<2.5/r?e*(t-=2.25/r)*t+.9375:e*(t-=2.625/r)*t+.984375}};Jt.easeIn=Jt["ease-in"]=Jt["<"],Jt.easeOut=Jt["ease-out"]=Jt[">"],Jt.easeInOut=Jt["ease-in-out"]=Jt["<>"],Jt["back-in"]=Jt.backIn,Jt["back-out"]=Jt.backOut;var Kt=[],te=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){setTimeout(t,16)},ee=function(){for(var r=+new Date,i=0;i1&&!n.next){for(s in d)d[o](s)&&(y[s]=n.totalOrigin[s]);n.el.attr(y),ae(n.anim,n.el,n.anim.percents[0],null,n.totalOrigin,n.repeat-1)}n.next&&!n.stop&&ae(n.anim,n.el,n.next,null,n.totalOrigin,n.repeat)}}}Kt.length&&te(ee)},re=function(t){return t>255?255:t<0?0:t};function ie(t,e,r,i,n,a){var s=3*e,o=3*(i-e)-s,l=1-s-o,h=3*r,u=3*(n-r)-h,c=1-h-u;function f(t){return((l*t+o)*t+s)*t}return function(t,e){var r=function(t,e){var r,i,n,a,h,u;for(n=t,u=0;u<8;u++){if(a=f(n)-t,B(a)i)return i;for(;ra?r=n:i=n,n=(i-r)/2+r}return n}(t,e);return((c*r+u)*r+h)*r}(t,1/(200*a))}function ne(t,e){var r=[],i={};if(this.ms=e,this.times=1,t){for(var n in t)t[o](n)&&(i[z(n)]=t[n],r.push(z(n)));r.sort(H)}this.anim=i,this.top=r[r.length-1],this.percents=r}function ae(r,i,a,s,l,h){a=z(a);var u,c,p,d,g,y,m=r.ms,b={},_={},w={};if(s)for(B=0,C=Kt.length;Bs*r.top){a=r.percents[B],g=r.percents[B-1]||0,m=m/r.top*(a-g),d=r.percents[B+1],u=r.anim[a];break}s&&i.attr(r.anim[r.percents[B]])}if(u){if(c)c.initstatus=s,c.start=new Date-c.ms*s;else{for(var S in u)if(u[o](S)&&(I[o](S)||i.paper.customAttributes[o](S)))switch(b[S]=i.attr(S),null==b[S]&&(b[S]=j[S]),_[S]=u[S],I[S]){case T:w[S]=(_[S]-b[S])/m;break;case"colour":b[S]=e.getRGB(b[S]);var A=e.getRGB(_[S]);w[S]={r:(A.r-b[S].r)/m,g:(A.g-b[S].g)/m,b:(A.b-b[S].b)/m};break;case"path":var M=Tt(b[S],_[S]),E=M[1];for(b[S]=M[0],w[S]=[],B=0,C=b[S].length;Bh&&(h=c)}!t[h+="%"].callback&&(t[h].callback=n)}return new ne(t,r)},Wt.animate=function(t,r,i,n){if(this.removed)return n&&n.call(this),this;var a=t instanceof ne?t:e.animation(t,r,i,n);return ae(a,this,a.percents[0],null,this.attr()),this},Wt.setTime=function(t,e){return t&&null!=e&&this.status(t,k(e,t.ms)/t.ms),this},Wt.status=function(t,e){var r,i,n=[],a=0;if(null!=e)return ae(t,this,-1,k(e,1)),this;for(r=Kt.length;a1)for(var i=0,n=r.length;i.5)-1;l(f-.5,2)+l(p-.5,2)>.25&&(p=a.sqrt(.25-l(f-.5,2))*n+.5)&&.5!=p&&(p=p.toFixed(5)-1e-5*n)}return c})).split(/\s*\-\s*/),"linear"==h){var b=n.shift();if(b=-i(b),isNaN(b))return null;var _=[0,0,a.cos(t.rad(b)),a.sin(t.rad(b))],w=1/(s(o(_[2]),o(_[3]))||1);_[2]*=w,_[3]*=w,_[2]<0&&(_[0]=-_[2],_[2]=0),_[3]<0&&(_[1]=-_[3],_[3]=0)}var k=t._parseDots(n);if(!k)return null;if(u=u.replace(/[\(\)\s,\xb0#]/g,"_"),e.gradient&&u!=e.gradient.id&&(g.defs.removeChild(e.gradient),delete e.gradient),!e.gradient){m=x(h+"Gradient",{id:u}),e.gradient=m,x(m,"radial"==h?{fx:f,fy:p}:{x1:_[0],y1:_[1],x2:_[2],y2:_[3],gradientTransform:e.matrix.invert()}),g.defs.appendChild(m);for(var B=0,C=k.length;B1?P.opacity/100:P.opacity});case"stroke":P=t.getRGB(g),l.setAttribute(d,P.hex),"stroke"==d&&P[e]("opacity")&&x(l,{"stroke-opacity":P.opacity>1?P.opacity/100:P.opacity}),"stroke"==d&&i._.arrows&&("startString"in i._.arrows&&b(i,i._.arrows.startString),"endString"in i._.arrows&&b(i,i._.arrows.endString,1));break;case"gradient":("circle"==i.type||"ellipse"==i.type||"r"!=r(g).charAt())&&v(i,g);break;case"opacity":u.gradient&&!u[e]("stroke-opacity")&&x(l,{"stroke-opacity":g>1?g/100:g});case"fill-opacity":if(u.gradient){(z=t._g.doc.getElementById(l.getAttribute("fill").replace(/^url\(#|\)$/g,c)))&&(F=z.getElementsByTagName("stop"),x(F[F.length-1],{"stop-opacity":g}));break}default:"font-size"==d&&(g=n(g,10)+"px");var R=d.replace(/(\-.)/g,function(t){return t.substring(1).toUpperCase()});l.style[R]=g,i._.dirty=1,l.setAttribute(d,g)}}B(i,a),l.style.visibility=f},B=function(i,a){if("text"==i.type&&(a[e]("text")||a[e]("font")||a[e]("font-size")||a[e]("x")||a[e]("y"))){var s=i.attrs,o=i.node,l=o.firstChild?n(t._g.doc.defaultView.getComputedStyle(o.firstChild,c).getPropertyValue("font-size"),10):10;if(a[e]("text")){for(s.text=a.text;o.firstChild;)o.removeChild(o.firstChild);for(var h,u=r(a.text).split("\n"),f=[],p=0,d=u.length;p"));var U=H.getBoundingClientRect();T.W=g.w=(U.right-U.left)/100,T.H=g.h=(U.bottom-U.top)/100,T.X=g.x,T.Y=g.y+T.H/2,("x"in l||"y"in l)&&(T.path.v=t.format("m{0},{1}l{2},{1}",a(g.x*y),a(g.y*y),a(g.x*y)+1));for(var $=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,Q=$.length;Z.25&&(r=n.sqrt(.25-o(e-.5,2))*(2*(r>.5)-1)+.5),h=e+c+r),f})).split(/\s*\-\s*/),"linear"==l){var u=a.shift();if(u=-i(u),isNaN(u))return null}var p=t._parseDots(a);if(!p)return null;if(e=e.shape||e.node,p.length){e.removeChild(s),s.on=!0,s.method="none",s.color=p[0].color,s.color2=p[p.length-1].color;for(var d=[],g=0,x=p.length;g')}}catch(t){k=function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},t._engine.initWin(t._g.win),t._engine.create=function(){var e=t._getContainer.apply(0,arguments),r=e.container,i=e.height,n=e.width,a=e.x,s=e.y;if(!r)throw new Error("VML container not found.");var o=new t._Paper,l=o.canvas=t._g.doc.createElement("div"),h=l.style;return a=a||0,s=s||0,n=n||512,i=i||342,o.width=n,o.height=i,n==+n&&(n+="px"),i==+i&&(i+="px"),o.coordsize=216e5+c+216e5,o.coordorigin="0 0",o.span=t._g.doc.createElement("span"),o.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",l.appendChild(o.span),h.cssText=t.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",n,i),1==r?(t._g.doc.body.appendChild(l),h.left=a+"px",h.top=s+"px",h.position="absolute"):r.firstChild?r.insertBefore(l,r.firstChild):r.appendChild(l),o.renderfix=function(){},o},t.prototype.clear=function(){t.eve("raphael.clear",this),this.canvas.innerHTML=f,this.span=t._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},t.prototype.remove=function(){for(var e in t.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas),this)this[e]="function"==typeof this[e]?t._removedFactory(e):null;return!0};var M=t.st;for(var E in A)A[e](E)&&!M[e](E)&&(M[E]=function(t){return function(){var e=arguments;return this.forEach(function(r){r[t].apply(r,e)})}}(E))}}.apply(e,i))||(t.exports=n)}])});
\ No newline at end of file
diff --git a/public/javascripts/repository_navigation.js b/public/javascripts/repository_navigation.js
deleted file mode 100644
index f97ef6e09..000000000
--- a/public/javascripts/repository_navigation.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-$(document).ready(function() {
- /*
- If we're viewing a tag or branch, don't display it in the
- revision box
- */
- var branch_selected = $('#branch').length > 0 && $('#rev').val() == $('#branch').val();
- var tag_selected = $('#tag').length > 0 && $('#rev').val() == $('#tag').val();
- if (branch_selected || tag_selected) {
- $('#rev').val('');
- }
-
- /*
- Copy the branch/tag value into the revision box, then disable
- the dropdowns before submitting the form
- */
- $('#branch,#tag').change(function() {
- $('#rev').val($(this).val());
- $('#branch,#tag').attr('disabled', true);
- $(this).parent().submit();
- $('#branch,#tag').removeAttr('disabled');
- });
-
- /*
- Disable the branch/tag dropdowns before submitting the revision form
- */
- $('#rev').keydown(function(e) {
- if (e.keyCode == 13) {
- $('#branch,#tag').attr('disabled', true);
- $(this).parent().submit();
- $('#branch,#tag').removeAttr('disabled');
- }
- });
-})
diff --git a/public/javascripts/responsive.js b/public/javascripts/responsive.js
deleted file mode 100644
index f3593243d..000000000
--- a/public/javascripts/responsive.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-// generic layout specific responsive stuff goes here
-
-function openFlyout() {
- $('html').addClass('flyout-is-active');
- $('#main, #header').on('click.close-flyout', function(e){
- e.preventDefault();
- e.stopPropagation();
- closeFlyout();
- });
-}
-
-function closeFlyout() {
- $('html').removeClass('flyout-is-active');
- $('#main, #header').off('click.close-flyout');
-}
-
-
-function isMobile() {
- return $('.js-flyout-menu-toggle-button').is(":visible");
-}
-
-function setupFlyout() {
- var mobileInit = false,
- desktopInit = false;
-
- /* click handler for mobile menu toggle */
- $('.js-flyout-menu-toggle-button').on('click', function(e) {
- e.preventDefault();
- e.stopPropagation();
- if($('html').hasClass('flyout-is-active')) {
- closeFlyout();
- } else {
- openFlyout();
- }
- });
-
- /* bind resize handler */
- $(window).resize(function() {
- initMenu();
- })
-
- /* menu init function for dom detaching and appending on mobile / desktop view */
- function initMenu() {
-
- var _initMobileMenu = function() {
- /* only init mobile menu, if it hasn't been done yet */
- if(!mobileInit) {
-
- $('#main-menu > ul').detach().appendTo('.js-project-menu');
- $('#top-menu > ul').detach().appendTo('.js-general-menu');
- $('#sidebar > *').detach().appendTo('.js-sidebar');
- $('#account > ul').detach().appendTo('.js-profile-menu');
-
- mobileInit = true;
- desktopInit = false;
- }
- }
-
- var _initDesktopMenu = function() {
- if(!desktopInit) {
-
- $('.js-project-menu > ul').detach().appendTo('#main-menu');
- $('.js-general-menu > ul').detach().appendTo('#top-menu');
- $('.js-sidebar > *').detach().appendTo('#sidebar');
- $('.js-profile-menu > ul').detach().appendTo('#account');
-
- desktopInit = true;
- mobileInit = false;
- }
- }
-
- if(isMobile()) {
- _initMobileMenu();
- } else {
- _initDesktopMenu();
- }
- }
-
- // init menu on page load
- initMenu();
-}
-
-$(document).ready(setupFlyout);
diff --git a/public/javascripts/revision_graph.js b/public/javascripts/revision_graph.js
deleted file mode 100644
index 86403d428..000000000
--- a/public/javascripts/revision_graph.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-var revisionGraph = null;
-
-function drawRevisionGraph(holder, commits_hash, graph_space) {
- var XSTEP = 20,
- CIRCLE_INROW_OFFSET = 10;
- var commits_by_scmid = commits_hash,
- commits = $.map(commits_by_scmid, function(val,i){return val;});
- var max_rdmid = commits.length - 1;
- var commit_table_rows = $('table.changesets tr.changeset');
-
- // create graph
- if(revisionGraph != null)
- revisionGraph.clear();
- else
- revisionGraph = Raphael(holder);
-
- var top = revisionGraph.set();
- // init dimensions
- var graph_x_offset = commit_table_rows.first().find('td').first().position().left - $(holder).position().left,
- graph_y_offset = $(holder).position().top,
- graph_right_side = graph_x_offset + (graph_space + 1) * XSTEP,
- graph_bottom = commit_table_rows.last().position().top + commit_table_rows.last().height() - graph_y_offset;
-
-
- var yForRow = function (index, commit) {
- var row = commit_table_rows.eq(index);
-
- switch (row.find("td:first").css("vertical-align")) {
- case "middle":
- return row.position().top + (row.height() / 2) - graph_y_offset;
- default:
- return row.position().top + - graph_y_offset + CIRCLE_INROW_OFFSET;
- }
- };
-
- revisionGraph.setSize(graph_right_side, graph_bottom);
-
- // init colors
- var colors = [];
- Raphael.getColor.reset();
- for (var k = 0; k <= graph_space; k++) {
- colors.push(Raphael.getColor());
- }
-
- var parent_commit;
- var x, y, parent_x, parent_y;
- var path, title;
- var revision_dot_overlay;
- $.each(commits, function(index, commit) {
- if (!commit.hasOwnProperty("space"))
- commit.space = 0;
-
- y = yForRow(max_rdmid - commit.rdmid);
- x = graph_x_offset + XSTEP / 2 + XSTEP * commit.space;
- revisionGraph.circle(x, y, 3)
- .attr({
- fill: colors[commit.space],
- stroke: 'none'
- }).toFront();
- // paths to parents
- $.each(commit.parent_scmids, function(index, parent_scmid) {
- parent_commit = commits_by_scmid[parent_scmid];
- if (parent_commit) {
- if (!parent_commit.hasOwnProperty("space"))
- parent_commit.space = 0;
-
- parent_y = yForRow(max_rdmid - parent_commit.rdmid);
- parent_x = graph_x_offset + XSTEP / 2 + XSTEP * parent_commit.space;
- if (parent_commit.space == commit.space) {
- // vertical path
- path = revisionGraph.path([
- 'M', x, y,
- 'V', parent_y]);
- } else {
- // path to a commit in a different branch (Bezier curve)
- path = revisionGraph.path([
- 'M', x, y,
- 'C', x, y, x, y + (parent_y - y) / 2, x + (parent_x - x) / 2, y + (parent_y - y) / 2,
- 'C', x + (parent_x - x) / 2, y + (parent_y - y) / 2, parent_x, parent_y-(parent_y-y)/2, parent_x, parent_y]);
- }
- } else {
- // vertical path ending at the bottom of the revisionGraph
- path = revisionGraph.path([
- 'M', x, y,
- 'V', graph_bottom]);
- }
- path.attr({stroke: colors[commit.space], "stroke-width": 1.5}).toBack();
- });
- revision_dot_overlay = revisionGraph.circle(x, y, 10);
- revision_dot_overlay
- .attr({
- fill: '#000',
- opacity: 0,
- cursor: 'pointer',
- href: commit.href
- });
-
- if(commit.refs != null && commit.refs.length > 0) {
- title = document.createElementNS(revisionGraph.canvas.namespaceURI, 'title');
- title.appendChild(document.createTextNode(commit.refs));
- revision_dot_overlay.node.appendChild(title);
- }
- top.push(revision_dot_overlay);
- });
- top.toFront();
-};
diff --git a/public/javascripts/tablesort-5.2.1.min.js b/public/javascripts/tablesort-5.2.1.min.js
deleted file mode 100644
index 1dfaae7d6..000000000
--- a/public/javascripts/tablesort-5.2.1.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * tablesort v5.2.1 (2020-06-02)
- * http://tristen.ca/tablesort/demo/
- * Copyright (c) 2020 ; Licensed MIT
-*/
-!function(){function a(b,c){if(!(this instanceof a))return new a(b,c);if(!b||"TABLE"!==b.tagName)throw new Error("Element must be a table");this.init(b,c||{})}var b=[],c=function(a){var b;return window.CustomEvent&&"function"==typeof window.CustomEvent?b=new CustomEvent(a):(b=document.createEvent("CustomEvent"),b.initCustomEvent(a,!1,!1,void 0)),b},d=function(a){return a.getAttribute("data-sort")||a.textContent||a.innerText||""},e=function(a,b){return a=a.trim().toLowerCase(),b=b.trim().toLowerCase(),a===b?0:a0)if(a.tHead&&a.tHead.rows.length>0){for(e=0;e0&&n.push(m),o++;if(!n)return}for(o=0;oe.length)&&(t=e.length);for(var n=0,i=new Array(t);n>>0,r=arguments[1],o=0;o container for the click");n.selectItemAtIndex(i.getAttribute("data-index"),t),n.hideMenu()}else n.current.element&&!n.current.externalTrigger&&(n.current.externalTrigger=!1,setTimeout((function(){return n.hideMenu()})))}},{key:"keyup",value:function(e,t){if(e.inputEvent&&(e.inputEvent=!1),e.updateSelection(this),27!==t.keyCode){if(!e.tribute.allowSpaces&&e.tribute.hasTrailingSpace)return e.tribute.hasTrailingSpace=!1,e.commandEvent=!0,void e.callbacks().space(t,this);if(!e.tribute.isActive)if(e.tribute.autocompleteMode)e.callbacks().triggerChar(t,this,"");else{var n=e.getKeyCode(e,this,t);if(isNaN(n)||!n)return;var i=e.tribute.triggers().find((function(e){return e.charCodeAt(0)===n}));void 0!==i&&e.callbacks().triggerChar(t,this,i)}e.tribute.current.mentionText.length=r.current.collection.menuShowMinLength&&r.inputEvent&&r.showMenuFor(n,!0)},enter:function(t,n){e.tribute.isActive&&e.tribute.current.filteredItems&&(t.preventDefault(),t.stopPropagation(),setTimeout((function(){e.tribute.selectItemAtIndex(e.tribute.menuSelected,t),e.tribute.hideMenu()}),0))},escape:function(t,n){e.tribute.isActive&&(t.preventDefault(),t.stopPropagation(),e.tribute.isActive=!1,e.tribute.hideMenu())},tab:function(t,n){e.callbacks().enter(t,n)},space:function(t,n){e.tribute.isActive&&(e.tribute.spaceSelectsMatch?e.callbacks().enter(t,n):e.tribute.allowSpaces||(t.stopPropagation(),setTimeout((function(){e.tribute.hideMenu(),e.tribute.isActive=!1}),0)))},up:function(t,n){if(e.tribute.isActive&&e.tribute.current.filteredItems){t.preventDefault(),t.stopPropagation();var i=e.tribute.current.filteredItems.length,r=e.tribute.menuSelected;i>r&&r>0?(e.tribute.menuSelected--,e.setActiveLi()):0===r&&(e.tribute.menuSelected=i-1,e.setActiveLi(),e.tribute.menu.scrollTop=e.tribute.menu.scrollHeight)}},down:function(t,n){if(e.tribute.isActive&&e.tribute.current.filteredItems){t.preventDefault(),t.stopPropagation();var i=e.tribute.current.filteredItems.length-1,r=e.tribute.menuSelected;i>r?(e.tribute.menuSelected++,e.setActiveLi()):i===r&&(e.tribute.menuSelected=0,e.setActiveLi(),e.tribute.menu.scrollTop=0)}},delete:function(t,n){e.tribute.isActive&&e.tribute.current.mentionText.length<1?e.tribute.hideMenu():e.tribute.isActive&&e.tribute.showMenuFor(n)}}}},{key:"setActiveLi",value:function(e){var t=this.tribute.menu.querySelectorAll("li"),n=t.length>>>0;e&&(this.tribute.menuSelected=parseInt(e));for(var i=0;iu.bottom){var l=o.bottom-u.bottom;this.tribute.menu.scrollTop+=l}else if(o.topi.width&&(r.left||r.right),u=window.innerHeight>i.height&&(r.top||r.bottom);(o||u)&&(n.tribute.menu.style.cssText="display: none",n.positionMenuAtCaret(e))}),0)}else this.tribute.menu.style.cssText="display: none"}},{key:"selectElement",value:function(e,t,n){var i,r=e;if(t)for(var o=0;o=0&&(t=i.substring(0,r))}}else{var o=this.tribute.current.element;if(o){var u=o.selectionStart;o.value&&u>=0&&(t=o.value.substring(0,u))}}return t}},{key:"getLastWordInText",value:function(e){var t;return e=e.replace(/\u00A0/g," "),(t=this.tribute.autocompleteSeparator?e.split(this.tribute.autocompleteSeparator):e.split(/\s+/))[t.length-1].trim()}},{key:"getTriggerInfo",value:function(e,t,n,i,r){var o,u,l,a=this,s=this.tribute.current;if(this.isContentEditable(s.element)){var c=this.getContentEditableSelectedPath(s);c&&(o=c.selected,u=c.path,l=c.offset)}else o=this.tribute.current.element;var h=this.getTextPrecedingCurrentSelection(),d=this.getLastWordInText(h);if(r)return{mentionPosition:h.length-d.length,mentionText:d,mentionSelectedElement:o,mentionSelectedPath:u,mentionSelectedOffset:l};if(null!=h){var f,m=-1;if(this.tribute.collection.forEach((function(e){var t=e.trigger,i=e.requireLeadingSpace?a.lastIndexWithLeadingSpace(h,t):h.lastIndexOf(t);i>m&&(m=i,f=t,n=e.requireLeadingSpace)})),m>=0&&(0===m||!n||/[\xA0\s]/g.test(h.substring(m-1,m)))){var p=h.substring(m+f.length,h.length);f=h.substring(m,m+f.length);var v=p.substring(0,1),g=p.length>0&&(" "===v||" "===v);t&&(p=p.trim());var b=i?/[^\S ]/g:/[\xA0\s]/g;if(this.tribute.hasTrailingSpace=b.test(p),!g&&(e||!b.test(p)))return{mentionPosition:m,mentionText:p,mentionSelectedElement:o,mentionSelectedPath:u,mentionSelectedOffset:l,mentionTriggerChar:f}}}}},{key:"lastIndexWithLeadingSpace",value:function(e,t){for(var n=e.split("").reverse().join(""),i=-1,r=0,o=e.length;r=0;s--)if(t[s]!==n[r-s]){a=!1;break}if(a&&(u||l)){i=e.length-1-r;break}}return i}},{key:"isContentEditable",value:function(e){return"INPUT"!==e.nodeName&&"TEXTAREA"!==e.nodeName}},{key:"isMenuOffScreen",value:function(e,t){var n=window.innerWidth,i=window.innerHeight,r=document.documentElement,o=(window.pageXOffset||r.scrollLeft)-(r.clientLeft||0),u=(window.pageYOffset||r.scrollTop)-(r.clientTop||0),l="number"==typeof e.top?e.top:u+i-e.bottom-t.height,a="number"==typeof e.right?e.right:e.left+t.width,s="number"==typeof e.bottom?e.bottom:e.top+t.height,c="number"==typeof e.left?e.left:o+n-e.right-t.width;return{top:lMath.ceil(o+n),bottom:s>Math.ceil(u+i),left:cparseInt(u.height)&&(o.overflowY="scroll")):o.overflow="hidden",r.textContent=e.value.substring(0,t),"INPUT"===e.nodeName&&(r.textContent=r.textContent.replace(/\s/g," "));var l=this.getDocument().createElement("span");l.textContent=e.value.substring(t)||".",r.appendChild(l);var a=e.getBoundingClientRect(),s=document.documentElement,c=(window.pageXOffset||s.scrollLeft)-(s.clientLeft||0),h=(window.pageYOffset||s.scrollTop)-(s.clientTop||0),d=0,f=0;this.menuContainerIsBody&&(d=a.top,f=a.left);var m={top:d+h+l.offsetTop+parseInt(u.borderTopWidth)+parseInt(u.fontSize)-e.scrollTop,left:f+c+l.offsetLeft+parseInt(u.borderLeftWidth)},p=window.innerWidth,v=window.innerHeight,g=this.getMenuDimensions(),b=this.isMenuOffScreen(m,g);b.right&&(m.right=p-m.left,m.left="auto");var y=this.tribute.menuContainer?this.tribute.menuContainer.offsetHeight:this.getDocument().body.offsetHeight;if(b.bottom){var w=y-(v-(this.tribute.menuContainer?this.tribute.menuContainer.getBoundingClientRect():this.getDocument().body.getBoundingClientRect()).top);m.bottom=w+(v-a.top-l.offsetTop),m.top="auto"}return(b=this.isMenuOffScreen(m,g)).left&&(m.left=p>g.width?c+p-g.width:c,delete m.right),b.top&&(m.top=v>g.height?h+v-g.height:h,delete m.bottom),this.getDocument().body.removeChild(r),m}},{key:"getContentEditableCaretPosition",value:function(e){var t,n=this.getWindowSelection();(t=this.getDocument().createRange()).setStart(n.anchorNode,e),t.setEnd(n.anchorNode,e),t.collapse(!1);var i=t.getBoundingClientRect(),r=document.documentElement,o=(window.pageXOffset||r.scrollLeft)-(r.clientLeft||0),u=(window.pageYOffset||r.scrollTop)-(r.clientTop||0),l={left:i.left+o,top:i.top+i.height+u},a=window.innerWidth,s=window.innerHeight,c=this.getMenuDimensions(),h=this.isMenuOffScreen(l,c);h.right&&(l.left="auto",l.right=a-i.left-o);var d=this.tribute.menuContainer?this.tribute.menuContainer.offsetHeight:this.getDocument().body.offsetHeight;if(h.bottom){var f=d-(s-(this.tribute.menuContainer?this.tribute.menuContainer.getBoundingClientRect():this.getDocument().body.getBoundingClientRect()).top);l.top="auto",l.bottom=f+(s-i.top)}return(h=this.isMenuOffScreen(l,c)).left&&(l.left=a>c.width?o+a-c.width:o,delete l.right),h.top&&(l.top=s>c.height?u+s-c.height:u,delete l.bottom),this.menuContainerIsBody||(l.left=l.left?l.left-this.tribute.menuContainer.offsetLeft:l.left,l.top=l.top?l.top-this.tribute.menuContainer.offsetTop:l.top),l}},{key:"scrollIntoView",value:function(e){var t,n=this.menu;if(void 0!==n){for(;void 0===t||0===t.height;)if(0===(t=n.getBoundingClientRect()).height&&(void 0===(n=n.childNodes[0])||!n.getBoundingClientRect))return;var i=t.top,r=i+t.height;if(i<0)window.scrollTo(0,window.pageYOffset+t.top-20);else if(r>window.innerHeight){var o=window.pageYOffset+t.top-20;o-window.pageYOffset>100&&(o=window.pageYOffset+100);var u=window.pageYOffset-(window.innerHeight-r);u>o&&(u=o),window.scrollTo(0,u)}}}},{key:"menuContainerIsBody",get:function(){return this.tribute.menuContainer===document.body||!this.tribute.menuContainer}}]),t}(),s=function(){function t(n){e(this,t),this.tribute=n,this.tribute.search=this}return n(t,[{key:"simpleFilter",value:function(e,t){var n=this;return t.filter((function(t){return n.test(e,t)}))}},{key:"test",value:function(e,t){return null!==this.match(e,t)}},{key:"match",value:function(e,t,n){n=n||{};t.length;var i=n.pre||"",r=n.post||"",o=n.caseSensitive&&t||t.toLowerCase();if(n.skip)return{rendered:t,score:0};e=n.caseSensitive&&e||e.toLowerCase();var u=this.traverse(o,e,0,0,[]);return u?{rendered:this.render(t,u.cache,i,r),score:u.score}:null}},{key:"traverse",value:function(e,t,n,i,r){if(this.tribute.autocompleteSeparator&&(t=t.split(this.tribute.autocompleteSeparator).splice(-1)[0]),t.length===i)return{score:this.calculateScore(r),cache:r.slice()};if(!(e.length===n||t.length-i>e.length-n)){for(var o,u,l=t[i],a=e.indexOf(l,n);a>-1;){if(r.push(a),u=this.traverse(e,t,a+1,i+1,r),r.pop(),!u)return o;(!o||o.score0&&(e[r-1]+1===i?n+=n+1:n=1),t+=n})),t}},{key:"render",value:function(e,t,n,i){var r=e.substring(0,t[0]);return t.forEach((function(o,u){r+=n+e[o]+i+e.substring(o+1,t[u+1]?t[u+1]:e.length)})),r}},{key:"filter",value:function(e,t,n){var i=this;return n=n||{},t.reduce((function(t,r,o,u){var l=r;n.extract&&((l=n.extract(r))||(l=""));var a=i.match(e,l,n);return null!=a&&(t[t.length]={string:a.rendered,score:a.score,index:o,original:r}),t}),[]).sort((function(e,t){var n=t.score-e.score;return n||e.index-t.index}))}}]),t}();return function(){function t(n){var i,r=this,o=n.values,c=void 0===o?null:o,h=n.iframe,d=void 0===h?null:h,f=n.selectClass,m=void 0===f?"highlight":f,p=n.containerClass,v=void 0===p?"tribute-container":p,g=n.itemClass,b=void 0===g?"":g,y=n.trigger,w=void 0===y?"@":y,T=n.autocompleteMode,C=void 0!==T&&T,S=n.autocompleteSeparator,E=void 0===S?null:S,k=n.selectTemplate,x=void 0===k?null:k,M=n.menuItemTemplate,A=void 0===M?null:M,L=n.lookup,I=void 0===L?"key":L,N=n.fillAttr,O=void 0===N?"value":N,D=n.collection,P=void 0===D?null:D,R=n.menuContainer,W=void 0===R?null:R,H=n.noMatchTemplate,B=void 0===H?null:H,F=n.requireLeadingSpace,_=void 0===F||F,j=n.allowSpaces,Y=void 0!==j&&j,z=n.replaceTextSuffix,K=void 0===z?null:z,U=n.positionMenu,q=void 0===U||U,X=n.spaceSelectsMatch,Q=void 0!==X&&X,V=n.searchOpts,$=void 0===V?{}:V,G=n.menuItemLimit,J=void 0===G?null:G,Z=n.menuShowMinLength,ee=void 0===Z?0:Z;if(e(this,t),this.autocompleteMode=C,this.autocompleteSeparator=E,this.menuSelected=0,this.current={},this.inputEvent=!1,this.isActive=!1,this.menuContainer=W,this.allowSpaces=Y,this.replaceTextSuffix=K,this.positionMenu=q,this.hasTrailingSpace=!1,this.spaceSelectsMatch=Q,this.autocompleteMode&&(w="",Y=!1),c)this.collection=[{trigger:w,iframe:d,selectClass:m,containerClass:v,itemClass:b,selectTemplate:(x||t.defaultSelectTemplate).bind(this),menuItemTemplate:(A||t.defaultMenuItemTemplate).bind(this),noMatchTemplate:(i=B,"string"==typeof i?""===i.trim()?null:i:"function"==typeof i?i.bind(r):B||function(){return"No Match Found!"}.bind(r)),lookup:I,fillAttr:O,values:c,requireLeadingSpace:_,searchOpts:$,menuItemLimit:J,menuShowMinLength:ee}];else{if(!P)throw new Error("[Tribute] No collection specified.");this.autocompleteMode&&console.warn("Tribute in autocomplete mode does not work for collections"),this.collection=P.map((function(e){return{trigger:e.trigger||w,iframe:e.iframe||d,selectClass:e.selectClass||m,containerClass:e.containerClass||v,itemClass:e.itemClass||b,selectTemplate:(e.selectTemplate||t.defaultSelectTemplate).bind(r),menuItemTemplate:(e.menuItemTemplate||t.defaultMenuItemTemplate).bind(r),noMatchTemplate:function(e){return"string"==typeof e?""===e.trim()?null:e:"function"==typeof e?e.bind(r):B||function(){return"No Match Found!"}.bind(r)}(B),lookup:e.lookup||I,fillAttr:e.fillAttr||O,values:e.values,requireLeadingSpace:e.requireLeadingSpace,searchOpts:e.searchOpts||$,menuItemLimit:e.menuItemLimit||J,menuShowMinLength:e.menuShowMinLength||ee}}))}new a(this),new u(this),new l(this),new s(this)}return n(t,[{key:"triggers",value:function(){return this.collection.map((function(e){return e.trigger}))}},{key:"attach",value:function(e){if(!e)throw new Error("[Tribute] Must pass in a DOM node or NodeList.");if("undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e.get()),e.constructor===NodeList||e.constructor===HTMLCollection||e.constructor===Array)for(var t=e.length,n=0;n",post:n.current.collection.searchOpts.post||"",skip:n.current.collection.searchOpts.skip,extract:function(e){if("string"==typeof n.current.collection.lookup)return e[n.current.collection.lookup];if("function"==typeof n.current.collection.lookup)return n.current.collection.lookup(e,n.current.mentionText);throw new Error("Invalid lookup attribute, lookup must be string or function.")}});n.current.collection.menuItemLimit&&(r=r.slice(0,n.current.collection.menuItemLimit)),n.current.filteredItems=r;var o=n.menu.querySelector("ul");if(n.range.positionMenuAtCaret(t),!r.length){var u=new CustomEvent("tribute-no-match",{detail:n.menu});return n.current.element.dispatchEvent(u),void("function"==typeof n.current.collection.noMatchTemplate&&!n.current.collection.noMatchTemplate()||!n.current.collection.noMatchTemplate?n.hideMenu():"function"==typeof n.current.collection.noMatchTemplate?o.innerHTML=n.current.collection.noMatchTemplate():o.innerHTML=n.current.collection.noMatchTemplate)}o.innerHTML="";var l=n.range.getDocument().createDocumentFragment();r.forEach((function(e,t){var r=n.range.getDocument().createElement("li");r.setAttribute("data-index",t),r.className=n.current.collection.itemClass,r.addEventListener("mousemove",(function(e){var t=i(n._findLiTarget(e.target),2),r=(t[0],t[1]);0!==e.movementY&&n.events.setActiveLi(r)})),n.menuSelected===t&&r.classList.add(n.current.collection.selectClass),r.innerHTML=n.current.collection.menuItemTemplate(e),l.appendChild(r)})),o.appendChild(l)}};"function"==typeof this.current.collection.values?this.current.collection.values(this.current.mentionText,r):r(this.current.collection.values)}}},{key:"_findLiTarget",value:function(e){if(!e)return[];var t=e.getAttribute("data-index");return t?[e,t]:this._findLiTarget(e.parentNode)}},{key:"showMenuForCollection",value:function(e,t){e!==document.activeElement&&this.placeCaretAtEnd(e),this.current.collection=this.collection[t||0],this.current.externalTrigger=!0,this.current.element=e,e.isContentEditable?this.insertTextAtCursor(this.current.collection.trigger):this.insertAtCaret(e,this.current.collection.trigger),this.showMenuFor(e)}},{key:"placeCaretAtEnd",value:function(e){if(e.focus(),void 0!==window.getSelection&&void 0!==document.createRange){var t=document.createRange();t.selectNodeContents(e),t.collapse(!1);var n=window.getSelection();n.removeAllRanges(),n.addRange(t)}else if(void 0!==document.body.createTextRange){var i=document.body.createTextRange();i.moveToElementText(e),i.collapse(!1),i.select()}}},{key:"insertTextAtCursor",value:function(e){var t,n;(n=(t=window.getSelection()).getRangeAt(0)).deleteContents();var i=document.createTextNode(e);n.insertNode(i),n.selectNodeContents(i),n.collapse(!1),t.removeAllRanges(),t.addRange(n)}},{key:"insertAtCaret",value:function(e,t){var n=e.scrollTop,i=e.selectionStart,r=e.value.substring(0,i),o=e.value.substring(e.selectionEnd,e.value.length);e.value=r+t+o,i+=t.length,e.selectionStart=i,e.selectionEnd=i,e.focus(),e.scrollTop=n}},{key:"hideMenu",value:function(){this.menu&&(this.menu.style.cssText="display: none;",this.isActive=!1,this.menuSelected=0,this.current={})}},{key:"selectItemAtIndex",value:function(e,t){if("number"==typeof(e=parseInt(e))&&!isNaN(e)){var n=this.current.filteredItems[e],i=this.current.collection.selectTemplate(n);null!==i&&this.replaceText(i,t,n)}}},{key:"replaceText",value:function(e,t,n){this.range.replaceTriggerText(e,!0,!0,t,n)}},{key:"_append",value:function(e,t,n){if("function"==typeof e.values)throw new Error("Unable to append to values, as it is a function.");e.values=n?t:e.values.concat(t)}},{key:"append",value:function(e,t,n){var i=parseInt(e);if("number"!=typeof i)throw new Error("please provide an index for the collection to update.");var r=this.collection[i];this._append(r,t,n)}},{key:"appendCurrent",value:function(e,t){if(!this.isActive)throw new Error("No active state. Please use append instead and pass an index.");this._append(this.current.collection,e,t)}},{key:"detach",value:function(e){if(!e)throw new Error("[Tribute] Must pass in a DOM node or NodeList.");if("undefined"!=typeof jQuery&&e instanceof jQuery&&(e=e.get()),e.constructor===NodeList||e.constructor===HTMLCollection||e.constructor===Array)for(var t=e.length,n=0;n'+(this.current.collection.trigger+e.original[this.current.collection.fillAttr])+"":this.current.collection.trigger+e.original[this.current.collection.fillAttr]}},{key:"defaultMenuItemTemplate",value:function(e){return e.string}},{key:"inputTypes",value:function(){return["TEXTAREA","INPUT"]}}]),t}()}));
-//# sourceMappingURL=tribute.min.js.map
diff --git a/public/javascripts/tribute.min.js.map b/public/javascripts/tribute.min.js.map
deleted file mode 100644
index 9ec73d538..000000000
--- a/public/javascripts/tribute.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"tribute.min.js","sources":["../src/utils.js","../src/TributeEvents.js","../src/TributeMenuEvents.js","../src/TributeRange.js","../src/TributeSearch.js","../src/Tribute.js"],"sourcesContent":["if (!Array.prototype.find) {\n Array.prototype.find = function(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined')\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function')\n }\n var list = Object(this)\n var length = list.length >>> 0\n var thisArg = arguments[1]\n var value\n\n for (var i = 0; i < length; i++) {\n value = list[i]\n if (predicate.call(thisArg, value, i, list)) {\n return value\n }\n }\n return undefined\n }\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n function CustomEvent(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }\n var evt = document.createEvent('CustomEvent')\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n return evt\n }\n\n if (typeof window.Event !== 'undefined') {\n CustomEvent.prototype = window.Event.prototype\n }\n\n window.CustomEvent = CustomEvent\n}","class TributeEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.events = this;\n }\n\n static keys() {\n return [\n {\n key: 9,\n value: \"TAB\"\n },\n {\n key: 8,\n value: \"DELETE\"\n },\n {\n key: 13,\n value: \"ENTER\"\n },\n {\n key: 27,\n value: \"ESCAPE\"\n },\n {\n key: 32,\n value: \"SPACE\"\n },\n {\n key: 38,\n value: \"UP\"\n },\n {\n key: 40,\n value: \"DOWN\"\n }\n ];\n }\n\n bind(element) {\n element.boundKeydown = this.keydown.bind(element, this);\n element.boundKeyup = this.keyup.bind(element, this);\n element.boundInput = this.input.bind(element, this);\n\n element.addEventListener(\"keydown\", element.boundKeydown, false);\n element.addEventListener(\"keyup\", element.boundKeyup, false);\n element.addEventListener(\"input\", element.boundInput, false);\n }\n\n unbind(element) {\n element.removeEventListener(\"keydown\", element.boundKeydown, false);\n element.removeEventListener(\"keyup\", element.boundKeyup, false);\n element.removeEventListener(\"input\", element.boundInput, false);\n\n delete element.boundKeydown;\n delete element.boundKeyup;\n delete element.boundInput;\n }\n\n keydown(instance, event) {\n if (instance.shouldDeactivate(event)) {\n instance.tribute.isActive = false;\n instance.tribute.hideMenu();\n }\n\n let element = this;\n instance.commandEvent = false;\n\n TributeEvents.keys().forEach(o => {\n if (o.key === event.keyCode) {\n instance.commandEvent = true;\n instance.callbacks()[o.value.toLowerCase()](event, element);\n }\n });\n }\n\n input(instance, event) {\n instance.inputEvent = true;\n instance.keyup.call(this, instance, event);\n }\n\n click(instance, event) {\n let tribute = instance.tribute;\n if (tribute.menu && tribute.menu.contains(event.target)) {\n let li = event.target;\n event.preventDefault();\n event.stopPropagation();\n while (li.nodeName.toLowerCase() !== \"li\") {\n li = li.parentNode;\n if (!li || li === tribute.menu) {\n throw new Error(\"cannot find the container for the click\");\n }\n }\n tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n tribute.hideMenu();\n\n // TODO: should fire with externalTrigger and target is outside of menu\n } else if (tribute.current.element && !tribute.current.externalTrigger) {\n tribute.current.externalTrigger = false;\n setTimeout(() => tribute.hideMenu());\n }\n }\n\n keyup(instance, event) {\n if (instance.inputEvent) {\n instance.inputEvent = false;\n }\n instance.updateSelection(this);\n\n if (event.keyCode === 27) return;\n\n if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n instance.tribute.hasTrailingSpace = false;\n instance.commandEvent = true;\n instance.callbacks()[\"space\"](event, this);\n return;\n }\n\n if (!instance.tribute.isActive) {\n if (instance.tribute.autocompleteMode) {\n instance.callbacks().triggerChar(event, this, \"\");\n } else {\n let keyCode = instance.getKeyCode(instance, this, event);\n\n if (isNaN(keyCode) || !keyCode) return;\n\n let trigger = instance.tribute.triggers().find(trigger => {\n return trigger.charCodeAt(0) === keyCode;\n });\n\n if (typeof trigger !== \"undefined\") {\n instance.callbacks().triggerChar(event, this, trigger);\n }\n }\n }\n\n if (\n instance.tribute.current.mentionText.length <\n instance.tribute.current.collection.menuShowMinLength\n ) {\n return;\n }\n\n if (\n ((instance.tribute.current.trigger ||\n instance.tribute.autocompleteMode) &&\n instance.commandEvent === false) ||\n (instance.tribute.isActive && event.keyCode === 8)\n ) {\n instance.tribute.showMenuFor(this, true);\n }\n }\n\n shouldDeactivate(event) {\n if (!this.tribute.isActive) return false;\n\n if (this.tribute.current.mentionText.length === 0) {\n let eventKeyPressed = false;\n TributeEvents.keys().forEach(o => {\n if (event.keyCode === o.key) eventKeyPressed = true;\n });\n\n return !eventKeyPressed;\n }\n\n return false;\n }\n\n getKeyCode(instance, el, event) {\n let char;\n let tribute = instance.tribute;\n let info = tribute.range.getTriggerInfo(\n false,\n tribute.hasTrailingSpace,\n true,\n tribute.allowSpaces,\n tribute.autocompleteMode\n );\n\n if (info) {\n return info.mentionTriggerChar.charCodeAt(0);\n } else {\n return false;\n }\n }\n\n updateSelection(el) {\n this.tribute.current.element = el;\n let info = this.tribute.range.getTriggerInfo(\n false,\n this.tribute.hasTrailingSpace,\n true,\n this.tribute.allowSpaces,\n this.tribute.autocompleteMode\n );\n\n if (info) {\n this.tribute.current.selectedPath = info.mentionSelectedPath;\n this.tribute.current.mentionText = info.mentionText;\n this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n }\n }\n\n callbacks() {\n return {\n triggerChar: (e, el, trigger) => {\n let tribute = this.tribute;\n tribute.current.trigger = trigger;\n\n let collectionItem = tribute.collection.find(item => {\n return item.trigger === trigger;\n });\n\n tribute.current.collection = collectionItem;\n\n if (\n tribute.current.mentionText.length >=\n tribute.current.collection.menuShowMinLength &&\n tribute.inputEvent\n ) {\n tribute.showMenuFor(el, true);\n }\n },\n enter: (e, el) => {\n // choose selection\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n this.tribute.hideMenu();\n }, 0);\n }\n },\n escape: (e, el) => {\n if (this.tribute.isActive) {\n e.preventDefault();\n e.stopPropagation();\n this.tribute.isActive = false;\n this.tribute.hideMenu();\n }\n },\n tab: (e, el) => {\n // choose first match\n this.callbacks().enter(e, el);\n },\n space: (e, el) => {\n if (this.tribute.isActive) {\n if (this.tribute.spaceSelectsMatch) {\n this.callbacks().enter(e, el);\n } else if (!this.tribute.allowSpaces) {\n e.stopPropagation();\n setTimeout(() => {\n this.tribute.hideMenu();\n this.tribute.isActive = false;\n }, 0);\n }\n }\n },\n up: (e, el) => {\n // navigate up ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length,\n selected = this.tribute.menuSelected;\n\n if (count > selected && selected > 0) {\n this.tribute.menuSelected--;\n this.setActiveLi();\n } else if (selected === 0) {\n this.tribute.menuSelected = count - 1;\n this.setActiveLi();\n this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n }\n }\n },\n down: (e, el) => {\n // navigate down ul\n if (this.tribute.isActive && this.tribute.current.filteredItems) {\n e.preventDefault();\n e.stopPropagation();\n let count = this.tribute.current.filteredItems.length - 1,\n selected = this.tribute.menuSelected;\n\n if (count > selected) {\n this.tribute.menuSelected++;\n this.setActiveLi();\n } else if (count === selected) {\n this.tribute.menuSelected = 0;\n this.setActiveLi();\n this.tribute.menu.scrollTop = 0;\n }\n }\n },\n delete: (e, el) => {\n if (\n this.tribute.isActive &&\n this.tribute.current.mentionText.length < 1\n ) {\n this.tribute.hideMenu();\n } else if (this.tribute.isActive) {\n this.tribute.showMenuFor(el);\n }\n }\n };\n }\n\n setActiveLi(index) {\n let lis = this.tribute.menu.querySelectorAll(\"li\"),\n length = lis.length >>> 0;\n\n if (index) this.tribute.menuSelected = parseInt(index);\n\n for (let i = 0; i < length; i++) {\n let li = lis[i];\n if (i === this.tribute.menuSelected) {\n li.classList.add(this.tribute.current.collection.selectClass);\n\n let liClientRect = li.getBoundingClientRect();\n let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n if (liClientRect.bottom > menuClientRect.bottom) {\n let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n this.tribute.menu.scrollTop += scrollDistance;\n } else if (liClientRect.top < menuClientRect.top) {\n let scrollDistance = menuClientRect.top - liClientRect.top;\n this.tribute.menu.scrollTop -= scrollDistance;\n }\n } else {\n li.classList.remove(this.tribute.current.collection.selectClass);\n }\n }\n }\n\n getFullHeight(elem, includeMargin) {\n let height = elem.getBoundingClientRect().height;\n\n if (includeMargin) {\n let style = elem.currentStyle || window.getComputedStyle(elem);\n return (\n height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n );\n }\n\n return height;\n }\n}\n\nexport default TributeEvents;\n","class TributeMenuEvents {\n constructor(tribute) {\n this.tribute = tribute;\n this.tribute.menuEvents = this;\n this.menu = this.tribute.menu;\n }\n\n bind(menu) {\n this.menuClickEvent = this.tribute.events.click.bind(null, this);\n this.menuContainerScrollEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.showMenuFor(this.tribute.current.element, false);\n }\n },\n 300,\n false\n );\n this.windowResizeEvent = this.debounce(\n () => {\n if (this.tribute.isActive) {\n this.tribute.range.positionMenuAtCaret(true);\n }\n },\n 300,\n false\n );\n\n // fixes IE11 issues with mousedown\n this.tribute.range\n .getDocument()\n .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .addEventListener(\"mousedown\", this.menuClickEvent, false);\n window.addEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.addEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n unbind(menu) {\n this.tribute.range\n .getDocument()\n .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n this.tribute.range\n .getDocument()\n .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n if (this.menuContainer) {\n this.menuContainer.removeEventListener(\n \"scroll\",\n this.menuContainerScrollEvent,\n false\n );\n } else {\n window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n }\n }\n\n debounce(func, wait, immediate) {\n var timeout;\n return () => {\n var context = this,\n args = arguments;\n var later = () => {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n}\n\nexport default TributeMenuEvents;\n","// Thanks to https://github.com/jeff-collins/ment.io\nimport \"./utils\";\n\nclass TributeRange {\n constructor(tribute) {\n this.tribute = tribute\n this.tribute.range = this\n }\n\n getDocument() {\n let iframe\n if (this.tribute.current.collection) {\n iframe = this.tribute.current.collection.iframe\n }\n\n if (!iframe) {\n return document\n }\n\n return iframe.contentWindow.document\n }\n\n positionMenuAtCaret(scrollTo) {\n let context = this.tribute.current,\n coordinates\n\n let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode)\n\n if (typeof info !== 'undefined') {\n\n if(!this.tribute.positionMenu){\n this.tribute.menu.style.cssText = `display: block;`\n return\n }\n\n if (!this.isContentEditable(context.element)) {\n coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n info.mentionPosition)\n }\n else {\n coordinates = this.getContentEditableCaretPosition(info.mentionPosition)\n }\n\n this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n left: ${coordinates.left}px;\n right: ${coordinates.right}px;\n bottom: ${coordinates.bottom}px;\n position: absolute;\n display: block;`\n\n if (coordinates.left === 'auto') {\n this.tribute.menu.style.left = 'auto'\n }\n\n if (coordinates.top === 'auto') {\n this.tribute.menu.style.top = 'auto'\n }\n\n if (scrollTo) this.scrollIntoView()\n\n window.setTimeout(() => {\n let menuDimensions = {\n width: this.tribute.menu.offsetWidth,\n height: this.tribute.menu.offsetHeight\n }\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right)\n let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom)\n if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n this.tribute.menu.style.cssText = 'display: none'\n this.positionMenuAtCaret(scrollTo)\n }\n }, 0)\n\n } else {\n this.tribute.menu.style.cssText = 'display: none'\n }\n }\n\n get menuContainerIsBody() {\n return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n }\n\n\n selectElement(targetElement, path, offset) {\n let range\n let elem = targetElement\n\n if (path) {\n for (var i = 0; i < path.length; i++) {\n elem = elem.childNodes[path[i]]\n if (elem === undefined) {\n return\n }\n while (elem.length < offset) {\n offset -= elem.length\n elem = elem.nextSibling\n }\n if (elem.childNodes.length === 0 && !elem.length) {\n elem = elem.previousSibling\n }\n }\n }\n let sel = this.getWindowSelection()\n\n range = this.getDocument().createRange()\n range.setStart(elem, offset)\n range.setEnd(elem, offset)\n range.collapse(true)\n\n try {\n sel.removeAllRanges()\n } catch (error) {}\n\n sel.addRange(range)\n targetElement.focus()\n }\n\n replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode)\n\n if (info !== undefined) {\n let context = this.tribute.current\n let replaceEvent = new CustomEvent('tribute-replaced', {\n detail: {\n item: item,\n instance: context,\n context: info,\n event: originalEvent,\n }\n })\n\n if (!this.isContentEditable(context.element)) {\n let myField = this.tribute.current.element\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : ' '\n text += textSuffix\n let startPos = info.mentionPosition\n let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length - 1\n }\n myField.value = myField.value.substring(0, startPos) + text +\n myField.value.substring(endPos, myField.value.length)\n myField.selectionStart = startPos + text.length\n myField.selectionEnd = startPos + text.length\n } else {\n // add a space to the end of the pasted text\n let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n ? this.tribute.replaceTextSuffix\n : '\\xA0'\n text += textSuffix\n let endPos = info.mentionPosition + info.mentionText.length\n if (!this.tribute.autocompleteMode) {\n endPos += info.mentionTriggerChar.length\n }\n this.pasteHtml(text, info.mentionPosition, endPos)\n }\n\n context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }))\n context.element.dispatchEvent(replaceEvent)\n }\n }\n\n pasteHtml(html, startPos, endPos) {\n let range, sel\n sel = this.getWindowSelection()\n range = this.getDocument().createRange()\n range.setStart(sel.anchorNode, startPos)\n range.setEnd(sel.anchorNode, endPos)\n range.deleteContents()\n\n let el = this.getDocument().createElement('div')\n el.innerHTML = html\n let frag = this.getDocument().createDocumentFragment(),\n node, lastNode\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node)\n }\n range.insertNode(frag)\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange()\n range.setStartAfter(lastNode)\n range.collapse(true)\n sel.removeAllRanges()\n sel.addRange(range)\n }\n }\n\n getWindowSelection() {\n if (this.tribute.collection.iframe) {\n return this.tribute.collection.iframe.contentWindow.getSelection()\n }\n\n return window.getSelection()\n }\n\n getNodePositionInParent(element) {\n if (element.parentNode === null) {\n return 0\n }\n\n for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n let node = element.parentNode.childNodes[i]\n\n if (node === element) {\n return i\n }\n }\n }\n\n getContentEditableSelectedPath(ctx) {\n let sel = this.getWindowSelection()\n let selected = sel.anchorNode\n let path = []\n let offset\n\n if (selected != null) {\n let i\n let ce = selected.contentEditable\n while (selected !== null && ce !== 'true') {\n i = this.getNodePositionInParent(selected)\n path.push(i)\n selected = selected.parentNode\n if (selected !== null) {\n ce = selected.contentEditable\n }\n }\n path.reverse()\n\n // getRangeAt may not exist, need alternative\n offset = sel.getRangeAt(0).startOffset\n\n return {\n selected: selected,\n path: path,\n offset: offset\n }\n }\n }\n\n getTextPrecedingCurrentSelection() {\n let context = this.tribute.current,\n text = ''\n\n if (!this.isContentEditable(context.element)) {\n let textComponent = this.tribute.current.element;\n if (textComponent) {\n let startPos = textComponent.selectionStart\n if (textComponent.value && startPos >= 0) {\n text = textComponent.value.substring(0, startPos)\n }\n }\n\n } else {\n let selectedElem = this.getWindowSelection().anchorNode\n\n if (selectedElem != null) {\n let workingNodeContent = selectedElem.textContent\n let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset\n\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset)\n }\n }\n }\n\n return text\n }\n\n getLastWordInText(text) {\n text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n var wordsArray;\n if (this.tribute.autocompleteSeparator) {\n wordsArray = text.split(this.tribute.autocompleteSeparator);\n } else {\n wordsArray = text.split(/\\s+/);\n }\n var worldsCount = wordsArray.length - 1;\n return wordsArray[worldsCount].trim();\n }\n\n getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n let ctx = this.tribute.current\n let selected, path, offset\n\n if (!this.isContentEditable(ctx.element)) {\n selected = this.tribute.current.element\n } else {\n let selectionInfo = this.getContentEditableSelectedPath(ctx)\n\n if (selectionInfo) {\n selected = selectionInfo.selected\n path = selectionInfo.path\n offset = selectionInfo.offset\n }\n }\n\n let effectiveRange = this.getTextPrecedingCurrentSelection()\n let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange)\n\n if (isAutocomplete) {\n return {\n mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n mentionText: lastWordOfEffectiveRange,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset\n }\n }\n\n if (effectiveRange !== undefined && effectiveRange !== null) {\n let mostRecentTriggerCharPos = -1\n let triggerChar\n\n this.tribute.collection.forEach(config => {\n let c = config.trigger\n let idx = config.requireLeadingSpace ?\n this.lastIndexWithLeadingSpace(effectiveRange, c) :\n effectiveRange.lastIndexOf(c)\n\n if (idx > mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx\n triggerChar = c\n requireLeadingSpace = config.requireLeadingSpace\n }\n })\n\n if (mostRecentTriggerCharPos >= 0 &&\n (\n mostRecentTriggerCharPos === 0 ||\n !requireLeadingSpace ||\n /[\\xA0\\s]/g.test(\n effectiveRange.substring(\n mostRecentTriggerCharPos - 1,\n mostRecentTriggerCharPos)\n )\n )\n ) {\n let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n effectiveRange.length)\n\n triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length)\n let firstSnippetChar = currentTriggerSnippet.substring(0, 1)\n let leadingSpace = currentTriggerSnippet.length > 0 &&\n (\n firstSnippetChar === ' ' ||\n firstSnippetChar === '\\xA0'\n )\n if (hasTrailingSpace) {\n currentTriggerSnippet = currentTriggerSnippet.trim()\n }\n\n let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n return {\n mentionPosition: mostRecentTriggerCharPos,\n mentionText: currentTriggerSnippet,\n mentionSelectedElement: selected,\n mentionSelectedPath: path,\n mentionSelectedOffset: offset,\n mentionTriggerChar: triggerChar\n }\n }\n }\n }\n }\n\n lastIndexWithLeadingSpace (str, trigger) {\n let reversedStr = str.split('').reverse().join('')\n let index = -1\n\n for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n let firstChar = cidx === str.length - 1\n let leadingSpace = /\\s/.test(reversedStr[cidx + 1])\n\n let match = true\n for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n match = false\n break\n }\n }\n\n if (match && (firstChar || leadingSpace)) {\n index = str.length - 1 - cidx\n break\n }\n }\n\n return index\n }\n\n isContentEditable(element) {\n return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n }\n\n isMenuOffScreen(coordinates, menuDimensions) {\n let windowWidth = window.innerWidth\n let windowHeight = window.innerHeight\n let doc = document.documentElement\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height\n let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width\n let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height\n let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width\n\n return {\n top: menuTop < Math.floor(windowTop),\n right: menuRight > Math.ceil(windowLeft + windowWidth),\n bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n left: menuLeft < Math.floor(windowLeft)\n }\n }\n\n getMenuDimensions() {\n // Width of the menu depends of its contents and position\n // We must check what its width would be without any obstruction\n // This way, we can achieve good positioning for flipping the menu\n let dimensions = {\n width: null,\n height: null\n }\n\n this.tribute.menu.style.cssText = `top: 0px;\n left: 0px;\n position: fixed;\n display: block;\n visibility; hidden;`\n dimensions.width = this.tribute.menu.offsetWidth\n dimensions.height = this.tribute.menu.offsetHeight\n\n this.tribute.menu.style.cssText = `display: none;`\n\n return dimensions\n }\n\n getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n 'overflowY', 'borderTopWidth', 'borderRightWidth',\n 'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n 'textAlign', 'textTransform', 'textIndent',\n 'textDecoration', 'letterSpacing', 'wordSpacing'\n ]\n\n let isFirefox = (window.mozInnerScreenX !== null)\n\n let div = this.getDocument().createElement('div')\n div.id = 'input-textarea-caret-position-mirror-div'\n this.getDocument().body.appendChild(div)\n\n let style = div.style\n let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle\n\n style.whiteSpace = 'pre-wrap'\n if (element.nodeName !== 'INPUT') {\n style.wordWrap = 'break-word'\n }\n\n // position off-screen\n style.position = 'absolute'\n style.visibility = 'hidden'\n\n // transfer the element's properties to the div\n properties.forEach(prop => {\n style[prop] = computed[prop]\n })\n\n if (isFirefox) {\n style.width = `${(parseInt(computed.width) - 2)}px`\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll'\n } else {\n style.overflow = 'hidden'\n }\n\n div.textContent = element.value.substring(0, position)\n\n if (element.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, ' ')\n }\n\n let span = this.getDocument().createElement('span')\n span.textContent = element.value.substring(position) || '.'\n div.appendChild(span)\n\n let rect = element.getBoundingClientRect()\n let doc = document.documentElement\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n let top = 0;\n let left = 0;\n if (this.menuContainerIsBody) {\n top = rect.top;\n left = rect.left;\n }\n\n let coordinates = {\n top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n }\n\n let windowWidth = window.innerWidth\n let windowHeight = window.innerHeight\n\n let menuDimensions = this.getMenuDimensions()\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n if (menuIsOffScreen.right) {\n coordinates.right = windowWidth - coordinates.left\n coordinates.left = 'auto'\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect()\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top)\n\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop)\n coordinates.top = 'auto'\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft\n delete coordinates.right\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop\n delete coordinates.bottom\n }\n\n this.getDocument().body.removeChild(div)\n return coordinates\n }\n\n getContentEditableCaretPosition(selectedNodePosition) {\n let range\n let sel = this.getWindowSelection()\n\n range = this.getDocument().createRange()\n range.setStart(sel.anchorNode, selectedNodePosition)\n range.setEnd(sel.anchorNode, selectedNodePosition)\n\n range.collapse(false)\n\n let rect = range.getBoundingClientRect()\n let doc = document.documentElement\n let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0)\n let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n\n let left = rect.left\n let top = rect.top\n\n let coordinates = {\n left: left + windowLeft,\n top: top + rect.height + windowTop\n }\n let windowWidth = window.innerWidth\n let windowHeight = window.innerHeight\n\n let menuDimensions = this.getMenuDimensions()\n let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n\n if (menuIsOffScreen.right) {\n coordinates.left = 'auto'\n coordinates.right = windowWidth - rect.left - windowLeft\n }\n\n let parentHeight = this.tribute.menuContainer\n ? this.tribute.menuContainer.offsetHeight\n : this.getDocument().body.offsetHeight\n\n if (menuIsOffScreen.bottom) {\n let parentRect = this.tribute.menuContainer\n ? this.tribute.menuContainer.getBoundingClientRect()\n : this.getDocument().body.getBoundingClientRect()\n let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top)\n\n coordinates.top = 'auto'\n coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top)\n }\n\n menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions)\n if (menuIsOffScreen.left) {\n coordinates.left = windowWidth > menuDimensions.width\n ? windowLeft + windowWidth - menuDimensions.width\n : windowLeft\n delete coordinates.right\n }\n if (menuIsOffScreen.top) {\n coordinates.top = windowHeight > menuDimensions.height\n ? windowTop + windowHeight - menuDimensions.height\n : windowTop\n delete coordinates.bottom\n }\n\n if (!this.menuContainerIsBody) {\n coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left\n coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top\n }\n\n return coordinates\n }\n\n scrollIntoView(elem) {\n let reasonableBuffer = 20,\n clientRect\n let maxScrollDisplacement = 100\n let e = this.menu\n\n if (typeof e === 'undefined') return;\n\n while (clientRect === undefined || clientRect.height === 0) {\n clientRect = e.getBoundingClientRect()\n\n if (clientRect.height === 0) {\n e = e.childNodes[0]\n if (e === undefined || !e.getBoundingClientRect) {\n return\n }\n }\n }\n\n let elemTop = clientRect.top\n let elemBottom = elemTop + clientRect.height\n\n if (elemTop < 0) {\n window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer)\n } else if (elemBottom > window.innerHeight) {\n let maxY = window.pageYOffset + clientRect.top - reasonableBuffer\n\n if (maxY - window.pageYOffset > maxScrollDisplacement) {\n maxY = window.pageYOffset + maxScrollDisplacement\n }\n\n let targetY = window.pageYOffset - (window.innerHeight - elemBottom)\n\n if (targetY > maxY) {\n targetY = maxY\n }\n\n window.scrollTo(0, targetY)\n }\n }\n}\n\n\nexport default TributeRange;\n","// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n constructor(tribute) {\n this.tribute = tribute\n this.tribute.search = this\n }\n\n simpleFilter(pattern, array) {\n return array.filter(string => {\n return this.test(pattern, string)\n })\n }\n\n test(pattern, string) {\n return this.match(pattern, string) !== null\n }\n\n match(pattern, string, opts) {\n opts = opts || {}\n let patternIdx = 0,\n result = [],\n len = string.length,\n totalScore = 0,\n currScore = 0,\n pre = opts.pre || '',\n post = opts.post || '',\n compareString = opts.caseSensitive && string || string.toLowerCase(),\n ch, compareChar\n\n if (opts.skip) {\n return {rendered: string, score: 0}\n }\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase()\n\n let patternCache = this.traverse(compareString, pattern, 0, 0, [])\n if (!patternCache) {\n return null\n }\n return {\n rendered: this.render(string, patternCache.cache, pre, post),\n score: patternCache.score\n }\n }\n\n traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n if (this.tribute.autocompleteSeparator) {\n // if the pattern search at end\n pattern = pattern.split(this.tribute.autocompleteSeparator).splice(-1)[0];\n }\n\n if (pattern.length === patternIndex) {\n\n // calculate score and copy the cache containing the indices where it's found\n return {\n score: this.calculateScore(patternCache),\n cache: patternCache.slice()\n }\n }\n\n // if string at end or remaining pattern > remaining string\n if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n return undefined\n }\n\n let c = pattern[patternIndex]\n let index = string.indexOf(c, stringIndex)\n let best, temp\n\n while (index > -1) {\n patternCache.push(index)\n temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache)\n patternCache.pop()\n\n // if downstream traversal failed, return best answer so far\n if (!temp) {\n return best\n }\n\n if (!best || best.score < temp.score) {\n best = temp\n }\n\n index = string.indexOf(c, index + 1)\n }\n\n return best\n }\n\n calculateScore(patternCache) {\n let score = 0\n let temp = 1\n\n patternCache.forEach((index, i) => {\n if (i > 0) {\n if (patternCache[i - 1] + 1 === index) {\n temp += temp + 1\n }\n else {\n temp = 1\n }\n }\n\n score += temp\n })\n\n return score\n }\n\n render(string, indices, pre, post) {\n var rendered = string.substring(0, indices[0])\n\n indices.forEach((index, i) => {\n rendered += pre + string[index] + post +\n string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length)\n })\n\n return rendered\n }\n\n filter(pattern, arr, opts) {\n opts = opts || {}\n return arr\n .reduce((prev, element, idx, arr) => {\n let str = element\n\n if (opts.extract) {\n str = opts.extract(element)\n\n if (!str) { // take care of undefineds / nulls / etc.\n str = ''\n }\n }\n\n let rendered = this.match(pattern, str, opts)\n\n if (rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered,\n score: rendered.score,\n index: idx,\n original: element\n }\n }\n\n return prev\n }, [])\n\n .sort((a, b) => {\n let compare = b.score - a.score\n if (compare) return compare\n return a.index - b.index\n })\n }\n}\n\nexport default TributeSearch;\n","import \"./utils\";\nimport TributeEvents from \"./TributeEvents\";\nimport TributeMenuEvents from \"./TributeMenuEvents\";\nimport TributeRange from \"./TributeRange\";\nimport TributeSearch from \"./TributeSearch\";\n\nclass Tribute {\n constructor({\n values = null,\n iframe = null,\n selectClass = \"highlight\",\n containerClass = \"tribute-container\",\n itemClass = \"\",\n trigger = \"@\",\n autocompleteMode = false,\n autocompleteSeparator = null,\n selectTemplate = null,\n menuItemTemplate = null,\n lookup = \"key\",\n fillAttr = \"value\",\n collection = null,\n menuContainer = null,\n noMatchTemplate = null,\n requireLeadingSpace = true,\n allowSpaces = false,\n replaceTextSuffix = null,\n positionMenu = true,\n spaceSelectsMatch = false,\n searchOpts = {},\n menuItemLimit = null,\n menuShowMinLength = 0\n }) {\n this.autocompleteMode = autocompleteMode;\n this.autocompleteSeparator = autocompleteSeparator;\n this.menuSelected = 0;\n this.current = {};\n this.inputEvent = false;\n this.isActive = false;\n this.menuContainer = menuContainer;\n this.allowSpaces = allowSpaces;\n this.replaceTextSuffix = replaceTextSuffix;\n this.positionMenu = positionMenu;\n this.hasTrailingSpace = false;\n this.spaceSelectsMatch = spaceSelectsMatch;\n\n if (this.autocompleteMode) {\n trigger = \"\";\n allowSpaces = false;\n }\n\n if (values) {\n this.collection = [\n {\n // symbol that starts the lookup\n trigger: trigger,\n\n // is it wrapped in an iframe\n iframe: iframe,\n\n // class applied to selected item\n selectClass: selectClass,\n\n // class applied to the Container\n containerClass: containerClass,\n\n // class applied to each item\n itemClass: itemClass,\n\n // function called on select that retuns the content to insert\n selectTemplate: (\n selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n\n // function called that returns content for an item\n menuItemTemplate: (\n menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"No Match Found!\";\n }.bind(this)\n );\n })(noMatchTemplate),\n\n // column to search against in the object\n lookup: lookup,\n\n // column that contains the content to insert by default\n fillAttr: fillAttr,\n\n // array of objects or a function returning an array of objects\n values: values,\n\n requireLeadingSpace: requireLeadingSpace,\n\n searchOpts: searchOpts,\n\n menuItemLimit: menuItemLimit,\n\n menuShowMinLength: menuShowMinLength\n }\n ];\n } else if (collection) {\n if (this.autocompleteMode)\n console.warn(\n \"Tribute in autocomplete mode does not work for collections\"\n );\n this.collection = collection.map(item => {\n return {\n trigger: item.trigger || trigger,\n iframe: item.iframe || iframe,\n selectClass: item.selectClass || selectClass,\n containerClass: item.containerClass || containerClass,\n itemClass: item.itemClass || itemClass,\n selectTemplate: (\n item.selectTemplate || Tribute.defaultSelectTemplate\n ).bind(this),\n menuItemTemplate: (\n item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n ).bind(this),\n // function called when menu is empty, disables hiding of menu.\n noMatchTemplate: (t => {\n if (typeof t === \"string\") {\n if (t.trim() === \"\") return null;\n return t;\n }\n if (typeof t === \"function\") {\n return t.bind(this);\n }\n\n return (\n noMatchTemplate ||\n function() {\n return \"No Match Found!\";\n }.bind(this)\n );\n })(noMatchTemplate),\n lookup: item.lookup || lookup,\n fillAttr: item.fillAttr || fillAttr,\n values: item.values,\n requireLeadingSpace: item.requireLeadingSpace,\n searchOpts: item.searchOpts || searchOpts,\n menuItemLimit: item.menuItemLimit || menuItemLimit,\n menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n };\n });\n } else {\n throw new Error(\"[Tribute] No collection specified.\");\n }\n\n new TributeRange(this);\n new TributeEvents(this);\n new TributeMenuEvents(this);\n new TributeSearch(this);\n }\n\n get isActive() {\n return this._isActive;\n }\n\n set isActive(val) {\n if (this._isActive != val) {\n this._isActive = val;\n if (this.current.element) {\n let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n this.current.element.dispatchEvent(noMatchEvent);\n }\n }\n }\n\n static defaultSelectTemplate(item) {\n if (typeof item === \"undefined\")\n return `${this.current.collection.trigger}${this.current.mentionText}`;\n if (this.range.isContentEditable(this.current.element)) {\n return (\n '' +\n (this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]) +\n \"\"\n );\n }\n\n return (\n this.current.collection.trigger +\n item.original[this.current.collection.fillAttr]\n );\n }\n\n static defaultMenuItemTemplate(matchItem) {\n return matchItem.string;\n }\n\n static inputTypes() {\n return [\"TEXTAREA\", \"INPUT\"];\n }\n\n triggers() {\n return this.collection.map(config => {\n return config.trigger;\n });\n }\n\n attach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._attach(el[i]);\n }\n } else {\n this._attach(el);\n }\n }\n\n _attach(el) {\n if (el.hasAttribute(\"data-tribute\")) {\n console.warn(\"Tribute was already bound to \" + el.nodeName);\n }\n\n this.ensureEditable(el);\n this.events.bind(el);\n el.setAttribute(\"data-tribute\", true);\n }\n\n ensureEditable(element) {\n if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n if (element.contentEditable) {\n element.contentEditable = true;\n } else {\n throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n }\n }\n }\n\n createMenu(containerClass) {\n let wrapper = this.range.getDocument().createElement(\"div\"),\n ul = this.range.getDocument().createElement(\"ul\");\n wrapper.className = containerClass;\n wrapper.appendChild(ul);\n\n if (this.menuContainer) {\n return this.menuContainer.appendChild(wrapper);\n }\n\n return this.range.getDocument().body.appendChild(wrapper);\n }\n\n showMenuFor(element, scrollTo) {\n // Only proceed if menu isn't already shown for the current element & mentionText\n if (\n this.isActive &&\n this.current.element === element &&\n this.current.mentionText === this.currentMentionTextSnapshot\n ) {\n return;\n }\n this.currentMentionTextSnapshot = this.current.mentionText;\n\n // create the menu if it doesn't exist.\n if (!this.menu) {\n this.menu = this.createMenu(this.current.collection.containerClass);\n element.tributeMenu = this.menu;\n this.menuEvents.bind(this.menu);\n }\n\n this.isActive = true;\n this.menuSelected = 0;\n\n if (!this.current.mentionText) {\n this.current.mentionText = \"\";\n }\n\n const processValues = values => {\n // Tribute may not be active any more by the time the value callback returns\n if (!this.isActive) {\n return;\n }\n\n let items = this.search.filter(this.current.mentionText, values, {\n pre: this.current.collection.searchOpts.pre || \"\",\n post: this.current.collection.searchOpts.post || \"\",\n skip: this.current.collection.searchOpts.skip,\n extract: el => {\n if (typeof this.current.collection.lookup === \"string\") {\n return el[this.current.collection.lookup];\n } else if (typeof this.current.collection.lookup === \"function\") {\n return this.current.collection.lookup(el, this.current.mentionText);\n } else {\n throw new Error(\n \"Invalid lookup attribute, lookup must be string or function.\"\n );\n }\n }\n });\n\n if (this.current.collection.menuItemLimit) {\n items = items.slice(0, this.current.collection.menuItemLimit);\n }\n\n this.current.filteredItems = items;\n\n let ul = this.menu.querySelector(\"ul\");\n\n this.range.positionMenuAtCaret(scrollTo);\n\n if (!items.length) {\n let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n detail: this.menu\n });\n this.current.element.dispatchEvent(noMatchEvent);\n if (\n (typeof this.current.collection.noMatchTemplate === \"function\" &&\n !this.current.collection.noMatchTemplate()) ||\n !this.current.collection.noMatchTemplate\n ) {\n this.hideMenu();\n } else {\n typeof this.current.collection.noMatchTemplate === \"function\"\n ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n : (ul.innerHTML = this.current.collection.noMatchTemplate);\n }\n\n return;\n }\n\n ul.innerHTML = \"\";\n let fragment = this.range.getDocument().createDocumentFragment();\n\n items.forEach((item, index) => {\n let li = this.range.getDocument().createElement(\"li\");\n li.setAttribute(\"data-index\", index);\n li.className = this.current.collection.itemClass;\n li.addEventListener(\"mousemove\", e => {\n let [li, index] = this._findLiTarget(e.target);\n if (e.movementY !== 0) {\n this.events.setActiveLi(index);\n }\n });\n if (this.menuSelected === index) {\n li.classList.add(this.current.collection.selectClass);\n }\n li.innerHTML = this.current.collection.menuItemTemplate(item);\n fragment.appendChild(li);\n });\n ul.appendChild(fragment);\n };\n\n if (typeof this.current.collection.values === \"function\") {\n this.current.collection.values(this.current.mentionText, processValues);\n } else {\n processValues(this.current.collection.values);\n }\n }\n\n _findLiTarget(el) {\n if (!el) return [];\n const index = el.getAttribute(\"data-index\");\n return !index ? this._findLiTarget(el.parentNode) : [el, index];\n }\n\n showMenuForCollection(element, collectionIndex) {\n if (element !== document.activeElement) {\n this.placeCaretAtEnd(element);\n }\n\n this.current.collection = this.collection[collectionIndex || 0];\n this.current.externalTrigger = true;\n this.current.element = element;\n\n if (element.isContentEditable)\n this.insertTextAtCursor(this.current.collection.trigger);\n else this.insertAtCaret(element, this.current.collection.trigger);\n\n this.showMenuFor(element);\n }\n\n // TODO: make sure this works for inputs/textareas\n placeCaretAtEnd(el) {\n el.focus();\n if (\n typeof window.getSelection != \"undefined\" &&\n typeof document.createRange != \"undefined\"\n ) {\n var range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n var textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n // for contenteditable\n insertTextAtCursor(text) {\n var sel, range, html;\n sel = window.getSelection();\n range = sel.getRangeAt(0);\n range.deleteContents();\n var textNode = document.createTextNode(text);\n range.insertNode(textNode);\n range.selectNodeContents(textNode);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n // for regular inputs\n insertAtCaret(textarea, text) {\n var scrollPos = textarea.scrollTop;\n var caretPos = textarea.selectionStart;\n\n var front = textarea.value.substring(0, caretPos);\n var back = textarea.value.substring(\n textarea.selectionEnd,\n textarea.value.length\n );\n textarea.value = front + text + back;\n caretPos = caretPos + text.length;\n textarea.selectionStart = caretPos;\n textarea.selectionEnd = caretPos;\n textarea.focus();\n textarea.scrollTop = scrollPos;\n }\n\n hideMenu() {\n if (this.menu) {\n this.menu.style.cssText = \"display: none;\";\n this.isActive = false;\n this.menuSelected = 0;\n this.current = {};\n }\n }\n\n selectItemAtIndex(index, originalEvent) {\n index = parseInt(index);\n if (typeof index !== \"number\" || isNaN(index)) return;\n let item = this.current.filteredItems[index];\n let content = this.current.collection.selectTemplate(item);\n if (content !== null) this.replaceText(content, originalEvent, item);\n }\n\n replaceText(content, originalEvent, item) {\n this.range.replaceTriggerText(content, true, true, originalEvent, item);\n }\n\n _append(collection, newValues, replace) {\n if (typeof collection.values === \"function\") {\n throw new Error(\"Unable to append to values, as it is a function.\");\n } else if (!replace) {\n collection.values = collection.values.concat(newValues);\n } else {\n collection.values = newValues;\n }\n }\n\n append(collectionIndex, newValues, replace) {\n let index = parseInt(collectionIndex);\n if (typeof index !== \"number\")\n throw new Error(\"please provide an index for the collection to update.\");\n\n let collection = this.collection[index];\n\n this._append(collection, newValues, replace);\n }\n\n appendCurrent(newValues, replace) {\n if (this.isActive) {\n this._append(this.current.collection, newValues, replace);\n } else {\n throw new Error(\n \"No active state. Please use append instead and pass an index.\"\n );\n }\n }\n\n detach(el) {\n if (!el) {\n throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n }\n\n // Check if it is a jQuery collection\n if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n el = el.get();\n }\n\n // Is el an Array/Array-like object?\n if (\n el.constructor === NodeList ||\n el.constructor === HTMLCollection ||\n el.constructor === Array\n ) {\n let length = el.length;\n for (var i = 0; i < length; ++i) {\n this._detach(el[i]);\n }\n } else {\n this._detach(el);\n }\n }\n\n _detach(el) {\n this.events.unbind(el);\n if (el.tributeMenu) {\n this.menuEvents.unbind(el.tributeMenu);\n }\n\n setTimeout(() => {\n el.removeAttribute(\"data-tribute\");\n this.isActive = false;\n if (el.tributeMenu) {\n el.tributeMenu.remove();\n }\n });\n }\n}\n\nexport default Tribute;\n"],"names":["Array","prototype","find","predicate","this","TypeError","value","list","Object","length","thisArg","arguments","i","call","window","CustomEvent","event","params","bubbles","cancelable","detail","undefined","evt","document","createEvent","initCustomEvent","Event","TributeEvents","tribute","events","element","boundKeydown","keydown","bind","boundKeyup","keyup","boundInput","input","addEventListener","removeEventListener","instance","shouldDeactivate","isActive","hideMenu","commandEvent","keys","forEach","o","key","keyCode","callbacks","toLowerCase","inputEvent","menu","contains","target","li","preventDefault","stopPropagation","nodeName","parentNode","Error","selectItemAtIndex","getAttribute","current","externalTrigger","setTimeout","updateSelection","allowSpaces","hasTrailingSpace","autocompleteMode","triggerChar","getKeyCode","isNaN","trigger","triggers","charCodeAt","mentionText","collection","menuShowMinLength","showMenuFor","eventKeyPressed","el","info","range","getTriggerInfo","mentionTriggerChar","selectedPath","mentionSelectedPath","selectedOffset","mentionSelectedOffset","e","_this","collectionItem","item","enter","filteredItems","menuSelected","escape","tab","space","spaceSelectsMatch","up","count","selected","setActiveLi","scrollTop","scrollHeight","down","index","lis","querySelectorAll","parseInt","classList","add","selectClass","liClientRect","getBoundingClientRect","menuClientRect","bottom","scrollDistance","top","remove","elem","includeMargin","height","style","currentStyle","getComputedStyle","parseFloat","marginTop","marginBottom","TributeMenuEvents","menuEvents","menuClickEvent","click","menuContainerScrollEvent","debounce","windowResizeEvent","positionMenuAtCaret","getDocument","menuContainer","func","wait","immediate","timeout","context","_this2","args","callNow","clearTimeout","apply","TributeRange","iframe","contentWindow","scrollTo","coordinates","positionMenu","cssText","isContentEditable","getContentEditableCaretPosition","mentionPosition","getTextAreaOrInputUnderlinePosition","left","right","scrollIntoView","menuDimensions","width","offsetWidth","offsetHeight","menuIsOffScreen","isMenuOffScreen","menuIsOffScreenHorizontally","innerWidth","menuIsOffScreenVertically","innerHeight","targetElement","path","offset","childNodes","nextSibling","previousSibling","sel","getWindowSelection","createRange","setStart","setEnd","collapse","removeAllRanges","error","addRange","focus","text","requireLeadingSpace","originalEvent","replaceEvent","replaceTextSuffix","endPos","pasteHtml","myField","textSuffix","startPos","substring","selectionStart","selectionEnd","dispatchEvent","html","anchorNode","deleteContents","createElement","innerHTML","node","lastNode","frag","createDocumentFragment","firstChild","appendChild","insertNode","cloneRange","setStartAfter","getSelection","ctx","ce","contentEditable","getNodePositionInParent","push","reverse","getRangeAt","startOffset","selectedElem","workingNodeContent","textContent","selectStartOffset","textComponent","wordsArray","replace","autocompleteSeparator","split","trim","menuAlreadyActive","isAutocomplete","selectionInfo","getContentEditableSelectedPath","effectiveRange","getTextPrecedingCurrentSelection","lastWordOfEffectiveRange","getLastWordInText","mentionSelectedElement","mostRecentTriggerCharPos","config","c","idx","lastIndexWithLeadingSpace","lastIndexOf","test","currentTriggerSnippet","firstSnippetChar","leadingSpace","regex","str","reversedStr","join","cidx","len","firstChar","match","triggerIdx","windowWidth","windowHeight","doc","documentElement","windowLeft","pageXOffset","scrollLeft","clientLeft","windowTop","pageYOffset","clientTop","menuTop","menuRight","menuBottom","menuLeft","Math","floor","ceil","dimensions","position","flipped","isFirefox","mozInnerScreenX","div","id","body","computed","whiteSpace","wordWrap","visibility","prop","overflowY","overflow","span","rect","menuContainerIsBody","offsetTop","borderTopWidth","fontSize","offsetLeft","borderLeftWidth","getMenuDimensions","parentHeight","scrollStillAvailable","removeChild","selectedNodePosition","clientRect","elemTop","elemBottom","maxY","targetY","TributeSearch","search","pattern","array","filter","string","opts","pre","post","compareString","caseSensitive","skip","rendered","score","patternCache","traverse","render","cache","stringIndex","patternIndex","splice","calculateScore","slice","best","temp","indexOf","pop","indices","arr","reduce","prev","extract","original","sort","a","b","compare","t","values","containerClass","itemClass","selectTemplate","menuItemTemplate","lookup","fillAttr","noMatchTemplate","searchOpts","menuItemLimit","Tribute","defaultSelectTemplate","defaultMenuItemTemplate","console","warn","map","jQuery","get","constructor","NodeList","HTMLCollection","_attach","hasAttribute","ensureEditable","setAttribute","inputTypes","wrapper","ul","className","currentMentionTextSnapshot","createMenu","tributeMenu","processValues","items","querySelector","noMatchEvent","fragment","_findLiTarget","movementY","collectionIndex","activeElement","placeCaretAtEnd","insertTextAtCursor","insertAtCaret","selectNodeContents","createTextRange","textRange","moveToElementText","select","textNode","createTextNode","textarea","scrollPos","caretPos","front","back","content","replaceText","replaceTriggerText","newValues","concat","_append","_detach","unbind","removeAttribute","_this3","_isActive","val","matchItem"],"mappings":"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"}
\ No newline at end of file
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
deleted file mode 100644
index 84a26c16f..000000000
--- a/public/stylesheets/application.css
+++ /dev/null
@@ -1,1979 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-html, body { min-height: 100vh; }
-html {overflow-y:scroll;}
-body { font-family: Verdana, sans-serif; font-size: 12px; color:#333; margin: 0; padding: 0; min-width: 900px; }
-
-h1, h2, h3, h4, h5, h6 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
-#content h1, h2, h3, h4, h5, h6 {color: #555;}
-h2 {font-size: 20px;}
-h3 {font-size: 16px;}
-h4 {font-size: 13px; border-bottom: 1px solid #ccc; font-weight:normal;}
-pre, code {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
-.wiki h1 {font-size: 2em;}
-.wiki h2 {font-size: 1.8em;}
-.wiki h3 {font-size: 1.5em;}
-.wiki h4 {font-size: 1.2em; border: none; font-weight: bold;}
-.wiki h5 {font-size: 1em;}
-.wiki h6 {font-size: 1em; color: #8e8e8e;}
-
-/***** Layout *****/
-#wrapper {
- min-height: inherit;
- background: white;
- overflow: hidden;
- display: flex;
- flex-direction: column;
-}
-
-#top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 10px 0px 12px;}
-#top-menu ul {margin: 0; padding: 0;}
-#top-menu li {
- float:left;
- list-style-type:none;
- margin: 0px 0px 0px 0px;
- padding: 0px 0px 0px 0px;
- white-space:nowrap;
-}
-#top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
-#top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
-
-#account {float:right;}
-
-#header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 16px 20px 16px; position:relative;}
-#header a {color:#f8f8f8;}
-#header h1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
-#header h1 .breadcrumbs { display:block; font-size: .5em; font-weight: normal; }
-
-#quick-search {float:right;}
-#quick-search #q {width:130px; height:24px; box-sizing:border-box; vertical-align:middle; border:1px solid #ccc; border-radius:3px;}
-#quick-search form {float:left; margin-right:3px;}
-#quick-search form input {margin-top:0; margin-bottom:0;}
-#quick-search form label {vertical-align:middle;}
-#quick-search #project-jump {float:left;}
-
-#main-menu {position: absolute; bottom: 0px; left: 10px; margin-right: -500px; width: 100%;}
-#main-menu ul {margin: 0; padding: 0; width: 100%; white-space: nowrap;}
-#main-menu li {
- float:none;
- list-style-type:none;
- margin: 0px 2px 0px 0px;
- padding: 0px 0px 0px 0px;
- white-space:nowrap;
- display:inline-block;
-}
-#main-menu li a {
- display: block;
- color: #fff;
- text-decoration: none;
- font-weight: bold;
- margin: 0;
- padding: 4px 10px 4px 10px;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-#main-menu li a:hover {background: #759FCF; color: #fff; }
-#main-menu li:hover ul.menu-children, #main-menu li ul.menu-children.visible {display: block;}
-#main-menu li a.selected, #main-menu li a.selected:hover {background: #fff; color: #555; }
-#main-menu li a.new-object {background-color: #759FCF; }
-
-#main-menu .menu-children {
- display: none;
- position:absolute;
- width: inherit;
- z-index:45;
- background-color:#fff;
- border-right: 1px solid #759FCF;
- border-bottom: 1px solid #759FCF;
- border-left: 1px solid #759FCF;
-}
-#main-menu .menu-children li {float:left; clear:both; width:100%;}
-#main-menu .menu-children li a {color: #555; background-color:#fff; font-weight:normal; border-radius: 0;}
-#main-menu .menu-children li a:hover {color: #fff; background-color: #759FCF;}
-
-#main-menu .tabs-buttons {
- right: 6px;
- background-color: transparent;
- border-bottom-color: transparent;
-}
-
-#admin-menu ul {margin: 0; padding: 0;}
-#admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
-
-#main {flex-grow: 2; display: flex; flex-direction: row-reverse;}
-
-#sidebar{ flex-shrink: 0; padding-left: 20px; padding-right: 8px; background: #EEEEEE; border-left: 1px solid #ddd}
-@media screen and (min-width: 0px) and (max-width: 1089px) {#sidebar{width: 22%;}}
-@media screen and (min-width: 1090px) and (max-width: 1279px) {#sidebar{width: 240px;}}
-@media screen and (min-width: 1280px) and (max-width: 1599px) {#sidebar{width: 280px;}}
-@media screen and (min-width: 1600px) and (max-width: 1919px) {#sidebar{width: 320px;}}
-@media screen and (min-width: 1920px) and (max-width: 2559px) {#sidebar{width: 360px;}}
-@media screen and (min-width: 2560px) {#sidebar{width: 380px;}}
-#sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
-#sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
-* html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
-#sidebar .contextual { margin-right: 1em; }
-#sidebar ul, ul.flat {margin: 0; padding: 0;}
-#sidebar ul li, ul.flat li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
-#sidebar div.wiki ul {margin:inherit; padding-left:40px;}
-#sidebar div.wiki ul li {list-style-type:inherit;}
-#sidebar a.icon-only {opacity: 0.4; margin-left: 5px;}
-#sidebar a.icon-only:hover {opacity: 1;}
-#sidebar span.icon-warning {margin-left: 5px;}
-#sidebar li input[type=checkbox] {height: 20px;}
-
-#content { flex-grow: 1; background-color: #fff; margin: 0px; padding: 10px 16px 10px 16px; overflow-x: auto;}
-
-#main.nosidebar #sidebar{ display: none; }
-
-#footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
-
-#login-form {margin:5em auto 2em auto; padding:20px; width:340px; border:1px solid #FDBF3B; background-color:#FFEBC1; border-radius:4px; box-sizing: border-box;}
-#login-form label {display:block; margin-bottom:5px; font-weight:bold;}
-#login-form label[for=autologin] {font-weight:normal;}
-#login-form input {height: 29px;}
-#login-form input[type=text], #login-form input[type=password], #login-form input[type=submit] {display: block; width: 100%;}
-#login-form input[type=text], #login-form input[type=password] {margin-bottom: 15px;}
-#login-form a.lost_password {float:right; font-weight:normal;}
-#login-form h3 {text-align: center;}
-
-div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
-div.modal h3.title {display:none;}
-div.modal p.buttons {margin-bottom:0;}
-div.modal .box p {margin: 0.3em 0;}
-
-.clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-
-.mobile-show {display: none;}
-.hidden {display: none;}
-.inline-block {display: inline-block;}
-.inline-flex {display: inline-flex;}
-
-/***** Links *****/
-a, a:link, a:visited{ color: #169; text-decoration: none; }
-a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
-a img{ border: 0; }
-
-a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
-a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
-a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
-a.user.user-mention {
- background-color: #DDEEFF;
- padding: 0.1em 0.1em;
- border-radius: 0.1em;
-}
-
-#sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
-#sidebar a.selected:hover {text-decoration:none;}
-#sidebar .query.default {font-weight: bold;}
-#admin-menu a {line-height:1.7em;}
-#admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
-
-a.collapsible {padding-left: 12px; }
-
-a#toggle-completed-versions {color:#999;}
-
-/***** Dropdown *****/
-.drdn {position:relative;}
-.drdn-trigger {
- box-sizing:border-box;
- overflow:hidden;
- text-overflow:ellipsis;
- white-space:nowrap;
- cursor:pointer;
- user-select:none;
- -moz-user-select:none;
- -webkit-user-select:none;
-}
-.drdn-content {
- display:none;
- position:absolute;
- right:0px;
- top:25px;
- min-width:100px;
- background-color:#fff;
- border:1px solid #ccc;
- border-radius:4px;
- color:#555;
- z-index:99;
-}
-.drdn.expanded .drdn-content {display:block;}
-
-.drdn-content .quick-search {margin:8px;}
-.drdn-content .autocomplete {box-sizing: border-box; width:100% !important; height:28px;}
-.drdn-content .autocomplete:focus {border-color:#5ad;}
-.drdn-items {max-height:400px; overflow:auto;}
-div + .drdn-items {border-top:1px solid #ccc;}
-.drdn-items>* {
- display:block;
- border:1px solid #fff;
- overflow:hidden;
- text-overflow: ellipsis;
- white-space:nowrap;
- padding:4px 8px;
-}
-.drdn-items>a:hover {text-decoration:none;}
-.drdn-items>*:focus {border:1px dotted #bbb;}
-
-.drdn-items.selection>*:before {
- content:' ';
- display:inline-block;
- line-height:1em;
- width:1em;
- height:1em;
- margin-right:4px;
- font-weight:bold;
-}
-.drdn-items.selection>*.selected:before {
- content:"\2713 ";
-}
-.drdn-items.selection:empty {
- border: none;
-}
-.drdn-items>span {color:#999;}
-
-.contextual .drdn-content {top:18px;}
-.contextual .drdn-items {padding:2px; min-width: 160px;}
-.contextual .drdn-items>a {padding: 5px 8px;}
-.contextual .drdn-items>a.icon {padding-left: 24px; background-position-x: 4px;}
-.contextual .drdn-items>a:hover {color:#2A5685; border:1px solid #628db6; background-color:#eef5fd; border-radius:3px;}
-
-#project-jump.drdn {width:200px;display:inline-block;}
-#project-jump .drdn-trigger {
- width:100%;
- height:24px;
- display:inline-block;
- padding:3px 18px 3px 6px;
- border-radius:3px;
- border:1px solid #ccc;
- margin:0 !important;
- vertical-align:middle;
- color:#555;
- background:#fff url(/arrow_down.png) no-repeat 97% 50%;
-}
-#project-jump .drdn.expanded .drdn-trigger {background-image:url(/arrow_up.png);}
-#project-jump .drdn-content {width:280px;}
-#project-jump .drdn-items>* {color:#555 !important;}
-#project-jump .drdn-items>a:hover {background-color:#759FCF; color:#fff !important;}
-
-/***** Tables *****/
-table.list, .table-list { border: 1px solid #e4e4e4; width: 100%; margin-bottom: 4px; border-radius: 3px; border-spacing: 0; overflow: hidden;}
-table.list th, .table-list-header { background-color:#EEEEEE; padding: 4px; white-space:nowrap; font-weight:bold; }
-table.list th.whitespace-normal {white-space: normal;}
-table.list td {text-align:center; vertical-align:middle; padding-right:10px;}
-table.list td.id { width: 2%; text-align: center;}
-table.list td.name, table.list td.description, table.list td.subject, table.list td.parent-subject, table.list td.comments, table.list td.roles, table.list td.attachments, table.list td.text, table.list td.short_description {text-align: left;}
-
-table.list td.attachments span {display: block; height: 16px;}
-table.list td.attachments span a.icon-download {display: inline-block; visibility: hidden;}
-table.list td.attachments span:hover a.icon-download {visibility: visible;}
-table.list td.tick {width:15%}
-table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
-table.list .checkbox input {padding:0px; height: initial;}
-table.list td.buttons, div.buttons { white-space:nowrap; text-align: right; }
-table.list td.buttons a, div.buttons a { margin-right: 0.6em; }
-table.list td.buttons a:last-child, div.buttons a:last-child { margin-right: 0; }
-table.list td.buttons img, div.buttons img {vertical-align:middle;}
-table.list td.reorder {width:15%; white-space:nowrap; text-align:center; }
-table.list table.progress td {padding-right:0px;}
-table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
-table.list tr.overdue td.due_date { color: #c22; }
-#role-permissions-trackers table.list th {white-space:normal;}
-
-.table-list-cell {display: table-cell; vertical-align: top; padding:2px; }
-.table-list div.buttons {width: 15%;}
-
-tr.project td.name a { white-space:nowrap; }
-tr.project.closed, tr.project.archived { color: #aaa; }
-tr.project.closed a, tr.project.archived a { color: #aaa; }
-
-tr.issue { text-align: center; white-space: nowrap; }
-tr.issue td.subject, tr.issue td.parent-subject, tr.issue td.category, td.assigned_to, td.last_updated_by, tr.issue td.string, tr.issue td.text, tr.issue td.list, tr.issue td.relations, tr.issue td.parent { white-space: normal; }
-tr.issue td.relations { text-align: left; }
-tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
-tr.issue td.relations span {white-space: nowrap;}
-table.issues td.block_column {color:#777; font-size:90%; padding:4px 4px 4px 24px; text-align:left; white-space:normal;}
-table.issues td.block_column span {font-weight: bold; display: block; margin-bottom: 4px;}
-table.issues td.block_column pre {white-space:normal;}
-
-tr.idnt td.subject, tr.idnt td.name {background: url(/arrow_right.png) no-repeat 2px 50%;}
-tr.idnt-1 td.subject, tr.idnt-1 td.name {padding-left: 24px; background-position: 8px 50%;}
-tr.idnt-2 td.subject, tr.idnt-2 td.name {padding-left: 40px; background-position: 24px 50%;}
-tr.idnt-3 td.subject, tr.idnt-3 td.name {padding-left: 56px; background-position: 40px 50%;}
-tr.idnt-4 td.subject, tr.idnt-4 td.name {padding-left: 72px; background-position: 56px 50%;}
-tr.idnt-5 td.subject, tr.idnt-5 td.name {padding-left: 88px; background-position: 72px 50%;}
-tr.idnt-6 td.subject, tr.idnt-6 td.name {padding-left: 104px; background-position: 88px 50%;}
-tr.idnt-7 td.subject, tr.idnt-7 td.name {padding-left: 120px; background-position: 104px 50%;}
-tr.idnt-8 td.subject, tr.idnt-8 td.name {padding-left: 136px; background-position: 120px 50%;}
-tr.idnt-9 td.subject, tr.idnt-9 td.name {padding-left: 152px; background-position: 136px 50%;}
-
-table.issue-report {table-layout:fixed;}
-.issue-report-graph {width: 75%; margin: 2em 0;}
-
-tr.entry { border: 1px solid #f8f8f8; }
-tr.entry td { white-space: nowrap; }
-tr.entry td.filename {width:30%; text-align:left;}
-tr.entry td.filename_no_report {width:70%; text-align:left;}
-tr.entry td.size { text-align: right; font-size: 90%; }
-tr.entry td.revision, tr.entry td.author { text-align: center; }
-tr.entry td.age { text-align: right; }
-tr.entry.file td.filename a { margin-left: 16px; }
-tr.entry.file td.filename_no_report a { margin-left: 16px; }
-
-tr span.expander, .gantt_subjects div > span.expander {background-position: 2px 50%; padding-left: 8px; margin-left: 0; cursor: pointer;}
-.gantt_subjects div > span.expander {padding-left: 12px;}
-.gantt_subjects div > span .icon-gravatar {float: none;}
-
-tr.changeset { height: 20px }
-tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
-tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
-tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
-tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
-
-table.files tbody th {text-align:left;}
-table.files tr.file td.filename { text-align: left; padding-left: 24px; }
-table.files tr.file td.digest { font-size: 80%; }
-
-table.members td.roles, table.memberships td.roles { width: 45%; }
-table.members td.buttons { text-align: left; width: 1px; white-space: nowrap;}
-
-table.messages td.last_message {text-align:left;}
-tr.message { height: 2.6em; }
-tr.message td.created_on { white-space: nowrap; }
-tr.message td.last_message { font-size: 80%; white-space: nowrap; }
-tr.message.sticky td.subject { font-weight: bold; }
-
-body.avatars-on #replies .message.reply {padding-left: 32px;}
-#replies .reply:target h4.reply-header {background-color:#DDEEFF;}
-#replies h4 img.gravatar {margin-left:-32px;}
-
-tr.version.closed, tr.version.closed a { color: #999; }
-tr.version td.name { padding-left: 20px; }
-tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
-
-tr.member td.icon-user, #principals_for_new_member .icon-user {background:transparent;}
-
-tr.user td {width:13%;white-space: nowrap;}
-td.username, td.firstname, td.lastname, td.email {text-align:left !important;}
-tr.user td.email { width:18%; }
-tr.user.locked, tr.user.registered { color: #aaa; }
-tr.user.locked a, tr.user.registered a { color: #aaa; }
-
-table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
-table.permissions tr.group>td:nth-of-type(1),
-table.tracker-summary tr.group>td:nth-of-type(1) {font-weight: bold;}
-
-tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
-
-tr.time-entry { text-align: center; white-space: nowrap; }
-tr.time-entry td.issue, tr.time-entry td.comments, tr.time-entry td.subject, tr.time-entry td.activity, tr.time-entry td.project { text-align: left; white-space: normal; }
-td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
-td.hours .hours-dec { font-size: 0.9em; }
-
-table.plugins td { vertical-align: middle; }
-table.plugins td.configure { text-align: right; padding-right: 1em; }
-table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
-table.plugins span.description { display: block; font-size: 0.9em; }
-table.plugins span.url { display: block; font-size: 0.9em; }
-
-table.list.enumerations {table-layout: fixed; margin-bottom: 2em;}
-
-tr.group td { padding: 0.8em 0 0.5em 0.3em; border-bottom: 1px solid #ccc; text-align:left; background-color: #fff;}
-tr.group span.count {top:-1px;}
-tr.group span.name {font-weight:bold;}
-tr.group span.totals {color: #aaa; font-size: 80%;}
-tr.group span.totals .value {font-weight:bold; color:#777;}
-tr.group a.toggle-all { color: #aaa; font-size: 80%; display:none; float:right; margin-right:4px;}
-tr.group:hover a.toggle-all { display:inline;}
-a.toggle-all:hover {text-decoration:none;}
-
-table.list tbody tr.group:hover { background-color:inherit; }
-
-table td {padding:2px;}
-table p {margin:0;}
-
-table.list:not(.odd-even) tbody tr:nth-child(odd), .odd, #issue-changesets div.changeset:nth-child(odd) { background-color:#f6f7f8; }
-table.list:not(.odd-even) tbody tr:nth-child(even), .even, #issue-changesets div.changeset:nth-child(even) { background-color: #fff; }
-table.list:not(.odd-even) tbody tr:nth-child(odd):hover, .odd:hover, #issue-changesets div.changeset:nth-child(odd):hover,
-table.list:not(.odd-even) tbody tr:nth-child(even):hover, .even:hover, #issue-changesets div.changeset:nth-child(even):hover { background-color:#ffffdd; }
-
-tr.builtin td.name {font-style:italic;}
-
-a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
-
-table.boards a.board { background: url(/comment.png) no-repeat 0% 50%; padding-left: 20px; }
-table.boards td.last-message {text-align:left;font-size:80%;}
-
-div.table-list.boards .table-list-cell.name {width: 30%;}
-
-#query_form_content {font-size:90%;}
-#query_form_with_buttons > p.contextual {font-size:12px; margin:12px 0px;}
-
-.query_sort_criteria_count {
- display: inline-block;
- min-width: 1em;
-}
-
-/* query form - options */
-#list-definition {
- margin: 0 15px;
- width: auto !important;
-}
-#list-definition > div {
- margin: 6px 0;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: 5px 10px;
-}
-#list-definition > div .field{
- width: 160px;
-}
-.query-columns label {
- display:block;
-}
-#list-definition .buttons input[type=button] {
- width:35px;
- display:block;
-}
-.query-columns select {
- min-width:150px;
-}
-
-.query-totals {text-align:right; margin-top:-2.3em;}
-.query-totals>span:not(:first-child) {margin-left:0.6em;}
-.query-totals .value {font-weight:bold;}
-body.controller-timelog .query-totals {margin-top:initial;}
-
-body.controller-gantts fieldset#options > div > div {
- display: flex;
- flex-wrap: wrap;
- align-items: flex-start;
- gap: 5px 10px;
-}
-
-td.center {text-align:center;}
-
-#watchers select {width: 95%; display: block;}
-#watchers img.gravatar {margin: 0 4px 2px 0;}
-#users_for_watcher img.gravatar {padding-bottom: 2px; margin-right: 4px;}
-
-span#watchers_inputs {overflow:auto; display:block;}
-span.search_for_watchers {display:block;}
-span.search_for_watchers, span.add_attachment {font-size:80%; line-height:2.5em;}
-span.add_attachment a {padding-left:16px; background: url(/bullet_add.png) no-repeat 0 50%; }
-
-input:disabled, select:disabled, textarea:disabled {
- cursor: not-allowed;
- color: graytext;
- background-color: #ebebe4;
-}
-
-
-.highlight { background-color: #FCFD8D;}
-.highlight.token-1 { background-color: #faa;}
-.highlight.token-2 { background-color: #afa;}
-.highlight.token-3 { background-color: #aaf;}
-
-.box{
- padding:6px;
- margin-bottom: 10px;
- background-color:#f6f6f6;
- color:#505050;
- line-height:1.5em;
- border: 1px solid #e4e4e4;
- word-wrap: break-word;
- border-radius: 3px;
-}
-
-div.square {
- border: 1px solid #999;
- float: left;
- margin: .3em .4em 0 .4em;
- overflow: hidden;
- width: .6em; height: .6em;
-}
-.contextual {float:right; white-space: nowrap; line-height:1.4em;margin:5px 0px; padding-left: 10px; font-size:0.9em;}
-.contextual .icon {padding-top: 2px; padding-bottom: 3px;}
-.contextual input, .contextual select {font-size:0.9em;}
-.message .contextual { margin-top: 0; }
-
-.splitcontent {overflow: auto; display: flex; flex-wrap: wrap;}
-.splitcontentleft {flex: 1; margin-right: 5px;}
-.splitcontentright {flex: 1; margin-left: 5px;}
-.splitcontenttop {flex: 2; flex-basis: 100%;}
-
-form {display: inline;}
-input, select, button {vertical-align: middle; margin-top: 1px; margin-bottom: 1px; height: 24px; padding: 0 7px;}
-input, select, textarea, button { color: #333; background-color: #fff; border:1px solid #ccc; border-radius:3px; box-sizing: border-box;}
-select {
- -webkit-appearance: none;
- -moz-appearance: none;
- -ms-appearance: none;
- -o-appearance: none;
- appearance: none;
- background-color: #fff;
- background-image: url(/arrow_down.png);
- background-repeat: no-repeat;
- background-position: calc(100% - 7px) 50%;
- padding-right: 20px;
-}
-input[type="file"] {border: 0; padding-left: 0; padding-right: 0; height: initial; background-color: initial; }
-input[type="submit"], button[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
- background-color: #fff;
- height: 28px;
- -webkit-transition: background-color 100ms linear;
- -moz-transition: background-color 100ms linear;
- -o-transition: background-color 100ms linear;
- transition: background-color 100ms linear;
-}
-input[type="submit"]:hover, button[type="submit"]:hover {
- background-color: #ddd;
-}
-
-input[type="text"]:focus, input[type="text"]:active,
-input[type="password"]:focus, input[type="password"]:active,
-input[type="date"]:focus, input[type="date"]:active,
-input[type="number"]:focus, input[type="number"]:active,
-select:focus, select:active,
-textarea:focus, textarea:active {
- border: 1px solid #5ad;
- outline: none;
-}
-
-input:placeholder-shown {
- text-overflow: ellipsis;
-}
-
-select[multiple=multiple] {background: #fff; padding-right: initial; height: auto;}
-fieldset {border: 1px solid #e4e4e4; margin:0; min-width: inherit;}
-legend {color: #333;}
-hr { width: 100%; height: 1px; background: #ccc; border: 0;}
-blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 0;}
-blockquote blockquote { margin-left: 0;}
-abbr, span.field-description[title] { border-bottom: 1px dotted #aaa; cursor: help; }
-textarea.wiki-edit {width:99%; resize:vertical; box-sizing: border-box;}
-body.textarea-monospace textarea.wiki-edit {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace; font-size: 12px;}
-body.textarea-proportional textarea.wiki-edit {font-family: Verdana, sans-serif; font-size: 12px;}
-li p {margin-top: 0;}
-div.issue {background:#ffffdd; padding:6px; margin-bottom:6px; border: 1px solid #d7d7d7; border-radius:3px;}
-p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
-p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
-p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
-.wiki-class-ltr {direction:ltr !important;}
-.wiki-class-rtl {direction:rtl !important;}
-
-div.issue div.subject div div { padding-left: 16px; word-break: break-word; }
-div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
-div.issue div.subject>div>p { margin-top: 0.5em; }
-div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
-div.issue p.author {margin-top:0.5em;}
-div.issue span.private, div.journal span.private {font-size: 60%;}
-div.issue .next-prev-links {color:#999;}
-div.issue .attributes {margin-top: 2em;}
-div.issue .attributes .attribute {padding-left:180px; clear:left; min-height: 1.8em;}
-div.issue .attributes .attribute .label {width: 170px; margin-left:-180px; font-weight:bold; float:left; overflow: clip visible; text-overflow: ellipsis;}
-div.issue .attribute .value {overflow:auto; text-overflow: ellipsis;}
-div.issue .attribute.string_cf .value .wiki p {margin-top: 0; margin-bottom: 0;}
-div.issue .attribute.text_cf .value .wiki p:first-of-type {margin-top: 0;}
-div.issue.overdue .due-date .value { color: #c22; }
-body.controller-issues h2.inline-flex {padding-right: 0}
-
-#issue_tree table.issues, #relations table.issues { border: 0; }
-#issue_tree td.checkbox, #relations td.checkbox {display:none;}
-#issue_tree td.buttons, #relations td.buttons {padding:0;}
-#issue_tree .issues-stat, #relations .issues-stat {font-size: 80%}
-#issue_tree .issues-stat .badge, #relations .issues-stat .badge {bottom: initial;}
-#issue_tree .issue > td, #relations .issue > td, #issue_tree .issue .user {
- text-overflow: ellipsis; /* if text exceeds its space, add ... */
- overflow: hidden;
-}
-#issue_tree .issue > td.subject, #relations .issue > td.subject {
- width: 50%;
- word-break: break-word; /* break word if subject is too long */
- padding-right: 25px; /* this is the spaces that .buttons uses next to subject */
-}
-#issue_tree .issue > td.assigned_to, #relations .issue > td.assigned_to {
- white-space: nowrap;
-}
-#trackers_description, #issue_statuses_description {display:none;}
-#trackers_description dt, #issue_statuses_description dt {font-weight: bold; text-decoration: underline;}
-#trackers_description dd, #issue_statuses_description dd {margin: 0; padding: 0 0 1em 0;}
-
-#issue-form .assign-to-me-link { padding-left: 5px; }
-
-fieldset.collapsible {border-width: 1px 0 0 0;}
-fieldset.collapsible>legend { cursor:pointer; padding-left: 18px; background-position: 4px;}
-
-fieldset#date-range p { margin: 2px 0 2px 0; }
-
-#query_form_content > fieldset {
- min-width: 0;
- width: 100%;
-}
-#filters-table {
- float:left;
- width: auto;
-}
-#filters-table .field {
- width: 230px;
-}
-#filters-table .filter {
- margin: 5px 0 0 0;
- display: flex;
- flex-wrap: wrap;
- gap: 0 10px;
-}
-#filters-table .filter .operator select {
- width: 120px;
-}
-
-.add-filter {width:35%; float:right; text-align: right; vertical-align: top;}
-
-#issue_is_private_wrap {float:right; margin-right:1em;}
-.toggle-multiselect { margin-right:5px; cursor:pointer;}
-.buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
-.buttons .icon {padding-bottom:3px; padding-top:1px;}
-
-div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
-div#issue-changesets div.changeset {border-bottom: 1px solid #ddd; padding: 4px;}
-div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
-.changeset-comments {margin-bottom:1em;}
-
-div.journal .contextual {margin-top: 0;}
-div.journal.private-notes .wiki {border-left:2px solid #d22; padding-left:4px; margin-left:-6px;}
-div.journal ul.details, ul.revision-info {color:#959595; margin-bottom: 1.5em;}
-div.journal ul.details a, ul.revision-info a {color:#70A7CD;}
-div.journal ul.details a:hover, ul.revision-info a:hover {color:#D14848;}
-body.avatars-on div.journal {padding-left:32px;}
-div.journal h4 img.gravatar {margin-left:-32px;}
-div.journal span.update-info {color: #666; font-size: 0.9em;}
-
-#update {margin-bottom: 1.4em;}
-
-#history .tab-content {
- padding: 0 6px;
- margin-bottom: 10px;
- border-right: 1px solid #d7d7d7;
- border-bottom: 1px solid #d7d7d7;
- border-left: 1px solid #d7d7d7;
- border-radius: 0 0 3px 3px / 0 0 3px 3px;
-}
-
-#history div:target h4.note-header {background-color:#DDEEFF;}
-#history p.nodata {display: none;}
-
-div#activity dl, #search-results { margin-left: 2em; }
-div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
-div#activity dt.me .time { border-bottom: 1px solid #999; }
-div#activity dt .time { color: #777; font-size: 80%; }
-div#activity dd .description, #search-results dd .description { font-style: italic; }
-div#activity span.project:after, #search-results span.project:after { content: " -"; }
-div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
-div#activity dt.grouped {margin-left:5em;}
-div#activity dd.grouped {margin-left:9em;}
-div#activity dt.icon {background-position: 0 10px !important;}
-div#activity h3 {
- padding: 5px;
- background-color: #eeeeee;
-}
-div#activity dt {
- padding-top: 10px;
- border-top: 1px solid #eeeeee;
-}
-div#activity dl dt:first-child {
- border: 0px;
-}
-
-#activity_scope_form select#user_id {
- max-width: 100%;
-}
-
-#search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
-
-div#search-results-counts {float:right;}
-div#search-results-counts ul { margin-top: 0.5em; }
-div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
-
-div#roadmap .related-issues { margin-bottom: 1em; }
-div#roadmap .related-issues td.checkbox { display: none; }
-div#roadmap .related-issues td.assigned_to { width:1px; white-space:nowrap; padding: 0; }
-div#roadmap .related-issues td.assigned_to img { padding-left: 4px; padding-right: 4px;}
-div#roadmap .wiki h1:first-child { display: none; }
-div#roadmap .wiki h1 { font-size: 120%; }
-div#roadmap .wiki h2 { font-size: 110%; }
-div#roadmap h2, div#roadmap h3 {padding-right: 0;}
-body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
-
-div#roadmap .version-article {padding-bottom: 12px;}
-
-div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
-div#version-summary fieldset { margin-bottom: 1em; }
-div#version-summary fieldset.time-tracking table { width:100%; }
-div#version-summary th, div#version-summary td.total-hours { text-align: right; }
-
-table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
-table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
-table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
-table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
-table#time-report .hours-dec { font-size: 0.9em; }
-
-div.wiki-page .contextual a {opacity: 0.4}
-div.wiki-page .contextual a:hover {opacity: 1}
-
-div.wiki a:target + h1, div.wiki a:target + h2, div.wiki a:target + h3, div.wiki a:target + h4, div.wiki a:target + h5, div.wiki a:target + h6 {
- background-color:#DDEEFF;
-}
-
-.wiki-update-info {text-align:right; color:#666; font-size:90%;}
-
-form .attributes select { width: 60%; }
-form .attributes select + a.icon-only { vertical-align: middle; margin-left: 4px; }
-input#issue_subject, input#document_title { width: 99%; }
-select#issue_done_ratio { width: 95px; }
-
-ul.projects {margin:0; padding-left:1em;}
-ul.projects ul.projects {padding-left:1.6em;}
-ul.projects.root {margin:0; padding:0;}
-ul.projects li.root, ul.projects li.child {list-style-type:none;}
-ul.projects li.root div.archived, ul.projects li.child div.archived {color: #aaa;}
-ul.projects div.description ul li {list-style-type:initial;}
-
-#projects-index {
- column-count: auto;
- column-width: 400px;
- -webkit-column-count: auto;
- -webkit-column-width: 400px;
- -webkit-column-gap : 0.5rem;
- -moz-column-count: auto;
- -moz-column-width: 400px;
- -moz-column-gap : 0.5rem;
- margin-bottom: 1.2em;
-}
-#projects-index li.root ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
-#projects-index ul.projects li.root {
- margin-bottom: 1em;
- padding: 15px 20px;
- border: 1px solid #d7d7d7;
- border-radius: 3px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- break-inside: avoid-column;
- -webkit-break-inside: avoid-column;
- -moz-break-inside: avoid-column;
- page-break-inside:avoid;
- -webkit-column-break-inside: avoid;
- -moz-column-break-inside: avoid;
- width: 100%;
-}
-#projects-index ul.projects li.child {margin-top: 1em;}
-#projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
-#projects-index ul.projects div.description {
- padding-top: 0.5em;
-}
-#projects-index a.icon-user, a.icon-bookmarked-project {padding-left:0; padding-right:20px; background-position:98% 50%;}
-#projects-index a.icon-user.icon-bookmarked-project {
- background-image: url(/tag_blue.png), url(/user.png);
- background-position: bottom 0px right 0px, bottom 0px right 20px;
- padding-right: 40px;
- padding-top: 4px;
-}
-
-#notified-projects>ul, #tracker_project_ids>ul, #custom_field_project_ids>ul {max-height:250px; overflow-y:auto;}
-
-ul.subprojects {list-style: none; display: inline-block; padding: 0; margin: 0;}
-ul.subprojects li {float: left;}
-ul.subprojects li:not(:last-child)::after {content: ', '; white-space: pre;}
-
-#related-issues li img {vertical-align:middle;}
-
-ul.properties {padding:0; font-size: 0.9em; color: #777;}
-ul.properties li {list-style-type:none;}
-ul.properties li span {font-style:italic;}
-
-.total-hours { font-size: 110%; font-weight: bold; }
-.total-hours span.hours-int { font-size: 120%; }
-
-.autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em; position: relative;}
-#user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select { width: 90%; }
-
-#workflow_copy_form select { width: 200px; }
-table.transitions td.enabled {background: #bfb;}
-#workflow_form table select {font-size:90%; max-width:100px;}
-table.fields_permissions td.readonly {background:#ddd;}
-table.fields_permissions td.required {background:#d88;}
-
-select.expandable {vertical-align:top;}
-
-textarea#custom_field_possible_values {width: 95%; resize:vertical}
-textarea#custom_field_default_value {width: 95%; resize:vertical}
-.sort-handle {display:inline-block; vertical-align:middle; cursor: move;}
-
-input#content_comments {width: 99%}
-
-span.pagination {margin-left:3px; color:#888; display:block;}
-.pagination ul.pages {
- margin: 0 5px 0 0;
- padding: 0;
- display: inline;
-}
-.pagination ul.pages li {
- display: inline-block;
- padding: 0;
- border: 1px solid #ddd;
- margin-left: -1px;
- line-height: 2em;
- margin-bottom: 1em;
- white-space: nowrap;
- text-align: center;
-}
-.pagination ul.pages li a,
-.pagination ul.pages li span {
- padding: 3px 8px;
-}
-.pagination ul.pages li:first-child {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination ul.pages li:last-child {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination ul.pages li.current {
- color: white;
- background-color: #628DB6;
- border-color: #628DB6;
-}
-.pagination ul.pages li.page:hover {
- background-color: #ddd;
-}
-.pagination ul.pages li.page a:hover,
-.pagination ul.pages li.page a:active {
- color: #169;
- text-decoration: inherit;
-}
-.pagination .per-page span.selected {
- font-weight: bold;
-}
-span.pagination>span {white-space:nowrap;}
-.controller-attachments.action-show span.pagination, .controller-repositories.action-entry span.pagination {
- display: block;
- margin-top: 1.2em;
-}
-
-#search-form fieldset p {margin:0.2em 0;}
-#csv-export-options fieldset {padding: 0;}
-
-/***** Tabular forms ******/
-.tabular p{
- margin: 0;
- padding: 3px 0 3px 0;
- padding-left: 180px; /* width of left column containing the label elements */
- min-height: 2em;
- clear:left;
-}
-html>body .tabular p {overflow:hidden;}
-
-.tabular input, .tabular select {max-width:95%}
-.tabular textarea {width:95%; resize:vertical;}
-input#twofa_code, img#twofa_code { width: 140px; }
-ul.twofa_backup_codes { list-style-type: none; padding: 0; display: inline-block; columns: 14em 2;}
-ul.twofa_backup_codes code { font-size: 16px; line-height: 2em }
-
-.tabular label{
- font-weight: bold;
- float: left;
- text-align: right;
- /* width of left column */
- margin-left: -180px;
- /* width of labels. Should be smaller than left column to create some right margin */
- width: 175px;
- line-height: 24px;
-}
-
-.tabular label.floating{
- font-weight: normal;
- margin-left: 0px;
- text-align: left;
- width: 270px;
-}
-
-label.block {
- display: block;
- width: auto !important;
-}
-
-.tabular label.block{
- font-weight: normal;
- margin-left: 0px !important;
- text-align: left;
- float: none;
-}
-
-.tabular label.inline{
- font-weight: normal;
- float:none;
- margin-left: 5px !important;
- width: auto;
-}
-
-.tabular label.error {
- color: #bb0000;
-}
-
-.tabular label.error + *:not(#issue_description_and_toolbar), .tabular label.error + span#issue_description_and_toolbar div.jstBlock {
- border: 1px solid #bb0000;
-}
-
-label.no-css {
- font-weight: inherit;
- float:none;
- text-align:left;
- margin-left:0px;
- width:auto;
-}
-input#time_entry_comments { width: 90%;}
-input#months { width: 46px; }
-
-.jstBlock .jstTabs, .jstBlock .wiki-preview { width: 99%; }
-
-.jstBlock .jstTabs { padding-right: 6px; }
-.jstBlock .wiki-preview { padding: 2px; }
-.jstBlock .wiki-preview p:first-child { padding-top: 0 !important; margin-top: 0 !important;}
-.jstBlock .wiki-preview p:last-child { padding-bottom: 0 !important; margin-bottom: 0 !important;}
-
-.tabular .wiki-preview, .tabular .jstTabs {width: 95%;}
-.tabular.settings .wiki-preview, .tabular.settings .jstTabs { width: 99%; }
-.tabular.settings .wiki-preview p {padding-left: 0 !important}
-.tabular .wiki-preview p {
- min-height: initial;
- padding: 0;
- padding-top: 1em !important;
- padding-bottom: 1em !important;
- overflow: initial;
-}
-
-.tabular.settings p { padding-left: 300px; }
-.tabular.settings label{ margin-left: -300px; width: 295px; }
-.tabular.settings textarea, .tabular.settings .wiki-preview, .tabular.settings .jstTabs { width: 99%; }
-
-.settings.enabled_scm table {width:100%}
-.settings.enabled_scm td.scm_name{ font-weight: bold; }
-
-fieldset.settings label { display: block; }
-fieldset#notified_events .parent { padding-left: 20px; }
-
-span.required {color: #bb0000;}
-.summary {font-style: italic;}
-
-.check_box_group {
- display:block;
- width:95%;
- max-height:120px;
- overflow-y:auto;
- padding:2px 4px 4px 2px;
- background:#fff;
- border:1px solid #9EB1C2;
- border-radius:2px
-}
-.check_box_group label {
- font-weight: normal;
- margin-left: 0px !important;
- text-align: left;
- float: none;
- display: block;
- width: auto;
-}
-.check_box_group.bool_cf {border:0; background:inherit;}
-.check_box_group.bool_cf label {display: inline;}
-
-.attachments_fields input.description, #existing-attachments input.description {margin-left:4px; width:340px;}
-.attachments_fields>span, #existing-attachments>span {display:block; white-space:nowrap;}
-.attachments_fields input.filename, #existing-attachments .filename {border:0; width:250px; color:#555; background-color:inherit; }
-.tabular input.filename {max-width:75% !important;}
-.attachments_fields input.filename {height:1.8em;}
-.attachments_fields .ajax-waiting input.filename {background:url(/hourglass.png) no-repeat 0px 50%;}
-.attachments_fields .ajax-loading input.filename {background:url(/loading.gif) no-repeat 0px 50%;}
-.attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; }
-
-a.remove-upload:hover {text-decoration:none !important;}
-.existing-attachment.deleted .filename {text-decoration:line-through; color:#999 !important;}
-
-div.fileover, p.custom-field-filedroplistner.fileover { background-color: lavender; }
-
-div.attachments p { margin:4px 0 2px 0; }
-div.attachments img { vertical-align: middle; }
-div.attachments span.author { font-size: 0.9em; color: #888; }
-
-div.thumbnails {margin:0.6em;}
-div.thumbnails div {background:#fff;border:2px solid #ddd;display:inline-block;margin-right:2px;}
-div.thumbnails img {margin: 3px; vertical-align: middle;}
-#history div.thumbnails {margin-left: 2em;}
-
-p.other-formats { text-align: right; font-size:0.9em; color: #666; }
-.other-formats span + span:before { content: "| "; }
-
-a.atom { background: url(/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
-
-em.info {font-style:normal;display:block;font-size:90%;color:#888;}
-em.info.error {padding-left:20px; background:url(/exclamation.png) no-repeat 0 50%;}
-
-textarea.text_cf {width:95%; resize:vertical;}
-input.string_cf, input.link_cf {width:95%;}
-select.bool_cf {width:auto !important;}
-
-#tab-content-modules fieldset p {margin:3px 0 4px 0;}
-
-#users_for_watcher {height: 200px; overflow:auto;}
-#users_for_watcher label {display: block;}
-
-input#principal_search, input#user_search {width:90%}
-.roles-selection label {display:inline-block; width:210px;}
-
-input.autocomplete {
- background: #fff url(/magnifier.png) no-repeat 2px 50%; padding-left:20px !important;
-}
-input.autocomplete.ajax-loading {
- background-image: url(/loading.gif);
-}
-
-.role-visibility {padding-left:2em;}
-
-.objects-selection {
- height: 300px;
- overflow: auto;
- margin-bottom: 1em;
-}
-
-.objects-selection label {
- display: block;
-}
-
-.objects-selection>div, #user_group_ids {
- column-count: auto;
- column-width: 200px;
- -webkit-column-count: auto;
- -webkit-column-width: 200px;
- -webkit-column-gap : 0.5rem;
- -webkit-column-rule: 1px solid #ccc;
- -moz-column-count: auto;
- -moz-column-width: 200px;
- -moz-column-gap : 0.5rem;
- -moz-column-rule: 1px solid #ccc;
-}
-
-/***** Flash & error messages ****/
-#errorExplanation, div.flash, .nodata, .warning, .conflict {
- padding: 6px 4px 6px 30px;
- margin-bottom: 12px;
- font-size: 1.1em;
- border: 1px solid;
- border-radius: 3px;
-}
-
-div.flash {margin-top: 8px;}
-
-div.flash.error, #errorExplanation {
- background: url(/exclamation.png) 8px 50% no-repeat;
- background-color: #ffe3e3;
- border-color: #d88;
- color: #880000;
-}
-
-div.flash.notice {
- background: url(/true.png) 8px 5px no-repeat;
- background-color: #dfffdf;
- border-color: #9fcf9f;
- color: #005f00;
-}
-
-div.flash.warning, .conflict {
- background: url(/warning.png) 8px 5px no-repeat;
- background-color: #F3EDD1;
- border-color: #eadbbc;
- color: #A6750C;
- text-align: left;
-}
-
-.nodata, .warning {
- text-align: center;
- background-color: #F3EDD1;
- border-color: #eadbbc;
- color: #A6750C;
-}
-
-#errorExplanation ul { font-size: 0.9em;}
-#errorExplanation h2, #errorExplanation p { display: none; }
-
-.conflict-details {font-size:80%;}
-
-/***** Ajax indicator ******/
-#ajax-indicator {
-position: absolute; /* fixed not supported by IE */
-background-color:#eee;
-border: 1px solid #bbb;
-top:35%;
-left:40%;
-width:20%;
-font-weight:bold;
-text-align:center;
-padding:0.6em;
-z-index:100;
-opacity: 0.5;
-}
-
-html>body #ajax-indicator { position: fixed; }
-
-#ajax-indicator span {
-background-position: 0% 40%;
-background-repeat: no-repeat;
-background-image: url(/loading.gif);
-padding-left: 26px;
-vertical-align: bottom;
-}
-
-/***** Calendar *****/
-ul.cal {
- list-style: none;
- width: 100%;
- padding: 0;
- display: grid;
- grid-template-columns: 2rem repeat(7, 1fr);
- margin: 0;
- border: 1px solid #c0c0c0;
- border-spacing: 0;
- border-radius: 3px;
-}
-
-.cal .calhead {
- background-color:#eee;
- text-align: center;
- font-weight: bold;
- padding: 4px
-}
-
-.cal .week-number {
- background-color:#eee;
- border:none;
- font-size: 1em;
- padding: 4px;
- text-align: center;
-}
-
-.cal .week-number .label-week {
- display: none;
-}
-
-.cal .calbody {
- border: 1px solid #d7d7d7;
- vertical-align: top;
- font-size: 0.9em;
- border-bottom: 0;
- border-right: 0;
- line-height: 1.2;
- min-height: calc(1.2em * 6);
- padding: 2px;
-}
-
-.cal .calbody p.day-num {font-size: 1.1em; text-align:right;}
-.cal .calbody .abbr-day {display:none}
-.cal .calbody.odd p.day-num {color: #bbb;}
-.cal .calbody.today {background:#ffd;}
-.cal .calbody.today p.day-num {font-weight: bold;}
-
-.cal .calbody .icon {padding-top: 2px; padding-bottom: 3px;}
-.cal .calbody.nwday:not(.odd) {background-color:#f1f1f1;}
-.cal .starting a.issue, p.cal.legend .starting {background: url(/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
-.cal .ending a.issue, p.cal.legend .ending {background: url(/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
-.cal .starting.ending a.issue, p.cal.legend .starting.ending {background: url(/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
-
-p.cal.legend span {display:block;}
-.controller-calendars p.buttons {margin-top: unset;}
-
-/***** Tooltips ******/
-.tooltip{position:relative;z-index:24;}
-.tooltip:hover{z-index:25;color:#000;}
-.tooltip span.tip{display: none; text-align:left;}
-.tooltip span.tip a { color: #169 !important; }
-
-.tooltip span.tip img.gravatar {
- float: none;
- margin: 0;
-}
-
-div.tooltip:hover span.tip{
-display:block;
-position:absolute;
-top:12px; width:270px;
-border:1px solid #555;
-background-color:#fff;
-padding: 4px;
-font-size: 0.8em;
-color:#505050;
-}
-
-table.cal div.tooltip:hover span.tip {
- top: 25px;
-}
-
-img.ui-datepicker-trigger {
- cursor: pointer;
- vertical-align: middle;
- margin-left: 4px;
-}
-
-/***** Documents *****/
-
-#document-list .document-group {
- margin-bottom: 15px;
-}
-
-/***** Progress bar *****/
-table.progress {
- border-collapse: collapse;
- border-spacing: 0pt;
- empty-cells: show;
- text-align: center;
- float:left;
- margin: 1px 6px 1px 0px;
- width:80px;
-}
-
-table.progress td { height: 1em; }
-table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
-table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
-table.progress td.todo { background: #eee none repeat scroll 0%; }
-p.percent {font-size: 80%; margin:0;}
-p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
-
-.version-overview table.progress {width:40em;}
-.version-overview table.progress td { height: 1.2em; }
-
-/***** Tabs *****/
-#content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
-#content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; min-width: 2000px; width: 100%; border-bottom: 1px solid #bbbbbb;}
-#content .tabs ul li {
- float:left;
- list-style-type:none;
- white-space:nowrap;
- margin-right:4px;
- position:relative;
- margin-bottom:-1px;
-}
-#content .tabs ul li a{
- display:block;
- font-size: 0.9em;
- text-decoration:none;
- line-height:1.3em;
- padding:4px 6px 4px 6px;
- border: 1px solid #ccc;
- border-bottom: 1px solid #bbbbbb;
- color:#999;
- font-weight:bold;
- border-top-left-radius:3px;
- border-top-right-radius:3px;
-}
-
-#content .tabs ul li a:hover {
- color:#777;
- text-decoration:none;
-}
-
-#content .tabs ul li a.selected {
- background-color: #fff;
- border: 1px solid #bbbbbb;
- border-bottom: 1px solid #fff;
- color:#444;
-}
-
-#content .tabs ul li a.selected:hover {background-color: #fff;}
-
-div.tabs-buttons { position:absolute; right: 0; width: 54px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
-
-button.tab-left, button.tab-right {
- font-size: 0.9em;
- cursor: pointer;
- height:24px;
- border: 1px solid #ccc;
- border-bottom: 1px solid #bbbbbb;
- position:absolute;
- padding:4px;
- width: 24px;
- bottom: -1px;
-}
-button.tab-left:hover, button.tab-right:hover {
- background-color: #f5f5f5;
-}
-button.tab-left:focus, button.tab-right:focus {
- outline: 0;
-}
-
-button.tab-left {
- right: 28px;
- background: #eeeeee url(/arrow_left.png) no-repeat 50% 50%;
- border-top-left-radius:3px;
-}
-
-button.tab-right {
- right: 4px;
- background: #eeeeee url(/arrow_right.png) no-repeat 50% 50%;
- border-top-right-radius:3px;
-}
-
-button.tab-left.disabled, button.tab-right.disabled {
- background-color: #ccc;
- cursor: unset;
-}
-
-/***** Diff *****/
-.diff_out { background: #fcc; }
-.diff_out span { background: #faa; }
-.diff_in { background: #cfc; }
-.diff_in span { background: #afa; }
-
-.text-diff {
- padding: 1em;
- background-color:#f6f6f6;
- color:#505050;
- border: 1px solid #e4e4e4;
- white-space: pre-wrap;
-}
-
-/***** Wiki *****/
-div.wiki table {
- border-collapse: collapse;
- margin-bottom: 1em;
-}
-
-div.wiki table, div.wiki td, div.wiki th {
- border: 1px solid #bbb;
- padding: 4px;
-}
-
-div.wiki .wiki-class-noborder, div.wiki .wiki-class-noborder td, div.wiki .wiki-class-noborder th {border:0;}
-
-div.wiki .external {
- background-position: 0% 60%;
- background-repeat: no-repeat;
- padding-left: 12px;
- background-image: url(/external.png);
-}
-
-div.wiki a {word-wrap: break-word;}
-div.wiki a.new {color: #b73535;}
-
-div.wiki ul, div.wiki ol {margin-bottom:1em;}
-div.wiki li>ul, div.wiki li>ol {margin-bottom: 0;}
-
-div.wiki pre {
- margin: 1em 1em 1em 1.6em;
- padding: 8px;
- background-color: #fafafa;
- border: 1px solid #e2e2e2;
- border-radius: 3px;
- width:auto;
- overflow-x: auto;
- overflow-y: hidden;
-}
-
-div.wiki *:not(pre)>code, div.wiki>code {
- background: rgba(62, 91, 118, 0.08);
- padding: 0.1em 0.1em;
- border-radius: 0.1em;
-}
-
-div.wiki ul.toc {
- background-color: #ffffdd;
- border: 1px solid #e4e4e4;
- padding: 4px;
- line-height: 1.2em;
- margin-bottom: 12px;
- margin-right: 12px;
- margin-left: 0;
- display: table
-}
-* html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
-
-div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
-div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
-div.wiki ul.toc ul { margin: 0; padding: 0; }
-div.wiki ul.toc li {list-style-type:none; margin: 0; font-size:12px;}
-div.wiki ul.toc>li:first-child {margin-bottom: .5em; color: #777;}
-div.wiki ul.toc li li {margin-left: 1.5em; font-size:10px;}
-div.wiki ul.toc a {
- font-size: 0.9em;
- font-weight: normal;
- text-decoration: none;
- color: #606060;
-}
-div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
-
-a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
-a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
-h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor, h4:hover a.wiki-anchor, h5:hover a.wiki-anchor, h6:hover a.wiki-anchor { display: inline; color: #ddd; }
-
-div.wiki img {vertical-align:middle; max-width:100%;}
-div.wiki>.task-list {
- padding-left: 0px;
-}
-div.wiki .task-list {
- list-style-type: none;
-}
-div.wiki .task-list input.task-list-item-checkbox {
- height: initial;
-}
-
-/***** My page layout *****/
-.block-receiver {
- border:1px dashed #fff;
- padding: 15px 0 0 0;
-}
-.dragging .block-receiver {
- border:1px dashed #777;
- margin-bottom: 20px;
-}
-.mypage-box {
- border:1px solid #ddd;
- padding:8px;
- margin:0 0 20px 0;
- color:#505050;
- line-height:1.5em;
- border-radius: 3px;
-}
-
-.mypage-box>.contextual {opacity:0.001; transition: opacity 0.2s;}
-.mypage-box:hover>.contextual {opacity:1;}
-
-.handle {cursor: move;}
-
-#my-page .list th.checkbox, #my-page .list td.checkbox {display:none;}
-/***** Gantt chart *****/
-table.gantt-table {
- width: 100%;
- border-collapse: collapse;
-}
-table.gantt-table td {
- padding: 0px;
-}
-.gantt_hdr {
- position:absolute;
- top:0;
- height:16px;
- border-top: 1px solid #c0c0c0;
- border-bottom: 1px solid #c0c0c0;
- border-left: 1px solid #c0c0c0;
- text-align: center;
- overflow: hidden;
-}
-#gantt_area .gantt_hdr {
- border-left: 0px;
- border-right: 1px solid #c0c0c0;
-}
-.gantt_subjects_container:not(.draw_selected_columns) .gantt_hdr,
-.last_gantt_selected_column .gantt_hdr {
- border-right: 1px solid #c0c0c0;
-}
-.last_gantt_selected_column .gantt_selected_column_container,
-.gantt_subjects_container .gantt_subjects * {
- z-index: 10;
-}
-
-.gantt_subjects_column + td {
- padding: 0;
-}
-
-.gantt_hdr.nwday {background-color:#f1f1f1; color:#999;}
-
-.gantt_subjects,
-.gantt_selected_column_content.gantt_hdr {
- font-size: 0.8em;
- position: relative;
- z-index: 1;
-}
-.gantt_subjects div,
-.gantt_selected_column_content div {
- line-height: 16px;
- height: 16px;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- width: 100%;
-}
-.gantt_subjects div.issue-subject:hover { background-color:#ffffdd; }
-.gantt_selected_column_content { padding-left: 3px; padding-right: 3px;}
-.gantt_subjects .issue-subject img.icon-gravatar {
- margin: 2px 5px 0px 2px;
-}
-.gantt_hdr_selected_column_name {
- position: absolute;
- top: 50%;
- width:100%;
- transform: translateY(-50%);
- -webkit-transform: translateY(-50%);
- font-size: 0.8em;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-
-}
-td.gantt_selected_column {
- width: 50px;
-}
-td.gantt_selected_column .gantt_hdr,.gantt_selected_column_container {
- width: 49px;
-}
-
-.task {
- position: absolute;
- height:8px;
- font-size:0.8em;
- color:#888;
- padding:0;
- margin:0;
- line-height:16px;
- white-space:nowrap;
-}
-
-.task.label {width:100%;}
-.task.label.project, .task.label.version { font-weight: bold; }
-
-.task_late { background:#f66 url(/task_late.png); border: 1px solid #f66; }
-.task_done { background:#00c600 url(/task_done.png); border: 1px solid #00c600; }
-.task_todo { background:#aaa url(/task_todo.png); border: 1px solid #aaa; }
-
-.task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
-.task_late.parent, .task_done.parent { height: 3px;}
-.task.parent.marker.starting { position: absolute; background: url(/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;}
-.task.parent.marker.ending { position: absolute; background: url(/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;}
-
-.version.task_late { background:#f66 url(/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
-.version.task_done { background:#00c600 url(/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
-.version.task_todo { background:#fff url(/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
-.version.marker { background-image:url(/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
-
-.project.task_late { background:#f66 url(/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
-.project.task_done { background:#00c600 url(/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
-.project.task_todo { background:#fff url(/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
-.project.marker { background-image:url(/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
-
-.version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
-.version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
-
-/***** Badges *****/
-.badge {
- position:relative;
- font-weight:bold;
- font-size: 10px;
- bottom: 2px;
- padding: 1px 3px;
- margin-right: 2px;
- margin-left: 2px;
- border-radius: 2px;
- text-transform: uppercase;
- text-decoration: none;
- user-select: none;
-}
-.badge-private {
- background: #d22;
- color: #fff;
- border: 1px solid #d22;
-}
-.badge-count {
- color: #fff;
- background:#9DB9D5;
-}
-.badge-status-open {
- color: #205D86;
- border: 1px solid #205D86;
-}
-.badge-status-locked {
- color: #696969;
- border: 1px solid #696969;
-}
-.badge-status-closed {
- color: #1D781D;
- border: 1px solid #1D781D;
-}
-.badge-issues-count {
- background: #EEEEEE;
-}
-
-/***** Tooltips *****/
-.ui-tooltip {
- background: #000;
- color: #fff;
- border-radius: 3px;
- border: 0;
- box-shadow: none;
- white-space: pre-wrap;
-}
-
-/***** Icons *****/
-.icon {
- background-position: 0% 50%;
- background-repeat: no-repeat;
- padding-left: 20px;
-}
-.icon-only {
- background-position: 0% 50%;
- background-repeat: no-repeat;
- padding-left: 16px;
- display: inline-block;
- width: 0;
- height: 16px;
- overflow: hidden;
- padding-top: 0;
- padding-bottom: 0;
- font-size: 8px;
- vertical-align: middle;
-}
-.icon-only::after {
- content: "\a0";
-}
-
-.icon-add { background-image: url(/add.png); }
-.icon-edit { background-image: url(/edit.png); }
-.icon-copy { background-image: url(/copy.png); }
-.icon-duplicate { background-image: url(/duplicate.png); }
-.icon-del { background-image: url(/delete.png); }
-.icon-move { background-image: url(/move.png); }
-.icon-save { background-image: url(/save.png); }
-.icon-download { background-image: url(/download.png); }
-.icon-cancel { background-image: url(/cancel.png); }
-.icon-multiple { background-image: url(/table_multiple.png); }
-.icon-folder { background-image: url(/folder.png); }
-.open .icon-folder { background-image: url(/folder_open.png); }
-.icon-package { background-image: url(/package.png); }
-.icon-user { background-image: url(/user.png); }
-.icon-project, .icon-projects { background-image: url(/projects.png); }
-.icon-help { background-image: url(/help.png); }
-.icon-attachment { background-image: url(/attachment.png); }
-.icon-history { background-image: url(/history.png); }
-.icon-time-entry, .icon-time { background-image: url(/time.png); }
-.icon-time-add { background-image: url(/time_add.png); }
-.icon-stats { background-image: url(/stats.png); }
-.icon-warning { background-image: url(/warning.png); }
-.icon-error { background-image: url(/exclamation.png); }
-.icon-fav { background-image: url(/fav.png); }
-.icon-fav-off { background-image: url(/fav_off.png); }
-.icon-reload { background-image: url(/reload.png); }
-.icon-lock, .icon-locked { background-image: url(/locked.png); }
-.icon-unlock { background-image: url(/unlock.png); }
-.icon-checked { background-image: url(/toggle_check.png); }
-.icon-report { background-image: url(/report.png); }
-.icon-comment, .icon-comments { background-image: url(/comment.png); }
-.icon-summary { background-image: url(/lightning.png); }
-.icon-server-authentication { background-image: url(/server_key.png); }
-.icon-issue { background-image: url(/ticket.png); }
-.icon-zoom-in { background-image: url(/zoom_in.png); }
-.icon-zoom-out { background-image: url(/zoom_out.png); }
-.icon-magnifier { background-image: url(/magnifier.png); }
-.icon-passwd { background-image: url(/textfield_key.png); }
-.icon-arrow-right, .icon-test, .icon-sticky { background-image: url(/bullet_go.png); }
-.icon-email { background-image: url(/email.png); }
-.icon-email-disabled { background-image: url(/email_disabled.png); }
-.icon-email-add { background-image: url(/email_add.png); }
-.icon-ok { background-image: url(/true.png); }
-.icon-not-ok { background-image: url(/false.png); }
-.icon-link-break { background-image: url(/link_break.png); }
-.icon-list { background-image: url(/text_list_bullets.png); }
-.icon-close { background-image: url(/close.png); }
-.icon-close:hover { background-image: url(/close_hl.png); }
-.icon-settings { background-image: url(/changeset.png); }
-.icon-group, .icon-groupnonmember, .icon-groupanonymous { background-image: url(/group.png); }
-.icon-roles { background-image: url(/database_key.png); }
-.icon-issue-edit { background-image: url(/ticket_edit.png); }
-.icon-workflows { background-image: url(/ticket_go.png); }
-.icon-custom-fields { background-image: url(/textfield.png); }
-.icon-plugins { background-image: url(/plugin.png); }
-.icon-news { background-image: url(/news.png); }
-.icon-issue-closed { background-image: url(/ticket_checked.png); }
-.icon-issue-note { background-image: url(/ticket_note.png); }
-.icon-changeset { background-image: url(/changeset.png); }
-.icon-message { background-image: url(/message.png); }
-.icon-reply { background-image: url(/comments.png); }
-.icon-wiki-page { background-image: url(/wiki_edit.png); }
-.icon-document { background-image: url(/document.png); }
-.icon-project { background-image: url(/projects.png); }
-.icon-add-bullet { background-image: url(/bullet_add.png); }
-.icon-shared { background-image: url(/link.png); }
-.icon-actions { background-image: url(/3_bullets.png); }
-.icon-sort-handle { background-image: url(/reorder.png); }
-.icon-expanded { background-image: url(/arrow_down.png); }
-.icon-collapsed { background-image: url(/arrow_right.png); }
-.icon-bookmark { background-image: url(/tag_blue_delete.png); }
-.icon-bookmark-off { background-image: url(/tag_blue_add.png); }
-.icon-bookmarked-project { background-image: url(/tag_blue.png); }
-.icon-sorted-asc { background-image: url(/arrow_down.png); }
-.icon-sorted-desc { background-image: url(/arrow_up.png); }
-.icon-toggle-plus { background-image: url(/bullet_toggle_plus.png) }
-.icon-toggle-minus { background-image: url(/bullet_toggle_minus.png) }
-.icon-clear-query { background-image: url(/close_hl.png); }
-.icon-import { background-image: url(/database_go.png); }
-
-.icon-file { background-image: url(/files/default.png); }
-.icon-file.text-plain { background-image: url(/files/text.png); }
-.icon-file.text-x-c { background-image: url(/files/c.png); }
-.icon-file.text-x-csharp { background-image: url(/files/csharp.png); }
-.icon-file.text-x-java { background-image: url(/files/java.png); }
-.icon-file.application-javascript { background-image: url(/files/js.png); }
-.icon-file.text-x-php { background-image: url(/files/php.png); }
-.icon-file.text-x-ruby { background-image: url(/files/ruby.png); }
-.icon-file.text-xml { background-image: url(/files/xml.png); }
-.icon-file.text-css { background-image: url(/files/css.png); }
-.icon-file.text-html { background-image: url(/files/html.png); }
-.icon-file.image-gif { background-image: url(/files/image.png); }
-.icon-file.image-jpeg { background-image: url(/files/image.png); }
-.icon-file.image-png { background-image: url(/files/image.png); }
-.icon-file.image-tiff { background-image: url(/files/image.png); }
-.icon-file.application-pdf { background-image: url(/files/pdf.png); }
-.icon-file.application-zip { background-image: url(/files/zip.png); }
-.icon-file.application-gzip { background-image: url(/files/zip.png); }
-.icon-copy-link { background-image: url(/copy_link.png); }
-
-.sort-handle.ajax-loading { background-image: url(/loading.gif); }
-tr.ui-sortable-helper { border:1px solid #e4e4e4; }
-
-.contextual>*:not(:first-child), .buttons>.icon:not(:first-child), .contextual .journal-actions>*:not(:first-child) { margin-left: 5px; }
-
-img.gravatar {
- vertical-align: middle;
- border-radius: 20%;
-}
-
-div.issue img.gravatar {
- float: left;
- margin: 0 12px 6px 0;
-}
-
-div.gravatar-with-child {
- position: relative;
-}
-
-div.gravatar-with-child > img.gravatar:nth-child(2) {
- position: absolute;
- top: 30px;
- left: 30px;
- border-radius: 20%;
- border: 2px solid rgba(255, 255, 255, 0.9);
-}
-
-h2 img.gravatar, h3 img.gravatar {margin-right: 4px;}
-h4 img.gravatar {margin: -2px 4px -4px 0;}
-td.username img.gravatar {margin: 0 0.5em 0 0; vertical-align: top;}
-#activity dt img.gravatar {float: left; margin: 0 1em 1em 0;}
-/* Used on 12px Gravatar img tags without the icon background */
-.icon-gravatar {float: left; margin-right: 4px;}
-
-#activity dt, .journal {clear: left;}
-
-h2 img { vertical-align:middle; }
-
-.hascontextmenu { cursor: context-menu; }
-
-.sample-data {border:1px solid #ccc; border-collapse:collapse; background-color:#fff; margin:0.5em;}
-.sample-data td {border:1px solid #ccc; padding: 2px 4px; font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
-.sample-data tr:first-child td {font-weight:bold; text-align:center;}
-
-.ui-progressbar {position: relative;}
-#progress-label {
-position: absolute; left: 50%; top: 4px;
-font-weight: bold;
-color: #555; text-shadow: 1px 1px 0 #fff;
-}
-
-.repository-graph {width:75%; margin-bottom:2em;}
-
-img.filecontent.image {background-image: url(/transparent.png);}
-
-/* Custom JQuery styles */
-.ui-autocomplete, .ui-menu {
- border-radius: 2px;
- border: 1px solid #ccc;
-}
-.ui-autocomplete .ui-menu-item > div, .ui-menu .ui-menu-item > div {
- padding: 4px 8px;
- max-width: 500px;
-}
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
- border-color: #759FCF;
- background: #759FCF;
-}
-.ui-widget-overlay {
- background: #000;
- opacity: 70%;
-}
-
-/* Custom tribute styles */
-.tribute-container ul {
- background-color: #fff;
- border: 1px solid #ccc;
- border-radius: 2px;
-}
-.tribute-container li.highlight {background-color: #759FCF; color:#fff;}
-
-/************* Rouge styles *************/
-/* generated by: pygmentize -f html -a .syntaxhl -S colorful */
-.syntaxhl .hll { background-color: #ffffcc }
-.syntaxhl { background: #fafafa; }
-.syntaxhl .c { color: #888888 } /* Comment */
-.syntaxhl .err { color: #FF0000; background-color: #FFAAAA } /* Error */
-.syntaxhl .k { color: #008800; font-weight: bold } /* Keyword */
-.syntaxhl .o { color: #333333 } /* Operator */
-.syntaxhl .ch { color: #888888 } /* Comment.Hashbang */
-.syntaxhl .cm { color: #888888 } /* Comment.Multiline */
-.syntaxhl .cp { color: #557799 } /* Comment.Preproc */
-.syntaxhl .cpf { color: #888888 } /* Comment.PreprocFile */
-.syntaxhl .c1 { color: #888888 } /* Comment.Single */
-.syntaxhl .cs { color: #cc0000; font-weight: bold } /* Comment.Special */
-.syntaxhl .gd { color: #A00000 } /* Generic.Deleted */
-.syntaxhl .ge { font-style: italic } /* Generic.Emph */
-.syntaxhl .gr { color: #FF0000 } /* Generic.Error */
-.syntaxhl .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.syntaxhl .gi { color: #00A000 } /* Generic.Inserted */
-.syntaxhl .go { color: #888888 } /* Generic.Output */
-.syntaxhl .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
-.syntaxhl .gs { font-weight: bold } /* Generic.Strong */
-.syntaxhl .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.syntaxhl .gt { color: #0044DD } /* Generic.Traceback */
-.syntaxhl .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
-.syntaxhl .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
-.syntaxhl .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
-.syntaxhl .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */
-.syntaxhl .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
-.syntaxhl .kt { color: #333399; font-weight: bold } /* Keyword.Type */
-.syntaxhl .m { color: #6600EE; font-weight: bold } /* Literal.Number */
-.syntaxhl .s { background-color: #fff0f0 } /* Literal.String */
-.syntaxhl .na { color: #0000CC } /* Name.Attribute */
-.syntaxhl .nb { color: #007020 } /* Name.Builtin */
-.syntaxhl .nc { color: #BB0066; font-weight: bold } /* Name.Class */
-.syntaxhl .no { color: #003366; font-weight: bold } /* Name.Constant */
-.syntaxhl .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.syntaxhl .ni { color: #880000; font-weight: bold } /* Name.Entity */
-.syntaxhl .ne { color: #FF0000; font-weight: bold } /* Name.Exception */
-.syntaxhl .nf { color: #0066BB; font-weight: bold } /* Name.Function */
-.syntaxhl .nl { color: #997700; font-weight: bold } /* Name.Label */
-.syntaxhl .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.syntaxhl .nt { color: #007700 } /* Name.Tag */
-.syntaxhl .nv { color: #996633 } /* Name.Variable */
-.syntaxhl .ow { color: #000000; font-weight: bold } /* Operator.Word */
-.syntaxhl .w { color: #bbbbbb } /* Text.Whitespace */
-.syntaxhl .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */
-.syntaxhl .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */
-.syntaxhl .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */
-.syntaxhl .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
-.syntaxhl .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */
-.syntaxhl .sa { background-color: #fff0f0 } /* Literal.String.Affix */
-.syntaxhl .sb { background-color: #fff0f0 } /* Literal.String.Backtick */
-.syntaxhl .sc { color: #0044DD } /* Literal.String.Char */
-.syntaxhl .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */
-.syntaxhl .sd { color: #DD4422 } /* Literal.String.Doc */
-.syntaxhl .s2 { background-color: #fff0f0 } /* Literal.String.Double */
-.syntaxhl .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */
-.syntaxhl .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */
-.syntaxhl .si { background-color: #eeeeee } /* Literal.String.Interpol */
-.syntaxhl .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */
-.syntaxhl .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */
-.syntaxhl .s1 { background-color: #fff0f0 } /* Literal.String.Single */
-.syntaxhl .ss { color: #AA6600 } /* Literal.String.Symbol */
-.syntaxhl .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.syntaxhl .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */
-.syntaxhl .vc { color: #336699 } /* Name.Variable.Class */
-.syntaxhl .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */
-.syntaxhl .vi { color: #3333BB } /* Name.Variable.Instance */
-.syntaxhl .vm { color: #996633 } /* Name.Variable.Magic */
-.syntaxhl .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
-
-/***** Media print specific styles *****/
-@media print {
- #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
- #main { background: #fff; }
- #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
- #wiki_add_attachment { display:none; }
- .hide-when-print, .pagination ul.pages, .pagination .per-page { display: none !important; }
- .autoscroll {overflow-x: visible;}
- table.list {margin-top:0.5em;}
- table.list th, table.list td {border: 1px solid #aaa;}
-}
-
-/* Accessibility specific styles */
-.hidden-for-sighted {
- position:absolute;
- left:-10000px;
- top:auto;
- width:1px;
- height:1px;
- overflow:hidden;
-}
-
-img {
- image-orientation: from-image;
-}
-
-.filecontent-container {
- position: relative;
- margin-bottom: 20px;
- min-height: 200px;
-}
-.filecontent-container > .filecontent {
- position: absolute;
- max-height: 100%;
- max-width: 100%;
-}
-
-.filecontent.wiki {
- position: relative;
- padding: 1em;
- border: 1px solid #e4e4e4;
- border-radius: 3px;
-}
-
-/* Fixes for IE 11 */
-@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
- select::-ms-expand {
- display: none;
- }
- select[multiple=multiple] {padding-right: 0;}
-}
-
-/* tablesort */
-th[role=columnheader]:not(.no-sort) {
- cursor: pointer;
-}
-
-th[role=columnheader]:not(.no-sort):after {
- content: '';
- float: right;
- margin-top: 7px;
- border-width: 0 4px 4px;
- border-style: solid;
- border-color: #404040 transparent;
- display: none;
- opacity: 0;
- -ms-user-select: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
-}
-
-th[aria-sort=ascending]:not(.no-sort):after {
- border-bottom: none;
- border-width: 4px 4px 0;
-}
-
-th[aria-sort]:not(.no-sort):after {
- display: inline;
- opacity: 0.4;
-}
-
-th[role=columnheader]:not(.no-sort):hover:after {
- display: inline;
- opacity: 1;
-}
diff --git a/public/stylesheets/context_menu.css b/public/stylesheets/context_menu.css
deleted file mode 100644
index 47b5f0839..000000000
--- a/public/stylesheets/context_menu.css
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-#context-menu { position: absolute; z-index: 40; font-size: 0.9em;}
-
-#context-menu ul, #context-menu li, #context-menu a {
- display:block;
- margin:0;
- padding:0;
- border:0;
-}
-
-#context-menu ul {
- width:150px;
- border: 1px solid #ccc;
- background:white;
- list-style:none;
- padding:2px;
- border-radius:2px;
-}
-
-#context-menu li {
- position:relative;
- padding:1px;
- z-index:39;
- border:1px solid white;
-}
-#context-menu li.folder ul { position:absolute; left:168px; /* IE6 */ top:-2px; max-height:300px; overflow:hidden; overflow-y: auto; }
-#context-menu li.folder>ul { left:148px; }
-
-#context-menu.reverse-y li.folder>ul, #context-menu li.folder.up>ul { top:auto; bottom:0; }
-#context-menu.reverse-x li.folder ul { left:auto; right:168px; /* IE6 */ }
-#context-menu.reverse-x li.folder>ul { right:148px; }
-
-#context-menu.reverse-y li.folder.down>ul {
- position:absolute; top:-2px; bottom: auto; max-height:300px; overflow:hidden; overflow-y: auto;
-}
-
-#context-menu a {
- text-decoration:none !important;
- padding: 2px 0px 2px 20px;
- width:100%; /* IE */
-}
-#context-menu li>a { width:auto; } /* others */
-#context-menu a.disabled, #context-menu a.disabled:hover {color: #aaa;}
-#context-menu li a.submenu { padding-right:16px; background:url("/arrow_right.png") right no-repeat; }
-#context-menu li:hover { border:1px solid #628db6; background-color:#eef5fd; border-radius:3px; }
-#context-menu a:hover {color:#2A5685;}
-#context-menu li.folder:hover { z-index:40; }
-#context-menu ul ul, #context-menu li:hover ul ul { display:none; }
-#context-menu li:hover ul, #context-menu li:hover li:hover ul { display:block; }
-#context-menu a.icon-checked {background-position: 3px 40%;}
-
-/* selected element */
-.context-menu-selection { background-color:#507AAA !important; color:#f8f8f8 !important; }
-.context-menu-selection a, .context-menu-selection a:hover { color:#f8f8f8 !important; }
-.context-menu-selection:hover { background-color:#507AAA !important; color:#f8f8f8 !important; }
-div#gantt_area .context-menu-selection { background-color: rgba(80, 122, 170, 0.48) !important; }
-div#gantt_area .context-menu-selection:hover { background-color: rgba(80, 122, 170, 0.48) !important; }
-div#gantt_area .context-menu-selection a { color: #169 !important; }
diff --git a/public/stylesheets/context_menu_rtl.css b/public/stylesheets/context_menu_rtl.css
deleted file mode 100644
index ab83bc7eb..000000000
--- a/public/stylesheets/context_menu_rtl.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-#context-menu li.folder ul { left:auto; right:168px; }
-#context-menu li.folder>ul { left:auto; right:148px; }
-#context-menu li a.submenu { background:url("/arrow_left.png") left no-repeat; }
-
-#context-menu a {
- background-position: 100% 40%;
- padding-right: 20px;
- padding-left: 0px;
-}
diff --git a/public/stylesheets/jquery/images/ui-icons_444444_256x240.png b/public/stylesheets/jquery/images/ui-icons_444444_256x240.png
deleted file mode 100644
index 56d546beb..000000000
Binary files a/public/stylesheets/jquery/images/ui-icons_444444_256x240.png and /dev/null differ
diff --git a/public/stylesheets/jquery/images/ui-icons_555555_256x240.png b/public/stylesheets/jquery/images/ui-icons_555555_256x240.png
deleted file mode 100644
index 607e4362a..000000000
Binary files a/public/stylesheets/jquery/images/ui-icons_555555_256x240.png and /dev/null differ
diff --git a/public/stylesheets/jquery/images/ui-icons_777620_256x240.png b/public/stylesheets/jquery/images/ui-icons_777620_256x240.png
deleted file mode 100644
index b0482f869..000000000
Binary files a/public/stylesheets/jquery/images/ui-icons_777620_256x240.png and /dev/null differ
diff --git a/public/stylesheets/jquery/images/ui-icons_777777_256x240.png b/public/stylesheets/jquery/images/ui-icons_777777_256x240.png
deleted file mode 100644
index 96c5d2222..000000000
Binary files a/public/stylesheets/jquery/images/ui-icons_777777_256x240.png and /dev/null differ
diff --git a/public/stylesheets/jquery/images/ui-icons_cc0000_256x240.png b/public/stylesheets/jquery/images/ui-icons_cc0000_256x240.png
deleted file mode 100644
index 1f96135a1..000000000
Binary files a/public/stylesheets/jquery/images/ui-icons_cc0000_256x240.png and /dev/null differ
diff --git a/public/stylesheets/jquery/images/ui-icons_ffffff_256x240.png b/public/stylesheets/jquery/images/ui-icons_ffffff_256x240.png
deleted file mode 100644
index d5cdbf43c..000000000
Binary files a/public/stylesheets/jquery/images/ui-icons_ffffff_256x240.png and /dev/null differ
diff --git a/public/stylesheets/jquery/jquery-ui-1.13.2.css b/public/stylesheets/jquery/jquery-ui-1.13.2.css
deleted file mode 100644
index 72b0419f5..000000000
--- a/public/stylesheets/jquery/jquery-ui-1.13.2.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.13.2 - 2022-07-14
-* http://jqueryui.com
-* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;-ms-filter:"alpha(opacity=25)";opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;-ms-filter:"alpha(opacity=70)";font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;-ms-filter:"alpha(opacity=35)";background-image:none}.ui-state-disabled .ui-icon{-ms-filter:"alpha(opacity=35)"}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_777777_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.003;-ms-filter:Alpha(Opacity=.3)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666}
diff --git a/public/stylesheets/jstoolbar.css b/public/stylesheets/jstoolbar.css
deleted file mode 100644
index c73bbf902..000000000
--- a/public/stylesheets/jstoolbar.css
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-.jstBlock .hidden {
- display: none;
-}
-.jstEditor {
- padding-left: 0px;
-}
-.jstEditor textarea, .jstEditor iframe {
- margin: 0;
-}
-.jstHandle {
- height: 10px;
- font-size: 0.1em;
- cursor: s-resize;
- /*background: transparent url(img/resizer.png) no-repeat 45% 50%;*/
-}
-#content .jstTabs.tabs {
- margin-bottom: -1px;
-}
-#content .jstTabs.tabs ul {border-bottom:0;}
-#content .jstTabs.tabs li {
- height: 42px;
-}
-#content .jstTabs.tabs li:before{
- content: '';
- display: inline-block;
- vertical-align: middle;
- height: 100%;
-}
-#content .jstTabs.tabs li a {
- display: inline-block;
- vertical-align: bottom;
- line-height: 19px;
- border-bottom: 1px solid transparent;
-}
-.jstElements {
- display: inline-block;
- vertical-align: bottom;
- padding-left: 6px;
- padding-bottom:2px;
- height: 26px;
-}
-.wiki-preview {
- background-color: #ffffff;
- border: 1px solid #bbbbbb;
-}
-.wiki-preview p.empty-preview {color:#999; font-style:italic; margin-top:1em; text-align:center;}
-
-.jstElements button {
- margin-right: 2px;
- width : 24px;
- height: 24px;
- padding: 4px;
- border-style: solid;
- border-width: 1px;
- border-color: #ddd;
- background-color : #f7f7f7;
- background-position : 50% 50%;
- background-repeat: no-repeat;
- cursor:pointer;
- opacity:0.7;
-}
-.jstElements button:hover {
- border-color: #bbb;
- background-color: #e5e5e5;
- opacity:1;
-}
-.jstElements button span {
- display : none;
-}
-.jstElements span {
- display : inline;
-}
-
-.jstSpacer {
- width : 0px;
- font-size: 1px;
- margin-right: 6px;
-}
-
-.jstElements .help { float: right; margin-right: 0.5em; padding-top: 8px; font-size: 0.9em; }
-.jstElements .help a {padding: 2px 0 2px 20px; background: url(./help.png) no-repeat 0 50%;}
-
-.table-generator td {
- border: 2px solid #ccc;
- background-color: white;
- padding: 10px;
- cursor: pointer;
-}
-
-.table-generator td.selected-cell, .table-generator td:hover {
- background-color: #759FCF;
-}
-
-.table-generator {
- position: absolute;
- border-collapse: collapse;
-}
-
-/* Buttons
--------------------------------------------------------- */
-.jstb_strong {
- background-image: url(/jstoolbar/bt_strong.png);
-}
-.jstb_em {
- background-image: url(/jstoolbar/bt_em.png);
-}
-.jstb_ins {
- background-image: url(/jstoolbar/bt_ins.png);
-}
-.jstb_del {
- background-image: url(/jstoolbar/bt_del.png);
-}
-.jstb_code {
- background-image: url(/jstoolbar/bt_code.png);
-}
-.jstb_h1 {
- background-image: url(/jstoolbar/bt_h1.png);
-}
-.jstb_h2 {
- background-image: url(/jstoolbar/bt_h2.png);
-}
-.jstb_h3 {
- background-image: url(/jstoolbar/bt_h3.png);
-}
-.jstb_ul {
- background-image: url(/jstoolbar/bt_ul.png);
-}
-.jstb_ol {
- background-image: url(/jstoolbar/bt_ol.png);
-}
-.jstb_tl {
- background-image: url(/jstoolbar/bt_tl.png);
-}
-.jstb_bq {
- background-image: url(/jstoolbar/bt_bq.png);
-}
-.jstb_unbq {
- background-image: url(/jstoolbar/bt_bq_remove.png);
-}
-.jstb_pre {
- background-image: url(/jstoolbar/bt_pre.png);
-}
-.jstb_precode {
- background-image: url(/jstoolbar/bt_precode.png);
-}
-.jstb_link {
- background-image: url(/jstoolbar/bt_link.png);
-}
-.jstb_img {
- background-image: url(/jstoolbar/bt_img.png);
-}
-.jstb_table {
- background-image: url(/jstoolbar/bt_table.png);
-}
-.jstb_help {
- background-image: url(/help.png);
-}
diff --git a/public/stylesheets/responsive.css b/public/stylesheets/responsive.css
deleted file mode 100644
index 3dba8b469..000000000
--- a/public/stylesheets/responsive.css
+++ /dev/null
@@ -1,873 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-/*----------------------------------------*\
- RESPONSIVE CSS
-\*----------------------------------------*/
-
-/*
- CONTENTS
-
- A) BASIC MOBILE RESETS
- B) HEADER & TOP MENUS
- C) MAIN CONTENT & SIDEBAR
- D) TOGGLE BUTTON & FLYOUT MENU
- E) UX ELEMENTS
- F) PAGE SPECIFIC STYLES
- G) FORMS
-*/
-
-/* Hide new elements (toggle button and flyout menu) above 900px */
-.mobile-toggle-button,
-.flyout-menu {
- display: none;
-}
-
-/*
- redmine's body is set to min-width: 900px
- add first breakpoint here and start adding responsiveness
-*/
-
-@media screen and (max-width: 899px)
-{
- /*----------------------------------------*\
- A) BASIC MOBILE RESETS
- \*----------------------------------------*/
-
- /*
- apply natural border box, see: http://www.paulirish.com/2012/box-sizing-border-box-ftw/
- this helps us to better deal with percentages and padding / margin
- */
- *,
- *:before,
- *:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
-
- body,
- html {
- height: 100%;
- margin: 0;
- padding: 0;
- }
-
- html {
- overflow-y: auto; /* avoid 2nd scrollbar on desktop */
- -webkit-text-size-adjust: 100%; /* prevent font scaling in landscape mode on webkit */
- }
-
- body {
- min-width: 0; /* reset the min-width of 900px */
- -webkit-overflow-scrolling: touch;
- }
-
- body,
- input,
- select,
- textarea,
- button {
- font-size: 14px; /* Set font-size for standard elements to 14px */
- }
-
- select {
- max-width: 100%; /* prevent long names within select menues from breaking content */
- }
-
- #wrapper {
- position: relative;
- overflow-x: hidden; /* hide horizontal overflow */
- max-width: 100%;
- margin: 0;
- }
-
- /*----------------------------------------*\
- B) HEADER & TOP MENUS
- \*----------------------------------------*/
-
- #header {
- width: 100%;
- height: 64px; /* the height of our header on mobile */
- min-height: 0;
- margin: 0;
- padding: 0;
- border: none;
- background-color: #628db6;
- position: fixed;
- z-index: 9999;
- }
-
- /* Hide project name on mobile (project name is still visible in select menu) */
- #header h1 {
- display: none !important;
- }
-
- /* reset #header a color for mobile toggle button */
- #header a.mobile-toggle-button {
- color: #f8f8f8;
- }
-
-
- /* Hide top-menu and main-menu on mobile, because it's placed in our flyout menu */
- #top-menu,
- #header #main-menu {
- display: none;
- }
-
- /* the quick search within header holding search form and #project_quick_jump_box box*/
- #header #quick-search {
- float: none;
- clear: none; /* there are themes which set clear property, this resets it */
- max-width: 100%; /* reset max-width */
- margin: 0;
- background: inherit;
- }
-
- /* styles for combobox within quick-search (#project_quick_jump_box) */
- #project-jump.drdn {
- position: absolute;
- top: 0px;
- left: 0;
-
- width: 100%;
- max-width: 100%;
- height: 2em;
- height: 64px;
- padding: 5px;
- padding-right: 72px;
- padding-left: 20px;
- }
- #project-jump .drdn-trigger {
- font-size:1.5em;
- font-weight:bold;
- display:block;
- width:100%;
- color:#fff;
- padding-left:24px;
- background:transparent;
- height:50px;
- line-height:40px;
- border:0;
- }
- #project-jump .drdn-trigger:before {
- /* set a font-size in order to achive same result in different themes */
- font-family: Verdana, sans-serif;
- font-size: 1.5em;
-
- position: absolute;
- left: 0;
- padding: 0 8px;
- /* achieve dropdwon arrow by scaling a caret character */
- content: '^';
- -webkit-transform: scale(1,-.8);
- -ms-transform: scale(1,-.8);
- transform: scale(1,-.8);
- text-align: right;
- pointer-events: none;
-
- opacity: .6;
- }
- #project-jump.expanded .drdn-trigger:before {
- -webkit-transform: scale(1,.8);
- -ms-transform: scale(1,.8);
- transform: scale(1,.8);
- padding-top:8px;
- }
-
- #project-jump .drdn-content {
- position:absolute;
- left:0px;
- top:64px;
- width:100%;
- font-size:15px;
- font-weight:normal;
- }
- #project-jump .drdn-content .autocomplete {
- height:40px;
- font-size:20px;
- }
- #project-jump .drdn-content a {
- padding:8px;
- }
-
- #header #quick-search form {
- display: none;
- }
-
- /*----------------------------------------*\
- C) MAIN CONTENT & SIDEBAR
- \*----------------------------------------*/
-
- #main {
- padding: 64px 0 0; /* padding-top equals header height */
- }
-
- #main.nosidebar #content,
- div#content {
- width: 100%;
- min-height: 0; /* reset min-height of #content */
- margin: 0;
- }
-
- /* hide sidebar and sidebar switch panel, since it's placed in mobile flyout menu */
- #sidebar,
- #sidebar-switch-panel {
- display: none;
- }
-
- .splitcontentleft, .splitcontentright, .splitcontenttop {
- width: 100%;
- flex: auto;
- margin-right: 0;
- margin-left: 0;
- }
-
- /*----------------------------------------*\
- D) TOGGLE BUTTON & FLYOUT MENU
- \*----------------------------------------*/
-
- .mobile-toggle-button {
- font-size: 42px;
- line-height: 64px;
-
- position: relative;
- z-index: 10;
-
- display: block; /* remove display: none; of non-mobile version */
- float: right;
-
- width: 60px;
- height: 64px;
- margin-top: 0;
-
- text-align: center;
-
- border-left: 1px solid #ddd;
- }
-
- .mobile-toggle-button:hover,
- .mobile-toggle-button:active {
- text-decoration: none;
- }
-
- .mobile-toggle-button:after {
- font-family: Verdana, sans-serif;
- display: block;
- margin-top: -3px;
- content: '\2261';
- }
-
- /* search magnifier icon */
- .search-magnifier {
- font-family: Verdana, sans-serif;
- color: #bbb;
-
- cursor: pointer;
- -webkit-transform: rotate(-45deg);
- -moz-transform: rotate(45deg);
- -o-transform: rotate(45deg);
- }
-
- .search-magnifier--flyout {
- font-size: 25px;
- line-height: 54px;
-
- position: absolute;
- z-index: 1;
- left: 12px;
- }
-
- /* Flyout Menu */
-
- .flyout-menu {
- position: absolute;
- right: -250px;
-
- display: block; /* remove display: none; of non-mobile version */
- overflow-x: hidden;
-
- width: 250px;
- height: 100%;
- margin: 0; /* reset margin for themes that define it */
- padding: 0; /* reset padding for themes that define it */
-
- color: white;
- background-color: #3e5b76;
- }
-
- /* avoid zoom on search input focus for ios devices */
- .flyout-menu input[type='text'] {
- font-size: 16px;
- }
-
- .flyout-menu h3 {
- font-size: 11px;
- line-height: 19px;
-
- height: 20px;
- margin: 0;
- padding: 0;
-
- letter-spacing: .1em;
- text-transform: uppercase;
-
- color: white;
- border-top: 1px solid #506a83;
- border-bottom: 1px solid #506a83;
- background-color: #628db6;
- }
-
- .flyout-menu h4 {
- color: white;
- }
-
- .flyout-menu h3,
- .flyout-menu h4,
- .flyout-menu > p,
- .flyout-menu > a,
- .flyout-menu ul li a,
- .flyout-menu__search,
- .flyout-menu__sidebar > div,
- .flyout-menu__sidebar > p,
- .flyout-menu__sidebar > a,
- .flyout-menu__sidebar > form,
- .flyout-menu > div,
- .flyout-menu > form {
- padding-left: 8px;
- }
-
- .flyout-menu .flyout-menu__avatar {
- margin-top: -1px; /* move avatar up 1px */
- padding-left: 0;
- }
-
- .flyout-menu__sidebar > form {
- display: block;
- }
-
- .flyout-menu__sidebar > form h3 {
- margin-left: -8px;
- }
-
- .flyout-menu__sidebar > form label {
- display: inline-block;
- margin: 8px 0;
- }
-
- .flyout-menu__sidebar > form br br {
- display: none;
- }
-
- /* Targets list containing checkboxes (e.g. activities sidebar) in flyout menu */
- .flyout-menu__sidebar form > ul {
- margin-left: -8px;
- padding-left: 0;
- }
-
- .flyout-menu__sidebar form > ul li {
- line-height: 39px;
- display: block;
- padding-left: 8px;
- border-top: 1px solid rgba(255,255,255,.1);
- }
-
- .flyout-menu__sidebar form > ul li:first-child {
- border-top: none;
- }
-
- .flyout-menu__sidebar form > ul li label {
- margin: 0;
- }
-
- .flyout-menu__sidebar form > ul li label a {
- line-height: 1;
- display: inline;
- padding-left: 0;
- border: none;
- }
-
- .flyout-menu ul {
- margin: 0;
- padding: 0;
- list-style: none;
- }
-
- .flyout-menu #watchers {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: -webkit-box;
- display: flex;
- flex-direction: column;
-
- -webkit-flex-direction: column;
- -ms-flex-direction: column;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- }
-
- .flyout-menu #watchers .contextual {
- -webkit-box-ordinal-group: 4;
- -webkit-order: 3;
- -ms-flex-order: 3;
- order: 3;
- }
-
- .flyout-menu #watchers h3 {
- margin-left: -8px;
- }
-
- .flyout-menu #watchers ul li {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: -webkit-box;
- display: flex;
- flex-direction: row;
-
- -webkit-flex-direction: row;
- -ms-flex-direction: row;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -webkit-align-items: center;
- -ms-flex-align: center;
- -webkit-box-align: center;
- align-items: center;
- }
-
- .flyout-menu ul li a {
- line-height: 40px;
- display: block;
- overflow: hidden;
- height: 40px;
- white-space: nowrap;
- text-overflow: ellipsis;
- border-top: 1px solid rgba(255,255,255,.1);
- }
-
- .flyout-menu ul li:first-child a {
- line-height: 39px;
- height: 39px;
- border-top: none;
- }
-
- .flyout-menu a {
- color: white;
- }
-
- .flyout-menu ul li a:hover {
- text-decoration: none;
- }
-
- .flyout-menu ul li a.new-object,
- .new-object ~ .menu-children {
- display: none;
- }
-
- /* Left flyout search container */
- .flyout-menu__search {
- line-height: 54px;
- height: 64px;
- padding-top: 3px;
- padding-right: 8px;
- }
-
- .flyout-menu__search input[type='text'] {
- line-height: 2;
-
- width: 100%;
- height: 38px;
- padding-left: 27px;
-
- vertical-align: middle;
-
- border: none;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- background-color: #fff;
- }
-
- .flyout-menu__avatar {
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- width: 100%;
- border-top: 1px solid rgba(255,255,255,.1);
- }
-
- .flyout-menu__avatar img.gravatar {
- width: 40px;
- height: 40px;
- padding: 0;
- vertical-align: top;
- border-width: 0;
- }
-
- .flyout-menu__avatar a {
- line-height: 40px;
- height: auto;
- height: 40px;
- text-decoration: none;
- color: white;
- }
-
- /* avatar */
- .flyout-menu__avatar a:first-child {
- line-height: 0;
- width: 40px;
- padding: 0;
- }
-
- .flyout-menu__avatar .user {
- padding-left: 15px;
- padding-right: 15px;
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- -webkit-flex-grow: 1;
- -ms-flex-grow: 1;
- flex-grow: 1;
- }
-
- /* user link when no avatar is present */
- .flyout-menu__avatar--no-avatar a.user {
- line-height: 40px;
- padding-left: 8px;
- }
-
- .flyout-is-active body {
- overflow: hidden; /* for body not to have scrollbars when left flyout menu is active */
- }
-
- html.flyout-is-active {
- overflow: hidden;
- }
-
- .flyout-is-active #wrapper, .flyout-is-active #header {
- right: 250px; /* when left flyout is active, move body and header to the right (same amount like flyout-menu's width) */
- }
-
- .flyout-is-active #wrapper {
- overflow: visible;
- height: 100%;
- }
-
- .flyout-is-active .mobile-toggle-button:after {
- content: '\00D7'; /* close glyph */
- }
-
- .flyout-is-active #main {
- /*
- * only relevant for devices with cursor when flyout it active, in order to show,
- * that whole wrapper content is clickable and closes flyout menu
- */
- cursor: pointer;
- }
-
- #admin-menu {
- padding-left: 0;
- }
-
- #admin-menu li {
- padding-bottom: 0;
- }
-
- #admin-menu a,
- #admin-menu a.selected {
- line-height: 40px;
- padding: 0;
- padding-left: 32px !important;
- background-position: 8px 50%;
- }
-
- /*----------------------------------------*\
- E) UX ELEMENTS
- \*----------------------------------------*/
-
- .mobile-hide {display:none;}
- .mobile-show {display:initial;}
-
- /* Contextual Buttons */
-
- #content>.contextual {
- width: 100%;
- margin-bottom: .5em;
- padding-left: 0; /* reset left padding in order to use whole space */
- white-space: normal;
- }
-
- #content>.contextual>a,
- #content>.contextual .drdn,
- p.buttons a {
- font-weight: bold;
-
- display: inline-block;
-
- margin: 5px 0;
- margin-right: 2px;
- padding: 9px 9px 9px 9px;
-
- border: 1px solid #ddd;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- }
- #content>.contextual .drdn-content {
- right:initial;
- left:0px;
- top:40px;
- }
- #content>.contextual .drdn .drdn-content a {
- padding-top: 9px;
- padding-bottom: 9px;
- }
-
- #content>.contextual a.icon,
- p.buttons a.icon {
- background-position-x: 4px;
- padding-left: 25px;
- }
-
- .flyout-menu .contextual {
- float: none;
- }
-
- /* loading indicator */
- #ajax-indicator {
- width: 60%;
- left: 20%;
- }
-
- /* jquery ui dialogs */
- .ui-dialog {
- max-width: 98%;
- margin: 1%;
- }
-
- .ui-dialog .ui-dialog-content {
- padding-left: 0;
- padding-right: 0;
- }
-
- #filters-table {width:100%; float:none;}
- .add-filter {width:100%; float:none; text-align: left; margin-top: 8px;}
-
- /*----------------------------------------*\
- F) PAGE SPECIFIC STYLES
- \*----------------------------------------*/
-
- /* some themes add a margin to login page, remove it on mobile */
- .action-login #main {
- margin: 0;
- }
-
- div#activity dl, #search-results {margin-left: 0;}
-
- .version-overview table.progress {width:75%;}
- div#version-summary {float:none; width:100%; margin-left:0;}
- body.controller-versions.action-show div#roadmap .related-issues {width:100%;}
-
- /* History and Changeset */
- div#issue-changesets {
- float: none;
- width: auto;
- margin-left: 0;
- padding-left: 0;
- margin-bottom: 2em;
- }
-
- div#issue-changesets div.changeset {
- padding-top: 1em;
- }
-
- /* Gantt charts */
- /*
- * [1] override inline styles with important
- * [2] keep border between subjects and gantt area
- * [3] remove whitespace between subjects and gantt area
- * [4] maintain width due to [3]
- */
- .gantt_subjects_column {
- width: 60% !important; /* [1] */
- }
-
- .gantt_subjects_container {
- width: 100% !important;
- overflow: hidden;
- }
-
- .gantt_subjects_column .gantt_hdr {
- width: 100% !important;
- right: 0 !important; /* [2] */
- border-right: solid 1px #c0c0c0;
- }
-
- #gantt_area {
- left: -2px; /* [3] */
- margin-right: -2px; /* [4] */
- }
-
- /*----------------------------------------*\
- G) FORMS
- \*----------------------------------------*/
-
- input, select, textarea {
- max-width: 100%;
- }
-
- /* tabular forms resets for mobile */
- .tabular p, .tabular.settings p {
- padding-left: 0;
- }
-
- .tabular label, .tabular.settings label {
- display: block;
- width: 100%;
- margin-left: 0;
- text-align: left;
- }
-
- .tabular input, .tabular select, .tabular textarea {
- width: 100%;
- max-width: 100%;
- }
-
- .tabular input[type="checkbox"], .tabular input.date {
- width: auto;
- max-width: 95%;
- }
-
- /* new issue form */
- #all_attributes p:first-child {
- float: none !important;
- }
-
- #all_attributes #issue_tracker_id {
- width: 90%;
- }
-
- #issue_is_private_label {
- display: inline;
- }
-
- span#watchers_inputs {
- width: 100%;
- }
-
- /* issue edit form */
- label[for='issue_description'] ~ a .icon-edit {
- word-wrap: normal;
- }
-
- /* issues page */
- body.controller-issues p.query-totals {
- margin-top: 0px;
- text-align: left;
- }
-
- /* subtasks and related issues list on issue show */
- #issue_tree .issues, #relations .issues {
- border-collapse: separate;
- border-spacing: 0 1em; /* vertical space between tasks */
- }
-
- #issue_tree .issue > td:not(.checkbox), #relations .issue > td:not(.checkbox) {
- display: block;
- float: left;
- text-align: left;
- padding-right: 5px;
- }
-
- #issue_tree .issue > td.subject, #relations .issue > td.subject {
- width: 100%; /* let subject have one full width column */
- }
-
- #issue_tree .issue > td:not(.subject), #relations .issue > td:not(.subject) {
- width: 20%; /* three columns for all cells that are not subject */
- }
-
- #issue_tree .issues, #issue_tree .issue,
- #relations .issues, #relations .issue {
- position: relative; /* needed for .buttons positioning */
- }
-
- /* positioniong of unline button */
- #issue_tree .issue > td.buttons,
- #relations .issue > td.buttons {
- text-align: right;
- position: absolute;
- right: 0;
- margin: 0;
- padding-right: 0;
- }
-
- #issue_tree .issue .buttons a,
- #relations .issue .buttons a {
- vertical-align: middle;
- }
-
- /* attachment upload form */
- .attachments_fields span {
- position: relative;
- clear: both;
- margin-bottom: 1em;
- white-space: normal;
- }
- .attachments_fields span a.remove-upload {
- position: absolute;
- top: 0;
- right: 0;
- }
-
- .attachments_fields input.description {
- margin-left: 0;
- width: 100%;
- }
-
- /* Calendar */
- ul.cal {
- display: block
- }
- .cal .calhead {
- display: none
- }
-
- .cal .calbody {
- min-height: calc(1.2em * 3);
- }
-
- .cal .calbody .abbr-day {
- display: inline;
- }
-
- .cal .week-number {
- border: 1px solid #c0c0c0;
- text-align: left;
- font-weight: bold;
- background-color: #def;
- }
-
- .cal .week-number .label-week {
- display: inline;
- }
-
- .cal .calbody p.day-num {
- font-size: 1.1em;
- text-align: left;
- }
-}
-
-@media all and (max-width: 599px) {
- span.pagination {text-align:center;}
- .pagination ul.pages li {display:none;}
- .pagination ul.pages li.current,
- .pagination ul.pages li.previous,
- .pagination ul.pages li.next {display:inline-block; width:32%; overflow:hidden;}
-
- #login-form {width:100%; margin-top:2em;}
-
- #filters-table .filter .field, #list-definition > div .field { width: 100%; }
- #filters-table .values { width: auto; max-width: 100%; }
-}
diff --git a/public/stylesheets/rtl.css b/public/stylesheets/rtl.css
deleted file mode 100644
index b6d083fac..000000000
--- a/public/stylesheets/rtl.css
+++ /dev/null
@@ -1,385 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-html {direction:rtl;}
-h1, h2, h3, h4 {padding:2px 00px 1px 10px;}
-/***** Layout *****/
-#top-menu {padding:2px 6px 0px 2px;}
-#top-menu li {float:right;}
-#top-menu a {margin-right:0;margin-left:8px;}
-#top-menu #loggedas {float:left;margin-right:0;margin-left:0.5em;}
-
-#account {float:left;}
-
-#header {padding:4px 6px 20px 8px;}
-
-#quick-search {float:left;}
-
-#main-menu {left:auto;right:6px;margin-right:0;margin-left:-500px;}
-#main-menu li {float:right;margin:0px 0px 0px 2px;}
-
-#admin-menu a {padding-left:0;padding-right:20px;}
-
-#sidebar {float:left;}
-* html #sidebar hr{ left: auto; right: -6px; }
-#sidebar .contextual { margin-right: 0; margin-left: 1em;}
-#sidebar ul li {margin: 0px 0px 0px 2px;}
-
-#content {border-right:0 solid #ddd; border-left:1px solid #ddd;}
-* html #content{padding-right:0;}
-#main.nosidebar #content{border-left:0;}
-
-#login-form table {margin-left:auto; margin-right:auto;}
-div.modal p.buttons {text-align:left;}
-
-/***** Links *****/
-
-#sidebar a.selected {padding:1px 2px 2px 3px; margin-left:0px; margin-right:-2px;}
-#admin-menu a.selected {padding-left:0!important; padding-right:20px!important; background-position:right 2px 40%;}
-
-a.collapsible {padding-left:0px; padding-right:12px; background: url(/arrow_down.png) no-repeat right 0px top 50%;}
-a.collapsible.collapsed {background-image: url(/arrow_left.png);}
-
-/***** Tables *****/
-table.list td {padding-left:0px; padding-right:10px;}
-table.list td.name, table.list td.description, table.list td.subject, table.list td.comments, table.list td.roles {text-align:right;}
-table.list td.buttons {text-align:left; }
-table.list td.buttons a {padding-right: 0em; padding-left: 0.6em;}
-table.list caption {text-align:right; padding: 0.5em 0 0.5em 0.5em;}
-
-tr.project.idnt td.name span {padding-right:0px; padding-left:16px;}
-tr.project.idnt-1 td.name {padding-left:0; padding-right:0.5em;}
-tr.project.idnt-2 td.name {padding-left:0; padding-right:2em;}
-tr.project.idnt-3 td.name {padding-left:0; padding-right:3.5em;}
-tr.project.idnt-4 td.name {padding-left:0; padding-right:5em;}
-tr.project.idnt-5 td.name {padding-left:0; padding-right:6.5em;}
-tr.project.idnt-6 td.name {padding-left:0; padding-right:8em;}
-tr.project.idnt-7 td.name {padding-left:0; padding-right:9.5em;}
-tr.project.idnt-8 td.name {padding-left:0; padding-right:11em;}
-tr.project.idnt-9 td.name {padding-left:0; padding-right:12.5em;}
-
-tr.issue td.subject, tr.issue td.relations { text-align:right; }
-tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
-
-table.issues td.description {padding:4px 24px 4px 4px; text-align:right;}
-
-tr.issue.idnt td.subject a {padding-left: 0; padding-right: 16px;}
-tr.issue.idnt-1 td.subject {padding-left:0; padding-right: 0.5em;}
-tr.issue.idnt-2 td.subject {padding-left:0; padding-right: 2em;}
-tr.issue.idnt-3 td.subject {padding-left:0; padding-right: 3.5em;}
-tr.issue.idnt-4 td.subject {padding-left:0; padding-right: 5em;}
-tr.issue.idnt-5 td.subject {padding-left:0; padding-right: 6.5em;}
-tr.issue.idnt-6 td.subject {padding-left:0; padding-right: 8em;}
-tr.issue.idnt-7 td.subject {padding-left:0; padding-right: 9.5em;}
-tr.issue.idnt-8 td.subject {padding-left:0; padding-right: 11em;}
-tr.issue.idnt-9 td.subject {padding-left:0; padding-right: 12.5em;}
-
-tr.entry td.filename {text-align:right;}
-tr.entry td.filename_no_report {text-align:right;}
-tr.entry td.size {text-align:left;}
-tr.entry td.age {text-align:left;}
-tr.entry.file td.filename a {margin-left:0px; margin-right:16px;}
-tr.entry.file td.filename_no_report a {margin-left:0px; margin-right:16px;}
-
-tr span.expander {padding-left:0; padding-right:8px; margin-right:0;}
-
-table.files tbody th {text-align:right;}
-table.files tr.file td.filename {text-align:right; padding-left:0; padding-right:24px;}
-
-tr.message td.subject { padding-left:0px; padding-right:20px; }
-
-tr.version td.name { padding-left:0px; padding-right:20px; }
-
-tr.user td.username, tr.user td.firstname, tr.user td.lastname, tr.user td.email {text-align:right;}
-
-tr.time-entry td.issue, tr.time-entry td.comments {text-align:right; }
-td.hours {text-align:left; padding-right: 0em ;padding-left: 0.5em; }
-
-table.plugins td.configure { text-align:left; padding-right:0em; padding-left: 1em; }
-
-table.list tbody tr.group td { padding: 0.8em 0.3em 0.5em 0; text-align:right;}
-table.list tbody tr.group span.count {margin-left:0px; margin-right:4px;}
-
-a.sort {padding-right:0; padding-left:16px;}
-
-table.attributes th {text-align:right;}
-
-table.boards a.board, h3.comments {padding-left:0px; padding-right:20px; }
-table.boards td.last-message {text-align:right;}
-
-table.messages td.last_message {text-align:right;}
-
-h3.version {padding-left:0px; padding-right:20px;}
-
-div.issues h3 {padding-left:0px; padding-right:20px;}
-div.members h3 {padding-left:0px; padding-right:20px;}
-div.news h3 {padding-left:0px; padding-right:20px;}
-div.projects h3 {padding-left:0px; padding-right:20px;}
-
-#watchers li {margin: 0px 0px 0px 2px; padding: 0px 0px 0px 0px;}
-#watchers img.gravatar {margin: 0 0 2px 4px;}
-
-span.search_for_watchers a, span.add_attachment a {padding-left:px; padding-right:16px; background: url(/bullet_add.png) no-repeat right 50%; }
-
-div.square {float:right;}
-.contextual {float:left; padding-left:0px; padding-right:10px;}
-
-.splitcontentleft{float:right;}
-.splitcontentright{float:left;}
-
-blockquote {border-left:0px solid #e0e0e0; padding-left:0em; margin-left:2em; border-right:3px solid #e0e0e0; padding-right:0.6em; margin-right:0;}
-blockquote blockquote { margin-right:0;}
-
-div.issue div.subject div div {padding-left:0px; padding-right:16px;}
-
-div.issue span.private, div.journal span.private {margin-right:0px; margin-left:2px;}
-
-fieldset.collapsible>legend {padding-left:0px; padding-right:18px; background: url(/arrow_down.png) no-repeat right 50%;}
-fieldset.collapsible.collapsed>legend { background-image: url(/arrow_left.png); }
-
-fieldset#filters td.add-filter {text-align:left; }
-
-.toggle-multiselect {background: url(/bullet_toggle_plus.png) no-repeat right 40%; padding-left:0px; padding-right:8px; margin-right:0;}
-
-div#issue-changesets {float:left; margin-left:0em; margin-right:1em; padding-left:0em; padding-right:1em;}
-
-.journal ul.details img {margin:0 4px -3px 0;}
-
-div.journal.private-notes {border-left:0px solid #d22; padding-left:0px; margin-left:0px; border-right:2px solid #d22; padding-right:4px; margin-right:-6px;}
-
-div#activity dl, #search-results {margin-left:0em; margin-right:2em;}
-div#activity dd, #search-results dd {padding-left:0px; padding-right:18px;}
-div#activity dt, #search-results dt {padding-left:0px; padding-right:20px; background-position:right 50%;}
-
-div#activity dt.grouped {margin-left:0em; margin-right:5em;}
-div#activity dd.grouped {margin-left:0em; margin-right:9em;}
-
-#search-results dd {padding-left:0px; margin-left:0px; padding-right:20px; margin-right:0px; }
-
-div#search-results-counts {float:left;}
-div#search-results-counts li {float:right; margin-left:0em; margin-right:1em; }
-
-div#version-summary { float:left; margin-left:0px; margin-right:16px;}
-div#version-summary th, div#version-summary td.total-hours { text-align:left;}
-
-table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align:left; padding-right:0em; padding-left: 0.5em; }
-
-ul.projects {padding-left:0em; padding-right:1em;}
-ul.projects ul {padding-left:0em; padding-right:1.6em;}
-
-#projects-index ul.projects ul.projects {border-left:0px solid #e0e0e0; padding-left:0em; border-right:3px solid #e0e0e0; padding-right:1em;}
-.my-project { padding-left:0px; padding-right:18px; background: url(/fav.png) no-repeat right 50%; }
-
-/***** Tabular forms ******/
-.tabular p{
- padding-left:0px; padding-right:180px; /* width of left column containing the label elements */
- clear:right;
-}
-
-.tabular label{
- float:right;
- text-align:left;
- /* width of left column */
- margin-left:0px; margin-right:-180px;
-}
-
-.tabular label.floating{
- margin-left: 0px; margin-right:0px;
- text-align:right;
-}
-
-.tabular label.block{
- margin-left:0px !important; margin-right:0px !important;
- text-align:right;
-}
-
-.tabular label.inline{
- margin-left:0px !important; margin-right:5px !important;
-}
-
-label.no-css {
- text-align:right;
- margin-left:0px; margin-right:0px;
-}
-
-.tabular.settings p{padding-left:0px; padding-right:300px; }
-.tabular.settings label{margin-left:0px; margin-right:-300px;}
-
-fieldset#notified_events .parent {padding-left:0px; padding-right:20px; }
-
-.check_box_group {padding:2px 2px 4px 4px;}
-.check_box_group label {margin-right: 0px !important; text-align: right;}
-.attachments_fields input.description {margin-left:0px; margin-right:4px;}
-
-.attachments_fields input.filename {background:url(/attachment.png) no-repeat right 1px top 50%; padding-left:0px; padding-right:18px;}
-.attachments_fields .ajax-waiting input.filename {background:url(/hourglass.png) no-repeat right top 50%;}
-.attachments_fields .ajax-loading input.filename {background:url(/loading.gif) no-repeat right top 50%;}
-.attachments_fields div.ui-progressbar {margin: 2px 8px -5px 0;}
-
-a.remove-upload {background: url(/delete.png) no-repeat right 1px top 50%; padding-left:0px; padding-right:16px;}
-
-div.thumbnails div {margin-right:0px; margin-left:2px;}
-
-p.other-formats { text-align:left; }
-
-a.atom { background: url(/feed.png) no-repeat right 1px top 50%; padding: 2px 16px 3px 0; }
-
-em.info.error {padding-left:0; padding-right:20px; background:url(/exclamation.png) no-repeat right 50%;}
-
-table.members td.name {padding-right: 20px; padding-left:0; }
-table.members td.group, table.members td.groupnonmember, table.members td.groupanonymous {background: url(/group.png) no-repeat right 50%;}
-
-input.autocomplete {
- background: #fff url(/magnifier.png) no-repeat right 2px top 50%; padding-left:0px !important; padding-right:20px !important;
-}
-
-.role-visibility {padding-right:2em; padding-left:0;}
-
-/***** Flash & error messages ****/
-#errorExplanation, div.flash, .nodata, .warning, .conflict {
- padding: 4px 30px 4px 4px;
-}
-
-div.flash.error, #errorExplanation {
- background: url(/exclamation.png) right 8px top 50% no-repeat;
-}
-
-div.flash.notice {
- background: url(/true.png) right 8px top 5px no-repeat;
-}
-
-div.flash.warning, .conflict {
- background: url(/warning.png) right 8px top 5px no-repeat;
- text-align:right;
-}
-
-/***** Ajax indicator ******/
-#ajax-indicator {
- left:auto; right:40%;
-}
-
-#ajax-indicator span {
- background-position: right 40%;
- background-image: url(/loading.gif);
- padding-left:0px; padding-right:26px;
-}
-
-/***** Calendar *****/
-table.cal td p.day-num {text-align:left;}
-table.cal .starting a, p.cal.legend .starting {background: url(/bullet_go.png) no-repeat right -1px top -2px; padding-left:0px; padding-right:16px;}
-table.cal .ending a, p.cal.legend .ending {background: url(/bullet_end.png) no-repeat right -1px top -2px; padding-left:0px; padding-right:16px;}
-table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(/bullet_diamond.png) no-repeat right -1px top -2px; padding-left:0px; padding-right:16px;}
-
-/***** Tooltips ******/
-.tooltip span.tip{text-align:right;}
-
-div.tooltip:hover span.tip{
- left:auto; right:24px;
-}
-
-img.ui-datepicker-trigger {
- margin-left:0px; margin-right:4px;
-}
-
-/***** Progress bar *****/
-table.progress {
- float:right;
- margin: 1px 0px 1px 6px;
-}
-p.progress-info {clear:right;}
-
-/***** Tabs *****/
-#content .tabs ul {padding-left:0em; padding-right:0.5em;}
-#content .tabs ul li {
- float:right;
- margin-right:0px; margin-left:4px;
-}
-
-div.tabs-buttons {right:auto; left:0;}
-
-button.tab-left {
- right:auto; left:20px;
-}
-
-button.tab-right {
- right:auto; left:20px;
-}
-
-/***** Diff *****/
-
-/***** Wiki *****/
-
-div.wiki .external {
- background-position:right 60%;
- padding-left:0px; padding-right:12px;
-}
-
-div.wiki pre {
- margin: 1em 1.6em 1em 1em;
-}
-
-div.wiki ul.toc {
- margin-left:0;
- margin-right:0;
-}
-
-div.wiki ul.toc.right { float: left; margin-left:0; margin-right:12px;}
-div.wiki ul.toc.left { float:right; margin-right:0; margin-left:12px;}
-div.wiki ul.toc li li {margin-left:0em; margin-right:1.5em;}
-
-a.wiki-anchor {margin-left:0px; margin-right:6px;}
-
-/***** My page layout *****/
-
-/***** Gantt chart *****/
-.gantt_hdr {
- border-right:0px solid #c0c0c0; border-left:1px solid #c0c0c0;
-}
-
-.task.parent.marker.starting{margin-left:0px; margin-right:-4px; left:auto; right:0;}
-.task.parent.marker.ending {margin-left:0px; margin-right:-4px; right:auto; left:0px;}
-
-.version.marker {margin-left:0; margin-right:-4px;}
-
-.project.marker {margin-left:0; margin-right:-4px;}
-
-/***** Icons *****/
-.icon {
- background-position: right 50%;
- padding-left:0; padding-right:20px;
-}
-
-div.issue img.gravatar {
- float: right;
- margin: 0 0 0 6px;
-}
-
-div.issue table img.gravatar {
- float: right;
- margin: 0 0em 0 0.5em;
-}
-
-h2 img.gravatar {margin: -2px 0 -4px 4px;}
-h3 img.gravatar {margin: -4px 0 -4px 4px;}
-h4 img.gravatar {margin: -6px 0 -4px 4px;}
-td.username img.gravatar {margin:0 0 0 0.5em; }
-#activity dt img.gravatar {float:right; margin:0 0 1em 1em;}
-/* Used on 12px Gravatar img tags without the icon background */
-.icon-gravatar {float:right; margin-right:px; margin-left:4px;}
-
-#activity dt, .journal {clear:right;}
-
-.journal-link {float:left;}
-
-/* Custom JQuery styles */
-.ui-datepicker-title select {margin-left:4px !important; margin-right:0 !important;}
-
-/***** Media print specific styles *****/
-
-/* Accessibility specific styles */
-.hidden-for-sighted {
- left:auto; right:-10000px;
-}
diff --git a/public/stylesheets/scm.css b/public/stylesheets/scm.css
deleted file mode 100644
index 71a6ac34e..000000000
--- a/public/stylesheets/scm.css
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- * This code is released under the GNU General Public License.
- */
-
-table.entries a {
- padding-top: 2px;
- padding-bottom: 2px;
-}
-
-table.revision-info td {
- margin: 0px;
- padding: 0px;
-}
-
-div.revision-graph { position: absolute; min-width: 1px; }
-
-div.changeset-changes ul { margin: 0; padding: 0; }
-div.changeset-changes ul > ul { margin-left: 18px; padding: 0; }
-
-li.change {
- list-style-type:none;
- background-image: url(/bullet_black.png);
- background-position: 1px 1px;
- background-repeat: no-repeat;
- padding-top: 1px;
- padding-bottom: 1px;
- padding-left: 20px;
- margin: 0;
-}
-li.change.folder { background-image: url(/folder_open.png); }
-li.change.folder.change-A { background-image: url(/folder_open_add.png); }
-li.change.folder.change-M { background-image: url(/folder_open_orange.png); }
-li.change.change-A { background-image: url(/bullet_add.png); }
-li.change.change-M { background-image: url(/bullet_orange.png); }
-li.change.change-C { background-image: url(/bullet_blue.png); }
-li.change.change-R { background-image: url(/bullet_purple.png); }
-li.change.change-D { background-image: url(/bullet_delete.png); }
-
-li.change .copied-from { font-style: italic; color: #999; font-size: 0.9em; }
-li.change .copied-from:before { content: " - "}
-
-#changes-legend { float: right; font-size: 0.8em; margin: 0; }
-#changes-legend li { float: left; background-position: 5px 0; }
-
-table.filecontent { border: 1px solid #e2e2e2; border-collapse: collapse; width:98%; background-color: #fafafa; }
-table.filecontent tbody {font-family:Consolas, Menlo, "Liberation Mono", Courier, monospace; font-size:12px;}
-table.filecontent th { border: 1px solid #e2e2e2; background-color: #eee; }
-table.filecontent th.filename { background-color: #e4e4d4; text-align: left; padding:5px;}
-table.filecontent tr.spacing th { text-align:center; }
-table.filecontent tr.spacing td { height: 0.4em; background: #EAF2F5;}
-table.filecontent th.line-num {
- border: 1px solid #e2e2e2;
- text-align: right;
- width: 2%;
- padding: 0 3px 0 0;
- color: #999;
- user-select: none;
- -moz-user-select: none;
- -o-user-select: none;
- -ms-user-select: none;
- -webkit-user-select: none;
- font-weight:normal;
-}
-table.filecontent th.line-num a {
- text-decoration: none;
- color: inherit;
-}
-table.filecontent th.line-num a:after {
- content: attr(data-txt);
-}
-table.diffcontent th.line-num:after {
- content: attr(data-txt);
-}
-table.filecontent td.line-code {padding: 0 0 0 4px;}
-table.filecontent td.line-code pre, table.filecontent td.line-code div {
- margin: 0px;
- white-space: pre-wrap;
- font-family:Consolas, Menlo, "Liberation Mono", Courier, monospace; font-size:12px;
-}
-
-table.filecontent tr:target th.line-num { background-color:#E0E0E0; color: #777; }
-table.filecontent tr:target td.line-code { background-color:#DDEEFF; }
-
-img.filecontent, video.filecontent { max-width: 100%; }
-
-.previous-filename {
- font-weight: normal;
-}
-
-/* 12 different colors for the annonate view */
-table.annotate tr.bloc-0 td.line-code {border-left-color: #FFFFBF;}
-table.annotate tr.bloc-1 td.line-code {border-left-color: #EABFFF;}
-table.annotate tr.bloc-2 td.line-code {border-left-color: #BFFFFF;}
-table.annotate tr.bloc-3 td.line-code {border-left-color: #FFD9BF;}
-table.annotate tr.bloc-4 td.line-code {border-left-color: #E6FFBF;}
-table.annotate tr.bloc-5 td.line-code {border-left-color: #BFCFFF;}
-table.annotate tr.bloc-6 td.line-code {border-left-color: #FFBFEF;}
-table.annotate tr.bloc-7 td.line-code {border-left-color: #FFE6BF;}
-table.annotate tr.bloc-8 td.line-code {border-left-color: #FFE680;}
-table.annotate tr.bloc-9 td.line-code {border-left-color: #AA80FF;}
-table.annotate tr.bloc-10 td.line-code {border-left-color: #FFBFDC;}
-table.annotate tr.bloc-11 td.line-code {border-left-color: #BFE4FF;}
-table.annotate tr.bloc-change {border-top:1px solid #e5e5e5;}
-
-table.annotate td.revision {
- padding:0;
- text-align: center;
- width: 2%;
- padding-left: 1em;
- background: inherit;
-}
-
-table.annotate td.author {
- padding:0;
- text-align: center;
- white-space: nowrap;
- padding-left: 1em;
- padding-right: 1em;
- width: 3%;
- background: inherit;
-}
-
-table.annotate td.previous {
- padding: 0;
- text-align: center;
- width: 1%;
- background: inherit;
-}
-
-table.annotate td.line-code {
- background-color: #fafafa;
- border-left: 6px solid #d7d7d7;
-}
-
-div.action_M { background: #fd8 }
-div.action_D { background: #f88 }
-div.action_A { background: #bfb }
-
-.breadcrumbs>.separator::before, .breadcrumbs>.separator::after {
- content: " ";
-}
diff --git a/public/stylesheets/tribute-5.1.3.css b/public/stylesheets/tribute-5.1.3.css
deleted file mode 100644
index 7f199167a..000000000
--- a/public/stylesheets/tribute-5.1.3.css
+++ /dev/null
@@ -1,34 +0,0 @@
-.tribute-container {
- position: absolute;
- top: 0;
- left: 0;
- height: auto;
- max-height: 300px;
- max-width: 500px;
- overflow: auto;
- display: block;
- z-index: 999999;
-}
-.tribute-container ul {
- margin: 0;
- margin-top: 2px;
- padding: 0;
- list-style: none;
- background: #efefef;
-}
-.tribute-container li {
- padding: 5px 5px;
- cursor: pointer;
-}
-.tribute-container li.highlight {
- background: #ddd;
-}
-.tribute-container li span {
- font-weight: bold;
-}
-.tribute-container li.no-match {
- cursor: default;
-}
-.tribute-container .menu-highlighted {
- font-weight: bold;
-}
diff --git a/public/themes/README b/public/themes/README
deleted file mode 100644
index 1af3d1992..000000000
--- a/public/themes/README
+++ /dev/null
@@ -1 +0,0 @@
-Put your Redmine themes here.
diff --git a/public/themes/alternate/stylesheets/application.css b/public/themes/alternate/stylesheets/application.css
deleted file mode 100644
index 080c190ab..000000000
--- a/public/themes/alternate/stylesheets/application.css
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-@import url(/application.css);
-
-body, #wrapper { background-color:#EEEEEE; }
-#header, #top-menu { margin: 0px 10px 0px 11px; }
-#main { background: #EEEEEE; margin: 8px 10px 0px 10px; }
-#content, #main.nosidebar #content { background: #fff; border-right: 1px solid #bbb; border-bottom: 1px solid #bbb; border-left: 1px solid #d7d7d7; border-top: 1px solid #d7d7d7; }
-#footer { background-color:#EEEEEE; border: 0px; }
-
-/* Headers */
-h2, h3, h4, .wiki h1, .wiki h2, .wiki h3 {border-bottom: 0px;}
-
-/* Menu */
-#main-menu li a { background-color: #507AAA; font-weight: bold;}
-#main-menu li a:hover { background: #507AAA; text-decoration: underline; }
-#main-menu li a.selected, #main-menu li a.selected:hover { background-color:#EEEEEE; }
-#main-menu li a.new-object { background-color:#507AAA; text-decoration: none; }
-
-#main-menu .menu-children {
- border-right: 1px solid #507AAA;
- border-bottom: 1px solid #507AAA;
- border-left: 1px solid #507AAA;
-}
-#main-menu .menu-children li a:hover { background-color: #507AAA;}
-
-
-/* Tables */
-table.list tbody td, table.list tbody tr:hover td { border: solid 1px #d7d7d7; }
-table.list thead th {
- border-width: 1px;
- border-style: solid;
- border-top-color: #d7d7d7;
- border-right-color: #d7d7d7;
- border-left-color: #d7d7d7;
- border-bottom-color: #999999;
-}
-
-/* Issues grid styles by priorities (provided by Wynn Netherland) */
-table.list tr.issue a { color: #666; }
-
-tr.odd.priority-highest, table.list tbody tr.odd.priority-highest:hover { color: #900; font-weight: bold; }
-tr.odd.priority-highest { background: #ffc4c4; }
-tr.even.priority-highest, table.list tbody tr.even.priority-highest:hover { color: #900; font-weight: bold; }
-tr.even.priority-highest { background: #ffd4d4; }
-tr.priority-highest a, tr.priority-5:hover a { color: #900; }
-tr.odd.priority-highest td, tr.even.priority-highest td { border-color: #ffb4b4; }
-
-tr.odd.priority-high2, table.list tbody tr.odd.priority-high4:hover { color: #900; }
-tr.odd.priority-high2 { background: #ffc4c4; }
-tr.even.priority-high2, table.list tbody tr.even.priority-high4:hover { color: #900; }
-tr.even.priority-high2 { background: #ffd4d4; }
-tr.priority-high2 a { color: #900; }
-tr.odd.priority-high2 td, tr.even.priority-high4 td { border-color: #ffb4b4; }
-
-tr.odd.priority-high3, table.list tbody tr.odd.priority-high3:hover { color: #900; }
-tr.odd.priority-high3 { background: #fee; }
-tr.even.priority-high3, table.list tbody tr.even.priority-high3:hover { color: #900; }
-tr.even.priority-high3 { background: #fff2f2; }
-tr.priority-high3 a { color: #900; }
-tr.odd.priority-high3 td, tr.even.priority-high3 td { border-color: #fcc; }
-
-tr.odd.priority-lowest, table.list tbody tr.odd.priority-lowest:hover { color: #559; }
-tr.odd.priority-lowest { background: #eaf7ff; }
-tr.even.priority-lowest, table.list tbody tr.even.priority-lowest:hover { color: #559; }
-tr.even.priority-lowest { background: #f2faff; }
-tr.priority-lowest a { color: #559; }
-tr.odd.priority-lowest td, tr.even.priority-lowest td { border-color: #add7f3; }
-
-/* Buttons */
-input[type="button"], input[type="submit"], input[type="reset"] { background-color: #f2f2f2; color: #222222; border: 1px outset #cccccc; }
-input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover { background-color: #ccccbb; }
-
-/* Fields */
-input[type="text"], input[type="password"], textarea, select { border: 1px solid #d7d7d7; }
-input[type="text"]:focus, input[type="password"]:focus, textarea:focus, select:focus { border: 1px solid #888866; }
-option { border-bottom: 1px dotted #d7d7d7; }
-
-/* Misc */
-.box { background-color: #fcfcfc; }
diff --git a/public/themes/classic/images/home.png b/public/themes/classic/images/home.png
deleted file mode 100644
index fed62219f..000000000
Binary files a/public/themes/classic/images/home.png and /dev/null differ
diff --git a/public/themes/classic/images/wrench.png b/public/themes/classic/images/wrench.png
deleted file mode 100644
index 5c8213fef..000000000
Binary files a/public/themes/classic/images/wrench.png and /dev/null differ
diff --git a/public/themes/classic/stylesheets/application.css b/public/themes/classic/stylesheets/application.css
deleted file mode 100644
index 922773599..000000000
--- a/public/themes/classic/stylesheets/application.css
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Redmine - project management software
- * Copyright (C) 2006-2023 Jean-Philippe Lang
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-@import url(/application.css);
-
-body{ color:#303030; background:#e8eaec; }
-
-#top-menu { font-size: 80%; height: 2em; padding-top: 0.5em; background-color: #578bb8; }
-#top-menu a { font-weight: bold; }
-#header { background: #467aa7; height:5.8em; padding: 10px 0 0 0; }
-#header h1 { margin-left: 6px; }
-#quick-search { margin-right: 6px; }
-#main-menu { background-color: #578bb8; left: 0; border-top: 1px solid #fff; width: 100%; }
-#main-menu li { margin: 0; padding: 0; }
-#main-menu li a { background-color: #578bb8; border-right: 1px solid #fff; font-size: 90%; padding: 4px 8px 4px 8px; font-weight: bold; }
-#main-menu li a:hover { background-color: #80b0da; color: #ffffff; }
-#main-menu li a.selected, #main-menu li a.selected:hover { background-color: #80b0da; color: #ffffff; }
-#main-menu li a.new-object { background-color:#80b0da; }
-
-#main-menu .menu-children {
- border-right: 1px solid #80b0da;
- border-bottom: 1px solid #80b0da;
- border-left: 1px solid #80b0da;
-}
-#main-menu .menu-children li a { border-right: none; }
-#main-menu .menu-children li a:hover { background-color: #80b0da }
-
-#footer { background-color: #578bb8; border: 0; color: #fff;}
-#footer a { color: #fff; font-weight: bold; }
-
-#main { font:90% Verdana,Tahoma,Arial,sans-serif; background: #e8eaec; }
-#main a { font-weight: bold; color: #467aa7;}
-#main a:hover { color: #2a5a8a; text-decoration: underline; }
-#content { background: #fff; }
-
-h2, h3, h4, .wiki h1, .wiki h2, .wiki h3 { border-bottom: 0px; color:#606060; font-family: Trebuchet MS,Georgia,"Times New Roman",serif; }
-h2, .wiki h1 { letter-spacing:-1px; }
-h4 { border-bottom: dotted 1px #c0c0c0; }
-
-#top-menu a.home, #top-menu a.my-page, #top-menu a.projects, #top-menu a.administration, #top-menu a.help {
- background-position: 0% 40%;
- background-repeat: no-repeat;
- padding-left: 20px;
- padding-top: 2px;
- padding-bottom: 3px;
-}
-
-#top-menu a.home { background-image: url(/themes/classic/home.png); }
-#top-menu a.my-page { background-image: url(/user.png); }
-#top-menu a.projects { background-image: url(/projects.png); }
-#top-menu a.administration { background-image: url(/themes/classic/wrench.png); }
-#top-menu a.help { background-image: url(/help.png); }