Project

General

Profile

Defect #17071 » patch_commit_6682c6d40dc8.patch

Persistent Watcher Checkbox Patch - Brett Patterson, 2014-06-10 16:32

View differences:

app/views/watchers/_new.html.erb
17 17
                 :project_id => @project) }')" %>
18 18

  
19 19
  <div id="users_for_watcher">
20
    <%= principals_check_box_tags('watcher[user_ids][]', users) %>
20
    <%= principals_check_box_tags('watchers[]', users) %>
21 21
  </div>
22
  <div id="users_watching_issue" style="display: none;"></div>
23
 <%= javascript_tag "var persistentWatcher = new persistWatchersList('watcher[user_ids][]', 'users_watching_issue', 'users_for_watcher');" %>
24
  <%= javascript_tag do -%>
25
  	$(document).ajaxSuccess(function (evt, xhr, settings ) {
26
	  if (/^\/watchers\/autocomplete_for_user\?/.test(settings.url)) {
27
		  persistentWatcher.bindCheckboxes();
28
	  }
29
  	});
30
  <% end -%>
31

  
22 32

  
23 33
  <p class="buttons">
24 34
    <%= submit_tag l(:button_add), :name => nil, :onclick => "hideModal(this);" %>
app/views/watchers/autocomplete_for_user.html.erb
1
<%= principals_check_box_tags 'watcher[user_ids][]', @users %>
1
<%= principals_check_box_tags 'watchers[]', @users %>
public/javascripts/application.js
602 602
function toggleDisabledInit() {
603 603
  $('input[data-disables], input[data-enables]').each(toggleDisabledOnChange);
604 604
}
605

  
606
function persistWatchersList(inputName, inputContainer, checkboxContainer) {
607
	this.inputName = inputName;
608
	this.inputContainer = $('#' + inputContainer);
609
	this.checkboxContainer = $('#' + checkboxContainer);
610
	
611
	this.bindCheckboxes();
612
}
613

  
614
persistWatchersList.prototype = {
615
	bindCheckboxes: function () {
616
		var oThis = this;
617
		this.checkboxContainer.find("input[type='checkbox']").each(function(idx) {
618
			var checkbox = $(this);
619
			oThis.inputContainer.find("input[type='hidden']").each(function (index) {
620
				if ($(this).val() == checkbox.val()) {
621
					checkbox.prop('checked', true);
622
				}
623
			});
624
			checkbox.change(function (evt) { oThis.watcherChange($(this)); });
625
		});
626
	},
627
	
628
	watcherChange: function(input) {
629
		if (input.is(':checked')) {
630
			this.inputContainer.append(
631
				'<input type="hidden" name="' + this.inputName + '" value="' + input.val() + '" />'
632
			);
633
		} else {
634
			this.inputContainer.find('input[name="' + this.inputName + '"][value="' + input.val() + '"]').remove();
635
		}
636
	}
637
}
638

  
605 639
$(document).ready(function(){
606 640
  $('#content').on('change', 'input[data-disables], input[data-enables]', toggleDisabledOnChange);
607 641
  toggleDisabledInit();
(1-1/3)