##// END OF EJS Templates
Backport PR #5459: Fix interact animation page jump FF...
Backport PR #5459: Fix interact animation page jump FF Firefox doesn't render images immediately as the data is available. When animating the way that we animate, this causes the output area to collapse quickly before returning to its original size. When the output area collapses, FireFox scrolls upwards in attempt to compensate for the lost vertical content (so it looks like you are on the same spot in the page, with respect to the contents below the image's prior location). The solution is to resize the image output after the `img onload` event has fired. This PR: - Releases the `clear_output` height lock after the image has been loaded (instead of immediately or using a timeout). - Removes a `setTimeout` call in the `append_output` method. - `clear_output` in zmqshell no longer sends `\r` to the stream outputs. closes #5128

File last commit:

r11009:e16cf2f8
r16229:ff1462d3
Show More
styles.py
122 lines | 4.1 KiB | text/x-python | PythonLexer
MinRK
exposed pygments styles as ipythonqt options
r3170 """ Style utilities, templates, and defaults for syntax highlighting widgets.
"""
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
from colorsys import rgb_to_hls
from pygments.styles import get_style_by_name
from pygments.token import Token
#-----------------------------------------------------------------------------
# Constants
#-----------------------------------------------------------------------------
# The default light style sheet: black text on a white background.
default_light_style_template = '''
QPlainTextEdit, QTextEdit { background-color: %(bgcolor)s;
color: %(fgcolor)s ;
selection-background-color: %(select)s}
.error { color: red; }
.in-prompt { color: navy; }
.in-prompt-number { font-weight: bold; }
.out-prompt { color: darkred; }
.out-prompt-number { font-weight: bold; }
Matthias BUSSONNIER
new completer for qtconsole....
r7389 .inverted { background-color: %(fgcolor)s ; color:%(bgcolor)s;}
MinRK
exposed pygments styles as ipythonqt options
r3170 '''
default_light_style_sheet = default_light_style_template%dict(
bgcolor='white', fgcolor='black', select="#ccc")
default_light_syntax_style = 'default'
# The default dark style sheet: white text on a black background.
default_dark_style_template = '''
QPlainTextEdit, QTextEdit { background-color: %(bgcolor)s;
color: %(fgcolor)s ;
selection-background-color: %(select)s}
QFrame { border: 1px solid grey; }
.error { color: red; }
.in-prompt { color: lime; }
.in-prompt-number { color: lime; font-weight: bold; }
.out-prompt { color: red; }
.out-prompt-number { color: red; font-weight: bold; }
Matthias BUSSONNIER
new completer for qtconsole....
r7389 .inverted { background-color: %(fgcolor)s ; color:%(bgcolor)s;}
MinRK
exposed pygments styles as ipythonqt options
r3170 '''
default_dark_style_sheet = default_dark_style_template%dict(
bgcolor='black', fgcolor='white', select="#555")
default_dark_syntax_style = 'monokai'
MinRK
added --colors flag to ipythonqt
r3171 # The default monochrome
default_bw_style_sheet = '''
QPlainTextEdit, QTextEdit { background-color: white;
color: black ;
selection-background-color: #cccccc}
.in-prompt-number { font-weight: bold; }
.out-prompt-number { font-weight: bold; }
Matthias BUSSONNIER
new completer for qtconsole....
r7389 .inverted { background-color: black ; color: white;}
MinRK
added --colors flag to ipythonqt
r3171 '''
default_bw_syntax_style = 'bw'
MinRK
exposed pygments styles as ipythonqt options
r3170 def hex_to_rgb(color):
"""Convert a hex color to rgb integer tuple."""
if color.startswith('#'):
color = color[1:]
if len(color) == 3:
color = ''.join([c*2 for c in color])
if len(color) != 6:
return False
try:
r = int(color[:2],16)
MinRK
fix hex_to_rgb() used to guess light/dark in qtconsole...
r6053 g = int(color[2:4],16)
b = int(color[4:],16)
MinRK
exposed pygments styles as ipythonqt options
r3170 except ValueError:
return False
else:
return r,g,b
def dark_color(color):
"""Check whether a color is 'dark'.
Currently, this is simply whether the luminance is <50%"""
rgb = hex_to_rgb(color)
if rgb:
return rgb_to_hls(*rgb)[1] < 128
else: # default to False
return False
def dark_style(stylename):
"""Guess whether the background of the style with name 'stylename'
counts as 'dark'."""
return dark_color(get_style_by_name(stylename).background_color)
def get_colors(stylename):
MinRK
added --colors flag to ipythonqt
r3171 """Construct the keys to be used building the base stylesheet
from a templatee."""
MinRK
exposed pygments styles as ipythonqt options
r3170 style = get_style_by_name(stylename)
fgcolor = style.style_for_token(Token.Text)['color'] or ''
if len(fgcolor) in (3,6):
# could be 'abcdef' or 'ace' hex, which needs '#' prefix
try:
int(fgcolor, 16)
except TypeError:
pass
else:
fgcolor = "#"+fgcolor
return dict(
bgcolor = style.background_color,
select = style.highlight_color,
fgcolor = fgcolor
)
MinRK
color settings from ipythonqt propagate down to the ZMQInteractiveShell in the Kernel
r3173 def sheet_from_template(name, colors='lightbg'):
MinRK
exposed pygments styles as ipythonqt options
r3170 """Use one of the base templates, and set bg/fg/select colors."""
MinRK
added --colors flag to ipythonqt
r3171 colors = colors.lower()
MinRK
color settings from ipythonqt propagate down to the ZMQInteractiveShell in the Kernel
r3173 if colors=='lightbg':
MinRK
exposed pygments styles as ipythonqt options
r3170 return default_light_style_template%get_colors(name)
MinRK
color settings from ipythonqt propagate down to the ZMQInteractiveShell in the Kernel
r3173 elif colors=='linux':
MinRK
added --colors flag to ipythonqt
r3171 return default_dark_style_template%get_colors(name)
elif colors=='nocolor':
return default_bw_style_sheet
MinRK
exposed pygments styles as ipythonqt options
r3170 else:
MinRK
added --colors flag to ipythonqt
r3171 raise KeyError("No such color scheme: %s"%colors)