diff --git a/IPython/html/widgets/widget.py b/IPython/html/widgets/widget.py index e60b39cda..e9295756f 100644 --- a/IPython/html/widgets/widget.py +++ b/IPython/html/widgets/widget.py @@ -183,8 +183,9 @@ class Widget(LoggingConfigurable): def get_css(self, key, selector=""): - """Get a CSS property of the widget views (shared among all of the - views) + """Get a CSS property of the widget. Note, this function does not + actually request the CSS from the front-end; Only properties that have + been set with set_css can be read. Parameters ---------- @@ -199,12 +200,16 @@ class Widget(LoggingConfigurable): return None - def set_css(self, key, value, selector=""): - """Set a CSS property of the widget views (shared among all of the - views) + def set_css(self, *args, **kwargs): + """Set one or more CSS properties of the widget (shared among all of the + views). This function has two signatures: + - set_css(css_dict, [selector='']) + - set_css(key, value, [selector='']) Parameters ---------- + css_dict : dict + CSS key/value pairs to apply key: unicode CSS key value @@ -212,13 +217,33 @@ class Widget(LoggingConfigurable): selector: unicode (optional) JQuery selector to use to apply the CSS key/value. """ - if selector not in self._css: - self._css[selector] = {} - - # Only update the property if it has changed. - if not (key in self._css[selector] and value in self._css[selector][key]): - self._css[selector][key] = value - self.send_state('_css') # Send new state to client. + selector = kwargs.get('selector', '') + + # Signature 1: set_css(css_dict, [selector='']) + if len(args) == 1: + if isinstance(args[0], dict): + for (key, value) in args[0].items(): + self.set_css(key, value, selector=selector) + else: + raise Exception('css_dict must be a dict.') + + # Signature 2: set_css(key, value, [selector='']) + elif len(args) == 2 or len(args) == 3: + + # Selector can be a positional arg if it's the 3rd value + if len(args) == 3: + selector = args[2] + if selector not in self._css: + self._css[selector] = {} + + # Only update the property if it has changed. + key = args[0] + value = args[1] + if not (key in self._css[selector] and value in self._css[selector][key]): + self._css[selector][key] = value + self.send_state('_css') # Send new state to client. + else: + raise Exception('set_css only accepts 1-3 arguments') def add_class(self, class_name, selector=""):