You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/03/22 23:54:31 UTC
[04/21] git commit: [#4299] ticket:281 Added simple combobox widget
[#4299] ticket:281 Added simple combobox widget
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/70af6ba4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/70af6ba4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/70af6ba4
Branch: refs/heads/master
Commit: 70af6ba4096326d7618f7957f5c6cb33ae2904bf
Parents: 6fb7292
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Feb 28 16:02:12 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Fri Mar 22 21:55:15 2013 +0000
----------------------------------------------------------------------
Allura/allura/lib/widgets/form_fields.py | 16 ++
.../lib/widgets/resources/js/project_user_combo.js | 109 +++++++++++++++
.../templates/widgets/project_user_combo.html | 5 +
.../forgetracker/templates/tracker/ticket.html | 1 +
ForgeTracker/forgetracker/tracker_main.py | 1 +
5 files changed, 132 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70af6ba4/Allura/allura/lib/widgets/form_fields.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/form_fields.py b/Allura/allura/lib/widgets/form_fields.py
index 24330c7..32ae7f6 100644
--- a/Allura/allura/lib/widgets/form_fields.py
+++ b/Allura/allura/lib/widgets/form_fields.py
@@ -93,6 +93,22 @@ class ProjectUserSelect(ew.InputField):
minLength: 2
});''' % c.project.url())
+
+class ProjectUserCombo(ew.SingleSelectField):
+ template = 'jinja:allura:templates/widgets/project_user_combo.html'
+
+ def options(self):
+ users = []
+ for i in range(10):
+ users.append(ew.Option(py_value=i, label='User %s' % i))
+ return users
+
+ def resources(self):
+ for r in super(ProjectUserCombo, self).resources():
+ yield r
+ yield ew.JSLink('js/project_user_combo.js')
+
+
class NeighborhoodProjectSelect(ew.InputField):
template='jinja:allura:templates/widgets/neighborhood_project_select.html'
defaults=dict(
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70af6ba4/Allura/allura/lib/widgets/resources/js/project_user_combo.js
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/resources/js/project_user_combo.js b/Allura/allura/lib/widgets/resources/js/project_user_combo.js
new file mode 100644
index 0000000..46b84c6
--- /dev/null
+++ b/Allura/allura/lib/widgets/resources/js/project_user_combo.js
@@ -0,0 +1,109 @@
+(function($) {
+ $.widget('ui.combobox', {
+ _create: function() {
+ var input,
+ that = this,
+ wasOpen = false,
+ select = this.element.hide(),
+ selected = select.children(':selected'),
+ value = selected.val() ? selected.text() : "",
+ wrapper = this.wrapper = $('<span>')
+ .addClass('ui-combobox')
+ .insertAfter(select);
+
+ function removeIfInvalid(element) {
+ var value = $(element).val(),
+ matcher = new RegExp('^' + $.ui.autocomplete.escapeRegex(value) + '$'),
+ valid = false;
+ select.children('option').each(function() {
+ if ($(this).text().match(matcher)) {
+ this.selected = valid = true;
+ return false;
+ }
+ });
+
+ if (!valid) {
+ $(element).val('');
+ select.val('');
+ input.data('autocomplete').term = '';
+ }
+ }
+
+ input = $('<input>')
+ .appendTo(wrapper)
+ .val(value)
+ .attr('title', '')
+ .addClass('ui-state-default ui-combobox-input')
+ .autocomplete({
+ delay: 0,
+ minLength: 0,
+ source: function (request, response) {
+ var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), 'i');
+ response(select.children('option').map(function() {
+ var text = $(this).text();
+ if (this.value && (!request.term || matcher.test(text))) {
+ return {
+ label: text.replace(
+ new RegExp(
+ '(?![^&;]+;)(?!<[^<>]*)(' +
+ $.ui.autocomplete.escapeRegex(request.term) +
+ ')(?![^<>]*>)(?![^&;]+;)', 'gi'
+ ), '<strong>$1</strong>'),
+ value: text,
+ option: this
+ };
+ }
+ }));
+ },
+ select: function(event, ui) {
+ ui.item.option.selected = true;
+ that._trigger('selected', event, {item: ui.item.option});
+ },
+ change: function(event, ui) {
+ if (!ui.item) {
+ removeIfInvalid(this);
+ }
+ }
+ }).addClass('ui-widget ui-widget-content ui-corner-left');
+
+ input.data('autocomplete')._renderItem = function(ul, item) {
+ return $('<li>')
+ .data('item.autocomplete', item)
+ .append('<a>' + item.label + '</a>')
+ .appendTo(ul);
+ };
+
+ $('<a>')
+ .attr('tabIndex', -1)
+ .attr('title', 'Show all users')
+ .appendTo(wrapper)
+ .button({
+ icons: {
+ primary: 'ui-icon-triangle-1-s'
+ },
+ text: false
+ })
+ .removeClass('ui-corner-all')
+ .addClass('ui-corner-right ui-combobox-toggle')
+ .mousedown(function() {
+ wasOpen = input.autocomplete('widget').is(':visible');
+ })
+ .click(function() {
+ input.focus();
+ if (wasOpen) {
+ return;
+ }
+ input.autocomplete('search', '');
+ });
+ },
+
+ _destroy: function() {
+ this.wrapper.remove();
+ this.element.show();
+ }
+ });
+})(jQuery);
+
+$(function() {
+ $('select.project-user-combobox').combobox();
+});
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70af6ba4/Allura/allura/templates/widgets/project_user_combo.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/project_user_combo.html b/Allura/allura/templates/widgets/project_user_combo.html
new file mode 100644
index 0000000..cf5af39
--- /dev/null
+++ b/Allura/allura/templates/widgets/project_user_combo.html
@@ -0,0 +1,5 @@
+<select id="{{id}}" name="{{name}}" class="project-user-combobox{{className and ' %s' % className or ''}}">
+{% for o in options %}
+ <option{% if o.selected %} selected{% endif %} value="{{o.html_value}}">{{o.label|e}}</option>
+{% endfor %}
+</select>
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70af6ba4/ForgeTracker/forgetracker/templates/tracker/ticket.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker/ticket.html b/ForgeTracker/forgetracker/templates/tracker/ticket.html
index 1d229fe..892a45d 100644
--- a/ForgeTracker/forgetracker/templates/tracker/ticket.html
+++ b/ForgeTracker/forgetracker/templates/tracker/ticket.html
@@ -34,6 +34,7 @@
{% block edit_box %}
<div class="editbox">
<div class="form_holder" style="display: none">
+ {{c.user_combo.display()}}
{{c.ticket_form.display(action='%supdate_ticket_from_widget' % ticket.url(),
value=ticket, ticket=ticket, show_comment=True)}}
</div>
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/70af6ba4/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index cc477d6..cb6db70 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1138,6 +1138,7 @@ class TicketController(BaseController):
c.subscribe_form = W.ticket_subscribe_form
c.ticket_custom_field = W.ticket_custom_field
c.vote_form = W.vote_form
+ c.user_combo = ffw.ProjectUserCombo()
tool_subscribed = M.Mailbox.subscribed()
if tool_subscribed:
subscribed = False