Actualizado plugin Redmine Questions 1.0.0 light

This commit is contained in:
Manuel Cillero 2019-03-21 17:52:05 +01:00
parent 27e60f8ec1
commit 5d7889f1c9
140 changed files with 5342 additions and 1430 deletions

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="35" height="35" viewBox="0, 0, 35, 35">
<g id="answered">
<path d="M17.5,0 C27.165,0 35,7.835 35,17.5 C35,27.165 27.165,35 17.5,35 C7.835,35 0,27.165 0,17.5 C0,7.835 7.835,0 17.5,0 z M17.5,2 C8.94,2 2,8.94 2,17.5 C2,26.06 8.94,33 17.5,33 C26.06,33 33,26.06 33,17.5 C33,8.94 26.06,2 17.5,2 z" fill="#5DBA7D"/>
<path d="M10.135,15.26 L6.628,19.186 L14.979,26.648 L29.232,13.863 L25.775,9.894 L14.979,19.651 z" fill="#5EBA7D"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 703 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="35" height="35" viewBox="0, 0, 35, 35">
<g id="answered">
<path d="M-0.077,10.673 L-0.077,23.495 L13.026,35 L35.077,15.186 L35.077,3.042 L13.026,22.856 z" fill="#5EBA7D"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="35" height="35" viewBox="0, 0, 35, 35">
<defs>
<clipPath id="Clip_1">
<path d="M35,-1 L-1,-1 L-1,35 L35,35 z"/>
</clipPath>
</defs>
<g id="Layer_1">
<g clip-path="url(#Clip_1)" id="Layer_1">
<path d="M5.126,29.874 C-1.709,23.04 -1.709,11.96 5.126,5.126 C11.96,-1.709 23.04,-1.709 29.874,5.126 C36.709,11.96 36.709,23.04 29.874,29.874 C23.04,36.709 11.96,36.709 5.126,29.874" fill="#F2F2F2"/>
<path d="M10.033,13 L17.5,24.4 L24.967,13 z M10.033,13.2" fill="#AAAAAA"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 780 B

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 35 18" width="35pt" height="18pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.5.3 <dc:date>2016-07-07 08:57:24 +0000</dc:date></metadata><defs/><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><path d="M .21475331 .19262309 L 35 .19262309 L 17.607377 17.585246 Z" fill="#9a9a9a"/></g></g></svg>

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="35" height="35" viewBox="0, 0, 35, 35">
<defs>
<clipPath id="Clip_1">
<path d="M0,36 L36,36 L36,0 L0,0 z"/>
</clipPath>
</defs>
<g id="Layer_1">
<g clip-path="url(#Clip_1)" id="Layer_1">
<path d="M29.874,5.126 C36.709,11.96 36.709,23.04 29.874,29.874 C23.04,36.709 11.96,36.709 5.126,29.874 C-1.709,23.04 -1.709,11.96 5.126,5.126 C11.96,-1.709 23.04,-1.709 29.874,5.126" fill="#F2F2F2"/>
<path d="M24.967,22 L17.5,10.6 L10.033,22 z M24.967,21.8" fill="#AAAAAA"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 776 B

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 35 18" width="35pt" height="18pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.5.3 <dc:date>2016-07-07 08:55:07 +0000</dc:date></metadata><defs/><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><path d="M 34.785247 17.992623 L 71054274e-22 17.992623 L 17.392623 .6 Z" fill="#9a9a9a"/></g></g></svg>

After

Width:  |  Height:  |  Size: 684 B

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="140" height="105" viewBox="0, 0, 140, 105">
<g id="answered">
<path d="M17.5,0 C27.165,0 35,7.835 35,17.5 C35,27.165 27.165,35 17.5,35 C7.835,35 0,27.165 0,17.5 C0,7.835 7.835,0 17.5,0 z M17.5,2 C8.94,2 2,8.94 2,17.5 C2,26.06 8.94,33 17.5,33 C26.06,33 33,26.06 33,17.5 C33,8.94 26.06,2 17.5,2 z" fill="#5DBA7D"/>
<path d="M10.135,15.26 L6.628,19.186 L14.979,26.648 L29.232,13.863 L25.775,9.894 L14.979,19.651 z" fill="#5EBA7D"/>
<path d="M7.947,84.081 L3.454,89.11 L14.15,98.667 L32.405,82.292 L27.978,77.208 L14.15,89.705 z" fill="#5EBA7D"/>
<path d="M52.5,79.594 C57.108,79.594 60.844,83.329 60.844,87.937 C60.844,92.546 57.108,96.281 52.5,96.281 C47.892,96.281 44.156,92.546 44.156,87.937 C44.156,83.329 47.892,79.594 52.5,79.594 z M52.5,81.094 C48.72,81.094 45.656,84.158 45.656,87.937 C45.656,91.717 48.72,94.781 52.5,94.781 C56.28,94.781 59.344,91.717 59.344,87.937 C59.344,84.158 56.28,81.094 52.5,81.094 z" fill="#5DBA7D"/>
<path d="M48.989,86.869 L47.316,88.741 L51.298,92.299 L58.094,86.204 L56.446,84.311 L51.298,88.963 z" fill="#5EBA7D"/>
<g>
<path d="M99.874,5.126 C106.709,11.96 106.709,23.04 99.874,29.874 C93.04,36.709 81.96,36.709 75.126,29.874 C68.291,23.04 68.291,11.96 75.126,5.126 C81.96,-1.709 93.04,-1.709 99.874,5.126" fill="#EFEFEF"/>
<path d="M94.967,21.625 L87.5,10.225 L80.033,21.625 z M94.967,21.425" fill="#9A9A9A"/>
</g>
<path d="M99.874,40.126 C106.709,46.96 106.709,58.04 99.874,64.874 C93.04,71.709 81.96,71.709 75.126,64.874 C68.291,58.04 68.291,46.96 75.126,40.126 C81.96,33.291 93.04,33.291 99.874,40.126" fill="#D6F5E6"/>
<path d="M94.967,56.625 L87.5,45.225 L80.033,56.625 z M94.967,56.425" fill="#9A9A9A"/>
<g>
<path d="M40.126,29.874 C33.291,23.04 33.291,11.96 40.126,5.126 C46.96,-1.709 58.04,-1.709 64.874,5.126 C71.709,11.96 71.709,23.04 64.874,29.874 C58.04,36.709 46.96,36.709 40.126,29.874" fill="#EFEFEF"/>
<path d="M45.033,13.375 L52.5,24.775 L59.967,13.375 z M45.033,13.575" fill="#9A9A9A"/>
</g>
<path d="M40.126,64.874 C33.291,58.04 33.291,46.96 40.126,40.126 C46.96,33.291 58.04,33.291 64.874,40.126 C71.709,46.96 71.709,58.04 64.874,64.874 C58.04,71.709 46.96,71.709 40.126,64.874" fill="#F9DEDE"/>
<path d="M45.033,48.375 L52.5,59.775 L59.967,48.375 z M45.033,48.575" fill="#9A9A9A"/>
<path d="M4.75,45.839 L4.75,56.07 L14.255,65.25 L30.25,49.44 L30.25,39.75 L14.255,55.56 z" fill="#5EBA7D"/>
<path d="M108,60 L137,60 L122.5,45 z" fill="#AAAAAA"/>
<path d="M137,10.771 L108,10.771 L122.5,25.771 z" fill="#AAAAAA"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,235 @@
/*
* Very simple jQuery Color Picker
* https://github.com/tkrotoff/jquery-simplecolorpicker
*
* Copyright (C) 2012-2013 Tanguy Krotoff <tkrotoff@gmail.com>
*
* Licensed under the MIT license
*/
(function($) {
'use strict';
/**
* Constructor.
*/
var SimpleColorPicker = function(select, options) {
this.init('simplecolorpicker', select, options);
};
/**
* SimpleColorPicker class.
*/
SimpleColorPicker.prototype = {
constructor: SimpleColorPicker,
init: function(type, select, options) {
var self = this;
self.type = type;
self.$select = $(select);
self.$select.hide();
self.options = $.extend({}, $.fn.simplecolorpicker.defaults, options);
self.$colorList = null;
if (self.options.picker === true) {
var selectText = self.$select.find('> option:selected').text();
self.$icon = $('<span class="simplecolorpicker button"'
+ ' title="' + selectText + '"'
+ ' style="background-color: ' + self.$select.val() + ';"'
+ ' role="button" tabindex="0">'
+ '</span>').insertAfter(self.$select);
self.$icon.on('click.' + self.type, $.proxy(self.showPicker, self));
self.$picker = $('<span class="simplecolorpicker picker ' + self.options.theme + '"></span>').appendTo(document.body);
self.$colorList = self.$picker;
// Hide picker when clicking outside
$(document).on('mousedown.' + self.type, $.proxy(self.hidePicker, self));
self.$picker.on('mousedown.' + self.type, $.proxy(self.mousedown, self));
} else {
self.$inline = $('<span class="simplecolorpicker inline ' + self.options.theme + '"></span>').insertAfter(self.$select);
self.$colorList = self.$inline;
}
// Build the list of colors
// <span class="color selected" title="Green" style="background-color: #7bd148;" role="button"></span>
self.$select.find('> option').each(function() {
var $option = $(this);
var color = $option.val();
var isSelected = $option.is(':selected');
var isDisabled = $option.is(':disabled');
var selected = '';
if (isSelected === true) {
selected = ' data-selected';
}
var disabled = '';
if (isDisabled === true) {
disabled = ' data-disabled';
}
var title = '';
if (isDisabled === false) {
title = ' title="' + $option.text() + '"';
}
var role = '';
if (isDisabled === false) {
role = ' role="button" tabindex="0"';
}
var $colorSpan = $('<span class="color"'
+ title
+ ' style="background-color: ' + color + ';"'
+ ' data-color="' + color + '"'
+ selected
+ disabled
+ role + '>'
+ '</span>');
self.$colorList.append($colorSpan);
$colorSpan.on('click.' + self.type, $.proxy(self.colorSpanClicked, self));
var $next = $option.next();
if ($next.is('optgroup') === true) {
// Vertical break, like hr
self.$colorList.append('<span class="vr"></span>');
}
});
},
/**
* Changes the selected color.
*
* @param color the hexadecimal color to select, ex: '#fbd75b'
*/
selectColor: function(color) {
var self = this;
var $colorSpan = self.$colorList.find('> span.color').filter(function() {
return $(this).data('color').toLowerCase() === color.toLowerCase();
});
if ($colorSpan.length > 0) {
self.selectColorSpan($colorSpan);
} else {
console.error("The given color '" + color + "' could not be found");
}
},
showPicker: function() {
var pos = this.$icon.offset();
this.$picker.css({
// Remove some pixels to align the picker icon with the icons inside the dropdown
left: pos.left - 1,
top: pos.top - 4//+ this.$icon.outerHeight()
});
this.$picker.show(this.options.pickerDelay);
},
hidePicker: function() {
this.$picker.hide(this.options.pickerDelay);
},
/**
* Selects the given span inside $colorList.
*
* The given span becomes the selected one.
* It also changes the HTML select value, this will emit the 'change' event.
*/
selectColorSpan: function($colorSpan) {
var color = $colorSpan.data('color');
var title = $colorSpan.prop('title');
// Mark this span as the selected one
$colorSpan.siblings().removeAttr('data-selected');
$colorSpan.attr('data-selected', '');
if (this.options.picker === true) {
this.$icon.css('background-color', color);
this.$icon.prop('title', title);
this.hidePicker();
}
// Change HTML select value
this.$select.val(color);
},
/**
* The user clicked on a color inside $colorList.
*/
colorSpanClicked: function(e) {
// When a color is clicked, make it the new selected one (unless disabled)
if ($(e.target).is('[data-disabled]') === false) {
this.selectColorSpan($(e.target));
this.$select.trigger('change');
}
},
/**
* Prevents the mousedown event from "eating" the click event.
*/
mousedown: function(e) {
e.stopPropagation();
e.preventDefault();
},
destroy: function() {
if (this.options.picker === true) {
this.$icon.off('.' + this.type);
this.$icon.remove();
$(document).off('.' + this.type);
}
this.$colorList.off('.' + this.type);
this.$colorList.remove();
this.$select.removeData(this.type);
this.$select.show();
}
};
/**
* Plugin definition.
* How to use: $('#id').simplecolorpicker()
*/
$.fn.simplecolorpicker = function(option) {
var args = $.makeArray(arguments);
args.shift();
// For HTML element passed to the plugin
return this.each(function() {
var $this = $(this),
data = $this.data('simplecolorpicker'),
options = typeof option === 'object' && option;
if (data === undefined) {
$this.data('simplecolorpicker', (data = new SimpleColorPicker(this, options)));
}
if (typeof option === 'string') {
data[option].apply(data, args);
}
});
};
/**
* Default options.
*/
$.fn.simplecolorpicker.defaults = {
// No theme by default
theme: '',
// Show the picker or make it inline
picker: false,
// Animation delay in milliseconds
pickerDelay: 0
};
})(jQuery);

View file

@ -1,392 +0,0 @@
/*
* jQuery UI Tag-it!
*
* @version v2.0 (06/2011)
*
* Copyright 2011, Levy Carneiro Jr.
* Released under the MIT license.
* http://aehlke.github.com/tag-it/LICENSE
*
* Homepage:
* http://aehlke.github.com/tag-it/
*
* Authors:
* Levy Carneiro Jr.
* Martin Rehfeld
* Tobias Schmidt
* Skylar Challand
* Alex Ehlke
*
* Maintainer:
* Alex Ehlke - Twitter: @aehlke
*
* Dependencies:
* jQuery v1.4+
* jQuery UI v1.8+
*/
(function($) {
$.widget('ui.tagit', {
options: {
itemName : 'item',
fieldName : 'tags',
availableTags : [],
tagSource : null,
removeConfirmation: false,
caseSensitive : true,
placeholderText : null,
// When enabled, quotes are not neccesary
// for inputting multi-word tags.
allowSpaces: false,
// Whether to animate tag removals or not.
animate: true,
// The below options are for using a single field instead of several
// for our form values.
//
// When enabled, will use a single hidden field for the form,
// rather than one per tag. It will delimit tags in the field
// with singleFieldDelimiter.
//
// The easiest way to use singleField is to just instantiate tag-it
// on an INPUT element, in which case singleField is automatically
// set to true, and singleFieldNode is set to that element. This
// way, you don't need to fiddle with these options.
singleField: false,
singleFieldDelimiter: ',',
// Set this to an input DOM node to use an existing form field.
// Any text in it will be erased on init. But it will be
// populated with the text of tags as they are created,
// delimited by singleFieldDelimiter.
//
// If this is not set, we create an input node for it,
// with the name given in settings.fieldName,
// ignoring settings.itemName.
singleFieldNode: null,
// Optionally set a tabindex attribute on the input that gets
// created for tag-it.
tabIndex: null,
// Event callbacks.
onTagAdded : null,
onTagRemoved: null,
onTagClicked: null
},
_create: function() {
// for handling static scoping inside callbacks
var that = this;
// There are 2 kinds of DOM nodes this widget can be instantiated on:
// 1. UL, OL, or some element containing either of these.
// 2. INPUT, in which case 'singleField' is overridden to true,
// a UL is created and the INPUT is hidden.
if (this.element.is('input')) {
this.tagList = $('<ul></ul>').insertAfter(this.element);
this.options.singleField = true;
this.options.singleFieldNode = this.element;
this.element.css('display', 'none');
} else {
this.tagList = this.element.find('ul, ol').andSelf().last();
}
this._tagInput = $('<input type="text" />').addClass('ui-widget-content');
if (this.options.tabIndex) {
this._tagInput.attr('tabindex', this.options.tabIndex);
}
if (this.options.placeholderText) {
this._tagInput.attr('placeholder', this.options.placeholderText);
}
this.options.tagSource = this.options.tagSource || function(search, showChoices) {
var filter = search.term.toLowerCase();
var choices = $.grep(this.options.availableTags, function(element) {
// Only match autocomplete options that begin with the search term.
// (Case insensitive.)
return (element.toLowerCase().indexOf(filter) === 0);
});
showChoices(this._subtractArray(choices, this.assignedTags()));
};
// Bind tagSource callback functions to this context.
if ($.isFunction(this.options.tagSource)) {
this.options.tagSource = $.proxy(this.options.tagSource, this);
}
this.tagList
.addClass('tagit')
.addClass('ui-widget ui-widget-content ui-corner-all')
// Create the input field.
.append($('<li class="tagit-new"></li>').append(this._tagInput))
.click(function(e) {
var target = $(e.target);
if (target.hasClass('tagit-label')) {
that._trigger('onTagClicked', e, target.closest('.tagit-choice'));
} else {
// Sets the focus() to the input field, if the user
// clicks anywhere inside the UL. This is needed
// because the input field needs to be of a small size.
that._tagInput.focus();
}
});
// Add existing tags from the list, if any.
this.tagList.children('li').each(function() {
if (!$(this).hasClass('tagit-new')) {
that.createTag($(this).html(), $(this).attr('class'));
$(this).remove();
}
});
// Single field support.
if (this.options.singleField) {
if (this.options.singleFieldNode) {
// Add existing tags from the input field.
var node = $(this.options.singleFieldNode);
var tags = node.val().split(this.options.singleFieldDelimiter);
node.val('');
$.each(tags, function(index, tag) {
that.createTag(tag);
});
} else {
// Create our single field input after our list.
this.options.singleFieldNode = this.tagList.after('<input type="hidden" style="display:none;" value="" name="' + this.options.fieldName + '" />');
}
}
// Events.
this._tagInput
.keydown(function(event) {
// Backspace is not detected within a keypress, so it must use keydown.
if (event.which == $.ui.keyCode.BACKSPACE && that._tagInput.val() === '') {
var tag = that._lastTag();
if (!that.options.removeConfirmation || tag.hasClass('remove')) {
// When backspace is pressed, the last tag is deleted.
that.removeTag(tag);
} else if (that.options.removeConfirmation) {
tag.addClass('remove ui-state-highlight');
}
} else if (that.options.removeConfirmation) {
that._lastTag().removeClass('remove ui-state-highlight');
}
// Comma/Space/Enter are all valid delimiters for new tags,
// except when there is an open quote or if setting allowSpaces = true.
// Tab will also create a tag, unless the tag input is empty, in which case it isn't caught.
if (
// event.which == $.ui.keyCode.COMMA ||
event.which == $.ui.keyCode.ENTER ||
(
event.which == $.ui.keyCode.TAB &&
that._tagInput.val() !== ''
) ||
(
event.which == $.ui.keyCode.SPACE &&
that.options.allowSpaces !== true &&
(
$.trim(that._tagInput.val()).replace( /^s*/, '' ).charAt(0) != '"' ||
(
$.trim(that._tagInput.val()).charAt(0) == '"' &&
$.trim(that._tagInput.val()).charAt($.trim(that._tagInput.val()).length - 1) == '"' &&
$.trim(that._tagInput.val()).length - 1 !== 0
)
)
)
) {
event.preventDefault();
that.createTag(that._cleanedInput());
// The autocomplete doesn't close automatically when TAB is pressed.
// So let's ensure that it closes.
that._tagInput.autocomplete('close');
}
}).blur(function(e){
// Create a tag when the element loses focus (unless it's empty).
that.createTag(that._cleanedInput());
});
// Autocomplete.
if (this.options.availableTags || this.options.tagSource) {
this._tagInput.autocomplete({
source: this.options.tagSource,
select: function(event, ui) {
// Delete the last tag if we autocomplete something despite the input being empty
// This happens because the input's blur event causes the tag to be created when
// the user clicks an autocomplete item.
// The only artifact of this is that while the user holds down the mouse button
// on the selected autocomplete item, a tag is shown with the pre-autocompleted text,
// and is changed to the autocompleted text upon mouseup.
if (that._tagInput.val() === '') {
that.removeTag(that._lastTag(), false);
}
that.createTag(ui.item.value);
// Preventing the tag input to be updated with the chosen value.
return false;
}
});
}
},
_cleanedInput: function() {
// Returns the contents of the tag input, cleaned and ready to be passed to createTag
return $.trim(this._tagInput.val().replace(/^"(.*)"$/, '$1'));
},
_lastTag: function() {
return this.tagList.children('.tagit-choice:last');
},
assignedTags: function() {
// Returns an array of tag string values
var that = this;
var tags = [];
if (this.options.singleField) {
tags = $(this.options.singleFieldNode).val().split(this.options.singleFieldDelimiter);
if (tags[0] === '') {
tags = [];
}
} else {
this.tagList.children('.tagit-choice').each(function() {
tags.push(that.tagLabel(this));
});
}
return tags;
},
_updateSingleTagsField: function(tags) {
// Takes a list of tag string values, updates this.options.singleFieldNode.val to the tags delimited by this.options.singleFieldDelimiter
$(this.options.singleFieldNode).val(tags.join(this.options.singleFieldDelimiter));
},
_subtractArray: function(a1, a2) {
var result = [];
for (var i = 0; i < a1.length; i++) {
if ($.inArray(a1[i], a2) == -1) {
result.push(a1[i]);
}
}
return result;
},
tagLabel: function(tag) {
// Returns the tag's string label.
if (this.options.singleField) {
return $(tag).children('.tagit-label').text();
} else {
return $(tag).children('input').val();
}
},
_isNew: function(value) {
var that = this;
var isNew = true;
this.tagList.children('.tagit-choice').each(function(i) {
if (that._formatStr(value) == that._formatStr(that.tagLabel(this))) {
isNew = false;
return false;
}
});
return isNew;
},
_formatStr: function(str) {
if (this.options.caseSensitive) {
return str;
}
return $.trim(str.toLowerCase());
},
createTag: function(value, additionalClass) {
var that = this;
// Automatically trims the value of leading and trailing whitespace.
value = $.trim(value);
if (!this._isNew(value) || value === '') {
return false;
}
var label = $(this.options.onTagClicked ? '<a class="tagit-label"></a>' : '<span class="tagit-label"></span>').text(value);
// Create tag.
var tag = $('<li></li>')
.addClass('tagit-choice ui-widget-content ui-state-default ui-corner-all')
.addClass(additionalClass)
.append(label);
// Button for removing the tag.
var removeTagIcon = $('<span></span>')
.addClass('ui-icon ui-icon-close');
var removeTag = $('<a><span class="text-icon">\xd7</span></a>') // \xd7 is an X
.addClass('tagit-close')
.append(removeTagIcon)
.click(function(e) {
// Removes a tag when the little 'x' is clicked.
that.removeTag(tag);
});
tag.append(removeTag);
// Unless options.singleField is set, each tag has a hidden input field inline.
if (this.options.singleField) {
var tags = this.assignedTags();
tags.push(value);
this._updateSingleTagsField(tags);
} else {
var escapedValue = label.html();
tag.append('<input type="hidden" style="display:none;" value="' + escapedValue + '" name="' + this.options.itemName + '[' + this.options.fieldName + '][]" />');
}
this._trigger('onTagAdded', null, tag);
// Cleaning the input.
this._tagInput.val('');
// insert tag
this._tagInput.parent().before(tag);
},
removeTag: function(tag, animate) {
animate = animate || this.options.animate;
tag = $(tag);
this._trigger('onTagRemoved', null, tag);
if (this.options.singleField) {
var tags = this.assignedTags();
var removedTagLabel = this.tagLabel(tag);
tags = $.grep(tags, function(el){
return el != removedTagLabel;
});
this._updateSingleTagsField(tags);
}
// Animate the removal.
if (animate) {
tag.fadeOut('fast').hide('blind', {direction: 'horizontal'}, 'fast', function(){
tag.remove();
}).dequeue();
} else {
tag.remove();
}
},
removeAll: function() {
// Removes all tags.
var that = this;
this.tagList.children('.tagit-choice').each(function(index, tag) {
that.removeTag(tag, false);
});
}
});
})(jQuery);

View file

@ -0,0 +1,88 @@
/*
* Very simple jQuery Color Picker
* https://github.com/tkrotoff/jquery-simplecolorpicker
*
* Copyright (C) 2012-2013 Tanguy Krotoff <tkrotoff@gmail.com>
*
* Licensed under the MIT license
*/
/**
* Inspired by Bootstrap Twitter.
* See https://github.com/twbs/bootstrap/blob/master/less/navbar.less
* See https://github.com/twbs/bootstrap/blob/master/less/dropdowns.less
*/
.simplecolorpicker.picker {
position: absolute;
top: 100%;
left: 0;
z-index: 1051; /* Above Bootstrap modal (@zindex-modal = 1050) */
display: none;
float: left;
min-width: 160px;
max-width: 283px; /* @popover-max-width = 276px + 7 */
padding: 5px 0 0 5px;
margin: 2px 0 0;
list-style: none;
background-color: #fff; /* @dropdown-bg */
border: 1px solid #ccc;
}
.simplecolorpicker.inline {
display: inline-block;
}
.simplecolorpicker span {
margin: 0 5px 5px 0;
}
.simplecolorpicker.button,
.simplecolorpicker span.color {
display: inline-block;
outline: none;
cursor: pointer;
border: 1px solid transparent;
}
.simplecolorpicker.button {
border: 1px solid #DDD;
}
.simplecolorpicker.button:after,
.simplecolorpicker span.color:after {
content: '\00a0\00a0\00a0\00a0'; /* Spaces */
}
.simplecolorpicker span.color[data-disabled]:hover {
cursor: not-allowed;
border: 1px solid transparent;
}
.simplecolorpicker span.color:hover,
.simplecolorpicker span.color[data-selected],
.simplecolorpicker span.color[data-selected]:hover {
border: 1px solid #222; /* @gray-dark */
}
.simplecolorpicker span.color[data-selected]:after {
color: #fff;
}
/* Vertical separator, replaces optgroup. */
.simplecolorpicker span.vr {
border-left: 1px solid #222; /* @gray-dark */
}
.simplecolorpicker span.color[data-selected]:after {
/*font-family: 'FontAwesome';*/
-webkit-font-smoothing: antialiased;
content: '\2714'; /* Ok/check mark */
margin-right: 2px;
margin-left: 2px;
}

View file

@ -1,54 +0,0 @@
ul.tagit {
padding: 1px 5px;
overflow: auto;
margin-left: inherit; /* usually we don't want the regular ul margins. */
margin-right: inherit;
}
ul.tagit li {
display: block;
float: left;
margin: 2px 5px 2px 0;
}
ul.tagit li.tagit-choice {
padding: .2em 18px .2em .5em;
position: relative;
line-height: inherit;
}
ul.tagit li.tagit-new {
padding: .25em 4px .25em 0;
}
ul.tagit li.tagit-choice a.tagit-label {
cursor: pointer;
text-decoration: none;
}
ul.tagit li.tagit-choice .tagit-close {
cursor: pointer;
position: absolute;
right: .1em;
top: 50%;
margin-top: -8px;
}
/* used for some custom themes that don't need image icons */
ul.tagit li.tagit-choice .tagit-close .text-icon {
display: none;
}
ul.tagit li.tagit-choice input {
display: block;
float: left;
margin: 2px 5px 2px 0;
}
ul.tagit input[type="text"] {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border: none;
margin: 0;
padding: 0;
width: inherit;
background-color: inherit;
outline: none;
}

View file

@ -1,239 +0,0 @@
#forum_list div.list-item {
margin-bottom: 10px;
}
#forum_list div.list-item .last-author {
font-size: 80%;
color: gray;
}
#forum_list div.list-item .last-author a {
color: gray;
}
#forum_list > ul > li {
float: left;
width: 44%;
padding: 0;
margin: 15px 3% 0 0;
}
#forum_list div.project-forums {
border-bottom: 1px solid #CCC;
padding-top: 20px;
clear: left;
}
#forum_list > ul {
list-style: none;
padding: 0px;
margin-top: 0px;
}
#forum_list > ul > li.even {
margin-right: 0;
width: 46%;
}
#forum_list > ul > li.odd {
clear: left;
}
#forum_list > ul > li.odd, #forum_list > ul > li.even {
background-color: inherit;
}
.topic {
padding: 10px 0 20px;
}
div.topic p {
margin: 5px 0;
}
div.topic h3.subject {
margin: 0px;
}
div.topic ul.meta {
margin: 0px;
padding: 0px;
}
div.topic ul.meta li {
display: block;
float: left;
font-size: 11px;
color: #999;
margin-right: 8px;
list-style: none;
}
#topics_list div.title-bar h4 {
padding: 15px 0;
border-bottom: 1px dotted #bbb;
}
input.questions-search {
background: url(/images/magnifier.png) no-repeat 6px 50%;
border: 1px solid #D7D7D7;
background-color: white;
padding-left: 30px;
border-radius: 3px;
height: 1.5em;
width: 94%;
font-size: 16px;
}
input.questions-search.ajax-loading {
background-image: url(/images/loading.gif);
}
div.message.reply {
margin-bottom: 20px;
}
div.message.reply div.avatar {
position: absolute;
}
div.message.reply div.reply-details.use-avatar {
padding-left: 50px;
}
div.message.reply .author{
margin-bottom: 5px;
}
div.message.reply .wiki > p:first-child {
margin-top: 0px;
}
div.message.reply .contextual .icon.vote {
position: relative;
bottom: 5px;
}
div.message.details img.gravatar {
float: left;
margin-right: 5px;
}
div.message.details p.author {
margin-top: 15px;
}
div.message.details .wiki {
margin-top: 15px;
padding-top: 10px;
border-top: 1px dotted #BBB;
}
/* Question meta */
#sidebar ul.question-meta, #sidebar ul.related-topics {
list-style: none;
padding: 0px;
}
#sidebar ul.question-meta li {
margin-bottom: 10px;
padding-left: 20px;
padding-top: 2px;
padding-bottom: 3px;
}
#sidebar ul.related-topics li {
margin-bottom: 5px;
}
/* Tags cloud */
#sidebar ul.questions-tags {
list-style: none;
padding: 0px;
}
#sidebar ul.questions-tags li {
margin-bottom: 5px;
}
#sidebar ul.questions-tags span.count {
color: gray;
}
/**********************************************************************/
/* TAGS
/**********************************************************************/
.message-tags-edit ul.tagit li.tagit-choice:hover, ul.tagit li.tagit-choice.remove {
background-color: #E5E5E5;
text-decoration: none;
color: black;
}
.message-tags-edit ul.tagit {
border: 1px solid #D7D7D7;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
-khtml-border-radius: 0px;
border-radius: 0px;
background: white;
padding: 0px;
margin-top: 0px;
}
.message-tags-edit ul.tagit li.tagit-choice {
font-weight: normal;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-radius: 0px;
font-size: 11px;
color: inherit;
padding-top: 0px;
padding-bottom: 0px;
background-color: #F7F7F7;
margin: 1px;
}
.message-tags-edit ul.tagit li.tagit-choice {
font-weight: normal;
font-size: 11px;
color: inherit;
}
.message-tags-edit ul.tagit li.tagit-choice a.tagit-close {
text-decoration: none;
}
.message-tags-edit ul.tagit li.tagit-choice .tagit-close .text-icon {
display: inline;
line-height: 16px;
}
.message-tags-edit ul.tagit li.tagit-choice .ui-icon {
display: none;
}
.message-tags-edit ul.tagit li.tagit-new {
padding: 0px;
}
.message-tags-edit ul.tagit li.tagit-new input {
font-size: 11px;
background: white;
margin-bottom: 2px;
margin-left: 2px;
width: 200px;
}
/**********************************************************************/
/* ICONS
/**********************************************************************/
.icon-vote { background-image: url(../images/thumb_up.png); }
.icon-unvote { background-image: url(../images/unvote.png); }
.icon-view { background-image: url(../images/eye.png); }
.icon-calendar { background-image: url(/images/calendar.png); }
.icon-tag { background-image: url(../images/tag_blue.png); }

View file

@ -0,0 +1,402 @@
/**********************************************************************/
/* SECTION list
/**********************************************************************/
.section-list {margin-top: 10px}
.section-list .section-tile {
text-align: center;
display: inline-block;
width: 29%;
border: 1px solid #e0e0e0;
margin: 0 .8% 20px;
padding: 1.5em 1em;
cursor: pointer;
-webkit-transition: background .15s;
-moz-transition: background .15s;
-o-transition: background .15s;
transition: background .15s;
vertical-align: top;
}
.section-list .section-tile:hover {
text-decoration: none;
background: #f8f8f8
}
.section-list .section-tile .description {
color: #999;
}
/**********************************************************************/
/* QUESTION index
/**********************************************************************/
.questions h2.section-title {
margin-bottom: 0px;
}
.questions .filters {
margin-top: 10px;
}
.questions-filters {
float: right;
}
.questions-filters > ul > li {
list-style-type: none;
float: left;
margin-left: 5px;
}
.questions-filters > ul > li:not(:last-child):after {
content: " |"
}
.questions-filters > ul > li a.selected {
color: #888;
}
#forum_list div.list-item {
margin-bottom: 10px;
}
#forum_list div.list-item .last-author {
font-size: 80%;
color: gray;
}
#forum_list div.list-item .last-author a {
color: gray;
}
#forum_list > ul > li {
float: left;
width: 44%;
padding: 0;
margin: 15px 3% 0 0;
}
#forum_list div.project-forums {
border-bottom: 1px solid #CCC;
padding-top: 20px;
clear: left;
}
#forum_list > ul {
list-style: none;
padding: 0px;
margin-top: 0px;
}
#forum_list > ul > li.even {
margin-right: 0;
width: 46%;
}
#forum_list > ul > li.odd {
clear: left;
}
#forum_list > ul > li.odd, #forum_list > ul > li.even {
background-color: inherit;
}
.topic {
padding: 20px 0 20px;
}
.comment_container .topic{
padding: 5px 0 5px;
}
div.topic p {
margin: 5px 0;
}
div.topic h3.subject {
margin: 0px;
}
div.topic ul.meta {
margin: 0px;
padding: 0px;
}
div.topic ul.meta li {
display: block;
float: left;
font-size: 11px;
color: #999;
margin-right: 8px;
list-style: none;
}
div.topic ul.meta li a {
color: #999;
}
#topics_container.votable .topic-vote {float: left; width: 60px; text-align: center;}
#topics_container.votable .topic-content {padding-left: 60px;}
#topics_container.votable .topic-vote .vote-score {display: block; font-size: 24px;}
#topics_container.votable .topic-vote .vote-score {display: block; font-size: 24px;}
#topics_container.votable .topic-vote label {color: #999; line-height: 1; font-size: 12px; margin-bottom: 3px; display: block;}
#topics_container.votable .topic-vote .status-answered {
height: 30px;
width: 35px;
background-position: -35px -75px;
margin-left: auto;
margin-right: auto;
}
#topics_list div.title-bar h4 {
padding: 15px 0;
border-bottom: 1px dotted #bbb;
}
input.questions-search {
background: url(/images/magnifier.png) no-repeat 6px 50%;
border: 1px solid #D7D7D7;
background-color: white;
padding-left: 30px !important;
border-radius: 3px;
height: 1.5em;
width: 94%;
font-size: 16px;
}
input.questions-search.ajax-loading {
background-image: url(/images/loading.gif);
}
/**********************************************************************/
/* QUESTION show
/**********************************************************************/
h1.question-title {
font-weight: normal;
}
div.question.answer {
margin-bottom: 20px;
padding-top: 10px;
border-top: 1px solid #ddd;
}
.question a[disabled] {
color: #aaa;
pointer-events: none;
}
div.question img.gravatar {
float: left;
margin-right: 5px;
}
div.question p.author {
margin-top: 0px;
}
.question-status-tag {
font-family: Verdana, sans-serif;
background-color: #759FCF;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 3px;
padding: 2px 4px;
font-size: 10px;
display: inline-block;
vertical-align: middle;
color: white;
font-weight: normal;
}
/* Question vote*/
div.question {display: table; width: 100%;}
div.question.votable .vote {display: table-cell; padding: 0px 12px;}
div.question.votable .question-container {display: table-cell;vertical-align: top;}
div.question.votable .question-container .contextual {margin-top: 0px;}
.question .vote a.disabled {pointer-events: none;opacity: 0.5}
.question .vote {font-size: 24px; width: 35px;}
.question .vote .vote-up,
.question .vote .vote-down,
.question .vote .vote-count,
.question .vote .accepted {
display: block;
margin: 0 auto;
width: 35px;
height: 35px;
margin-bottom: 2px;
text-align: center;
text-decoration: none;
cursor: pointer;
}
.question .vote .vote-up,
.question .vote .vote-down,
.question .vote .accepted,
#topics_container.votable .topic-vote .status-answered {
background-image: url(../images/voting.svg);
background-size: initial;
background-repeat: no-repeat;
overflow: hidden;
}
.question .vote .accepted {cursor: default; background-position: 0px -69px;}
.question .vote .vote-up {background-position: -70px 0px;}
.question .vote .vote-down {background-position: -35px 0px;}
.question .vote .vote-count {height: 32px;}
/*.question .vote .vote-up:hover {background-position: -70px -35px;}
.question .vote .vote-down:hover {background-position: -35px -35px;}
*/
.question div.attachments {
margin-bottom: 12px;
}
/* Question meta */
#sidebar ul.question-meta, #sidebar ul.related-topics {
list-style: none;
padding: 0px;
}
#sidebar ul.question-meta li {
margin-bottom: 10px;
padding-left: 20px;
padding-top: 2px;
padding-bottom: 3px;
}
#sidebar ul.related-topics li {
margin-bottom: 5px;
}
/* Tags cloud */
#sidebar ul.questions-tags {
list-style: none;
padding: 0px;
}
#sidebar ul.questions-tags li {
margin-bottom: 5px;
}
#sidebar ul.questions-tags span.count {
color: gray;
}
/**********************************************************************/
/* SOLUTION show
/**********************************************************************/
.question.solution > h2 {
margin-bottom: 0px;
padding-bottom: 10px;
border-bottom: 1px solid #ddd;
}
.question.solution .liking {
padding: 10px 0px;
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 10px 0px
}
.question.solution .liking > a {
padding: 0 5px;
}
.question.solution .liking .author {
float: right;
}
/**********************************************************************/
/* COMMENTS
/**********************************************************************/
.comments_container {
background-color: #f5f5f5;
font-size: 0.9em;
margin: 10px 0px 0px 10px;
}
.question-comments .comment .contextual {
display: none;
}
.question-comments .comment:hover .contextual {
display: inline-block;
opacity: 0.4;
}
.question-comments .comment .contextual:hover {
opacity: 1;
}
.question-comments .comment {
padding: 10px;
border-bottom: 1px dashed #ccc;
}
.question-comments .comment:last-child {
border-bottom: 0px;
}
.question-comments .comment .author {
margin-bottom: 3px;
}
.question-comments .comment .wiki-content {
color: #707070;
display: inline-block;
}
.comments_container .comment .wiki-content p {
margin-bottom: 0px;
}
.question-comments .comment .wiki-content p:first-child {
margin-top: 0px;
}
.add-comment-link {
font-size: 0.9em;
display: block;
}
.add_comments {padding: 10px 10px 10px;}
.add_comments:not(:first-child) {border-top: 1px dashed #ccc;}
.add_comments textarea {
width: 98%;
}
/* Answers*/
#answers {
padding-top: 10px;
}
.accepted_answer{
float: right;
}
/**********************************************************************/
/* ICONS
/**********************************************************************/
.icon-vote { background-image: url(../images/thumb_up.png); }
.icon-unvote { background-image: url(../images/unvote.png); }
.icon-downvote { background-image: url(../images/thumb_down.png); }
.icon-view { background-image: url(../images/eye.png); }
.icon-calendar { background-image: url(/images/calendar.png); }
.icon-tag { background-image: url(../images/tag_blue.png); }
.icon-question { background-image: url(../../../images/help.png); }
.icon-solution { background-image: url(../images/book_open.png); }