| 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;
});
 |