Devices: NodesLearnt table integration with FuelUx Datagrid.
[controller.git] / opendaylight / web / root / src / main / resources / js / fuelux / search.js
diff --git a/opendaylight/web/root/src/main/resources/js/fuelux/search.js b/opendaylight/web/root/src/main/resources/js/fuelux/search.js
new file mode 100755 (executable)
index 0000000..7f6a27b
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Fuel UX Search
+ * https://github.com/ExactTarget/fuelux
+ *
+ * Copyright (c) 2012 ExactTarget
+ * Licensed under the MIT license.
+ */
+
+define(['require','jquery'],function(require) {
+
+       var $ = require('jquery');
+
+
+       // SEARCH CONSTRUCTOR AND PROTOTYPE
+
+       var Search = function (element, options) {
+               this.$element = $(element);
+               this.options = $.extend({}, $.fn.search.defaults, options);
+
+               this.$button = this.$element.find('button')
+                       .on('click', $.proxy(this.buttonclicked, this));
+
+               this.$input = this.$element.find('input')
+                       .on('keydown', $.proxy(this.keypress, this))
+                       .on('keyup', $.proxy(this.keypressed, this));
+
+               this.$icon = this.$element.find('i');
+               this.activeSearch = '';
+       };
+
+       Search.prototype = {
+
+               constructor: Search,
+
+               search: function (searchText) {
+                       this.$icon.attr('class', 'icon-remove');
+                       this.activeSearch = searchText;
+                       this.$element.trigger('searched', searchText);
+               },
+
+               clear: function () {
+                       this.$icon.attr('class', 'icon-search');
+                       this.activeSearch = '';
+                       this.$input.val('');
+                       this.$element.trigger('cleared');
+               },
+
+               action: function () {
+                       var val = this.$input.val();
+                       var inputEmptyOrUnchanged = val === '' || val === this.activeSearch;
+
+                       if (this.activeSearch && inputEmptyOrUnchanged) {
+                               this.clear();
+                       } else if (val) {
+                               this.search(val);
+                       }
+               },
+
+               buttonclicked: function (e) {
+                       e.preventDefault();
+                       if ($(e.currentTarget).is('.disabled, :disabled')) return;
+                       this.action();
+               },
+
+               keypress: function (e) {
+                       if (e.which === 13) {
+                               e.preventDefault();
+                       }
+               },
+
+               keypressed: function (e) {
+                       var val, inputPresentAndUnchanged;
+
+                       if (e.which === 13) {
+                               e.preventDefault();
+                               this.action();
+                       } else {
+                               val = this.$input.val();
+                               inputPresentAndUnchanged = val && (val === this.activeSearch);
+                               this.$icon.attr('class', inputPresentAndUnchanged ? 'icon-remove' : 'icon-search');
+                       }
+               },
+
+               disable: function () {
+                       this.$input.attr('disabled', 'disabled');
+                       this.$button.addClass('disabled');
+               },
+
+               enable: function () {
+                       this.$input.removeAttr('disabled');
+                       this.$button.removeClass('disabled');
+               }
+
+       };
+
+
+       // SEARCH PLUGIN DEFINITION
+
+       $.fn.search = function (option) {
+               return this.each(function () {
+                       var $this = $(this);
+                       var data = $this.data('search');
+                       var options = typeof option === 'object' && option;
+
+                       if (!data) $this.data('search', (data = new Search(this, options)));
+                       if (typeof option === 'string') data[option]();
+               });
+       };
+
+       $.fn.search.defaults = {};
+
+       $.fn.search.Constructor = Search;
+
+
+       // SEARCH DATA-API
+
+       $(function () {
+               $('body').on('mousedown.search.data-api', '.search', function () {
+                       var $this = $(this);
+                       if ($this.data('search')) return;
+                       $this.search($this.data());
+               });
+       });
+
+});