You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.4 KiB
159 lines
4.4 KiB
YUI.add('moodle-tool_capability-search', function (Y, NAME) {
|
|
|
|
/**
|
|
* This file contains the capability overview search functionality.
|
|
*
|
|
* @module moodle-tool_capability-search
|
|
*/
|
|
|
|
/**
|
|
* Constructs a new capability search manager.
|
|
*
|
|
* @namespace M.tool_capability
|
|
* @class Search
|
|
* @constructor
|
|
* @extends Base
|
|
*/
|
|
var SEARCH = function() {
|
|
SEARCH.superclass.constructor.apply(this, arguments);
|
|
};
|
|
SEARCH.prototype = {
|
|
/**
|
|
* The search form.
|
|
* @property form
|
|
* @type Node
|
|
* @protected
|
|
*/
|
|
form: null,
|
|
/**
|
|
* The capability select node.
|
|
* @property select
|
|
* @type Node
|
|
* @protected
|
|
*/
|
|
select: null,
|
|
/**
|
|
* An associative array of search option. Populated from the select node above during initialisation.
|
|
* @property selectoptions
|
|
* @type Object
|
|
* @protected
|
|
*/
|
|
selectoptions: {},
|
|
/**
|
|
* The search input field.
|
|
* @property input
|
|
* @type Node
|
|
* @protected
|
|
*/
|
|
input: null,
|
|
/**
|
|
* The submit button for the form.
|
|
* @property button
|
|
* @type Node
|
|
* @protected
|
|
*/
|
|
button: null,
|
|
/**
|
|
* The last search node if there is one.
|
|
* If there is a last search node then the last search term will be persisted between requests.
|
|
* @property lastsearch
|
|
* @type Node
|
|
* @protected
|
|
*/
|
|
lastsearch: null,
|
|
/**
|
|
* Constructs the search manager.
|
|
* @method initializer
|
|
*/
|
|
initializer: function() {
|
|
this.form = Y.one('#capability-overview-form');
|
|
this.select = this.form.one('select[data-search=capability]');
|
|
this.select.setStyle('minWidth', this.select.get('offsetWidth'));
|
|
this.select.get('options').each(function(option) {
|
|
var capability = option.get('value');
|
|
this.selectoptions[capability] = option;
|
|
}, this);
|
|
this.button = this.form.all('input[type=submit]');
|
|
this.lastsearch = this.form.one('input[name=search]');
|
|
|
|
var div = Y.Node.create('<div id="capabilitysearchui"></div>'),
|
|
label = Y.Node.create('<label for="capabilitysearch">' + this.get('strsearch') + '</label>');
|
|
this.input = Y.Node.create('<input type="text" id="capabilitysearch" />');
|
|
|
|
div.append(label).append(this.input);
|
|
|
|
this.select.insert(div, 'before');
|
|
|
|
this.input.on('keyup', this.typed, this);
|
|
this.select.on('change', this.validate, this);
|
|
|
|
if (this.lastsearch) {
|
|
this.input.set('value', this.lastsearch.get('value'));
|
|
this.typed();
|
|
if (this.select.one('option[selected]')) {
|
|
this.select.set('scrollTop', this.select.one('option[selected]').get('getX'));
|
|
}
|
|
}
|
|
|
|
this.validate();
|
|
},
|
|
/**
|
|
* Disables the submit button if there are no capabilities selected.
|
|
* @method validate
|
|
*/
|
|
validate: function() {
|
|
this.button.set('disabled', (this.select.get('value') === ''));
|
|
},
|
|
/**
|
|
* Called when ever the user types into the search field.
|
|
* This method hides any capabilities that don't match the search term.
|
|
* @method typed
|
|
*/
|
|
typed: function() {
|
|
var search = this.input.get('value'),
|
|
matching = 0,
|
|
last = null,
|
|
capability;
|
|
if (this.lastsearch) {
|
|
this.lastsearch.set('value', search);
|
|
}
|
|
this.select.all('option').remove();
|
|
for (capability in this.selectoptions) {
|
|
if (capability.indexOf(search) >= 0) {
|
|
matching++;
|
|
last = this.selectoptions[capability];
|
|
this.select.append(this.selectoptions[capability]);
|
|
}
|
|
}
|
|
if (matching === 0) {
|
|
this.input.addClass("error");
|
|
} else {
|
|
this.input.removeClass("error");
|
|
if (matching === 1) {
|
|
last.set('selected', true);
|
|
}
|
|
}
|
|
this.validate();
|
|
}
|
|
};
|
|
Y.extend(SEARCH, Y.Base, SEARCH.prototype, {
|
|
NAME: 'tool_capability-search',
|
|
ATTRS: {
|
|
strsearch: {}
|
|
}
|
|
});
|
|
|
|
M.tool_capability = M.tool_capability || {};
|
|
|
|
/**
|
|
* Initialises capability search functionality.
|
|
* @static
|
|
* @method M.tool_capability.init_capability_search
|
|
* @param {Object} options
|
|
*/
|
|
M.tool_capability.init_capability_search = function(options) {
|
|
new SEARCH(options);
|
|
};
|
|
|
|
|
|
}, '@VERSION@', {"requires": ["base", "node"]});
|
|
|