153 lines
5.6 KiB
JavaScript
153 lines
5.6 KiB
JavaScript
(function(context,$) {
|
|
|
|
"use strict";
|
|
|
|
context.JK = context.JK || {};
|
|
context.JK.InstrumentSelectorDeferred = null;
|
|
context.JK.InstrumentSelector = (function(app, parentSelector) {
|
|
|
|
var logger = context.JK.logger;
|
|
var rest = new context.JK.Rest();
|
|
var _instruments = []; // will be list of structs: [ {label:xxx, value:yyy}, {...}, ... ]
|
|
var _rsvp = false;
|
|
if (typeof(_parentSelector)=="undefined") {_parentSelector=null}
|
|
var _parentSelector = parentSelector;
|
|
var deferredInstruments = null;
|
|
var self = this;
|
|
|
|
function reset() {
|
|
$('input[type="checkbox"]', _parentSelector).attr('checked', '');
|
|
if (_rsvp) {
|
|
$('select.rsvp_count option', _parentSelector).eq(0).prop('selected', true);
|
|
$('select.rsvp_level option', _parentSelector).eq(0).prop('selected', true);
|
|
}
|
|
else {
|
|
$('select option', _parentSelector).eq(0).prop('selected', true);
|
|
}
|
|
}
|
|
|
|
function instrumentsLoaded(response) {
|
|
$.each(response, function (index) {
|
|
_instruments.push({
|
|
id: 'instrument-' + _rsvp + '-' + index,
|
|
value: this.id,
|
|
label: this.description
|
|
});
|
|
});
|
|
}
|
|
|
|
function render(parentSelector, userInstruments) {
|
|
userInstruments = typeof userInstruments !== 'undefined' ? userInstruments : [];
|
|
|
|
_parentSelector = parentSelector;
|
|
$(parentSelector).empty();
|
|
var template = null;
|
|
if (_rsvp) {
|
|
template = $('#template-instrument-rsvp-option').html();
|
|
}
|
|
else {
|
|
template = $('#template-instrument-option').html();
|
|
}
|
|
|
|
var userInstrumentList = [];
|
|
$.each(userInstruments, function(index) {
|
|
userInstrumentList.push({
|
|
id: 'instrument-false-' + this.instrument_id.replace(' ', '-'),
|
|
value: this.instrument_id,
|
|
label: this.description,
|
|
level: this.level
|
|
});
|
|
});
|
|
|
|
$.each(userInstrumentList, function (index, value) {
|
|
var instrumentOptionHtml = $(context.JK.fillTemplate(template, value));
|
|
$(_parentSelector).append(instrumentOptionHtml);
|
|
context.JK.dropdown(instrumentOptionHtml.find('select'));
|
|
});
|
|
|
|
// do not auto-pick anything for the user currently
|
|
//setSelectedInstruments(userInstrumentList);
|
|
|
|
$.each(_instruments, function(index, instrument) {
|
|
var isRendered = false;
|
|
$.each(userInstrumentList, function(index, userInstrument) {
|
|
if (instrument.value == userInstrument.value) {
|
|
isRendered = true;
|
|
}
|
|
})
|
|
if (!isRendered) {
|
|
var instrumentOptionHtml = $(context.JK.fillTemplate(template, instrument));
|
|
$(_parentSelector).append(instrumentOptionHtml);
|
|
context.JK.dropdown(instrumentOptionHtml.find('select'));
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function getSelectedInstruments() {
|
|
var selectedInstruments = [];
|
|
var $selectedVal = $('input[type="checkbox"]:checked', _parentSelector);
|
|
$.each($selectedVal, function (index, value) {
|
|
var id = $(value).attr('session-instrument-id');
|
|
var name = $('label[for="' + $(value).attr('id') + '"]', _parentSelector).text().trim();
|
|
if (_rsvp) {
|
|
var count = $('select[session-instrument-id="' + id + '"].rsvp-count', _parentSelector).val();
|
|
var rsvp_level = $('select[session-instrument-id="' + id + '"].rsvp-level', _parentSelector).val();
|
|
selectedInstruments.push({id: id, name: name, count: count, level: rsvp_level});
|
|
}
|
|
else {
|
|
var level = $('select[session-instrument-id="' + id + '"]', _parentSelector).val();
|
|
selectedInstruments.push({id: id, name: name, level: level});
|
|
}
|
|
});
|
|
|
|
return selectedInstruments;
|
|
}
|
|
|
|
function setSelectedInstruments(instrumentList) {
|
|
if (!instrumentList) {
|
|
return;
|
|
}
|
|
$.each(instrumentList, function (index, value) {
|
|
$('input[type="checkbox"][session-instrument-id="' + value.id + '"]')
|
|
.attr('checked', 'checked')
|
|
.iCheck({
|
|
checkboxClass: 'icheckbox_minimal',
|
|
radioClass: 'iradio_minimal',
|
|
inheritClass: true
|
|
});
|
|
if (_rsvp) {
|
|
$('select[session-instrument-id="' + value.id + '"].rsvp-count', _parentSelector).val(value.count);
|
|
$('select[session-instrument-id="' + value.id + '"].rsvp-level', _parentSelector).val(value.level);
|
|
}
|
|
else {
|
|
$('select[session-instrument-id="' + value.id + '"]').val(value.level);
|
|
}
|
|
});
|
|
}
|
|
|
|
function initialize(rsvp) {
|
|
_rsvp = rsvp;
|
|
// XXX; _instruments should be populated in a template, rather than round-trip to server
|
|
if(!context.JK.InstrumentSelectorDeferred) {
|
|
// this dance is to make sure there is only one server request instead of InstrumentSelector instances *
|
|
context.JK.InstrumentSelectorDeferred = rest.getInstruments()
|
|
}
|
|
|
|
context.JK.InstrumentSelectorDeferred
|
|
.done(function(response) {instrumentsLoaded(response)})
|
|
.fail(app.ajaxError)
|
|
|
|
return this;
|
|
}
|
|
|
|
this.initialize = initialize;
|
|
this.getSelectedInstruments = getSelectedInstruments;
|
|
this.setSelectedInstruments = setSelectedInstruments;
|
|
this.render = function() {
|
|
var _args = arguments;
|
|
context.JK.InstrumentSelectorDeferred.done(function(){render.apply(self, _args)})
|
|
}
|
|
});
|
|
|
|
})(window,jQuery); |