define([

  'jquery',

  './utils'

], function ($, CompatUtils) {

  // No-op CSS adapter that discards all classes by default

  function _dropdownAdapter (clazz) {

    return null;

  }



  function DropdownCSS () { }



  DropdownCSS.prototype.render = function (decorated) {

    var $dropdown = decorated.call(this);



    var dropdownCssClass = this.options.get('dropdownCssClass') || '';



    if ($.isFunction(dropdownCssClass)) {

      dropdownCssClass = dropdownCssClass(this.$element);

    }



    var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');

    dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;



    if (dropdownCssClass.indexOf(':all:') !== -1) {

      dropdownCssClass = dropdownCssClass.replace(':all:', '');



      var _cssAdapter = dropdownCssAdapter;



      dropdownCssAdapter = function (clazz) {

        var adapted = _cssAdapter(clazz);



        if (adapted != null) {

          // Append the old one along with the adapted one

          return adapted + ' ' + clazz;

        }



        return clazz;

      };

    }



    var dropdownCss = this.options.get('dropdownCss') || {};



    if ($.isFunction(dropdownCss)) {

      dropdownCss = dropdownCss(this.$element);

    }



    CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);



    $dropdown.css(dropdownCss);

    $dropdown.addClass(dropdownCssClass);



    return $dropdown;

  };



  return DropdownCSS;

});

